[{"data":1,"prerenderedAt":173240},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-11-10-docker\u002Fch1-jian-jie":3,"wiki-doc-nav":333},{"id":4,"title":5,"body":6,"description":316,"extension":326,"meta":327,"navigation":328,"path":329,"seo":330,"stem":331,"__hash__":332},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":8,"toc":315},"minimark",[9,13,18,30,37,46,49,56,59,62,66,79,83,136,139,142,145,148,151,155,193,199,203,257,262,265,268,273,276,281,284,287,291,294,297,301],[10,11,5],"h1",{"id":12},"_1简介",[14,15,17],"h3",{"id":16},"_11什么是-docker","1.1什么是 Docker？",[19,20,21,22,26,27],"p",{},"Docker 是一个开源的 ",[23,24,25],"strong",{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[23,28,29],{},"一次构建，到处运行。",[19,31,32,33,36],{},"“ ",[23,34,35],{},"一次构建，到处运行"," ”也就是说：",[38,39,40],"ol",{},[41,42,43],"li",{},[23,44,45],{},"之前：",[19,47,48],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[38,50,51],{},[41,52,53],{},[23,54,55],{},"使用docker后：",[19,57,58],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,60,61],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[14,63,65],{"id":64},"_12它是怎么工作的","1.2.它是怎么工作的？",[67,68,69,72],"ul",{},[41,70,71],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[41,73,74,75,78],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[23,76,77],{},"无论在哪运行都一样稳定"," 。",[14,80,82],{"id":81},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[84,85,86,100],"table",{},[87,88,89],"thead",{},[90,91,92,97],"tr",{},[93,94,96],"th",{"align":95},"left","概念",[93,98,99],{"align":95},"解释",[101,102,103,112,120,128],"tbody",{},[90,104,105,109],{},[106,107,108],"td",{"align":95},"镜像",[106,110,111],{"align":95},"Image，运行容器的模板，像是一个应用快照",[90,113,114,117],{},[106,115,116],{"align":95},"容器",[106,118,119],{"align":95},"Container，运行中的镜像实例，有自己的文件系统、网络等",[90,121,122,125],{},[106,123,124],{"align":95},"Dockerfile",[106,126,127],{"align":95},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[90,129,130,133],{},[106,131,132],{"align":95},"仓库",[106,134,135],{"align":95},"Registry，存放镜像的地方，比如 Docker Hub",[19,137,138],{},"抽象化理解:",[19,140,141],{},"Docker镜像≈C++类",[19,143,144],{},"Docker容器≈C++类实例(即对象)",[19,146,147],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,149,150],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[14,152,154],{"id":153},"_14类比理解","1.4.类比理解",[84,156,157,167],{},[87,158,159],{},[90,160,161,164],{},[93,162,163],{"align":95},"传统部署",[93,165,166],{"align":95},"Docker部署",[101,168,169,177,185],{},[90,170,171,174],{},[106,172,173],{"align":95},"手动安装依赖、调试版本不一致问题",[106,175,176],{"align":95},"一次打包环境和代码",[90,178,179,182],{},[106,180,181],{"align":95},"程序“裸奔”跑在系统上",[106,183,184],{"align":95},"程序“穿着容器”隔离运行",[90,186,187,190],{},[106,188,189],{"align":95},"容易“在我电脑上能跑”",[106,191,192],{"align":95},"保证“无论在哪都能跑”",[19,194,195,196],{},"就像快递包裹： ",[23,197,198],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[14,200,202],{"id":201},"_15docker-的核心优势","1.5.Docker 的核心优势",[84,204,205,215],{},[87,206,207],{},[90,208,209,212],{},[93,210,211],{"align":95},"优势",[93,213,214],{"align":95},"说明",[101,216,217,225,233,241,249],{},[90,218,219,222],{},[106,220,221],{"align":95},"轻量级",[106,223,224],{"align":95},"基于系统内核共享，启动速度快，占资源少",[90,226,227,230],{},[106,228,229],{"align":95},"跨平台",[106,231,232],{"align":95},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[90,234,235,238],{},[106,236,237],{"align":95},"易于迁移部署",[106,239,240],{"align":95},"应用和环境一起封装，不怕依赖不一致",[90,242,243,246],{},[106,244,245],{"align":95},"易于版本控制",[106,247,248],{"align":95},"镜像版本可控，支持回滚",[90,250,251,254],{},[106,252,253],{"align":95},"生态丰富",[106,255,256],{"align":95},"Docker Hub 上有成千上万的现成镜像可用",[38,258,259],{},[41,260,261],{},"在Linux上可以几乎实现无性能损失。",[19,263,264],{},"docker里的发行版和本机共用Linux内核。",[19,266,267],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[38,269,270],{},[41,271,272],{},"可以快速部署在绝大多数Linux发行版",[19,274,275],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[38,277,278],{},[41,279,280],{},"配置环境简单",[19,282,283],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,285,286],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[38,288,289],{},[41,290,253],{},[19,292,293],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,295,296],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[14,298,300],{"id":299},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[67,302,303,306,309,312],{},[41,304,305],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[41,307,308],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[41,310,311],{},"微服务架构：每个服务一个容器，灵活组合",[41,313,314],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":316,"searchDepth":317,"depth":317,"links":318},"",2,[319,321,322,323,324,325],{"id":16,"depth":320,"text":17},3,{"id":64,"depth":320,"text":65},{"id":81,"depth":320,"text":82},{"id":153,"depth":320,"text":154},{"id":201,"depth":320,"text":202},{"id":299,"depth":320,"text":300},"md",{},true,"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":5,"description":316},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",[334,5439,6547,7967,10956,12307,13796,14885,23648,23661,24259,24285,24409,24650,24715,24733,24746,24793,24917,25086,25285,25465,25670,25806,25901,25938,25951,26176,26917,27625,27646,28666,30297,30448,30461,30473,30774,50586,50601,50618,50651,53523,76871,93016,93037,93150,93271,94041,94704,95065,95103,95209,95309,95352,95378,95439,97093,97194,97219,97710,98210,99290,99573,100315,100817,100829,102845,104509,106012,107710,109627,111546,113568,117038,117470,117933,118682,121626,121974,121996,122352,125659,125671,126074,126097,126244,126411,126616,126917,127474,128131,130062,131660,132309,133803,135234,136469,138163,139915,142325,142441,143376,143587,144472,145707,145935,145948,147103,149515,151883,155204,157681,159325,161102,163115,166167,168347,170874,173068],{"id":335,"title":336,"body":337,"description":316,"extension":326,"meta":5434,"navigation":328,"path":5435,"seo":5436,"stem":5437,"__hash__":5438},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":338,"toc":5406},[339,342,347,350,354,365,369,373,376,379,382,385,388,423,427,430,433,436,439,492,496,515,517,531,534,542,545,1401,1408,1424,1428,1518,1522,1528,1617,1621,1659,1663,1727,1731,1735,1742,1753,1757,1762,1766,1771,1775,1780,1784,1788,1793,2063,2068,2206,2211,2468,2471,2479,2483,2488,2591,2594,2900,2909,3010,3013,3016,3019,3022,3282,3287,3427,3430,3609,3612,3740,3743,3895,3899,3904,3907,3918,3926,3929,4036,4040,4044,4049,4099,4104,4109,4133,4138,4191,4194,4199,4376,4381,4666,4671,5068,5072,5077,5134,5139,5147,5150,5290,5293,5402],[10,340,336],{"id":341},"_1基础入门",[343,344,346],"h2",{"id":345},"_11注释","1.1注释",[19,348,349],{},"\u002F\u002F或者\u002F* *\u002F",[343,351,353],{"id":352},"_12命名","1.2命名",[38,355,356,359,362],{},[41,357,358],{},"字母数字下划线",[41,360,361],{},"开头必须是字母或_",[41,363,364],{},"不能使用关键词",[343,366,368],{"id":367},"_13数据类型","1.3数据类型",[14,370,372],{"id":371},"_131整形","1.3.1整形",[19,374,375],{},"short 短整形 2",[19,377,378],{},"int 整形 4",[19,380,381],{},"long 长整形 win4 linux32位4 linux64位8",[19,383,384],{},"long long 长长整形 8",[19,386,387],{},"利用sizeof可以求数据类型占用的内存空间大小",[389,390,394],"pre",{"className":391,"code":392,"language":393,"meta":316,"style":316},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[395,396,397,416],"code",{"__ignoreMap":316},[398,399,402,406,410,413],"span",{"class":400,"line":401},"line",1,[398,403,405],{"class":404},"szBVR","sizeof",[398,407,409],{"class":408},"sVt8B","(",[398,411,412],{"class":404},"int",[398,414,415],{"class":408},")\n",[398,417,418,420],{"class":400,"line":317},[398,419,405],{"class":404},[398,421,422],{"class":408},"(num)\n",[14,424,426],{"id":425},"_132浮点型","1.3.2浮点型",[19,428,429],{},"float 单精度 4节 7位有效数字",[19,431,432],{},"double 双精度 8节 15-16有效数字",[19,434,435],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,437,438],{},"注意点：",[389,440,442],{"className":391,"code":441,"language":393,"meta":316,"style":316},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[395,443,444,469],{"__ignoreMap":316},[398,445,446,449,452,455,459,462,465],{"class":400,"line":401},[398,447,448],{"class":404},"float",[398,450,451],{"class":408}," f1",[398,453,454],{"class":404},"=",[398,456,458],{"class":457},"sj4cs","3.14",[398,460,461],{"class":404},"f",[398,463,464],{"class":408},";",[398,466,468],{"class":467},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[398,470,471,473,476,478,481,484,487,489],{"class":400,"line":317},[398,472,448],{"class":404},[398,474,475],{"class":408}," f2",[398,477,454],{"class":404},[398,479,480],{"class":457},"3",[398,482,483],{"class":404},"e",[398,485,486],{"class":457},"2",[398,488,464],{"class":408},[398,490,491],{"class":467}," \u002F\u002F科学记数法\n",[14,493,495],{"id":494},"_133字符型","1.3.3字符型",[389,497,499],{"className":391,"code":498,"language":393,"meta":316,"style":316},"char ch='a'\n",[395,500,501],{"__ignoreMap":316},[398,502,503,506,509,511],{"class":400,"line":401},[398,504,505],{"class":404},"char",[398,507,508],{"class":408}," ch",[398,510,454],{"class":404},[398,512,514],{"class":513},"sZZnC","'a'\n",[19,516,438],{},[38,518,519,522,525,528],{},[41,520,521],{},"在显示字符型变量时，只能单引号，双引号x",[41,523,524],{},"单引号内只能一个字符，不能字符串",[41,526,527],{},"c和c++字符型变量只占用一个字符",[41,529,530],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,532,533],{},"ASCII码大致由以下两部分组成：",[38,535,536,539],{},[41,537,538],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[41,540,541],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,543,544],{},"ASCII码表格：",[84,546,547,587],{},[87,548,549],{},[90,550,551,557,562,566,571,575,579,583],{},[93,552,553,556],{},[23,554,555],{},"ASCII","值",[93,558,559],{},[23,560,561],{},"控制字符",[93,563,564,556],{},[23,565,555],{},[93,567,568],{},[23,569,570],{},"字符",[93,572,573,556],{},[23,574,555],{},[93,576,577],{},[23,578,570],{},[93,580,581,556],{},[23,582,555],{},[93,584,585],{},[23,586,570],{},[101,588,589,615,641,666,691,717,742,767,793,818,844,870,896,921,947,973,999,1023,1048,1073,1098,1123,1148,1173,1198,1223,1248,1274,1299,1324,1349,1375],{},[90,590,591,594,597,600,603,606,609,612],{},[106,592,593],{},"0",[106,595,596],{},"NUT",[106,598,599],{},"32",[106,601,602],{},"(space)",[106,604,605],{},"64",[106,607,608],{},"@",[106,610,611],{},"96",[106,613,614],{},"、",[90,616,617,620,623,626,629,632,635,638],{},[106,618,619],{},"1",[106,621,622],{},"SOH",[106,624,625],{},"33",[106,627,628],{},"!",[106,630,631],{},"65",[106,633,634],{},"A",[106,636,637],{},"97",[106,639,640],{},"a",[90,642,643,645,648,651,654,657,660,663],{},[106,644,486],{},[106,646,647],{},"STX",[106,649,650],{},"34",[106,652,653],{},"\"",[106,655,656],{},"66",[106,658,659],{},"B",[106,661,662],{},"98",[106,664,665],{},"b",[90,667,668,670,673,676,679,682,685,688],{},[106,669,480],{},[106,671,672],{},"ETX",[106,674,675],{},"35",[106,677,678],{},"#",[106,680,681],{},"67",[106,683,684],{},"C",[106,686,687],{},"99",[106,689,690],{},"c",[90,692,693,696,699,702,705,708,711,714],{},[106,694,695],{},"4",[106,697,698],{},"EOT",[106,700,701],{},"36",[106,703,704],{},"$",[106,706,707],{},"68",[106,709,710],{},"D",[106,712,713],{},"100",[106,715,716],{},"d",[90,718,719,722,725,728,731,734,737,740],{},[106,720,721],{},"5",[106,723,724],{},"ENQ",[106,726,727],{},"37",[106,729,730],{},"%",[106,732,733],{},"69",[106,735,736],{},"E",[106,738,739],{},"101",[106,741,483],{},[90,743,744,747,750,753,756,759,762,765],{},[106,745,746],{},"6",[106,748,749],{},"ACK",[106,751,752],{},"38",[106,754,755],{},"&",[106,757,758],{},"70",[106,760,761],{},"F",[106,763,764],{},"102",[106,766,461],{},[90,768,769,772,775,778,781,784,787,790],{},[106,770,771],{},"7",[106,773,774],{},"BEL",[106,776,777],{},"39",[106,779,780],{},",",[106,782,783],{},"71",[106,785,786],{},"G",[106,788,789],{},"103",[106,791,792],{},"g",[90,794,795,798,801,804,806,809,812,815],{},[106,796,797],{},"8",[106,799,800],{},"BS",[106,802,803],{},"40",[106,805,409],{},[106,807,808],{},"72",[106,810,811],{},"H",[106,813,814],{},"104",[106,816,817],{},"h",[90,819,820,823,826,829,832,835,838,841],{},[106,821,822],{},"9",[106,824,825],{},"HT",[106,827,828],{},"41",[106,830,831],{},")",[106,833,834],{},"73",[106,836,837],{},"I",[106,839,840],{},"105",[106,842,843],{},"i",[90,845,846,849,852,855,858,861,864,867],{},[106,847,848],{},"10",[106,850,851],{},"LF",[106,853,854],{},"42",[106,856,857],{},"*",[106,859,860],{},"74",[106,862,863],{},"J",[106,865,866],{},"106",[106,868,869],{},"j",[90,871,872,875,878,881,884,887,890,893],{},[106,873,874],{},"11",[106,876,877],{},"VT",[106,879,880],{},"43",[106,882,883],{},"+",[106,885,886],{},"75",[106,888,889],{},"K",[106,891,892],{},"107",[106,894,895],{},"k",[90,897,898,901,904,907,909,912,915,918],{},[106,899,900],{},"12",[106,902,903],{},"FF",[106,905,906],{},"44",[106,908,780],{},[106,910,911],{},"76",[106,913,914],{},"L",[106,916,917],{},"108",[106,919,920],{},"l",[90,922,923,926,929,932,935,938,941,944],{},[106,924,925],{},"13",[106,927,928],{},"CR",[106,930,931],{},"45",[106,933,934],{},"-",[106,936,937],{},"77",[106,939,940],{},"M",[106,942,943],{},"109",[106,945,946],{},"m",[90,948,949,952,955,958,961,964,967,970],{},[106,950,951],{},"14",[106,953,954],{},"SO",[106,956,957],{},"46",[106,959,960],{},".",[106,962,963],{},"78",[106,965,966],{},"N",[106,968,969],{},"110",[106,971,972],{},"n",[90,974,975,978,981,984,987,990,993,996],{},[106,976,977],{},"15",[106,979,980],{},"SI",[106,982,983],{},"47",[106,985,986],{},"\u002F",[106,988,989],{},"79",[106,991,992],{},"O",[106,994,995],{},"111",[106,997,998],{},"o",[90,1000,1001,1004,1007,1010,1012,1015,1018,1021],{},[106,1002,1003],{},"16",[106,1005,1006],{},"DLE",[106,1008,1009],{},"48",[106,1011,593],{},[106,1013,1014],{},"80",[106,1016,1017],{},"P",[106,1019,1020],{},"112",[106,1022,19],{},[90,1024,1025,1028,1031,1034,1036,1039,1042,1045],{},[106,1026,1027],{},"17",[106,1029,1030],{},"DCI",[106,1032,1033],{},"49",[106,1035,619],{},[106,1037,1038],{},"81",[106,1040,1041],{},"Q",[106,1043,1044],{},"113",[106,1046,1047],{},"q",[90,1049,1050,1053,1056,1059,1061,1064,1067,1070],{},[106,1051,1052],{},"18",[106,1054,1055],{},"DC2",[106,1057,1058],{},"50",[106,1060,486],{},[106,1062,1063],{},"82",[106,1065,1066],{},"R",[106,1068,1069],{},"114",[106,1071,1072],{},"r",[90,1074,1075,1078,1081,1084,1086,1089,1092,1095],{},[106,1076,1077],{},"19",[106,1079,1080],{},"DC3",[106,1082,1083],{},"51",[106,1085,480],{},[106,1087,1088],{},"83",[106,1090,1091],{},"S",[106,1093,1094],{},"115",[106,1096,1097],{},"s",[90,1099,1100,1103,1106,1109,1111,1114,1117,1120],{},[106,1101,1102],{},"20",[106,1104,1105],{},"DC4",[106,1107,1108],{},"52",[106,1110,695],{},[106,1112,1113],{},"84",[106,1115,1116],{},"T",[106,1118,1119],{},"116",[106,1121,1122],{},"t",[90,1124,1125,1128,1131,1134,1136,1139,1142,1145],{},[106,1126,1127],{},"21",[106,1129,1130],{},"NAK",[106,1132,1133],{},"53",[106,1135,721],{},[106,1137,1138],{},"85",[106,1140,1141],{},"U",[106,1143,1144],{},"117",[106,1146,1147],{},"u",[90,1149,1150,1153,1156,1159,1161,1164,1167,1170],{},[106,1151,1152],{},"22",[106,1154,1155],{},"SYN",[106,1157,1158],{},"54",[106,1160,746],{},[106,1162,1163],{},"86",[106,1165,1166],{},"V",[106,1168,1169],{},"118",[106,1171,1172],{},"v",[90,1174,1175,1178,1181,1184,1186,1189,1192,1195],{},[106,1176,1177],{},"23",[106,1179,1180],{},"TB",[106,1182,1183],{},"55",[106,1185,771],{},[106,1187,1188],{},"87",[106,1190,1191],{},"W",[106,1193,1194],{},"119",[106,1196,1197],{},"w",[90,1199,1200,1203,1206,1209,1211,1214,1217,1220],{},[106,1201,1202],{},"24",[106,1204,1205],{},"CAN",[106,1207,1208],{},"56",[106,1210,797],{},[106,1212,1213],{},"88",[106,1215,1216],{},"X",[106,1218,1219],{},"120",[106,1221,1222],{},"x",[90,1224,1225,1228,1231,1234,1236,1239,1242,1245],{},[106,1226,1227],{},"25",[106,1229,1230],{},"EM",[106,1232,1233],{},"57",[106,1235,822],{},[106,1237,1238],{},"89",[106,1240,1241],{},"Y",[106,1243,1244],{},"121",[106,1246,1247],{},"y",[90,1249,1250,1253,1256,1259,1262,1265,1268,1271],{},[106,1251,1252],{},"26",[106,1254,1255],{},"SUB",[106,1257,1258],{},"58",[106,1260,1261],{},":",[106,1263,1264],{},"90",[106,1266,1267],{},"Z",[106,1269,1270],{},"122",[106,1272,1273],{},"z",[90,1275,1276,1279,1282,1285,1287,1290,1293,1296],{},[106,1277,1278],{},"27",[106,1280,1281],{},"ESC",[106,1283,1284],{},"59",[106,1286,464],{},[106,1288,1289],{},"91",[106,1291,1292],{},"[",[106,1294,1295],{},"123",[106,1297,1298],{},"{",[90,1300,1301,1304,1307,1310,1313,1316,1318,1321],{},[106,1302,1303],{},"28",[106,1305,1306],{},"FS",[106,1308,1309],{},"60",[106,1311,1312],{},"\u003C",[106,1314,1315],{},"92",[106,1317,986],{},[106,1319,1320],{},"124",[106,1322,1323],{},"|",[90,1325,1326,1329,1332,1335,1337,1340,1343,1346],{},[106,1327,1328],{},"29",[106,1330,1331],{},"GS",[106,1333,1334],{},"61",[106,1336,454],{},[106,1338,1339],{},"93",[106,1341,1342],{},"]",[106,1344,1345],{},"125",[106,1347,1348],{},"}",[90,1350,1351,1354,1357,1360,1363,1366,1369,1372],{},[106,1352,1353],{},"30",[106,1355,1356],{},"RS",[106,1358,1359],{},"62",[106,1361,1362],{},">",[106,1364,1365],{},"94",[106,1367,1368],{},"^",[106,1370,1371],{},"126",[106,1373,1374],{},"`",[90,1376,1377,1380,1383,1386,1389,1392,1395,1398],{},[106,1378,1379],{},"31",[106,1381,1382],{},"US",[106,1384,1385],{},"63",[106,1387,1388],{},"?",[106,1390,1391],{},"95",[106,1393,1394],{},"_",[106,1396,1397],{},"127",[106,1399,1400],{},"DEL",[19,1402,1403,1404,1407],{},"ASCII 码大致由以下",[23,1405,1406],{},"两部分组","成：",[67,1409,1410,1417],{},[41,1411,1412,1413,1416],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[23,1414,1415],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[41,1418,1419,1420,1423],{},"ASCII 打印字符：数字 ",[23,1421,1422],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[14,1425,1427],{"id":1426},"_134转义字符","1.3.4转义字符",[389,1429,1431],{"className":391,"code":1430,"language":393,"meta":316,"style":316},"\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",[395,1432,1433,1438,1454,1468,1474,1488,1494],{"__ignoreMap":316},[398,1434,1435],{"class":400,"line":401},[398,1436,1437],{"class":467},"\u002F\u002F换行符\n",[398,1439,1440,1443,1446,1449,1451],{"class":400,"line":317},[398,1441,1442],{"class":408},"cout ",[398,1444,1445],{"class":404},"\u003C\u003C",[398,1447,1448],{"class":513},"\"hello world\u002Fn\"",[398,1450,464],{"class":408},[398,1452,1453],{"class":467}," \u002F\u002F就等同于如下：\n",[398,1455,1456,1458,1460,1463,1465],{"class":400,"line":320},[398,1457,1442],{"class":408},[398,1459,1445],{"class":404},[398,1461,1462],{"class":513},"\"hello world\"",[398,1464,1445],{"class":404},[398,1466,1467],{"class":408},"endl;\n",[398,1469,1471],{"class":400,"line":1470},4,[398,1472,1473],{"class":467},"\u002F\u002F反斜杠\n",[398,1475,1477,1479,1481,1484,1486],{"class":400,"line":1476},5,[398,1478,1442],{"class":408},[398,1480,1445],{"class":404},[398,1482,1483],{"class":513},"\"\u002F\u002F\"",[398,1485,1445],{"class":404},[398,1487,1467],{"class":408},[398,1489,1491],{"class":400,"line":1490},6,[398,1492,1493],{"class":467},"\u002F\u002F水平制表符\n",[398,1495,1497,1499,1501,1504,1507,1510,1512,1515],{"class":400,"line":1496},7,[398,1498,1442],{"class":408},[398,1500,1445],{"class":404},[398,1502,1503],{"class":513},"\"aaaa",[398,1505,1506],{"class":457},"\\t",[398,1508,1509],{"class":513},"helloworld\"",[398,1511,1445],{"class":404},[398,1513,1514],{"class":408},"endl;",[398,1516,1517],{"class":467}," \u002F\u002F输出窗口时有对齐效果\n",[14,1519,1521],{"id":1520},"_135字符串型","1.3.5字符串型",[19,1523,1524,1525,1527],{},"char 变量名",[398,1526],{},"=\"字符串值\"",[389,1529,1531],{"className":391,"code":1530,"language":393,"meta":316,"style":316},"\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",[395,1532,1533,1538,1543,1548,1553,1567,1580,1585,1591,1603],{"__ignoreMap":316},[398,1534,1535],{"class":400,"line":401},[398,1536,1537],{"class":467},"\u002F\u002Fc风格字符串\n",[398,1539,1540],{"class":400,"line":317},[398,1541,1542],{"class":467},"\u002F\u002F注意事项：\n",[398,1544,1545],{"class":400,"line":320},[398,1546,1547],{"class":467},"\u002F\u002F1.char字符串名[]\n",[398,1549,1550],{"class":400,"line":1470},[398,1551,1552],{"class":467},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[398,1554,1555,1557,1560,1562,1564],{"class":400,"line":1476},[398,1556,505],{"class":404},[398,1558,1559],{"class":408}," str[]",[398,1561,454],{"class":404},[398,1563,1462],{"class":513},[398,1565,1566],{"class":408},";\n",[398,1568,1569,1571,1573,1576,1578],{"class":400,"line":1490},[398,1570,1442],{"class":408},[398,1572,1445],{"class":404},[398,1574,1575],{"class":408},"str",[398,1577,1445],{"class":404},[398,1579,1467],{"class":408},[398,1581,1582],{"class":400,"line":1496},[398,1583,1584],{"class":467},"\u002F\u002Fc++风格字符串\n",[398,1586,1588],{"class":400,"line":1587},8,[398,1589,1590],{"class":467},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[398,1592,1594,1597,1599,1601],{"class":400,"line":1593},9,[398,1595,1596],{"class":408},"string str2",[398,1598,454],{"class":404},[398,1600,1462],{"class":513},[398,1602,1566],{"class":408},[398,1604,1606,1608,1610,1613,1615],{"class":400,"line":1605},10,[398,1607,1442],{"class":408},[398,1609,1445],{"class":404},[398,1611,1612],{"class":408},"str2",[398,1614,1445],{"class":404},[398,1616,1467],{"class":408},[14,1618,1620],{"id":1619},"_136布尔类型bool","1.3.6布尔类型bool",[389,1622,1624],{"className":391,"code":1623,"language":393,"meta":316,"style":316},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[395,1625,1626,1641],{"__ignoreMap":316},[398,1627,1628,1631,1634,1636,1639],{"class":400,"line":401},[398,1629,1630],{"class":404},"bool",[398,1632,1633],{"class":408}," flag",[398,1635,454],{"class":404},[398,1637,1638],{"class":457},"true",[398,1640,1566],{"class":408},[398,1642,1643,1646,1649,1652,1654,1656],{"class":400,"line":317},[398,1644,1645],{"class":408},"cout",[398,1647,1648],{"class":404},"\u003C\u003Csizeof",[398,1650,1651],{"class":408},"(flag)",[398,1653,1445],{"class":404},[398,1655,1514],{"class":408},[398,1657,1658],{"class":467}," \u002F\u002F查看布尔占内存空间\n",[343,1660,1662],{"id":1661},"_14键盘输入cin","1.4键盘输入cin",[389,1664,1666],{"className":391,"code":1665,"language":393,"meta":316,"style":316},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[395,1667,1668,1681,1698,1709],{"__ignoreMap":316},[398,1669,1670,1672,1675,1677,1679],{"class":400,"line":401},[398,1671,412],{"class":404},[398,1673,1674],{"class":408}," a",[398,1676,454],{"class":404},[398,1678,593],{"class":457},[398,1680,1566],{"class":408},[398,1682,1683,1685,1687,1690,1692,1694,1696],{"class":400,"line":317},[398,1684,1645],{"class":408},[398,1686,1445],{"class":404},[398,1688,1689],{"class":513},"\"请给整型变量a赋值\"",[398,1691,1445],{"class":404},[398,1693,640],{"class":408},[398,1695,1445],{"class":404},[398,1697,1467],{"class":408},[398,1699,1700,1703,1706],{"class":400,"line":320},[398,1701,1702],{"class":408},"cin ",[398,1704,1705],{"class":404},">>",[398,1707,1708],{"class":408}," a;\n",[398,1710,1711,1713,1715,1718,1721,1723,1725],{"class":400,"line":1470},[398,1712,1442],{"class":408},[398,1714,1445],{"class":404},[398,1716,1717],{"class":513}," \"整型变量a=\"",[398,1719,1720],{"class":404}," \u003C\u003C",[398,1722,640],{"class":408},[398,1724,1445],{"class":404},[398,1726,1467],{"class":408},[343,1728,1730],{"id":1729},"_15运算符","1.5运算符",[14,1732,1734],{"id":1733},"_151算术运算符","1.5.1算术运算符",[19,1736,1737,1741],{},[1738,1739],"img",{"alt":316,"src":1740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[38,1743,1744,1747,1750],{},[41,1745,1746],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[41,1748,1749],{},"两个小数不可以做取模运算",[41,1751,1752],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[14,1754,1756],{"id":1755},"_152赋值运算符","1.5.2赋值运算符",[19,1758,1759],{},[1738,1760],{"alt":316,"src":1761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[14,1763,1765],{"id":1764},"_153比较运算符","1.5.3比较运算符",[19,1767,1768],{},[1738,1769],{"alt":316,"src":1770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[14,1772,1774],{"id":1773},"_154逻辑运算符","1.5.4逻辑运算符",[19,1776,1777],{},[1738,1778],{"alt":316,"src":1779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[343,1781,1783],{"id":1782},"_16程序流程结构","1.6程序流程结构",[14,1785,1787],{"id":1786},"_161选择结构","1.6.1选择结构",[38,1789,1790],{},[41,1791,1792],{},"if语句\n单行、多行、多条件if语句",[389,1794,1796],{"className":391,"code":1795,"language":393,"meta":316,"style":316},"\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",[395,1797,1798,1803,1818,1823,1837,1842,1847,1856,1869,1873,1886,1891,1897,1902,1916,1921,1927,1948,1953,1967,1972,2001,2006,2023,2028,2033,2038,2052,2057],{"__ignoreMap":316},[398,1799,1800],{"class":400,"line":401},[398,1801,1802],{"class":467},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[398,1804,1805,1808,1811,1813,1816],{"class":400,"line":317},[398,1806,1807],{"class":404},"if",[398,1809,1810],{"class":408},"(score",[398,1812,1362],{"class":404},[398,1814,1815],{"class":457},"600",[398,1817,415],{"class":408},[398,1819,1820],{"class":400,"line":320},[398,1821,1822],{"class":408},"{\n",[398,1824,1825,1828,1830,1833,1835],{"class":400,"line":1470},[398,1826,1827],{"class":408},"    cout",[398,1829,1445],{"class":404},[398,1831,1832],{"class":513},"'这是单行if语句'",[398,1834,1445],{"class":404},[398,1836,1467],{"class":408},[398,1838,1839],{"class":400,"line":1476},[398,1840,1841],{"class":408},"}\n",[398,1843,1844],{"class":400,"line":1490},[398,1845,1846],{"class":467},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[398,1848,1849,1851,1853],{"class":400,"line":1496},[398,1850,1702],{"class":408},[398,1852,1705],{"class":404},[398,1854,1855],{"class":408}," score\n",[398,1857,1858,1860,1862,1865,1867],{"class":400,"line":1587},[398,1859,1807],{"class":404},[398,1861,1810],{"class":408},[398,1863,1864],{"class":404},"\u003C=",[398,1866,1815],{"class":457},[398,1868,415],{"class":408},[398,1870,1871],{"class":400,"line":1593},[398,1872,1822],{"class":408},[398,1874,1875,1877,1879,1882,1884],{"class":400,"line":1605},[398,1876,1827],{"class":408},[398,1878,1705],{"class":404},[398,1880,1881],{"class":513},"\"小于等于600\"",[398,1883,1445],{"class":404},[398,1885,1467],{"class":408},[398,1887,1889],{"class":400,"line":1888},11,[398,1890,1841],{"class":408},[398,1892,1894],{"class":400,"line":1893},12,[398,1895,1896],{"class":404},"else\n",[398,1898,1900],{"class":400,"line":1899},13,[398,1901,1822],{"class":408},[398,1903,1905,1907,1909,1912,1914],{"class":400,"line":1904},14,[398,1906,1827],{"class":408},[398,1908,1705],{"class":404},[398,1910,1911],{"class":513},"\"大于600\"",[398,1913,1705],{"class":404},[398,1915,1467],{"class":408},[398,1917,1919],{"class":400,"line":1918},15,[398,1920,1841],{"class":408},[398,1922,1924],{"class":400,"line":1923},16,[398,1925,1926],{"class":467},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[398,1928,1930,1932,1935,1937,1939,1942,1944,1946],{"class":400,"line":1929},17,[398,1931,1807],{"class":404},[398,1933,1934],{"class":408}," (",[398,1936,593],{"class":457},[398,1938,1312],{"class":404},[398,1940,1941],{"class":408},"num",[398,1943,1312],{"class":404},[398,1945,713],{"class":457},[398,1947,415],{"class":408},[398,1949,1951],{"class":400,"line":1950},18,[398,1952,1822],{"class":408},[398,1954,1956,1958,1960,1963,1965],{"class":400,"line":1955},19,[398,1957,1827],{"class":408},[398,1959,1445],{"class":404},[398,1961,1962],{"class":513},"\"小于100\"",[398,1964,1445],{"class":404},[398,1966,1467],{"class":408},[398,1968,1970],{"class":400,"line":1969},20,[398,1971,1841],{"class":408},[398,1973,1975,1978,1981,1984,1987,1989,1992,1994,1996,1999],{"class":400,"line":1974},21,[398,1976,1977],{"class":404},"else",[398,1979,1980],{"class":404}," if",[398,1982,1983],{"class":408}," (nmu",[398,1985,1986],{"class":404},">=",[398,1988,713],{"class":457},[398,1990,1991],{"class":404},"&&",[398,1993,1941],{"class":408},[398,1995,1312],{"class":404},[398,1997,1998],{"class":457},"200",[398,2000,415],{"class":408},[398,2002,2004],{"class":400,"line":2003},22,[398,2005,1822],{"class":408},[398,2007,2009,2011,2013,2016,2018,2020],{"class":400,"line":2008},23,[398,2010,1827],{"class":408},[398,2012,1445],{"class":404},[398,2014,2015],{"class":513},"\"不小于100且小于200\"",[398,2017,1445],{"class":404},[398,2019,1514],{"class":408},[398,2021,2022],{"class":467}," \u002F\u002F可以无限else if,python中是elif：\n",[398,2024,2026],{"class":400,"line":2025},24,[398,2027,1841],{"class":408},[398,2029,2031],{"class":400,"line":2030},25,[398,2032,1896],{"class":404},[398,2034,2036],{"class":400,"line":2035},26,[398,2037,1822],{"class":408},[398,2039,2041,2043,2045,2048,2050],{"class":400,"line":2040},27,[398,2042,1827],{"class":408},[398,2044,1445],{"class":404},[398,2046,2047],{"class":513},"\"不小于200\"",[398,2049,1445],{"class":404},[398,2051,1467],{"class":408},[398,2053,2055],{"class":400,"line":2054},28,[398,2056,1841],{"class":408},[398,2058,2060],{"class":400,"line":2059},29,[398,2061,2062],{"class":467},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[38,2064,2065],{"start":317},[41,2066,2067],{},"三目运算符",[389,2069,2071],{"className":391,"code":2070,"language":393,"meta":316,"style":316},"\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",[395,2072,2073,2078,2083,2109,2131,2148,2153,2176,2191],{"__ignoreMap":316},[398,2074,2075],{"class":400,"line":401},[398,2076,2077],{"class":467},"\u002F\u002F创建三个变量a,b,c\n",[398,2079,2080],{"class":400,"line":317},[398,2081,2082],{"class":467},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[398,2084,2085,2087,2089,2091,2093,2096,2098,2100,2103,2105,2107],{"class":400,"line":320},[398,2086,412],{"class":404},[398,2088,1674],{"class":408},[398,2090,454],{"class":404},[398,2092,1102],{"class":457},[398,2094,2095],{"class":408},",b",[398,2097,454],{"class":404},[398,2099,848],{"class":457},[398,2101,2102],{"class":408},",c",[398,2104,454],{"class":404},[398,2106,593],{"class":457},[398,2108,1566],{"class":408},[398,2110,2111,2113,2115,2118,2120,2122,2124,2126,2128],{"class":400,"line":1470},[398,2112,690],{"class":408},[398,2114,454],{"class":404},[398,2116,2117],{"class":408},"(a",[398,2119,1362],{"class":404},[398,2121,665],{"class":408},[398,2123,1388],{"class":404},[398,2125,640],{"class":408},[398,2127,1261],{"class":404},[398,2129,2130],{"class":408},"b)\n",[398,2132,2133,2135,2137,2140,2142,2144,2146],{"class":400,"line":1476},[398,2134,1645],{"class":408},[398,2136,1445],{"class":404},[398,2138,2139],{"class":513},"\"c=\"",[398,2141,1445],{"class":404},[398,2143,690],{"class":408},[398,2145,1445],{"class":404},[398,2147,1467],{"class":408},[398,2149,2150],{"class":400,"line":1490},[398,2151,2152],{"class":467},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[398,2154,2155,2157,2159,2161,2163,2165,2167,2170,2172,2174],{"class":400,"line":1496},[398,2156,2117],{"class":408},[398,2158,1362],{"class":404},[398,2160,665],{"class":408},[398,2162,1388],{"class":404},[398,2164,640],{"class":408},[398,2166,1261],{"class":404},[398,2168,2169],{"class":408},"b)",[398,2171,454],{"class":404},[398,2173,713],{"class":457},[398,2175,1566],{"class":408},[398,2177,2178,2180,2182,2184,2186,2188],{"class":400,"line":1587},[398,2179,1645],{"class":408},[398,2181,1445],{"class":404},[398,2183,640],{"class":408},[398,2185,1445],{"class":404},[398,2187,1514],{"class":408},[398,2189,2190],{"class":467}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[398,2192,2193,2195,2197,2199,2201,2203],{"class":400,"line":1593},[398,2194,1645],{"class":408},[398,2196,1445],{"class":404},[398,2198,665],{"class":408},[398,2200,1445],{"class":404},[398,2202,1514],{"class":408},[398,2204,2205],{"class":467}," \u002F\u002F10   a>b,b还是原值\n",[38,2207,2208],{"start":320},[41,2209,2210],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[389,2212,2214],{"className":391,"code":2213,"language":393,"meta":316,"style":316},"\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",[395,2215,2216,2221,2229,2243,2253,2257,2271,2284,2294,2302,2307,2332,2353,2375,2396,2418,2439,2459,2464],{"__ignoreMap":316},[398,2217,2218],{"class":400,"line":401},[398,2219,2220],{"class":467},"\u002F\u002F案例-电影打分\n",[398,2222,2223,2226],{"class":400,"line":317},[398,2224,2225],{"class":404},"#include",[398,2227,2228],{"class":513},"\u003Ciostream>\n",[398,2230,2231,2234,2237,2241],{"class":400,"line":320},[398,2232,2233],{"class":404},"using",[398,2235,2236],{"class":404}," namespace",[398,2238,2240],{"class":2239},"sScJk"," std",[398,2242,1566],{"class":408},[398,2244,2245,2247,2250],{"class":400,"line":1470},[398,2246,412],{"class":404},[398,2248,2249],{"class":2239}," main",[398,2251,2252],{"class":408},"()\n",[398,2254,2255],{"class":400,"line":1476},[398,2256,1822],{"class":408},[398,2258,2259,2262,2265,2267,2269],{"class":400,"line":1490},[398,2260,2261],{"class":404},"    int",[398,2263,2264],{"class":408}," score",[398,2266,454],{"class":404},[398,2268,593],{"class":457},[398,2270,1566],{"class":408},[398,2272,2273,2275,2277,2280,2282],{"class":400,"line":1496},[398,2274,1827],{"class":408},[398,2276,1445],{"class":404},[398,2278,2279],{"class":513},"\"电影打分：\"",[398,2281,1445],{"class":404},[398,2283,1467],{"class":408},[398,2285,2286,2289,2291],{"class":400,"line":1587},[398,2287,2288],{"class":408},"    cin",[398,2290,1705],{"class":404},[398,2292,2293],{"class":408},"score;\n",[398,2295,2296,2299],{"class":400,"line":1593},[398,2297,2298],{"class":404},"    switch",[398,2300,2301],{"class":408},"(score)\n",[398,2303,2304],{"class":400,"line":1605},[398,2305,2306],{"class":408},"    {\n",[398,2308,2309,2312,2315,2318,2320,2323,2325,2327,2330],{"class":400,"line":1888},[398,2310,2311],{"class":404},"        case",[398,2313,2314],{"class":457}," 10",[398,2316,2317],{"class":408},":cout",[398,2319,1445],{"class":404},[398,2321,2322],{"class":513},"\"经典\"",[398,2324,1445],{"class":404},[398,2326,1514],{"class":408},[398,2328,2329],{"class":404},"break",[398,2331,1566],{"class":408},[398,2333,2334,2336,2339,2341,2343,2345,2347,2349,2351],{"class":400,"line":1893},[398,2335,2311],{"class":404},[398,2337,2338],{"class":457}," 9",[398,2340,2317],{"class":408},[398,2342,1445],{"class":404},[398,2344,2322],{"class":513},[398,2346,1445],{"class":404},[398,2348,1514],{"class":408},[398,2350,2329],{"class":404},[398,2352,1566],{"class":408},[398,2354,2355,2357,2360,2362,2364,2367,2369,2371,2373],{"class":400,"line":1899},[398,2356,2311],{"class":404},[398,2358,2359],{"class":457}," 8",[398,2361,2317],{"class":408},[398,2363,1445],{"class":404},[398,2365,2366],{"class":513},"\"非常好\"",[398,2368,1445],{"class":404},[398,2370,1514],{"class":408},[398,2372,2329],{"class":404},[398,2374,1566],{"class":408},[398,2376,2377,2379,2382,2384,2386,2388,2390,2392,2394],{"class":400,"line":1904},[398,2378,2311],{"class":404},[398,2380,2381],{"class":457}," 7",[398,2383,2317],{"class":408},[398,2385,1445],{"class":404},[398,2387,2366],{"class":513},[398,2389,1445],{"class":404},[398,2391,1514],{"class":408},[398,2393,2329],{"class":404},[398,2395,1566],{"class":408},[398,2397,2398,2400,2403,2405,2407,2410,2412,2414,2416],{"class":400,"line":1918},[398,2399,2311],{"class":404},[398,2401,2402],{"class":457}," 6",[398,2404,2317],{"class":408},[398,2406,1445],{"class":404},[398,2408,2409],{"class":513},"\"一般\"",[398,2411,1445],{"class":404},[398,2413,1514],{"class":408},[398,2415,2329],{"class":404},[398,2417,1566],{"class":408},[398,2419,2420,2422,2425,2427,2429,2431,2433,2435,2437],{"class":400,"line":1923},[398,2421,2311],{"class":404},[398,2423,2424],{"class":457}," 5",[398,2426,2317],{"class":408},[398,2428,1445],{"class":404},[398,2430,2409],{"class":513},[398,2432,1445],{"class":404},[398,2434,1514],{"class":408},[398,2436,2329],{"class":404},[398,2438,1566],{"class":408},[398,2440,2441,2444,2446,2448,2451,2453,2455,2457],{"class":400,"line":1929},[398,2442,2443],{"class":404},"        default",[398,2445,2317],{"class":408},[398,2447,1445],{"class":404},[398,2449,2450],{"class":513},"\"烂片\"",[398,2452,1445],{"class":404},[398,2454,1514],{"class":408},[398,2456,2329],{"class":404},[398,2458,1566],{"class":408},[398,2460,2461],{"class":400,"line":1950},[398,2462,2463],{"class":408},"    }\n",[398,2465,2466],{"class":400,"line":1955},[398,2467,1841],{"class":408},[19,2469,2470],{},"if和switch区别：",[67,2472,2473,2476],{},[41,2474,2475],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[41,2477,2478],{},"switch优点：结构清晰，执行效率高",[14,2480,2482],{"id":2481},"_162循环结构","1.6.2循环结构",[38,2484,2485],{},[41,2486,2487],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[389,2489,2491],{"className":391,"code":2490,"language":393,"meta":316,"style":316},"\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",[395,2492,2493,2498,2506,2510,2523,2537,2541,2561,2571,2575,2587],{"__ignoreMap":316},[398,2494,2495],{"class":400,"line":401},[398,2496,2497],{"class":467},"\u002F\u002F打印0-9数字\n",[398,2499,2500,2502,2504],{"class":400,"line":317},[398,2501,412],{"class":404},[398,2503,2249],{"class":2239},[398,2505,2252],{"class":408},[398,2507,2508],{"class":400,"line":320},[398,2509,1822],{"class":408},[398,2511,2512,2514,2517,2519,2521],{"class":400,"line":1470},[398,2513,2261],{"class":404},[398,2515,2516],{"class":408}," num",[398,2518,454],{"class":404},[398,2520,593],{"class":457},[398,2522,1566],{"class":408},[398,2524,2525,2528,2531,2533,2535],{"class":400,"line":1476},[398,2526,2527],{"class":404},"    while",[398,2529,2530],{"class":408},"(num",[398,2532,1312],{"class":404},[398,2534,848],{"class":457},[398,2536,415],{"class":408},[398,2538,2539],{"class":400,"line":1490},[398,2540,2306],{"class":408},[398,2542,2543,2546,2549,2551,2553,2555,2558],{"class":400,"line":1496},[398,2544,2545],{"class":2239},"       std",[398,2547,2548],{"class":408},"::cout",[398,2550,1445],{"class":404},[398,2552,1941],{"class":408},[398,2554,1445],{"class":404},[398,2556,2557],{"class":2239},"std",[398,2559,2560],{"class":408},"::endl;\n",[398,2562,2563,2566,2569],{"class":400,"line":1587},[398,2564,2565],{"class":408},"        num",[398,2567,2568],{"class":404},"++",[398,2570,1566],{"class":408},[398,2572,2573],{"class":400,"line":1593},[398,2574,2463],{"class":408},[398,2576,2577,2580,2582,2585],{"class":400,"line":1605},[398,2578,2579],{"class":2239},"    system",[398,2581,409],{"class":408},[398,2583,2584],{"class":513},"\"pause\"",[398,2586,415],{"class":408},[398,2588,2589],{"class":400,"line":1888},[398,2590,1841],{"class":408},[19,2592,2593],{},"注意：写好循环条件，避免死循环情况",[389,2595,2597],{"className":391,"code":2596,"language":393,"meta":316,"style":316},"\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",[395,2598,2599,2604,2611,2618,2628,2636,2640,2645,2672,2677,2682,2690,2717,2722,2727,2740,2750,2754,2764,2769,2782,2787,2801,2806,2821,2825,2838,2842,2847,2851,2865,2873,2878,2884,2890,2895],{"__ignoreMap":316},[398,2600,2601],{"class":400,"line":401},[398,2602,2603],{"class":467},"\u002F\u002F循环结构-猜数字\n",[398,2605,2606,2608],{"class":400,"line":317},[398,2607,2225],{"class":404},[398,2609,2610],{"class":513}," \u003Ciostream>\n",[398,2612,2613,2615],{"class":400,"line":320},[398,2614,2225],{"class":404},[398,2616,2617],{"class":513}," \u003Cctime>\n",[398,2619,2620,2622,2624,2626],{"class":400,"line":1470},[398,2621,2233],{"class":404},[398,2623,2236],{"class":404},[398,2625,2240],{"class":2239},[398,2627,1566],{"class":408},[398,2629,2630,2632,2634],{"class":400,"line":1476},[398,2631,412],{"class":404},[398,2633,2249],{"class":2239},[398,2635,2252],{"class":408},[398,2637,2638],{"class":400,"line":1490},[398,2639,1822],{"class":408},[398,2641,2642],{"class":400,"line":1496},[398,2643,2644],{"class":467},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[398,2646,2647,2650,2653,2656,2659,2661,2664,2666,2669],{"class":400,"line":1587},[398,2648,2649],{"class":2239},"    srand",[398,2651,2652],{"class":408},"((",[398,2654,2655],{"class":404},"unsigned",[398,2657,2658],{"class":404}," int",[398,2660,831],{"class":408},[398,2662,2663],{"class":2239},"time",[398,2665,409],{"class":408},[398,2667,2668],{"class":457},"NULL",[398,2670,2671],{"class":408},"));\n",[398,2673,2674],{"class":400,"line":1593},[398,2675,2676],{"emptyLinePlaceholder":328},"\n",[398,2678,2679],{"class":400,"line":1605},[398,2680,2681],{"class":467},"    \u002F\u002F1.系统生成随机数\n",[398,2683,2684,2687],{"class":400,"line":1888},[398,2685,2686],{"class":467},"    \u002F\u002Frand()%100",[398,2688,2689],{"class":467}," \u002F\u002F生成0-99的随机数\n",[398,2691,2692,2694,2696,2698,2701,2704,2706,2708,2710,2712,2714],{"class":400,"line":1893},[398,2693,2261],{"class":404},[398,2695,2516],{"class":408},[398,2697,454],{"class":404},[398,2699,2700],{"class":2239},"rand",[398,2702,2703],{"class":408},"()",[398,2705,730],{"class":404},[398,2707,713],{"class":457},[398,2709,883],{"class":404},[398,2711,619],{"class":457},[398,2713,464],{"class":408},[398,2715,2716],{"class":467}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[398,2718,2719],{"class":400,"line":1899},[398,2720,2721],{"class":467},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[398,2723,2724],{"class":400,"line":1904},[398,2725,2726],{"class":467},"    \u002F\u002F2.玩家猜测\n",[398,2728,2729,2731,2734,2736,2738],{"class":400,"line":1918},[398,2730,2261],{"class":404},[398,2732,2733],{"class":408}," val",[398,2735,454],{"class":404},[398,2737,593],{"class":457},[398,2739,1566],{"class":408},[398,2741,2742,2744,2746,2748],{"class":400,"line":1923},[398,2743,2527],{"class":404},[398,2745,1934],{"class":408},[398,2747,619],{"class":457},[398,2749,415],{"class":408},[398,2751,2752],{"class":400,"line":1929},[398,2753,2306],{"class":408},[398,2755,2756,2759,2761],{"class":400,"line":1950},[398,2757,2758],{"class":408},"        cin",[398,2760,1705],{"class":404},[398,2762,2763],{"class":408},"val;\n",[398,2765,2766],{"class":400,"line":1955},[398,2767,2768],{"class":467},"        \u002F\u002F3.判断玩家猜测\n",[398,2770,2771,2774,2777,2779],{"class":400,"line":1969},[398,2772,2773],{"class":404},"        if",[398,2775,2776],{"class":408},"(val",[398,2778,1312],{"class":404},[398,2780,2781],{"class":408},"num) \n",[398,2783,2784],{"class":400,"line":1974},[398,2785,2786],{"class":408},"        {\n",[398,2788,2789,2792,2794,2797,2799],{"class":400,"line":2003},[398,2790,2791],{"class":408},"            cout",[398,2793,1445],{"class":404},[398,2795,2796],{"class":513},"\"猜小了！\"",[398,2798,1445],{"class":404},[398,2800,1467],{"class":408},[398,2802,2803],{"class":400,"line":2008},[398,2804,2805],{"class":408},"        }\n",[398,2807,2808,2811,2813,2816,2818],{"class":400,"line":2025},[398,2809,2810],{"class":404},"        else",[398,2812,1980],{"class":404},[398,2814,2815],{"class":408}," (val",[398,2817,1362],{"class":404},[398,2819,2820],{"class":408},"num)\n",[398,2822,2823],{"class":400,"line":2030},[398,2824,2786],{"class":408},[398,2826,2827,2829,2831,2834,2836],{"class":400,"line":2035},[398,2828,2791],{"class":408},[398,2830,1445],{"class":404},[398,2832,2833],{"class":513},"\"猜大了！\"",[398,2835,1445],{"class":404},[398,2837,1467],{"class":408},[398,2839,2840],{"class":400,"line":2040},[398,2841,2805],{"class":408},[398,2843,2844],{"class":400,"line":2054},[398,2845,2846],{"class":404},"        else\n",[398,2848,2849],{"class":400,"line":2059},[398,2850,2786],{"class":408},[398,2852,2854,2856,2858,2861,2863],{"class":400,"line":2853},30,[398,2855,2791],{"class":408},[398,2857,1445],{"class":404},[398,2859,2860],{"class":513},"\"猜对了！\"",[398,2862,1445],{"class":404},[398,2864,1467],{"class":408},[398,2866,2868,2871],{"class":400,"line":2867},31,[398,2869,2870],{"class":404},"            break",[398,2872,1566],{"class":408},[398,2874,2876],{"class":400,"line":2875},32,[398,2877,2805],{"class":408},[398,2879,2881],{"class":400,"line":2880},33,[398,2882,2883],{"class":467},"        \u002F\u002F猜对 退出游戏\n",[398,2885,2887],{"class":400,"line":2886},34,[398,2888,2889],{"class":467},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[398,2891,2893],{"class":400,"line":2892},35,[398,2894,2463],{"class":408},[398,2896,2898],{"class":400,"line":2897},36,[398,2899,1841],{"class":408},[38,2901,2902],{"start":317},[41,2903,2904,2905,2908],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[23,2906,2907],{},"do...while会先执行一次循环语句","，在判断循环语句",[389,2910,2912],{"className":391,"code":2911,"language":393,"meta":316,"style":316},"\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",[395,2913,2914,2919,2927,2931,2943,2951,2955,2972,2979,2983,2996,3006],{"__ignoreMap":316},[398,2915,2916],{"class":400,"line":401},[398,2917,2918],{"class":467},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[398,2920,2921,2923,2925],{"class":400,"line":317},[398,2922,412],{"class":404},[398,2924,2249],{"class":2239},[398,2926,2252],{"class":408},[398,2928,2929],{"class":400,"line":320},[398,2930,1822],{"class":408},[398,2932,2933,2935,2937,2939,2941],{"class":400,"line":1470},[398,2934,2261],{"class":404},[398,2936,2516],{"class":408},[398,2938,454],{"class":404},[398,2940,593],{"class":457},[398,2942,1566],{"class":408},[398,2944,2945,2948],{"class":400,"line":1476},[398,2946,2947],{"class":404},"    do",[398,2949,2950],{"class":408}," \n",[398,2952,2953],{"class":400,"line":1490},[398,2954,2306],{"class":408},[398,2956,2957,2960,2962,2964,2966,2968,2970],{"class":400,"line":1496},[398,2958,2959],{"class":2239},"        std",[398,2961,2548],{"class":408},[398,2963,1445],{"class":404},[398,2965,1941],{"class":408},[398,2967,1445],{"class":404},[398,2969,2557],{"class":2239},[398,2971,2560],{"class":408},[398,2973,2974,2976],{"class":400,"line":1587},[398,2975,2565],{"class":408},[398,2977,2978],{"class":404},"++\n",[398,2980,2981],{"class":400,"line":1593},[398,2982,2463],{"class":408},[398,2984,2985,2987,2989,2991,2993],{"class":400,"line":1605},[398,2986,2527],{"class":404},[398,2988,2530],{"class":408},[398,2990,1312],{"class":404},[398,2992,848],{"class":457},[398,2994,2995],{"class":408},");\n",[398,2997,2998,3000,3002,3004],{"class":400,"line":1888},[398,2999,2579],{"class":2239},[398,3001,409],{"class":408},[398,3003,2584],{"class":513},[398,3005,2995],{"class":408},[398,3007,3008],{"class":400,"line":1893},[398,3009,1841],{"class":408},[19,3011,3012],{},"案例-水仙花数",[19,3014,3015],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,3017,3018],{},"例如：1^3+5^3+3^3=153",[19,3020,3021],{},"请用do...while语句，求出所有3位数的水仙花数",[389,3023,3025],{"className":391,"code":3024,"language":393,"meta":316,"style":316},"#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",[395,3026,3027,3033,3043,3051,3055,3060,3072,3078,3082,3087,3103,3119,3135,3150,3169,3184,3232,3236,3248,3252,3260,3264,3278],{"__ignoreMap":316},[398,3028,3029,3031],{"class":400,"line":401},[398,3030,2225],{"class":404},[398,3032,2610],{"class":513},[398,3034,3035,3037,3039,3041],{"class":400,"line":317},[398,3036,2233],{"class":404},[398,3038,2236],{"class":404},[398,3040,2240],{"class":2239},[398,3042,1566],{"class":408},[398,3044,3045,3047,3049],{"class":400,"line":320},[398,3046,412],{"class":404},[398,3048,2249],{"class":2239},[398,3050,2252],{"class":408},[398,3052,3053],{"class":400,"line":1470},[398,3054,1822],{"class":408},[398,3056,3057],{"class":400,"line":1476},[398,3058,3059],{"class":467},"    \u002F\u002F1.先打印所有三位数字\n",[398,3061,3062,3064,3066,3068,3070],{"class":400,"line":1490},[398,3063,2261],{"class":404},[398,3065,2516],{"class":408},[398,3067,454],{"class":404},[398,3069,713],{"class":457},[398,3071,1566],{"class":408},[398,3073,3074,3076],{"class":400,"line":1496},[398,3075,2947],{"class":404},[398,3077,2950],{"class":408},[398,3079,3080],{"class":400,"line":1587},[398,3081,2306],{"class":408},[398,3083,3084],{"class":400,"line":1593},[398,3085,3086],{"class":467},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[398,3088,3089,3092,3094,3096,3098,3100],{"class":400,"line":1605},[398,3090,3091],{"class":404},"        int",[398,3093,1674],{"class":408},[398,3095,454],{"class":404},[398,3097,593],{"class":457},[398,3099,464],{"class":408},[398,3101,3102],{"class":467}," \u002F\u002F个位\n",[398,3104,3105,3107,3110,3112,3114,3116],{"class":400,"line":1888},[398,3106,3091],{"class":404},[398,3108,3109],{"class":408}," b",[398,3111,454],{"class":404},[398,3113,593],{"class":457},[398,3115,464],{"class":408},[398,3117,3118],{"class":467}," \u002F\u002F十位\n",[398,3120,3121,3123,3126,3128,3130,3132],{"class":400,"line":1893},[398,3122,3091],{"class":404},[398,3124,3125],{"class":408}," c",[398,3127,454],{"class":404},[398,3129,593],{"class":457},[398,3131,464],{"class":408},[398,3133,3134],{"class":467}," \u002F\u002F百位\n",[398,3136,3137,3140,3142,3144,3146,3148],{"class":400,"line":1899},[398,3138,3139],{"class":408},"        a",[398,3141,454],{"class":404},[398,3143,1941],{"class":408},[398,3145,730],{"class":404},[398,3147,848],{"class":457},[398,3149,1566],{"class":408},[398,3151,3152,3155,3157,3159,3161,3163,3165,3167],{"class":400,"line":1904},[398,3153,3154],{"class":408},"        b",[398,3156,454],{"class":404},[398,3158,1941],{"class":408},[398,3160,986],{"class":404},[398,3162,848],{"class":457},[398,3164,730],{"class":404},[398,3166,848],{"class":457},[398,3168,1566],{"class":408},[398,3170,3171,3174,3176,3178,3180,3182],{"class":400,"line":1918},[398,3172,3173],{"class":408},"        c",[398,3175,454],{"class":404},[398,3177,1941],{"class":408},[398,3179,986],{"class":404},[398,3181,713],{"class":457},[398,3183,1566],{"class":408},[398,3185,3186,3188,3190,3192,3194,3196,3198,3200,3202,3204,3206,3208,3210,3212,3214,3216,3218,3220,3223,3226,3229],{"class":400,"line":1923},[398,3187,2773],{"class":404},[398,3189,2117],{"class":408},[398,3191,857],{"class":404},[398,3193,640],{"class":408},[398,3195,857],{"class":404},[398,3197,640],{"class":408},[398,3199,883],{"class":404},[398,3201,665],{"class":408},[398,3203,857],{"class":404},[398,3205,665],{"class":408},[398,3207,857],{"class":404},[398,3209,665],{"class":408},[398,3211,883],{"class":404},[398,3213,690],{"class":408},[398,3215,857],{"class":404},[398,3217,690],{"class":408},[398,3219,857],{"class":404},[398,3221,3222],{"class":408},"c ",[398,3224,3225],{"class":404},"==",[398,3227,3228],{"class":408}," num)",[398,3230,3231],{"class":467}," \u002F\u002F如果是水仙花数，才打印\n",[398,3233,3234],{"class":400,"line":1929},[398,3235,2786],{"class":408},[398,3237,3238,3240,3242,3244,3246],{"class":400,"line":1950},[398,3239,2791],{"class":408},[398,3241,1445],{"class":404},[398,3243,1941],{"class":408},[398,3245,1445],{"class":404},[398,3247,1467],{"class":408},[398,3249,3250],{"class":400,"line":1955},[398,3251,2805],{"class":408},[398,3253,3254,3256,3258],{"class":400,"line":1969},[398,3255,2565],{"class":408},[398,3257,2568],{"class":404},[398,3259,1566],{"class":408},[398,3261,3262],{"class":400,"line":1974},[398,3263,2463],{"class":408},[398,3265,3266,3268,3271,3273,3276],{"class":400,"line":2003},[398,3267,2527],{"class":404},[398,3269,3270],{"class":408}," (num ",[398,3272,1312],{"class":404},[398,3274,3275],{"class":457}," 1000",[398,3277,2995],{"class":408},[398,3279,3280],{"class":400,"line":2008},[398,3281,1841],{"class":408},[38,3283,3284],{"start":320},[41,3285,3286],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[389,3288,3290],{"className":391,"code":3289,"language":393,"meta":316,"style":316},"\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",[395,3291,3292,3297,3326,3330,3342,3346,3351,3362,3369,3373,3387,3391,3398,3402,3414,3423],{"__ignoreMap":316},[398,3293,3294],{"class":400,"line":401},[398,3295,3296],{"class":467},"\u002F\u002F从数字0-9打印\n",[398,3298,3299,3302,3304,3306,3309,3311,3313,3316,3318,3320,3322,3324],{"class":400,"line":317},[398,3300,3301],{"class":404},"for",[398,3303,409],{"class":408},[398,3305,412],{"class":404},[398,3307,3308],{"class":408}," i",[398,3310,454],{"class":404},[398,3312,593],{"class":457},[398,3314,3315],{"class":408},";i",[398,3317,1312],{"class":404},[398,3319,848],{"class":457},[398,3321,3315],{"class":408},[398,3323,2568],{"class":404},[398,3325,415],{"class":408},[398,3327,3328],{"class":400,"line":320},[398,3329,1822],{"class":408},[398,3331,3332,3334,3336,3338,3340],{"class":400,"line":1470},[398,3333,1827],{"class":408},[398,3335,1445],{"class":404},[398,3337,843],{"class":408},[398,3339,1445],{"class":404},[398,3341,1467],{"class":408},[398,3343,3344],{"class":400,"line":1476},[398,3345,1841],{"class":408},[398,3347,3348],{"class":400,"line":1490},[398,3349,3350],{"class":467},"\u002F\u002F上式可以进行拆分\n",[398,3352,3353,3355,3357,3359],{"class":400,"line":1496},[398,3354,412],{"class":404},[398,3356,3308],{"class":408},[398,3358,454],{"class":404},[398,3360,3361],{"class":457},"0\n",[398,3363,3364,3366],{"class":400,"line":1587},[398,3365,3301],{"class":404},[398,3367,3368],{"class":408},"(;;;)\n",[398,3370,3371],{"class":400,"line":1593},[398,3372,1822],{"class":408},[398,3374,3375,3378,3381,3383,3385],{"class":400,"line":1605},[398,3376,3377],{"class":404},"    if",[398,3379,3380],{"class":408},"(i",[398,3382,1986],{"class":404},[398,3384,848],{"class":457},[398,3386,415],{"class":408},[398,3388,3389],{"class":400,"line":1888},[398,3390,2306],{"class":408},[398,3392,3393,3396],{"class":400,"line":1893},[398,3394,3395],{"class":404},"        break",[398,3397,1566],{"class":408},[398,3399,3400],{"class":400,"line":1899},[398,3401,2463],{"class":408},[398,3403,3404,3406,3408,3410,3412],{"class":400,"line":1904},[398,3405,1827],{"class":408},[398,3407,1445],{"class":404},[398,3409,843],{"class":408},[398,3411,1445],{"class":404},[398,3413,1467],{"class":408},[398,3415,3416,3419,3421],{"class":400,"line":1918},[398,3417,3418],{"class":408},"    i",[398,3420,2568],{"class":404},[398,3422,1566],{"class":408},[398,3424,3425],{"class":400,"line":1923},[398,3426,1841],{"class":408},[19,3428,3429],{},"小练习",[389,3431,3433],{"className":391,"code":3432,"language":393,"meta":316,"style":316},"#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",[395,3434,3435,3441,3451,3459,3463,3468,3473,3501,3505,3510,3515,3556,3560,3573,3577,3581,3585,3597,3601,3605],{"__ignoreMap":316},[398,3436,3437,3439],{"class":400,"line":401},[398,3438,2225],{"class":404},[398,3440,2228],{"class":513},[398,3442,3443,3445,3447,3449],{"class":400,"line":317},[398,3444,2233],{"class":404},[398,3446,2236],{"class":404},[398,3448,2240],{"class":2239},[398,3450,1566],{"class":408},[398,3452,3453,3455,3457],{"class":400,"line":320},[398,3454,412],{"class":404},[398,3456,2249],{"class":2239},[398,3458,2252],{"class":408},[398,3460,3461],{"class":400,"line":1470},[398,3462,1822],{"class":408},[398,3464,3465],{"class":400,"line":1476},[398,3466,3467],{"class":467},"    \u002F\u002F敲桌子案例\n",[398,3469,3470],{"class":400,"line":1490},[398,3471,3472],{"class":467},"    \u002F\u002F1.先输出1-100的数字\n",[398,3474,3475,3478,3480,3482,3484,3486,3488,3491,3493,3495,3497,3499],{"class":400,"line":1496},[398,3476,3477],{"class":404},"    for",[398,3479,409],{"class":408},[398,3481,412],{"class":404},[398,3483,3308],{"class":408},[398,3485,454],{"class":404},[398,3487,619],{"class":457},[398,3489,3490],{"class":408},"; i",[398,3492,1864],{"class":404},[398,3494,713],{"class":457},[398,3496,3490],{"class":408},[398,3498,2568],{"class":404},[398,3500,415],{"class":408},[398,3502,3503],{"class":400,"line":1587},[398,3504,2306],{"class":408},[398,3506,3507],{"class":400,"line":1593},[398,3508,3509],{"class":467},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[398,3511,3512],{"class":400,"line":1605},[398,3513,3514],{"class":467},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[398,3516,3517,3519,3521,3523,3525,3527,3529,3532,3534,3536,3538,3540,3542,3544,3546,3548,3550,3552,3554],{"class":400,"line":1888},[398,3518,2773],{"class":404},[398,3520,3380],{"class":408},[398,3522,730],{"class":404},[398,3524,771],{"class":457},[398,3526,3225],{"class":404},[398,3528,593],{"class":457},[398,3530,3531],{"class":404}," ||",[398,3533,3308],{"class":408},[398,3535,730],{"class":404},[398,3537,848],{"class":457},[398,3539,3225],{"class":404},[398,3541,771],{"class":457},[398,3543,3531],{"class":404},[398,3545,3308],{"class":408},[398,3547,986],{"class":404},[398,3549,848],{"class":457},[398,3551,3225],{"class":404},[398,3553,771],{"class":457},[398,3555,415],{"class":408},[398,3557,3558],{"class":400,"line":1893},[398,3559,2786],{"class":408},[398,3561,3562,3564,3566,3569,3571],{"class":400,"line":1899},[398,3563,2791],{"class":408},[398,3565,1445],{"class":404},[398,3567,3568],{"class":513},"\"敲桌子\"",[398,3570,1445],{"class":404},[398,3572,1467],{"class":408},[398,3574,3575],{"class":400,"line":1904},[398,3576,2805],{"class":408},[398,3578,3579],{"class":400,"line":1918},[398,3580,2846],{"class":404},[398,3582,3583],{"class":400,"line":1923},[398,3584,2786],{"class":408},[398,3586,3587,3589,3591,3593,3595],{"class":400,"line":1929},[398,3588,2791],{"class":408},[398,3590,1445],{"class":404},[398,3592,843],{"class":408},[398,3594,1445],{"class":404},[398,3596,1467],{"class":408},[398,3598,3599],{"class":400,"line":1950},[398,3600,2805],{"class":408},[398,3602,3603],{"class":400,"line":1955},[398,3604,2463],{"class":408},[398,3606,3607],{"class":400,"line":1969},[398,3608,1841],{"class":408},[19,3610,3611],{},"嵌套实现星图",[389,3613,3615],{"className":391,"code":3614,"language":393,"meta":316,"style":316},"#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",[395,3616,3617,3623,3633,3641,3645,3671,3675,3704,3708,3719,3723,3732,3736],{"__ignoreMap":316},[398,3618,3619,3621],{"class":400,"line":401},[398,3620,2225],{"class":404},[398,3622,2228],{"class":513},[398,3624,3625,3627,3629,3631],{"class":400,"line":317},[398,3626,2233],{"class":404},[398,3628,2236],{"class":404},[398,3630,2240],{"class":2239},[398,3632,1566],{"class":408},[398,3634,3635,3637,3639],{"class":400,"line":320},[398,3636,412],{"class":404},[398,3638,2249],{"class":2239},[398,3640,2252],{"class":408},[398,3642,3643],{"class":400,"line":1470},[398,3644,1822],{"class":408},[398,3646,3647,3649,3651,3653,3655,3657,3659,3661,3663,3665,3667,3669],{"class":400,"line":1476},[398,3648,3477],{"class":404},[398,3650,1934],{"class":408},[398,3652,412],{"class":404},[398,3654,3308],{"class":408},[398,3656,454],{"class":404},[398,3658,593],{"class":457},[398,3660,3315],{"class":408},[398,3662,1312],{"class":404},[398,3664,848],{"class":457},[398,3666,3315],{"class":408},[398,3668,2568],{"class":404},[398,3670,415],{"class":408},[398,3672,3673],{"class":400,"line":1490},[398,3674,2306],{"class":408},[398,3676,3677,3680,3682,3684,3687,3689,3691,3694,3696,3698,3700,3702],{"class":400,"line":1496},[398,3678,3679],{"class":404},"        for",[398,3681,1934],{"class":408},[398,3683,412],{"class":404},[398,3685,3686],{"class":408}," j",[398,3688,454],{"class":404},[398,3690,593],{"class":457},[398,3692,3693],{"class":408},";j",[398,3695,1312],{"class":404},[398,3697,848],{"class":457},[398,3699,3693],{"class":408},[398,3701,2568],{"class":404},[398,3703,415],{"class":408},[398,3705,3706],{"class":400,"line":1587},[398,3707,2786],{"class":408},[398,3709,3710,3712,3714,3717],{"class":400,"line":1593},[398,3711,2791],{"class":408},[398,3713,1445],{"class":404},[398,3715,3716],{"class":513},"\"*\"",[398,3718,1566],{"class":408},[398,3720,3721],{"class":400,"line":1605},[398,3722,2805],{"class":408},[398,3724,3725,3728,3730],{"class":400,"line":1888},[398,3726,3727],{"class":408},"        cout",[398,3729,1445],{"class":404},[398,3731,1467],{"class":408},[398,3733,3734],{"class":400,"line":1893},[398,3735,2463],{"class":408},[398,3737,3738],{"class":400,"line":1899},[398,3739,1841],{"class":408},[19,3741,3742],{},"乘法口诀表",[389,3744,3746],{"className":391,"code":3745,"language":393,"meta":316,"style":316},"#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",[395,3747,3748,3754,3764,3772,3776,3802,3806,3831,3835,3875,3879,3887,3891],{"__ignoreMap":316},[398,3749,3750,3752],{"class":400,"line":401},[398,3751,2225],{"class":404},[398,3753,2610],{"class":513},[398,3755,3756,3758,3760,3762],{"class":400,"line":317},[398,3757,2233],{"class":404},[398,3759,2236],{"class":404},[398,3761,2240],{"class":2239},[398,3763,1566],{"class":408},[398,3765,3766,3768,3770],{"class":400,"line":320},[398,3767,412],{"class":404},[398,3769,2249],{"class":2239},[398,3771,2252],{"class":408},[398,3773,3774],{"class":400,"line":1470},[398,3775,1822],{"class":408},[398,3777,3778,3780,3782,3784,3786,3788,3790,3792,3794,3796,3798,3800],{"class":400,"line":1476},[398,3779,3477],{"class":404},[398,3781,409],{"class":408},[398,3783,412],{"class":404},[398,3785,3308],{"class":408},[398,3787,454],{"class":404},[398,3789,619],{"class":457},[398,3791,3315],{"class":408},[398,3793,1312],{"class":404},[398,3795,848],{"class":457},[398,3797,3315],{"class":408},[398,3799,2568],{"class":404},[398,3801,415],{"class":408},[398,3803,3804],{"class":400,"line":1490},[398,3805,2306],{"class":408},[398,3807,3808,3810,3812,3814,3816,3818,3820,3822,3824,3827,3829],{"class":400,"line":1496},[398,3809,3679],{"class":404},[398,3811,409],{"class":408},[398,3813,412],{"class":404},[398,3815,3686],{"class":408},[398,3817,454],{"class":404},[398,3819,619],{"class":457},[398,3821,3693],{"class":408},[398,3823,1864],{"class":404},[398,3825,3826],{"class":408},"i;j",[398,3828,2568],{"class":404},[398,3830,415],{"class":408},[398,3832,3833],{"class":400,"line":1587},[398,3834,2786],{"class":408},[398,3836,3837,3839,3841,3843,3845,3847,3849,3851,3853,3856,3858,3860,3862,3864,3866,3869,3871,3873],{"class":400,"line":1593},[398,3838,2791],{"class":408},[398,3840,1445],{"class":404},[398,3842,869],{"class":408},[398,3844,1445],{"class":404},[398,3846,3716],{"class":513},[398,3848,1445],{"class":404},[398,3850,843],{"class":408},[398,3852,1445],{"class":404},[398,3854,3855],{"class":513},"\"=\"",[398,3857,1445],{"class":404},[398,3859,843],{"class":408},[398,3861,857],{"class":404},[398,3863,869],{"class":408},[398,3865,1445],{"class":404},[398,3867,3868],{"class":513},"'",[398,3870,1506],{"class":457},[398,3872,3868],{"class":513},[398,3874,1566],{"class":408},[398,3876,3877],{"class":400,"line":1605},[398,3878,2805],{"class":408},[398,3880,3881,3883,3885],{"class":400,"line":1888},[398,3882,3727],{"class":408},[398,3884,1445],{"class":404},[398,3886,1467],{"class":408},[398,3888,3889],{"class":400,"line":1893},[398,3890,2463],{"class":408},[398,3892,3893],{"class":400,"line":1899},[398,3894,1841],{"class":408},[14,3896,3898],{"id":3897},"_163跳出语句","1.6.3跳出语句",[38,3900,3901],{},[41,3902,3903],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,3905,3906],{},"break使用时机：",[67,3908,3909,3912,3915],{},[41,3910,3911],{},"出现在switch条件语句中，作用是终止case并跳出switch",[41,3913,3914],{},"出现在循环结构中，作用是跳出当前的循环结构",[41,3916,3917],{},"出现在嵌套循环中，跳出最近的内层循环语句",[38,3919,3920,3923],{"start":317},[41,3921,3922],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[41,3924,3925],{},"goto语句\n语法：goto 标记;",[19,3927,3928],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[389,3930,3932],{"className":391,"code":3931,"language":393,"meta":316,"style":316},"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",[395,3933,3934,3942,3946,3959,3969,3982,3995,4008,4016,4032],{"__ignoreMap":316},[398,3935,3936,3938,3940],{"class":400,"line":401},[398,3937,412],{"class":404},[398,3939,2249],{"class":2239},[398,3941,2252],{"class":408},[398,3943,3944],{"class":400,"line":317},[398,3945,1822],{"class":408},[398,3947,3948,3950,3952,3955,3957],{"class":400,"line":320},[398,3949,1827],{"class":408},[398,3951,1445],{"class":404},[398,3953,3954],{"class":513},"\"1\"",[398,3956,1445],{"class":404},[398,3958,1467],{"class":408},[398,3960,3961,3964,3967],{"class":400,"line":1470},[398,3962,3963],{"class":404},"    goto",[398,3965,3966],{"class":2239}," FLAG",[398,3968,1566],{"class":408},[398,3970,3971,3973,3975,3978,3980],{"class":400,"line":1476},[398,3972,1827],{"class":408},[398,3974,1445],{"class":404},[398,3976,3977],{"class":513},"\"2\"",[398,3979,1445],{"class":404},[398,3981,1467],{"class":408},[398,3983,3984,3986,3988,3991,3993],{"class":400,"line":1490},[398,3985,1827],{"class":408},[398,3987,1445],{"class":404},[398,3989,3990],{"class":513},"\"3\"",[398,3992,1445],{"class":404},[398,3994,1467],{"class":408},[398,3996,3997,3999,4001,4004,4006],{"class":400,"line":1496},[398,3998,1827],{"class":408},[398,4000,1445],{"class":404},[398,4002,4003],{"class":513},"\"4\"",[398,4005,1445],{"class":404},[398,4007,1467],{"class":408},[398,4009,4010,4013],{"class":400,"line":1587},[398,4011,4012],{"class":2239},"    FLAG",[398,4014,4015],{"class":408},":\n",[398,4017,4018,4020,4022,4025,4027,4029],{"class":400,"line":1593},[398,4019,1827],{"class":408},[398,4021,1445],{"class":404},[398,4023,4024],{"class":513},"\"5\"",[398,4026,1445],{"class":404},[398,4028,1514],{"class":408},[398,4030,4031],{"class":467},"\u002F\u002F跳过了2,3,4,直接到5\n",[398,4033,4034],{"class":400,"line":1605},[398,4035,1841],{"class":408},[343,4037,4039],{"id":4038},"_17数组","1.7数组",[14,4041,4043],{"id":4042},"_171一维数组","1.7.1一维数组",[38,4045,4046],{},[41,4047,4048],{},"一维数组定义方式",[84,4050,4051,4061],{},[87,4052,4053],{},[90,4054,4055,4058],{},[93,4056,4057],{},"方式",[93,4059,4060],{},"注意事项",[101,4062,4063,4077,4087],{},[90,4064,4065,4071],{},[106,4066,4067,4068,464],{},"数据类型 数组名",[398,4069,4070],{},"数组长度",[106,4072,4073,4074,4076],{},"这种方式是先定义再arr",[398,4075,843],{},"赋值",[90,4078,4079,4084],{},[106,4080,4067,4081,4083],{},[398,4082,4070],{},"={值1,值2....};",[106,4085,4086],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[90,4088,4089,4093],{},[106,4090,4067,4091,4083],{},[398,4092],{},[106,4094,4095,4096,4098],{},"int arr",[398,4097],{},";这是不正确的，按照这样的方式定义必须有初始长度",[38,4100,4101],{"start":317},[41,4102,4103],{},"一维数组数组名\n用途：",[67,4105,4106],{},[41,4107,4108],{},"1.可以统计整个数组在内存中的长度：",[389,4110,4112],{"className":391,"code":4111,"language":393,"meta":316,"style":316},"sizeof(arr);\nsizeof(arr[0]);\n",[395,4113,4114,4121],{"__ignoreMap":316},[398,4115,4116,4118],{"class":400,"line":401},[398,4117,405],{"class":404},[398,4119,4120],{"class":408},"(arr);\n",[398,4122,4123,4125,4128,4130],{"class":400,"line":317},[398,4124,405],{"class":404},[398,4126,4127],{"class":408},"(arr[",[398,4129,593],{"class":457},[398,4131,4132],{"class":408},"]);\n",[67,4134,4135],{},[41,4136,4137],{},"2.可以获取数组在内存中的首地址:",[389,4139,4141],{"className":391,"code":4140,"language":393,"meta":316,"style":316},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[395,4142,4143,4148,4161,4166],{"__ignoreMap":316},[398,4144,4145],{"class":400,"line":401},[398,4146,4147],{"class":467},"\u002F\u002F查看16进制的首地址\n",[398,4149,4150,4152,4154,4157,4159],{"class":400,"line":317},[398,4151,1645],{"class":408},[398,4153,1445],{"class":404},[398,4155,4156],{"class":408},"arr",[398,4158,1445],{"class":404},[398,4160,1467],{"class":408},[398,4162,4163],{"class":400,"line":320},[398,4164,4165],{"class":467},"\u002F\u002F看10进制数\n",[398,4167,4168,4170,4172,4174,4176,4178,4180,4183,4185,4187,4189],{"class":400,"line":1470},[398,4169,1645],{"class":408},[398,4171,1445],{"class":404},[398,4173,409],{"class":408},[398,4175,412],{"class":404},[398,4177,831],{"class":408},[398,4179,755],{"class":404},[398,4181,4182],{"class":408},"arr[",[398,4184,593],{"class":457},[398,4186,1342],{"class":408},[398,4188,1445],{"class":404},[398,4190,1467],{"class":408},[19,4192,4193],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[67,4195,4196],{},[41,4197,4198],{},"1️⃣五只小猪称体重",[389,4200,4202],{"className":391,"code":4201,"language":393,"meta":316,"style":316},"#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",[395,4203,4204,4210,4220,4228,4232,4272,4285,4311,4315,4327,4331,4341,4345,4349,4362,4372],{"__ignoreMap":316},[398,4205,4206,4208],{"class":400,"line":401},[398,4207,2225],{"class":404},[398,4209,2228],{"class":513},[398,4211,4212,4214,4216,4218],{"class":400,"line":317},[398,4213,2233],{"class":404},[398,4215,2236],{"class":404},[398,4217,2240],{"class":2239},[398,4219,1566],{"class":408},[398,4221,4222,4224,4226],{"class":400,"line":320},[398,4223,412],{"class":404},[398,4225,2249],{"class":2239},[398,4227,2252],{"class":408},[398,4229,4230],{"class":400,"line":1470},[398,4231,1822],{"class":408},[398,4233,4234,4236,4239,4241,4243,4245,4247,4250,4252,4255,4257,4259,4261,4264,4266,4269],{"class":400,"line":1476},[398,4235,2261],{"class":404},[398,4237,4238],{"class":408}," arr[",[398,4240,721],{"class":457},[398,4242,1342],{"class":408},[398,4244,454],{"class":404},[398,4246,1298],{"class":408},[398,4248,4249],{"class":457},"300",[398,4251,780],{"class":408},[398,4253,4254],{"class":457},"350",[398,4256,780],{"class":408},[398,4258,1998],{"class":457},[398,4260,780],{"class":408},[398,4262,4263],{"class":457},"400",[398,4265,780],{"class":408},[398,4267,4268],{"class":457},"250",[398,4270,4271],{"class":408},"};\n",[398,4273,4274,4276,4279,4281,4283],{"class":400,"line":1490},[398,4275,2261],{"class":404},[398,4277,4278],{"class":408}," tmp",[398,4280,454],{"class":404},[398,4282,593],{"class":457},[398,4284,1566],{"class":408},[398,4286,4287,4289,4291,4293,4295,4297,4299,4301,4303,4305,4307,4309],{"class":400,"line":1496},[398,4288,3477],{"class":404},[398,4290,1934],{"class":408},[398,4292,412],{"class":404},[398,4294,3308],{"class":408},[398,4296,454],{"class":404},[398,4298,593],{"class":457},[398,4300,3315],{"class":408},[398,4302,1312],{"class":404},[398,4304,721],{"class":457},[398,4306,3315],{"class":408},[398,4308,2568],{"class":404},[398,4310,415],{"class":408},[398,4312,4313],{"class":400,"line":1587},[398,4314,2306],{"class":408},[398,4316,4317,4319,4322,4324],{"class":400,"line":1593},[398,4318,2773],{"class":404},[398,4320,4321],{"class":408},"(tmp",[398,4323,1312],{"class":404},[398,4325,4326],{"class":408},"arr[i])\n",[398,4328,4329],{"class":400,"line":1605},[398,4330,2786],{"class":408},[398,4332,4333,4336,4338],{"class":400,"line":1888},[398,4334,4335],{"class":408},"            tmp",[398,4337,454],{"class":404},[398,4339,4340],{"class":408},"arr[i];\n",[398,4342,4343],{"class":400,"line":1893},[398,4344,2805],{"class":408},[398,4346,4347],{"class":400,"line":1899},[398,4348,2463],{"class":408},[398,4350,4351,4353,4355,4358,4360],{"class":400,"line":1904},[398,4352,1827],{"class":408},[398,4354,1445],{"class":404},[398,4356,4357],{"class":408},"tmp",[398,4359,1445],{"class":404},[398,4361,1467],{"class":408},[398,4363,4364,4367,4370],{"class":400,"line":1918},[398,4365,4366],{"class":404},"    return",[398,4368,4369],{"class":457}," 0",[398,4371,1566],{"class":408},[398,4373,4374],{"class":400,"line":1923},[398,4375,1841],{"class":408},[67,4377,4378],{},[41,4379,4380],{},"2️⃣数组元素逆置",[389,4382,4384],{"className":391,"code":4383,"language":393,"meta":316,"style":316},"\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",[395,4385,4386,4391,4397,4407,4415,4419,4454,4470,4502,4515,4520,4525,4537,4547,4557,4562,4571,4581,4586,4591,4618,4622,4638,4642,4653,4662],{"__ignoreMap":316},[398,4387,4388],{"class":400,"line":401},[398,4389,4390],{"class":467},"\u002F\u002F元素逆置\n",[398,4392,4393,4395],{"class":400,"line":317},[398,4394,2225],{"class":404},[398,4396,2228],{"class":513},[398,4398,4399,4401,4403,4405],{"class":400,"line":320},[398,4400,2233],{"class":404},[398,4402,2236],{"class":404},[398,4404,2240],{"class":2239},[398,4406,1566],{"class":408},[398,4408,4409,4411,4413],{"class":400,"line":1470},[398,4410,412],{"class":404},[398,4412,2249],{"class":2239},[398,4414,2252],{"class":408},[398,4416,4417],{"class":400,"line":1476},[398,4418,1822],{"class":408},[398,4420,4421,4424,4426,4428,4430,4432,4434,4436,4438,4440,4442,4444,4446,4448,4450,4452],{"class":400,"line":1490},[398,4422,4423],{"class":404},"   int",[398,4425,4238],{"class":408},[398,4427,721],{"class":457},[398,4429,1342],{"class":408},[398,4431,454],{"class":404},[398,4433,1298],{"class":408},[398,4435,619],{"class":457},[398,4437,780],{"class":408},[398,4439,486],{"class":457},[398,4441,780],{"class":408},[398,4443,480],{"class":457},[398,4445,780],{"class":408},[398,4447,695],{"class":457},[398,4449,780],{"class":408},[398,4451,721],{"class":457},[398,4453,4271],{"class":408},[398,4455,4456,4458,4461,4463,4465,4467],{"class":400,"line":1496},[398,4457,4423],{"class":404},[398,4459,4460],{"class":408}," start",[398,4462,454],{"class":404},[398,4464,593],{"class":457},[398,4466,464],{"class":408},[398,4468,4469],{"class":467},"\u002F\u002F起始下标\n",[398,4471,4472,4474,4477,4480,4483,4486,4488,4490,4493,4495,4497,4499],{"class":400,"line":1587},[398,4473,4423],{"class":404},[398,4475,4476],{"class":408}," end",[398,4478,4479],{"class":404},"=sizeof",[398,4481,4482],{"class":408},"(arr)",[398,4484,4485],{"class":404},"\u002Fsizeof",[398,4487,4127],{"class":408},[398,4489,593],{"class":457},[398,4491,4492],{"class":408},"])",[398,4494,934],{"class":404},[398,4496,619],{"class":457},[398,4498,464],{"class":408},[398,4500,4501],{"class":467},"\u002F\u002F结束下标\n",[398,4503,4504,4507,4510,4512],{"class":400,"line":1593},[398,4505,4506],{"class":404},"   while",[398,4508,4509],{"class":408}," (start",[398,4511,1312],{"class":404},[398,4513,4514],{"class":408},"end)\n",[398,4516,4517],{"class":400,"line":1605},[398,4518,4519],{"class":408},"   {\n",[398,4521,4522],{"class":400,"line":1888},[398,4523,4524],{"class":467},"    \u002F\u002F实现元素互换代码\n",[398,4526,4527,4529,4532,4534],{"class":400,"line":1893},[398,4528,2261],{"class":404},[398,4530,4531],{"class":408}," temp",[398,4533,454],{"class":404},[398,4535,4536],{"class":408},"arr[start];\n",[398,4538,4539,4542,4544],{"class":400,"line":1899},[398,4540,4541],{"class":408},"    arr[start]",[398,4543,454],{"class":404},[398,4545,4546],{"class":408},"arr[end];\n",[398,4548,4549,4552,4554],{"class":400,"line":1904},[398,4550,4551],{"class":408},"    arr[end]",[398,4553,454],{"class":404},[398,4555,4556],{"class":408},"temp;\n",[398,4558,4559],{"class":400,"line":1918},[398,4560,4561],{"class":467},"    \u002F\u002F下标更新\n",[398,4563,4564,4567,4569],{"class":400,"line":1923},[398,4565,4566],{"class":408},"    start",[398,4568,2568],{"class":404},[398,4570,1566],{"class":408},[398,4572,4573,4576,4579],{"class":400,"line":1929},[398,4574,4575],{"class":408},"    end",[398,4577,4578],{"class":404},"--",[398,4580,1566],{"class":408},[398,4582,4583],{"class":400,"line":1950},[398,4584,4585],{"class":408},"   }\n",[398,4587,4588],{"class":400,"line":1955},[398,4589,4590],{"class":467},"   \u002F\u002F输出逆置后的数组\n",[398,4592,4593,4596,4598,4600,4602,4604,4606,4608,4610,4612,4614,4616],{"class":400,"line":1969},[398,4594,4595],{"class":404},"   for",[398,4597,1934],{"class":408},[398,4599,412],{"class":404},[398,4601,3308],{"class":408},[398,4603,454],{"class":404},[398,4605,593],{"class":457},[398,4607,3315],{"class":408},[398,4609,1312],{"class":404},[398,4611,721],{"class":457},[398,4613,3315],{"class":408},[398,4615,2568],{"class":404},[398,4617,415],{"class":408},[398,4619,4620],{"class":400,"line":1974},[398,4621,4519],{"class":408},[398,4623,4624,4626,4628,4631,4633,4636],{"class":400,"line":2003},[398,4625,1827],{"class":408},[398,4627,1445],{"class":404},[398,4629,4630],{"class":408},"arr[i]",[398,4632,1445],{"class":404},[398,4634,4635],{"class":513},"\" \"",[398,4637,1566],{"class":408},[398,4639,4640],{"class":400,"line":2008},[398,4641,4585],{"class":408},[398,4643,4644,4647,4649,4651],{"class":400,"line":2025},[398,4645,4646],{"class":2239},"   system",[398,4648,409],{"class":408},[398,4650,2584],{"class":513},[398,4652,2995],{"class":408},[398,4654,4655,4658,4660],{"class":400,"line":2030},[398,4656,4657],{"class":404},"   return",[398,4659,4369],{"class":457},[398,4661,1566],{"class":408},[398,4663,4664],{"class":400,"line":2035},[398,4665,1841],{"class":408},[67,4667,4668],{},[41,4669,4670],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[389,4672,4674],{"className":391,"code":4673,"language":393,"meta":316,"style":316},"\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",[395,4675,4676,4681,4687,4697,4705,4709,4761,4774,4800,4804,4818,4822,4827,4832,4862,4866,4871,4905,4909,4914,4934,4939,4951,4967,4982,4987,4991,4995,5008,5034,5038,5052,5056,5064],{"__ignoreMap":316},[398,4677,4678],{"class":400,"line":401},[398,4679,4680],{"class":467},"\u002F\u002F冒泡排序,升序\n",[398,4682,4683,4685],{"class":400,"line":317},[398,4684,2225],{"class":404},[398,4686,2228],{"class":513},[398,4688,4689,4691,4693,4695],{"class":400,"line":320},[398,4690,2233],{"class":404},[398,4692,2236],{"class":404},[398,4694,2240],{"class":2239},[398,4696,1566],{"class":408},[398,4698,4699,4701,4703],{"class":400,"line":1470},[398,4700,412],{"class":404},[398,4702,2249],{"class":2239},[398,4704,2252],{"class":408},[398,4706,4707],{"class":400,"line":1476},[398,4708,1822],{"class":408},[398,4710,4711,4713,4715,4717,4720,4722,4725,4727,4729,4731,4733,4735,4737,4739,4741,4743,4745,4747,4749,4751,4753,4755,4757,4759],{"class":400,"line":1490},[398,4712,2261],{"class":404},[398,4714,4238],{"class":408},[398,4716,822],{"class":457},[398,4718,4719],{"class":408},"] ",[398,4721,454],{"class":404},[398,4723,4724],{"class":408}," {",[398,4726,695],{"class":457},[398,4728,780],{"class":408},[398,4730,486],{"class":457},[398,4732,780],{"class":408},[398,4734,797],{"class":457},[398,4736,780],{"class":408},[398,4738,593],{"class":457},[398,4740,780],{"class":408},[398,4742,721],{"class":457},[398,4744,780],{"class":408},[398,4746,771],{"class":457},[398,4748,780],{"class":408},[398,4750,619],{"class":457},[398,4752,780],{"class":408},[398,4754,480],{"class":457},[398,4756,780],{"class":408},[398,4758,822],{"class":457},[398,4760,4271],{"class":408},[398,4762,4763,4765,4767,4770,4772],{"class":400,"line":1496},[398,4764,1827],{"class":408},[398,4766,1445],{"class":404},[398,4768,4769],{"class":513},"\"排序前：\"",[398,4771,1445],{"class":404},[398,4773,1467],{"class":408},[398,4775,4776,4778,4780,4782,4784,4786,4788,4790,4792,4794,4796,4798],{"class":400,"line":1587},[398,4777,3477],{"class":404},[398,4779,1934],{"class":408},[398,4781,412],{"class":404},[398,4783,3308],{"class":408},[398,4785,454],{"class":404},[398,4787,593],{"class":457},[398,4789,3315],{"class":408},[398,4791,1312],{"class":404},[398,4793,822],{"class":457},[398,4795,3315],{"class":408},[398,4797,2568],{"class":404},[398,4799,415],{"class":408},[398,4801,4802],{"class":400,"line":1593},[398,4803,2306],{"class":408},[398,4805,4806,4808,4810,4812,4814,4816],{"class":400,"line":1605},[398,4807,3727],{"class":408},[398,4809,1445],{"class":404},[398,4811,4630],{"class":408},[398,4813,1445],{"class":404},[398,4815,4635],{"class":513},[398,4817,1566],{"class":408},[398,4819,4820],{"class":400,"line":1888},[398,4821,2463],{"class":408},[398,4823,4824],{"class":400,"line":1893},[398,4825,4826],{"class":467},"    \u002F\u002F开始冒泡排序\n",[398,4828,4829],{"class":400,"line":1899},[398,4830,4831],{"class":467},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[398,4833,4834,4836,4838,4840,4842,4844,4846,4848,4850,4852,4854,4856,4858,4860],{"class":400,"line":1904},[398,4835,3477],{"class":404},[398,4837,1934],{"class":408},[398,4839,412],{"class":404},[398,4841,3308],{"class":408},[398,4843,454],{"class":404},[398,4845,593],{"class":457},[398,4847,3315],{"class":408},[398,4849,1312],{"class":404},[398,4851,822],{"class":457},[398,4853,934],{"class":404},[398,4855,619],{"class":457},[398,4857,3315],{"class":408},[398,4859,2568],{"class":404},[398,4861,415],{"class":408},[398,4863,4864],{"class":400,"line":1918},[398,4865,2306],{"class":408},[398,4867,4868],{"class":400,"line":1923},[398,4869,4870],{"class":467},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[398,4872,4873,4875,4877,4879,4881,4883,4885,4887,4889,4891,4893,4895,4897,4899,4901,4903],{"class":400,"line":1929},[398,4874,3679],{"class":404},[398,4876,1934],{"class":408},[398,4878,412],{"class":404},[398,4880,3686],{"class":408},[398,4882,454],{"class":404},[398,4884,593],{"class":457},[398,4886,3693],{"class":408},[398,4888,1312],{"class":404},[398,4890,822],{"class":457},[398,4892,934],{"class":404},[398,4894,843],{"class":408},[398,4896,934],{"class":404},[398,4898,619],{"class":457},[398,4900,3693],{"class":408},[398,4902,2568],{"class":404},[398,4904,415],{"class":408},[398,4906,4907],{"class":400,"line":1950},[398,4908,2786],{"class":408},[398,4910,4911],{"class":400,"line":1955},[398,4912,4913],{"class":467},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[398,4915,4916,4919,4922,4924,4927,4929,4931],{"class":400,"line":1969},[398,4917,4918],{"class":404},"            if",[398,4920,4921],{"class":408},"(arr[j]",[398,4923,1362],{"class":404},[398,4925,4926],{"class":408},"arr[j",[398,4928,883],{"class":404},[398,4930,619],{"class":457},[398,4932,4933],{"class":408},"])\n",[398,4935,4936],{"class":400,"line":1974},[398,4937,4938],{"class":408},"            {\n",[398,4940,4941,4944,4946,4948],{"class":400,"line":2003},[398,4942,4943],{"class":404},"                int",[398,4945,4531],{"class":408},[398,4947,454],{"class":404},[398,4949,4950],{"class":408},"arr[j];\n",[398,4952,4953,4956,4958,4960,4962,4964],{"class":400,"line":2008},[398,4954,4955],{"class":408},"                arr[j]",[398,4957,454],{"class":404},[398,4959,4926],{"class":408},[398,4961,883],{"class":404},[398,4963,619],{"class":457},[398,4965,4966],{"class":408},"];\n",[398,4968,4969,4972,4974,4976,4978,4980],{"class":400,"line":2025},[398,4970,4971],{"class":408},"                arr[j",[398,4973,883],{"class":404},[398,4975,619],{"class":457},[398,4977,1342],{"class":408},[398,4979,454],{"class":404},[398,4981,4556],{"class":408},[398,4983,4984],{"class":400,"line":2030},[398,4985,4986],{"class":408},"            }\n",[398,4988,4989],{"class":400,"line":2035},[398,4990,2805],{"class":408},[398,4992,4993],{"class":400,"line":2040},[398,4994,2463],{"class":408},[398,4996,4997,4999,5001,5004,5006],{"class":400,"line":2054},[398,4998,1827],{"class":408},[398,5000,1445],{"class":404},[398,5002,5003],{"class":513},"\"排序后：\"",[398,5005,1445],{"class":404},[398,5007,1467],{"class":408},[398,5009,5010,5012,5014,5016,5018,5020,5022,5024,5026,5028,5030,5032],{"class":400,"line":2059},[398,5011,3477],{"class":404},[398,5013,1934],{"class":408},[398,5015,412],{"class":404},[398,5017,3308],{"class":408},[398,5019,454],{"class":404},[398,5021,593],{"class":457},[398,5023,3315],{"class":408},[398,5025,1312],{"class":404},[398,5027,822],{"class":457},[398,5029,3315],{"class":408},[398,5031,2568],{"class":404},[398,5033,415],{"class":408},[398,5035,5036],{"class":400,"line":2853},[398,5037,2306],{"class":408},[398,5039,5040,5042,5044,5046,5048,5050],{"class":400,"line":2867},[398,5041,3727],{"class":408},[398,5043,1445],{"class":404},[398,5045,4630],{"class":408},[398,5047,1445],{"class":404},[398,5049,4635],{"class":513},[398,5051,1566],{"class":408},[398,5053,5054],{"class":400,"line":2875},[398,5055,2463],{"class":408},[398,5057,5058,5060,5062],{"class":400,"line":2880},[398,5059,4366],{"class":404},[398,5061,4369],{"class":457},[398,5063,1566],{"class":408},[398,5065,5066],{"class":400,"line":2886},[398,5067,1841],{"class":408},[14,5069,5071],{"id":5070},"_172二维数组","1.7.2二维数组",[38,5073,5074],{},[41,5075,5076],{},"二维数组的四种定义方式",[84,5078,5079,5088],{},[87,5080,5081],{},[90,5082,5083,5086],{},[93,5084,5085],{},"序号",[93,5087,4057],{},[101,5089,5090,5100,5109,5118,5127],{},[90,5091,5092,5094],{},[106,5093,619],{},[106,5095,5096,5097,464],{},"数据类型 数组名[行数]",[398,5098,5099],{},"列数",[90,5101,5102,5104],{},[106,5103,486],{},[106,5105,5096,5106,5108],{},[398,5107,5099],{},"={ {数据1,数据2}，{数据3，数据4}... }",[90,5110,5111,5113],{},[106,5112,480],{},[106,5114,5096,5115,5117],{},[398,5116,5099],{},"={数据1,数据2,数据3...}",[90,5119,5120,5122],{},[106,5121,695],{},[106,5123,5124,5125,5117],{},"数据类型 数组名[]",[398,5126,5099],{},[90,5128,5129,5132],{},[106,5130,5131],{},"注意：不能只省略列数",[106,5133],{},[38,5135,5136],{"start":317},[41,5137,5138],{},"二维数组数组名",[67,5140,5141,5144],{},[41,5142,5143],{},"1.查看二维数组所占内存空间",[41,5145,5146],{},"2.获取二维数组首地址",[19,5148,5149],{},"已知二维数组，求二维数组的行数与列数",[389,5151,5153],{"className":391,"code":5152,"language":393,"meta":316,"style":316},"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",[395,5154,5155,5163,5167,5185,5189,5207,5223,5228,5253,5286],{"__ignoreMap":316},[398,5156,5157,5159,5161],{"class":400,"line":401},[398,5158,412],{"class":404},[398,5160,2249],{"class":2239},[398,5162,2252],{"class":408},[398,5164,5165],{"class":400,"line":317},[398,5166,1822],{"class":408},[398,5168,5169,5171,5173,5175,5178,5180,5182],{"class":400,"line":320},[398,5170,2261],{"class":404},[398,5172,4238],{"class":408},[398,5174,486],{"class":457},[398,5176,5177],{"class":408},"][",[398,5179,480],{"class":457},[398,5181,1342],{"class":408},[398,5183,5184],{"class":404},"=\n",[398,5186,5187],{"class":400,"line":1470},[398,5188,2306],{"class":408},[398,5190,5191,5194,5196,5198,5200,5202,5204],{"class":400,"line":1476},[398,5192,5193],{"class":408},"        {",[398,5195,619],{"class":457},[398,5197,780],{"class":408},[398,5199,486],{"class":457},[398,5201,780],{"class":408},[398,5203,480],{"class":457},[398,5205,5206],{"class":408},"},\n",[398,5208,5209,5211,5213,5215,5217,5219,5221],{"class":400,"line":1490},[398,5210,5193],{"class":408},[398,5212,695],{"class":457},[398,5214,780],{"class":408},[398,5216,721],{"class":457},[398,5218,780],{"class":408},[398,5220,746],{"class":457},[398,5222,1841],{"class":408},[398,5224,5225],{"class":400,"line":1496},[398,5226,5227],{"class":408},"    };\n",[398,5229,5230,5232,5234,5237,5239,5241,5243,5245,5247,5249,5251],{"class":400,"line":1587},[398,5231,1827],{"class":408},[398,5233,1445],{"class":404},[398,5235,5236],{"class":513},"\"二维数组的行数\"",[398,5238,1648],{"class":404},[398,5240,4482],{"class":408},[398,5242,4485],{"class":404},[398,5244,4127],{"class":408},[398,5246,593],{"class":457},[398,5248,4492],{"class":408},[398,5250,1445],{"class":404},[398,5252,1467],{"class":408},[398,5254,5255,5257,5259,5262,5264,5266,5268,5270,5272,5274,5276,5278,5280,5282,5284],{"class":400,"line":1593},[398,5256,1827],{"class":408},[398,5258,1445],{"class":404},[398,5260,5261],{"class":513},"\"二维数组的列数\"",[398,5263,1648],{"class":404},[398,5265,4127],{"class":408},[398,5267,593],{"class":457},[398,5269,4492],{"class":408},[398,5271,4485],{"class":404},[398,5273,4127],{"class":408},[398,5275,593],{"class":457},[398,5277,5177],{"class":408},[398,5279,593],{"class":457},[398,5281,4492],{"class":408},[398,5283,1445],{"class":404},[398,5285,1467],{"class":408},[398,5287,5288],{"class":400,"line":1605},[398,5289,1841],{"class":408},[19,5291,5292],{},"查看二维数组首地址",[389,5294,5296],{"className":391,"code":5295,"language":393,"meta":316,"style":316},"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",[395,5297,5298,5315,5341,5366],{"__ignoreMap":316},[398,5299,5300,5302,5304,5307,5309,5311,5313],{"class":400,"line":401},[398,5301,1645],{"class":408},[398,5303,1445],{"class":404},[398,5305,5306],{"class":513},"\"二维数组首地址：\"",[398,5308,1445],{"class":404},[398,5310,4156],{"class":408},[398,5312,1445],{"class":404},[398,5314,1467],{"class":408},[398,5316,5317,5319,5321,5324,5326,5328,5330,5333,5335,5337,5339],{"class":400,"line":317},[398,5318,1645],{"class":408},[398,5320,1445],{"class":404},[398,5322,5323],{"class":513},"\"二维数组第一行的首地址：\"",[398,5325,1445],{"class":404},[398,5327,409],{"class":408},[398,5329,412],{"class":404},[398,5331,5332],{"class":408},")arr[",[398,5334,593],{"class":457},[398,5336,1342],{"class":408},[398,5338,1445],{"class":404},[398,5340,1467],{"class":408},[398,5342,5343,5345,5347,5350,5352,5354,5356,5358,5360,5362,5364],{"class":400,"line":320},[398,5344,1645],{"class":408},[398,5346,1445],{"class":404},[398,5348,5349],{"class":513},"\"二维数组第二行的首地址：\"",[398,5351,1445],{"class":404},[398,5353,409],{"class":408},[398,5355,412],{"class":404},[398,5357,5332],{"class":408},[398,5359,619],{"class":457},[398,5361,1342],{"class":408},[398,5363,1445],{"class":404},[398,5365,1467],{"class":408},[398,5367,5368,5370,5372,5375,5377,5379,5381,5383,5385,5387,5389,5391,5393,5395,5397,5399],{"class":400,"line":1470},[398,5369,1645],{"class":408},[398,5371,1445],{"class":404},[398,5373,5374],{"class":513},"\"二维数组第一个元素的首地址:\"",[398,5376,1445],{"class":404},[398,5378,409],{"class":408},[398,5380,412],{"class":404},[398,5382,831],{"class":408},[398,5384,755],{"class":404},[398,5386,4182],{"class":408},[398,5388,593],{"class":457},[398,5390,5177],{"class":408},[398,5392,593],{"class":457},[398,5394,1342],{"class":408},[398,5396,1445],{"class":404},[398,5398,1514],{"class":408},[398,5400,5401],{"class":467},"\u002F\u002F对于数，要加取址符\n",[5403,5404,5405],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":316,"searchDepth":317,"depth":317,"links":5407},[5408,5409,5410,5418,5419,5425,5430],{"id":345,"depth":317,"text":346},{"id":352,"depth":317,"text":353},{"id":367,"depth":317,"text":368,"children":5411},[5412,5413,5414,5415,5416,5417],{"id":371,"depth":320,"text":372},{"id":425,"depth":320,"text":426},{"id":494,"depth":320,"text":495},{"id":1426,"depth":320,"text":1427},{"id":1520,"depth":320,"text":1521},{"id":1619,"depth":320,"text":1620},{"id":1661,"depth":317,"text":1662},{"id":1729,"depth":317,"text":1730,"children":5420},[5421,5422,5423,5424],{"id":1733,"depth":320,"text":1734},{"id":1755,"depth":320,"text":1756},{"id":1764,"depth":320,"text":1765},{"id":1773,"depth":320,"text":1774},{"id":1782,"depth":317,"text":1783,"children":5426},[5427,5428,5429],{"id":1786,"depth":320,"text":1787},{"id":2481,"depth":320,"text":2482},{"id":3897,"depth":320,"text":3898},{"id":4038,"depth":317,"text":4039,"children":5431},[5432,5433],{"id":4042,"depth":320,"text":4043},{"id":5070,"depth":320,"text":5071},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":336,"description":316},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5440,"title":5441,"body":5442,"description":316,"extension":326,"meta":6542,"navigation":328,"path":6543,"seo":6544,"stem":6545,"__hash__":6546},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5443,"toc":6534},[5444,5447,5451,5459,5467,5470,5536,5540,5543,5619,5623,5626,5629,5632,5845,5849,5854,5918,5923,5990,5995,6086,6089,6194,6198,6201,6207,6351,6355,6358,6372,6375,6420,6423,6531],[10,5445,5441],{"id":5446},"_2函数",[343,5448,5450],{"id":5449},"_21函数概述","2.1函数概述",[38,5452,5453,5456],{},[41,5454,5455],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[41,5457,5458],{},"语法：",[389,5460,5465],{"className":5461,"code":5463,"language":5464,"meta":316},[5462],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[395,5466,5463],{"__ignoreMap":316},[19,5468,5469],{},"小案例",[389,5471,5473],{"className":391,"code":5472,"language":393,"meta":316,"style":316},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[395,5474,5475,5480,5504,5508,5525,5532],{"__ignoreMap":316},[398,5476,5477],{"class":400,"line":401},[398,5478,5479],{"class":467},"\u002F\u002Fnum1,num2形参\n",[398,5481,5482,5484,5487,5489,5491,5495,5497,5499,5502],{"class":400,"line":317},[398,5483,412],{"class":404},[398,5485,5486],{"class":2239}," add",[398,5488,409],{"class":408},[398,5490,412],{"class":404},[398,5492,5494],{"class":5493},"s4XuR"," num1",[398,5496,780],{"class":408},[398,5498,412],{"class":404},[398,5500,5501],{"class":5493}," num2",[398,5503,415],{"class":408},[398,5505,5506],{"class":400,"line":320},[398,5507,1822],{"class":408},[398,5509,5510,5512,5515,5517,5520,5522],{"class":400,"line":1470},[398,5511,2261],{"class":404},[398,5513,5514],{"class":408}," sum",[398,5516,454],{"class":404},[398,5518,5519],{"class":408},"num1",[398,5521,883],{"class":404},[398,5523,5524],{"class":408},"num2;\n",[398,5526,5527,5529],{"class":400,"line":1476},[398,5528,4366],{"class":404},[398,5530,5531],{"class":408}," sum;\n",[398,5533,5534],{"class":400,"line":1490},[398,5535,1841],{"class":408},[343,5537,5539],{"id":5538},"_22函数调用","2.2函数调用",[19,5541,5542],{},"调用刚刚写的求和函数",[389,5544,5546],{"className":391,"code":5545,"language":393,"meta":316,"style":316},"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",[395,5547,5548,5556,5560,5565,5577,5589,5598,5603,5615],{"__ignoreMap":316},[398,5549,5550,5552,5554],{"class":400,"line":401},[398,5551,412],{"class":404},[398,5553,2249],{"class":2239},[398,5555,2252],{"class":408},[398,5557,5558],{"class":400,"line":317},[398,5559,1822],{"class":408},[398,5561,5562],{"class":400,"line":320},[398,5563,5564],{"class":467},"    \u002F\u002Fa,b实参\n",[398,5566,5567,5569,5571,5573,5575],{"class":400,"line":1470},[398,5568,2261],{"class":404},[398,5570,1674],{"class":408},[398,5572,454],{"class":404},[398,5574,593],{"class":457},[398,5576,1566],{"class":408},[398,5578,5579,5581,5583,5585,5587],{"class":400,"line":1476},[398,5580,2261],{"class":404},[398,5582,3109],{"class":408},[398,5584,454],{"class":404},[398,5586,593],{"class":457},[398,5588,1566],{"class":408},[398,5590,5591,5593,5595],{"class":400,"line":1490},[398,5592,2288],{"class":408},[398,5594,1705],{"class":404},[398,5596,5597],{"class":408},"a,b;\n",[398,5599,5600],{"class":400,"line":1496},[398,5601,5602],{"class":467},"    \u002F\u002F调用函数时，实参值传给了形参\n",[398,5604,5605,5607,5609,5612],{"class":400,"line":1587},[398,5606,1827],{"class":408},[398,5608,1445],{"class":404},[398,5610,5611],{"class":2239},"add",[398,5613,5614],{"class":408},"(a,b);\n",[398,5616,5617],{"class":400,"line":1593},[398,5618,1841],{"class":408},[343,5620,5622],{"id":5621},"_23值传递","2.3值传递",[19,5624,5625],{},"值传递就是函数调用时实参将数值传给形参",[19,5627,5628],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,5630,5631],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[389,5633,5635],{"className":391,"code":5634,"language":393,"meta":316,"style":316},"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",[395,5636,5637,5659,5663,5676,5693,5711,5722,5731,5740,5753,5769,5785,5794,5798,5806,5810,5822,5834,5841],{"__ignoreMap":316},[398,5638,5639,5642,5645,5647,5649,5651,5653,5655,5657],{"class":400,"line":401},[398,5640,5641],{"class":404},"void",[398,5643,5644],{"class":2239}," swap",[398,5646,409],{"class":408},[398,5648,412],{"class":404},[398,5650,5494],{"class":5493},[398,5652,780],{"class":408},[398,5654,412],{"class":404},[398,5656,5501],{"class":5493},[398,5658,415],{"class":408},[398,5660,5661],{"class":400,"line":317},[398,5662,1822],{"class":408},[398,5664,5665,5667,5669,5672,5674],{"class":400,"line":320},[398,5666,1827],{"class":408},[398,5668,1445],{"class":404},[398,5670,5671],{"class":513},"\"交换前：\"",[398,5673,1445],{"class":404},[398,5675,1467],{"class":408},[398,5677,5678,5680,5682,5685,5687,5689,5691],{"class":400,"line":1470},[398,5679,1827],{"class":408},[398,5681,1445],{"class":404},[398,5683,5684],{"class":513},"\"num1=\"",[398,5686,1445],{"class":404},[398,5688,5519],{"class":408},[398,5690,1445],{"class":404},[398,5692,1467],{"class":408},[398,5694,5695,5697,5699,5702,5704,5707,5709],{"class":400,"line":1476},[398,5696,1827],{"class":408},[398,5698,1445],{"class":404},[398,5700,5701],{"class":513},"\"num2=\"",[398,5703,1445],{"class":404},[398,5705,5706],{"class":408},"num2",[398,5708,1445],{"class":404},[398,5710,1467],{"class":408},[398,5712,5713,5715,5717,5719],{"class":400,"line":1490},[398,5714,2261],{"class":404},[398,5716,4531],{"class":408},[398,5718,454],{"class":404},[398,5720,5721],{"class":408},"num1;\n",[398,5723,5724,5727,5729],{"class":400,"line":1496},[398,5725,5726],{"class":408},"    num1",[398,5728,454],{"class":404},[398,5730,5524],{"class":408},[398,5732,5733,5736,5738],{"class":400,"line":1587},[398,5734,5735],{"class":408},"    num2",[398,5737,454],{"class":404},[398,5739,4556],{"class":408},[398,5741,5742,5744,5746,5749,5751],{"class":400,"line":1593},[398,5743,1827],{"class":408},[398,5745,1445],{"class":404},[398,5747,5748],{"class":513},"\"交换后：\"",[398,5750,1445],{"class":404},[398,5752,1467],{"class":408},[398,5754,5755,5757,5759,5761,5763,5765,5767],{"class":400,"line":1605},[398,5756,1827],{"class":408},[398,5758,1445],{"class":404},[398,5760,5684],{"class":513},[398,5762,1445],{"class":404},[398,5764,5519],{"class":408},[398,5766,1445],{"class":404},[398,5768,1467],{"class":408},[398,5770,5771,5773,5775,5777,5779,5781,5783],{"class":400,"line":1888},[398,5772,1827],{"class":408},[398,5774,1445],{"class":404},[398,5776,5701],{"class":513},[398,5778,1445],{"class":404},[398,5780,5706],{"class":408},[398,5782,1445],{"class":404},[398,5784,1467],{"class":408},[398,5786,5787,5789,5791],{"class":400,"line":1893},[398,5788,4366],{"class":404},[398,5790,464],{"class":408},[398,5792,5793],{"class":467},"\u002F\u002F或者不写\n",[398,5795,5796],{"class":400,"line":1899},[398,5797,1841],{"class":408},[398,5799,5800,5802,5804],{"class":400,"line":1904},[398,5801,412],{"class":404},[398,5803,2249],{"class":2239},[398,5805,2252],{"class":408},[398,5807,5808],{"class":400,"line":1918},[398,5809,1822],{"class":408},[398,5811,5812,5814,5816,5818,5820],{"class":400,"line":1923},[398,5813,2261],{"class":404},[398,5815,1674],{"class":408},[398,5817,454],{"class":404},[398,5819,848],{"class":457},[398,5821,1566],{"class":408},[398,5823,5824,5826,5828,5830,5832],{"class":400,"line":1929},[398,5825,2261],{"class":404},[398,5827,3109],{"class":408},[398,5829,454],{"class":404},[398,5831,1102],{"class":457},[398,5833,1566],{"class":408},[398,5835,5836,5839],{"class":400,"line":1950},[398,5837,5838],{"class":2239},"    swap",[398,5840,5614],{"class":408},[398,5842,5843],{"class":400,"line":1955},[398,5844,1841],{"class":408},[343,5846,5848],{"id":5847},"_24函数的常见形式","2.4函数的常见形式",[38,5850,5851],{},[41,5852,5853],{},"无参无返",[389,5855,5857],{"className":391,"code":5856,"language":393,"meta":316,"style":316},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[395,5858,5859,5868,5872,5885,5889,5897,5901,5906,5914],{"__ignoreMap":316},[398,5860,5861,5863,5866],{"class":400,"line":401},[398,5862,5641],{"class":404},[398,5864,5865],{"class":2239}," test01",[398,5867,2252],{"class":408},[398,5869,5870],{"class":400,"line":317},[398,5871,1822],{"class":408},[398,5873,5874,5876,5878,5881,5883],{"class":400,"line":320},[398,5875,1827],{"class":408},[398,5877,1445],{"class":404},[398,5879,5880],{"class":513},"\"你好\"",[398,5882,1445],{"class":404},[398,5884,1467],{"class":408},[398,5886,5887],{"class":400,"line":1470},[398,5888,1841],{"class":408},[398,5890,5891,5893,5895],{"class":400,"line":1476},[398,5892,412],{"class":404},[398,5894,2249],{"class":2239},[398,5896,2252],{"class":408},[398,5898,5899],{"class":400,"line":1490},[398,5900,1822],{"class":408},[398,5902,5903],{"class":400,"line":1496},[398,5904,5905],{"class":467},"    \u002F\u002F函数调用\n",[398,5907,5908,5911],{"class":400,"line":1587},[398,5909,5910],{"class":2239},"    test01",[398,5912,5913],{"class":408},"();\n",[398,5915,5916],{"class":400,"line":1593},[398,5917,1841],{"class":408},[38,5919,5920],{"start":317},[41,5921,5922],{},"有参无返",[389,5924,5926],{"className":391,"code":5925,"language":393,"meta":316,"style":316},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[395,5927,5928,5943,5947,5959,5963,5971,5975,5986],{"__ignoreMap":316},[398,5929,5930,5932,5935,5937,5939,5941],{"class":400,"line":401},[398,5931,5641],{"class":404},[398,5933,5934],{"class":2239}," test02",[398,5936,409],{"class":408},[398,5938,412],{"class":404},[398,5940,1674],{"class":5493},[398,5942,415],{"class":408},[398,5944,5945],{"class":400,"line":317},[398,5946,1822],{"class":408},[398,5948,5949,5951,5953,5955,5957],{"class":400,"line":320},[398,5950,1827],{"class":408},[398,5952,1445],{"class":404},[398,5954,5880],{"class":513},[398,5956,1445],{"class":404},[398,5958,1467],{"class":408},[398,5960,5961],{"class":400,"line":1470},[398,5962,1841],{"class":408},[398,5964,5965,5967,5969],{"class":400,"line":1476},[398,5966,412],{"class":404},[398,5968,2249],{"class":2239},[398,5970,2252],{"class":408},[398,5972,5973],{"class":400,"line":1490},[398,5974,1822],{"class":408},[398,5976,5977,5980,5982,5984],{"class":400,"line":1496},[398,5978,5979],{"class":2239},"    test02",[398,5981,409],{"class":408},[398,5983,713],{"class":457},[398,5985,2995],{"class":408},[398,5987,5988],{"class":400,"line":1587},[398,5989,1841],{"class":408},[38,5991,5992],{"start":320},[41,5993,5994],{},"无参有返",[389,5996,5998],{"className":391,"code":5997,"language":393,"meta":316,"style":316},"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",[395,5999,6000,6009,6013,6025,6034,6038,6046,6050,6063,6082],{"__ignoreMap":316},[398,6001,6002,6004,6007],{"class":400,"line":401},[398,6003,412],{"class":404},[398,6005,6006],{"class":2239}," test03",[398,6008,2252],{"class":408},[398,6010,6011],{"class":400,"line":317},[398,6012,1822],{"class":408},[398,6014,6015,6017,6019,6021,6023],{"class":400,"line":320},[398,6016,1827],{"class":408},[398,6018,1445],{"class":404},[398,6020,5880],{"class":513},[398,6022,1445],{"class":404},[398,6024,1467],{"class":408},[398,6026,6027,6029,6032],{"class":400,"line":1470},[398,6028,4366],{"class":404},[398,6030,6031],{"class":457}," 100",[398,6033,1566],{"class":408},[398,6035,6036],{"class":400,"line":1476},[398,6037,1841],{"class":408},[398,6039,6040,6042,6044],{"class":400,"line":1490},[398,6041,412],{"class":404},[398,6043,2249],{"class":2239},[398,6045,2252],{"class":408},[398,6047,6048],{"class":400,"line":1496},[398,6049,1822],{"class":408},[398,6051,6052,6054,6056,6058,6061],{"class":400,"line":1587},[398,6053,2261],{"class":404},[398,6055,5494],{"class":408},[398,6057,454],{"class":404},[398,6059,6060],{"class":2239},"test03",[398,6062,5913],{"class":408},[398,6064,6065,6067,6069,6071,6073,6075,6077,6079],{"class":400,"line":1593},[398,6066,1827],{"class":408},[398,6068,1445],{"class":404},[398,6070,5684],{"class":513},[398,6072,1445],{"class":404},[398,6074,5519],{"class":408},[398,6076,1445],{"class":404},[398,6078,1514],{"class":408},[398,6080,6081],{"class":467}," \u002F\u002F100\n",[398,6083,6084],{"class":400,"line":1605},[398,6085,1841],{"class":408},[19,6087,6088],{},"4.有参有返",[389,6090,6092],{"className":391,"code":6091,"language":393,"meta":316,"style":316},"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",[395,6093,6094,6109,6113,6126,6132,6136,6145,6149,6161,6175,6190],{"__ignoreMap":316},[398,6095,6096,6098,6101,6103,6105,6107],{"class":400,"line":401},[398,6097,412],{"class":404},[398,6099,6100],{"class":2239}," test04",[398,6102,409],{"class":408},[398,6104,412],{"class":404},[398,6106,1674],{"class":5493},[398,6108,415],{"class":408},[398,6110,6111],{"class":400,"line":317},[398,6112,1822],{"class":408},[398,6114,6115,6117,6119,6122,6124],{"class":400,"line":320},[398,6116,1827],{"class":408},[398,6118,1445],{"class":404},[398,6120,6121],{"class":513},"\"hello\"",[398,6123,1445],{"class":404},[398,6125,1467],{"class":408},[398,6127,6128,6130],{"class":400,"line":1470},[398,6129,4366],{"class":404},[398,6131,1708],{"class":408},[398,6133,6134],{"class":400,"line":1476},[398,6135,1841],{"class":408},[398,6137,6138,6140,6143],{"class":400,"line":1490},[398,6139,412],{"class":404},[398,6141,6142],{"class":2239}," mian",[398,6144,2252],{"class":408},[398,6146,6147],{"class":400,"line":1496},[398,6148,1822],{"class":408},[398,6150,6151,6153,6155,6157,6159],{"class":400,"line":1587},[398,6152,2261],{"class":404},[398,6154,3109],{"class":408},[398,6156,454],{"class":404},[398,6158,619],{"class":457},[398,6160,1566],{"class":408},[398,6162,6163,6165,6167,6169,6172],{"class":400,"line":1593},[398,6164,2261],{"class":404},[398,6166,3125],{"class":408},[398,6168,454],{"class":404},[398,6170,6171],{"class":2239},"test04",[398,6173,6174],{"class":408},"(b);\n",[398,6176,6177,6179,6181,6183,6185,6187],{"class":400,"line":1605},[398,6178,1827],{"class":408},[398,6180,1445],{"class":404},[398,6182,690],{"class":408},[398,6184,1445],{"class":404},[398,6186,1514],{"class":408},[398,6188,6189],{"class":467}," \u002F\u002F1\n",[398,6191,6192],{"class":400,"line":1888},[398,6193,1841],{"class":408},[343,6195,6197],{"id":6196},"_25函数的声明","2.5函数的声明",[19,6199,6200],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,6202,6203,6204],{},"函数的",[23,6205,6206],{},"声明可以多次，但是函数的定义只能有一次",[389,6208,6210],{"className":391,"code":6209,"language":393,"meta":316,"style":316},"\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",[395,6211,6212,6217,6222,6247,6256,6260,6272,6284,6300,6304,6324,6328,6347],{"__ignoreMap":316},[398,6213,6214],{"class":400,"line":401},[398,6215,6216],{"class":467},"\u002F\u002F函数声明\n",[398,6218,6219],{"class":400,"line":317},[398,6220,6221],{"class":467},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[398,6223,6224,6226,6229,6231,6233,6235,6237,6239,6241,6244],{"class":400,"line":320},[398,6225,412],{"class":404},[398,6227,6228],{"class":2239}," max",[398,6230,409],{"class":408},[398,6232,412],{"class":404},[398,6234,1674],{"class":5493},[398,6236,780],{"class":408},[398,6238,412],{"class":404},[398,6240,3109],{"class":5493},[398,6242,6243],{"class":408},");",[398,6245,6246],{"class":467},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[398,6248,6249,6251,6253],{"class":400,"line":1470},[398,6250,412],{"class":404},[398,6252,2249],{"class":2239},[398,6254,6255],{"class":408},"() \n",[398,6257,6258],{"class":400,"line":1476},[398,6259,1822],{"class":408},[398,6261,6262,6264,6266,6268,6270],{"class":400,"line":1490},[398,6263,2261],{"class":404},[398,6265,1674],{"class":408},[398,6267,454],{"class":404},[398,6269,848],{"class":457},[398,6271,1566],{"class":408},[398,6273,6274,6276,6278,6280,6282],{"class":400,"line":1496},[398,6275,2261],{"class":404},[398,6277,3109],{"class":408},[398,6279,454],{"class":404},[398,6281,1102],{"class":457},[398,6283,1566],{"class":408},[398,6285,6286,6288,6290,6293,6296,6298],{"class":400,"line":1587},[398,6287,1827],{"class":408},[398,6289,1445],{"class":404},[398,6291,6292],{"class":2239},"max",[398,6294,6295],{"class":408},"(a,b)",[398,6297,1445],{"class":404},[398,6299,1467],{"class":408},[398,6301,6302],{"class":400,"line":1593},[398,6303,1841],{"class":408},[398,6305,6306,6308,6310,6312,6314,6316,6318,6320,6322],{"class":400,"line":1605},[398,6307,412],{"class":404},[398,6309,6228],{"class":2239},[398,6311,409],{"class":408},[398,6313,412],{"class":404},[398,6315,1674],{"class":5493},[398,6317,780],{"class":408},[398,6319,412],{"class":404},[398,6321,3109],{"class":5493},[398,6323,415],{"class":408},[398,6325,6326],{"class":400,"line":1888},[398,6327,1822],{"class":408},[398,6329,6330,6332,6334,6336,6338,6340,6342,6344],{"class":400,"line":1893},[398,6331,4366],{"class":404},[398,6333,1674],{"class":408},[398,6335,1362],{"class":404},[398,6337,665],{"class":408},[398,6339,1388],{"class":404},[398,6341,640],{"class":408},[398,6343,1261],{"class":404},[398,6345,6346],{"class":408},"b;\n",[398,6348,6349],{"class":400,"line":1899},[398,6350,1841],{"class":408},[343,6352,6354],{"id":6353},"_26函数的分文件编写","2.6函数的分文件编写",[19,6356,6357],{},"4个步骤：",[67,6359,6360,6363,6366,6369],{},[41,6361,6362],{},"1.创建后缀名为.h的头文件",[41,6364,6365],{},"2.创建后缀名为.cpp的源文件",[41,6367,6368],{},"3.在头文件中写函数的定义",[41,6370,6371],{},"4.在源文件中写函数的定义\n示例：",[19,6373,6374],{},"头文件：swap.h",[389,6376,6378],{"className":391,"code":6377,"language":393,"meta":316,"style":316},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[395,6379,6380,6386,6396,6400],{"__ignoreMap":316},[398,6381,6382,6384],{"class":400,"line":401},[398,6383,2225],{"class":404},[398,6385,2228],{"class":513},[398,6387,6388,6390,6392,6394],{"class":400,"line":317},[398,6389,2233],{"class":404},[398,6391,2236],{"class":404},[398,6393,2240],{"class":2239},[398,6395,1566],{"class":408},[398,6397,6398],{"class":400,"line":320},[398,6399,6216],{"class":467},[398,6401,6402,6404,6406,6408,6410,6412,6414,6416,6418],{"class":400,"line":1470},[398,6403,5641],{"class":404},[398,6405,5644],{"class":2239},[398,6407,409],{"class":408},[398,6409,412],{"class":404},[398,6411,1674],{"class":5493},[398,6413,780],{"class":408},[398,6415,412],{"class":404},[398,6417,3109],{"class":5493},[398,6419,2995],{"class":408},[19,6421,6422],{},"源文件：swap.cpp",[389,6424,6426],{"className":391,"code":6425,"language":393,"meta":316,"style":316},"#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",[395,6427,6428,6435,6440,6460,6464,6475,6484,6493,6510,6527],{"__ignoreMap":316},[398,6429,6430,6432],{"class":400,"line":401},[398,6431,2225],{"class":404},[398,6433,6434],{"class":513}," \"swap.h\"\n",[398,6436,6437],{"class":400,"line":317},[398,6438,6439],{"class":467},"\u002F\u002F函数的定义\n",[398,6441,6442,6444,6446,6448,6450,6452,6454,6456,6458],{"class":400,"line":320},[398,6443,5641],{"class":404},[398,6445,5644],{"class":2239},[398,6447,409],{"class":408},[398,6449,412],{"class":404},[398,6451,1674],{"class":5493},[398,6453,780],{"class":408},[398,6455,412],{"class":404},[398,6457,3109],{"class":5493},[398,6459,415],{"class":408},[398,6461,6462],{"class":400,"line":1470},[398,6463,1822],{"class":408},[398,6465,6466,6468,6470,6472],{"class":400,"line":1476},[398,6467,2261],{"class":404},[398,6469,4531],{"class":408},[398,6471,454],{"class":404},[398,6473,6474],{"class":408},"a;\n",[398,6476,6477,6480,6482],{"class":400,"line":1490},[398,6478,6479],{"class":408},"    a",[398,6481,454],{"class":404},[398,6483,6346],{"class":408},[398,6485,6486,6489,6491],{"class":400,"line":1496},[398,6487,6488],{"class":408},"    b",[398,6490,454],{"class":404},[398,6492,4556],{"class":408},[398,6494,6495,6497,6499,6502,6504,6506,6508],{"class":400,"line":1587},[398,6496,1827],{"class":408},[398,6498,1445],{"class":404},[398,6500,6501],{"class":513},"\"a=\"",[398,6503,1445],{"class":404},[398,6505,640],{"class":408},[398,6507,1445],{"class":404},[398,6509,1467],{"class":408},[398,6511,6512,6514,6516,6519,6521,6523,6525],{"class":400,"line":1593},[398,6513,1827],{"class":408},[398,6515,1445],{"class":404},[398,6517,6518],{"class":513},"\"b=\"",[398,6520,1445],{"class":404},[398,6522,665],{"class":408},[398,6524,1445],{"class":404},[398,6526,1467],{"class":408},[398,6528,6529],{"class":400,"line":1605},[398,6530,1841],{"class":408},[5403,6532,6533],{},"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":316,"searchDepth":317,"depth":317,"links":6535},[6536,6537,6538,6539,6540,6541],{"id":5449,"depth":317,"text":5450},{"id":5538,"depth":317,"text":5539},{"id":5621,"depth":317,"text":5622},{"id":5847,"depth":317,"text":5848},{"id":6196,"depth":317,"text":6197},{"id":6353,"depth":317,"text":6354},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5441,"description":316},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6548,"title":6549,"body":6550,"description":6557,"extension":326,"meta":7962,"navigation":328,"path":7963,"seo":7964,"stem":7965,"__hash__":7966},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6551,"toc":7952},[6552,6555,6558,6562,6724,6728,6731,6734,6737,6740,6880,6884,6887,6890,6893,6958,6962,6967,7034,7037,7041,7044,7055,7060,7080,7083,7088,7107,7110,7114,7133,7136,7140,7375,7379,7382,7385,7388,7550,7553,7557,7560,7566,7949],[10,6553,6549],{"id":6554},"_3指针",[19,6556,6557],{},"通过指针保存一个地址，指针就是个地址",[343,6559,6561],{"id":6560},"_31定义指针","3.1定义指针",[389,6563,6565],{"className":391,"code":6564,"language":393,"meta":316,"style":316},"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",[395,6566,6567,6575,6579,6584,6596,6601,6609,6619,6637,6657,6661,6666,6671,6676,6690,6706,6720],{"__ignoreMap":316},[398,6568,6569,6571,6573],{"class":400,"line":401},[398,6570,412],{"class":404},[398,6572,2249],{"class":2239},[398,6574,2252],{"class":408},[398,6576,6577],{"class":400,"line":317},[398,6578,1822],{"class":408},[398,6580,6581],{"class":400,"line":320},[398,6582,6583],{"class":467},"    \u002F\u002F1.定义指针\n",[398,6585,6586,6588,6590,6592,6594],{"class":400,"line":1470},[398,6587,2261],{"class":404},[398,6589,1674],{"class":408},[398,6591,454],{"class":404},[398,6593,848],{"class":457},[398,6595,1566],{"class":408},[398,6597,6598],{"class":400,"line":1476},[398,6599,6600],{"class":467},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[398,6602,6603,6606],{"class":400,"line":1490},[398,6604,6605],{"class":404},"    int*",[398,6607,6608],{"class":408},"p;\n",[398,6610,6611,6614,6617],{"class":400,"line":1496},[398,6612,6613],{"class":408},"    p",[398,6615,6616],{"class":404},"=&",[398,6618,6474],{"class":408},[398,6620,6621,6623,6625,6628,6631,6633,6635],{"class":400,"line":1587},[398,6622,1827],{"class":408},[398,6624,1445],{"class":404},[398,6626,6627],{"class":513},"\"a的地址为：\"",[398,6629,6630],{"class":404},"\u003C\u003C&",[398,6632,640],{"class":408},[398,6634,1445],{"class":404},[398,6636,1467],{"class":408},[398,6638,6639,6641,6643,6646,6648,6650,6652,6654],{"class":400,"line":1593},[398,6640,1827],{"class":408},[398,6642,1445],{"class":404},[398,6644,6645],{"class":513},"\"指针p为：\"",[398,6647,1445],{"class":404},[398,6649,19],{"class":408},[398,6651,1445],{"class":404},[398,6653,1514],{"class":408},[398,6655,6656],{"class":467},"\u002F\u002F指针p表示的就是a的地址\n",[398,6658,6659],{"class":400,"line":1605},[398,6660,2676],{"emptyLinePlaceholder":328},[398,6662,6663],{"class":400,"line":1888},[398,6664,6665],{"class":467},"    \u002F\u002F2.使用指针\n",[398,6667,6668],{"class":400,"line":1893},[398,6669,6670],{"class":467},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[398,6672,6673],{"class":400,"line":1899},[398,6674,6675],{"class":467},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[398,6677,6678,6681,6683,6685,6688],{"class":400,"line":1904},[398,6679,6680],{"class":404},"    *",[398,6682,19],{"class":408},[398,6684,454],{"class":404},[398,6686,6687],{"class":457},"1000",[398,6689,1566],{"class":408},[398,6691,6692,6694,6697,6699,6701,6703],{"class":400,"line":1918},[398,6693,1827],{"class":408},[398,6695,6696],{"class":404},"\u003C\u003C*",[398,6698,19],{"class":408},[398,6700,1445],{"class":404},[398,6702,1514],{"class":408},[398,6704,6705],{"class":467},"\u002F\u002F1000\n",[398,6707,6708,6710,6712,6714,6716,6718],{"class":400,"line":1923},[398,6709,1827],{"class":408},[398,6711,1445],{"class":404},[398,6713,640],{"class":408},[398,6715,1445],{"class":404},[398,6717,1514],{"class":408},[398,6719,6705],{"class":467},[398,6721,6722],{"class":400,"line":1929},[398,6723,1841],{"class":408},[343,6725,6727],{"id":6726},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,6729,6730],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,6732,6733],{},"在32位操作系统下：占用4个字节空间",[19,6735,6736],{},"在64位操作系统下：占用8个字节空间",[19,6738,6739],{},"上方是不管啥数据类型的",[389,6741,6743],{"className":391,"code":6742,"language":393,"meta":316,"style":316},"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",[395,6744,6745,6753,6757,6762,6774,6779,6784,6789,6802,6824,6850,6876],{"__ignoreMap":316},[398,6746,6747,6749,6751],{"class":400,"line":401},[398,6748,412],{"class":404},[398,6750,2249],{"class":2239},[398,6752,2252],{"class":408},[398,6754,6755],{"class":400,"line":317},[398,6756,1822],{"class":408},[398,6758,6759],{"class":400,"line":320},[398,6760,6761],{"class":467},"    \u002F\u002F指针所占内存空间\n",[398,6763,6764,6766,6768,6770,6772],{"class":400,"line":1470},[398,6765,2261],{"class":404},[398,6767,1674],{"class":408},[398,6769,454],{"class":404},[398,6771,848],{"class":457},[398,6773,1566],{"class":408},[398,6775,6776],{"class":400,"line":1476},[398,6777,6778],{"class":467},"    \u002F\u002Fint *p;\n",[398,6780,6781],{"class":400,"line":1490},[398,6782,6783],{"class":467},"    \u002F\u002Fp=&a;\n",[398,6785,6786],{"class":400,"line":1496},[398,6787,6788],{"class":467},"    \u002F\u002F上述可以写为以下：\n",[398,6790,6791,6793,6796,6798,6800],{"class":400,"line":1587},[398,6792,2261],{"class":404},[398,6794,6795],{"class":404}," *",[398,6797,19],{"class":408},[398,6799,6616],{"class":404},[398,6801,6474],{"class":408},[398,6803,6804,6807,6809,6812,6814,6817,6819,6821],{"class":400,"line":1593},[398,6805,6806],{"class":408},"    cout ",[398,6808,1445],{"class":404},[398,6810,6811],{"class":513},"\"sizeof(int *)\"",[398,6813,1648],{"class":404},[398,6815,6816],{"class":408},"(p)",[398,6818,1445],{"class":404},[398,6820,1514],{"class":408},[398,6822,6823],{"class":467},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[398,6825,6826,6828,6830,6832,6834,6836,6838,6840,6842,6844,6847],{"class":400,"line":1605},[398,6827,6806],{"class":408},[398,6829,1445],{"class":404},[398,6831,6811],{"class":513},[398,6833,1648],{"class":404},[398,6835,409],{"class":408},[398,6837,412],{"class":404},[398,6839,6795],{"class":404},[398,6841,831],{"class":408},[398,6843,1445],{"class":404},[398,6845,6846],{"class":408},"endl",[398,6848,6849],{"class":467},"  \u002F\u002F4字节(32位的话)\n",[398,6851,6852,6854,6856,6859,6861,6863,6865,6867,6869,6871,6873],{"class":400,"line":1888},[398,6853,6806],{"class":408},[398,6855,1445],{"class":404},[398,6857,6858],{"class":513},"\"sizeof(char *)\"",[398,6860,1648],{"class":404},[398,6862,409],{"class":408},[398,6864,505],{"class":404},[398,6866,6795],{"class":404},[398,6868,831],{"class":408},[398,6870,1445],{"class":404},[398,6872,1514],{"class":408},[398,6874,6875],{"class":467}," \u002F\u002F4字节(32位的话)\n",[398,6877,6878],{"class":400,"line":1893},[398,6879,1841],{"class":408},[343,6881,6883],{"id":6882},"_33空指针","3.3空指针",[19,6885,6886],{},"空指针：指针变量指向内存中编号为0的空间",[19,6888,6889],{},"用途：初始化指针变量",[19,6891,6892],{},"注意：空指针指向的内存是不可以访问的",[389,6894,6896],{"className":391,"code":6895,"language":393,"meta":316,"style":316},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[395,6897,6898,6906,6910,6915,6929,6934,6949,6954],{"__ignoreMap":316},[398,6899,6900,6902,6904],{"class":400,"line":401},[398,6901,412],{"class":404},[398,6903,2249],{"class":2239},[398,6905,2252],{"class":408},[398,6907,6908],{"class":400,"line":317},[398,6909,1822],{"class":408},[398,6911,6912],{"class":400,"line":320},[398,6913,6914],{"class":467},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[398,6916,6917,6919,6921,6923,6925,6927],{"class":400,"line":1470},[398,6918,2261],{"class":404},[398,6920,6795],{"class":404},[398,6922,19],{"class":408},[398,6924,454],{"class":404},[398,6926,2668],{"class":457},[398,6928,1566],{"class":408},[398,6930,6931],{"class":400,"line":1476},[398,6932,6933],{"class":467},"    \u002F\u002F2.空指针不能进行访问\n",[398,6935,6936,6938,6940,6942,6944,6946],{"class":400,"line":1490},[398,6937,6680],{"class":404},[398,6939,19],{"class":408},[398,6941,454],{"class":404},[398,6943,713],{"class":457},[398,6945,464],{"class":408},[398,6947,6948],{"class":467},"\u002F\u002F直接报错，压根不能访问\n",[398,6950,6951],{"class":400,"line":1496},[398,6952,6953],{"class":467},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[398,6955,6956],{"class":400,"line":1587},[398,6957,1841],{"class":408},[343,6959,6961],{"id":6960},"_34野指针","3.4野指针",[19,6963,6964],{},[23,6965,6966],{},"指针变量指向非法的内存空间",[389,6968,6970],{"className":391,"code":6969,"language":393,"meta":316,"style":316},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[395,6971,6972,6980,6984,7013,7018,7030],{"__ignoreMap":316},[398,6973,6974,6976,6978],{"class":400,"line":401},[398,6975,412],{"class":404},[398,6977,2249],{"class":2239},[398,6979,2252],{"class":408},[398,6981,6982],{"class":400,"line":317},[398,6983,1822],{"class":408},[398,6985,6986,6988,6990,6992,6994,6996,6998,7000,7002,7005,7008,7010],{"class":400,"line":320},[398,6987,2261],{"class":404},[398,6989,6795],{"class":404},[398,6991,19],{"class":408},[398,6993,454],{"class":404},[398,6995,409],{"class":408},[398,6997,412],{"class":404},[398,6999,6795],{"class":404},[398,7001,831],{"class":408},[398,7003,7004],{"class":404},"0x",[398,7006,7007],{"class":457},"1100",[398,7009,464],{"class":408},[398,7011,7012],{"class":467}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[398,7014,7015],{"class":400,"line":1470},[398,7016,7017],{"class":467},"    \u002F\u002F访问野指针报错\n",[398,7019,7020,7022,7024,7026,7028],{"class":400,"line":1476},[398,7021,1827],{"class":408},[398,7023,6696],{"class":404},[398,7025,19],{"class":408},[398,7027,1445],{"class":404},[398,7029,1467],{"class":408},[398,7031,7032],{"class":400,"line":1490},[398,7033,1841],{"class":408},[19,7035,7036],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[343,7038,7040],{"id":7039},"_35const修饰指针","3.5const修饰指针",[19,7042,7043],{},"三种情况：",[67,7045,7046,7049,7052],{},[41,7047,7048],{},"const修饰指针 常量指针",[41,7050,7051],{},"const修饰常量 指针常量",[41,7053,7054],{},"const即修饰指针，又修饰常量",[38,7056,7057],{},[41,7058,7059],{},"常量指针",[389,7061,7063],{"className":391,"code":7062,"language":393,"meta":316,"style":316},"const int *p=&a;\n",[395,7064,7065],{"__ignoreMap":316},[398,7066,7067,7070,7072,7074,7076,7078],{"class":400,"line":401},[398,7068,7069],{"class":404},"const",[398,7071,2658],{"class":404},[398,7073,6795],{"class":404},[398,7075,19],{"class":408},[398,7077,6616],{"class":404},[398,7079,6474],{"class":408},[19,7081,7082],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[38,7084,7085],{"start":317},[41,7086,7087],{},"指针常量",[389,7089,7091],{"className":391,"code":7090,"language":393,"meta":316,"style":316},"int *const p=&a;\n",[395,7092,7093],{"__ignoreMap":316},[398,7094,7095,7097,7100,7103,7105],{"class":400,"line":401},[398,7096,412],{"class":404},[398,7098,7099],{"class":404}," *const",[398,7101,7102],{"class":408}," p",[398,7104,6616],{"class":404},[398,7106,6474],{"class":408},[19,7108,7109],{},"指针的指向不可以改，指针指向的值可以改",[38,7111,7112],{"start":320},[41,7113,7054],{},[389,7115,7117],{"className":391,"code":7116,"language":393,"meta":316,"style":316},"const int *const p=&a;\n",[395,7118,7119],{"__ignoreMap":316},[398,7120,7121,7123,7125,7127,7129,7131],{"class":400,"line":401},[398,7122,7069],{"class":404},[398,7124,2658],{"class":404},[398,7126,7099],{"class":404},[398,7128,7102],{"class":408},[398,7130,6616],{"class":404},[398,7132,6474],{"class":408},[19,7134,7135],{},"指针的指向和指针指向的值都不可以改变",[343,7137,7139],{"id":7138},"_36指针和数组","3.6指针和数组",[389,7141,7143],{"className":391,"code":7142,"language":393,"meta":316,"style":316},"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",[395,7144,7145,7153,7157,7162,7216,7237,7253,7269,7280,7297,7302,7316,7342,7346,7358,7367,7371],{"__ignoreMap":316},[398,7146,7147,7149,7151],{"class":400,"line":401},[398,7148,412],{"class":404},[398,7150,2249],{"class":2239},[398,7152,2252],{"class":408},[398,7154,7155],{"class":400,"line":317},[398,7156,1822],{"class":408},[398,7158,7159],{"class":400,"line":320},[398,7160,7161],{"class":467},"    \u002F\u002F利用指针访问数组中的元素\n",[398,7163,7164,7166,7168,7170,7172,7174,7176,7178,7180,7182,7184,7186,7188,7190,7192,7194,7196,7198,7200,7202,7204,7206,7208,7210,7212,7214],{"class":400,"line":1470},[398,7165,2261],{"class":404},[398,7167,4238],{"class":408},[398,7169,848],{"class":457},[398,7171,1342],{"class":408},[398,7173,454],{"class":404},[398,7175,1298],{"class":408},[398,7177,619],{"class":457},[398,7179,780],{"class":408},[398,7181,486],{"class":457},[398,7183,780],{"class":408},[398,7185,480],{"class":457},[398,7187,780],{"class":408},[398,7189,695],{"class":457},[398,7191,780],{"class":408},[398,7193,721],{"class":457},[398,7195,780],{"class":408},[398,7197,746],{"class":457},[398,7199,780],{"class":408},[398,7201,771],{"class":457},[398,7203,780],{"class":408},[398,7205,797],{"class":457},[398,7207,780],{"class":408},[398,7209,822],{"class":457},[398,7211,780],{"class":408},[398,7213,848],{"class":457},[398,7215,4271],{"class":408},[398,7217,7218,7220,7222,7225,7227,7229,7231,7233,7235],{"class":400,"line":1476},[398,7219,1827],{"class":408},[398,7221,1445],{"class":404},[398,7223,7224],{"class":513},"\"数组的第一个元素为：\"",[398,7226,1445],{"class":404},[398,7228,4182],{"class":408},[398,7230,593],{"class":457},[398,7232,1342],{"class":408},[398,7234,1445],{"class":404},[398,7236,1467],{"class":408},[398,7238,7239,7241,7243,7245,7247,7250],{"class":400,"line":1490},[398,7240,2261],{"class":404},[398,7242,6795],{"class":404},[398,7244,19],{"class":408},[398,7246,454],{"class":404},[398,7248,7249],{"class":408},"arr;",[398,7251,7252],{"class":467},"\u002F\u002F注意数才要加取地址符号&\n",[398,7254,7255,7257,7259,7261,7263,7265,7267],{"class":400,"line":1496},[398,7256,1827],{"class":408},[398,7258,1445],{"class":404},[398,7260,7224],{"class":513},[398,7262,6696],{"class":404},[398,7264,19],{"class":408},[398,7266,1445],{"class":404},[398,7268,1467],{"class":408},[398,7270,7271,7273,7275,7277],{"class":400,"line":1587},[398,7272,6613],{"class":408},[398,7274,2568],{"class":404},[398,7276,464],{"class":408},[398,7278,7279],{"class":467}," \u002F\u002F让指针向后偏移4个字节\n",[398,7281,7282,7284,7286,7289,7291,7293,7295],{"class":400,"line":1593},[398,7283,1827],{"class":408},[398,7285,1445],{"class":404},[398,7287,7288],{"class":513},"\"数组的第二个元素为：\"",[398,7290,6696],{"class":404},[398,7292,19],{"class":408},[398,7294,1445],{"class":404},[398,7296,1467],{"class":408},[398,7298,7299],{"class":400,"line":1605},[398,7300,7301],{"class":467},"    \u002F\u002F利用指针遍历数组\n",[398,7303,7304,7306,7308,7311,7313],{"class":400,"line":1888},[398,7305,2261],{"class":404},[398,7307,6795],{"class":404},[398,7309,7310],{"class":408},"p2",[398,7312,454],{"class":404},[398,7314,7315],{"class":408},"arr;\n",[398,7317,7318,7320,7322,7324,7326,7328,7330,7332,7334,7336,7338,7340],{"class":400,"line":1893},[398,7319,3477],{"class":404},[398,7321,1934],{"class":408},[398,7323,412],{"class":404},[398,7325,3308],{"class":408},[398,7327,454],{"class":404},[398,7329,593],{"class":457},[398,7331,3315],{"class":408},[398,7333,1312],{"class":404},[398,7335,848],{"class":457},[398,7337,3315],{"class":408},[398,7339,2568],{"class":404},[398,7341,415],{"class":408},[398,7343,7344],{"class":400,"line":1899},[398,7345,2306],{"class":408},[398,7347,7348,7350,7352,7354,7356],{"class":400,"line":1904},[398,7349,3727],{"class":408},[398,7351,6696],{"class":404},[398,7353,7310],{"class":408},[398,7355,1445],{"class":404},[398,7357,1467],{"class":408},[398,7359,7360,7363,7365],{"class":400,"line":1918},[398,7361,7362],{"class":408},"        p2",[398,7364,2568],{"class":404},[398,7366,1566],{"class":408},[398,7368,7369],{"class":400,"line":1923},[398,7370,2463],{"class":408},[398,7372,7373],{"class":400,"line":1929},[398,7374,1841],{"class":408},[343,7376,7378],{"id":7377},"_37指针和函数","3.7指针和函数",[19,7380,7381],{},"利用指针做函数参数，可以修改实参的值",[19,7383,7384],{},"值传递：只改变形参，不改变实参",[19,7386,7387],{},"地址传递：",[389,7389,7391],{"className":391,"code":7390,"language":393,"meta":316,"style":316},"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",[395,7392,7393,7418,7422,7434,7445,7455,7459,7467,7471,7483,7495,7500,7516,7531,7546],{"__ignoreMap":316},[398,7394,7395,7397,7399,7401,7403,7405,7408,7410,7412,7414,7416],{"class":400,"line":401},[398,7396,5641],{"class":404},[398,7398,5644],{"class":2239},[398,7400,409],{"class":408},[398,7402,412],{"class":404},[398,7404,6795],{"class":404},[398,7406,7407],{"class":5493},"p1",[398,7409,780],{"class":408},[398,7411,412],{"class":404},[398,7413,6795],{"class":404},[398,7415,7310],{"class":5493},[398,7417,415],{"class":408},[398,7419,7420],{"class":400,"line":317},[398,7421,1822],{"class":408},[398,7423,7424,7426,7428,7431],{"class":400,"line":320},[398,7425,2261],{"class":404},[398,7427,4531],{"class":408},[398,7429,7430],{"class":404},"=*",[398,7432,7433],{"class":408},"p1;\n",[398,7435,7436,7438,7440,7442],{"class":400,"line":1470},[398,7437,6680],{"class":404},[398,7439,7407],{"class":408},[398,7441,7430],{"class":404},[398,7443,7444],{"class":408},"p2;\n",[398,7446,7447,7449,7451,7453],{"class":400,"line":1476},[398,7448,6680],{"class":404},[398,7450,7310],{"class":408},[398,7452,454],{"class":404},[398,7454,4556],{"class":408},[398,7456,7457],{"class":400,"line":1490},[398,7458,1841],{"class":408},[398,7460,7461,7463,7465],{"class":400,"line":1496},[398,7462,412],{"class":404},[398,7464,2249],{"class":2239},[398,7466,2252],{"class":408},[398,7468,7469],{"class":400,"line":1587},[398,7470,1822],{"class":408},[398,7472,7473,7475,7477,7479,7481],{"class":400,"line":1593},[398,7474,2261],{"class":404},[398,7476,1674],{"class":408},[398,7478,454],{"class":404},[398,7480,848],{"class":457},[398,7482,1566],{"class":408},[398,7484,7485,7487,7489,7491,7493],{"class":400,"line":1605},[398,7486,2261],{"class":404},[398,7488,3109],{"class":408},[398,7490,454],{"class":404},[398,7492,1102],{"class":457},[398,7494,1566],{"class":408},[398,7496,7497],{"class":400,"line":1888},[398,7498,7499],{"class":467},"    \u002F\u002F地址传递\n",[398,7501,7502,7504,7506,7508,7511,7513],{"class":400,"line":1893},[398,7503,5838],{"class":2239},[398,7505,409],{"class":408},[398,7507,755],{"class":404},[398,7509,7510],{"class":408},"a,",[398,7512,755],{"class":404},[398,7514,7515],{"class":408},"b);\n",[398,7517,7518,7520,7522,7524,7526,7528],{"class":400,"line":1899},[398,7519,1827],{"class":408},[398,7521,1445],{"class":404},[398,7523,640],{"class":408},[398,7525,1445],{"class":404},[398,7527,1514],{"class":408},[398,7529,7530],{"class":467},"\u002F\u002F20\n",[398,7532,7533,7535,7537,7539,7541,7543],{"class":400,"line":1904},[398,7534,1827],{"class":408},[398,7536,1445],{"class":404},[398,7538,665],{"class":408},[398,7540,1445],{"class":404},[398,7542,1514],{"class":408},[398,7544,7545],{"class":467},"\u002F\u002F10\n",[398,7547,7548],{"class":400,"line":1918},[398,7549,1841],{"class":408},[19,7551,7552],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[343,7554,7556],{"id":7555},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,7558,7559],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,7561,7562,7563,7565],{},"例如数组：int arr",[398,7564,848],{},"={4,3,6,9,1,2,10,8,7,5}",[389,7567,7569],{"className":391,"code":7568,"language":393,"meta":316,"style":316},"#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",[395,7570,7571,7577,7587,7611,7615,7646,7650,7684,7688,7706,7710,7721,7736,7751,7755,7759,7763,7767,7771,7779,7783,7788,7842,7854,7866,7871,7879,7883,7888,7913,7917,7932,7941,7945],{"__ignoreMap":316},[398,7572,7573,7575],{"class":400,"line":401},[398,7574,2225],{"class":404},[398,7576,2228],{"class":513},[398,7578,7579,7581,7583,7585],{"class":400,"line":317},[398,7580,2233],{"class":404},[398,7582,2236],{"class":404},[398,7584,2240],{"class":2239},[398,7586,1566],{"class":408},[398,7588,7589,7591,7594,7596,7598,7600,7602,7604,7606,7609],{"class":400,"line":320},[398,7590,5641],{"class":404},[398,7592,7593],{"class":2239}," bubbleSort",[398,7595,409],{"class":408},[398,7597,412],{"class":404},[398,7599,6795],{"class":404},[398,7601,19],{"class":5493},[398,7603,780],{"class":408},[398,7605,412],{"class":404},[398,7607,7608],{"class":5493}," len",[398,7610,415],{"class":408},[398,7612,7613],{"class":400,"line":1470},[398,7614,1822],{"class":408},[398,7616,7617,7619,7621,7623,7625,7627,7629,7631,7633,7636,7638,7640,7642,7644],{"class":400,"line":1476},[398,7618,3477],{"class":404},[398,7620,409],{"class":408},[398,7622,412],{"class":404},[398,7624,3308],{"class":408},[398,7626,454],{"class":404},[398,7628,593],{"class":457},[398,7630,3315],{"class":408},[398,7632,1312],{"class":404},[398,7634,7635],{"class":408},"len",[398,7637,934],{"class":404},[398,7639,619],{"class":457},[398,7641,3315],{"class":408},[398,7643,2568],{"class":404},[398,7645,415],{"class":408},[398,7647,7648],{"class":400,"line":1490},[398,7649,2306],{"class":408},[398,7651,7652,7654,7656,7658,7660,7662,7664,7666,7668,7670,7672,7674,7676,7678,7680,7682],{"class":400,"line":1496},[398,7653,3679],{"class":404},[398,7655,409],{"class":408},[398,7657,412],{"class":404},[398,7659,3686],{"class":408},[398,7661,454],{"class":404},[398,7663,593],{"class":457},[398,7665,3693],{"class":408},[398,7667,1312],{"class":404},[398,7669,7635],{"class":408},[398,7671,934],{"class":404},[398,7673,843],{"class":408},[398,7675,934],{"class":404},[398,7677,619],{"class":457},[398,7679,3693],{"class":408},[398,7681,2568],{"class":404},[398,7683,415],{"class":408},[398,7685,7686],{"class":400,"line":1587},[398,7687,2786],{"class":408},[398,7689,7690,7692,7695,7697,7700,7702,7704],{"class":400,"line":1593},[398,7691,4918],{"class":404},[398,7693,7694],{"class":408},"(p[j]",[398,7696,1362],{"class":404},[398,7698,7699],{"class":408},"p[j",[398,7701,883],{"class":404},[398,7703,619],{"class":457},[398,7705,4933],{"class":408},[398,7707,7708],{"class":400,"line":1605},[398,7709,4938],{"class":408},[398,7711,7712,7714,7716,7718],{"class":400,"line":1888},[398,7713,4943],{"class":404},[398,7715,4531],{"class":408},[398,7717,454],{"class":404},[398,7719,7720],{"class":408},"p[j];\n",[398,7722,7723,7726,7728,7730,7732,7734],{"class":400,"line":1893},[398,7724,7725],{"class":408},"                p[j]",[398,7727,454],{"class":404},[398,7729,7699],{"class":408},[398,7731,883],{"class":404},[398,7733,619],{"class":457},[398,7735,4966],{"class":408},[398,7737,7738,7741,7743,7745,7747,7749],{"class":400,"line":1899},[398,7739,7740],{"class":408},"                p[j",[398,7742,883],{"class":404},[398,7744,619],{"class":457},[398,7746,1342],{"class":408},[398,7748,454],{"class":404},[398,7750,4556],{"class":408},[398,7752,7753],{"class":400,"line":1904},[398,7754,4986],{"class":408},[398,7756,7757],{"class":400,"line":1918},[398,7758,2805],{"class":408},[398,7760,7761],{"class":400,"line":1923},[398,7762,2463],{"class":408},[398,7764,7765],{"class":400,"line":1929},[398,7766,1841],{"class":408},[398,7768,7769],{"class":400,"line":1950},[398,7770,2676],{"emptyLinePlaceholder":328},[398,7772,7773,7775,7777],{"class":400,"line":1955},[398,7774,412],{"class":404},[398,7776,2249],{"class":2239},[398,7778,2252],{"class":408},[398,7780,7781],{"class":400,"line":1969},[398,7782,1822],{"class":408},[398,7784,7785],{"class":400,"line":1974},[398,7786,7787],{"class":467},"    \u002F\u002F 1.创建数组\n",[398,7789,7790,7792,7794,7796,7798,7800,7802,7804,7806,7808,7810,7812,7814,7816,7818,7820,7822,7824,7826,7828,7830,7832,7834,7836,7838,7840],{"class":400,"line":2003},[398,7791,2261],{"class":404},[398,7793,4238],{"class":408},[398,7795,848],{"class":457},[398,7797,1342],{"class":408},[398,7799,454],{"class":404},[398,7801,1298],{"class":408},[398,7803,695],{"class":457},[398,7805,780],{"class":408},[398,7807,480],{"class":457},[398,7809,780],{"class":408},[398,7811,746],{"class":457},[398,7813,780],{"class":408},[398,7815,822],{"class":457},[398,7817,780],{"class":408},[398,7819,619],{"class":457},[398,7821,780],{"class":408},[398,7823,486],{"class":457},[398,7825,780],{"class":408},[398,7827,848],{"class":457},[398,7829,780],{"class":408},[398,7831,797],{"class":457},[398,7833,780],{"class":408},[398,7835,771],{"class":457},[398,7837,780],{"class":408},[398,7839,721],{"class":457},[398,7841,4271],{"class":408},[398,7843,7844,7846,7848,7850,7852],{"class":400,"line":2008},[398,7845,2261],{"class":404},[398,7847,7608],{"class":408},[398,7849,454],{"class":404},[398,7851,848],{"class":457},[398,7853,1566],{"class":408},[398,7855,7856,7858,7860,7862,7864],{"class":400,"line":2025},[398,7857,2261],{"class":404},[398,7859,6795],{"class":404},[398,7861,19],{"class":408},[398,7863,454],{"class":404},[398,7865,7315],{"class":408},[398,7867,7868],{"class":400,"line":2030},[398,7869,7870],{"class":467},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[398,7872,7873,7876],{"class":400,"line":2035},[398,7874,7875],{"class":2239},"    bubbleSort",[398,7877,7878],{"class":408},"(p,len);\n",[398,7880,7881],{"class":400,"line":2040},[398,7882,2676],{"emptyLinePlaceholder":328},[398,7884,7885],{"class":400,"line":2054},[398,7886,7887],{"class":467},"    \u002F\u002F 3.打印排序后的数组\n",[398,7889,7890,7892,7894,7896,7898,7900,7902,7904,7906,7909,7911],{"class":400,"line":2059},[398,7891,3477],{"class":404},[398,7893,1934],{"class":408},[398,7895,412],{"class":404},[398,7897,3308],{"class":408},[398,7899,454],{"class":404},[398,7901,593],{"class":457},[398,7903,3490],{"class":408},[398,7905,1312],{"class":404},[398,7907,7908],{"class":408},"len; i",[398,7910,2568],{"class":404},[398,7912,415],{"class":408},[398,7914,7915],{"class":400,"line":2853},[398,7916,2306],{"class":408},[398,7918,7919,7921,7923,7925,7927,7930],{"class":400,"line":2867},[398,7920,3727],{"class":408},[398,7922,6696],{"class":404},[398,7924,19],{"class":408},[398,7926,1445],{"class":404},[398,7928,7929],{"class":513},"\"\"",[398,7931,1566],{"class":408},[398,7933,7934,7937,7939],{"class":400,"line":2875},[398,7935,7936],{"class":408},"        p",[398,7938,2568],{"class":404},[398,7940,1566],{"class":408},[398,7942,7943],{"class":400,"line":2880},[398,7944,2463],{"class":408},[398,7946,7947],{"class":400,"line":2886},[398,7948,1841],{"class":408},[5403,7950,7951],{},"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":316,"searchDepth":317,"depth":317,"links":7953},[7954,7955,7956,7957,7958,7959,7960,7961],{"id":6560,"depth":317,"text":6561},{"id":6726,"depth":317,"text":6727},{"id":6882,"depth":317,"text":6883},{"id":6960,"depth":317,"text":6961},{"id":7039,"depth":317,"text":7040},{"id":7138,"depth":317,"text":7139},{"id":7377,"depth":317,"text":7378},{"id":7555,"depth":317,"text":7556},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6549,"description":6557},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7968,"title":7969,"body":7970,"description":7977,"extension":326,"meta":10951,"navigation":328,"path":10952,"seo":10953,"stem":10954,"__hash__":10955},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7971,"toc":10942},[7972,7975,7978,7982,7985,7988,7999,8337,8340,8344,8347,8354,8609,8613,8616,8619,8774,8778,8781,8784,8990,8994,8997,9300,9303,9311,9315,9318,9469,9471,9482,9539,9543,9548,10205,10213,10216,10310,10313,10933,10939],[10,7973,7969],{"id":7974},"_4结构体",[19,7976,7977],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[343,7979,7981],{"id":7980},"_41结构体定义与使用","4.1结构体定义与使用",[19,7983,7984],{},"语法：struct 结构体名 {结构体成员列表}；",[19,7986,7987],{},"通过结构体创建变量的方式：",[67,7989,7990,7993,7996],{},[41,7991,7992],{},"struct 结构体名 变量名",[41,7994,7995],{},"struct 结构体名 变量名={成员1值，成员2值...}",[41,7997,7998],{},"定义结构体时顺便创建变量",[389,8000,8002],{"className":391,"code":8001,"language":393,"meta":316,"style":316},"#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",[395,8003,8004,8010,8020,8027,8032,8040,8044,8049,8053,8058,8063,8068,8075,8080,8087,8091,8098,8102,8106,8110,8114,8118,8122,8128,8132,8138,8146,8154,8158,8163,8168,8179,8184,8196,8207,8218,8223,8247,8252,8258,8285,8290,8296,8308,8320,8332],{"__ignoreMap":316},[398,8005,8006,8008],{"class":400,"line":401},[398,8007,2225],{"class":404},[398,8009,2228],{"class":513},[398,8011,8012,8014,8016,8018],{"class":400,"line":317},[398,8013,2233],{"class":404},[398,8015,2236],{"class":404},[398,8017,2240],{"class":2239},[398,8019,1566],{"class":408},[398,8021,8022,8024],{"class":400,"line":320},[398,8023,2225],{"class":404},[398,8025,8026],{"class":513},"\u003Cstring>\n",[398,8028,8029],{"class":400,"line":1470},[398,8030,8031],{"class":467},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[398,8033,8034,8037],{"class":400,"line":1476},[398,8035,8036],{"class":404},"struct",[398,8038,8039],{"class":2239}," Student\n",[398,8041,8042],{"class":400,"line":1490},[398,8043,1822],{"class":408},[398,8045,8046],{"class":400,"line":1496},[398,8047,8048],{"class":467},"    \u002F\u002F成员列表\n",[398,8050,8051],{"class":400,"line":1587},[398,8052,2676],{"emptyLinePlaceholder":328},[398,8054,8055],{"class":400,"line":1593},[398,8056,8057],{"class":467},"    \u002F\u002F姓名\n",[398,8059,8060],{"class":400,"line":1605},[398,8061,8062],{"class":408},"    string name;\n",[398,8064,8065],{"class":400,"line":1888},[398,8066,8067],{"class":467},"    \u002F\u002F年龄\n",[398,8069,8070,8072],{"class":400,"line":1893},[398,8071,2261],{"class":404},[398,8073,8074],{"class":408}," age;\n",[398,8076,8077],{"class":400,"line":1899},[398,8078,8079],{"class":467},"    \u002F\u002F分数\n",[398,8081,8082,8084],{"class":400,"line":1904},[398,8083,2261],{"class":404},[398,8085,8086],{"class":408}," score;\n",[398,8088,8089],{"class":400,"line":1918},[398,8090,4271],{"class":408},[398,8092,8093,8095],{"class":400,"line":1923},[398,8094,8036],{"class":404},[398,8096,8097],{"class":2239}," School\n",[398,8099,8100],{"class":400,"line":1929},[398,8101,1822],{"class":408},[398,8103,8104],{"class":400,"line":1950},[398,8105,8048],{"class":467},[398,8107,8108],{"class":400,"line":1955},[398,8109,2676],{"emptyLinePlaceholder":328},[398,8111,8112],{"class":400,"line":1969},[398,8113,8057],{"class":467},[398,8115,8116],{"class":400,"line":1974},[398,8117,8062],{"class":408},[398,8119,8120],{"class":400,"line":2003},[398,8121,8067],{"class":467},[398,8123,8124,8126],{"class":400,"line":2008},[398,8125,2261],{"class":404},[398,8127,8074],{"class":408},[398,8129,8130],{"class":400,"line":2025},[398,8131,8079],{"class":467},[398,8133,8134,8136],{"class":400,"line":2030},[398,8135,2261],{"class":404},[398,8137,8086],{"class":408},[398,8139,8140,8143],{"class":400,"line":2035},[398,8141,8142],{"class":408},"} s3;",[398,8144,8145],{"class":467}," \u002F\u002F创建结构体时就创建了变量\n",[398,8147,8148,8150,8152],{"class":400,"line":2040},[398,8149,412],{"class":404},[398,8151,2249],{"class":2239},[398,8153,2252],{"class":408},[398,8155,8156],{"class":400,"line":2054},[398,8157,1822],{"class":408},[398,8159,8160],{"class":400,"line":2059},[398,8161,8162],{"class":467},"    \u002F\u002F2.通过学生类型创建具体学生\n",[398,8164,8165],{"class":400,"line":2853},[398,8166,8167],{"class":467},"    \u002F\u002F2.1 struct Student s1;\n",[398,8169,8170,8173,8176],{"class":400,"line":2867},[398,8171,8172],{"class":404},"    struct",[398,8174,8175],{"class":2239}," Student",[398,8177,8178],{"class":408}," s1;\n",[398,8180,8181],{"class":400,"line":2875},[398,8182,8183],{"class":467},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[398,8185,8186,8189,8191,8194],{"class":400,"line":2880},[398,8187,8188],{"class":408},"    s1.name",[398,8190,454],{"class":404},[398,8192,8193],{"class":513},"\"张三\"",[398,8195,1566],{"class":408},[398,8197,8198,8201,8203,8205],{"class":400,"line":2886},[398,8199,8200],{"class":408},"    s1.age",[398,8202,454],{"class":404},[398,8204,1052],{"class":457},[398,8206,1566],{"class":408},[398,8208,8209,8212,8214,8216],{"class":400,"line":2892},[398,8210,8211],{"class":408},"    s1.score",[398,8213,454],{"class":404},[398,8215,656],{"class":457},[398,8217,1566],{"class":408},[398,8219,8220],{"class":400,"line":2897},[398,8221,8222],{"class":467},"    \u002F\u002F输出结果\n",[398,8224,8226,8228,8230,8233,8235,8238,8240,8243,8245],{"class":400,"line":8225},37,[398,8227,1827],{"class":408},[398,8229,1445],{"class":404},[398,8231,8232],{"class":408},"s1.name",[398,8234,1445],{"class":404},[398,8236,8237],{"class":408},"s1.age",[398,8239,1445],{"class":404},[398,8241,8242],{"class":408},"s1.score",[398,8244,1445],{"class":404},[398,8246,1467],{"class":408},[398,8248,8250],{"class":400,"line":8249},38,[398,8251,2676],{"emptyLinePlaceholder":328},[398,8253,8255],{"class":400,"line":8254},39,[398,8256,8257],{"class":467},"    \u002F\u002F2.2 struct Student s2={...}\n",[398,8259,8261,8263,8265,8268,8270,8272,8275,8277,8279,8281,8283],{"class":400,"line":8260},40,[398,8262,8172],{"class":404},[398,8264,8175],{"class":2239},[398,8266,8267],{"class":408}," s2",[398,8269,454],{"class":404},[398,8271,1298],{"class":408},[398,8273,8274],{"class":513},"\"王五\"",[398,8276,780],{"class":408},[398,8278,1052],{"class":457},[398,8280,780],{"class":408},[398,8282,656],{"class":457},[398,8284,4271],{"class":408},[398,8286,8288],{"class":400,"line":8287},41,[398,8289,2676],{"emptyLinePlaceholder":328},[398,8291,8293],{"class":400,"line":8292},42,[398,8294,8295],{"class":467},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[398,8297,8299,8302,8304,8306],{"class":400,"line":8298},43,[398,8300,8301],{"class":408},"    s3.name",[398,8303,454],{"class":404},[398,8305,3954],{"class":513},[398,8307,1566],{"class":408},[398,8309,8311,8314,8316,8318],{"class":400,"line":8310},44,[398,8312,8313],{"class":408},"    s3.age",[398,8315,454],{"class":404},[398,8317,1052],{"class":457},[398,8319,1566],{"class":408},[398,8321,8323,8326,8328,8330],{"class":400,"line":8322},45,[398,8324,8325],{"class":408},"    s3.score",[398,8327,454],{"class":404},[398,8329,1102],{"class":457},[398,8331,1566],{"class":408},[398,8333,8335],{"class":400,"line":8334},46,[398,8336,1841],{"class":408},[19,8338,8339],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[343,8341,8343],{"id":8342},"_42结构体数组","4.2结构体数组",[19,8345,8346],{},"将自定义的结构体放入到数组中方便维护",[19,8348,8349,8350,8353],{},"语法：struct 结构体名 数组名",[398,8351,8352],{},"元素个数","={ {}，{},...{} };",[389,8355,8357],{"className":391,"code":8356,"language":393,"meta":316,"style":316},"#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",[395,8358,8359,8365,8375,8381,8386,8392,8396,8400,8406,8412,8416,8420,8428,8432,8437,8452,8456,8472,8488,8492,8497,8513,8528,8543,8548,8574,8578,8601,8605],{"__ignoreMap":316},[398,8360,8361,8363],{"class":400,"line":401},[398,8362,2225],{"class":404},[398,8364,2228],{"class":513},[398,8366,8367,8369,8371,8373],{"class":400,"line":317},[398,8368,2233],{"class":404},[398,8370,2236],{"class":404},[398,8372,2240],{"class":2239},[398,8374,1566],{"class":408},[398,8376,8377,8379],{"class":400,"line":320},[398,8378,2225],{"class":404},[398,8380,8026],{"class":513},[398,8382,8383],{"class":400,"line":1470},[398,8384,8385],{"class":467},"\u002F\u002F1.定义结构体\n",[398,8387,8388,8390],{"class":400,"line":1476},[398,8389,8036],{"class":404},[398,8391,8039],{"class":2239},[398,8393,8394],{"class":400,"line":1490},[398,8395,1822],{"class":408},[398,8397,8398],{"class":400,"line":1496},[398,8399,8062],{"class":408},[398,8401,8402,8404],{"class":400,"line":1587},[398,8403,2261],{"class":404},[398,8405,8074],{"class":408},[398,8407,8408,8410],{"class":400,"line":1593},[398,8409,2261],{"class":404},[398,8411,8086],{"class":408},[398,8413,8414],{"class":400,"line":1605},[398,8415,2676],{"emptyLinePlaceholder":328},[398,8417,8418],{"class":400,"line":1888},[398,8419,4271],{"class":408},[398,8421,8422,8424,8426],{"class":400,"line":1893},[398,8423,412],{"class":404},[398,8425,2249],{"class":2239},[398,8427,2252],{"class":408},[398,8429,8430],{"class":400,"line":1899},[398,8431,1822],{"class":408},[398,8433,8434],{"class":400,"line":1904},[398,8435,8436],{"class":467},"    \u002F\u002F2.创建结构体数组\n",[398,8438,8439,8441,8443,8446,8448,8450],{"class":400,"line":1918},[398,8440,8172],{"class":404},[398,8442,8175],{"class":2239},[398,8444,8445],{"class":408}," stuArray[",[398,8447,486],{"class":457},[398,8449,1342],{"class":408},[398,8451,5184],{"class":404},[398,8453,8454],{"class":400,"line":1923},[398,8455,2306],{"class":408},[398,8457,8458,8460,8462,8464,8466,8468,8470],{"class":400,"line":1929},[398,8459,5193],{"class":408},[398,8461,8193],{"class":513},[398,8463,780],{"class":408},[398,8465,1052],{"class":457},[398,8467,780],{"class":408},[398,8469,713],{"class":457},[398,8471,5206],{"class":408},[398,8473,8474,8476,8478,8480,8482,8484,8486],{"class":400,"line":1950},[398,8475,5193],{"class":408},[398,8477,3954],{"class":513},[398,8479,780],{"class":408},[398,8481,977],{"class":457},[398,8483,780],{"class":408},[398,8485,977],{"class":457},[398,8487,1841],{"class":408},[398,8489,8490],{"class":400,"line":1955},[398,8491,2463],{"class":408},[398,8493,8494],{"class":400,"line":1969},[398,8495,8496],{"class":467},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[398,8498,8499,8502,8504,8507,8509,8511],{"class":400,"line":1974},[398,8500,8501],{"class":408},"    stuArray[",[398,8503,619],{"class":457},[398,8505,8506],{"class":408},"].name",[398,8508,454],{"class":404},[398,8510,3977],{"class":513},[398,8512,1566],{"class":408},[398,8514,8515,8517,8519,8522,8524,8526],{"class":400,"line":2003},[398,8516,8501],{"class":408},[398,8518,619],{"class":457},[398,8520,8521],{"class":408},"].age",[398,8523,454],{"class":404},[398,8525,486],{"class":457},[398,8527,1566],{"class":408},[398,8529,8530,8532,8534,8537,8539,8541],{"class":400,"line":2008},[398,8531,8501],{"class":408},[398,8533,619],{"class":457},[398,8535,8536],{"class":408},"].score",[398,8538,454],{"class":404},[398,8540,486],{"class":457},[398,8542,1566],{"class":408},[398,8544,8545],{"class":400,"line":2025},[398,8546,8547],{"class":467},"    \u002F\u002F4.遍历结构体数组\n",[398,8549,8550,8552,8554,8556,8558,8560,8562,8564,8566,8568,8570,8572],{"class":400,"line":2030},[398,8551,3477],{"class":404},[398,8553,1934],{"class":408},[398,8555,412],{"class":404},[398,8557,3308],{"class":408},[398,8559,454],{"class":404},[398,8561,593],{"class":457},[398,8563,3315],{"class":408},[398,8565,1312],{"class":404},[398,8567,486],{"class":457},[398,8569,3315],{"class":408},[398,8571,2568],{"class":404},[398,8573,415],{"class":408},[398,8575,8576],{"class":400,"line":2035},[398,8577,2306],{"class":408},[398,8579,8580,8582,8584,8587,8589,8592,8594,8597,8599],{"class":400,"line":2040},[398,8581,3727],{"class":408},[398,8583,1445],{"class":404},[398,8585,8586],{"class":408},"stuArray[i].name",[398,8588,1445],{"class":404},[398,8590,8591],{"class":408},"stuArray[i].age",[398,8593,1445],{"class":404},[398,8595,8596],{"class":408},"stuArray[i].score",[398,8598,1445],{"class":404},[398,8600,1467],{"class":408},[398,8602,8603],{"class":400,"line":2054},[398,8604,2463],{"class":408},[398,8606,8607],{"class":400,"line":2059},[398,8608,1841],{"class":408},[343,8610,8612],{"id":8611},"_43结构体指针","4.3结构体指针",[19,8614,8615],{},"作用：通过指针访问结构体中的成员",[19,8617,8618],{},"利用操作符->可以通过结构体指针访问结构体属性",[389,8620,8622],{"className":391,"code":8621,"language":393,"meta":316,"style":316},"#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",[395,8623,8624,8630,8640,8646,8650,8656,8660,8664,8670,8676,8680,8688,8692,8697,8722,8727,8742,8747,8770],{"__ignoreMap":316},[398,8625,8626,8628],{"class":400,"line":401},[398,8627,2225],{"class":404},[398,8629,2228],{"class":513},[398,8631,8632,8634,8636,8638],{"class":400,"line":317},[398,8633,2233],{"class":404},[398,8635,2236],{"class":404},[398,8637,2240],{"class":2239},[398,8639,1566],{"class":408},[398,8641,8642,8644],{"class":400,"line":320},[398,8643,2225],{"class":404},[398,8645,8026],{"class":513},[398,8647,8648],{"class":400,"line":1470},[398,8649,8385],{"class":467},[398,8651,8652,8654],{"class":400,"line":1476},[398,8653,8036],{"class":404},[398,8655,8039],{"class":2239},[398,8657,8658],{"class":400,"line":1490},[398,8659,1822],{"class":408},[398,8661,8662],{"class":400,"line":1496},[398,8663,8062],{"class":408},[398,8665,8666,8668],{"class":400,"line":1587},[398,8667,2261],{"class":404},[398,8669,8074],{"class":408},[398,8671,8672,8674],{"class":400,"line":1593},[398,8673,2261],{"class":404},[398,8675,8086],{"class":408},[398,8677,8678],{"class":400,"line":1605},[398,8679,4271],{"class":408},[398,8681,8682,8684,8686],{"class":400,"line":1888},[398,8683,412],{"class":404},[398,8685,2249],{"class":2239},[398,8687,2252],{"class":408},[398,8689,8690],{"class":400,"line":1893},[398,8691,1822],{"class":408},[398,8693,8694],{"class":400,"line":1899},[398,8695,8696],{"class":467},"    \u002F\u002F创建学生结构体变量\n",[398,8698,8699,8701,8703,8706,8708,8710,8712,8714,8716,8718,8720],{"class":400,"line":1904},[398,8700,8172],{"class":404},[398,8702,8175],{"class":2239},[398,8704,8705],{"class":408}," s",[398,8707,454],{"class":404},[398,8709,1298],{"class":408},[398,8711,8193],{"class":513},[398,8713,780],{"class":408},[398,8715,1052],{"class":457},[398,8717,780],{"class":408},[398,8719,1998],{"class":457},[398,8721,4271],{"class":408},[398,8723,8724],{"class":400,"line":1918},[398,8725,8726],{"class":467},"    \u002F\u002F通过指针指向结构体变量\n",[398,8728,8729,8731,8733,8735,8737,8739],{"class":400,"line":1923},[398,8730,8172],{"class":404},[398,8732,8175],{"class":2239},[398,8734,6795],{"class":404},[398,8736,19],{"class":408},[398,8738,6616],{"class":404},[398,8740,8741],{"class":408},"s\n",[398,8743,8744],{"class":400,"line":1929},[398,8745,8746],{"class":467},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[398,8748,8749,8751,8753,8756,8758,8761,8763,8766,8768],{"class":400,"line":1950},[398,8750,1827],{"class":408},[398,8752,1445],{"class":404},[398,8754,8755],{"class":408},"p->name",[398,8757,1445],{"class":404},[398,8759,8760],{"class":408},"p->age",[398,8762,1445],{"class":404},[398,8764,8765],{"class":408},"p->score",[398,8767,1445],{"class":404},[398,8769,1467],{"class":408},[398,8771,8772],{"class":400,"line":1955},[398,8773,1841],{"class":408},[343,8775,8777],{"id":8776},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,8779,8780],{},"作用：结构体中的成员可以是另一个结构体",[19,8782,8783],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[389,8785,8787],{"className":391,"code":8786,"language":393,"meta":316,"style":316},"#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",[395,8788,8789,8795,8805,8811,8816,8824,8828,8832,8838,8844,8848,8853,8860,8864,8871,8875,8881,8886,8890,8898,8902,8907,8912,8917,8928,8940,8951,8964,8975,8986],{"__ignoreMap":316},[398,8790,8791,8793],{"class":400,"line":401},[398,8792,2225],{"class":404},[398,8794,2228],{"class":513},[398,8796,8797,8799,8801,8803],{"class":400,"line":317},[398,8798,2233],{"class":404},[398,8800,2236],{"class":404},[398,8802,2240],{"class":2239},[398,8804,1566],{"class":408},[398,8806,8807,8809],{"class":400,"line":320},[398,8808,2225],{"class":404},[398,8810,8026],{"class":513},[398,8812,8813],{"class":400,"line":1470},[398,8814,8815],{"class":467},"\u002F\u002F定义学生结构体\n",[398,8817,8818,8820,8822],{"class":400,"line":1476},[398,8819,8036],{"class":404},[398,8821,8175],{"class":2239},[398,8823,2950],{"class":408},[398,8825,8826],{"class":400,"line":1490},[398,8827,1822],{"class":408},[398,8829,8830],{"class":400,"line":1496},[398,8831,8062],{"class":408},[398,8833,8834,8836],{"class":400,"line":1587},[398,8835,2261],{"class":404},[398,8837,8074],{"class":408},[398,8839,8840,8842],{"class":400,"line":1593},[398,8841,2261],{"class":404},[398,8843,8086],{"class":408},[398,8845,8846],{"class":400,"line":1605},[398,8847,1841],{"class":408},[398,8849,8850],{"class":400,"line":1888},[398,8851,8852],{"class":467},"\u002F\u002F定义老师结构体\n",[398,8854,8855,8857],{"class":400,"line":1893},[398,8856,8036],{"class":404},[398,8858,8859],{"class":2239}," Teacher\n",[398,8861,8862],{"class":400,"line":1899},[398,8863,1822],{"class":408},[398,8865,8866,8868],{"class":400,"line":1904},[398,8867,2261],{"class":404},[398,8869,8870],{"class":408}," id;\n",[398,8872,8873],{"class":400,"line":1918},[398,8874,8062],{"class":408},[398,8876,8877,8879],{"class":400,"line":1923},[398,8878,2261],{"class":404},[398,8880,8074],{"class":408},[398,8882,8883],{"class":400,"line":1929},[398,8884,8885],{"class":408},"    Student stu;\n",[398,8887,8888],{"class":400,"line":1950},[398,8889,1841],{"class":408},[398,8891,8892,8894,8896],{"class":400,"line":1955},[398,8893,412],{"class":404},[398,8895,2249],{"class":2239},[398,8897,6255],{"class":408},[398,8899,8900],{"class":400,"line":1969},[398,8901,1822],{"class":408},[398,8903,8904],{"class":400,"line":1974},[398,8905,8906],{"class":467},"    \u002F\u002F结构体嵌套结构体\n",[398,8908,8909],{"class":400,"line":2003},[398,8910,8911],{"class":467},"    \u002F\u002F创建老师\n",[398,8913,8914],{"class":400,"line":2008},[398,8915,8916],{"class":408},"    Teacher t;\n",[398,8918,8919,8922,8924,8926],{"class":400,"line":2025},[398,8920,8921],{"class":408},"    t.id",[398,8923,454],{"class":404},[398,8925,713],{"class":457},[398,8927,1566],{"class":408},[398,8929,8930,8933,8935,8938],{"class":400,"line":2030},[398,8931,8932],{"class":408},"    t.name",[398,8934,454],{"class":404},[398,8936,8937],{"class":513},"\"老王\"",[398,8939,1566],{"class":408},[398,8941,8942,8945,8947,8949],{"class":400,"line":2035},[398,8943,8944],{"class":408},"    t.age",[398,8946,454],{"class":404},[398,8948,1052],{"class":457},[398,8950,1566],{"class":408},[398,8952,8953,8956,8958,8961],{"class":400,"line":2040},[398,8954,8955],{"class":408},"    t.stu.name",[398,8957,454],{"class":404},[398,8959,8960],{"class":513},"\"小王\"",[398,8962,8963],{"class":408},"；\n",[398,8965,8966,8969,8971,8973],{"class":400,"line":2054},[398,8967,8968],{"class":408},"    t.stu.age",[398,8970,454],{"class":404},[398,8972,1102],{"class":457},[398,8974,1566],{"class":408},[398,8976,8977,8980,8982,8984],{"class":400,"line":2059},[398,8978,8979],{"class":408},"    t.stu.score",[398,8981,454],{"class":404},[398,8983,746],{"class":457},[398,8985,1566],{"class":408},[398,8987,8988],{"class":400,"line":2853},[398,8989,1841],{"class":408},[343,8991,8993],{"id":8992},"_45结构体做函数参数","4.5结构体做函数参数",[19,8995,8996],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[389,8998,9000],{"className":391,"code":8999,"language":393,"meta":316,"style":316},"#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",[395,9001,9002,9008,9018,9024,9030,9034,9038,9044,9050,9054,9059,9064,9081,9085,9118,9122,9127,9146,9150,9181,9185,9193,9197,9206,9218,9230,9242,9255,9263,9276,9288,9296],{"__ignoreMap":316},[398,9003,9004,9006],{"class":400,"line":401},[398,9005,2225],{"class":404},[398,9007,2228],{"class":513},[398,9009,9010,9012,9014,9016],{"class":400,"line":317},[398,9011,2233],{"class":404},[398,9013,2236],{"class":404},[398,9015,2240],{"class":2239},[398,9017,1566],{"class":408},[398,9019,9020,9022],{"class":400,"line":320},[398,9021,2225],{"class":404},[398,9023,8026],{"class":513},[398,9025,9026,9028],{"class":400,"line":1470},[398,9027,8036],{"class":404},[398,9029,8039],{"class":2239},[398,9031,9032],{"class":400,"line":1476},[398,9033,1822],{"class":408},[398,9035,9036],{"class":400,"line":1490},[398,9037,8062],{"class":408},[398,9039,9040,9042],{"class":400,"line":1496},[398,9041,2261],{"class":404},[398,9043,8074],{"class":408},[398,9045,9046,9048],{"class":400,"line":1587},[398,9047,2261],{"class":404},[398,9049,8086],{"class":408},[398,9051,9052],{"class":400,"line":1593},[398,9053,4271],{"class":408},[398,9055,9056],{"class":400,"line":1605},[398,9057,9058],{"class":467},"\u002F\u002F打印学生信息的函数\n",[398,9060,9061],{"class":400,"line":1888},[398,9062,9063],{"class":467},"\u002F\u002F值传递\n",[398,9065,9066,9068,9071,9073,9075,9077,9079],{"class":400,"line":1893},[398,9067,5641],{"class":404},[398,9069,9070],{"class":2239}," printStudent1",[398,9072,409],{"class":408},[398,9074,8036],{"class":404},[398,9076,8175],{"class":2239},[398,9078,8705],{"class":5493},[398,9080,415],{"class":408},[398,9082,9083],{"class":400,"line":1899},[398,9084,1822],{"class":408},[398,9086,9087,9089,9091,9094,9096,9099,9101,9104,9106,9108,9110,9113,9115],{"class":400,"line":1904},[398,9088,6806],{"class":408},[398,9090,1445],{"class":404},[398,9092,9093],{"class":408}," s.name ",[398,9095,1445],{"class":404},[398,9097,9098],{"class":513}," \" \"",[398,9100,1720],{"class":404},[398,9102,9103],{"class":408}," s.age ",[398,9105,1445],{"class":404},[398,9107,9098],{"class":513},[398,9109,1720],{"class":404},[398,9111,9112],{"class":408}," s.score ",[398,9114,1445],{"class":404},[398,9116,9117],{"class":408}," endl;\n",[398,9119,9120],{"class":400,"line":1918},[398,9121,1841],{"class":408},[398,9123,9124],{"class":400,"line":1923},[398,9125,9126],{"class":467},"\u002F\u002F地址传递\n",[398,9128,9129,9131,9134,9136,9138,9140,9142,9144],{"class":400,"line":1929},[398,9130,5641],{"class":404},[398,9132,9133],{"class":2239}," printStudent2",[398,9135,409],{"class":408},[398,9137,8036],{"class":404},[398,9139,8175],{"class":2239},[398,9141,6795],{"class":404},[398,9143,1097],{"class":5493},[398,9145,415],{"class":408},[398,9147,9148],{"class":400,"line":1950},[398,9149,1822],{"class":408},[398,9151,9152,9154,9156,9159,9161,9163,9165,9168,9170,9172,9174,9177,9179],{"class":400,"line":1955},[398,9153,6806],{"class":408},[398,9155,1445],{"class":404},[398,9157,9158],{"class":408}," s->name ",[398,9160,1445],{"class":404},[398,9162,9098],{"class":513},[398,9164,1720],{"class":404},[398,9166,9167],{"class":408}," s->age ",[398,9169,1445],{"class":404},[398,9171,9098],{"class":513},[398,9173,1720],{"class":404},[398,9175,9176],{"class":408}," s->score ",[398,9178,1445],{"class":404},[398,9180,9117],{"class":408},[398,9182,9183],{"class":400,"line":1969},[398,9184,1841],{"class":408},[398,9186,9187,9189,9191],{"class":400,"line":1974},[398,9188,412],{"class":404},[398,9190,2249],{"class":2239},[398,9192,2252],{"class":408},[398,9194,9195],{"class":400,"line":2003},[398,9196,1822],{"class":408},[398,9198,9199,9201,9203],{"class":400,"line":2008},[398,9200,8172],{"class":404},[398,9202,8175],{"class":2239},[398,9204,9205],{"class":408}," s;\n",[398,9207,9208,9211,9213,9216],{"class":400,"line":2025},[398,9209,9210],{"class":408},"    s.name ",[398,9212,454],{"class":404},[398,9214,9215],{"class":513}," \"张三\"",[398,9217,1566],{"class":408},[398,9219,9220,9223,9225,9228],{"class":400,"line":2030},[398,9221,9222],{"class":408},"    s.age ",[398,9224,454],{"class":404},[398,9226,9227],{"class":457}," 20",[398,9229,1566],{"class":408},[398,9231,9232,9235,9237,9240],{"class":400,"line":2035},[398,9233,9234],{"class":408},"    s.score ",[398,9236,454],{"class":404},[398,9238,9239],{"class":457}," 85",[398,9241,1566],{"class":408},[398,9243,9244,9246,9248,9251,9253],{"class":400,"line":2040},[398,9245,1827],{"class":408},[398,9247,1445],{"class":404},[398,9249,9250],{"class":513},"\"值传递:\"",[398,9252,1445],{"class":404},[398,9254,1467],{"class":408},[398,9256,9257,9260],{"class":400,"line":2054},[398,9258,9259],{"class":2239},"    printStudent1",[398,9261,9262],{"class":408},"(s);\n",[398,9264,9265,9267,9269,9272,9274],{"class":400,"line":2059},[398,9266,1827],{"class":408},[398,9268,1445],{"class":404},[398,9270,9271],{"class":513},"\"地址传递:\"",[398,9273,1445],{"class":404},[398,9275,1467],{"class":408},[398,9277,9278,9281,9283,9285],{"class":400,"line":2853},[398,9279,9280],{"class":2239},"    printStudent2",[398,9282,409],{"class":408},[398,9284,755],{"class":404},[398,9286,9287],{"class":408},"s); \n",[398,9289,9290,9292,9294],{"class":400,"line":2867},[398,9291,4366],{"class":404},[398,9293,4369],{"class":457},[398,9295,1566],{"class":408},[398,9297,9298],{"class":400,"line":2875},[398,9299,1841],{"class":408},[19,9301,9302],{},"注意：",[67,9304,9305,9308],{},[41,9306,9307],{},"1.先定义结构体，不要在函数中写结构体的定义",[41,9309,9310],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[343,9312,9314],{"id":9313},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,9316,9317],{},"用const防止误操作",[389,9319,9321],{"className":391,"code":9320,"language":393,"meta":316,"style":316},"#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",[395,9322,9323,9329,9339,9345,9350,9354,9358,9364,9370,9374,9390,9394,9417,9421,9429,9433,9454,9461,9465],{"__ignoreMap":316},[398,9324,9325,9327],{"class":400,"line":401},[398,9326,2225],{"class":404},[398,9328,2228],{"class":513},[398,9330,9331,9333,9335,9337],{"class":400,"line":317},[398,9332,2233],{"class":404},[398,9334,2236],{"class":404},[398,9336,2240],{"class":2239},[398,9338,1566],{"class":408},[398,9340,9341,9343],{"class":400,"line":320},[398,9342,2225],{"class":404},[398,9344,8026],{"class":513},[398,9346,9347],{"class":400,"line":1470},[398,9348,9349],{"class":408},"sctuct Student\n",[398,9351,9352],{"class":400,"line":1476},[398,9353,1822],{"class":408},[398,9355,9356],{"class":400,"line":1490},[398,9357,8062],{"class":408},[398,9359,9360,9362],{"class":400,"line":1496},[398,9361,2261],{"class":404},[398,9363,8074],{"class":408},[398,9365,9366,9368],{"class":400,"line":1587},[398,9367,2261],{"class":404},[398,9369,8086],{"class":408},[398,9371,9372],{"class":400,"line":1593},[398,9373,4271],{"class":408},[398,9375,9376,9378,9381,9383,9386,9388],{"class":400,"line":1605},[398,9377,5641],{"class":404},[398,9379,9380],{"class":2239}," printStudents",[398,9382,409],{"class":408},[398,9384,9385],{"class":2239},"student",[398,9387,8705],{"class":5493},[398,9389,415],{"class":408},[398,9391,9392],{"class":400,"line":1888},[398,9393,1822],{"class":408},[398,9395,9396,9398,9400,9403,9405,9408,9410,9413,9415],{"class":400,"line":1893},[398,9397,1827],{"class":408},[398,9399,1445],{"class":404},[398,9401,9402],{"class":408},"s.name",[398,9404,1445],{"class":404},[398,9406,9407],{"class":408},"s.age",[398,9409,1445],{"class":404},[398,9411,9412],{"class":408},"s.score",[398,9414,1445],{"class":404},[398,9416,1467],{"class":408},[398,9418,9419],{"class":400,"line":1899},[398,9420,1841],{"class":408},[398,9422,9423,9425,9427],{"class":400,"line":1904},[398,9424,412],{"class":404},[398,9426,2249],{"class":2239},[398,9428,6255],{"class":408},[398,9430,9431],{"class":400,"line":1918},[398,9432,1822],{"class":408},[398,9434,9435,9438,9440,9442,9444,9446,9448,9450,9452],{"class":400,"line":1923},[398,9436,9437],{"class":408},"    Student s",[398,9439,454],{"class":404},[398,9441,1298],{"class":408},[398,9443,8193],{"class":513},[398,9445,780],{"class":408},[398,9447,1052],{"class":457},[398,9449,780],{"class":408},[398,9451,1052],{"class":457},[398,9453,4271],{"class":408},[398,9455,9456,9459],{"class":400,"line":1929},[398,9457,9458],{"class":2239},"    printStudent",[398,9460,9262],{"class":408},[398,9462,9463],{"class":400,"line":1950},[398,9464,2676],{"emptyLinePlaceholder":328},[398,9466,9467],{"class":400,"line":1955},[398,9468,1841],{"class":408},[19,9470,9302],{},[67,9472,9473,9476,9479],{},[41,9474,9475],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[41,9477,9478],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[41,9480,9481],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[389,9483,9485],{"className":391,"code":9484,"language":393,"meta":316,"style":316},"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",[395,9486,9487,9506,9510,9515,9535],{"__ignoreMap":316},[398,9488,9489,9491,9493,9495,9497,9500,9502,9504],{"class":400,"line":401},[398,9490,5641],{"class":404},[398,9492,9380],{"class":2239},[398,9494,409],{"class":408},[398,9496,7069],{"class":404},[398,9498,9499],{"class":2239}," student",[398,9501,6795],{"class":404},[398,9503,1097],{"class":5493},[398,9505,415],{"class":408},[398,9507,9508],{"class":400,"line":317},[398,9509,1822],{"class":408},[398,9511,9512],{"class":400,"line":320},[398,9513,9514],{"class":467},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[398,9516,9517,9519,9521,9523,9525,9527,9529,9531,9533],{"class":400,"line":1470},[398,9518,1827],{"class":408},[398,9520,1445],{"class":404},[398,9522,9402],{"class":408},[398,9524,1445],{"class":404},[398,9526,9407],{"class":408},[398,9528,1445],{"class":404},[398,9530,9412],{"class":408},[398,9532,1445],{"class":404},[398,9534,1467],{"class":408},[398,9536,9537],{"class":400,"line":1476},[398,9538,1841],{"class":408},[343,9540,9542],{"id":9541},"_47案例","4.7案例",[38,9544,9545],{},[41,9546,9547],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[389,9549,9551],{"className":391,"code":9550,"language":393,"meta":316,"style":316},"#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",[395,9552,9553,9559,9569,9575,9582,9586,9592,9596,9601,9607,9613,9617,9621,9627,9631,9636,9641,9654,9658,9663,9689,9693,9705,9732,9736,9748,9758,9762,9767,9796,9800,9812,9821,9848,9859,9869,9873,9877,9881,9886,9910,9914,9938,9942,9961,9987,9991,10016,10039,10063,10068,10073,10078,10087,10092,10098,10119,10125,10139,10145,10172,10181,10187,10195,10200],{"__ignoreMap":316},[398,9554,9555,9557],{"class":400,"line":401},[398,9556,2225],{"class":404},[398,9558,2228],{"class":513},[398,9560,9561,9563,9565,9567],{"class":400,"line":317},[398,9562,2233],{"class":404},[398,9564,2236],{"class":404},[398,9566,2240],{"class":2239},[398,9568,1566],{"class":408},[398,9570,9571,9573],{"class":400,"line":320},[398,9572,2225],{"class":404},[398,9574,8026],{"class":513},[398,9576,9577,9579],{"class":400,"line":1470},[398,9578,2225],{"class":404},[398,9580,9581],{"class":513},"\u003Cctime>\n",[398,9583,9584],{"class":400,"line":1476},[398,9585,8815],{"class":467},[398,9587,9588,9590],{"class":400,"line":1490},[398,9589,8036],{"class":404},[398,9591,8039],{"class":2239},[398,9593,9594],{"class":400,"line":1496},[398,9595,1822],{"class":408},[398,9597,9598],{"class":400,"line":1587},[398,9599,9600],{"class":408},"    string sName;\n",[398,9602,9603,9605],{"class":400,"line":1593},[398,9604,2261],{"class":404},[398,9606,8074],{"class":408},[398,9608,9609,9611],{"class":400,"line":1605},[398,9610,2261],{"class":404},[398,9612,8086],{"class":408},[398,9614,9615],{"class":400,"line":1888},[398,9616,4271],{"class":408},[398,9618,9619],{"class":400,"line":1893},[398,9620,8852],{"class":467},[398,9622,9623,9625],{"class":400,"line":1899},[398,9624,8036],{"class":404},[398,9626,8859],{"class":2239},[398,9628,9629],{"class":400,"line":1904},[398,9630,1822],{"class":408},[398,9632,9633],{"class":400,"line":1918},[398,9634,9635],{"class":408},"    string tName;\n",[398,9637,9638],{"class":400,"line":1923},[398,9639,9640],{"class":467},"    \u002F\u002F学生数组\n",[398,9642,9643,9645,9647,9650,9652],{"class":400,"line":1929},[398,9644,8172],{"class":404},[398,9646,8175],{"class":2239},[398,9648,9649],{"class":408}," sArray[",[398,9651,721],{"class":457},[398,9653,4966],{"class":408},[398,9655,9656],{"class":400,"line":1950},[398,9657,4271],{"class":408},[398,9659,9660],{"class":400,"line":1955},[398,9661,9662],{"class":467},"\u002F\u002F给老师和学生赋值的函数\n",[398,9664,9665,9667,9670,9672,9674,9677,9680,9683,9685,9687],{"class":400,"line":1969},[398,9666,5641],{"class":404},[398,9668,9669],{"class":2239}," allocateSpace",[398,9671,409],{"class":408},[398,9673,8036],{"class":404},[398,9675,9676],{"class":2239}," Teacher",[398,9678,9679],{"class":5493}," tArray",[398,9681,9682],{"class":408},"[],",[398,9684,412],{"class":404},[398,9686,7608],{"class":5493},[398,9688,415],{"class":408},[398,9690,9691],{"class":400,"line":1974},[398,9692,1822],{"class":408},[398,9694,9695,9698,9700,9703],{"class":400,"line":2003},[398,9696,9697],{"class":408},"    string nameSeed",[398,9699,454],{"class":404},[398,9701,9702],{"class":513},"\"ABCDE\"",[398,9704,1566],{"class":408},[398,9706,9707,9709,9711,9713,9716,9718,9720,9723,9725,9728,9730],{"class":400,"line":2008},[398,9708,3477],{"class":404},[398,9710,1934],{"class":408},[398,9712,412],{"class":404},[398,9714,9715],{"class":408}," i ",[398,9717,454],{"class":404},[398,9719,4369],{"class":457},[398,9721,9722],{"class":408},"; i ",[398,9724,1312],{"class":404},[398,9726,9727],{"class":408}," len; i",[398,9729,2568],{"class":404},[398,9731,415],{"class":408},[398,9733,9734],{"class":400,"line":2025},[398,9735,2306],{"class":408},[398,9737,9738,9741,9743,9746],{"class":400,"line":2030},[398,9739,9740],{"class":408},"        tArray[i].tName ",[398,9742,454],{"class":404},[398,9744,9745],{"class":513}," \"Teacher_\"",[398,9747,1566],{"class":408},[398,9749,9750,9752,9755],{"class":400,"line":2035},[398,9751,9740],{"class":408},[398,9753,9754],{"class":404},"+=",[398,9756,9757],{"class":408},"nameSeed[i];\n",[398,9759,9760],{"class":400,"line":2040},[398,9761,2676],{"emptyLinePlaceholder":328},[398,9763,9764],{"class":400,"line":2054},[398,9765,9766],{"class":467},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[398,9768,9769,9771,9773,9775,9778,9780,9782,9785,9787,9789,9792,9794],{"class":400,"line":2059},[398,9770,3679],{"class":404},[398,9772,1934],{"class":408},[398,9774,412],{"class":404},[398,9776,9777],{"class":408}," j ",[398,9779,454],{"class":404},[398,9781,4369],{"class":457},[398,9783,9784],{"class":408},"; j ",[398,9786,1312],{"class":404},[398,9788,2424],{"class":457},[398,9790,9791],{"class":408},"; j",[398,9793,2568],{"class":404},[398,9795,415],{"class":408},[398,9797,9798],{"class":400,"line":2853},[398,9799,2786],{"class":408},[398,9801,9802,9805,9807,9810],{"class":400,"line":2867},[398,9803,9804],{"class":408},"            tArray[i].sArray[j].sName ",[398,9806,454],{"class":404},[398,9808,9809],{"class":513}," \"Student_\"",[398,9811,1566],{"class":408},[398,9813,9814,9816,9818],{"class":400,"line":2875},[398,9815,9804],{"class":408},[398,9817,9754],{"class":404},[398,9819,9820],{"class":408}," nameSeed[j];\n",[398,9822,9823,9826,9829,9831,9833,9835,9837,9839,9841,9843,9845],{"class":400,"line":2880},[398,9824,9825],{"class":404},"            int",[398,9827,9828],{"class":408}," random",[398,9830,454],{"class":404},[398,9832,2700],{"class":2239},[398,9834,2703],{"class":408},[398,9836,730],{"class":404},[398,9838,1309],{"class":457},[398,9840,883],{"class":404},[398,9842,803],{"class":457},[398,9844,464],{"class":408},[398,9846,9847],{"class":467},"\u002F\u002F40~99\n",[398,9849,9850,9853,9855,9857],{"class":400,"line":2886},[398,9851,9852],{"class":408},"            tArray[i].sArray[j].age ",[398,9854,454],{"class":404},[398,9856,9227],{"class":457},[398,9858,1566],{"class":408},[398,9860,9861,9864,9866],{"class":400,"line":2892},[398,9862,9863],{"class":408},"            tArray[i].sArray[j].score ",[398,9865,454],{"class":404},[398,9867,9868],{"class":408}," random;\n",[398,9870,9871],{"class":400,"line":2897},[398,9872,2805],{"class":408},[398,9874,9875],{"class":400,"line":8225},[398,9876,2463],{"class":408},[398,9878,9879],{"class":400,"line":8249},[398,9880,1841],{"class":408},[398,9882,9883],{"class":400,"line":8254},[398,9884,9885],{"class":467},"\u002F\u002F打印所有信息的函数\n",[398,9887,9888,9890,9893,9895,9897,9899,9901,9904,9906,9908],{"class":400,"line":8260},[398,9889,5641],{"class":404},[398,9891,9892],{"class":2239}," printInfo",[398,9894,409],{"class":408},[398,9896,8036],{"class":404},[398,9898,9676],{"class":2239},[398,9900,9679],{"class":5493},[398,9902,9903],{"class":408},"[], ",[398,9905,412],{"class":404},[398,9907,7608],{"class":5493},[398,9909,415],{"class":408},[398,9911,9912],{"class":400,"line":8287},[398,9913,1822],{"class":408},[398,9915,9916,9918,9920,9922,9924,9926,9928,9930,9932,9934,9936],{"class":400,"line":8292},[398,9917,3477],{"class":404},[398,9919,1934],{"class":408},[398,9921,412],{"class":404},[398,9923,9715],{"class":408},[398,9925,454],{"class":404},[398,9927,4369],{"class":457},[398,9929,9722],{"class":408},[398,9931,1312],{"class":404},[398,9933,9727],{"class":408},[398,9935,2568],{"class":404},[398,9937,415],{"class":408},[398,9939,9940],{"class":400,"line":8298},[398,9941,2306],{"class":408},[398,9943,9944,9947,9949,9952,9954,9957,9959],{"class":400,"line":8310},[398,9945,9946],{"class":408},"        cout ",[398,9948,1445],{"class":404},[398,9950,9951],{"class":513}," \"Teacher: \"",[398,9953,1720],{"class":404},[398,9955,9956],{"class":408}," tArray[i].tName ",[398,9958,1445],{"class":404},[398,9960,9117],{"class":408},[398,9962,9963,9965,9967,9969,9971,9973,9975,9977,9979,9981,9983,9985],{"class":400,"line":8322},[398,9964,3679],{"class":404},[398,9966,1934],{"class":408},[398,9968,412],{"class":404},[398,9970,9777],{"class":408},[398,9972,454],{"class":404},[398,9974,4369],{"class":457},[398,9976,9784],{"class":408},[398,9978,1312],{"class":404},[398,9980,2424],{"class":457},[398,9982,9791],{"class":408},[398,9984,2568],{"class":404},[398,9986,415],{"class":408},[398,9988,9989],{"class":400,"line":8334},[398,9990,2786],{"class":408},[398,9992,9994,9997,9999,10002,10004,10007,10009,10012,10014],{"class":400,"line":9993},47,[398,9995,9996],{"class":408},"            cout ",[398,9998,1445],{"class":404},[398,10000,10001],{"class":513}," \"",[398,10003,1506],{"class":457},[398,10005,10006],{"class":513},"Student: \"",[398,10008,1720],{"class":404},[398,10010,10011],{"class":408}," tArray[i].sArray[j].sName",[398,10013,1445],{"class":404},[398,10015,1467],{"class":408},[398,10017,10019,10021,10023,10025,10027,10030,10032,10035,10037],{"class":400,"line":10018},48,[398,10020,9996],{"class":408},[398,10022,1445],{"class":404},[398,10024,10001],{"class":513},[398,10026,1506],{"class":457},[398,10028,10029],{"class":513},"Age: \"",[398,10031,1720],{"class":404},[398,10033,10034],{"class":408}," tArray[i].sArray[j].age ",[398,10036,1445],{"class":404},[398,10038,9117],{"class":408},[398,10040,10042,10044,10046,10048,10050,10053,10055,10058,10060],{"class":400,"line":10041},49,[398,10043,9996],{"class":408},[398,10045,1445],{"class":404},[398,10047,10001],{"class":513},[398,10049,1506],{"class":457},[398,10051,10052],{"class":513},"Score: \"",[398,10054,1720],{"class":404},[398,10056,10057],{"class":408}," tArray[i].sArray[j].score ",[398,10059,1445],{"class":404},[398,10061,10062],{"class":408}," endl;   \n",[398,10064,10066],{"class":400,"line":10065},50,[398,10067,2805],{"class":408},[398,10069,10071],{"class":400,"line":10070},51,[398,10072,2463],{"class":408},[398,10074,10076],{"class":400,"line":10075},52,[398,10077,1841],{"class":408},[398,10079,10081,10083,10085],{"class":400,"line":10080},53,[398,10082,412],{"class":404},[398,10084,2249],{"class":2239},[398,10086,2252],{"class":408},[398,10088,10090],{"class":400,"line":10089},54,[398,10091,1822],{"class":408},[398,10093,10095],{"class":400,"line":10094},55,[398,10096,10097],{"class":467},"    \u002F\u002F随机数种子\n",[398,10099,10101,10103,10105,10107,10109,10111,10113,10115,10117],{"class":400,"line":10100},56,[398,10102,2649],{"class":2239},[398,10104,2652],{"class":408},[398,10106,2655],{"class":404},[398,10108,2658],{"class":404},[398,10110,831],{"class":408},[398,10112,2663],{"class":2239},[398,10114,409],{"class":408},[398,10116,2668],{"class":457},[398,10118,2671],{"class":408},[398,10120,10122],{"class":400,"line":10121},57,[398,10123,10124],{"class":467},"    \u002F\u002F1.创建3名老师的数组\n",[398,10126,10128,10130,10132,10135,10137],{"class":400,"line":10127},58,[398,10129,8172],{"class":404},[398,10131,9676],{"class":2239},[398,10133,10134],{"class":408}," tArray[",[398,10136,480],{"class":457},[398,10138,4966],{"class":408},[398,10140,10142],{"class":400,"line":10141},59,[398,10143,10144],{"class":467},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[398,10146,10148,10150,10153,10155,10158,10161,10163,10165,10168,10170],{"class":400,"line":10147},60,[398,10149,2261],{"class":404},[398,10151,10152],{"class":408}," len ",[398,10154,454],{"class":404},[398,10156,10157],{"class":404}," sizeof",[398,10159,10160],{"class":408},"(tArray) ",[398,10162,986],{"class":404},[398,10164,10157],{"class":404},[398,10166,10167],{"class":408},"(tArray[",[398,10169,593],{"class":457},[398,10171,4132],{"class":408},[398,10173,10175,10178],{"class":400,"line":10174},61,[398,10176,10177],{"class":2239},"    allocateSpace",[398,10179,10180],{"class":408},"(tArray, len);\n",[398,10182,10184],{"class":400,"line":10183},62,[398,10185,10186],{"class":467},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[398,10188,10190,10193],{"class":400,"line":10189},63,[398,10191,10192],{"class":2239},"    printInfo",[398,10194,10180],{"class":408},[398,10196,10198],{"class":400,"line":10197},64,[398,10199,2676],{"emptyLinePlaceholder":328},[398,10201,10203],{"class":400,"line":10202},65,[398,10204,1841],{"class":408},[38,10206,10207],{"start":317},[41,10208,10209,10212],{},[23,10210,10211],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,10214,10215],{},"五名英雄信息如下：",[389,10217,10221],{"className":10218,"code":10219,"language":10220,"meta":316,"style":316},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[395,10222,10223,10241,10258,10275,10292],{"__ignoreMap":316},[398,10224,10225,10227,10230,10232,10234,10236,10239],{"class":400,"line":401},[398,10226,5193],{"class":408},[398,10228,10229],{"class":513},"\"刘备\"",[398,10231,780],{"class":408},[398,10233,1177],{"class":457},[398,10235,780],{"class":408},[398,10237,10238],{"class":513},"\"男\"",[398,10240,5206],{"class":408},[398,10242,10243,10245,10248,10250,10252,10254,10256],{"class":400,"line":317},[398,10244,5193],{"class":408},[398,10246,10247],{"class":513},"\"关羽\"",[398,10249,780],{"class":408},[398,10251,1152],{"class":457},[398,10253,780],{"class":408},[398,10255,10238],{"class":513},[398,10257,5206],{"class":408},[398,10259,10260,10262,10265,10267,10269,10271,10273],{"class":400,"line":320},[398,10261,5193],{"class":408},[398,10263,10264],{"class":513},"\"张飞\"",[398,10266,780],{"class":408},[398,10268,1102],{"class":457},[398,10270,780],{"class":408},[398,10272,10238],{"class":513},[398,10274,5206],{"class":408},[398,10276,10277,10279,10282,10284,10286,10288,10290],{"class":400,"line":1470},[398,10278,5193],{"class":408},[398,10280,10281],{"class":513},"\"赵云\"",[398,10283,780],{"class":408},[398,10285,1127],{"class":457},[398,10287,780],{"class":408},[398,10289,10238],{"class":513},[398,10291,5206],{"class":408},[398,10293,10294,10296,10299,10301,10303,10305,10308],{"class":400,"line":1476},[398,10295,5193],{"class":408},[398,10297,10298],{"class":513},"\"貂蝉\"",[398,10300,780],{"class":408},[398,10302,1077],{"class":457},[398,10304,780],{"class":408},[398,10306,10307],{"class":513},"\"女\"",[398,10309,5206],{"class":408},[19,10311,10312],{},"代码：",[389,10314,10316],{"className":391,"code":10315,"language":393,"meta":316,"style":316},"#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",[395,10317,10318,10324,10334,10340,10347,10351,10355,10361,10366,10370,10375,10398,10402,10427,10431,10464,10469,10498,10503,10518,10544,10564,10569,10574,10578,10582,10587,10609,10613,10637,10641,10703,10707,10711,10719,10723,10728,10739,10743,10759,10775,10791,10807,10823,10827,10847,10869,10874,10887,10894,10899,10905,10910,10923,10929],{"__ignoreMap":316},[398,10319,10320,10322],{"class":400,"line":401},[398,10321,2225],{"class":404},[398,10323,2228],{"class":513},[398,10325,10326,10328,10330,10332],{"class":400,"line":317},[398,10327,2233],{"class":404},[398,10329,2236],{"class":404},[398,10331,2240],{"class":2239},[398,10333,1566],{"class":408},[398,10335,10336,10338],{"class":400,"line":320},[398,10337,2225],{"class":404},[398,10339,8026],{"class":513},[398,10341,10342,10344],{"class":400,"line":1470},[398,10343,8036],{"class":404},[398,10345,10346],{"class":2239}," Sanguo\n",[398,10348,10349],{"class":400,"line":1476},[398,10350,1822],{"class":408},[398,10352,10353],{"class":400,"line":1490},[398,10354,8062],{"class":408},[398,10356,10357,10359],{"class":400,"line":1496},[398,10358,2261],{"class":404},[398,10360,8074],{"class":408},[398,10362,10363],{"class":400,"line":1587},[398,10364,10365],{"class":408},"    string gender;\n",[398,10367,10368],{"class":400,"line":1593},[398,10369,4271],{"class":408},[398,10371,10372],{"class":400,"line":1605},[398,10373,10374],{"class":467},"\u002F\u002F定义排序函数\n",[398,10376,10377,10379,10381,10383,10386,10388,10390,10392,10394,10396],{"class":400,"line":1888},[398,10378,5641],{"class":404},[398,10380,7593],{"class":2239},[398,10382,409],{"class":408},[398,10384,10385],{"class":2239},"Sanguo",[398,10387,6795],{"class":404},[398,10389,1097],{"class":5493},[398,10391,780],{"class":408},[398,10393,412],{"class":404},[398,10395,7608],{"class":5493},[398,10397,415],{"class":408},[398,10399,10400],{"class":400,"line":1893},[398,10401,1822],{"class":408},[398,10403,10404,10406,10408,10410,10412,10414,10416,10418,10420,10423,10425],{"class":400,"line":1899},[398,10405,3477],{"class":404},[398,10407,409],{"class":408},[398,10409,412],{"class":404},[398,10411,3308],{"class":408},[398,10413,454],{"class":404},[398,10415,593],{"class":457},[398,10417,3315],{"class":408},[398,10419,1312],{"class":404},[398,10421,10422],{"class":408},"len;i",[398,10424,2568],{"class":404},[398,10426,415],{"class":408},[398,10428,10429],{"class":400,"line":1904},[398,10430,2306],{"class":408},[398,10432,10433,10436,10438,10440,10442,10444,10446,10448,10450,10452,10454,10456,10458,10460,10462],{"class":400,"line":1918},[398,10434,10435],{"class":404},"     for",[398,10437,1934],{"class":408},[398,10439,412],{"class":404},[398,10441,3686],{"class":408},[398,10443,454],{"class":404},[398,10445,593],{"class":457},[398,10447,3693],{"class":408},[398,10449,1312],{"class":404},[398,10451,7635],{"class":408},[398,10453,934],{"class":404},[398,10455,619],{"class":457},[398,10457,934],{"class":404},[398,10459,3826],{"class":408},[398,10461,2568],{"class":404},[398,10463,415],{"class":408},[398,10465,10466],{"class":400,"line":1923},[398,10467,10468],{"class":408},"     {\n",[398,10470,10471,10474,10477,10479,10482,10484,10487,10489,10491,10493,10495],{"class":400,"line":1929},[398,10472,10473],{"class":404},"         if",[398,10475,10476],{"class":408}," ((s",[398,10478,883],{"class":404},[398,10480,10481],{"class":408},"j)->age ",[398,10483,1362],{"class":404},[398,10485,10486],{"class":408}," (s",[398,10488,883],{"class":404},[398,10490,869],{"class":408},[398,10492,883],{"class":404},[398,10494,619],{"class":457},[398,10496,10497],{"class":408},")->age)\n",[398,10499,10500],{"class":400,"line":1950},[398,10501,10502],{"class":408},"         {\n",[398,10504,10505,10508,10510,10513,10515],{"class":400,"line":1955},[398,10506,10507],{"class":408},"             Sanguo temp",[398,10509,7430],{"class":404},[398,10511,10512],{"class":408},"(s",[398,10514,883],{"class":404},[398,10516,10517],{"class":408},"j);\n",[398,10519,10520,10523,10525,10527,10530,10532,10534,10536,10538,10540,10542],{"class":400,"line":1969},[398,10521,10522],{"class":404},"             *",[398,10524,10512],{"class":408},[398,10526,883],{"class":404},[398,10528,10529],{"class":408},"j)",[398,10531,7430],{"class":404},[398,10533,10512],{"class":408},[398,10535,883],{"class":404},[398,10537,869],{"class":408},[398,10539,883],{"class":404},[398,10541,619],{"class":457},[398,10543,2995],{"class":408},[398,10545,10546,10548,10550,10552,10554,10556,10558,10560,10562],{"class":400,"line":1974},[398,10547,10522],{"class":404},[398,10549,10512],{"class":408},[398,10551,883],{"class":404},[398,10553,869],{"class":408},[398,10555,883],{"class":404},[398,10557,619],{"class":457},[398,10559,831],{"class":408},[398,10561,454],{"class":404},[398,10563,4556],{"class":408},[398,10565,10566],{"class":400,"line":2003},[398,10567,10568],{"class":408},"         }\n",[398,10570,10571],{"class":400,"line":2008},[398,10572,10573],{"class":408},"     }\n",[398,10575,10576],{"class":400,"line":2025},[398,10577,2463],{"class":408},[398,10579,10580],{"class":400,"line":2030},[398,10581,1841],{"class":408},[398,10583,10584],{"class":400,"line":2035},[398,10585,10586],{"class":467},"\u002F\u002F定义打印函数\n",[398,10588,10589,10591,10593,10595,10597,10599,10601,10603,10605,10607],{"class":400,"line":2040},[398,10590,5641],{"class":404},[398,10592,9892],{"class":2239},[398,10594,409],{"class":408},[398,10596,10385],{"class":2239},[398,10598,6795],{"class":404},[398,10600,1097],{"class":5493},[398,10602,780],{"class":408},[398,10604,412],{"class":404},[398,10606,7608],{"class":5493},[398,10608,415],{"class":408},[398,10610,10611],{"class":400,"line":2054},[398,10612,1822],{"class":408},[398,10614,10615,10617,10619,10621,10623,10625,10627,10629,10631,10633,10635],{"class":400,"line":2059},[398,10616,3477],{"class":404},[398,10618,1934],{"class":408},[398,10620,412],{"class":404},[398,10622,3308],{"class":408},[398,10624,454],{"class":404},[398,10626,593],{"class":457},[398,10628,3315],{"class":408},[398,10630,1312],{"class":404},[398,10632,10422],{"class":408},[398,10634,2568],{"class":404},[398,10636,415],{"class":408},[398,10638,10639],{"class":400,"line":2853},[398,10640,2306],{"class":408},[398,10642,10643,10645,10647,10649,10651,10654,10656,10658,10660,10663,10665,10667,10669,10672,10674,10676,10678,10681,10683,10685,10687,10690,10692,10694,10696,10699,10701],{"class":400,"line":2867},[398,10644,3727],{"class":408},[398,10646,1445],{"class":404},[398,10648,653],{"class":513},[398,10650,1506],{"class":457},[398,10652,10653],{"class":513},"姓名：\"",[398,10655,1445],{"class":404},[398,10657,10512],{"class":408},[398,10659,883],{"class":404},[398,10661,10662],{"class":408},"i)->name",[398,10664,1445],{"class":404},[398,10666,653],{"class":513},[398,10668,1506],{"class":457},[398,10670,10671],{"class":513},"年龄：\"",[398,10673,1445],{"class":404},[398,10675,10512],{"class":408},[398,10677,883],{"class":404},[398,10679,10680],{"class":408},"i)->age",[398,10682,1445],{"class":404},[398,10684,653],{"class":513},[398,10686,1506],{"class":457},[398,10688,10689],{"class":513},"性别：\"",[398,10691,1445],{"class":404},[398,10693,10512],{"class":408},[398,10695,883],{"class":404},[398,10697,10698],{"class":408},"i)->gender",[398,10700,1445],{"class":404},[398,10702,1467],{"class":408},[398,10704,10705],{"class":400,"line":2875},[398,10706,2463],{"class":408},[398,10708,10709],{"class":400,"line":2880},[398,10710,1841],{"class":408},[398,10712,10713,10715,10717],{"class":400,"line":2886},[398,10714,412],{"class":404},[398,10716,2249],{"class":2239},[398,10718,2252],{"class":408},[398,10720,10721],{"class":400,"line":2892},[398,10722,1822],{"class":408},[398,10724,10725],{"class":400,"line":2897},[398,10726,10727],{"class":467},"    \u002F\u002F定义结构体变量\n",[398,10729,10730,10733,10735,10737],{"class":400,"line":8225},[398,10731,10732],{"class":408},"    Sanguo s1[",[398,10734,721],{"class":457},[398,10736,1342],{"class":408},[398,10738,5184],{"class":404},[398,10740,10741],{"class":400,"line":8249},[398,10742,2306],{"class":408},[398,10744,10745,10747,10749,10751,10753,10755,10757],{"class":400,"line":8254},[398,10746,5193],{"class":408},[398,10748,10229],{"class":513},[398,10750,780],{"class":408},[398,10752,1177],{"class":457},[398,10754,780],{"class":408},[398,10756,10238],{"class":513},[398,10758,5206],{"class":408},[398,10760,10761,10763,10765,10767,10769,10771,10773],{"class":400,"line":8260},[398,10762,5193],{"class":408},[398,10764,10247],{"class":513},[398,10766,780],{"class":408},[398,10768,1152],{"class":457},[398,10770,780],{"class":408},[398,10772,10238],{"class":513},[398,10774,5206],{"class":408},[398,10776,10777,10779,10781,10783,10785,10787,10789],{"class":400,"line":8287},[398,10778,5193],{"class":408},[398,10780,10264],{"class":513},[398,10782,780],{"class":408},[398,10784,1102],{"class":457},[398,10786,780],{"class":408},[398,10788,10238],{"class":513},[398,10790,5206],{"class":408},[398,10792,10793,10795,10797,10799,10801,10803,10805],{"class":400,"line":8292},[398,10794,5193],{"class":408},[398,10796,10281],{"class":513},[398,10798,780],{"class":408},[398,10800,1127],{"class":457},[398,10802,780],{"class":408},[398,10804,10238],{"class":513},[398,10806,5206],{"class":408},[398,10808,10809,10811,10813,10815,10817,10819,10821],{"class":400,"line":8298},[398,10810,5193],{"class":408},[398,10812,10298],{"class":513},[398,10814,780],{"class":408},[398,10816,1077],{"class":457},[398,10818,780],{"class":408},[398,10820,10307],{"class":513},[398,10822,5206],{"class":408},[398,10824,10825],{"class":400,"line":8310},[398,10826,5227],{"class":408},[398,10828,10829,10831,10833,10835,10838,10840,10843,10845],{"class":400,"line":8322},[398,10830,2261],{"class":404},[398,10832,7608],{"class":408},[398,10834,4479],{"class":404},[398,10836,10837],{"class":408},"(s1)",[398,10839,4485],{"class":404},[398,10841,10842],{"class":408},"(s1[",[398,10844,593],{"class":457},[398,10846,4132],{"class":408},[398,10848,10849,10852,10854,10857,10859,10862,10865,10867],{"class":400,"line":8334},[398,10850,10851],{"class":408},"    Sanguo ",[398,10853,857],{"class":404},[398,10855,10856],{"class":408},"s ",[398,10858,454],{"class":404},[398,10860,10861],{"class":404}," &",[398,10863,10864],{"class":408},"s1[",[398,10866,593],{"class":457},[398,10868,4966],{"class":408},[398,10870,10871],{"class":400,"line":9993},[398,10872,10873],{"class":467},"    \u002F\u002F排序前：\n",[398,10875,10876,10878,10880,10883,10885],{"class":400,"line":10018},[398,10877,6806],{"class":408},[398,10879,1445],{"class":404},[398,10881,10882],{"class":513}," \"排序前：\"",[398,10884,1720],{"class":404},[398,10886,9117],{"class":408},[398,10888,10889,10891],{"class":400,"line":10041},[398,10890,10192],{"class":2239},[398,10892,10893],{"class":408},"(s,len);\n",[398,10895,10896],{"class":400,"line":10065},[398,10897,10898],{"class":467},"    \u002F\u002F调用排序函数\n",[398,10900,10901,10903],{"class":400,"line":10070},[398,10902,7875],{"class":2239},[398,10904,10893],{"class":408},[398,10906,10907],{"class":400,"line":10075},[398,10908,10909],{"class":467},"    \u002F\u002F排序后\n",[398,10911,10912,10914,10916,10919,10921],{"class":400,"line":10080},[398,10913,6806],{"class":408},[398,10915,1445],{"class":404},[398,10917,10918],{"class":513}," \"排序后：\"",[398,10920,1720],{"class":404},[398,10922,9117],{"class":408},[398,10924,10925,10927],{"class":400,"line":10089},[398,10926,10192],{"class":2239},[398,10928,10893],{"class":408},[398,10930,10931],{"class":400,"line":10094},[398,10932,1841],{"class":408},[19,10934,10935,10936,10938],{},"注意：使用指针时直接用传首地址**&s",[398,10937,593],{},"**",[5403,10940,10941],{},"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":316,"searchDepth":317,"depth":317,"links":10943},[10944,10945,10946,10947,10948,10949,10950],{"id":7980,"depth":317,"text":7981},{"id":8342,"depth":317,"text":8343},{"id":8611,"depth":317,"text":8612},{"id":8776,"depth":317,"text":8777},{"id":8992,"depth":317,"text":8993},{"id":9313,"depth":317,"text":9314},{"id":9541,"depth":317,"text":9542},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7969,"description":7977},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10957,"title":10958,"body":10959,"description":316,"extension":326,"meta":12302,"navigation":328,"path":12303,"seo":12304,"stem":12305,"__hash__":12306},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10960,"toc":12296},[10961,10964,10968,10974,10988,10993,10996,11000,11007,11013,11016,11023,11029,11034,11037,11040,11043,11607,11610,11624,11628,11633,11649,11789,11792,11798,11801,11806,11814,11922,11925,11930,11933,11938,11941,11947,11950,12293],[10,10962,10958],{"id":10963},"_5程序内存模型",[343,10965,10967],{"id":10966},"_51内存分区模型","5.1内存分区模型",[19,10969,10970,10971],{},"C++程序在执行时，将内存大方向划分为",[23,10972,10973],{},"4个区域",[67,10975,10976,10979,10982,10985],{},[41,10977,10978],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[41,10980,10981],{},"全局区：存放全局变量和静态变量以及常量",[41,10983,10984],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[41,10986,10987],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,10989,10990],{},[23,10991,10992],{},"内存四区意义：",[19,10994,10995],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[14,10997,10999],{"id":10998},"_511程序运行前","5.1.1程序运行前",[19,11001,11002,11003,11006],{},"​\t在程序编译后，生成了exe可执行程序，",[23,11004,11005],{},"未执行该程序前","分为两个区域",[19,11008,11009,11010],{},"​\t",[23,11011,11012],{},"代码区：",[19,11014,11015],{},"​\t\t存放 CPU 执行的机器指令",[19,11017,11018,11019,11022],{},"​\t\t代码区是",[23,11020,11021],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,11024,11018,11025,11028],{},[23,11026,11027],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,11030,11009,11031],{},[23,11032,11033],{},"全局区：",[19,11035,11036],{},"​\t\t全局变量和静态变量存放在此.",[19,11038,11039],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,11041,11042],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[389,11044,11046],{"className":391,"code":11045,"language":393,"meta":316,"style":316},"\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",[395,11047,11048,11053,11066,11079,11083,11088,11103,11118,11122,11131,11135,11140,11153,11166,11170,11175,11201,11227,11231,11258,11284,11288,11293,11309,11324,11328,11354,11380,11384,11409,11434,11438,11464,11490,11494,11510,11525,11551,11577,11581,11591,11595,11603],{"__ignoreMap":316},[398,11049,11050],{"class":400,"line":401},[398,11051,11052],{"class":467},"\u002F\u002F全局变量\n",[398,11054,11055,11057,11060,11062,11064],{"class":400,"line":317},[398,11056,412],{"class":404},[398,11058,11059],{"class":408}," g_a ",[398,11061,454],{"class":404},[398,11063,2314],{"class":457},[398,11065,1566],{"class":408},[398,11067,11068,11070,11073,11075,11077],{"class":400,"line":320},[398,11069,412],{"class":404},[398,11071,11072],{"class":408}," g_b ",[398,11074,454],{"class":404},[398,11076,2314],{"class":457},[398,11078,1566],{"class":408},[398,11080,11081],{"class":400,"line":1470},[398,11082,2676],{"emptyLinePlaceholder":328},[398,11084,11085],{"class":400,"line":1476},[398,11086,11087],{"class":467},"\u002F\u002F全局常量\n",[398,11089,11090,11092,11094,11097,11099,11101],{"class":400,"line":1490},[398,11091,7069],{"class":404},[398,11093,2658],{"class":404},[398,11095,11096],{"class":408}," c_g_a ",[398,11098,454],{"class":404},[398,11100,2314],{"class":457},[398,11102,1566],{"class":408},[398,11104,11105,11107,11109,11112,11114,11116],{"class":400,"line":1496},[398,11106,7069],{"class":404},[398,11108,2658],{"class":404},[398,11110,11111],{"class":408}," c_g_b ",[398,11113,454],{"class":404},[398,11115,2314],{"class":457},[398,11117,1566],{"class":408},[398,11119,11120],{"class":400,"line":1587},[398,11121,2676],{"emptyLinePlaceholder":328},[398,11123,11124,11126,11128],{"class":400,"line":1593},[398,11125,412],{"class":404},[398,11127,2249],{"class":2239},[398,11129,11130],{"class":408},"() {\n",[398,11132,11133],{"class":400,"line":1605},[398,11134,2676],{"emptyLinePlaceholder":328},[398,11136,11137],{"class":400,"line":1888},[398,11138,11139],{"class":467},"    \u002F\u002F局部变量\n",[398,11141,11142,11144,11147,11149,11151],{"class":400,"line":1893},[398,11143,2261],{"class":404},[398,11145,11146],{"class":408}," a ",[398,11148,454],{"class":404},[398,11150,2314],{"class":457},[398,11152,1566],{"class":408},[398,11154,11155,11157,11160,11162,11164],{"class":400,"line":1899},[398,11156,2261],{"class":404},[398,11158,11159],{"class":408}," b ",[398,11161,454],{"class":404},[398,11163,2314],{"class":457},[398,11165,1566],{"class":408},[398,11167,11168],{"class":400,"line":1904},[398,11169,2676],{"emptyLinePlaceholder":328},[398,11171,11172],{"class":400,"line":1918},[398,11173,11174],{"class":467},"    \u002F\u002F打印地址\n",[398,11176,11177,11179,11181,11184,11186,11188,11190,11192,11194,11197,11199],{"class":400,"line":1923},[398,11178,6806],{"class":408},[398,11180,1445],{"class":404},[398,11182,11183],{"class":513}," \"局部变量a地址为： \"",[398,11185,1720],{"class":404},[398,11187,1934],{"class":408},[398,11189,412],{"class":404},[398,11191,831],{"class":408},[398,11193,755],{"class":404},[398,11195,11196],{"class":408},"a ",[398,11198,1445],{"class":404},[398,11200,9117],{"class":408},[398,11202,11203,11205,11207,11210,11212,11214,11216,11218,11220,11223,11225],{"class":400,"line":1929},[398,11204,6806],{"class":408},[398,11206,1445],{"class":404},[398,11208,11209],{"class":513}," \"局部变量b地址为： \"",[398,11211,1720],{"class":404},[398,11213,1934],{"class":408},[398,11215,412],{"class":404},[398,11217,831],{"class":408},[398,11219,755],{"class":404},[398,11221,11222],{"class":408},"b ",[398,11224,1445],{"class":404},[398,11226,9117],{"class":408},[398,11228,11229],{"class":400,"line":1950},[398,11230,2676],{"emptyLinePlaceholder":328},[398,11232,11233,11235,11237,11240,11242,11245,11247,11249,11251,11254,11256],{"class":400,"line":1955},[398,11234,6806],{"class":408},[398,11236,1445],{"class":404},[398,11238,11239],{"class":513}," \"全局变量g_a地址为： \"",[398,11241,1720],{"class":404},[398,11243,11244],{"class":408},"  (",[398,11246,412],{"class":404},[398,11248,831],{"class":408},[398,11250,755],{"class":404},[398,11252,11253],{"class":408},"g_a ",[398,11255,1445],{"class":404},[398,11257,9117],{"class":408},[398,11259,11260,11262,11264,11267,11269,11271,11273,11275,11277,11280,11282],{"class":400,"line":1969},[398,11261,6806],{"class":408},[398,11263,1445],{"class":404},[398,11265,11266],{"class":513}," \"全局变量g_b地址为： \"",[398,11268,1720],{"class":404},[398,11270,11244],{"class":408},[398,11272,412],{"class":404},[398,11274,831],{"class":408},[398,11276,755],{"class":404},[398,11278,11279],{"class":408},"g_b ",[398,11281,1445],{"class":404},[398,11283,9117],{"class":408},[398,11285,11286],{"class":400,"line":1974},[398,11287,2676],{"emptyLinePlaceholder":328},[398,11289,11290],{"class":400,"line":2003},[398,11291,11292],{"class":467},"    \u002F\u002F静态变量\n",[398,11294,11295,11298,11300,11303,11305,11307],{"class":400,"line":2008},[398,11296,11297],{"class":404},"    static",[398,11299,2658],{"class":404},[398,11301,11302],{"class":408}," s_a ",[398,11304,454],{"class":404},[398,11306,2314],{"class":457},[398,11308,1566],{"class":408},[398,11310,11311,11313,11315,11318,11320,11322],{"class":400,"line":2025},[398,11312,11297],{"class":404},[398,11314,2658],{"class":404},[398,11316,11317],{"class":408}," s_b ",[398,11319,454],{"class":404},[398,11321,2314],{"class":457},[398,11323,1566],{"class":408},[398,11325,11326],{"class":400,"line":2030},[398,11327,2676],{"emptyLinePlaceholder":328},[398,11329,11330,11332,11334,11337,11339,11341,11343,11345,11347,11350,11352],{"class":400,"line":2035},[398,11331,6806],{"class":408},[398,11333,1445],{"class":404},[398,11335,11336],{"class":513}," \"静态变量s_a地址为： \"",[398,11338,1720],{"class":404},[398,11340,1934],{"class":408},[398,11342,412],{"class":404},[398,11344,831],{"class":408},[398,11346,755],{"class":404},[398,11348,11349],{"class":408},"s_a ",[398,11351,1445],{"class":404},[398,11353,9117],{"class":408},[398,11355,11356,11358,11360,11363,11365,11367,11369,11371,11373,11376,11378],{"class":400,"line":2040},[398,11357,6806],{"class":408},[398,11359,1445],{"class":404},[398,11361,11362],{"class":513}," \"静态变量s_b地址为： \"",[398,11364,1720],{"class":404},[398,11366,1934],{"class":408},[398,11368,412],{"class":404},[398,11370,831],{"class":408},[398,11372,755],{"class":404},[398,11374,11375],{"class":408},"s_b ",[398,11377,1445],{"class":404},[398,11379,9117],{"class":408},[398,11381,11382],{"class":400,"line":2054},[398,11383,2676],{"emptyLinePlaceholder":328},[398,11385,11386,11388,11390,11393,11395,11397,11399,11401,11403,11405,11407],{"class":400,"line":2059},[398,11387,6806],{"class":408},[398,11389,1445],{"class":404},[398,11391,11392],{"class":513}," \"字符串常量地址为： \"",[398,11394,1720],{"class":404},[398,11396,1934],{"class":408},[398,11398,412],{"class":404},[398,11400,831],{"class":408},[398,11402,755],{"class":404},[398,11404,1462],{"class":513},[398,11406,1720],{"class":404},[398,11408,9117],{"class":408},[398,11410,11411,11413,11415,11417,11419,11421,11423,11425,11427,11430,11432],{"class":400,"line":2853},[398,11412,6806],{"class":408},[398,11414,1445],{"class":404},[398,11416,11392],{"class":513},[398,11418,1720],{"class":404},[398,11420,1934],{"class":408},[398,11422,412],{"class":404},[398,11424,831],{"class":408},[398,11426,755],{"class":404},[398,11428,11429],{"class":513},"\"hello world1\"",[398,11431,1720],{"class":404},[398,11433,9117],{"class":408},[398,11435,11436],{"class":400,"line":2867},[398,11437,2676],{"emptyLinePlaceholder":328},[398,11439,11440,11442,11444,11447,11449,11451,11453,11455,11457,11460,11462],{"class":400,"line":2875},[398,11441,6806],{"class":408},[398,11443,1445],{"class":404},[398,11445,11446],{"class":513}," \"全局常量c_g_a地址为： \"",[398,11448,1720],{"class":404},[398,11450,1934],{"class":408},[398,11452,412],{"class":404},[398,11454,831],{"class":408},[398,11456,755],{"class":404},[398,11458,11459],{"class":408},"c_g_a ",[398,11461,1445],{"class":404},[398,11463,9117],{"class":408},[398,11465,11466,11468,11470,11473,11475,11477,11479,11481,11483,11486,11488],{"class":400,"line":2880},[398,11467,6806],{"class":408},[398,11469,1445],{"class":404},[398,11471,11472],{"class":513}," \"全局常量c_g_b地址为： \"",[398,11474,1720],{"class":404},[398,11476,1934],{"class":408},[398,11478,412],{"class":404},[398,11480,831],{"class":408},[398,11482,755],{"class":404},[398,11484,11485],{"class":408},"c_g_b ",[398,11487,1445],{"class":404},[398,11489,9117],{"class":408},[398,11491,11492],{"class":400,"line":2886},[398,11493,2676],{"emptyLinePlaceholder":328},[398,11495,11496,11499,11501,11504,11506,11508],{"class":400,"line":2892},[398,11497,11498],{"class":404},"    const",[398,11500,2658],{"class":404},[398,11502,11503],{"class":408}," c_l_a ",[398,11505,454],{"class":404},[398,11507,2314],{"class":457},[398,11509,1566],{"class":408},[398,11511,11512,11514,11516,11519,11521,11523],{"class":400,"line":2897},[398,11513,11498],{"class":404},[398,11515,2658],{"class":404},[398,11517,11518],{"class":408}," c_l_b ",[398,11520,454],{"class":404},[398,11522,2314],{"class":457},[398,11524,1566],{"class":408},[398,11526,11527,11529,11531,11534,11536,11538,11540,11542,11544,11547,11549],{"class":400,"line":8225},[398,11528,6806],{"class":408},[398,11530,1445],{"class":404},[398,11532,11533],{"class":513}," \"局部常量c_l_a地址为： \"",[398,11535,1720],{"class":404},[398,11537,1934],{"class":408},[398,11539,412],{"class":404},[398,11541,831],{"class":408},[398,11543,755],{"class":404},[398,11545,11546],{"class":408},"c_l_a ",[398,11548,1445],{"class":404},[398,11550,9117],{"class":408},[398,11552,11553,11555,11557,11560,11562,11564,11566,11568,11570,11573,11575],{"class":400,"line":8249},[398,11554,6806],{"class":408},[398,11556,1445],{"class":404},[398,11558,11559],{"class":513}," \"局部常量c_l_b地址为： \"",[398,11561,1720],{"class":404},[398,11563,1934],{"class":408},[398,11565,412],{"class":404},[398,11567,831],{"class":408},[398,11569,755],{"class":404},[398,11571,11572],{"class":408},"c_l_b ",[398,11574,1445],{"class":404},[398,11576,9117],{"class":408},[398,11578,11579],{"class":400,"line":8254},[398,11580,2676],{"emptyLinePlaceholder":328},[398,11582,11583,11585,11587,11589],{"class":400,"line":8260},[398,11584,2579],{"class":2239},[398,11586,409],{"class":408},[398,11588,2584],{"class":513},[398,11590,2995],{"class":408},[398,11592,11593],{"class":400,"line":8287},[398,11594,2676],{"emptyLinePlaceholder":328},[398,11596,11597,11599,11601],{"class":400,"line":8292},[398,11598,4366],{"class":404},[398,11600,4369],{"class":457},[398,11602,1566],{"class":408},[398,11604,11605],{"class":400,"line":8298},[398,11606,1841],{"class":408},[19,11608,11609],{},"总结：",[67,11611,11612,11615,11618,11621],{},[41,11613,11614],{},"c++中程序运行前分为全局区和代码区",[41,11616,11617],{},"代码区特点是共享和只读",[41,11619,11620],{},"全局区中存放全局变量、静态变量、常量",[41,11622,11623],{},"常量区中存放const修饰的全局常量和字符串常量",[14,11625,11627],{"id":11626},"_512程序运行后","5.1.2程序运行后",[38,11629,11630],{},[41,11631,11632],{},"栈区：",[67,11634,11635,11642],{},[41,11636,11637,11638,11641],{},"由编译器自动分配释放, 存放",[23,11639,11640],{},"函数的参数值,局部变量","等",[41,11643,11644,11645,11648],{},"注意事项：",[23,11646,11647],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[389,11650,11652],{"className":391,"code":11651,"language":393,"meta":316,"style":316},"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",[395,11653,11654,11665,11669,11684,11696,11700,11704,11712,11717,11732,11750,11767,11777,11785],{"__ignoreMap":316},[398,11655,11656,11658,11660,11663],{"class":400,"line":401},[398,11657,412],{"class":404},[398,11659,6795],{"class":404},[398,11661,11662],{"class":2239}," func",[398,11664,2252],{"class":408},[398,11666,11667],{"class":400,"line":317},[398,11668,1822],{"class":408},[398,11670,11671,11673,11675,11677,11679,11681],{"class":400,"line":320},[398,11672,2261],{"class":404},[398,11674,11146],{"class":408},[398,11676,454],{"class":404},[398,11678,2314],{"class":457},[398,11680,464],{"class":408},[398,11682,11683],{"class":467}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[398,11685,11686,11688,11690,11693],{"class":400,"line":1470},[398,11687,4366],{"class":404},[398,11689,10861],{"class":404},[398,11691,11692],{"class":408},"a;",[398,11694,11695],{"class":467}," \u002F\u002F放回局部变量的地址\n",[398,11697,11698],{"class":400,"line":1476},[398,11699,1841],{"class":408},[398,11701,11702],{"class":400,"line":1490},[398,11703,2676],{"emptyLinePlaceholder":328},[398,11705,11706,11708,11710],{"class":400,"line":1496},[398,11707,412],{"class":404},[398,11709,2249],{"class":2239},[398,11711,11130],{"class":408},[398,11713,11714],{"class":400,"line":1587},[398,11715,11716],{"class":467},"    \u002F\u002F接受func的返回值\n",[398,11718,11719,11721,11723,11726,11728,11730],{"class":400,"line":1593},[398,11720,2261],{"class":404},[398,11722,6795],{"class":404},[398,11724,11725],{"class":408},"p ",[398,11727,454],{"class":404},[398,11729,11662],{"class":2239},[398,11731,5913],{"class":408},[398,11733,11734,11736,11738,11740,11742,11744,11747],{"class":400,"line":1605},[398,11735,6806],{"class":408},[398,11737,1445],{"class":404},[398,11739,6795],{"class":404},[398,11741,11725],{"class":408},[398,11743,1445],{"class":404},[398,11745,11746],{"class":408}," endl;",[398,11748,11749],{"class":467}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[398,11751,11752,11754,11756,11758,11760,11762,11764],{"class":400,"line":1888},[398,11753,6806],{"class":408},[398,11755,1445],{"class":404},[398,11757,6795],{"class":404},[398,11759,11725],{"class":408},[398,11761,1445],{"class":404},[398,11763,11746],{"class":408},[398,11765,11766],{"class":467}," \u002F\u002F第二次这个数据不再保留\n",[398,11768,11769,11771,11773,11775],{"class":400,"line":1893},[398,11770,2579],{"class":2239},[398,11772,409],{"class":408},[398,11774,2584],{"class":513},[398,11776,2995],{"class":408},[398,11778,11779,11781,11783],{"class":400,"line":1899},[398,11780,4366],{"class":404},[398,11782,4369],{"class":457},[398,11784,1566],{"class":408},[398,11786,11787],{"class":400,"line":1904},[398,11788,1841],{"class":408},[19,11790,11791],{},"输出结果：",[19,11793,11794],{},[1738,11795],{"alt":11796,"src":11797},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,11799,11800],{},"总结：不要返回局部变量的地址",[38,11802,11803],{"start":317},[41,11804,11805],{},"堆区",[67,11807,11808,11811],{},[41,11809,11810],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[41,11812,11813],{},"在c++中主要利用new在堆区开辟内存",[389,11815,11817],{"className":391,"code":11816,"language":393,"meta":316,"style":316},"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",[395,11818,11819,11834,11838,11843,11864,11871,11875,11883,11887,11892,11906,11918],{"__ignoreMap":316},[398,11820,11821,11823,11826,11829,11831],{"class":400,"line":401},[398,11822,412],{"class":404},[398,11824,11825],{"class":404},"  *",[398,11827,11828],{"class":2239},"func",[398,11830,2703],{"class":408},[398,11832,11833],{"class":467},"  \u002F\u002F函数返回指针\n",[398,11835,11836],{"class":400,"line":317},[398,11837,1822],{"class":408},[398,11839,11840],{"class":400,"line":320},[398,11841,11842],{"class":467},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[398,11844,11845,11847,11849,11851,11853,11856,11858,11860,11862],{"class":400,"line":1470},[398,11846,4423],{"class":404},[398,11848,6795],{"class":404},[398,11850,19],{"class":408},[398,11852,454],{"class":404},[398,11854,11855],{"class":404}," new",[398,11857,2658],{"class":404},[398,11859,409],{"class":408},[398,11861,848],{"class":457},[398,11863,2995],{"class":408},[398,11865,11866,11868],{"class":400,"line":1476},[398,11867,4657],{"class":404},[398,11869,11870],{"class":408}," p;\n",[398,11872,11873],{"class":400,"line":1490},[398,11874,1841],{"class":408},[398,11876,11877,11879,11881],{"class":400,"line":1496},[398,11878,412],{"class":404},[398,11880,2249],{"class":2239},[398,11882,2252],{"class":408},[398,11884,11885],{"class":400,"line":1587},[398,11886,1822],{"class":408},[398,11888,11889],{"class":400,"line":1593},[398,11890,11891],{"class":467},"    \u002F\u002F在堆区开辟数据\n",[398,11893,11894,11896,11898,11900,11902,11904],{"class":400,"line":1605},[398,11895,2261],{"class":404},[398,11897,6795],{"class":404},[398,11899,19],{"class":408},[398,11901,454],{"class":404},[398,11903,11828],{"class":2239},[398,11905,5913],{"class":408},[398,11907,11908,11910,11912,11914,11916],{"class":400,"line":1888},[398,11909,1827],{"class":408},[398,11911,6696],{"class":404},[398,11913,19],{"class":408},[398,11915,1445],{"class":404},[398,11917,1467],{"class":408},[398,11919,11920],{"class":400,"line":1893},[398,11921,1841],{"class":408},[19,11923,11924],{},"图片展示：",[19,11926,11927],{},[1738,11928],{"alt":11796,"src":11929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,11931,11932],{},"堆区内存由程序员管生死！！！",[38,11934,11935],{"start":320},[41,11936,11937],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,11939,11940],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,11942,11943,11944],{},"​语法：",[395,11945,11946],{}," new 数据类型",[19,11948,11949],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[389,11951,11953],{"className":391,"code":11952,"language":393,"meta":316,"style":316},"\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",[395,11954,11955,11960,11970,11974,11979,11984,12006,12010,12018,12022,12036,12048,12060,12072,12077,12082,12093,12097,12102,12110,12114,12119,12141,12167,12171,12189,12193,12219,12223,12235,12239,12244,12249,12257,12261,12265,12273,12277,12283,12289],{"__ignoreMap":316},[398,11956,11957],{"class":400,"line":401},[398,11958,11959],{"class":467},"\u002F\u002F1.new的基本语法\n",[398,11961,11962,11964,11966,11968],{"class":400,"line":317},[398,11963,412],{"class":404},[398,11965,6795],{"class":404},[398,11967,11828],{"class":2239},[398,11969,2252],{"class":408},[398,11971,11972],{"class":400,"line":320},[398,11973,1822],{"class":408},[398,11975,11976],{"class":400,"line":1470},[398,11977,11978],{"class":467},"    \u002F\u002F在堆区创建整型数据\n",[398,11980,11981],{"class":400,"line":1476},[398,11982,11983],{"class":467},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[398,11985,11986,11988,11990,11992,11995,11997,11999,12001,12003],{"class":400,"line":1490},[398,11987,2261],{"class":404},[398,11989,6795],{"class":404},[398,11991,19],{"class":408},[398,11993,11994],{"class":404},"=new",[398,11996,2658],{"class":404},[398,11998,409],{"class":408},[398,12000,848],{"class":457},[398,12002,6243],{"class":408},[398,12004,12005],{"class":467},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[398,12007,12008],{"class":400,"line":1496},[398,12009,1841],{"class":408},[398,12011,12012,12014,12016],{"class":400,"line":1587},[398,12013,5641],{"class":404},[398,12015,5865],{"class":2239},[398,12017,2252],{"class":408},[398,12019,12020],{"class":400,"line":1593},[398,12021,1822],{"class":408},[398,12023,12024,12026,12028,12030,12032,12034],{"class":400,"line":1605},[398,12025,2261],{"class":404},[398,12027,6795],{"class":404},[398,12029,19],{"class":408},[398,12031,454],{"class":404},[398,12033,11828],{"class":2239},[398,12035,5913],{"class":408},[398,12037,12038,12040,12042,12044,12046],{"class":400,"line":1888},[398,12039,1827],{"class":408},[398,12041,6696],{"class":404},[398,12043,19],{"class":408},[398,12045,1445],{"class":404},[398,12047,1467],{"class":408},[398,12049,12050,12052,12054,12056,12058],{"class":400,"line":1893},[398,12051,1827],{"class":408},[398,12053,6696],{"class":404},[398,12055,19],{"class":408},[398,12057,1445],{"class":404},[398,12059,1467],{"class":408},[398,12061,12062,12064,12066,12068,12070],{"class":400,"line":1899},[398,12063,1827],{"class":408},[398,12065,6696],{"class":404},[398,12067,19],{"class":408},[398,12069,1445],{"class":404},[398,12071,1467],{"class":408},[398,12073,12074],{"class":400,"line":1904},[398,12075,12076],{"class":467},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[398,12078,12079],{"class":400,"line":1918},[398,12080,12081],{"class":467},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[398,12083,12084,12087,12090],{"class":400,"line":1923},[398,12085,12086],{"class":404},"    delete",[398,12088,12089],{"class":408}," p;",[398,12091,12092],{"class":467},"\u002F\u002F删除这块地址\n",[398,12094,12095],{"class":400,"line":1929},[398,12096,1841],{"class":408},[398,12098,12099],{"class":400,"line":1950},[398,12100,12101],{"class":467},"\u002F\u002F2.在堆区利用new开辟数组\n",[398,12103,12104,12106,12108],{"class":400,"line":1955},[398,12105,5641],{"class":404},[398,12107,5934],{"class":2239},[398,12109,2252],{"class":408},[398,12111,12112],{"class":400,"line":1969},[398,12113,1822],{"class":408},[398,12115,12116],{"class":400,"line":1974},[398,12117,12118],{"class":467},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[398,12120,12121,12123,12125,12127,12129,12131,12133,12135,12138],{"class":400,"line":2003},[398,12122,2261],{"class":404},[398,12124,6795],{"class":404},[398,12126,4156],{"class":408},[398,12128,11994],{"class":404},[398,12130,2658],{"class":404},[398,12132,1292],{"class":408},[398,12134,848],{"class":457},[398,12136,12137],{"class":408},"];",[398,12139,12140],{"class":467},"\u002F\u002F10代表数组有10个元素\n",[398,12142,12143,12145,12147,12149,12151,12153,12155,12157,12159,12161,12163,12165],{"class":400,"line":2008},[398,12144,3477],{"class":404},[398,12146,1934],{"class":408},[398,12148,412],{"class":404},[398,12150,3308],{"class":408},[398,12152,454],{"class":404},[398,12154,593],{"class":457},[398,12156,3315],{"class":408},[398,12158,1312],{"class":404},[398,12160,848],{"class":457},[398,12162,3315],{"class":408},[398,12164,2568],{"class":404},[398,12166,415],{"class":408},[398,12168,12169],{"class":400,"line":2025},[398,12170,2306],{"class":408},[398,12172,12173,12176,12178,12180,12182,12184,12186],{"class":400,"line":2030},[398,12174,12175],{"class":408},"        arr[i]",[398,12177,454],{"class":404},[398,12179,843],{"class":408},[398,12181,883],{"class":404},[398,12183,713],{"class":457},[398,12185,464],{"class":408},[398,12187,12188],{"class":467},"\u002F\u002F给10个元素赋值100～109\n",[398,12190,12191],{"class":400,"line":2035},[398,12192,2463],{"class":408},[398,12194,12195,12197,12199,12201,12203,12205,12207,12209,12211,12213,12215,12217],{"class":400,"line":2040},[398,12196,3477],{"class":404},[398,12198,1934],{"class":408},[398,12200,412],{"class":404},[398,12202,3308],{"class":408},[398,12204,454],{"class":404},[398,12206,593],{"class":457},[398,12208,3315],{"class":408},[398,12210,1312],{"class":404},[398,12212,848],{"class":457},[398,12214,3315],{"class":408},[398,12216,2568],{"class":404},[398,12218,415],{"class":408},[398,12220,12221],{"class":400,"line":2054},[398,12222,2306],{"class":408},[398,12224,12225,12227,12229,12231,12233],{"class":400,"line":2059},[398,12226,3727],{"class":408},[398,12228,1445],{"class":404},[398,12230,4630],{"class":408},[398,12232,1445],{"class":404},[398,12234,1467],{"class":408},[398,12236,12237],{"class":400,"line":2853},[398,12238,2463],{"class":408},[398,12240,12241],{"class":400,"line":2867},[398,12242,12243],{"class":467},"    \u002F\u002F释放堆区数组\n",[398,12245,12246],{"class":400,"line":2875},[398,12247,12248],{"class":467},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[398,12250,12251,12254],{"class":400,"line":2880},[398,12252,12253],{"class":404},"    delete[]",[398,12255,12256],{"class":408}," arr;\n",[398,12258,12259],{"class":400,"line":2886},[398,12260,1841],{"class":408},[398,12262,12263],{"class":400,"line":2892},[398,12264,2676],{"emptyLinePlaceholder":328},[398,12266,12267,12269,12271],{"class":400,"line":2897},[398,12268,412],{"class":404},[398,12270,2249],{"class":2239},[398,12272,2252],{"class":408},[398,12274,12275],{"class":400,"line":8225},[398,12276,1822],{"class":408},[398,12278,12279,12281],{"class":400,"line":8249},[398,12280,5910],{"class":2239},[398,12282,5913],{"class":408},[398,12284,12285,12287],{"class":400,"line":8254},[398,12286,5979],{"class":2239},[398,12288,5913],{"class":408},[398,12290,12291],{"class":400,"line":8260},[398,12292,1841],{"class":408},[5403,12294,12295],{},"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":316,"searchDepth":317,"depth":317,"links":12297},[12298],{"id":10966,"depth":317,"text":10967,"children":12299},[12300,12301],{"id":10998,"depth":320,"text":10999},{"id":11626,"depth":320,"text":11627},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10958,"description":316},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12308,"title":12309,"body":12310,"description":316,"extension":326,"meta":13791,"navigation":328,"path":13792,"seo":13793,"stem":13794,"__hash__":13795},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12311,"toc":13783},[12312,12315,12319,12322,12325,12494,12498,12503,12520,12525,12677,12681,12684,12687,13081,13085,13088,13093,13096,13408,13412,13418,13578,13580,13588,13592,13595,13602,13780],[10,12313,12309],{"id":12314},"_6引用",[343,12316,12318],{"id":12317},"_61引用基本用法","6.1引用基本用法",[19,12320,12321],{},"引用的本质：给变量起别名",[19,12323,12324],{},"语法：数据类型 &别名=原名",[389,12326,12328],{"className":391,"code":12327,"language":393,"meta":316,"style":316},"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",[395,12329,12330,12338,12342,12354,12366,12370,12389,12408,12412,12423,12427,12446,12464,12468,12478,12482,12490],{"__ignoreMap":316},[398,12331,12332,12334,12336],{"class":400,"line":401},[398,12333,412],{"class":404},[398,12335,2249],{"class":2239},[398,12337,11130],{"class":408},[398,12339,12340],{"class":400,"line":317},[398,12341,2676],{"emptyLinePlaceholder":328},[398,12343,12344,12346,12348,12350,12352],{"class":400,"line":320},[398,12345,2261],{"class":404},[398,12347,11146],{"class":408},[398,12349,454],{"class":404},[398,12351,2314],{"class":457},[398,12353,1566],{"class":408},[398,12355,12356,12358,12360,12362,12364],{"class":400,"line":1470},[398,12357,2261],{"class":404},[398,12359,10861],{"class":404},[398,12361,11222],{"class":408},[398,12363,454],{"class":404},[398,12365,1708],{"class":408},[398,12367,12368],{"class":400,"line":1476},[398,12369,2676],{"emptyLinePlaceholder":328},[398,12371,12372,12374,12376,12379,12381,12383,12385,12387],{"class":400,"line":1490},[398,12373,6806],{"class":408},[398,12375,1445],{"class":404},[398,12377,12378],{"class":513}," \"a = \"",[398,12380,1720],{"class":404},[398,12382,11146],{"class":408},[398,12384,1445],{"class":404},[398,12386,11746],{"class":408},[398,12388,7545],{"class":467},[398,12390,12391,12393,12395,12398,12400,12402,12404,12406],{"class":400,"line":1496},[398,12392,6806],{"class":408},[398,12394,1445],{"class":404},[398,12396,12397],{"class":513}," \"b = \"",[398,12399,1720],{"class":404},[398,12401,11159],{"class":408},[398,12403,1445],{"class":404},[398,12405,11746],{"class":408},[398,12407,7545],{"class":467},[398,12409,12410],{"class":400,"line":1587},[398,12411,2676],{"emptyLinePlaceholder":328},[398,12413,12414,12417,12419,12421],{"class":400,"line":1593},[398,12415,12416],{"class":408},"    b ",[398,12418,454],{"class":404},[398,12420,6031],{"class":457},[398,12422,1566],{"class":408},[398,12424,12425],{"class":400,"line":1605},[398,12426,2676],{"emptyLinePlaceholder":328},[398,12428,12429,12431,12433,12435,12437,12439,12441,12443],{"class":400,"line":1888},[398,12430,6806],{"class":408},[398,12432,1445],{"class":404},[398,12434,12378],{"class":513},[398,12436,1720],{"class":404},[398,12438,11146],{"class":408},[398,12440,1445],{"class":404},[398,12442,11746],{"class":408},[398,12444,12445],{"class":467},"\u002F\u002F100\n",[398,12447,12448,12450,12452,12454,12456,12458,12460,12462],{"class":400,"line":1893},[398,12449,6806],{"class":408},[398,12451,1445],{"class":404},[398,12453,12397],{"class":513},[398,12455,1720],{"class":404},[398,12457,11159],{"class":408},[398,12459,1445],{"class":404},[398,12461,11746],{"class":408},[398,12463,12445],{"class":467},[398,12465,12466],{"class":400,"line":1899},[398,12467,2676],{"emptyLinePlaceholder":328},[398,12469,12470,12472,12474,12476],{"class":400,"line":1904},[398,12471,2579],{"class":2239},[398,12473,409],{"class":408},[398,12475,2584],{"class":513},[398,12477,2995],{"class":408},[398,12479,12480],{"class":400,"line":1918},[398,12481,2676],{"emptyLinePlaceholder":328},[398,12483,12484,12486,12488],{"class":400,"line":1923},[398,12485,4366],{"class":404},[398,12487,4369],{"class":457},[398,12489,1566],{"class":408},[398,12491,12492],{"class":400,"line":1929},[398,12493,1841],{"class":408},[343,12495,12497],{"id":12496},"_62引用的注意事项","6.2引用的注意事项",[38,12499,12500],{},[41,12501,12502],{},"引用必须要初始化",[389,12504,12506],{"className":391,"code":12505,"language":393,"meta":316,"style":316},"int &b;\u002F\u002F非常错误！\n",[395,12507,12508],{"__ignoreMap":316},[398,12509,12510,12512,12514,12517],{"class":400,"line":401},[398,12511,412],{"class":404},[398,12513,10861],{"class":404},[398,12515,12516],{"class":408},"b;",[398,12518,12519],{"class":467},"\u002F\u002F非常错误！\n",[38,12521,12522],{"start":317},[41,12523,12524],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[389,12526,12528],{"className":391,"code":12527,"language":393,"meta":316,"style":316},"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",[395,12529,12530,12538,12550,12562,12570,12586,12599,12617,12635,12655,12665,12673],{"__ignoreMap":316},[398,12531,12532,12534,12536],{"class":400,"line":401},[398,12533,412],{"class":404},[398,12535,2249],{"class":2239},[398,12537,11130],{"class":408},[398,12539,12540,12542,12544,12546,12548],{"class":400,"line":317},[398,12541,2261],{"class":404},[398,12543,11146],{"class":408},[398,12545,454],{"class":404},[398,12547,2314],{"class":457},[398,12549,1566],{"class":408},[398,12551,12552,12554,12556,12558,12560],{"class":400,"line":320},[398,12553,2261],{"class":404},[398,12555,11159],{"class":408},[398,12557,454],{"class":404},[398,12559,9227],{"class":457},[398,12561,1566],{"class":408},[398,12563,12564,12567],{"class":400,"line":1470},[398,12565,12566],{"class":467},"    \u002F\u002Fint &c;",[398,12568,12569],{"class":467}," \u002F\u002F错误，引用必须初始化\n",[398,12571,12572,12574,12576,12578,12580,12583],{"class":400,"line":1476},[398,12573,2261],{"class":404},[398,12575,10861],{"class":404},[398,12577,3222],{"class":408},[398,12579,454],{"class":404},[398,12581,12582],{"class":408}," a;",[398,12584,12585],{"class":467}," \u002F\u002F一旦初始化后，就不可以更改\n",[398,12587,12588,12591,12593,12596],{"class":400,"line":1490},[398,12589,12590],{"class":408},"    c ",[398,12592,454],{"class":404},[398,12594,12595],{"class":408}," b;",[398,12597,12598],{"class":467}," \u002F\u002F这是赋值操作，不是更改引用\n",[398,12600,12601,12603,12605,12607,12609,12611,12613,12615],{"class":400,"line":1496},[398,12602,6806],{"class":408},[398,12604,1445],{"class":404},[398,12606,12378],{"class":513},[398,12608,1720],{"class":404},[398,12610,11146],{"class":408},[398,12612,1445],{"class":404},[398,12614,11746],{"class":408},[398,12616,7530],{"class":467},[398,12618,12619,12621,12623,12625,12627,12629,12631,12633],{"class":400,"line":1587},[398,12620,6806],{"class":408},[398,12622,1445],{"class":404},[398,12624,12397],{"class":513},[398,12626,1720],{"class":404},[398,12628,11159],{"class":408},[398,12630,1445],{"class":404},[398,12632,11746],{"class":408},[398,12634,7530],{"class":467},[398,12636,12637,12639,12641,12644,12646,12649,12651,12653],{"class":400,"line":1593},[398,12638,6806],{"class":408},[398,12640,1445],{"class":404},[398,12642,12643],{"class":513}," \"c = \"",[398,12645,1720],{"class":404},[398,12647,12648],{"class":408}," c ",[398,12650,1445],{"class":404},[398,12652,11746],{"class":408},[398,12654,7530],{"class":467},[398,12656,12657,12659,12661,12663],{"class":400,"line":1605},[398,12658,2579],{"class":2239},[398,12660,409],{"class":408},[398,12662,2584],{"class":513},[398,12664,2995],{"class":408},[398,12666,12667,12669,12671],{"class":400,"line":1888},[398,12668,4366],{"class":404},[398,12670,4369],{"class":457},[398,12672,1566],{"class":408},[398,12674,12675],{"class":400,"line":1893},[398,12676,1841],{"class":408},[343,12678,12680],{"id":12679},"_63引用做函数参数","6.3引用做函数参数",[19,12682,12683],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,12685,12686],{},"优点：可以简化指针修改实参",[389,12688,12690],{"className":391,"code":12689,"language":393,"meta":316,"style":316},"\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",[395,12691,12692,12697,12720,12731,12741,12750,12754,12758,12763,12785,12797,12809,12819,12823,12827,12832,12854,12864,12872,12880,12884,12888,12896,12900,12912,12924,12928,12939,12965,12969,12989,13013,13017,13027,13051,13055,13065,13069,13077],{"__ignoreMap":316},[398,12693,12694],{"class":400,"line":401},[398,12695,12696],{"class":467},"\u002F\u002F1. 值传递\n",[398,12698,12699,12701,12704,12706,12708,12710,12713,12715,12717],{"class":400,"line":317},[398,12700,5641],{"class":404},[398,12702,12703],{"class":2239}," mySwap01",[398,12705,409],{"class":408},[398,12707,412],{"class":404},[398,12709,1674],{"class":5493},[398,12711,12712],{"class":408},", ",[398,12714,412],{"class":404},[398,12716,3109],{"class":5493},[398,12718,12719],{"class":408},") {\n",[398,12721,12722,12724,12727,12729],{"class":400,"line":320},[398,12723,2261],{"class":404},[398,12725,12726],{"class":408}," temp ",[398,12728,454],{"class":404},[398,12730,1708],{"class":408},[398,12732,12733,12736,12738],{"class":400,"line":1470},[398,12734,12735],{"class":408},"    a ",[398,12737,454],{"class":404},[398,12739,12740],{"class":408}," b;\n",[398,12742,12743,12745,12747],{"class":400,"line":1476},[398,12744,12416],{"class":408},[398,12746,454],{"class":404},[398,12748,12749],{"class":408}," temp;\n",[398,12751,12752],{"class":400,"line":1490},[398,12753,1841],{"class":408},[398,12755,12756],{"class":400,"line":1496},[398,12757,2676],{"emptyLinePlaceholder":328},[398,12759,12760],{"class":400,"line":1587},[398,12761,12762],{"class":467},"\u002F\u002F2. 地址传递\n",[398,12764,12765,12767,12770,12772,12775,12777,12779,12781,12783],{"class":400,"line":1593},[398,12766,5641],{"class":404},[398,12768,12769],{"class":2239}," mySwap02",[398,12771,409],{"class":408},[398,12773,12774],{"class":404},"int*",[398,12776,1674],{"class":5493},[398,12778,12712],{"class":408},[398,12780,12774],{"class":404},[398,12782,3109],{"class":5493},[398,12784,12719],{"class":408},[398,12786,12787,12789,12791,12793,12795],{"class":400,"line":1605},[398,12788,2261],{"class":404},[398,12790,12726],{"class":408},[398,12792,454],{"class":404},[398,12794,6795],{"class":404},[398,12796,6474],{"class":408},[398,12798,12799,12801,12803,12805,12807],{"class":400,"line":1888},[398,12800,6680],{"class":404},[398,12802,11196],{"class":408},[398,12804,454],{"class":404},[398,12806,6795],{"class":404},[398,12808,6346],{"class":408},[398,12810,12811,12813,12815,12817],{"class":400,"line":1893},[398,12812,6680],{"class":404},[398,12814,11222],{"class":408},[398,12816,454],{"class":404},[398,12818,12749],{"class":408},[398,12820,12821],{"class":400,"line":1899},[398,12822,1841],{"class":408},[398,12824,12825],{"class":400,"line":1904},[398,12826,2676],{"emptyLinePlaceholder":328},[398,12828,12829],{"class":400,"line":1918},[398,12830,12831],{"class":467},"\u002F\u002F3. 引用传递\n",[398,12833,12834,12836,12839,12841,12844,12846,12848,12850,12852],{"class":400,"line":1923},[398,12835,5641],{"class":404},[398,12837,12838],{"class":2239}," mySwap03",[398,12840,409],{"class":408},[398,12842,12843],{"class":404},"int&",[398,12845,1674],{"class":5493},[398,12847,12712],{"class":408},[398,12849,12843],{"class":404},[398,12851,3109],{"class":5493},[398,12853,12719],{"class":408},[398,12855,12856,12858,12860,12862],{"class":400,"line":1929},[398,12857,2261],{"class":404},[398,12859,12726],{"class":408},[398,12861,454],{"class":404},[398,12863,1708],{"class":408},[398,12865,12866,12868,12870],{"class":400,"line":1950},[398,12867,12735],{"class":408},[398,12869,454],{"class":404},[398,12871,12740],{"class":408},[398,12873,12874,12876,12878],{"class":400,"line":1955},[398,12875,12416],{"class":408},[398,12877,454],{"class":404},[398,12879,12749],{"class":408},[398,12881,12882],{"class":400,"line":1969},[398,12883,1841],{"class":408},[398,12885,12886],{"class":400,"line":1974},[398,12887,2676],{"emptyLinePlaceholder":328},[398,12889,12890,12892,12894],{"class":400,"line":2003},[398,12891,412],{"class":404},[398,12893,2249],{"class":2239},[398,12895,11130],{"class":408},[398,12897,12898],{"class":400,"line":2008},[398,12899,2676],{"emptyLinePlaceholder":328},[398,12901,12902,12904,12906,12908,12910],{"class":400,"line":2025},[398,12903,2261],{"class":404},[398,12905,11146],{"class":408},[398,12907,454],{"class":404},[398,12909,2314],{"class":457},[398,12911,1566],{"class":408},[398,12913,12914,12916,12918,12920,12922],{"class":400,"line":2030},[398,12915,2261],{"class":404},[398,12917,11159],{"class":408},[398,12919,454],{"class":404},[398,12921,9227],{"class":457},[398,12923,1566],{"class":408},[398,12925,12926],{"class":400,"line":2035},[398,12927,2676],{"emptyLinePlaceholder":328},[398,12929,12930,12933,12936],{"class":400,"line":2040},[398,12931,12932],{"class":2239},"    mySwap01",[398,12934,12935],{"class":408},"(a, b);",[398,12937,12938],{"class":467},"\u002F\u002F值传递，形参不会修饰实参\n",[398,12940,12941,12943,12945,12948,12950,12952,12954,12957,12959,12961,12963],{"class":400,"line":2054},[398,12942,6806],{"class":408},[398,12944,1445],{"class":404},[398,12946,12947],{"class":513}," \"a:\"",[398,12949,1720],{"class":404},[398,12951,11146],{"class":408},[398,12953,1445],{"class":404},[398,12955,12956],{"class":513}," \" b:\"",[398,12958,1720],{"class":404},[398,12960,11159],{"class":408},[398,12962,1445],{"class":404},[398,12964,9117],{"class":408},[398,12966,12967],{"class":400,"line":2059},[398,12968,2676],{"emptyLinePlaceholder":328},[398,12970,12971,12974,12976,12978,12981,12983,12986],{"class":400,"line":2853},[398,12972,12973],{"class":2239},"    mySwap02",[398,12975,409],{"class":408},[398,12977,755],{"class":404},[398,12979,12980],{"class":408},"a, ",[398,12982,755],{"class":404},[398,12984,12985],{"class":408},"b);",[398,12987,12988],{"class":467},"\u002F\u002F地址传递，形参会修饰实参\n",[398,12990,12991,12993,12995,12997,12999,13001,13003,13005,13007,13009,13011],{"class":400,"line":2867},[398,12992,6806],{"class":408},[398,12994,1445],{"class":404},[398,12996,12947],{"class":513},[398,12998,1720],{"class":404},[398,13000,11146],{"class":408},[398,13002,1445],{"class":404},[398,13004,12956],{"class":513},[398,13006,1720],{"class":404},[398,13008,11159],{"class":408},[398,13010,1445],{"class":404},[398,13012,9117],{"class":408},[398,13014,13015],{"class":400,"line":2875},[398,13016,2676],{"emptyLinePlaceholder":328},[398,13018,13019,13022,13024],{"class":400,"line":2880},[398,13020,13021],{"class":2239},"    mySwap03",[398,13023,12935],{"class":408},[398,13025,13026],{"class":467},"\u002F\u002F引用传递，形参会修饰实参\n",[398,13028,13029,13031,13033,13035,13037,13039,13041,13043,13045,13047,13049],{"class":400,"line":2886},[398,13030,6806],{"class":408},[398,13032,1445],{"class":404},[398,13034,12947],{"class":513},[398,13036,1720],{"class":404},[398,13038,11146],{"class":408},[398,13040,1445],{"class":404},[398,13042,12956],{"class":513},[398,13044,1720],{"class":404},[398,13046,11159],{"class":408},[398,13048,1445],{"class":404},[398,13050,9117],{"class":408},[398,13052,13053],{"class":400,"line":2892},[398,13054,2676],{"emptyLinePlaceholder":328},[398,13056,13057,13059,13061,13063],{"class":400,"line":2897},[398,13058,2579],{"class":2239},[398,13060,409],{"class":408},[398,13062,2584],{"class":513},[398,13064,2995],{"class":408},[398,13066,13067],{"class":400,"line":8225},[398,13068,2676],{"emptyLinePlaceholder":328},[398,13070,13071,13073,13075],{"class":400,"line":8249},[398,13072,4366],{"class":404},[398,13074,4369],{"class":457},[398,13076,1566],{"class":408},[398,13078,13079],{"class":400,"line":8254},[398,13080,1841],{"class":408},[343,13082,13084],{"id":13083},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,13086,13087],{},"作用：引用是可以作为函数的返回值存在的",[19,13089,9302,13090],{},[23,13091,13092],{},"不要返回局部变量引用",[19,13094,13095],{},"用法：函数调用作为左值",[389,13097,13099],{"className":10218,"code":13098,"language":10220,"meta":316,"style":316},"\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",[395,13100,13101,13106,13114,13129,13135,13139,13143,13148,13156,13173,13179,13183,13187,13195,13199,13204,13218,13238,13257,13261,13266,13279,13299,13317,13321,13337,13341,13360,13378,13382,13392,13396,13404],{"__ignoreMap":316},[398,13102,13103],{"class":400,"line":401},[398,13104,13105],{"class":467},"\u002F\u002F返回局部变量引用\n",[398,13107,13108,13110,13112],{"class":400,"line":317},[398,13109,12843],{"class":404},[398,13111,5865],{"class":2239},[398,13113,11130],{"class":408},[398,13115,13116,13118,13120,13122,13124,13126],{"class":400,"line":320},[398,13117,2261],{"class":404},[398,13119,11146],{"class":408},[398,13121,454],{"class":404},[398,13123,2314],{"class":457},[398,13125,464],{"class":408},[398,13127,13128],{"class":467}," \u002F\u002F局部变量\n",[398,13130,13131,13133],{"class":400,"line":1470},[398,13132,4366],{"class":404},[398,13134,1708],{"class":408},[398,13136,13137],{"class":400,"line":1476},[398,13138,1841],{"class":408},[398,13140,13141],{"class":400,"line":1490},[398,13142,2676],{"emptyLinePlaceholder":328},[398,13144,13145],{"class":400,"line":1496},[398,13146,13147],{"class":467},"\u002F\u002F返回静态变量引用\n",[398,13149,13150,13152,13154],{"class":400,"line":1587},[398,13151,12843],{"class":404},[398,13153,5934],{"class":2239},[398,13155,11130],{"class":408},[398,13157,13158,13160,13162,13164,13166,13168,13170],{"class":400,"line":1593},[398,13159,11297],{"class":404},[398,13161,2658],{"class":404},[398,13163,11146],{"class":408},[398,13165,454],{"class":404},[398,13167,9227],{"class":457},[398,13169,464],{"class":408},[398,13171,13172],{"class":467},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[398,13174,13175,13177],{"class":400,"line":1605},[398,13176,4366],{"class":404},[398,13178,1708],{"class":408},[398,13180,13181],{"class":400,"line":1888},[398,13182,1841],{"class":408},[398,13184,13185],{"class":400,"line":1893},[398,13186,2676],{"emptyLinePlaceholder":328},[398,13188,13189,13191,13193],{"class":400,"line":1899},[398,13190,412],{"class":404},[398,13192,2249],{"class":2239},[398,13194,11130],{"class":408},[398,13196,13197],{"class":400,"line":1904},[398,13198,2676],{"emptyLinePlaceholder":328},[398,13200,13201],{"class":400,"line":1918},[398,13202,13203],{"class":467},"    \u002F\u002F不能返回局部变量的引用\n",[398,13205,13206,13209,13212,13214,13216],{"class":400,"line":1923},[398,13207,13208],{"class":404},"    int&",[398,13210,13211],{"class":408}," ref ",[398,13213,454],{"class":404},[398,13215,5865],{"class":2239},[398,13217,5913],{"class":408},[398,13219,13220,13222,13224,13227,13229,13231,13233,13235],{"class":400,"line":1929},[398,13221,6806],{"class":408},[398,13223,1445],{"class":404},[398,13225,13226],{"class":513}," \"ref = \"",[398,13228,1720],{"class":404},[398,13230,13211],{"class":408},[398,13232,1445],{"class":404},[398,13234,11746],{"class":408},[398,13236,13237],{"class":467},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[398,13239,13240,13242,13244,13246,13248,13250,13252,13254],{"class":400,"line":1950},[398,13241,6806],{"class":408},[398,13243,1445],{"class":404},[398,13245,13226],{"class":513},[398,13247,1720],{"class":404},[398,13249,13211],{"class":408},[398,13251,1445],{"class":404},[398,13253,11746],{"class":408},[398,13255,13256],{"class":467},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[398,13258,13259],{"class":400,"line":1955},[398,13260,2676],{"emptyLinePlaceholder":328},[398,13262,13263],{"class":400,"line":1969},[398,13264,13265],{"class":467},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[398,13267,13268,13270,13273,13275,13277],{"class":400,"line":1974},[398,13269,13208],{"class":404},[398,13271,13272],{"class":408}," ref2 ",[398,13274,454],{"class":404},[398,13276,5934],{"class":2239},[398,13278,5913],{"class":408},[398,13280,13281,13283,13285,13288,13290,13292,13294,13296],{"class":400,"line":2003},[398,13282,6806],{"class":408},[398,13284,1445],{"class":404},[398,13286,13287],{"class":513}," \"ref2 = \"",[398,13289,1720],{"class":404},[398,13291,13272],{"class":408},[398,13293,1445],{"class":404},[398,13295,11746],{"class":408},[398,13297,13298],{"class":467}," \u002F\u002F20\n",[398,13300,13301,13303,13305,13307,13309,13311,13313,13315],{"class":400,"line":2008},[398,13302,6806],{"class":408},[398,13304,1445],{"class":404},[398,13306,13287],{"class":513},[398,13308,1720],{"class":404},[398,13310,13272],{"class":408},[398,13312,1445],{"class":404},[398,13314,11746],{"class":408},[398,13316,13298],{"class":467},[398,13318,13319],{"class":400,"line":2025},[398,13320,2676],{"emptyLinePlaceholder":328},[398,13322,13323,13325,13328,13330,13332,13334],{"class":400,"line":2030},[398,13324,5979],{"class":2239},[398,13326,13327],{"class":408},"() ",[398,13329,454],{"class":404},[398,13331,3275],{"class":457},[398,13333,464],{"class":408},[398,13335,13336],{"class":467},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[398,13338,13339],{"class":400,"line":2035},[398,13340,2676],{"emptyLinePlaceholder":328},[398,13342,13343,13345,13347,13349,13351,13353,13355,13357],{"class":400,"line":2040},[398,13344,6806],{"class":408},[398,13346,1445],{"class":404},[398,13348,13287],{"class":513},[398,13350,1720],{"class":404},[398,13352,13272],{"class":408},[398,13354,1445],{"class":404},[398,13356,11746],{"class":408},[398,13358,13359],{"class":467}," \u002F\u002F1000\n",[398,13361,13362,13364,13366,13368,13370,13372,13374,13376],{"class":400,"line":2054},[398,13363,6806],{"class":408},[398,13365,1445],{"class":404},[398,13367,13287],{"class":513},[398,13369,1720],{"class":404},[398,13371,13272],{"class":408},[398,13373,1445],{"class":404},[398,13375,11746],{"class":408},[398,13377,13359],{"class":467},[398,13379,13380],{"class":400,"line":2059},[398,13381,2676],{"emptyLinePlaceholder":328},[398,13383,13384,13386,13388,13390],{"class":400,"line":2853},[398,13385,2579],{"class":2239},[398,13387,409],{"class":408},[398,13389,2584],{"class":513},[398,13391,2995],{"class":408},[398,13393,13394],{"class":400,"line":2867},[398,13395,2676],{"emptyLinePlaceholder":328},[398,13397,13398,13400,13402],{"class":400,"line":2875},[398,13399,4366],{"class":404},[398,13401,4369],{"class":457},[398,13403,1566],{"class":408},[398,13405,13406],{"class":400,"line":2880},[398,13407,1841],{"class":408},[343,13409,13411],{"id":13410},"_65引用的本质","6.5引用的本质",[19,13413,13414,13415],{},"本质：",[23,13416,13417],{},"引用的本质在c++内部实现是一个指针常量.",[389,13419,13421],{"className":391,"code":13420,"language":393,"meta":316,"style":316},"\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",[395,13422,13423,13428,13444,13458,13462,13471,13483,13488,13493,13504,13517,13521,13537,13554,13558,13566,13574],{"__ignoreMap":316},[398,13424,13425],{"class":400,"line":401},[398,13426,13427],{"class":467},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[398,13429,13430,13432,13434,13436,13438,13441],{"class":400,"line":317},[398,13431,5641],{"class":404},[398,13433,11662],{"class":2239},[398,13435,409],{"class":408},[398,13437,12843],{"class":404},[398,13439,13440],{"class":5493}," ref",[398,13442,13443],{"class":408},"){\n",[398,13445,13446,13449,13451,13453,13455],{"class":400,"line":320},[398,13447,13448],{"class":408},"    ref ",[398,13450,454],{"class":404},[398,13452,6031],{"class":457},[398,13454,464],{"class":408},[398,13456,13457],{"class":467}," \u002F\u002F ref是引用，转换为*ref = 100\n",[398,13459,13460],{"class":400,"line":1470},[398,13461,1841],{"class":408},[398,13463,13464,13466,13468],{"class":400,"line":1476},[398,13465,412],{"class":404},[398,13467,2249],{"class":2239},[398,13469,13470],{"class":408},"(){\n",[398,13472,13473,13475,13477,13479,13481],{"class":400,"line":1490},[398,13474,2261],{"class":404},[398,13476,11146],{"class":408},[398,13478,454],{"class":404},[398,13480,2314],{"class":457},[398,13482,1566],{"class":408},[398,13484,13485],{"class":400,"line":1496},[398,13486,13487],{"class":408},"    \n",[398,13489,13490],{"class":400,"line":1587},[398,13491,13492],{"class":467},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[398,13494,13495,13497,13499,13501],{"class":400,"line":1593},[398,13496,13208],{"class":404},[398,13498,13211],{"class":408},[398,13500,454],{"class":404},[398,13502,13503],{"class":408}," a; \n",[398,13505,13506,13508,13510,13512,13514],{"class":400,"line":1605},[398,13507,13448],{"class":408},[398,13509,454],{"class":404},[398,13511,9227],{"class":457},[398,13513,464],{"class":408},[398,13515,13516],{"class":467}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[398,13518,13519],{"class":400,"line":1888},[398,13520,13487],{"class":408},[398,13522,13523,13525,13527,13529,13531,13533,13535],{"class":400,"line":1893},[398,13524,6806],{"class":408},[398,13526,1445],{"class":404},[398,13528,12947],{"class":513},[398,13530,1720],{"class":404},[398,13532,11146],{"class":408},[398,13534,1445],{"class":404},[398,13536,9117],{"class":408},[398,13538,13539,13541,13543,13546,13548,13550,13552],{"class":400,"line":1899},[398,13540,6806],{"class":408},[398,13542,1445],{"class":404},[398,13544,13545],{"class":513}," \"ref:\"",[398,13547,1720],{"class":404},[398,13549,13211],{"class":408},[398,13551,1445],{"class":404},[398,13553,9117],{"class":408},[398,13555,13556],{"class":400,"line":1904},[398,13557,13487],{"class":408},[398,13559,13560,13563],{"class":400,"line":1918},[398,13561,13562],{"class":2239},"    func",[398,13564,13565],{"class":408},"(a);\n",[398,13567,13568,13570,13572],{"class":400,"line":1923},[398,13569,4366],{"class":404},[398,13571,4369],{"class":457},[398,13573,1566],{"class":408},[398,13575,13576],{"class":400,"line":1929},[398,13577,1841],{"class":408},[19,13579,11609],{},[38,13581,13582,13585],{},[41,13583,13584],{},"引用的本质，就是一个指针常量",[41,13586,13587],{},"引用一旦初始化，就不可以发生改变",[343,13589,13591],{"id":13590},"_66常量引用","6.6常量引用",[19,13593,13594],{},"作用：常量引用主要用来修饰形参",[19,13596,13597,13598,13601],{},"在函数形参列表中，可以加",[23,13599,13600],{},"const修饰形参","，防止形参改变实参",[389,13603,13605],{"className":391,"code":13604,"language":393,"meta":316,"style":316},"\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",[395,13606,13607,13612,13617,13636,13641,13654,13658,13662,13670,13674,13679,13684,13698,13702,13710,13722,13726,13731,13743,13750,13754,13764,13768,13776],{"__ignoreMap":316},[398,13608,13609],{"class":400,"line":401},[398,13610,13611],{"class":467},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[398,13613,13614],{"class":400,"line":317},[398,13615,13616],{"class":467},"\u002F\u002F加上const就不能修改实参的\n",[398,13618,13619,13621,13624,13626,13628,13631,13634],{"class":400,"line":320},[398,13620,5641],{"class":404},[398,13622,13623],{"class":2239}," showValue",[398,13625,409],{"class":408},[398,13627,7069],{"class":404},[398,13629,13630],{"class":404}," int&",[398,13632,13633],{"class":5493}," v",[398,13635,12719],{"class":408},[398,13637,13638],{"class":400,"line":1470},[398,13639,13640],{"class":467},"    \u002F\u002Fv += 100;\n",[398,13642,13643,13645,13647,13650,13652],{"class":400,"line":1476},[398,13644,6806],{"class":408},[398,13646,1445],{"class":404},[398,13648,13649],{"class":408}," v ",[398,13651,1445],{"class":404},[398,13653,9117],{"class":408},[398,13655,13656],{"class":400,"line":1490},[398,13657,1841],{"class":408},[398,13659,13660],{"class":400,"line":1496},[398,13661,2676],{"emptyLinePlaceholder":328},[398,13663,13664,13666,13668],{"class":400,"line":1587},[398,13665,412],{"class":404},[398,13667,2249],{"class":2239},[398,13669,11130],{"class":408},[398,13671,13672],{"class":400,"line":1593},[398,13673,2676],{"emptyLinePlaceholder":328},[398,13675,13676],{"class":400,"line":1605},[398,13677,13678],{"class":467},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[398,13680,13681],{"class":400,"line":1888},[398,13682,13683],{"class":467},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[398,13685,13686,13688,13690,13692,13694,13696],{"class":400,"line":1893},[398,13687,11498],{"class":404},[398,13689,13630],{"class":404},[398,13691,13211],{"class":408},[398,13693,454],{"class":404},[398,13695,2314],{"class":457},[398,13697,1566],{"class":408},[398,13699,13700],{"class":400,"line":1899},[398,13701,2676],{"emptyLinePlaceholder":328},[398,13703,13704,13707],{"class":400,"line":1904},[398,13705,13706],{"class":467},"    \u002F\u002Fref = 100;",[398,13708,13709],{"class":467},"  \u002F\u002F加入const后不可以修改变量\n",[398,13711,13712,13714,13716,13718,13720],{"class":400,"line":1918},[398,13713,6806],{"class":408},[398,13715,1445],{"class":404},[398,13717,13211],{"class":408},[398,13719,1445],{"class":404},[398,13721,9117],{"class":408},[398,13723,13724],{"class":400,"line":1923},[398,13725,2676],{"emptyLinePlaceholder":328},[398,13727,13728],{"class":400,"line":1929},[398,13729,13730],{"class":467},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[398,13732,13733,13735,13737,13739,13741],{"class":400,"line":1950},[398,13734,2261],{"class":404},[398,13736,11146],{"class":408},[398,13738,454],{"class":404},[398,13740,2314],{"class":457},[398,13742,1566],{"class":408},[398,13744,13745,13748],{"class":400,"line":1955},[398,13746,13747],{"class":2239},"    showValue",[398,13749,13565],{"class":408},[398,13751,13752],{"class":400,"line":1969},[398,13753,2676],{"emptyLinePlaceholder":328},[398,13755,13756,13758,13760,13762],{"class":400,"line":1974},[398,13757,2579],{"class":2239},[398,13759,409],{"class":408},[398,13761,2584],{"class":513},[398,13763,2995],{"class":408},[398,13765,13766],{"class":400,"line":2003},[398,13767,2676],{"emptyLinePlaceholder":328},[398,13769,13770,13772,13774],{"class":400,"line":2008},[398,13771,4366],{"class":404},[398,13773,4369],{"class":457},[398,13775,1566],{"class":408},[398,13777,13778],{"class":400,"line":2025},[398,13779,1841],{"class":408},[5403,13781,13782],{},"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":316,"searchDepth":317,"depth":317,"links":13784},[13785,13786,13787,13788,13789,13790],{"id":12317,"depth":317,"text":12318},{"id":12496,"depth":317,"text":12497},{"id":12679,"depth":317,"text":12680},{"id":13083,"depth":317,"text":13084},{"id":13410,"depth":317,"text":13411},{"id":13590,"depth":317,"text":13591},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12309,"description":316},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13797,"title":13798,"body":13799,"description":316,"extension":326,"meta":14880,"navigation":328,"path":14881,"seo":14882,"stem":14883,"__hash__":14884},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13800,"toc":14872},[13801,13804,13808,13811,13816,14048,14050,14061,14065,14068,14076,14180,14183,14187,14190,14194,14197,14202,14224,14230,14557,14560,14564,14572,14869],[10,13802,13798],{"id":13803},"_7函数高级部分",[343,13805,13807],{"id":13806},"_71函数默认参数","7.1函数默认参数",[19,13809,13810],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,13812,5458,13813],{},[395,13814,13815],{}," 返回值类型  函数名 （参数= 默认值）{}",[389,13817,13819],{"className":391,"code":13818,"language":393,"meta":316,"style":316},"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",[395,13820,13821,13856,13871,13875,13879,13884,13889,13918,13938,13948,13952,13956,13964,13968,13996,14018,14022,14032,14036,14044],{"__ignoreMap":316},[398,13822,13823,13825,13827,13829,13831,13833,13835,13837,13839,13842,13844,13846,13848,13850,13852,13854],{"class":400,"line":401},[398,13824,412],{"class":404},[398,13826,11662],{"class":2239},[398,13828,409],{"class":408},[398,13830,412],{"class":404},[398,13832,1674],{"class":5493},[398,13834,12712],{"class":408},[398,13836,412],{"class":404},[398,13838,3109],{"class":5493},[398,13840,13841],{"class":404}," =",[398,13843,2314],{"class":457},[398,13845,12712],{"class":408},[398,13847,412],{"class":404},[398,13849,3125],{"class":5493},[398,13851,13841],{"class":404},[398,13853,2314],{"class":457},[398,13855,12719],{"class":408},[398,13857,13858,13860,13862,13864,13866,13868],{"class":400,"line":317},[398,13859,4366],{"class":404},[398,13861,11146],{"class":408},[398,13863,883],{"class":404},[398,13865,11159],{"class":408},[398,13867,883],{"class":404},[398,13869,13870],{"class":408}," c;\n",[398,13872,13873],{"class":400,"line":320},[398,13874,1841],{"class":408},[398,13876,13877],{"class":400,"line":1470},[398,13878,2676],{"emptyLinePlaceholder":328},[398,13880,13881],{"class":400,"line":1476},[398,13882,13883],{"class":467},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[398,13885,13886],{"class":400,"line":1490},[398,13887,13888],{"class":467},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[398,13890,13891,13893,13896,13898,13900,13902,13904,13906,13908,13910,13912,13914,13916],{"class":400,"line":1496},[398,13892,412],{"class":404},[398,13894,13895],{"class":2239}," func2",[398,13897,409],{"class":408},[398,13899,412],{"class":404},[398,13901,1674],{"class":5493},[398,13903,13841],{"class":404},[398,13905,2314],{"class":457},[398,13907,12712],{"class":408},[398,13909,412],{"class":404},[398,13911,3109],{"class":5493},[398,13913,13841],{"class":404},[398,13915,2314],{"class":457},[398,13917,2995],{"class":408},[398,13919,13920,13922,13924,13926,13928,13930,13932,13934,13936],{"class":400,"line":1587},[398,13921,412],{"class":404},[398,13923,13895],{"class":2239},[398,13925,409],{"class":408},[398,13927,412],{"class":404},[398,13929,1674],{"class":5493},[398,13931,12712],{"class":408},[398,13933,412],{"class":404},[398,13935,3109],{"class":5493},[398,13937,12719],{"class":408},[398,13939,13940,13942,13944,13946],{"class":400,"line":1593},[398,13941,4366],{"class":404},[398,13943,11146],{"class":408},[398,13945,883],{"class":404},[398,13947,12740],{"class":408},[398,13949,13950],{"class":400,"line":1605},[398,13951,1841],{"class":408},[398,13953,13954],{"class":400,"line":1888},[398,13955,2676],{"emptyLinePlaceholder":328},[398,13957,13958,13960,13962],{"class":400,"line":1893},[398,13959,412],{"class":404},[398,13961,2249],{"class":2239},[398,13963,11130],{"class":408},[398,13965,13966],{"class":400,"line":1899},[398,13967,2676],{"emptyLinePlaceholder":328},[398,13969,13970,13972,13974,13977,13979,13981,13983,13985,13987,13989,13992,13994],{"class":400,"line":1904},[398,13971,6806],{"class":408},[398,13973,1445],{"class":404},[398,13975,13976],{"class":513}," \"ret = \"",[398,13978,1720],{"class":404},[398,13980,11662],{"class":2239},[398,13982,409],{"class":408},[398,13984,1102],{"class":457},[398,13986,12712],{"class":408},[398,13988,1102],{"class":457},[398,13990,13991],{"class":408},") ",[398,13993,1445],{"class":404},[398,13995,9117],{"class":408},[398,13997,13998,14000,14002,14004,14006,14008,14010,14012,14014,14016],{"class":400,"line":1918},[398,13999,6806],{"class":408},[398,14001,1445],{"class":404},[398,14003,13976],{"class":513},[398,14005,1720],{"class":404},[398,14007,11662],{"class":2239},[398,14009,409],{"class":408},[398,14011,713],{"class":457},[398,14013,13991],{"class":408},[398,14015,1445],{"class":404},[398,14017,9117],{"class":408},[398,14019,14020],{"class":400,"line":1923},[398,14021,2676],{"emptyLinePlaceholder":328},[398,14023,14024,14026,14028,14030],{"class":400,"line":1929},[398,14025,2579],{"class":2239},[398,14027,409],{"class":408},[398,14029,2584],{"class":513},[398,14031,2995],{"class":408},[398,14033,14034],{"class":400,"line":1950},[398,14035,2676],{"emptyLinePlaceholder":328},[398,14037,14038,14040,14042],{"class":400,"line":1955},[398,14039,4366],{"class":404},[398,14041,4369],{"class":457},[398,14043,1566],{"class":408},[398,14045,14046],{"class":400,"line":1969},[398,14047,1841],{"class":408},[19,14049,11609],{},[38,14051,14052,14055,14058],{},[41,14053,14054],{},"我传就用我；没传就用你",[41,14056,14057],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[41,14059,14060],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[343,14062,14064],{"id":14063},"_72函数的占位参数","7.2函数的占位参数",[19,14066,14067],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,14069,14070,14072,14073],{},[23,14071,5458],{}," ",[395,14074,14075],{},"返回值类型 函数名 (数据类型){}",[389,14077,14079],{"className":391,"code":14078,"language":393,"meta":316,"style":316},"\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",[395,14080,14081,14086,14104,14117,14121,14129,14133,14150,14154,14164,14168,14176],{"__ignoreMap":316},[398,14082,14083],{"class":400,"line":401},[398,14084,14085],{"class":467},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[398,14087,14088,14090,14092,14094,14096,14098,14100,14102],{"class":400,"line":317},[398,14089,5641],{"class":404},[398,14091,11662],{"class":2239},[398,14093,409],{"class":408},[398,14095,412],{"class":404},[398,14097,1674],{"class":5493},[398,14099,12712],{"class":408},[398,14101,412],{"class":404},[398,14103,12719],{"class":408},[398,14105,14106,14108,14110,14113,14115],{"class":400,"line":320},[398,14107,6806],{"class":408},[398,14109,1445],{"class":404},[398,14111,14112],{"class":513}," \"this is func\"",[398,14114,1720],{"class":404},[398,14116,9117],{"class":408},[398,14118,14119],{"class":400,"line":1470},[398,14120,1841],{"class":408},[398,14122,14123,14125,14127],{"class":400,"line":1476},[398,14124,412],{"class":404},[398,14126,2249],{"class":2239},[398,14128,11130],{"class":408},[398,14130,14131],{"class":400,"line":1490},[398,14132,2676],{"emptyLinePlaceholder":328},[398,14134,14135,14137,14139,14141,14143,14145,14147],{"class":400,"line":1496},[398,14136,13562],{"class":2239},[398,14138,409],{"class":408},[398,14140,848],{"class":457},[398,14142,780],{"class":408},[398,14144,848],{"class":457},[398,14146,6243],{"class":408},[398,14148,14149],{"class":467}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[398,14151,14152],{"class":400,"line":1587},[398,14153,2676],{"emptyLinePlaceholder":328},[398,14155,14156,14158,14160,14162],{"class":400,"line":1593},[398,14157,2579],{"class":2239},[398,14159,409],{"class":408},[398,14161,2584],{"class":513},[398,14163,2995],{"class":408},[398,14165,14166],{"class":400,"line":1605},[398,14167,2676],{"emptyLinePlaceholder":328},[398,14169,14170,14172,14174],{"class":400,"line":1888},[398,14171,4366],{"class":404},[398,14173,4369],{"class":457},[398,14175,1566],{"class":408},[398,14177,14178],{"class":400,"line":1893},[398,14179,1841],{"class":408},[19,14181,14182],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[343,14184,14186],{"id":14185},"_73函数重载","7.3函数重载",[19,14188,14189],{},"意思是函数名是可以相同的",[14,14191,14193],{"id":14192},"_731基本语法","7.3.1基本语法",[19,14195,14196],{},"作用：函数名可以相同，提高复用性",[19,14198,14199],{},[23,14200,14201],{},"函数重载满足条件：",[67,14203,14204,14207,14210],{},[41,14205,14206],{},"同一个作用域下",[41,14208,14209],{},"函数名称相同",[41,14211,14212,14213,14216,14217,14220,14221],{},"函数参数",[23,14214,14215],{},"类型不同","  或者 ",[23,14218,14219],{},"个数不同"," 或者 ",[23,14222,14223],{},"顺序不同",[19,14225,14226,14229],{},[23,14227,14228],{},"注意:","  函数的返回值不可以作为函数重载的条件",[389,14231,14233],{"className":10218,"code":14232,"language":10220,"meta":316,"style":316},"\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",[395,14234,14235,14240,14248,14252,14265,14269,14283,14287,14300,14304,14319,14323,14336,14340,14361,14365,14378,14382,14402,14406,14419,14423,14427,14432,14437,14442,14447,14452,14456,14460,14468,14472,14478,14488,14498,14512,14527,14531,14541,14545,14553],{"__ignoreMap":316},[398,14236,14237],{"class":400,"line":401},[398,14238,14239],{"class":467},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[398,14241,14242,14244,14246],{"class":400,"line":317},[398,14243,5641],{"class":404},[398,14245,11662],{"class":2239},[398,14247,2252],{"class":408},[398,14249,14250],{"class":400,"line":320},[398,14251,1822],{"class":408},[398,14253,14254,14256,14258,14261,14263],{"class":400,"line":1470},[398,14255,6806],{"class":408},[398,14257,1445],{"class":404},[398,14259,14260],{"class":513}," \"func 的调用！\"",[398,14262,1720],{"class":404},[398,14264,9117],{"class":408},[398,14266,14267],{"class":400,"line":1476},[398,14268,1841],{"class":408},[398,14270,14271,14273,14275,14277,14279,14281],{"class":400,"line":1490},[398,14272,5641],{"class":404},[398,14274,11662],{"class":2239},[398,14276,409],{"class":408},[398,14278,412],{"class":404},[398,14280,1674],{"class":5493},[398,14282,415],{"class":408},[398,14284,14285],{"class":400,"line":1496},[398,14286,1822],{"class":408},[398,14288,14289,14291,14293,14296,14298],{"class":400,"line":1587},[398,14290,6806],{"class":408},[398,14292,1445],{"class":404},[398,14294,14295],{"class":513}," \"func (int a) 的调用！\"",[398,14297,1720],{"class":404},[398,14299,9117],{"class":408},[398,14301,14302],{"class":400,"line":1593},[398,14303,1841],{"class":408},[398,14305,14306,14308,14310,14312,14315,14317],{"class":400,"line":1605},[398,14307,5641],{"class":404},[398,14309,11662],{"class":2239},[398,14311,409],{"class":408},[398,14313,14314],{"class":404},"double",[398,14316,1674],{"class":5493},[398,14318,415],{"class":408},[398,14320,14321],{"class":400,"line":1888},[398,14322,1822],{"class":408},[398,14324,14325,14327,14329,14332,14334],{"class":400,"line":1893},[398,14326,6806],{"class":408},[398,14328,1445],{"class":404},[398,14330,14331],{"class":513}," \"func (double a)的调用！\"",[398,14333,1720],{"class":404},[398,14335,9117],{"class":408},[398,14337,14338],{"class":400,"line":1899},[398,14339,1841],{"class":408},[398,14341,14342,14344,14346,14348,14350,14352,14355,14357,14359],{"class":400,"line":1904},[398,14343,5641],{"class":404},[398,14345,11662],{"class":2239},[398,14347,409],{"class":408},[398,14349,412],{"class":404},[398,14351,1674],{"class":5493},[398,14353,14354],{"class":408}," ,",[398,14356,14314],{"class":404},[398,14358,3109],{"class":5493},[398,14360,415],{"class":408},[398,14362,14363],{"class":400,"line":1918},[398,14364,1822],{"class":408},[398,14366,14367,14369,14371,14374,14376],{"class":400,"line":1923},[398,14368,6806],{"class":408},[398,14370,1445],{"class":404},[398,14372,14373],{"class":513}," \"func (int a ,double b) 的调用！\"",[398,14375,1720],{"class":404},[398,14377,9117],{"class":408},[398,14379,14380],{"class":400,"line":1929},[398,14381,1841],{"class":408},[398,14383,14384,14386,14388,14390,14392,14394,14396,14398,14400],{"class":400,"line":1950},[398,14385,5641],{"class":404},[398,14387,11662],{"class":2239},[398,14389,409],{"class":408},[398,14391,14314],{"class":404},[398,14393,1674],{"class":5493},[398,14395,14354],{"class":408},[398,14397,412],{"class":404},[398,14399,3109],{"class":5493},[398,14401,415],{"class":408},[398,14403,14404],{"class":400,"line":1955},[398,14405,1822],{"class":408},[398,14407,14408,14410,14412,14415,14417],{"class":400,"line":1969},[398,14409,6806],{"class":408},[398,14411,1445],{"class":404},[398,14413,14414],{"class":513}," \"func (double a ,int b)的调用！\"",[398,14416,1720],{"class":404},[398,14418,9117],{"class":408},[398,14420,14421],{"class":400,"line":1974},[398,14422,1841],{"class":408},[398,14424,14425],{"class":400,"line":2003},[398,14426,2676],{"emptyLinePlaceholder":328},[398,14428,14429],{"class":400,"line":2008},[398,14430,14431],{"class":467},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[398,14433,14434],{"class":400,"line":2025},[398,14435,14436],{"class":467},"\u002F\u002Fint func(double a, int b)\n",[398,14438,14439],{"class":400,"line":2030},[398,14440,14441],{"class":467},"\u002F\u002F{\n",[398,14443,14444],{"class":400,"line":2035},[398,14445,14446],{"class":467},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[398,14448,14449],{"class":400,"line":2040},[398,14450,14451],{"class":467},"\u002F\u002F}\n",[398,14453,14454],{"class":400,"line":2054},[398,14455,2676],{"emptyLinePlaceholder":328},[398,14457,14458],{"class":400,"line":2059},[398,14459,2676],{"emptyLinePlaceholder":328},[398,14461,14462,14464,14466],{"class":400,"line":2853},[398,14463,412],{"class":404},[398,14465,2249],{"class":2239},[398,14467,11130],{"class":408},[398,14469,14470],{"class":400,"line":2867},[398,14471,2676],{"emptyLinePlaceholder":328},[398,14473,14474,14476],{"class":400,"line":2875},[398,14475,13562],{"class":2239},[398,14477,5913],{"class":408},[398,14479,14480,14482,14484,14486],{"class":400,"line":2880},[398,14481,13562],{"class":2239},[398,14483,409],{"class":408},[398,14485,848],{"class":457},[398,14487,2995],{"class":408},[398,14489,14490,14492,14494,14496],{"class":400,"line":2886},[398,14491,13562],{"class":2239},[398,14493,409],{"class":408},[398,14495,458],{"class":457},[398,14497,2995],{"class":408},[398,14499,14500,14502,14504,14506,14508,14510],{"class":400,"line":2892},[398,14501,13562],{"class":2239},[398,14503,409],{"class":408},[398,14505,848],{"class":457},[398,14507,780],{"class":408},[398,14509,458],{"class":457},[398,14511,2995],{"class":408},[398,14513,14514,14516,14518,14520,14523,14525],{"class":400,"line":2897},[398,14515,13562],{"class":2239},[398,14517,409],{"class":408},[398,14519,458],{"class":457},[398,14521,14522],{"class":408}," , ",[398,14524,848],{"class":457},[398,14526,2995],{"class":408},[398,14528,14529],{"class":400,"line":8225},[398,14530,13487],{"class":408},[398,14532,14533,14535,14537,14539],{"class":400,"line":8249},[398,14534,2579],{"class":2239},[398,14536,409],{"class":408},[398,14538,2584],{"class":513},[398,14540,2995],{"class":408},[398,14542,14543],{"class":400,"line":8254},[398,14544,2676],{"emptyLinePlaceholder":328},[398,14546,14547,14549,14551],{"class":400,"line":8260},[398,14548,4366],{"class":404},[398,14550,4369],{"class":457},[398,14552,1566],{"class":408},[398,14554,14555],{"class":400,"line":8287},[398,14556,1841],{"class":408},[19,14558,14559],{},"重点：函数返回值不可以作为函数重载条件！",[14,14561,14563],{"id":14562},"_732注意事项","7.3.2注意事项",[67,14565,14566,14569],{},[41,14567,14568],{},"引用作为重载条件!!!",[41,14570,14571],{},"函数重载碰到函数默认参数",[389,14573,14575],{"className":391,"code":14574,"language":393,"meta":316,"style":316},"\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",[395,14576,14577,14582,14587,14591,14607,14611,14624,14628,14632,14650,14654,14667,14671,14675,14679,14684,14688,14712,14716,14729,14733,14737,14751,14755,14768,14772,14776,14784,14788,14800,14810,14823,14827,14831,14839,14843,14853,14857,14865],{"__ignoreMap":316},[398,14578,14579],{"class":400,"line":401},[398,14580,14581],{"class":467},"\u002F\u002F函数重载注意事项\n",[398,14583,14584],{"class":400,"line":317},[398,14585,14586],{"class":467},"\u002F\u002F1、引用作为重载条件\n",[398,14588,14589],{"class":400,"line":320},[398,14590,2676],{"emptyLinePlaceholder":328},[398,14592,14593,14595,14597,14599,14601,14603,14605],{"class":400,"line":1470},[398,14594,5641],{"class":404},[398,14596,11662],{"class":2239},[398,14598,409],{"class":408},[398,14600,412],{"class":404},[398,14602,10861],{"class":404},[398,14604,640],{"class":5493},[398,14606,415],{"class":408},[398,14608,14609],{"class":400,"line":1476},[398,14610,1822],{"class":408},[398,14612,14613,14615,14617,14620,14622],{"class":400,"line":1490},[398,14614,6806],{"class":408},[398,14616,1445],{"class":404},[398,14618,14619],{"class":513}," \"func (int &a) 调用 \"",[398,14621,1720],{"class":404},[398,14623,9117],{"class":408},[398,14625,14626],{"class":400,"line":1496},[398,14627,1841],{"class":408},[398,14629,14630],{"class":400,"line":1587},[398,14631,2676],{"emptyLinePlaceholder":328},[398,14633,14634,14636,14638,14640,14642,14644,14646,14648],{"class":400,"line":1593},[398,14635,5641],{"class":404},[398,14637,11662],{"class":2239},[398,14639,409],{"class":408},[398,14641,7069],{"class":404},[398,14643,2658],{"class":404},[398,14645,10861],{"class":404},[398,14647,640],{"class":5493},[398,14649,415],{"class":408},[398,14651,14652],{"class":400,"line":1605},[398,14653,1822],{"class":408},[398,14655,14656,14658,14660,14663,14665],{"class":400,"line":1888},[398,14657,6806],{"class":408},[398,14659,1445],{"class":404},[398,14661,14662],{"class":513}," \"func (const int &a) 调用 \"",[398,14664,1720],{"class":404},[398,14666,9117],{"class":408},[398,14668,14669],{"class":400,"line":1893},[398,14670,1841],{"class":408},[398,14672,14673],{"class":400,"line":1899},[398,14674,2676],{"emptyLinePlaceholder":328},[398,14676,14677],{"class":400,"line":1904},[398,14678,2676],{"emptyLinePlaceholder":328},[398,14680,14681],{"class":400,"line":1918},[398,14682,14683],{"class":467},"\u002F\u002F2、函数重载碰到函数默认参数\n",[398,14685,14686],{"class":400,"line":1923},[398,14687,2676],{"emptyLinePlaceholder":328},[398,14689,14690,14692,14694,14696,14698,14700,14702,14704,14706,14708,14710],{"class":400,"line":1929},[398,14691,5641],{"class":404},[398,14693,13895],{"class":2239},[398,14695,409],{"class":408},[398,14697,412],{"class":404},[398,14699,1674],{"class":5493},[398,14701,12712],{"class":408},[398,14703,412],{"class":404},[398,14705,3109],{"class":5493},[398,14707,13841],{"class":404},[398,14709,2314],{"class":457},[398,14711,415],{"class":408},[398,14713,14714],{"class":400,"line":1950},[398,14715,1822],{"class":408},[398,14717,14718,14720,14722,14725,14727],{"class":400,"line":1955},[398,14719,6806],{"class":408},[398,14721,1445],{"class":404},[398,14723,14724],{"class":513}," \"func2(int a, int b = 10) 调用\"",[398,14726,1720],{"class":404},[398,14728,9117],{"class":408},[398,14730,14731],{"class":400,"line":1969},[398,14732,1841],{"class":408},[398,14734,14735],{"class":400,"line":1974},[398,14736,2676],{"emptyLinePlaceholder":328},[398,14738,14739,14741,14743,14745,14747,14749],{"class":400,"line":2003},[398,14740,5641],{"class":404},[398,14742,13895],{"class":2239},[398,14744,409],{"class":408},[398,14746,412],{"class":404},[398,14748,1674],{"class":5493},[398,14750,415],{"class":408},[398,14752,14753],{"class":400,"line":2008},[398,14754,1822],{"class":408},[398,14756,14757,14759,14761,14764,14766],{"class":400,"line":2025},[398,14758,6806],{"class":408},[398,14760,1445],{"class":404},[398,14762,14763],{"class":513}," \"func2(int a) 调用\"",[398,14765,1720],{"class":404},[398,14767,9117],{"class":408},[398,14769,14770],{"class":400,"line":2030},[398,14771,1841],{"class":408},[398,14773,14774],{"class":400,"line":2035},[398,14775,2676],{"emptyLinePlaceholder":328},[398,14777,14778,14780,14782],{"class":400,"line":2040},[398,14779,412],{"class":404},[398,14781,2249],{"class":2239},[398,14783,11130],{"class":408},[398,14785,14786],{"class":400,"line":2054},[398,14787,13487],{"class":408},[398,14789,14790,14792,14794,14796,14798],{"class":400,"line":2059},[398,14791,2261],{"class":404},[398,14793,11146],{"class":408},[398,14795,454],{"class":404},[398,14797,2314],{"class":457},[398,14799,1566],{"class":408},[398,14801,14802,14804,14807],{"class":400,"line":2853},[398,14803,13562],{"class":2239},[398,14805,14806],{"class":408},"(a);",[398,14808,14809],{"class":467}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[398,14811,14812,14814,14816,14818,14820],{"class":400,"line":2867},[398,14813,13562],{"class":2239},[398,14815,409],{"class":408},[398,14817,848],{"class":457},[398,14819,6243],{"class":408},[398,14821,14822],{"class":467},"\u002F\u002F调用有const   10是个常量\n",[398,14824,14825],{"class":400,"line":2875},[398,14826,2676],{"emptyLinePlaceholder":328},[398,14828,14829],{"class":400,"line":2880},[398,14830,2676],{"emptyLinePlaceholder":328},[398,14832,14833,14836],{"class":400,"line":2886},[398,14834,14835],{"class":467},"    \u002F\u002Ffunc2(10);",[398,14837,14838],{"class":467}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[398,14840,14841],{"class":400,"line":2892},[398,14842,2676],{"emptyLinePlaceholder":328},[398,14844,14845,14847,14849,14851],{"class":400,"line":2897},[398,14846,2579],{"class":2239},[398,14848,409],{"class":408},[398,14850,2584],{"class":513},[398,14852,2995],{"class":408},[398,14854,14855],{"class":400,"line":8225},[398,14856,2676],{"emptyLinePlaceholder":328},[398,14858,14859,14861,14863],{"class":400,"line":8249},[398,14860,4366],{"class":404},[398,14862,4369],{"class":457},[398,14864,1566],{"class":408},[398,14866,14867],{"class":400,"line":8254},[398,14868,1841],{"class":408},[5403,14870,14871],{},"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":316,"searchDepth":317,"depth":317,"links":14873},[14874,14875,14876],{"id":13806,"depth":317,"text":13807},{"id":14063,"depth":317,"text":14064},{"id":14185,"depth":317,"text":14186,"children":14877},[14878,14879],{"id":14192,"depth":320,"text":14193},{"id":14562,"depth":320,"text":14563},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13798,"description":316},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14886,"title":14887,"body":14888,"description":23642,"extension":326,"meta":23643,"navigation":328,"path":23644,"seo":23645,"stem":23646,"__hash__":23647},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14889,"toc":23623},[14890,14893,14899,14906,14911,14914,14917,14920,14924,14928,14931,14934,14942,14947,14950,14957,14962,15121,15124,15377,15380,15383,15386,15391,15394,15397,15408,15413,15649,15653,15663,15666,15674,15821,15825,15828,15831,15835,16280,16284,16292,16300,17212,17219,17224,17852,17855,17858,17861,17980,17983,18070,18073,18199,18202,18296,18299,18652,18656,18664,18668,18675,18678,18681,18692,18698,18703,18715,18723,18743,18751,18768,18954,18957,18961,18964,18967,18970,18973,18976,18979,18982,19442,19448,19452,19455,19466,20053,20056,20545,20549,20552,20555,20558,20561,20564,20572,20968,20972,20975,20978,21425,21428,21431,21436,21439,21444,21447,21451,21454,21456,21462,21465,21771,21781,21822,21826,21829,21831,21864,21867,22174,22176,22191,22194,22217,22226,22232,22235,22239,22242,22245,22250,22261,22266,22274,22279,22409,22412,22415,22590,22595,22807,22811,22814,22928,22933,23172,23176,23180,23183,23186,23191,23296,23299,23302,23305,23309,23420,23423,23426,23431,23483,23486,23489,23494,23540,23543,23548,23616,23618,23621],[10,14891,14887],{"id":14892},"_8类和对象",[19,14894,14895,14896],{},"C++面向对象的三大特性为",[23,14897,14898],{},"封装、继承、多态",[19,14900,14901,14902,14905],{},"C++认为",[23,14903,14904],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,14907,14908],{},[23,14909,14910],{},"例如：",[19,14912,14913],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,14915,14916],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,14918,14919],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[343,14921,14923],{"id":14922},"_81封装","8.1封装",[14,14925,14927],{"id":14926},"_811封装的意义","8.1.1封装的意义",[19,14929,14930],{},"封装是C++面向对象三大特性之一",[19,14932,14933],{},"封装的意义：",[67,14935,14936,14939],{},[41,14937,14938],{},"将属性和行为作为一个整体，表现生活中的事物",[41,14940,14941],{},"将属性和行为加以权限控制",[19,14943,14944],{},[23,14945,14946],{},"封装意义一：",[19,14948,14949],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,14951,14952,14072,14954],{},[23,14953,5458],{},[395,14955,14956],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[38,14958,14959],{},[41,14960,14961],{},"**示例1：**设计一个圆类，求圆的周长",[389,14963,14965],{"className":391,"code":14964,"language":393,"meta":316,"style":316},"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",[395,14966,14967,14975,14979,14984,14989,14994,14999,15006,15011,15021,15025,15043,15047,15051,15059,15063,15068,15073,15078,15083,15094,15117],{"__ignoreMap":316},[398,14968,14969,14972],{"class":400,"line":401},[398,14970,14971],{"class":404},"class",[398,14973,14974],{"class":2239}," Circle\n",[398,14976,14977],{"class":400,"line":317},[398,14978,1822],{"class":408},[398,14980,14981],{"class":400,"line":320},[398,14982,14983],{"class":467},"    \u002F\u002F访问权限\n",[398,14985,14986],{"class":400,"line":1470},[398,14987,14988],{"class":467},"    \u002F\u002F公共权限\n",[398,14990,14991],{"class":400,"line":1476},[398,14992,14993],{"class":404},"public:\n",[398,14995,14996],{"class":400,"line":1490},[398,14997,14998],{"class":467},"    \u002F\u002F属性\n",[398,15000,15001,15003],{"class":400,"line":1496},[398,15002,2261],{"class":404},[398,15004,15005],{"class":408}," m_r;\n",[398,15007,15008],{"class":400,"line":1587},[398,15009,15010],{"class":467},"    \u002F\u002F行为\n",[398,15012,15013,15016,15019],{"class":400,"line":1593},[398,15014,15015],{"class":404},"    double",[398,15017,15018],{"class":2239}," calculateZC",[398,15020,2252],{"class":408},[398,15022,15023],{"class":400,"line":1605},[398,15024,2306],{"class":408},[398,15026,15027,15030,15033,15035,15038,15040],{"class":400,"line":1888},[398,15028,15029],{"class":404},"        return",[398,15031,15032],{"class":457}," 2",[398,15034,857],{"class":404},[398,15036,15037],{"class":408},"PI",[398,15039,857],{"class":404},[398,15041,15042],{"class":408},"m_r;\n",[398,15044,15045],{"class":400,"line":1893},[398,15046,2463],{"class":408},[398,15048,15049],{"class":400,"line":1899},[398,15050,4271],{"class":408},[398,15052,15053,15055,15057],{"class":400,"line":1904},[398,15054,412],{"class":404},[398,15056,2249],{"class":2239},[398,15058,2252],{"class":408},[398,15060,15061],{"class":400,"line":1918},[398,15062,1822],{"class":408},[398,15064,15065],{"class":400,"line":1923},[398,15066,15067],{"class":467},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[398,15069,15070],{"class":400,"line":1929},[398,15071,15072],{"class":467},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[398,15074,15075],{"class":400,"line":1950},[398,15076,15077],{"class":408},"    Circle c1;\n",[398,15079,15080],{"class":400,"line":1955},[398,15081,15082],{"class":467},"    \u002F\u002F给圆对象 的属性进行赋值\n",[398,15084,15085,15088,15090,15092],{"class":400,"line":1969},[398,15086,15087],{"class":408},"    c1.m_r",[398,15089,454],{"class":404},[398,15091,848],{"class":457},[398,15093,1566],{"class":408},[398,15095,15096,15098,15100,15103,15105,15108,15111,15113,15115],{"class":400,"line":1974},[398,15097,1827],{"class":408},[398,15099,1445],{"class":404},[398,15101,15102],{"class":513},"\"圆的周长\"",[398,15104,1445],{"class":404},[398,15106,15107],{"class":408},"c1.",[398,15109,15110],{"class":2239},"calculateZC",[398,15112,2703],{"class":408},[398,15114,1445],{"class":404},[398,15116,1467],{"class":408},[398,15118,15119],{"class":400,"line":2003},[398,15120,1841],{"class":408},[19,15122,15123],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[389,15125,15127],{"className":391,"code":15126,"language":393,"meta":316,"style":316},"#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",[395,15128,15129,15135,15145,15151,15157,15161,15165,15170,15177,15182,15200,15204,15214,15218,15223,15239,15243,15253,15257,15262,15270,15274,15306,15310,15314,15322,15326,15331,15336,15350,15364,15373],{"__ignoreMap":316},[398,15130,15131,15133],{"class":400,"line":401},[398,15132,2225],{"class":404},[398,15134,2228],{"class":513},[398,15136,15137,15139,15141,15143],{"class":400,"line":317},[398,15138,2233],{"class":404},[398,15140,2236],{"class":404},[398,15142,2240],{"class":2239},[398,15144,1566],{"class":408},[398,15146,15147,15149],{"class":400,"line":320},[398,15148,2225],{"class":404},[398,15150,8026],{"class":513},[398,15152,15153,15155],{"class":400,"line":1470},[398,15154,14971],{"class":404},[398,15156,8039],{"class":2239},[398,15158,15159],{"class":400,"line":1476},[398,15160,1822],{"class":408},[398,15162,15163],{"class":400,"line":1490},[398,15164,14993],{"class":404},[398,15166,15167],{"class":400,"line":1496},[398,15168,15169],{"class":408},"    string m_name;\n",[398,15171,15172,15174],{"class":400,"line":1587},[398,15173,2261],{"class":404},[398,15175,15176],{"class":408}," m_id;\n",[398,15178,15179],{"class":400,"line":1593},[398,15180,15181],{"class":467},"    \u002F\u002F赋值姓名\n",[398,15183,15184,15187,15190,15192,15195,15198],{"class":400,"line":1605},[398,15185,15186],{"class":404},"    void",[398,15188,15189],{"class":2239}," setName",[398,15191,409],{"class":408},[398,15193,15194],{"class":2239},"string",[398,15196,15197],{"class":5493}," name",[398,15199,415],{"class":408},[398,15201,15202],{"class":400,"line":1888},[398,15203,2306],{"class":408},[398,15205,15206,15209,15211],{"class":400,"line":1893},[398,15207,15208],{"class":408},"        m_name",[398,15210,454],{"class":404},[398,15212,15213],{"class":408},"name;\n",[398,15215,15216],{"class":400,"line":1899},[398,15217,2463],{"class":408},[398,15219,15220],{"class":400,"line":1904},[398,15221,15222],{"class":467},"    \u002F\u002F赋值学号\n",[398,15224,15225,15227,15230,15232,15234,15237],{"class":400,"line":1918},[398,15226,15186],{"class":404},[398,15228,15229],{"class":2239}," setId",[398,15231,409],{"class":408},[398,15233,412],{"class":404},[398,15235,15236],{"class":5493}," id",[398,15238,415],{"class":408},[398,15240,15241],{"class":400,"line":1923},[398,15242,2306],{"class":408},[398,15244,15245,15248,15250],{"class":400,"line":1929},[398,15246,15247],{"class":408},"        m_id",[398,15249,454],{"class":404},[398,15251,15252],{"class":408},"id;\n",[398,15254,15255],{"class":400,"line":1950},[398,15256,2463],{"class":408},[398,15258,15259],{"class":400,"line":1955},[398,15260,15261],{"class":467},"    \u002F\u002F打印学生信息\n",[398,15263,15264,15266,15268],{"class":400,"line":1969},[398,15265,15186],{"class":404},[398,15267,9892],{"class":2239},[398,15269,2252],{"class":408},[398,15271,15272],{"class":400,"line":1974},[398,15273,2306],{"class":408},[398,15275,15276,15278,15280,15283,15285,15288,15290,15292,15294,15297,15299,15302,15304],{"class":400,"line":2003},[398,15277,3727],{"class":408},[398,15279,1445],{"class":404},[398,15281,15282],{"class":513},"\"姓名：\"",[398,15284,1445],{"class":404},[398,15286,15287],{"class":408},"m_name",[398,15289,1445],{"class":404},[398,15291,4635],{"class":513},[398,15293,1445],{"class":404},[398,15295,15296],{"class":513},"\"学号：\"",[398,15298,1445],{"class":404},[398,15300,15301],{"class":408},"m_id",[398,15303,1445],{"class":404},[398,15305,1467],{"class":408},[398,15307,15308],{"class":400,"line":2008},[398,15309,2463],{"class":408},[398,15311,15312],{"class":400,"line":2025},[398,15313,4271],{"class":408},[398,15315,15316,15318,15320],{"class":400,"line":2030},[398,15317,412],{"class":404},[398,15319,2249],{"class":2239},[398,15321,2252],{"class":408},[398,15323,15324],{"class":400,"line":2035},[398,15325,1822],{"class":408},[398,15327,15328],{"class":400,"line":2040},[398,15329,15330],{"class":467},"    \u002F\u002F实例化\n",[398,15332,15333],{"class":400,"line":2054},[398,15334,15335],{"class":408},"    Student s1;\n",[398,15337,15338,15341,15344,15346,15348],{"class":400,"line":2059},[398,15339,15340],{"class":408},"    s1.",[398,15342,15343],{"class":2239},"setName",[398,15345,409],{"class":408},[398,15347,8193],{"class":513},[398,15349,2995],{"class":408},[398,15351,15352,15354,15357,15359,15362],{"class":400,"line":2853},[398,15353,15340],{"class":408},[398,15355,15356],{"class":2239},"setId",[398,15358,409],{"class":408},[398,15360,15361],{"class":457},"123456",[398,15363,2995],{"class":408},[398,15365,15366,15368,15371],{"class":400,"line":2867},[398,15367,15340],{"class":408},[398,15369,15370],{"class":2239},"printInfo",[398,15372,5913],{"class":408},[398,15374,15375],{"class":400,"line":2875},[398,15376,1841],{"class":408},[19,15378,15379],{},"类中的属性和行为统称为成员",[19,15381,15382],{},"属性：成员属性(成员变量)",[19,15384,15385],{},"方法：成员函数(成员方法)",[19,15387,15388],{},[23,15389,15390],{},"封装意义二：",[19,15392,15393],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,15395,15396],{},"访问权限有三种：",[38,15398,15399,15402,15405],{},[41,15400,15401],{},"public        公共权限",[41,15403,15404],{},"protected 保护权限",[41,15406,15407],{},"private      私有权限",[19,15409,15410],{},[23,15411,15412],{},"示例：",[389,15414,15416],{"className":10218,"code":15415,"language":10220,"meta":316,"style":316},"\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",[395,15417,15418,15423,15428,15433,15438,15442,15449,15453,15458,15462,15467,15471,15476,15481,15486,15490,15495,15500,15507,15511,15515,15523,15527,15538,15550,15562,15566,15570,15574,15582,15586,15591,15603,15611,15619,15623,15633,15637,15645],{"__ignoreMap":316},[398,15419,15420],{"class":400,"line":401},[398,15421,15422],{"class":467},"\u002F\u002F三种权限\n",[398,15424,15425],{"class":400,"line":317},[398,15426,15427],{"class":467},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[398,15429,15430],{"class":400,"line":320},[398,15431,15432],{"class":467},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[398,15434,15435],{"class":400,"line":1470},[398,15436,15437],{"class":467},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[398,15439,15440],{"class":400,"line":1476},[398,15441,2676],{"emptyLinePlaceholder":328},[398,15443,15444,15446],{"class":400,"line":1490},[398,15445,14971],{"class":404},[398,15447,15448],{"class":2239}," Person\n",[398,15450,15451],{"class":400,"line":1496},[398,15452,1822],{"class":408},[398,15454,15455],{"class":400,"line":1587},[398,15456,15457],{"class":467},"    \u002F\u002F姓名  公共权限\n",[398,15459,15460],{"class":400,"line":1593},[398,15461,14993],{"class":404},[398,15463,15464],{"class":400,"line":1605},[398,15465,15466],{"class":408},"    string m_Name;\n",[398,15468,15469],{"class":400,"line":1888},[398,15470,2676],{"emptyLinePlaceholder":328},[398,15472,15473],{"class":400,"line":1893},[398,15474,15475],{"class":467},"    \u002F\u002F汽车  保护权限\n",[398,15477,15478],{"class":400,"line":1899},[398,15479,15480],{"class":404},"protected:\n",[398,15482,15483],{"class":400,"line":1904},[398,15484,15485],{"class":408},"    string m_Car;\n",[398,15487,15488],{"class":400,"line":1918},[398,15489,2676],{"emptyLinePlaceholder":328},[398,15491,15492],{"class":400,"line":1923},[398,15493,15494],{"class":467},"    \u002F\u002F银行卡密码  私有权限\n",[398,15496,15497],{"class":400,"line":1929},[398,15498,15499],{"class":404},"private:\n",[398,15501,15502,15504],{"class":400,"line":1950},[398,15503,2261],{"class":404},[398,15505,15506],{"class":408}," m_Password;\n",[398,15508,15509],{"class":400,"line":1955},[398,15510,2676],{"emptyLinePlaceholder":328},[398,15512,15513],{"class":400,"line":1969},[398,15514,14993],{"class":404},[398,15516,15517,15519,15521],{"class":400,"line":1974},[398,15518,15186],{"class":404},[398,15520,11662],{"class":2239},[398,15522,2252],{"class":408},[398,15524,15525],{"class":400,"line":2003},[398,15526,2306],{"class":408},[398,15528,15529,15532,15534,15536],{"class":400,"line":2008},[398,15530,15531],{"class":408},"        m_Name ",[398,15533,454],{"class":404},[398,15535,9215],{"class":513},[398,15537,1566],{"class":408},[398,15539,15540,15543,15545,15548],{"class":400,"line":2025},[398,15541,15542],{"class":408},"        m_Car ",[398,15544,454],{"class":404},[398,15546,15547],{"class":513}," \"拖拉机\"",[398,15549,1566],{"class":408},[398,15551,15552,15555,15557,15560],{"class":400,"line":2030},[398,15553,15554],{"class":408},"        m_Password ",[398,15556,454],{"class":404},[398,15558,15559],{"class":457}," 123456",[398,15561,1566],{"class":408},[398,15563,15564],{"class":400,"line":2035},[398,15565,2463],{"class":408},[398,15567,15568],{"class":400,"line":2040},[398,15569,4271],{"class":408},[398,15571,15572],{"class":400,"line":2054},[398,15573,2676],{"emptyLinePlaceholder":328},[398,15575,15576,15578,15580],{"class":400,"line":2059},[398,15577,412],{"class":404},[398,15579,2249],{"class":2239},[398,15581,11130],{"class":408},[398,15583,15584],{"class":400,"line":2853},[398,15585,2676],{"emptyLinePlaceholder":328},[398,15587,15588],{"class":400,"line":2867},[398,15589,15590],{"class":408},"    Person p;\n",[398,15592,15593,15596,15598,15601],{"class":400,"line":2875},[398,15594,15595],{"class":408},"    p.m_Name ",[398,15597,454],{"class":404},[398,15599,15600],{"class":513}," \"李四\"",[398,15602,1566],{"class":408},[398,15604,15605,15608],{"class":400,"line":2880},[398,15606,15607],{"class":467},"    \u002F\u002Fp.m_Car = \"奔驰\";",[398,15609,15610],{"class":467},"  \u002F\u002F保护权限类外访问不到\n",[398,15612,15613,15616],{"class":400,"line":2886},[398,15614,15615],{"class":467},"    \u002F\u002Fp.m_Password = 123;",[398,15617,15618],{"class":467}," \u002F\u002F私有权限类外访问不到\n",[398,15620,15621],{"class":400,"line":2892},[398,15622,2676],{"emptyLinePlaceholder":328},[398,15624,15625,15627,15629,15631],{"class":400,"line":2897},[398,15626,2579],{"class":2239},[398,15628,409],{"class":408},[398,15630,2584],{"class":513},[398,15632,2995],{"class":408},[398,15634,15635],{"class":400,"line":8225},[398,15636,2676],{"emptyLinePlaceholder":328},[398,15638,15639,15641,15643],{"class":400,"line":8249},[398,15640,4366],{"class":404},[398,15642,4369],{"class":457},[398,15644,1566],{"class":408},[398,15646,15647],{"class":400,"line":8254},[398,15648,1841],{"class":408},[14,15650,15652],{"id":15651},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,15654,15655,15656,15659,15660],{},"在C++中 struct和class唯一的",[23,15657,15658],{},"区别","就在于 ",[23,15661,15662],{},"默认的访问权限不同",[19,15664,15665],{},"区别：",[67,15667,15668,15671],{},[41,15669,15670],{},"struct 默认权限为公共",[41,15672,15673],{},"class   默认权限为私有",[389,15675,15677],{"className":10218,"code":15676,"language":10220,"meta":316,"style":316},"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",[395,15678,15679,15686,15690,15700,15704,15708,15715,15719,15729,15733,15737,15745,15749,15754,15768,15772,15777,15791,15795,15805,15809,15817],{"__ignoreMap":316},[398,15680,15681,15683],{"class":400,"line":401},[398,15682,14971],{"class":404},[398,15684,15685],{"class":2239}," C1\n",[398,15687,15688],{"class":400,"line":317},[398,15689,1822],{"class":408},[398,15691,15692,15694,15697],{"class":400,"line":320},[398,15693,2261],{"class":404},[398,15695,15696],{"class":408},"  m_A;",[398,15698,15699],{"class":467}," \u002F\u002F默认是私有权限\n",[398,15701,15702],{"class":400,"line":1470},[398,15703,4271],{"class":408},[398,15705,15706],{"class":400,"line":1476},[398,15707,2676],{"emptyLinePlaceholder":328},[398,15709,15710,15712],{"class":400,"line":1490},[398,15711,8036],{"class":404},[398,15713,15714],{"class":2239}," C2\n",[398,15716,15717],{"class":400,"line":1496},[398,15718,1822],{"class":408},[398,15720,15721,15723,15726],{"class":400,"line":1587},[398,15722,2261],{"class":404},[398,15724,15725],{"class":408}," m_A;",[398,15727,15728],{"class":467},"  \u002F\u002F默认是公共权限\n",[398,15730,15731],{"class":400,"line":1593},[398,15732,4271],{"class":408},[398,15734,15735],{"class":400,"line":1605},[398,15736,2676],{"emptyLinePlaceholder":328},[398,15738,15739,15741,15743],{"class":400,"line":1888},[398,15740,412],{"class":404},[398,15742,2249],{"class":2239},[398,15744,11130],{"class":408},[398,15746,15747],{"class":400,"line":1893},[398,15748,2676],{"emptyLinePlaceholder":328},[398,15750,15751],{"class":400,"line":1899},[398,15752,15753],{"class":408},"    C1 c1;\n",[398,15755,15756,15759,15761,15763,15765],{"class":400,"line":1904},[398,15757,15758],{"class":408},"    c1.m_A ",[398,15760,454],{"class":404},[398,15762,2314],{"class":457},[398,15764,464],{"class":408},[398,15766,15767],{"class":467}," \u002F\u002F错误，访问权限是私有\n",[398,15769,15770],{"class":400,"line":1918},[398,15771,2676],{"emptyLinePlaceholder":328},[398,15773,15774],{"class":400,"line":1923},[398,15775,15776],{"class":408},"    C2 c2;\n",[398,15778,15779,15782,15784,15786,15788],{"class":400,"line":1929},[398,15780,15781],{"class":408},"    c2.m_A ",[398,15783,454],{"class":404},[398,15785,2314],{"class":457},[398,15787,464],{"class":408},[398,15789,15790],{"class":467}," \u002F\u002F正确，访问权限是公共\n",[398,15792,15793],{"class":400,"line":1950},[398,15794,2676],{"emptyLinePlaceholder":328},[398,15796,15797,15799,15801,15803],{"class":400,"line":1955},[398,15798,2579],{"class":2239},[398,15800,409],{"class":408},[398,15802,2584],{"class":513},[398,15804,2995],{"class":408},[398,15806,15807],{"class":400,"line":1969},[398,15808,2676],{"emptyLinePlaceholder":328},[398,15810,15811,15813,15815],{"class":400,"line":1974},[398,15812,4366],{"class":404},[398,15814,4369],{"class":457},[398,15816,1566],{"class":408},[398,15818,15819],{"class":400,"line":2003},[398,15820,1841],{"class":408},[14,15822,15824],{"id":15823},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,15826,15827],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,15829,15830],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,15832,15833],{},[23,15834,15412],{},[389,15836,15838],{"className":10218,"code":15837,"language":10220,"meta":316,"style":316},"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",[395,15839,15840,15850,15854,15858,15863,15877,15886,15890,15900,15904,15911,15915,15919,15923,15928,15937,15944,15948,15953,15969,15992,16005,16012,16016,16025,16029,16033,16038,16054,16064,16068,16072,16076,16084,16088,16098,16102,16110,16114,16118,16126,16130,16134,16139,16152,16175,16179,16184,16197,16219,16223,16228,16242,16250,16254,16264,16268,16276],{"__ignoreMap":316},[398,15841,15842,15844,15847],{"class":400,"line":401},[398,15843,14971],{"class":404},[398,15845,15846],{"class":2239}," Person",[398,15848,15849],{"class":408}," {\n",[398,15851,15852],{"class":400,"line":317},[398,15853,14993],{"class":404},[398,15855,15856],{"class":400,"line":320},[398,15857,2676],{"emptyLinePlaceholder":328},[398,15859,15860],{"class":400,"line":1470},[398,15861,15862],{"class":467},"    \u002F\u002F姓名设置可读可写\n",[398,15864,15865,15867,15869,15871,15873,15875],{"class":400,"line":1476},[398,15866,15186],{"class":404},[398,15868,15189],{"class":2239},[398,15870,409],{"class":408},[398,15872,15194],{"class":2239},[398,15874,15197],{"class":5493},[398,15876,12719],{"class":408},[398,15878,15879,15881,15883],{"class":400,"line":1490},[398,15880,15531],{"class":408},[398,15882,454],{"class":404},[398,15884,15885],{"class":408}," name;\n",[398,15887,15888],{"class":400,"line":1496},[398,15889,2463],{"class":408},[398,15891,15892,15895,15898],{"class":400,"line":1587},[398,15893,15894],{"class":2239},"    string",[398,15896,15897],{"class":2239}," getName",[398,15899,2252],{"class":408},[398,15901,15902],{"class":400,"line":1593},[398,15903,2306],{"class":408},[398,15905,15906,15908],{"class":400,"line":1605},[398,15907,15029],{"class":404},[398,15909,15910],{"class":408}," m_Name;\n",[398,15912,15913],{"class":400,"line":1888},[398,15914,2463],{"class":408},[398,15916,15917],{"class":400,"line":1893},[398,15918,2676],{"emptyLinePlaceholder":328},[398,15920,15921],{"class":400,"line":1899},[398,15922,2676],{"emptyLinePlaceholder":328},[398,15924,15925],{"class":400,"line":1904},[398,15926,15927],{"class":467},"    \u002F\u002F获取年龄 \n",[398,15929,15930,15932,15935],{"class":400,"line":1918},[398,15931,2261],{"class":404},[398,15933,15934],{"class":2239}," getAge",[398,15936,11130],{"class":408},[398,15938,15939,15941],{"class":400,"line":1923},[398,15940,15029],{"class":404},[398,15942,15943],{"class":408}," m_Age;\n",[398,15945,15946],{"class":400,"line":1929},[398,15947,2463],{"class":408},[398,15949,15950],{"class":400,"line":1950},[398,15951,15952],{"class":467},"    \u002F\u002F设置年龄\n",[398,15954,15955,15957,15960,15962,15964,15967],{"class":400,"line":1955},[398,15956,15186],{"class":404},[398,15958,15959],{"class":2239}," setAge",[398,15961,409],{"class":408},[398,15963,412],{"class":404},[398,15965,15966],{"class":5493}," age",[398,15968,12719],{"class":408},[398,15970,15971,15973,15976,15978,15980,15982,15985,15987,15990],{"class":400,"line":1969},[398,15972,2773],{"class":404},[398,15974,15975],{"class":408}," (age ",[398,15977,1312],{"class":404},[398,15979,4369],{"class":457},[398,15981,3531],{"class":404},[398,15983,15984],{"class":408}," age ",[398,15986,1362],{"class":404},[398,15988,15989],{"class":457}," 150",[398,15991,12719],{"class":408},[398,15993,15994,15996,15998,16001,16003],{"class":400,"line":1974},[398,15995,9996],{"class":408},[398,15997,1445],{"class":404},[398,15999,16000],{"class":513}," \"你个老妖精!\"",[398,16002,1720],{"class":404},[398,16004,9117],{"class":408},[398,16006,16007,16010],{"class":400,"line":2003},[398,16008,16009],{"class":404},"            return",[398,16011,1566],{"class":408},[398,16013,16014],{"class":400,"line":2008},[398,16015,2805],{"class":408},[398,16017,16018,16021,16023],{"class":400,"line":2025},[398,16019,16020],{"class":408},"        m_Age ",[398,16022,454],{"class":404},[398,16024,8074],{"class":408},[398,16026,16027],{"class":400,"line":2030},[398,16028,2463],{"class":408},[398,16030,16031],{"class":400,"line":2035},[398,16032,2676],{"emptyLinePlaceholder":328},[398,16034,16035],{"class":400,"line":2040},[398,16036,16037],{"class":467},"    \u002F\u002F情人设置为只写\n",[398,16039,16040,16042,16045,16047,16049,16052],{"class":400,"line":2054},[398,16041,15186],{"class":404},[398,16043,16044],{"class":2239}," setLover",[398,16046,409],{"class":408},[398,16048,15194],{"class":2239},[398,16050,16051],{"class":5493}," lover",[398,16053,12719],{"class":408},[398,16055,16056,16059,16061],{"class":400,"line":2059},[398,16057,16058],{"class":408},"        m_Lover ",[398,16060,454],{"class":404},[398,16062,16063],{"class":408}," lover;\n",[398,16065,16066],{"class":400,"line":2853},[398,16067,2463],{"class":408},[398,16069,16070],{"class":400,"line":2867},[398,16071,2676],{"emptyLinePlaceholder":328},[398,16073,16074],{"class":400,"line":2875},[398,16075,15499],{"class":404},[398,16077,16078,16081],{"class":400,"line":2880},[398,16079,16080],{"class":408},"    string m_Name;",[398,16082,16083],{"class":467}," \u002F\u002F可读可写  姓名\n",[398,16085,16086],{"class":400,"line":2886},[398,16087,13487],{"class":408},[398,16089,16090,16092,16095],{"class":400,"line":2892},[398,16091,2261],{"class":404},[398,16093,16094],{"class":408}," m_Age;",[398,16096,16097],{"class":467}," \u002F\u002F只读  年龄\n",[398,16099,16100],{"class":400,"line":2897},[398,16101,2676],{"emptyLinePlaceholder":328},[398,16103,16104,16107],{"class":400,"line":8225},[398,16105,16106],{"class":408},"    string m_Lover;",[398,16108,16109],{"class":467}," \u002F\u002F只写  情人\n",[398,16111,16112],{"class":400,"line":8249},[398,16113,4271],{"class":408},[398,16115,16116],{"class":400,"line":8254},[398,16117,2676],{"emptyLinePlaceholder":328},[398,16119,16120,16122,16124],{"class":400,"line":8260},[398,16121,412],{"class":404},[398,16123,2249],{"class":2239},[398,16125,11130],{"class":408},[398,16127,16128],{"class":400,"line":8287},[398,16129,2676],{"emptyLinePlaceholder":328},[398,16131,16132],{"class":400,"line":8292},[398,16133,15590],{"class":408},[398,16135,16136],{"class":400,"line":8298},[398,16137,16138],{"class":467},"    \u002F\u002F姓名设置\n",[398,16140,16141,16144,16146,16148,16150],{"class":400,"line":8310},[398,16142,16143],{"class":408},"    p.",[398,16145,15343],{"class":2239},[398,16147,409],{"class":408},[398,16149,8193],{"class":513},[398,16151,2995],{"class":408},[398,16153,16154,16156,16158,16161,16163,16166,16169,16171,16173],{"class":400,"line":8322},[398,16155,6806],{"class":408},[398,16157,1445],{"class":404},[398,16159,16160],{"class":513}," \"姓名： \"",[398,16162,1720],{"class":404},[398,16164,16165],{"class":408}," p.",[398,16167,16168],{"class":2239},"getName",[398,16170,13327],{"class":408},[398,16172,1445],{"class":404},[398,16174,9117],{"class":408},[398,16176,16177],{"class":400,"line":8334},[398,16178,2676],{"emptyLinePlaceholder":328},[398,16180,16181],{"class":400,"line":9993},[398,16182,16183],{"class":467},"    \u002F\u002F年龄设置\n",[398,16185,16186,16188,16191,16193,16195],{"class":400,"line":10018},[398,16187,16143],{"class":408},[398,16189,16190],{"class":2239},"setAge",[398,16192,409],{"class":408},[398,16194,1058],{"class":457},[398,16196,2995],{"class":408},[398,16198,16199,16201,16203,16206,16208,16210,16213,16215,16217],{"class":400,"line":10041},[398,16200,6806],{"class":408},[398,16202,1445],{"class":404},[398,16204,16205],{"class":513}," \"年龄： \"",[398,16207,1720],{"class":404},[398,16209,16165],{"class":408},[398,16211,16212],{"class":2239},"getAge",[398,16214,13327],{"class":408},[398,16216,1445],{"class":404},[398,16218,9117],{"class":408},[398,16220,16221],{"class":400,"line":10065},[398,16222,2676],{"emptyLinePlaceholder":328},[398,16224,16225],{"class":400,"line":10070},[398,16226,16227],{"class":467},"    \u002F\u002F情人设置\n",[398,16229,16230,16232,16235,16237,16240],{"class":400,"line":10075},[398,16231,16143],{"class":408},[398,16233,16234],{"class":2239},"setLover",[398,16236,409],{"class":408},[398,16238,16239],{"class":513},"\"苍井\"",[398,16241,2995],{"class":408},[398,16243,16244,16247],{"class":400,"line":10080},[398,16245,16246],{"class":467},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[398,16248,16249],{"class":467},"  \u002F\u002F只写属性，不可以读取\n",[398,16251,16252],{"class":400,"line":10089},[398,16253,2676],{"emptyLinePlaceholder":328},[398,16255,16256,16258,16260,16262],{"class":400,"line":10094},[398,16257,2579],{"class":2239},[398,16259,409],{"class":408},[398,16261,2584],{"class":513},[398,16263,2995],{"class":408},[398,16265,16266],{"class":400,"line":10100},[398,16267,2676],{"emptyLinePlaceholder":328},[398,16269,16270,16272,16274],{"class":400,"line":10121},[398,16271,4366],{"class":404},[398,16273,4369],{"class":457},[398,16275,1566],{"class":408},[398,16277,16278],{"class":400,"line":10127},[398,16279,1841],{"class":408},[14,16281,16283],{"id":16282},"_814封装案例","8.1.4封装案例",[38,16285,16286],{},[41,16287,16288,16291],{},[23,16289,16290],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[67,16293,16294,16297],{},[41,16295,16296],{},"求出立方体的面积和体积",[41,16298,16299],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[389,16301,16303],{"className":391,"code":16302,"language":393,"meta":316,"style":316},"#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",[395,16304,16305,16311,16321,16328,16332,16336,16341,16371,16375,16385,16395,16405,16409,16418,16422,16458,16462,16471,16475,16491,16495,16500,16509,16513,16520,16524,16533,16537,16544,16548,16557,16561,16568,16572,16577,16594,16598,16644,16648,16657,16661,16665,16669,16678,16682,16686,16691,16695,16701,16707,16713,16717,16721,16726,16748,16752,16806,16810,16818,16822,16827,16832,16845,16852,16868,16879,16885,16908,16914,16937,16951,16971,16977,16988,17011,17033,17038,17044,17058,17071,17076,17090,17095,17101,17106,17120,17125,17130,17144,17156,17161,17174,17179,17184,17189,17202,17207],{"__ignoreMap":316},[398,16306,16307,16309],{"class":400,"line":401},[398,16308,2225],{"class":404},[398,16310,2228],{"class":513},[398,16312,16313,16315,16317,16319],{"class":400,"line":317},[398,16314,2233],{"class":404},[398,16316,2236],{"class":404},[398,16318,2240],{"class":2239},[398,16320,1566],{"class":408},[398,16322,16323,16325],{"class":400,"line":320},[398,16324,14971],{"class":404},[398,16326,16327],{"class":2239}," Cube\n",[398,16329,16330],{"class":400,"line":1470},[398,16331,1822],{"class":408},[398,16333,16334],{"class":400,"line":1476},[398,16335,14993],{"class":404},[398,16337,16338],{"class":400,"line":1490},[398,16339,16340],{"class":467},"    \u002F\u002F输入长宽高\n",[398,16342,16343,16345,16348,16350,16352,16355,16357,16359,16362,16364,16366,16369],{"class":400,"line":1496},[398,16344,15186],{"class":404},[398,16346,16347],{"class":2239}," setLwh",[398,16349,409],{"class":408},[398,16351,412],{"class":404},[398,16353,16354],{"class":5493}," l",[398,16356,780],{"class":408},[398,16358,412],{"class":404},[398,16360,16361],{"class":5493}," w",[398,16363,780],{"class":408},[398,16365,412],{"class":404},[398,16367,16368],{"class":5493}," h",[398,16370,415],{"class":408},[398,16372,16373],{"class":400,"line":1587},[398,16374,2306],{"class":408},[398,16376,16377,16380,16382],{"class":400,"line":1593},[398,16378,16379],{"class":408},"        m_L",[398,16381,454],{"class":404},[398,16383,16384],{"class":408},"l;\n",[398,16386,16387,16390,16392],{"class":400,"line":1605},[398,16388,16389],{"class":408},"        m_W",[398,16391,454],{"class":404},[398,16393,16394],{"class":408},"w;\n",[398,16396,16397,16400,16402],{"class":400,"line":1888},[398,16398,16399],{"class":408},"        m_H",[398,16401,454],{"class":404},[398,16403,16404],{"class":408},"h;\n",[398,16406,16407],{"class":400,"line":1893},[398,16408,2463],{"class":408},[398,16410,16411,16413,16416],{"class":400,"line":1899},[398,16412,2261],{"class":404},[398,16414,16415],{"class":2239}," mianji",[398,16417,2252],{"class":408},[398,16419,16420],{"class":400,"line":1904},[398,16421,2306],{"class":408},[398,16423,16424,16426,16428,16430,16433,16435,16438,16440,16443,16445,16448,16450,16453,16455],{"class":400,"line":1918},[398,16425,15029],{"class":404},[398,16427,15032],{"class":457},[398,16429,857],{"class":404},[398,16431,16432],{"class":408},"(m_L",[398,16434,857],{"class":404},[398,16436,16437],{"class":408},"m_W ",[398,16439,883],{"class":404},[398,16441,16442],{"class":408}," m_L",[398,16444,857],{"class":404},[398,16446,16447],{"class":408},"m_H ",[398,16449,883],{"class":404},[398,16451,16452],{"class":408}," m_W",[398,16454,857],{"class":404},[398,16456,16457],{"class":408},"m_H);\n",[398,16459,16460],{"class":400,"line":1923},[398,16461,2463],{"class":408},[398,16463,16464,16466,16469],{"class":400,"line":1929},[398,16465,2261],{"class":404},[398,16467,16468],{"class":2239}," tiji",[398,16470,2252],{"class":408},[398,16472,16473],{"class":400,"line":1950},[398,16474,2306],{"class":408},[398,16476,16477,16479,16481,16483,16486,16488],{"class":400,"line":1955},[398,16478,15029],{"class":404},[398,16480,16442],{"class":408},[398,16482,857],{"class":404},[398,16484,16485],{"class":408},"m_W",[398,16487,857],{"class":404},[398,16489,16490],{"class":408},"m_H;\n",[398,16492,16493],{"class":400,"line":1969},[398,16494,2463],{"class":408},[398,16496,16497],{"class":400,"line":1974},[398,16498,16499],{"class":467},"    \u002F\u002F获取长宽高\n",[398,16501,16502,16504,16507],{"class":400,"line":2003},[398,16503,2261],{"class":404},[398,16505,16506],{"class":2239}," getLength",[398,16508,2252],{"class":408},[398,16510,16511],{"class":400,"line":2008},[398,16512,2306],{"class":408},[398,16514,16515,16517],{"class":400,"line":2025},[398,16516,15029],{"class":404},[398,16518,16519],{"class":408}," m_L;\n",[398,16521,16522],{"class":400,"line":2030},[398,16523,2463],{"class":408},[398,16525,16526,16528,16531],{"class":400,"line":2035},[398,16527,2261],{"class":404},[398,16529,16530],{"class":2239}," getWidth",[398,16532,2252],{"class":408},[398,16534,16535],{"class":400,"line":2040},[398,16536,2306],{"class":408},[398,16538,16539,16541],{"class":400,"line":2054},[398,16540,15029],{"class":404},[398,16542,16543],{"class":408}," m_W;\n",[398,16545,16546],{"class":400,"line":2059},[398,16547,2463],{"class":408},[398,16549,16550,16552,16555],{"class":400,"line":2853},[398,16551,2261],{"class":404},[398,16553,16554],{"class":2239}," getHeight",[398,16556,2252],{"class":408},[398,16558,16559],{"class":400,"line":2867},[398,16560,2306],{"class":408},[398,16562,16563,16565],{"class":400,"line":2875},[398,16564,15029],{"class":404},[398,16566,16567],{"class":408}," m_H;\n",[398,16569,16570],{"class":400,"line":2880},[398,16571,2463],{"class":408},[398,16573,16574],{"class":400,"line":2886},[398,16575,16576],{"class":467},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[398,16578,16579,16582,16585,16587,16590,16592],{"class":400,"line":2892},[398,16580,16581],{"class":404},"    bool",[398,16583,16584],{"class":2239}," isEqual",[398,16586,409],{"class":408},[398,16588,16589],{"class":2239},"Cube",[398,16591,3125],{"class":5493},[398,16593,415],{"class":408},[398,16595,16596],{"class":400,"line":2897},[398,16597,2306],{"class":408},[398,16599,16600,16602,16605,16608,16610,16612,16615,16617,16620,16623,16625,16627,16630,16632,16634,16637,16639,16641],{"class":400,"line":8225},[398,16601,2773],{"class":404},[398,16603,16604],{"class":408}," (c.",[398,16606,16607],{"class":2239},"getLength",[398,16609,13327],{"class":408},[398,16611,3225],{"class":404},[398,16613,16614],{"class":408}," m_L ",[398,16616,1991],{"class":404},[398,16618,16619],{"class":408}," c.",[398,16621,16622],{"class":2239},"getWidth",[398,16624,13327],{"class":408},[398,16626,3225],{"class":404},[398,16628,16629],{"class":408}," m_W ",[398,16631,1991],{"class":404},[398,16633,16619],{"class":408},[398,16635,16636],{"class":2239},"getHeight",[398,16638,13327],{"class":408},[398,16640,3225],{"class":404},[398,16642,16643],{"class":408}," m_H)\n",[398,16645,16646],{"class":400,"line":8249},[398,16647,2786],{"class":408},[398,16649,16650,16652,16655],{"class":400,"line":8254},[398,16651,16009],{"class":404},[398,16653,16654],{"class":457}," true",[398,16656,1566],{"class":408},[398,16658,16659],{"class":400,"line":8260},[398,16660,2805],{"class":408},[398,16662,16663],{"class":400,"line":8287},[398,16664,2846],{"class":404},[398,16666,16667],{"class":400,"line":8292},[398,16668,2786],{"class":408},[398,16670,16671,16673,16676],{"class":400,"line":8298},[398,16672,16009],{"class":404},[398,16674,16675],{"class":457}," false",[398,16677,1566],{"class":408},[398,16679,16680],{"class":400,"line":8310},[398,16681,2805],{"class":408},[398,16683,16684],{"class":400,"line":8322},[398,16685,2463],{"class":408},[398,16687,16688],{"class":400,"line":8334},[398,16689,16690],{"class":467},"    \u002F\u002F私有属性\n",[398,16692,16693],{"class":400,"line":9993},[398,16694,15499],{"class":404},[398,16696,16697,16699],{"class":400,"line":10018},[398,16698,2261],{"class":404},[398,16700,16519],{"class":408},[398,16702,16703,16705],{"class":400,"line":10041},[398,16704,2261],{"class":404},[398,16706,16543],{"class":408},[398,16708,16709,16711],{"class":400,"line":10065},[398,16710,2261],{"class":404},[398,16712,16567],{"class":408},[398,16714,16715],{"class":400,"line":10070},[398,16716,2676],{"emptyLinePlaceholder":328},[398,16718,16719],{"class":400,"line":10075},[398,16720,4271],{"class":408},[398,16722,16723],{"class":400,"line":10080},[398,16724,16725],{"class":467},"\u002F\u002F全局函数判断两个立方体是否相等\n",[398,16727,16728,16730,16732,16734,16736,16739,16741,16743,16746],{"class":400,"line":10089},[398,16729,1630],{"class":404},[398,16731,16584],{"class":2239},[398,16733,409],{"class":408},[398,16735,16589],{"class":2239},[398,16737,16738],{"class":5493}," c1",[398,16740,780],{"class":408},[398,16742,16589],{"class":2239},[398,16744,16745],{"class":5493}," c2",[398,16747,415],{"class":408},[398,16749,16750],{"class":400,"line":10094},[398,16751,1822],{"class":408},[398,16753,16754,16756,16759,16761,16763,16765,16768,16770,16773,16775,16777,16779,16781,16783,16785,16787,16789,16791,16793,16795,16797,16799,16801,16803],{"class":400,"line":10100},[398,16755,4366],{"class":404},[398,16757,16758],{"class":408}," (c1.",[398,16760,16607],{"class":2239},[398,16762,13327],{"class":408},[398,16764,3225],{"class":404},[398,16766,16767],{"class":408}," c2.",[398,16769,16607],{"class":2239},[398,16771,16772],{"class":408},"()) ",[398,16774,1991],{"class":404},[398,16776,16758],{"class":408},[398,16778,16622],{"class":2239},[398,16780,13327],{"class":408},[398,16782,3225],{"class":404},[398,16784,16767],{"class":408},[398,16786,16622],{"class":2239},[398,16788,16772],{"class":408},[398,16790,1991],{"class":404},[398,16792,16758],{"class":408},[398,16794,16636],{"class":2239},[398,16796,13327],{"class":408},[398,16798,3225],{"class":404},[398,16800,16767],{"class":408},[398,16802,16636],{"class":2239},[398,16804,16805],{"class":408},"());\n",[398,16807,16808],{"class":400,"line":10121},[398,16809,1841],{"class":408},[398,16811,16812,16814,16816],{"class":400,"line":10127},[398,16813,412],{"class":404},[398,16815,2249],{"class":2239},[398,16817,2252],{"class":408},[398,16819,16820],{"class":400,"line":10141},[398,16821,1822],{"class":408},[398,16823,16824],{"class":400,"line":10147},[398,16825,16826],{"class":408},"    Cube c1;\n",[398,16828,16829],{"class":400,"line":10174},[398,16830,16831],{"class":467},"    \u002F\u002F输入立方体的长宽高\n",[398,16833,16834,16836,16838,16841,16843],{"class":400,"line":10183},[398,16835,1827],{"class":408},[398,16837,1445],{"class":404},[398,16839,16840],{"class":513},"\"请输入第一个立方体的长、宽、高：\"",[398,16842,1445],{"class":404},[398,16844,1467],{"class":408},[398,16846,16847,16849],{"class":400,"line":10189},[398,16848,2261],{"class":404},[398,16850,16851],{"class":408}," l,w,h,l1,w1,h1;\n",[398,16853,16854,16856,16858,16860,16862,16864,16866],{"class":400,"line":10197},[398,16855,2288],{"class":408},[398,16857,1705],{"class":404},[398,16859,920],{"class":408},[398,16861,1705],{"class":404},[398,16863,1197],{"class":408},[398,16865,1705],{"class":404},[398,16867,16404],{"class":408},[398,16869,16870,16873,16876],{"class":400,"line":10202},[398,16871,16872],{"class":408},"    c1.",[398,16874,16875],{"class":2239},"setLwh",[398,16877,16878],{"class":408},"(l,w,h);\n",[398,16880,16882],{"class":400,"line":16881},66,[398,16883,16884],{"class":467},"    \u002F\u002F面积\n",[398,16886,16888,16890,16892,16895,16897,16899,16902,16904,16906],{"class":400,"line":16887},67,[398,16889,1827],{"class":408},[398,16891,1445],{"class":404},[398,16893,16894],{"class":513},"\"立方体的表面积为：\"",[398,16896,1445],{"class":404},[398,16898,15107],{"class":408},[398,16900,16901],{"class":2239},"mianji",[398,16903,2703],{"class":408},[398,16905,1445],{"class":404},[398,16907,1467],{"class":408},[398,16909,16911],{"class":400,"line":16910},68,[398,16912,16913],{"class":467},"    \u002F\u002F体积\n",[398,16915,16917,16919,16921,16924,16926,16928,16931,16933,16935],{"class":400,"line":16916},69,[398,16918,1827],{"class":408},[398,16920,1445],{"class":404},[398,16922,16923],{"class":513},"\"立方体的体积为：\"",[398,16925,1445],{"class":404},[398,16927,15107],{"class":408},[398,16929,16930],{"class":2239},"tiji",[398,16932,2703],{"class":408},[398,16934,1445],{"class":404},[398,16936,1467],{"class":408},[398,16938,16940,16942,16944,16947,16949],{"class":400,"line":16939},70,[398,16941,1827],{"class":408},[398,16943,1445],{"class":404},[398,16945,16946],{"class":513},"\"请输入第二个立方体的长、宽、高：\"",[398,16948,1445],{"class":404},[398,16950,1467],{"class":408},[398,16952,16954,16956,16958,16961,16963,16966,16968],{"class":400,"line":16953},71,[398,16955,2288],{"class":408},[398,16957,1705],{"class":404},[398,16959,16960],{"class":408},"l1",[398,16962,1705],{"class":404},[398,16964,16965],{"class":408},"w1",[398,16967,1705],{"class":404},[398,16969,16970],{"class":408},"h1;\n",[398,16972,16974],{"class":400,"line":16973},72,[398,16975,16976],{"class":408},"    Cube c2;\n",[398,16978,16980,16983,16985],{"class":400,"line":16979},73,[398,16981,16982],{"class":408},"    c2.",[398,16984,16875],{"class":2239},[398,16986,16987],{"class":408},"(l1,w1,h1);\n",[398,16989,16991,16993,16995,16998,17000,17003,17005,17007,17009],{"class":400,"line":16990},74,[398,16992,1827],{"class":408},[398,16994,1445],{"class":404},[398,16996,16997],{"class":513},"\"第二个立方体的表面积为：\"",[398,16999,1445],{"class":404},[398,17001,17002],{"class":408},"c2.",[398,17004,16901],{"class":2239},[398,17006,2703],{"class":408},[398,17008,1445],{"class":404},[398,17010,1467],{"class":408},[398,17012,17014,17016,17018,17021,17023,17025,17027,17029,17031],{"class":400,"line":17013},75,[398,17015,1827],{"class":408},[398,17017,1445],{"class":404},[398,17019,17020],{"class":513},"\"第二个立方体的体积为：\"",[398,17022,1445],{"class":404},[398,17024,17002],{"class":408},[398,17026,16930],{"class":2239},[398,17028,2703],{"class":408},[398,17030,1445],{"class":404},[398,17032,1467],{"class":408},[398,17034,17036],{"class":400,"line":17035},76,[398,17037,2676],{"emptyLinePlaceholder":328},[398,17039,17041],{"class":400,"line":17040},77,[398,17042,17043],{"class":467},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[398,17045,17047,17049,17051,17054,17056],{"class":400,"line":17046},78,[398,17048,1827],{"class":408},[398,17050,1445],{"class":404},[398,17052,17053],{"class":513},"\"内部函数判断结果：\"",[398,17055,1445],{"class":404},[398,17057,1467],{"class":408},[398,17059,17061,17063,17065,17068],{"class":400,"line":17060},79,[398,17062,3377],{"class":404},[398,17064,16758],{"class":408},[398,17066,17067],{"class":2239},"isEqual",[398,17069,17070],{"class":408},"(c2))\n",[398,17072,17074],{"class":400,"line":17073},80,[398,17075,2306],{"class":408},[398,17077,17079,17081,17083,17086,17088],{"class":400,"line":17078},81,[398,17080,3727],{"class":408},[398,17082,1445],{"class":404},[398,17084,17085],{"class":513},"\"两个立方体相等\"",[398,17087,1445],{"class":404},[398,17089,1467],{"class":408},[398,17091,17093],{"class":400,"line":17092},82,[398,17094,2463],{"class":408},[398,17096,17098],{"class":400,"line":17097},83,[398,17099,17100],{"class":404},"    else\n",[398,17102,17104],{"class":400,"line":17103},84,[398,17105,2306],{"class":408},[398,17107,17109,17111,17113,17116,17118],{"class":400,"line":17108},85,[398,17110,3727],{"class":408},[398,17112,1445],{"class":404},[398,17114,17115],{"class":513},"\"两个立方体不相等\"",[398,17117,1445],{"class":404},[398,17119,1467],{"class":408},[398,17121,17123],{"class":400,"line":17122},86,[398,17124,2463],{"class":408},[398,17126,17128],{"class":400,"line":17127},87,[398,17129,2676],{"emptyLinePlaceholder":328},[398,17131,17133,17135,17137,17140,17142],{"class":400,"line":17132},88,[398,17134,1827],{"class":408},[398,17136,1445],{"class":404},[398,17138,17139],{"class":513},"\"全局函数判断结果：\"",[398,17141,1445],{"class":404},[398,17143,1467],{"class":408},[398,17145,17147,17149,17151,17153],{"class":400,"line":17146},89,[398,17148,3377],{"class":404},[398,17150,1934],{"class":408},[398,17152,17067],{"class":2239},[398,17154,17155],{"class":408},"(c1, c2))\n",[398,17157,17159],{"class":400,"line":17158},90,[398,17160,2306],{"class":408},[398,17162,17164,17166,17168,17170,17172],{"class":400,"line":17163},91,[398,17165,3727],{"class":408},[398,17167,1445],{"class":404},[398,17169,17085],{"class":513},[398,17171,1445],{"class":404},[398,17173,1467],{"class":408},[398,17175,17177],{"class":400,"line":17176},92,[398,17178,2463],{"class":408},[398,17180,17182],{"class":400,"line":17181},93,[398,17183,17100],{"class":404},[398,17185,17187],{"class":400,"line":17186},94,[398,17188,2306],{"class":408},[398,17190,17192,17194,17196,17198,17200],{"class":400,"line":17191},95,[398,17193,3727],{"class":408},[398,17195,1445],{"class":404},[398,17197,17115],{"class":513},[398,17199,1445],{"class":404},[398,17201,1467],{"class":408},[398,17203,17205],{"class":400,"line":17204},96,[398,17206,2463],{"class":408},[398,17208,17210],{"class":400,"line":17209},97,[398,17211,1841],{"class":408},[38,17213,17214],{"start":317},[41,17215,17216],{},[23,17217,17218],{},"练习案例2：点和圆的关系",[67,17220,17221],{},[41,17222,17223],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[389,17225,17227],{"className":391,"code":17226,"language":393,"meta":316,"style":316},"#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",[395,17228,17229,17235,17245,17252,17259,17263,17267,17272,17306,17311,17327,17341,17345,17349,17356,17363,17367,17373,17377,17381,17385,17407,17430,17435,17449,17464,17468,17472,17478,17483,17488,17492,17518,17522,17552,17580,17608,17625,17629,17642,17646,17650,17654,17667,17671,17675,17683,17687,17691,17695,17700,17704,17715,17722,17731,17741,17752,17759,17772,17783,17793,17804,17811,17825,17830,17840,17848],{"__ignoreMap":316},[398,17230,17231,17233],{"class":400,"line":401},[398,17232,2225],{"class":404},[398,17234,2228],{"class":513},[398,17236,17237,17239,17241,17243],{"class":400,"line":317},[398,17238,2233],{"class":404},[398,17240,2236],{"class":404},[398,17242,2240],{"class":2239},[398,17244,1566],{"class":408},[398,17246,17247,17249],{"class":400,"line":320},[398,17248,2225],{"class":404},[398,17250,17251],{"class":513},"\u003Ccmath>\n",[398,17253,17254,17256],{"class":400,"line":1470},[398,17255,14971],{"class":404},[398,17257,17258],{"class":2239}," Point\n",[398,17260,17261],{"class":400,"line":1476},[398,17262,1822],{"class":408},[398,17264,17265],{"class":400,"line":1490},[398,17266,14993],{"class":404},[398,17268,17269],{"class":400,"line":1496},[398,17270,17271],{"class":467},"    \u002F\u002F赋值\n",[398,17273,17274,17276,17279,17281,17283,17286,17288,17290,17293,17296,17298,17301,17303],{"class":400,"line":1587},[398,17275,15186],{"class":404},[398,17277,17278],{"class":2239}," setPoint",[398,17280,409],{"class":408},[398,17282,14314],{"class":404},[398,17284,17285],{"class":5493}," x",[398,17287,12712],{"class":408},[398,17289,14314],{"class":404},[398,17291,17292],{"class":5493}," y",[398,17294,17295],{"class":408},") { m_x ",[398,17297,454],{"class":404},[398,17299,17300],{"class":408}," x; m_y ",[398,17302,454],{"class":404},[398,17304,17305],{"class":408}," y; }\n",[398,17307,17308],{"class":400,"line":1593},[398,17309,17310],{"class":467},"    \u002F\u002F获取坐标\n",[398,17312,17313,17315,17318,17321,17324],{"class":400,"line":1605},[398,17314,15015],{"class":404},[398,17316,17317],{"class":2239}," getX",[398,17319,17320],{"class":408},"() { ",[398,17322,17323],{"class":404},"return",[398,17325,17326],{"class":408}," m_x; }\n",[398,17328,17329,17331,17334,17336,17338],{"class":400,"line":1888},[398,17330,15015],{"class":404},[398,17332,17333],{"class":2239}," getY",[398,17335,17320],{"class":408},[398,17337,17323],{"class":404},[398,17339,17340],{"class":408}," m_y; }\n",[398,17342,17343],{"class":400,"line":1893},[398,17344,2676],{"emptyLinePlaceholder":328},[398,17346,17347],{"class":400,"line":1899},[398,17348,15499],{"class":404},[398,17350,17351,17353],{"class":400,"line":1904},[398,17352,15015],{"class":404},[398,17354,17355],{"class":408}," m_x;\n",[398,17357,17358,17360],{"class":400,"line":1918},[398,17359,15015],{"class":404},[398,17361,17362],{"class":408}," m_y;\n",[398,17364,17365],{"class":400,"line":1923},[398,17366,4271],{"class":408},[398,17368,17369,17371],{"class":400,"line":1929},[398,17370,14971],{"class":404},[398,17372,14974],{"class":2239},[398,17374,17375],{"class":400,"line":1950},[398,17376,1822],{"class":408},[398,17378,17379],{"class":400,"line":1955},[398,17380,14993],{"class":404},[398,17382,17383],{"class":400,"line":1969},[398,17384,17271],{"class":467},[398,17386,17387,17389,17392,17394,17396,17399,17402,17404],{"class":400,"line":1974},[398,17388,15186],{"class":404},[398,17390,17391],{"class":2239}," setRadius",[398,17393,409],{"class":408},[398,17395,14314],{"class":404},[398,17397,17398],{"class":5493}," r",[398,17400,17401],{"class":408},") { m_r ",[398,17403,454],{"class":404},[398,17405,17406],{"class":408}," r; }\n",[398,17408,17409,17411,17414,17416,17419,17422,17425,17427],{"class":400,"line":2003},[398,17410,15186],{"class":404},[398,17412,17413],{"class":2239}," setCenter",[398,17415,409],{"class":408},[398,17417,17418],{"class":2239},"Point",[398,17420,17421],{"class":5493}," center",[398,17423,17424],{"class":408},") { m_center ",[398,17426,454],{"class":404},[398,17428,17429],{"class":408}," center; }\n",[398,17431,17432],{"class":400,"line":2008},[398,17433,17434],{"class":467},"    \u002F\u002F获取属性\n",[398,17436,17437,17439,17442,17444,17446],{"class":400,"line":2025},[398,17438,15015],{"class":404},[398,17440,17441],{"class":2239}," getRadius",[398,17443,17320],{"class":408},[398,17445,17323],{"class":404},[398,17447,17448],{"class":408}," m_r; }\n",[398,17450,17451,17454,17457,17459,17461],{"class":400,"line":2030},[398,17452,17453],{"class":2239},"    Point",[398,17455,17456],{"class":2239}," getCenter",[398,17458,17320],{"class":408},[398,17460,17323],{"class":404},[398,17462,17463],{"class":408}," m_center; }\n",[398,17465,17466],{"class":400,"line":2035},[398,17467,2676],{"emptyLinePlaceholder":328},[398,17469,17470],{"class":400,"line":2040},[398,17471,15499],{"class":404},[398,17473,17474,17476],{"class":400,"line":2054},[398,17475,15015],{"class":404},[398,17477,15005],{"class":408},[398,17479,17480],{"class":400,"line":2059},[398,17481,17482],{"class":467},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[398,17484,17485],{"class":400,"line":2853},[398,17486,17487],{"class":408},"    Point m_center;\n",[398,17489,17490],{"class":400,"line":2867},[398,17491,4271],{"class":408},[398,17493,17494,17496,17499,17501,17504,17506,17508,17510,17512,17514,17516],{"class":400,"line":2875},[398,17495,5641],{"class":404},[398,17497,17498],{"class":2239}," isInCircle",[398,17500,409],{"class":408},[398,17502,17503],{"class":2239},"Circle",[398,17505,10861],{"class":404},[398,17507,690],{"class":5493},[398,17509,780],{"class":408},[398,17511,17418],{"class":2239},[398,17513,10861],{"class":404},[398,17515,19],{"class":5493},[398,17517,415],{"class":408},[398,17519,17520],{"class":400,"line":2880},[398,17521,1822],{"class":408},[398,17523,17524,17526,17529,17531,17533,17536,17539,17542,17544,17546,17548,17550],{"class":400,"line":2886},[398,17525,15015],{"class":404},[398,17527,17528],{"class":408}," dx ",[398,17530,454],{"class":404},[398,17532,16619],{"class":408},[398,17534,17535],{"class":2239},"getCenter",[398,17537,17538],{"class":408},"().",[398,17540,17541],{"class":2239},"getX",[398,17543,13327],{"class":408},[398,17545,934],{"class":404},[398,17547,16165],{"class":408},[398,17549,17541],{"class":2239},[398,17551,5913],{"class":408},[398,17553,17554,17556,17559,17561,17563,17565,17567,17570,17572,17574,17576,17578],{"class":400,"line":2892},[398,17555,15015],{"class":404},[398,17557,17558],{"class":408}," dy ",[398,17560,454],{"class":404},[398,17562,16619],{"class":408},[398,17564,17535],{"class":2239},[398,17566,17538],{"class":408},[398,17568,17569],{"class":2239},"getY",[398,17571,13327],{"class":408},[398,17573,934],{"class":404},[398,17575,16165],{"class":408},[398,17577,17569],{"class":2239},[398,17579,5913],{"class":408},[398,17581,17582,17584,17587,17589,17592,17595,17597,17599,17601,17603,17605],{"class":400,"line":2897},[398,17583,15015],{"class":404},[398,17585,17586],{"class":408}," distance ",[398,17588,454],{"class":404},[398,17590,17591],{"class":2239}," sqrt",[398,17593,17594],{"class":408},"(dx ",[398,17596,857],{"class":404},[398,17598,17528],{"class":408},[398,17600,883],{"class":404},[398,17602,17558],{"class":408},[398,17604,857],{"class":404},[398,17606,17607],{"class":408}," dy);\n",[398,17609,17610,17612,17615,17617,17619,17622],{"class":400,"line":8225},[398,17611,3377],{"class":404},[398,17613,17614],{"class":408}," (distance ",[398,17616,1312],{"class":404},[398,17618,16619],{"class":408},[398,17620,17621],{"class":2239},"getRadius",[398,17623,17624],{"class":408},"())\n",[398,17626,17627],{"class":400,"line":8249},[398,17628,2306],{"class":408},[398,17630,17631,17633,17635,17638,17640],{"class":400,"line":8254},[398,17632,9946],{"class":408},[398,17634,1445],{"class":404},[398,17636,17637],{"class":513}," \"点在圆内\"",[398,17639,1720],{"class":404},[398,17641,9117],{"class":408},[398,17643,17644],{"class":400,"line":8260},[398,17645,2463],{"class":408},[398,17647,17648],{"class":400,"line":8287},[398,17649,17100],{"class":404},[398,17651,17652],{"class":400,"line":8292},[398,17653,2306],{"class":408},[398,17655,17656,17658,17660,17663,17665],{"class":400,"line":8298},[398,17657,9946],{"class":408},[398,17659,1445],{"class":404},[398,17661,17662],{"class":513}," \"点在圆外\"",[398,17664,1720],{"class":404},[398,17666,9117],{"class":408},[398,17668,17669],{"class":400,"line":8310},[398,17670,2463],{"class":408},[398,17672,17673],{"class":400,"line":8322},[398,17674,1841],{"class":408},[398,17676,17677,17679,17681],{"class":400,"line":8334},[398,17678,412],{"class":404},[398,17680,2249],{"class":2239},[398,17682,2252],{"class":408},[398,17684,17685],{"class":400,"line":9993},[398,17686,1822],{"class":408},[398,17688,17689],{"class":400,"line":10018},[398,17690,15330],{"class":467},[398,17692,17693],{"class":400,"line":10041},[398,17694,15077],{"class":408},[398,17696,17697],{"class":400,"line":10065},[398,17698,17699],{"class":408},"    Point p1;\n",[398,17701,17702],{"class":400,"line":10070},[398,17703,17271],{"class":467},[398,17705,17706,17708,17710,17713],{"class":400,"line":10075},[398,17707,1827],{"class":408},[398,17709,1445],{"class":404},[398,17711,17712],{"class":513},"\"请输入圆的半径：\"",[398,17714,1566],{"class":408},[398,17716,17717,17719],{"class":400,"line":10080},[398,17718,15015],{"class":404},[398,17720,17721],{"class":408}," r;\n",[398,17723,17724,17726,17728],{"class":400,"line":10089},[398,17725,2288],{"class":408},[398,17727,1705],{"class":404},[398,17729,17730],{"class":408},"r;\n",[398,17732,17733,17735,17738],{"class":400,"line":10094},[398,17734,16872],{"class":408},[398,17736,17737],{"class":2239},"setRadius",[398,17739,17740],{"class":408},"(r);\n",[398,17742,17743,17745,17747,17750],{"class":400,"line":10100},[398,17744,1827],{"class":408},[398,17746,1445],{"class":404},[398,17748,17749],{"class":513},"\"请输入圆心坐标：\"",[398,17751,1566],{"class":408},[398,17753,17754,17756],{"class":400,"line":10121},[398,17755,15015],{"class":404},[398,17757,17758],{"class":408}," x, y;\n",[398,17760,17761,17763,17765,17767,17769],{"class":400,"line":10127},[398,17762,2288],{"class":408},[398,17764,1705],{"class":404},[398,17766,1222],{"class":408},[398,17768,1705],{"class":404},[398,17770,17771],{"class":408},"y;\n",[398,17773,17774,17777,17780],{"class":400,"line":10141},[398,17775,17776],{"class":408},"    p1.",[398,17778,17779],{"class":2239},"setPoint",[398,17781,17782],{"class":408},"(x, y);\n",[398,17784,17785,17787,17790],{"class":400,"line":10147},[398,17786,16872],{"class":408},[398,17788,17789],{"class":2239},"setCenter",[398,17791,17792],{"class":408},"(p1);\n",[398,17794,17795,17797,17799,17802],{"class":400,"line":10174},[398,17796,1827],{"class":408},[398,17798,1445],{"class":404},[398,17800,17801],{"class":513},"\"请输入测试点坐标：\"",[398,17803,1566],{"class":408},[398,17805,17806,17808],{"class":400,"line":10183},[398,17807,15015],{"class":404},[398,17809,17810],{"class":408}," x1, y1;\n",[398,17812,17813,17815,17817,17820,17822],{"class":400,"line":10189},[398,17814,2288],{"class":408},[398,17816,1705],{"class":404},[398,17818,17819],{"class":408},"x1",[398,17821,1705],{"class":404},[398,17823,17824],{"class":408},"y1;\n",[398,17826,17827],{"class":400,"line":10197},[398,17828,17829],{"class":408},"    Point p2;\n",[398,17831,17832,17835,17837],{"class":400,"line":10202},[398,17833,17834],{"class":408},"    p2.",[398,17836,17779],{"class":2239},[398,17838,17839],{"class":408},"(x1, y1);\n",[398,17841,17842,17845],{"class":400,"line":16881},[398,17843,17844],{"class":2239},"    isInCircle",[398,17846,17847],{"class":408},"(c1, p2);\n",[398,17849,17850],{"class":400,"line":16887},[398,17851,1841],{"class":408},[19,17853,17854],{},"在类中可以让另一个类作为本来的成员",[19,17856,17857],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,17859,17860],{},"创建point.h",[389,17862,17864],{"className":391,"code":17863,"language":393,"meta":316,"style":316},"#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",[395,17865,17866,17877,17883,17893,17899,17903,17908,17912,17916,17936,17940,17948,17956,17960,17964,17970,17976],{"__ignoreMap":316},[398,17867,17868,17871,17874],{"class":400,"line":401},[398,17869,17870],{"class":404},"#pragma",[398,17872,17873],{"class":2239}," once",[398,17875,17876],{"class":467}," \u002F\u002F防止头文件重复包含\n",[398,17878,17879,17881],{"class":400,"line":317},[398,17880,2225],{"class":404},[398,17882,2228],{"class":513},[398,17884,17885,17887,17889,17891],{"class":400,"line":320},[398,17886,2233],{"class":404},[398,17888,2236],{"class":404},[398,17890,2240],{"class":2239},[398,17892,1566],{"class":408},[398,17894,17895,17897],{"class":400,"line":1470},[398,17896,14971],{"class":404},[398,17898,17258],{"class":2239},[398,17900,17901],{"class":400,"line":1476},[398,17902,1822],{"class":408},[398,17904,17905],{"class":400,"line":1490},[398,17906,17907],{"class":467},"\u002F\u002F做好声明与变量定义就可以\n",[398,17909,17910],{"class":400,"line":1496},[398,17911,14993],{"class":404},[398,17913,17914],{"class":400,"line":1587},[398,17915,17271],{"class":467},[398,17917,17918,17920,17922,17924,17926,17928,17930,17932,17934],{"class":400,"line":1593},[398,17919,15186],{"class":404},[398,17921,17278],{"class":2239},[398,17923,409],{"class":408},[398,17925,14314],{"class":404},[398,17927,17285],{"class":5493},[398,17929,12712],{"class":408},[398,17931,14314],{"class":404},[398,17933,17292],{"class":5493},[398,17935,2995],{"class":408},[398,17937,17938],{"class":400,"line":1605},[398,17939,17310],{"class":467},[398,17941,17942,17944,17946],{"class":400,"line":1888},[398,17943,15015],{"class":404},[398,17945,17317],{"class":2239},[398,17947,5913],{"class":408},[398,17949,17950,17952,17954],{"class":400,"line":1893},[398,17951,15015],{"class":404},[398,17953,17333],{"class":2239},[398,17955,5913],{"class":408},[398,17957,17958],{"class":400,"line":1899},[398,17959,2676],{"emptyLinePlaceholder":328},[398,17961,17962],{"class":400,"line":1904},[398,17963,15499],{"class":404},[398,17965,17966,17968],{"class":400,"line":1918},[398,17967,15015],{"class":404},[398,17969,17355],{"class":408},[398,17971,17972,17974],{"class":400,"line":1923},[398,17973,15015],{"class":404},[398,17975,17362],{"class":408},[398,17977,17978],{"class":400,"line":1929},[398,17979,4271],{"class":408},[19,17981,17982],{},"创建point.cpp",[389,17984,17986],{"className":391,"code":17985,"language":393,"meta":316,"style":316},"#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",[395,17987,17988,17995,18000,18034,18038,18054],{"__ignoreMap":316},[398,17989,17990,17992],{"class":400,"line":401},[398,17991,2225],{"class":404},[398,17993,17994],{"class":513},"\u003Cpoint.h>\n",[398,17996,17997],{"class":400,"line":317},[398,17998,17999],{"class":467},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[398,18001,18002,18004,18007,18010,18012,18014,18016,18018,18020,18022,18024,18026,18028,18030,18032],{"class":400,"line":320},[398,18003,15186],{"class":404},[398,18005,18006],{"class":2239}," Point",[398,18008,18009],{"class":408},"::",[398,18011,17779],{"class":2239},[398,18013,409],{"class":408},[398,18015,14314],{"class":404},[398,18017,17285],{"class":5493},[398,18019,12712],{"class":408},[398,18021,14314],{"class":404},[398,18023,17292],{"class":5493},[398,18025,17295],{"class":408},[398,18027,454],{"class":404},[398,18029,17300],{"class":408},[398,18031,454],{"class":404},[398,18033,17305],{"class":408},[398,18035,18036],{"class":400,"line":1470},[398,18037,17310],{"class":467},[398,18039,18040,18042,18044,18046,18048,18050,18052],{"class":400,"line":1476},[398,18041,15015],{"class":404},[398,18043,18006],{"class":2239},[398,18045,18009],{"class":408},[398,18047,17541],{"class":2239},[398,18049,17320],{"class":408},[398,18051,17323],{"class":404},[398,18053,17326],{"class":408},[398,18055,18056,18058,18060,18062,18064,18066,18068],{"class":400,"line":1490},[398,18057,15015],{"class":404},[398,18059,18006],{"class":2239},[398,18061,18009],{"class":408},[398,18063,17569],{"class":2239},[398,18065,17320],{"class":408},[398,18067,17323],{"class":404},[398,18069,17340],{"class":408},[19,18071,18072],{},"创建circle.h",[389,18074,18076],{"className":391,"code":18075,"language":393,"meta":316,"style":316},"#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",[395,18077,18078,18085,18091,18101,18107,18113,18117,18121,18125,18139,18153,18157,18165,18173,18177,18181,18187,18191,18195],{"__ignoreMap":316},[398,18079,18080,18082],{"class":400,"line":401},[398,18081,17870],{"class":404},[398,18083,18084],{"class":2239}," once\n",[398,18086,18087,18089],{"class":400,"line":317},[398,18088,2225],{"class":404},[398,18090,2228],{"class":513},[398,18092,18093,18095,18097,18099],{"class":400,"line":320},[398,18094,2233],{"class":404},[398,18096,2236],{"class":404},[398,18098,2240],{"class":2239},[398,18100,1566],{"class":408},[398,18102,18103,18105],{"class":400,"line":1470},[398,18104,2225],{"class":404},[398,18106,17994],{"class":513},[398,18108,18109,18111],{"class":400,"line":1476},[398,18110,14971],{"class":404},[398,18112,14974],{"class":2239},[398,18114,18115],{"class":400,"line":1490},[398,18116,1822],{"class":408},[398,18118,18119],{"class":400,"line":1496},[398,18120,14993],{"class":404},[398,18122,18123],{"class":400,"line":1587},[398,18124,17271],{"class":467},[398,18126,18127,18129,18131,18133,18135,18137],{"class":400,"line":1593},[398,18128,15186],{"class":404},[398,18130,17391],{"class":2239},[398,18132,409],{"class":408},[398,18134,14314],{"class":404},[398,18136,17398],{"class":5493},[398,18138,2995],{"class":408},[398,18140,18141,18143,18145,18147,18149,18151],{"class":400,"line":1605},[398,18142,15186],{"class":404},[398,18144,17413],{"class":2239},[398,18146,409],{"class":408},[398,18148,17418],{"class":2239},[398,18150,17421],{"class":5493},[398,18152,2995],{"class":408},[398,18154,18155],{"class":400,"line":1888},[398,18156,17434],{"class":467},[398,18158,18159,18161,18163],{"class":400,"line":1893},[398,18160,15015],{"class":404},[398,18162,17441],{"class":2239},[398,18164,5913],{"class":408},[398,18166,18167,18169,18171],{"class":400,"line":1899},[398,18168,17453],{"class":2239},[398,18170,17456],{"class":2239},[398,18172,5913],{"class":408},[398,18174,18175],{"class":400,"line":1904},[398,18176,2676],{"emptyLinePlaceholder":328},[398,18178,18179],{"class":400,"line":1918},[398,18180,15499],{"class":404},[398,18182,18183,18185],{"class":400,"line":1923},[398,18184,15015],{"class":404},[398,18186,15005],{"class":408},[398,18188,18189],{"class":400,"line":1929},[398,18190,17482],{"class":467},[398,18192,18193],{"class":400,"line":1950},[398,18194,17487],{"class":408},[398,18196,18197],{"class":400,"line":1955},[398,18198,4271],{"class":408},[19,18200,18201],{},"创建circle.cpp",[389,18203,18205],{"className":391,"code":18204,"language":393,"meta":316,"style":316},"#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",[395,18206,18207,18214,18237,18259,18264,18280],{"__ignoreMap":316},[398,18208,18209,18211],{"class":400,"line":401},[398,18210,2225],{"class":404},[398,18212,18213],{"class":513},"\u003Ccircle.h>\n",[398,18215,18216,18218,18221,18223,18225,18227,18229,18231,18233,18235],{"class":400,"line":317},[398,18217,5641],{"class":404},[398,18219,18220],{"class":2239}," Circle",[398,18222,18009],{"class":408},[398,18224,17737],{"class":2239},[398,18226,409],{"class":408},[398,18228,14314],{"class":404},[398,18230,17398],{"class":5493},[398,18232,17401],{"class":408},[398,18234,454],{"class":404},[398,18236,17406],{"class":408},[398,18238,18239,18241,18243,18245,18247,18249,18251,18253,18255,18257],{"class":400,"line":320},[398,18240,5641],{"class":404},[398,18242,18220],{"class":2239},[398,18244,18009],{"class":408},[398,18246,17789],{"class":2239},[398,18248,409],{"class":408},[398,18250,17418],{"class":2239},[398,18252,17421],{"class":5493},[398,18254,17424],{"class":408},[398,18256,454],{"class":404},[398,18258,17429],{"class":408},[398,18260,18261],{"class":400,"line":1470},[398,18262,18263],{"class":467},"\u002F\u002F获取属性\n",[398,18265,18266,18268,18270,18272,18274,18276,18278],{"class":400,"line":1476},[398,18267,14314],{"class":404},[398,18269,18220],{"class":2239},[398,18271,18009],{"class":408},[398,18273,17621],{"class":2239},[398,18275,17320],{"class":408},[398,18277,17323],{"class":404},[398,18279,17448],{"class":408},[398,18281,18282,18284,18286,18288,18290,18292,18294],{"class":400,"line":1490},[398,18283,17418],{"class":2239},[398,18285,18220],{"class":2239},[398,18287,18009],{"class":408},[398,18289,17535],{"class":2239},[398,18291,17320],{"class":408},[398,18293,17323],{"class":404},[398,18295,17463],{"class":408},[19,18297,18298],{},"使用封装的类",[389,18300,18302],{"className":391,"code":18301,"language":393,"meta":316,"style":316},"#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",[395,18303,18304,18310,18320,18326,18332,18356,18360,18386,18412,18436,18450,18454,18466,18470,18474,18478,18490,18494,18498,18506,18510,18514,18518,18522,18526,18536,18542,18550,18558,18568,18574,18586,18594,18602,18612,18618,18630,18634,18642,18648],{"__ignoreMap":316},[398,18305,18306,18308],{"class":400,"line":401},[398,18307,2225],{"class":404},[398,18309,2228],{"class":513},[398,18311,18312,18314,18316,18318],{"class":400,"line":317},[398,18313,2233],{"class":404},[398,18315,2236],{"class":404},[398,18317,2240],{"class":2239},[398,18319,1566],{"class":408},[398,18321,18322,18324],{"class":400,"line":320},[398,18323,2225],{"class":404},[398,18325,18213],{"class":513},[398,18327,18328,18330],{"class":400,"line":1470},[398,18329,2225],{"class":404},[398,18331,17994],{"class":513},[398,18333,18334,18336,18338,18340,18342,18344,18346,18348,18350,18352,18354],{"class":400,"line":1476},[398,18335,5641],{"class":404},[398,18337,17498],{"class":2239},[398,18339,409],{"class":408},[398,18341,17503],{"class":2239},[398,18343,10861],{"class":404},[398,18345,690],{"class":5493},[398,18347,780],{"class":408},[398,18349,17418],{"class":2239},[398,18351,10861],{"class":404},[398,18353,19],{"class":5493},[398,18355,415],{"class":408},[398,18357,18358],{"class":400,"line":1490},[398,18359,1822],{"class":408},[398,18361,18362,18364,18366,18368,18370,18372,18374,18376,18378,18380,18382,18384],{"class":400,"line":1496},[398,18363,15015],{"class":404},[398,18365,17528],{"class":408},[398,18367,454],{"class":404},[398,18369,16619],{"class":408},[398,18371,17535],{"class":2239},[398,18373,17538],{"class":408},[398,18375,17541],{"class":2239},[398,18377,13327],{"class":408},[398,18379,934],{"class":404},[398,18381,16165],{"class":408},[398,18383,17541],{"class":2239},[398,18385,5913],{"class":408},[398,18387,18388,18390,18392,18394,18396,18398,18400,18402,18404,18406,18408,18410],{"class":400,"line":1587},[398,18389,15015],{"class":404},[398,18391,17558],{"class":408},[398,18393,454],{"class":404},[398,18395,16619],{"class":408},[398,18397,17535],{"class":2239},[398,18399,17538],{"class":408},[398,18401,17569],{"class":2239},[398,18403,13327],{"class":408},[398,18405,934],{"class":404},[398,18407,16165],{"class":408},[398,18409,17569],{"class":2239},[398,18411,5913],{"class":408},[398,18413,18414,18416,18418,18420,18422,18424,18426,18428,18430,18432,18434],{"class":400,"line":1593},[398,18415,15015],{"class":404},[398,18417,17586],{"class":408},[398,18419,454],{"class":404},[398,18421,17591],{"class":2239},[398,18423,17594],{"class":408},[398,18425,857],{"class":404},[398,18427,17528],{"class":408},[398,18429,883],{"class":404},[398,18431,17558],{"class":408},[398,18433,857],{"class":404},[398,18435,17607],{"class":408},[398,18437,18438,18440,18442,18444,18446,18448],{"class":400,"line":1605},[398,18439,3377],{"class":404},[398,18441,17614],{"class":408},[398,18443,1312],{"class":404},[398,18445,16619],{"class":408},[398,18447,17621],{"class":2239},[398,18449,17624],{"class":408},[398,18451,18452],{"class":400,"line":1888},[398,18453,2306],{"class":408},[398,18455,18456,18458,18460,18462,18464],{"class":400,"line":1893},[398,18457,9946],{"class":408},[398,18459,1445],{"class":404},[398,18461,17637],{"class":513},[398,18463,1720],{"class":404},[398,18465,9117],{"class":408},[398,18467,18468],{"class":400,"line":1899},[398,18469,2463],{"class":408},[398,18471,18472],{"class":400,"line":1904},[398,18473,17100],{"class":404},[398,18475,18476],{"class":400,"line":1918},[398,18477,2306],{"class":408},[398,18479,18480,18482,18484,18486,18488],{"class":400,"line":1923},[398,18481,9946],{"class":408},[398,18483,1445],{"class":404},[398,18485,17662],{"class":513},[398,18487,1720],{"class":404},[398,18489,9117],{"class":408},[398,18491,18492],{"class":400,"line":1929},[398,18493,2463],{"class":408},[398,18495,18496],{"class":400,"line":1950},[398,18497,1841],{"class":408},[398,18499,18500,18502,18504],{"class":400,"line":1955},[398,18501,412],{"class":404},[398,18503,2249],{"class":2239},[398,18505,2252],{"class":408},[398,18507,18508],{"class":400,"line":1969},[398,18509,1822],{"class":408},[398,18511,18512],{"class":400,"line":1974},[398,18513,15330],{"class":467},[398,18515,18516],{"class":400,"line":2003},[398,18517,15077],{"class":408},[398,18519,18520],{"class":400,"line":2008},[398,18521,17699],{"class":408},[398,18523,18524],{"class":400,"line":2025},[398,18525,17271],{"class":467},[398,18527,18528,18530,18532,18534],{"class":400,"line":2030},[398,18529,1827],{"class":408},[398,18531,1445],{"class":404},[398,18533,17712],{"class":513},[398,18535,1566],{"class":408},[398,18537,18538,18540],{"class":400,"line":2035},[398,18539,15015],{"class":404},[398,18541,17721],{"class":408},[398,18543,18544,18546,18548],{"class":400,"line":2040},[398,18545,2288],{"class":408},[398,18547,1705],{"class":404},[398,18549,17730],{"class":408},[398,18551,18552,18554,18556],{"class":400,"line":2054},[398,18553,16872],{"class":408},[398,18555,17737],{"class":2239},[398,18557,17740],{"class":408},[398,18559,18560,18562,18564,18566],{"class":400,"line":2059},[398,18561,1827],{"class":408},[398,18563,1445],{"class":404},[398,18565,17749],{"class":513},[398,18567,1566],{"class":408},[398,18569,18570,18572],{"class":400,"line":2853},[398,18571,15015],{"class":404},[398,18573,17758],{"class":408},[398,18575,18576,18578,18580,18582,18584],{"class":400,"line":2867},[398,18577,2288],{"class":408},[398,18579,1705],{"class":404},[398,18581,1222],{"class":408},[398,18583,1705],{"class":404},[398,18585,17771],{"class":408},[398,18587,18588,18590,18592],{"class":400,"line":2875},[398,18589,17776],{"class":408},[398,18591,17779],{"class":2239},[398,18593,17782],{"class":408},[398,18595,18596,18598,18600],{"class":400,"line":2880},[398,18597,16872],{"class":408},[398,18599,17789],{"class":2239},[398,18601,17792],{"class":408},[398,18603,18604,18606,18608,18610],{"class":400,"line":2886},[398,18605,1827],{"class":408},[398,18607,1445],{"class":404},[398,18609,17801],{"class":513},[398,18611,1566],{"class":408},[398,18613,18614,18616],{"class":400,"line":2892},[398,18615,15015],{"class":404},[398,18617,17810],{"class":408},[398,18619,18620,18622,18624,18626,18628],{"class":400,"line":2897},[398,18621,2288],{"class":408},[398,18623,1705],{"class":404},[398,18625,17819],{"class":408},[398,18627,1705],{"class":404},[398,18629,17824],{"class":408},[398,18631,18632],{"class":400,"line":8225},[398,18633,17829],{"class":408},[398,18635,18636,18638,18640],{"class":400,"line":8249},[398,18637,17834],{"class":408},[398,18639,17779],{"class":2239},[398,18641,17839],{"class":408},[398,18643,18644,18646],{"class":400,"line":8254},[398,18645,17844],{"class":2239},[398,18647,17847],{"class":408},[398,18649,18650],{"class":400,"line":8260},[398,18651,1841],{"class":408},[343,18653,18655],{"id":18654},"_82对象的初始化清理","8.2对象的初始化清理",[67,18657,18658,18661],{},[41,18659,18660],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[41,18662,18663],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[14,18665,18667],{"id":18666},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,18669,18670,18671,18674],{},"对象的",[23,18672,18673],{},"初始化和清理","也是两个非常重要的安全问题",[19,18676,18677],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,18679,18680],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,18682,18683,18684,18687,18688,18691],{},"c++利用了",[23,18685,18686],{},"构造函数","和",[23,18689,18690],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,18693,18694,18695],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[23,18696,18697],{},"我们不提供构造和析构，编译器会提供",[19,18699,18700],{},[23,18701,18702],{},"编译器提供的构造函数和析构函数是空实现。",[67,18704,18705,18708],{},[41,18706,18707],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[41,18709,18710,18711,18714],{},"析构函数：主要作用在于对象",[23,18712,18713],{},"销毁前","系统自动调用，执行一些清理工作。",[19,18716,18717,18720],{},[23,18718,18719],{},"构造函数语法：",[395,18721,18722],{},"类名(){}",[38,18724,18725,18728,18731,18734,18737],{},[41,18726,18727],{},"构造函数，没有返回值也不写void",[41,18729,18730],{},"函数名称与类名相同",[41,18732,18733],{},"构造函数可以有参数，因此可以发生重载",[41,18735,18736],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[41,18738,18739,18740,831],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[395,18741,18742],{},"Person(){}",[19,18744,18745,14072,18748],{},[23,18746,18747],{},"析构函数语法：",[395,18749,18750],{},"~类名(){}",[38,18752,18753,18756,18759,18765],{},[41,18754,18755],{},"析构函数，没有返回值也不写void",[41,18757,18758],{},"函数名称与类名相同,在名称前加上符号  ~",[41,18760,18761,18762],{},"析构函数不可以有参数，因此",[23,18763,18764],{},"不可以发生重载",[41,18766,18767],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[389,18769,18771],{"className":391,"code":18770,"language":393,"meta":316,"style":316},"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",[395,18772,18773,18779,18783,18787,18792,18799,18803,18816,18820,18825,18832,18836,18849,18853,18857,18861,18865,18873,18877,18885,18889,18893,18901,18905,18910,18914,18921,18925,18938,18942,18950],{"__ignoreMap":316},[398,18774,18775,18777],{"class":400,"line":401},[398,18776,14971],{"class":404},[398,18778,15448],{"class":2239},[398,18780,18781],{"class":400,"line":317},[398,18782,1822],{"class":408},[398,18784,18785],{"class":400,"line":320},[398,18786,14993],{"class":404},[398,18788,18789],{"class":400,"line":1470},[398,18790,18791],{"class":467},"    \u002F\u002F构造函数\n",[398,18793,18794,18797],{"class":400,"line":1476},[398,18795,18796],{"class":2239},"    Person",[398,18798,2252],{"class":408},[398,18800,18801],{"class":400,"line":1490},[398,18802,2306],{"class":408},[398,18804,18805,18807,18809,18812,18814],{"class":400,"line":1496},[398,18806,9946],{"class":408},[398,18808,1445],{"class":404},[398,18810,18811],{"class":513}," \"Person的构造函数调用\"",[398,18813,1720],{"class":404},[398,18815,9117],{"class":408},[398,18817,18818],{"class":400,"line":1587},[398,18819,2463],{"class":408},[398,18821,18822],{"class":400,"line":1593},[398,18823,18824],{"class":467},"    \u002F\u002F析构函数\n",[398,18826,18827,18830],{"class":400,"line":1605},[398,18828,18829],{"class":2239},"    ~Person",[398,18831,2252],{"class":408},[398,18833,18834],{"class":400,"line":1888},[398,18835,2306],{"class":408},[398,18837,18838,18840,18842,18845,18847],{"class":400,"line":1893},[398,18839,9946],{"class":408},[398,18841,1445],{"class":404},[398,18843,18844],{"class":513}," \"Person的析构函数调用\"",[398,18846,1720],{"class":404},[398,18848,9117],{"class":408},[398,18850,18851],{"class":400,"line":1899},[398,18852,2463],{"class":408},[398,18854,18855],{"class":400,"line":1904},[398,18856,2676],{"emptyLinePlaceholder":328},[398,18858,18859],{"class":400,"line":1918},[398,18860,4271],{"class":408},[398,18862,18863],{"class":400,"line":1923},[398,18864,2676],{"emptyLinePlaceholder":328},[398,18866,18867,18869,18871],{"class":400,"line":1929},[398,18868,5641],{"class":404},[398,18870,5865],{"class":2239},[398,18872,2252],{"class":408},[398,18874,18875],{"class":400,"line":1950},[398,18876,1822],{"class":408},[398,18878,18879,18882],{"class":400,"line":1955},[398,18880,18881],{"class":408},"    Person p;",[398,18883,18884],{"class":467},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[398,18886,18887],{"class":400,"line":1969},[398,18888,1841],{"class":408},[398,18890,18891],{"class":400,"line":1974},[398,18892,2676],{"emptyLinePlaceholder":328},[398,18894,18895,18897,18899],{"class":400,"line":2003},[398,18896,412],{"class":404},[398,18898,2249],{"class":2239},[398,18900,11130],{"class":408},[398,18902,18903],{"class":400,"line":2008},[398,18904,13487],{"class":408},[398,18906,18907],{"class":400,"line":2025},[398,18908,18909],{"class":467},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[398,18911,18912],{"class":400,"line":2030},[398,18913,2676],{"emptyLinePlaceholder":328},[398,18915,18916,18918],{"class":400,"line":2035},[398,18917,18881],{"class":408},[398,18919,18920],{"class":467},"\u002F\u002F只有构造函数\n",[398,18922,18923],{"class":400,"line":2040},[398,18924,2676],{"emptyLinePlaceholder":328},[398,18926,18927,18929,18931,18933,18935],{"class":400,"line":2054},[398,18928,2579],{"class":2239},[398,18930,409],{"class":408},[398,18932,2584],{"class":513},[398,18934,6243],{"class":408},[398,18936,18937],{"class":467},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[398,18939,18940],{"class":400,"line":2059},[398,18941,2676],{"emptyLinePlaceholder":328},[398,18943,18944,18946,18948],{"class":400,"line":2853},[398,18945,4366],{"class":404},[398,18947,4369],{"class":457},[398,18949,1566],{"class":408},[398,18951,18952],{"class":400,"line":2867},[398,18953,1841],{"class":408},[19,18955,18956],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[14,18958,18960],{"id":18959},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,18962,18963],{},"两种分类方式：",[19,18965,18966],{},"​\t按参数分为： 有参构造和无参构造",[19,18968,18969],{},"​\t按类型分为： 普通构造和拷贝构造",[19,18971,18972],{},"三种调用方式：",[19,18974,18975],{},"​\t括号法",[19,18977,18978],{},"​\t显示法",[19,18980,18981],{},"​\t隐式转换法",[389,18983,18985],{"className":391,"code":18984,"language":393,"meta":316,"style":316},"#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",[395,18986,18987,18993,19003,19008,19013,19018,19023,19027,19035,19039,19043,19047,19053,19057,19070,19074,19086,19090,19099,19112,19116,19120,19126,19130,19143,19147,19152,19168,19172,19177,19186,19199,19203,19209,19213,19218,19226,19230,19235,19239,19247,19251,19256,19261,19266,19271,19276,19280,19285,19290,19295,19300,19304,19309,19314,19330,19342,19347,19351,19356,19361,19366,19370,19375,19389,19402,19406,19414,19418,19424,19430,19438],{"__ignoreMap":316},[398,18988,18989,18991],{"class":400,"line":401},[398,18990,2225],{"class":404},[398,18992,2228],{"class":513},[398,18994,18995,18997,18999,19001],{"class":400,"line":317},[398,18996,2233],{"class":404},[398,18998,2236],{"class":404},[398,19000,2240],{"class":2239},[398,19002,1566],{"class":408},[398,19004,19005],{"class":400,"line":320},[398,19006,19007],{"class":467},"\u002F\u002F1.构造函数的分类及调用\n",[398,19009,19010],{"class":400,"line":1470},[398,19011,19012],{"class":467},"\u002F\u002F分类\n",[398,19014,19015],{"class":400,"line":1476},[398,19016,19017],{"class":467},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[398,19019,19020],{"class":400,"line":1490},[398,19021,19022],{"class":467},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[398,19024,19025],{"class":400,"line":1496},[398,19026,2676],{"emptyLinePlaceholder":328},[398,19028,19029,19031,19033],{"class":400,"line":1587},[398,19030,14971],{"class":404},[398,19032,15846],{"class":2239},[398,19034,2950],{"class":408},[398,19036,19037],{"class":400,"line":1593},[398,19038,1822],{"class":408},[398,19040,19041],{"class":400,"line":1605},[398,19042,14993],{"class":404},[398,19044,19045],{"class":400,"line":1888},[398,19046,18791],{"class":467},[398,19048,19049,19051],{"class":400,"line":1893},[398,19050,18796],{"class":2239},[398,19052,2252],{"class":408},[398,19054,19055],{"class":400,"line":1899},[398,19056,2306],{"class":408},[398,19058,19059,19061,19063,19066,19068],{"class":400,"line":1904},[398,19060,3727],{"class":408},[398,19062,1445],{"class":404},[398,19064,19065],{"class":513},"\"Person构造函数无参构造\"",[398,19067,1445],{"class":404},[398,19069,1467],{"class":408},[398,19071,19072],{"class":400,"line":1918},[398,19073,2463],{"class":408},[398,19075,19076,19078,19080,19082,19084],{"class":400,"line":1923},[398,19077,18796],{"class":2239},[398,19079,409],{"class":408},[398,19081,412],{"class":404},[398,19083,1674],{"class":5493},[398,19085,415],{"class":408},[398,19087,19088],{"class":400,"line":1929},[398,19089,2306],{"class":408},[398,19091,19092,19095,19097],{"class":400,"line":1950},[398,19093,19094],{"class":408},"        age",[398,19096,454],{"class":404},[398,19098,6474],{"class":408},[398,19100,19101,19103,19105,19108,19110],{"class":400,"line":1955},[398,19102,3727],{"class":408},[398,19104,1445],{"class":404},[398,19106,19107],{"class":513},"\"Person构造函数有参构造\"",[398,19109,1445],{"class":404},[398,19111,1467],{"class":408},[398,19113,19114],{"class":400,"line":1969},[398,19115,2463],{"class":408},[398,19117,19118],{"class":400,"line":1974},[398,19119,18824],{"class":467},[398,19121,19122,19124],{"class":400,"line":2003},[398,19123,18829],{"class":2239},[398,19125,2252],{"class":408},[398,19127,19128],{"class":400,"line":2008},[398,19129,2306],{"class":408},[398,19131,19132,19134,19136,19139,19141],{"class":400,"line":2025},[398,19133,3727],{"class":408},[398,19135,1445],{"class":404},[398,19137,19138],{"class":513},"\"Person析构函数被调用\"",[398,19140,1445],{"class":404},[398,19142,1467],{"class":408},[398,19144,19145],{"class":400,"line":2030},[398,19146,2463],{"class":408},[398,19148,19149],{"class":400,"line":2035},[398,19150,19151],{"class":467},"    \u002F\u002F拷贝构造函数\n",[398,19153,19154,19156,19158,19160,19162,19164,19166],{"class":400,"line":2040},[398,19155,18796],{"class":2239},[398,19157,409],{"class":408},[398,19159,7069],{"class":404},[398,19161,15846],{"class":2239},[398,19163,10861],{"class":404},[398,19165,19],{"class":5493},[398,19167,415],{"class":408},[398,19169,19170],{"class":400,"line":2054},[398,19171,2306],{"class":408},[398,19173,19174],{"class":400,"line":2059},[398,19175,19176],{"class":467},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[398,19178,19179,19181,19183],{"class":400,"line":2853},[398,19180,19094],{"class":408},[398,19182,454],{"class":404},[398,19184,19185],{"class":408},"p.age;\n",[398,19187,19188,19190,19192,19195,19197],{"class":400,"line":2867},[398,19189,3727],{"class":408},[398,19191,1445],{"class":404},[398,19193,19194],{"class":513},"\"Person拷贝构造函数被调用\"",[398,19196,1445],{"class":404},[398,19198,1467],{"class":408},[398,19200,19201],{"class":400,"line":2875},[398,19202,2463],{"class":408},[398,19204,19205,19207],{"class":400,"line":2880},[398,19206,2261],{"class":404},[398,19208,8074],{"class":408},[398,19210,19211],{"class":400,"line":2886},[398,19212,4271],{"class":408},[398,19214,19215],{"class":400,"line":2892},[398,19216,19217],{"class":467},"\u002F\u002F调用\n",[398,19219,19220,19222,19224],{"class":400,"line":2897},[398,19221,5641],{"class":404},[398,19223,5865],{"class":2239},[398,19225,2252],{"class":408},[398,19227,19228],{"class":400,"line":8225},[398,19229,1822],{"class":408},[398,19231,19232],{"class":400,"line":8249},[398,19233,19234],{"class":467},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[398,19236,19237],{"class":400,"line":8254},[398,19238,1841],{"class":408},[398,19240,19241,19243,19245],{"class":400,"line":8260},[398,19242,5641],{"class":404},[398,19244,5934],{"class":2239},[398,19246,2252],{"class":408},[398,19248,19249],{"class":400,"line":8287},[398,19250,1822],{"class":408},[398,19252,19253],{"class":400,"line":8292},[398,19254,19255],{"class":467},"    \u002F\u002F1.括号法\n",[398,19257,19258],{"class":400,"line":8298},[398,19259,19260],{"class":467},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[398,19262,19263],{"class":400,"line":8310},[398,19264,19265],{"class":467},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[398,19267,19268],{"class":400,"line":8322},[398,19269,19270],{"class":467},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[398,19272,19273],{"class":400,"line":8334},[398,19274,19275],{"class":467},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[398,19277,19278],{"class":400,"line":9993},[398,19279,2676],{"emptyLinePlaceholder":328},[398,19281,19282],{"class":400,"line":10018},[398,19283,19284],{"class":467},"    \u002F\u002F注意事项\n",[398,19286,19287],{"class":400,"line":10041},[398,19288,19289],{"class":467},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[398,19291,19292],{"class":400,"line":10065},[398,19293,19294],{"class":467},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[398,19296,19297],{"class":400,"line":10070},[398,19298,19299],{"class":467},"    \u002F\u002F Person p4();\n",[398,19301,19302],{"class":400,"line":10075},[398,19303,2676],{"emptyLinePlaceholder":328},[398,19305,19306],{"class":400,"line":10080},[398,19307,19308],{"class":467},"    \u002F\u002F2.显示法\n",[398,19310,19311],{"class":400,"line":10089},[398,19312,19313],{"class":408},"    Person p1;\n",[398,19315,19316,19319,19321,19324,19326,19328],{"class":400,"line":10094},[398,19317,19318],{"class":408},"    Person p2",[398,19320,454],{"class":404},[398,19322,19323],{"class":2239},"Person",[398,19325,409],{"class":408},[398,19327,848],{"class":457},[398,19329,2995],{"class":408},[398,19331,19332,19335,19337,19339],{"class":400,"line":10100},[398,19333,19334],{"class":408},"    Person p3",[398,19336,454],{"class":404},[398,19338,19323],{"class":2239},[398,19340,19341],{"class":408},"(p2);\n",[398,19343,19344],{"class":400,"line":10121},[398,19345,19346],{"class":467},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[398,19348,19349],{"class":400,"line":10127},[398,19350,2676],{"emptyLinePlaceholder":328},[398,19352,19353],{"class":400,"line":10141},[398,19354,19355],{"class":467},"    \u002F\u002F 注意事项2\n",[398,19357,19358],{"class":400,"line":10147},[398,19359,19360],{"class":467},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[398,19362,19363],{"class":400,"line":10174},[398,19364,19365],{"class":467},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[398,19367,19368],{"class":400,"line":10183},[398,19369,2676],{"emptyLinePlaceholder":328},[398,19371,19372],{"class":400,"line":10189},[398,19373,19374],{"class":467},"    \u002F\u002F3.隐士转换法\n",[398,19376,19377,19380,19382,19384,19386],{"class":400,"line":10197},[398,19378,19379],{"class":408},"    Person p4",[398,19381,454],{"class":404},[398,19383,848],{"class":457},[398,19385,464],{"class":408},[398,19387,19388],{"class":467},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[398,19390,19391,19394,19396,19399],{"class":400,"line":10202},[398,19392,19393],{"class":408},"    Person p5",[398,19395,454],{"class":404},[398,19397,19398],{"class":408},"p4;",[398,19400,19401],{"class":467}," \u002F\u002F 这里会调用拷贝构造函数\n",[398,19403,19404],{"class":400,"line":16881},[398,19405,1841],{"class":408},[398,19407,19408,19410,19412],{"class":400,"line":16887},[398,19409,412],{"class":404},[398,19411,2249],{"class":2239},[398,19413,2252],{"class":408},[398,19415,19416],{"class":400,"line":16910},[398,19417,1822],{"class":408},[398,19419,19420,19422],{"class":400,"line":16916},[398,19421,5910],{"class":2239},[398,19423,5913],{"class":408},[398,19425,19426,19428],{"class":400,"line":16939},[398,19427,5979],{"class":2239},[398,19429,5913],{"class":408},[398,19431,19432,19434,19436],{"class":400,"line":16953},[398,19433,4366],{"class":404},[398,19435,4369],{"class":457},[398,19437,1566],{"class":408},[398,19439,19440],{"class":400,"line":16973},[398,19441,1841],{"class":408},[19,19443,19444,19447],{},[23,19445,19446],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[14,19449,19451],{"id":19450},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,19453,19454],{},"C++中拷贝构造函数调用时机通常有三种情况",[67,19456,19457,19460,19463],{},[41,19458,19459],{},"使用一个已经创建完毕的对象来初始化一个新对象",[41,19461,19462],{},"值传递的方式给函数参数传值",[41,19464,19465],{},"以值方式返回局部对象",[389,19467,19469],{"className":391,"code":19468,"language":393,"meta":316,"style":316},"#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",[395,19470,19471,19477,19487,19491,19496,19500,19505,19510,19515,19521,19525,19529,19535,19539,19552,19556,19561,19573,19577,19585,19598,19602,19606,19622,19626,19635,19648,19652,19658,19662,19674,19678,19684,19688,19692,19700,19704,19717,19725,19743,19747,19752,19757,19772,19776,19789,19793,19801,19805,19809,19817,19821,19826,19835,19839,19843,19868,19878,19882,19890,19894,19905,19930,19934,19938,19942,19950,19954,19959,19964,19971,19976,19981,19986,19991,19995,20000,20004,20009,20013,20018,20023,20027,20031,20036,20041,20049],{"__ignoreMap":316},[398,19472,19473,19475],{"class":400,"line":401},[398,19474,2225],{"class":404},[398,19476,2228],{"class":513},[398,19478,19479,19481,19483,19485],{"class":400,"line":317},[398,19480,2233],{"class":404},[398,19482,2236],{"class":404},[398,19484,2240],{"class":2239},[398,19486,1566],{"class":408},[398,19488,19489],{"class":400,"line":320},[398,19490,2676],{"emptyLinePlaceholder":328},[398,19492,19493],{"class":400,"line":1470},[398,19494,19495],{"class":467},"\u002F\u002F拷贝构造函数调用时机\n",[398,19497,19498],{"class":400,"line":1476},[398,19499,2676],{"emptyLinePlaceholder":328},[398,19501,19502],{"class":400,"line":1490},[398,19503,19504],{"class":467},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[398,19506,19507],{"class":400,"line":1496},[398,19508,19509],{"class":467},"\u002F\u002F2.值传递的方式给函数参数传值\n",[398,19511,19512],{"class":400,"line":1587},[398,19513,19514],{"class":467},"\u002F\u002F3.以值方式返回局部对象\n",[398,19516,19517,19519],{"class":400,"line":1593},[398,19518,14971],{"class":404},[398,19520,15448],{"class":2239},[398,19522,19523],{"class":400,"line":1605},[398,19524,1822],{"class":408},[398,19526,19527],{"class":400,"line":1888},[398,19528,14993],{"class":404},[398,19530,19531,19533],{"class":400,"line":1893},[398,19532,18796],{"class":2239},[398,19534,2252],{"class":408},[398,19536,19537],{"class":400,"line":1899},[398,19538,2306],{"class":408},[398,19540,19541,19543,19545,19548,19550],{"class":400,"line":1904},[398,19542,9946],{"class":408},[398,19544,1445],{"class":404},[398,19546,19547],{"class":513}," \"Person的默认构造函数调用\"",[398,19549,1720],{"class":404},[398,19551,9117],{"class":408},[398,19553,19554],{"class":400,"line":1918},[398,19555,2463],{"class":408},[398,19557,19558],{"class":400,"line":1923},[398,19559,19560],{"class":467},"    \u002F\u002F有参构造\n",[398,19562,19563,19565,19567,19569,19571],{"class":400,"line":1929},[398,19564,18796],{"class":2239},[398,19566,409],{"class":408},[398,19568,412],{"class":404},[398,19570,15966],{"class":5493},[398,19572,415],{"class":408},[398,19574,19575],{"class":400,"line":1950},[398,19576,2306],{"class":408},[398,19578,19579,19581,19583],{"class":400,"line":1955},[398,19580,16020],{"class":408},[398,19582,454],{"class":404},[398,19584,8074],{"class":408},[398,19586,19587,19589,19591,19594,19596],{"class":400,"line":1969},[398,19588,9946],{"class":408},[398,19590,1445],{"class":404},[398,19592,19593],{"class":513}," \"Person的有参构造函数调用\"",[398,19595,1720],{"class":404},[398,19597,9117],{"class":408},[398,19599,19600],{"class":400,"line":1974},[398,19601,2463],{"class":408},[398,19603,19604],{"class":400,"line":2003},[398,19605,19151],{"class":467},[398,19607,19608,19610,19612,19614,19616,19618,19620],{"class":400,"line":2008},[398,19609,18796],{"class":2239},[398,19611,409],{"class":408},[398,19613,7069],{"class":404},[398,19615,15846],{"class":2239},[398,19617,10861],{"class":404},[398,19619,19],{"class":5493},[398,19621,415],{"class":408},[398,19623,19624],{"class":400,"line":2025},[398,19625,2306],{"class":408},[398,19627,19628,19630,19632],{"class":400,"line":2030},[398,19629,16020],{"class":408},[398,19631,454],{"class":404},[398,19633,19634],{"class":408}," p.m_Age;\n",[398,19636,19637,19639,19641,19644,19646],{"class":400,"line":2035},[398,19638,9946],{"class":408},[398,19640,1445],{"class":404},[398,19642,19643],{"class":513}," \"Person的拷贝构造函数调用\"",[398,19645,1720],{"class":404},[398,19647,9117],{"class":408},[398,19649,19650],{"class":400,"line":2040},[398,19651,2463],{"class":408},[398,19653,19654,19656],{"class":400,"line":2054},[398,19655,18829],{"class":2239},[398,19657,2252],{"class":408},[398,19659,19660],{"class":400,"line":2059},[398,19661,2306],{"class":408},[398,19663,19664,19666,19668,19670,19672],{"class":400,"line":2853},[398,19665,9946],{"class":408},[398,19667,1445],{"class":404},[398,19669,18844],{"class":513},[398,19671,1720],{"class":404},[398,19673,9117],{"class":408},[398,19675,19676],{"class":400,"line":2867},[398,19677,2463],{"class":408},[398,19679,19680,19682],{"class":400,"line":2875},[398,19681,2261],{"class":404},[398,19683,15943],{"class":408},[398,19685,19686],{"class":400,"line":2880},[398,19687,4271],{"class":408},[398,19689,19690],{"class":400,"line":2886},[398,19691,19504],{"class":467},[398,19693,19694,19696,19698],{"class":400,"line":2892},[398,19695,5641],{"class":404},[398,19697,5865],{"class":2239},[398,19699,2252],{"class":408},[398,19701,19702],{"class":400,"line":2897},[398,19703,1822],{"class":408},[398,19705,19706,19709,19711,19713,19715],{"class":400,"line":8225},[398,19707,19708],{"class":408},"    Person ",[398,19710,7407],{"class":2239},[398,19712,409],{"class":408},[398,19714,1102],{"class":457},[398,19716,2995],{"class":408},[398,19718,19719,19721,19723],{"class":400,"line":8249},[398,19720,19708],{"class":408},[398,19722,7310],{"class":2239},[398,19724,17792],{"class":408},[398,19726,19727,19729,19731,19734,19736,19739,19741],{"class":400,"line":8254},[398,19728,1827],{"class":408},[398,19730,1445],{"class":404},[398,19732,19733],{"class":513},"\"P2的年龄为：\"",[398,19735,1445],{"class":404},[398,19737,19738],{"class":408},"p2.m_Age",[398,19740,1445],{"class":404},[398,19742,1467],{"class":408},[398,19744,19745],{"class":400,"line":8260},[398,19746,1841],{"class":408},[398,19748,19749],{"class":400,"line":8287},[398,19750,19751],{"class":467},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[398,19753,19754],{"class":400,"line":8292},[398,19755,19756],{"class":467},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[398,19758,19759,19761,19764,19766,19768,19770],{"class":400,"line":8298},[398,19760,5641],{"class":404},[398,19762,19763],{"class":2239}," doWork",[398,19765,409],{"class":408},[398,19767,19323],{"class":2239},[398,19769,7102],{"class":5493},[398,19771,415],{"class":408},[398,19773,19774],{"class":400,"line":8310},[398,19775,1822],{"class":408},[398,19777,19778,19780,19782,19785,19787],{"class":400,"line":8322},[398,19779,6806],{"class":408},[398,19781,1445],{"class":404},[398,19783,19784],{"class":513}," \"doWork函数调用\"",[398,19786,1720],{"class":404},[398,19788,9117],{"class":408},[398,19790,19791],{"class":400,"line":8334},[398,19792,1841],{"class":408},[398,19794,19795,19797,19799],{"class":400,"line":9993},[398,19796,5641],{"class":404},[398,19798,5934],{"class":2239},[398,19800,2252],{"class":408},[398,19802,19803],{"class":400,"line":10018},[398,19804,1822],{"class":408},[398,19806,19807],{"class":400,"line":10041},[398,19808,15590],{"class":408},[398,19810,19811,19814],{"class":400,"line":10065},[398,19812,19813],{"class":2239},"    doWork",[398,19815,19816],{"class":408},"(p);\n",[398,19818,19819],{"class":400,"line":10070},[398,19820,1841],{"class":408},[398,19822,19823],{"class":400,"line":10075},[398,19824,19825],{"class":467},"\u002F\u002F 3.以值方式返回局部对象\n",[398,19827,19828,19830,19833],{"class":400,"line":10080},[398,19829,19323],{"class":2239},[398,19831,19832],{"class":2239}," doWork2",[398,19834,2252],{"class":408},[398,19836,19837],{"class":400,"line":10089},[398,19838,1822],{"class":408},[398,19840,19841],{"class":400,"line":10094},[398,19842,19313],{"class":408},[398,19844,19845,19847,19849,19851,19853,19855,19857,19859,19861,19863,19865],{"class":400,"line":10100},[398,19846,1827],{"class":408},[398,19848,1445],{"class":404},[398,19850,409],{"class":408},[398,19852,412],{"class":404},[398,19854,6795],{"class":404},[398,19856,831],{"class":408},[398,19858,755],{"class":404},[398,19860,7407],{"class":408},[398,19862,1445],{"class":404},[398,19864,1514],{"class":408},[398,19866,19867],{"class":467},"\u002F\u002F打印p1的地址\n",[398,19869,19870,19872,19875],{"class":400,"line":10121},[398,19871,4366],{"class":404},[398,19873,19874],{"class":408}," p1;",[398,19876,19877],{"class":467},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[398,19879,19880],{"class":400,"line":10127},[398,19881,1841],{"class":408},[398,19883,19884,19886,19888],{"class":400,"line":10141},[398,19885,5641],{"class":404},[398,19887,6006],{"class":2239},[398,19889,2252],{"class":408},[398,19891,19892],{"class":400,"line":10147},[398,19893,1822],{"class":408},[398,19895,19896,19899,19901,19903],{"class":400,"line":10174},[398,19897,19898],{"class":408},"    Person p ",[398,19900,454],{"class":404},[398,19902,19832],{"class":2239},[398,19904,5913],{"class":408},[398,19906,19907,19909,19911,19913,19915,19917,19919,19921,19923,19925,19927],{"class":400,"line":10183},[398,19908,1827],{"class":408},[398,19910,1445],{"class":404},[398,19912,409],{"class":408},[398,19914,412],{"class":404},[398,19916,6795],{"class":404},[398,19918,831],{"class":408},[398,19920,755],{"class":404},[398,19922,19],{"class":408},[398,19924,1445],{"class":404},[398,19926,1514],{"class":408},[398,19928,19929],{"class":467},"\u002F\u002F打印p的地址\n",[398,19931,19932],{"class":400,"line":10189},[398,19933,1841],{"class":408},[398,19935,19936],{"class":400,"line":10197},[398,19937,2676],{"emptyLinePlaceholder":328},[398,19939,19940],{"class":400,"line":10202},[398,19941,2676],{"emptyLinePlaceholder":328},[398,19943,19944,19946,19948],{"class":400,"line":16881},[398,19945,412],{"class":404},[398,19947,2249],{"class":2239},[398,19949,2252],{"class":408},[398,19951,19952],{"class":400,"line":16887},[398,19953,1822],{"class":408},[398,19955,19956],{"class":400,"line":16910},[398,19957,19958],{"class":467},"    \u002F\u002F test01();\n",[398,19960,19961],{"class":400,"line":16916},[398,19962,19963],{"class":467},"    \u002F\u002F test02();\n",[398,19965,19966,19969],{"class":400,"line":16939},[398,19967,19968],{"class":2239},"    test03",[398,19970,5913],{"class":408},[398,19972,19973],{"class":400,"line":16953},[398,19974,19975],{"class":467},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[398,19977,19978],{"class":400,"line":16973},[398,19979,19980],{"class":467},"\u002F\u002F 输出结果如下：\n",[398,19982,19983],{"class":400,"line":16979},[398,19984,19985],{"class":467},"\u002F\u002F Person的默认构造函数调用\n",[398,19987,19988],{"class":400,"line":16990},[398,19989,19990],{"class":467},"\u002F\u002F 0x7fffffffceec\n",[398,19992,19993],{"class":400,"line":17013},[398,19994,19990],{"class":467},[398,19996,19997],{"class":400,"line":17035},[398,19998,19999],{"class":467},"\u002F\u002F Person的析构函数调用\n",[398,20001,20002],{"class":400,"line":17040},[398,20003,2676],{"emptyLinePlaceholder":328},[398,20005,20006],{"class":400,"line":17046},[398,20007,20008],{"class":467},"\u002F\u002F 之前的输出结果如下：\n",[398,20010,20011],{"class":400,"line":17060},[398,20012,19985],{"class":467},[398,20014,20015],{"class":400,"line":17073},[398,20016,20017],{"class":467},"\u002F\u002F 地址\n",[398,20019,20020],{"class":400,"line":17078},[398,20021,20022],{"class":467},"\u002F\u002F Person的拷贝构造函数调用\n",[398,20024,20025],{"class":400,"line":17092},[398,20026,19999],{"class":467},[398,20028,20029],{"class":400,"line":17097},[398,20030,20017],{"class":467},[398,20032,20033],{"class":400,"line":17103},[398,20034,20035],{"class":467},"\u002F\u002F (这两次输出的地址也是不同的) \n",[398,20037,20038],{"class":400,"line":17108},[398,20039,20040],{"class":467},"\u002F\u002F Person的析构函数调用     \n",[398,20042,20043,20045,20047],{"class":400,"line":17122},[398,20044,4366],{"class":404},[398,20046,4369],{"class":457},[398,20048,1566],{"class":408},[398,20050,20051],{"class":400,"line":17127},[398,20052,1841],{"class":408},[19,20054,20055],{},"简化版理解",[389,20057,20059],{"className":391,"code":20058,"language":393,"meta":316,"style":316},"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",[395,20060,20061,20069,20073,20079,20092,20103,20107,20119,20132,20140,20144,20160,20173,20182,20186,20191,20197,20210,20214,20218,20225,20229,20233,20238,20246,20250,20266,20279,20292,20296,20301,20309,20313,20317,20322,20327,20343,20351,20358,20364,20368,20372,20377,20385,20389,20393,20416,20423,20427,20431,20439,20443,20453,20475,20479,20483,20487,20495,20499,20504,20509,20515,20519,20529,20533,20541],{"__ignoreMap":316},[398,20062,20063,20065,20067],{"class":400,"line":401},[398,20064,14971],{"class":404},[398,20066,15846],{"class":2239},[398,20068,15849],{"class":408},[398,20070,20071],{"class":400,"line":317},[398,20072,14993],{"class":404},[398,20074,20075,20077],{"class":400,"line":320},[398,20076,18796],{"class":2239},[398,20078,11130],{"class":408},[398,20080,20081,20083,20085,20088,20090],{"class":400,"line":1470},[398,20082,9946],{"class":408},[398,20084,1445],{"class":404},[398,20086,20087],{"class":513}," \"无参构造函数!\"",[398,20089,1720],{"class":404},[398,20091,9117],{"class":408},[398,20093,20094,20097,20099,20101],{"class":400,"line":1476},[398,20095,20096],{"class":408},"        mAge ",[398,20098,454],{"class":404},[398,20100,4369],{"class":457},[398,20102,1566],{"class":408},[398,20104,20105],{"class":400,"line":1490},[398,20106,2463],{"class":408},[398,20108,20109,20111,20113,20115,20117],{"class":400,"line":1496},[398,20110,18796],{"class":2239},[398,20112,409],{"class":408},[398,20114,412],{"class":404},[398,20116,15966],{"class":5493},[398,20118,12719],{"class":408},[398,20120,20121,20123,20125,20128,20130],{"class":400,"line":1587},[398,20122,9946],{"class":408},[398,20124,1445],{"class":404},[398,20126,20127],{"class":513}," \"有参构造函数!\"",[398,20129,1720],{"class":404},[398,20131,9117],{"class":408},[398,20133,20134,20136,20138],{"class":400,"line":1593},[398,20135,20096],{"class":408},[398,20137,454],{"class":404},[398,20139,8074],{"class":408},[398,20141,20142],{"class":400,"line":1605},[398,20143,2463],{"class":408},[398,20145,20146,20148,20150,20152,20154,20156,20158],{"class":400,"line":1888},[398,20147,18796],{"class":2239},[398,20149,409],{"class":408},[398,20151,7069],{"class":404},[398,20153,15846],{"class":2239},[398,20155,755],{"class":404},[398,20157,7102],{"class":5493},[398,20159,12719],{"class":408},[398,20161,20162,20164,20166,20169,20171],{"class":400,"line":1893},[398,20163,9946],{"class":408},[398,20165,1445],{"class":404},[398,20167,20168],{"class":513}," \"拷贝构造函数!\"",[398,20170,1720],{"class":404},[398,20172,9117],{"class":408},[398,20174,20175,20177,20179],{"class":400,"line":1899},[398,20176,20096],{"class":408},[398,20178,454],{"class":404},[398,20180,20181],{"class":408}," p.mAge;\n",[398,20183,20184],{"class":400,"line":1904},[398,20185,2463],{"class":408},[398,20187,20188],{"class":400,"line":1918},[398,20189,20190],{"class":467},"    \u002F\u002F析构函数在释放内存之前调用\n",[398,20192,20193,20195],{"class":400,"line":1923},[398,20194,18829],{"class":2239},[398,20196,11130],{"class":408},[398,20198,20199,20201,20203,20206,20208],{"class":400,"line":1929},[398,20200,9946],{"class":408},[398,20202,1445],{"class":404},[398,20204,20205],{"class":513}," \"析构函数!\"",[398,20207,1720],{"class":404},[398,20209,9117],{"class":408},[398,20211,20212],{"class":400,"line":1950},[398,20213,2463],{"class":408},[398,20215,20216],{"class":400,"line":1955},[398,20217,14993],{"class":404},[398,20219,20220,20222],{"class":400,"line":1969},[398,20221,2261],{"class":404},[398,20223,20224],{"class":408}," mAge;\n",[398,20226,20227],{"class":400,"line":1974},[398,20228,4271],{"class":408},[398,20230,20231],{"class":400,"line":2003},[398,20232,2676],{"emptyLinePlaceholder":328},[398,20234,20235],{"class":400,"line":2008},[398,20236,20237],{"class":467},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[398,20239,20240,20242,20244],{"class":400,"line":2025},[398,20241,5641],{"class":404},[398,20243,5865],{"class":2239},[398,20245,11130],{"class":408},[398,20247,20248],{"class":400,"line":2030},[398,20249,2676],{"emptyLinePlaceholder":328},[398,20251,20252,20254,20257,20259,20261,20263],{"class":400,"line":2035},[398,20253,19708],{"class":408},[398,20255,20256],{"class":2239},"man",[398,20258,409],{"class":408},[398,20260,713],{"class":457},[398,20262,6243],{"class":408},[398,20264,20265],{"class":467}," \u002F\u002Fp对象已经创建完毕\n",[398,20267,20268,20270,20273,20276],{"class":400,"line":2040},[398,20269,19708],{"class":408},[398,20271,20272],{"class":2239},"newman",[398,20274,20275],{"class":408},"(man);",[398,20277,20278],{"class":467}," \u002F\u002F调用拷贝构造函数\n",[398,20280,20281,20284,20286,20289],{"class":400,"line":2054},[398,20282,20283],{"class":408},"    Person newman2 ",[398,20285,454],{"class":404},[398,20287,20288],{"class":408}," man;",[398,20290,20291],{"class":467}," \u002F\u002F拷贝构造\n",[398,20293,20294],{"class":400,"line":2059},[398,20295,2676],{"emptyLinePlaceholder":328},[398,20297,20298],{"class":400,"line":2853},[398,20299,20300],{"class":467},"    \u002F\u002FPerson newman3;\n",[398,20302,20303,20306],{"class":400,"line":2867},[398,20304,20305],{"class":467},"    \u002F\u002Fnewman3 = man;",[398,20307,20308],{"class":467}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[398,20310,20311],{"class":400,"line":2875},[398,20312,1841],{"class":408},[398,20314,20315],{"class":400,"line":2880},[398,20316,2676],{"emptyLinePlaceholder":328},[398,20318,20319],{"class":400,"line":2886},[398,20320,20321],{"class":467},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[398,20323,20324],{"class":400,"line":2892},[398,20325,20326],{"class":467},"\u002F\u002F相当于Person p1 = p;\n",[398,20328,20329,20331,20333,20335,20337,20340],{"class":400,"line":2897},[398,20330,5641],{"class":404},[398,20332,19763],{"class":2239},[398,20334,409],{"class":408},[398,20336,19323],{"class":2239},[398,20338,20339],{"class":5493}," p1",[398,20341,20342],{"class":408},") {}\n",[398,20344,20345,20347,20349],{"class":400,"line":8225},[398,20346,5641],{"class":404},[398,20348,5934],{"class":2239},[398,20350,11130],{"class":408},[398,20352,20353,20355],{"class":400,"line":8249},[398,20354,18881],{"class":408},[398,20356,20357],{"class":467}," \u002F\u002F无参构造函数\n",[398,20359,20360,20362],{"class":400,"line":8254},[398,20361,19813],{"class":2239},[398,20363,19816],{"class":408},[398,20365,20366],{"class":400,"line":8260},[398,20367,1841],{"class":408},[398,20369,20370],{"class":400,"line":8287},[398,20371,2676],{"emptyLinePlaceholder":328},[398,20373,20374],{"class":400,"line":8292},[398,20375,20376],{"class":467},"\u002F\u002F3. 以值方式返回局部对象\n",[398,20378,20379,20381,20383],{"class":400,"line":8298},[398,20380,19323],{"class":2239},[398,20382,19832],{"class":2239},[398,20384,2252],{"class":408},[398,20386,20387],{"class":400,"line":8310},[398,20388,1822],{"class":408},[398,20390,20391],{"class":400,"line":8322},[398,20392,19313],{"class":408},[398,20394,20395,20397,20399,20401,20403,20405,20407,20409,20412,20414],{"class":400,"line":8334},[398,20396,6806],{"class":408},[398,20398,1445],{"class":404},[398,20400,1934],{"class":408},[398,20402,412],{"class":404},[398,20404,6795],{"class":404},[398,20406,831],{"class":408},[398,20408,755],{"class":404},[398,20410,20411],{"class":408},"p1 ",[398,20413,1445],{"class":404},[398,20415,9117],{"class":408},[398,20417,20418,20420],{"class":400,"line":9993},[398,20419,4366],{"class":404},[398,20421,20422],{"class":408}," p1;\n",[398,20424,20425],{"class":400,"line":10018},[398,20426,1841],{"class":408},[398,20428,20429],{"class":400,"line":10041},[398,20430,2676],{"emptyLinePlaceholder":328},[398,20432,20433,20435,20437],{"class":400,"line":10065},[398,20434,5641],{"class":404},[398,20436,6006],{"class":2239},[398,20438,2252],{"class":408},[398,20440,20441],{"class":400,"line":10070},[398,20442,1822],{"class":408},[398,20444,20445,20447,20449,20451],{"class":400,"line":10075},[398,20446,19898],{"class":408},[398,20448,454],{"class":404},[398,20450,19832],{"class":2239},[398,20452,5913],{"class":408},[398,20454,20455,20457,20459,20461,20463,20465,20467,20469,20471,20473],{"class":400,"line":10080},[398,20456,6806],{"class":408},[398,20458,1445],{"class":404},[398,20460,1934],{"class":408},[398,20462,412],{"class":404},[398,20464,6795],{"class":404},[398,20466,831],{"class":408},[398,20468,755],{"class":404},[398,20470,11725],{"class":408},[398,20472,1445],{"class":404},[398,20474,9117],{"class":408},[398,20476,20477],{"class":400,"line":10089},[398,20478,1841],{"class":408},[398,20480,20481],{"class":400,"line":10094},[398,20482,2676],{"emptyLinePlaceholder":328},[398,20484,20485],{"class":400,"line":10100},[398,20486,2676],{"emptyLinePlaceholder":328},[398,20488,20489,20491,20493],{"class":400,"line":10121},[398,20490,412],{"class":404},[398,20492,2249],{"class":2239},[398,20494,11130],{"class":408},[398,20496,20497],{"class":400,"line":10127},[398,20498,2676],{"emptyLinePlaceholder":328},[398,20500,20501],{"class":400,"line":10141},[398,20502,20503],{"class":467},"    \u002F\u002Ftest01();\n",[398,20505,20506],{"class":400,"line":10147},[398,20507,20508],{"class":467},"    \u002F\u002Ftest02();\n",[398,20510,20511,20513],{"class":400,"line":10174},[398,20512,19968],{"class":2239},[398,20514,5913],{"class":408},[398,20516,20517],{"class":400,"line":10183},[398,20518,2676],{"emptyLinePlaceholder":328},[398,20520,20521,20523,20525,20527],{"class":400,"line":10189},[398,20522,2579],{"class":2239},[398,20524,409],{"class":408},[398,20526,2584],{"class":513},[398,20528,2995],{"class":408},[398,20530,20531],{"class":400,"line":10197},[398,20532,2676],{"emptyLinePlaceholder":328},[398,20534,20535,20537,20539],{"class":400,"line":10202},[398,20536,4366],{"class":404},[398,20538,4369],{"class":457},[398,20540,1566],{"class":408},[398,20542,20543],{"class":400,"line":16881},[398,20544,1841],{"class":408},[14,20546,20548],{"id":20547},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,20550,20551],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,20553,20554],{},"1．默认构造函数(无参，函数体为空)",[19,20556,20557],{},"2．默认析构函数(无参，函数体为空)",[19,20559,20560],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,20562,20563],{},"构造函数调用规则如下：",[67,20565,20566,20569],{},[41,20567,20568],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[41,20570,20571],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[389,20573,20575],{"className":391,"code":20574,"language":393,"meta":316,"style":316},"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",[395,20576,20577,20585,20589,20594,20600,20612,20616,20621,20633,20642,20654,20658,20662,20678,20687,20699,20703,20707,20713,20725,20729,20733,20739,20743,20747,20755,20759,20771,20776,20784,20788,20806,20810,20814,20822,20826,20831,20839,20854,20867,20871,20876,20883,20899,20912,20916,20920,20928,20932,20938,20942,20952,20956,20964],{"__ignoreMap":316},[398,20578,20579,20581,20583],{"class":400,"line":401},[398,20580,14971],{"class":404},[398,20582,15846],{"class":2239},[398,20584,15849],{"class":408},[398,20586,20587],{"class":400,"line":317},[398,20588,14993],{"class":404},[398,20590,20591],{"class":400,"line":320},[398,20592,20593],{"class":467},"    \u002F\u002F无参（默认）构造函数\n",[398,20595,20596,20598],{"class":400,"line":1470},[398,20597,18796],{"class":2239},[398,20599,11130],{"class":408},[398,20601,20602,20604,20606,20608,20610],{"class":400,"line":1476},[398,20603,9946],{"class":408},[398,20605,1445],{"class":404},[398,20607,20087],{"class":513},[398,20609,1720],{"class":404},[398,20611,9117],{"class":408},[398,20613,20614],{"class":400,"line":1490},[398,20615,2463],{"class":408},[398,20617,20618],{"class":400,"line":1496},[398,20619,20620],{"class":467},"    \u002F\u002F有参构造函数\n",[398,20622,20623,20625,20627,20629,20631],{"class":400,"line":1587},[398,20624,18796],{"class":2239},[398,20626,409],{"class":408},[398,20628,412],{"class":404},[398,20630,1674],{"class":5493},[398,20632,12719],{"class":408},[398,20634,20635,20638,20640],{"class":400,"line":1593},[398,20636,20637],{"class":408},"        age ",[398,20639,454],{"class":404},[398,20641,1708],{"class":408},[398,20643,20644,20646,20648,20650,20652],{"class":400,"line":1605},[398,20645,9946],{"class":408},[398,20647,1445],{"class":404},[398,20649,20127],{"class":513},[398,20651,1720],{"class":404},[398,20653,9117],{"class":408},[398,20655,20656],{"class":400,"line":1888},[398,20657,2463],{"class":408},[398,20659,20660],{"class":400,"line":1893},[398,20661,19151],{"class":467},[398,20663,20664,20666,20668,20670,20672,20674,20676],{"class":400,"line":1899},[398,20665,18796],{"class":2239},[398,20667,409],{"class":408},[398,20669,7069],{"class":404},[398,20671,15846],{"class":2239},[398,20673,755],{"class":404},[398,20675,7102],{"class":5493},[398,20677,12719],{"class":408},[398,20679,20680,20682,20684],{"class":400,"line":1904},[398,20681,20637],{"class":408},[398,20683,454],{"class":404},[398,20685,20686],{"class":408}," p.age;\n",[398,20688,20689,20691,20693,20695,20697],{"class":400,"line":1918},[398,20690,9946],{"class":408},[398,20692,1445],{"class":404},[398,20694,20168],{"class":513},[398,20696,1720],{"class":404},[398,20698,9117],{"class":408},[398,20700,20701],{"class":400,"line":1923},[398,20702,2463],{"class":408},[398,20704,20705],{"class":400,"line":1929},[398,20706,18824],{"class":467},[398,20708,20709,20711],{"class":400,"line":1950},[398,20710,18829],{"class":2239},[398,20712,11130],{"class":408},[398,20714,20715,20717,20719,20721,20723],{"class":400,"line":1955},[398,20716,9946],{"class":408},[398,20718,1445],{"class":404},[398,20720,20205],{"class":513},[398,20722,1720],{"class":404},[398,20724,9117],{"class":408},[398,20726,20727],{"class":400,"line":1969},[398,20728,2463],{"class":408},[398,20730,20731],{"class":400,"line":1974},[398,20732,14993],{"class":404},[398,20734,20735,20737],{"class":400,"line":2003},[398,20736,2261],{"class":404},[398,20738,8074],{"class":408},[398,20740,20741],{"class":400,"line":2008},[398,20742,4271],{"class":408},[398,20744,20745],{"class":400,"line":2025},[398,20746,2676],{"emptyLinePlaceholder":328},[398,20748,20749,20751,20753],{"class":400,"line":2030},[398,20750,5641],{"class":404},[398,20752,5865],{"class":2239},[398,20754,2252],{"class":408},[398,20756,20757],{"class":400,"line":2035},[398,20758,1822],{"class":408},[398,20760,20761,20763,20765,20767,20769],{"class":400,"line":2040},[398,20762,19708],{"class":408},[398,20764,7407],{"class":2239},[398,20766,409],{"class":408},[398,20768,1052],{"class":457},[398,20770,2995],{"class":408},[398,20772,20773],{"class":400,"line":2054},[398,20774,20775],{"class":467},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[398,20777,20778,20780,20782],{"class":400,"line":2059},[398,20779,19708],{"class":408},[398,20781,7310],{"class":2239},[398,20783,17792],{"class":408},[398,20785,20786],{"class":400,"line":2853},[398,20787,2676],{"emptyLinePlaceholder":328},[398,20789,20790,20792,20794,20797,20799,20802,20804],{"class":400,"line":2867},[398,20791,6806],{"class":408},[398,20793,1445],{"class":404},[398,20795,20796],{"class":513}," \"p2的年龄为： \"",[398,20798,1720],{"class":404},[398,20800,20801],{"class":408}," p2.age ",[398,20803,1445],{"class":404},[398,20805,9117],{"class":408},[398,20807,20808],{"class":400,"line":2875},[398,20809,1841],{"class":408},[398,20811,20812],{"class":400,"line":2880},[398,20813,2676],{"emptyLinePlaceholder":328},[398,20815,20816,20818,20820],{"class":400,"line":2886},[398,20817,5641],{"class":404},[398,20819,5934],{"class":2239},[398,20821,2252],{"class":408},[398,20823,20824],{"class":400,"line":2892},[398,20825,1822],{"class":408},[398,20827,20828],{"class":400,"line":2897},[398,20829,20830],{"class":467},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[398,20832,20833,20836],{"class":400,"line":8225},[398,20834,20835],{"class":408},"    Person p1;",[398,20837,20838],{"class":467}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[398,20840,20841,20843,20845,20847,20849,20851],{"class":400,"line":8249},[398,20842,19708],{"class":408},[398,20844,7310],{"class":2239},[398,20846,409],{"class":408},[398,20848,848],{"class":457},[398,20850,6243],{"class":408},[398,20852,20853],{"class":467}," \u002F\u002F用户提供的有参\n",[398,20855,20856,20858,20861,20864],{"class":400,"line":8254},[398,20857,19708],{"class":408},[398,20859,20860],{"class":2239},"p3",[398,20862,20863],{"class":408},"(p2);",[398,20865,20866],{"class":467}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[398,20868,20869],{"class":400,"line":8260},[398,20870,2676],{"emptyLinePlaceholder":328},[398,20872,20873],{"class":400,"line":8287},[398,20874,20875],{"class":467},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[398,20877,20878,20881],{"class":400,"line":8292},[398,20879,20880],{"class":408},"    Person p4;",[398,20882,20838],{"class":467},[398,20884,20885,20887,20890,20892,20894,20896],{"class":400,"line":8298},[398,20886,19708],{"class":408},[398,20888,20889],{"class":2239},"p5",[398,20891,409],{"class":408},[398,20893,848],{"class":457},[398,20895,6243],{"class":408},[398,20897,20898],{"class":467}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[398,20900,20901,20903,20906,20909],{"class":400,"line":8310},[398,20902,19708],{"class":408},[398,20904,20905],{"class":2239},"p6",[398,20907,20908],{"class":408},"(p5);",[398,20910,20911],{"class":467}," \u002F\u002F用户自己提供拷贝构造\n",[398,20913,20914],{"class":400,"line":8322},[398,20915,1841],{"class":408},[398,20917,20918],{"class":400,"line":8334},[398,20919,2676],{"emptyLinePlaceholder":328},[398,20921,20922,20924,20926],{"class":400,"line":9993},[398,20923,412],{"class":404},[398,20925,2249],{"class":2239},[398,20927,11130],{"class":408},[398,20929,20930],{"class":400,"line":10018},[398,20931,2676],{"emptyLinePlaceholder":328},[398,20933,20934,20936],{"class":400,"line":10041},[398,20935,5910],{"class":2239},[398,20937,5913],{"class":408},[398,20939,20940],{"class":400,"line":10065},[398,20941,2676],{"emptyLinePlaceholder":328},[398,20943,20944,20946,20948,20950],{"class":400,"line":10070},[398,20945,2579],{"class":2239},[398,20947,409],{"class":408},[398,20949,2584],{"class":513},[398,20951,2995],{"class":408},[398,20953,20954],{"class":400,"line":10075},[398,20955,2676],{"emptyLinePlaceholder":328},[398,20957,20958,20960,20962],{"class":400,"line":10080},[398,20959,4366],{"class":404},[398,20961,4369],{"class":457},[398,20963,1566],{"class":408},[398,20965,20966],{"class":400,"line":10089},[398,20967,1841],{"class":408},[14,20969,20971],{"id":20970},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,20973,20974],{},"浅拷贝：简单的赋值拷贝操作",[19,20976,20977],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[389,20979,20981],{"className":391,"code":20980,"language":393,"meta":316,"style":316},"#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",[395,20982,20983,20989,20999,21005,21009,21013,21018,21024,21028,21041,21045,21049,21056,21060,21070,21085,21098,21102,21107,21112,21128,21132,21145,21150,21155,21160,21169,21174,21189,21193,21197,21201,21207,21211,21216,21231,21235,21246,21260,21264,21273,21277,21283,21295,21299,21307,21311,21328,21359,21367,21395,21399,21403,21411,21415,21421],{"__ignoreMap":316},[398,20984,20985,20987],{"class":400,"line":401},[398,20986,2225],{"class":404},[398,20988,2228],{"class":513},[398,20990,20991,20993,20995,20997],{"class":400,"line":317},[398,20992,2233],{"class":404},[398,20994,2236],{"class":404},[398,20996,2240],{"class":2239},[398,20998,1566],{"class":408},[398,21000,21001,21003],{"class":400,"line":320},[398,21002,14971],{"class":404},[398,21004,15448],{"class":2239},[398,21006,21007],{"class":400,"line":1470},[398,21008,1822],{"class":408},[398,21010,21011],{"class":400,"line":1476},[398,21012,14993],{"class":404},[398,21014,21015],{"class":400,"line":1490},[398,21016,21017],{"class":467},"    \u002F\u002F默认构造函数\n",[398,21019,21020,21022],{"class":400,"line":1496},[398,21021,18796],{"class":2239},[398,21023,2252],{"class":408},[398,21025,21026],{"class":400,"line":1587},[398,21027,2306],{"class":408},[398,21029,21030,21032,21034,21037,21039],{"class":400,"line":1593},[398,21031,3727],{"class":408},[398,21033,1445],{"class":404},[398,21035,21036],{"class":513},"\"默认构造函数\"",[398,21038,1445],{"class":404},[398,21040,1467],{"class":408},[398,21042,21043],{"class":400,"line":1605},[398,21044,2463],{"class":408},[398,21046,21047],{"class":400,"line":1888},[398,21048,20620],{"class":467},[398,21050,21051,21053],{"class":400,"line":1893},[398,21052,18829],{"class":2239},[398,21054,21055],{"class":408},"(int age,int height)\n",[398,21057,21058],{"class":400,"line":1899},[398,21059,2306],{"class":408},[398,21061,21062,21065,21067],{"class":400,"line":1904},[398,21063,21064],{"class":408},"        m_Age",[398,21066,454],{"class":404},[398,21068,21069],{"class":408},"age;\n",[398,21071,21072,21075,21077,21079,21082],{"class":400,"line":1918},[398,21073,21074],{"class":408},"        m_Height",[398,21076,11994],{"class":404},[398,21078,2658],{"class":404},[398,21080,21081],{"class":408},"(height);",[398,21083,21084],{"class":467},"\u002F\u002F放到堆区\n",[398,21086,21087,21089,21091,21094,21096],{"class":400,"line":1923},[398,21088,3727],{"class":408},[398,21090,1445],{"class":404},[398,21092,21093],{"class":513},"\"有参构造函数\"",[398,21095,1445],{"class":404},[398,21097,1467],{"class":408},[398,21099,21100],{"class":400,"line":1929},[398,21101,2463],{"class":408},[398,21103,21104],{"class":400,"line":1950},[398,21105,21106],{"class":467},"    \u002F\u002F深拷贝解决上述问题\n",[398,21108,21109],{"class":400,"line":1955},[398,21110,21111],{"class":467},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[398,21113,21114,21116,21118,21120,21122,21124,21126],{"class":400,"line":1969},[398,21115,18796],{"class":2239},[398,21117,409],{"class":408},[398,21119,7069],{"class":404},[398,21121,15846],{"class":2239},[398,21123,10861],{"class":404},[398,21125,19],{"class":5493},[398,21127,415],{"class":408},[398,21129,21130],{"class":400,"line":1974},[398,21131,2306],{"class":408},[398,21133,21134,21136,21138,21141,21143],{"class":400,"line":2003},[398,21135,3727],{"class":408},[398,21137,1445],{"class":404},[398,21139,21140],{"class":513},"\"拷贝构造函数\"",[398,21142,1445],{"class":404},[398,21144,1467],{"class":408},[398,21146,21147],{"class":400,"line":2008},[398,21148,21149],{"class":467},"        \u002F\u002F编译器默认的写如下注释部分\n",[398,21151,21152],{"class":400,"line":2025},[398,21153,21154],{"class":467},"        \u002F\u002Fm_Age=p.m_Age;\n",[398,21156,21157],{"class":400,"line":2030},[398,21158,21159],{"class":467},"        \u002F\u002Fm_Height=p.m_Height;\n",[398,21161,21162,21164,21166],{"class":400,"line":2035},[398,21163,21064],{"class":408},[398,21165,454],{"class":404},[398,21167,21168],{"class":408},"p.m_Age;\n",[398,21170,21171],{"class":400,"line":2040},[398,21172,21173],{"class":467},"        \u002F\u002F深拷贝操作\n",[398,21175,21176,21178,21180,21182,21184,21186],{"class":400,"line":2054},[398,21177,21074],{"class":408},[398,21179,11994],{"class":404},[398,21181,2658],{"class":404},[398,21183,409],{"class":408},[398,21185,857],{"class":404},[398,21187,21188],{"class":408},"p.m_Height);\n",[398,21190,21191],{"class":400,"line":2059},[398,21192,2463],{"class":408},[398,21194,21195],{"class":400,"line":2853},[398,21196,2676],{"emptyLinePlaceholder":328},[398,21198,21199],{"class":400,"line":2867},[398,21200,18824],{"class":467},[398,21202,21203,21205],{"class":400,"line":2875},[398,21204,18829],{"class":2239},[398,21206,2252],{"class":408},[398,21208,21209],{"class":400,"line":2880},[398,21210,2306],{"class":408},[398,21212,21213],{"class":400,"line":2886},[398,21214,21215],{"class":467},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[398,21217,21218,21220,21223,21226,21229],{"class":400,"line":2892},[398,21219,2773],{"class":404},[398,21221,21222],{"class":408},"(m_Height ",[398,21224,21225],{"class":404},"!=",[398,21227,21228],{"class":457}," NULL",[398,21230,415],{"class":408},[398,21232,21233],{"class":400,"line":2897},[398,21234,2786],{"class":408},[398,21236,21237,21240,21243],{"class":400,"line":8225},[398,21238,21239],{"class":404},"            delete",[398,21241,21242],{"class":408}," m_Height;",[398,21244,21245],{"class":467}," \u002F\u002F释放堆区内存\n",[398,21247,21248,21251,21253,21255,21257],{"class":400,"line":8249},[398,21249,21250],{"class":408},"            m_Height",[398,21252,454],{"class":404},[398,21254,2668],{"class":457},[398,21256,464],{"class":408},[398,21258,21259],{"class":467}," \u002F\u002F防止野指针\n",[398,21261,21262],{"class":400,"line":8254},[398,21263,2805],{"class":408},[398,21265,21266,21268,21270],{"class":400,"line":8260},[398,21267,3727],{"class":408},[398,21269,1445],{"class":404},[398,21271,21272],{"class":513},"\"Person的析构函数调用\"\n",[398,21274,21275],{"class":400,"line":8287},[398,21276,2463],{"class":408},[398,21278,21279,21281],{"class":400,"line":8292},[398,21280,2261],{"class":404},[398,21282,15943],{"class":408},[398,21284,21285,21287,21289,21292],{"class":400,"line":8298},[398,21286,2261],{"class":404},[398,21288,6795],{"class":404},[398,21290,21291],{"class":408},"m_Height;",[398,21293,21294],{"class":467}," \u002F\u002F定义一个指针，指向身高\n",[398,21296,21297],{"class":400,"line":8310},[398,21298,4271],{"class":408},[398,21300,21301,21303,21305],{"class":400,"line":8322},[398,21302,5641],{"class":404},[398,21304,5865],{"class":2239},[398,21306,2252],{"class":408},[398,21308,21309],{"class":400,"line":8334},[398,21310,1822],{"class":408},[398,21312,21313,21315,21317,21319,21321,21323,21326],{"class":400,"line":9993},[398,21314,19708],{"class":408},[398,21316,7407],{"class":2239},[398,21318,409],{"class":408},[398,21320,1052],{"class":457},[398,21322,780],{"class":408},[398,21324,21325],{"class":457},"160",[398,21327,2995],{"class":408},[398,21329,21330,21332,21334,21337,21339,21342,21344,21347,21349,21352,21354,21356],{"class":400,"line":10018},[398,21331,1827],{"class":408},[398,21333,1445],{"class":404},[398,21335,21336],{"class":513},"\"p1的年龄为:\"",[398,21338,1445],{"class":404},[398,21340,21341],{"class":408},"p1.m_Age",[398,21343,1445],{"class":404},[398,21345,21346],{"class":513},"\"身高为：\"",[398,21348,6696],{"class":404},[398,21350,21351],{"class":408},"p1.m_Height",[398,21353,1445],{"class":404},[398,21355,1514],{"class":408},[398,21357,21358],{"class":467},"  \u002F\u002F18\n",[398,21360,21361,21363,21365],{"class":400,"line":10041},[398,21362,19708],{"class":408},[398,21364,7310],{"class":2239},[398,21366,17792],{"class":408},[398,21368,21369,21371,21373,21376,21378,21380,21382,21384,21386,21389,21391,21393],{"class":400,"line":10065},[398,21370,1827],{"class":408},[398,21372,1445],{"class":404},[398,21374,21375],{"class":513},"\"p2的年龄为：\"",[398,21377,1445],{"class":404},[398,21379,19738],{"class":408},[398,21381,1445],{"class":404},[398,21383,21346],{"class":513},[398,21385,6696],{"class":404},[398,21387,21388],{"class":408},"p2.m_Height",[398,21390,1445],{"class":404},[398,21392,1514],{"class":408},[398,21394,21358],{"class":467},[398,21396,21397],{"class":400,"line":10070},[398,21398,13487],{"class":408},[398,21400,21401],{"class":400,"line":10075},[398,21402,1841],{"class":408},[398,21404,21405,21407,21409],{"class":400,"line":10080},[398,21406,412],{"class":404},[398,21408,2249],{"class":2239},[398,21410,2252],{"class":408},[398,21412,21413],{"class":400,"line":10089},[398,21414,1822],{"class":408},[398,21416,21417,21419],{"class":400,"line":10094},[398,21418,5910],{"class":2239},[398,21420,5913],{"class":408},[398,21422,21423],{"class":400,"line":10100},[398,21424,1841],{"class":408},[19,21426,21427],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,21429,21430],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,21432,21433],{},[1738,21434],{"alt":316,"src":21435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,21437,21438],{},"浅拷贝问题要使用深拷贝来解决",[19,21440,21441],{},[1738,21442],{"alt":316,"src":21443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,21445,21446],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[14,21448,21450],{"id":21449},"_826初始化列表","8.2.6初始化列表",[19,21452,21453],{},"作用：初始化属性",[19,21455,5458],{},[389,21457,21460],{"className":21458,"code":21459,"language":5464},[5462],"构造函数():属性1(值1),属性2(值2).....{}\n",[395,21461,21459],{"__ignoreMap":316},[19,21463,21464],{},"例子",[389,21466,21468],{"className":391,"code":21467,"language":393,"meta":316,"style":316},"#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",[395,21469,21470,21476,21486,21492,21496,21501,21505,21510,21515,21520,21525,21530,21535,21539,21544,21549,21592,21601,21619,21637,21655,21659,21663,21670,21677,21684,21688,21692,21700,21704,21708,21728,21737,21741,21745,21755,21759,21767],{"__ignoreMap":316},[398,21471,21472,21474],{"class":400,"line":401},[398,21473,2225],{"class":404},[398,21475,2228],{"class":513},[398,21477,21478,21480,21482,21484],{"class":400,"line":317},[398,21479,2233],{"class":404},[398,21481,2236],{"class":404},[398,21483,2240],{"class":2239},[398,21485,1566],{"class":408},[398,21487,21488,21490],{"class":400,"line":320},[398,21489,14971],{"class":404},[398,21491,15448],{"class":2239},[398,21493,21494],{"class":400,"line":1470},[398,21495,1822],{"class":408},[398,21497,21498],{"class":400,"line":1476},[398,21499,21500],{"class":404},"    public:\n",[398,21502,21503],{"class":400,"line":1490},[398,21504,2676],{"emptyLinePlaceholder":328},[398,21506,21507],{"class":400,"line":1496},[398,21508,21509],{"class":467},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[398,21511,21512],{"class":400,"line":1587},[398,21513,21514],{"class":467},"    \u002F\u002FPerson(int a, int b, int c) {\n",[398,21516,21517],{"class":400,"line":1593},[398,21518,21519],{"class":467},"    \u002F\u002F  m_A = a;\n",[398,21521,21522],{"class":400,"line":1605},[398,21523,21524],{"class":467},"    \u002F\u002F  m_B = b;\n",[398,21526,21527],{"class":400,"line":1888},[398,21528,21529],{"class":467},"    \u002F\u002F  m_C = c;\n",[398,21531,21532],{"class":400,"line":1893},[398,21533,21534],{"class":467},"    \u002F\u002F}\n",[398,21536,21537],{"class":400,"line":1899},[398,21538,2676],{"emptyLinePlaceholder":328},[398,21540,21541],{"class":400,"line":1904},[398,21542,21543],{"class":467},"    \u002F\u002F初始化列表方式初始化\n",[398,21545,21546],{"class":400,"line":1918},[398,21547,21548],{"class":467},"    \u002F\u002F使用有参构造函数\n",[398,21550,21551,21553,21555,21557,21559,21561,21563,21565,21567,21569,21571,21574,21577,21580,21583,21586,21589],{"class":400,"line":1923},[398,21552,18796],{"class":2239},[398,21554,409],{"class":408},[398,21556,412],{"class":404},[398,21558,1674],{"class":5493},[398,21560,12712],{"class":408},[398,21562,412],{"class":404},[398,21564,3109],{"class":5493},[398,21566,12712],{"class":408},[398,21568,412],{"class":404},[398,21570,3125],{"class":5493},[398,21572,21573],{"class":408},") :",[398,21575,21576],{"class":2239},"m_A",[398,21578,21579],{"class":408},"(a), ",[398,21581,21582],{"class":2239},"m_B",[398,21584,21585],{"class":408},"(b), ",[398,21587,21588],{"class":2239},"m_C",[398,21590,21591],{"class":408},"(c) {}\n",[398,21593,21594,21596,21599],{"class":400,"line":1929},[398,21595,15186],{"class":404},[398,21597,21598],{"class":2239}," PrintPerson",[398,21600,11130],{"class":408},[398,21602,21603,21605,21607,21610,21612,21615,21617],{"class":400,"line":1950},[398,21604,9946],{"class":408},[398,21606,1445],{"class":404},[398,21608,21609],{"class":513}," \"mA:\"",[398,21611,1720],{"class":404},[398,21613,21614],{"class":408}," m_A ",[398,21616,1445],{"class":404},[398,21618,9117],{"class":408},[398,21620,21621,21623,21625,21628,21630,21633,21635],{"class":400,"line":1955},[398,21622,9946],{"class":408},[398,21624,1445],{"class":404},[398,21626,21627],{"class":513}," \"mB:\"",[398,21629,1720],{"class":404},[398,21631,21632],{"class":408}," m_B ",[398,21634,1445],{"class":404},[398,21636,9117],{"class":408},[398,21638,21639,21641,21643,21646,21648,21651,21653],{"class":400,"line":1969},[398,21640,9946],{"class":408},[398,21642,1445],{"class":404},[398,21644,21645],{"class":513}," \"mC:\"",[398,21647,1720],{"class":404},[398,21649,21650],{"class":408}," m_C ",[398,21652,1445],{"class":404},[398,21654,9117],{"class":408},[398,21656,21657],{"class":400,"line":1974},[398,21658,2463],{"class":408},[398,21660,21661],{"class":400,"line":2003},[398,21662,15499],{"class":404},[398,21664,21665,21667],{"class":400,"line":2008},[398,21666,2261],{"class":404},[398,21668,21669],{"class":408}," m_A;\n",[398,21671,21672,21674],{"class":400,"line":2025},[398,21673,2261],{"class":404},[398,21675,21676],{"class":408}," m_B;\n",[398,21678,21679,21681],{"class":400,"line":2030},[398,21680,2261],{"class":404},[398,21682,21683],{"class":408}," m_C;\n",[398,21685,21686],{"class":400,"line":2035},[398,21687,4271],{"class":408},[398,21689,21690],{"class":400,"line":2040},[398,21691,2676],{"emptyLinePlaceholder":328},[398,21693,21694,21696,21698],{"class":400,"line":2054},[398,21695,412],{"class":404},[398,21697,2249],{"class":2239},[398,21699,6255],{"class":408},[398,21701,21702],{"class":400,"line":2059},[398,21703,1822],{"class":408},[398,21705,21706],{"class":400,"line":2853},[398,21707,2676],{"emptyLinePlaceholder":328},[398,21709,21710,21712,21714,21716,21718,21720,21722,21724,21726],{"class":400,"line":2867},[398,21711,19708],{"class":408},[398,21713,19],{"class":2239},[398,21715,409],{"class":408},[398,21717,619],{"class":457},[398,21719,12712],{"class":408},[398,21721,486],{"class":457},[398,21723,12712],{"class":408},[398,21725,480],{"class":457},[398,21727,2995],{"class":408},[398,21729,21730,21732,21735],{"class":400,"line":2875},[398,21731,16143],{"class":408},[398,21733,21734],{"class":2239},"PrintPerson",[398,21736,5913],{"class":408},[398,21738,21739],{"class":400,"line":2880},[398,21740,2676],{"emptyLinePlaceholder":328},[398,21742,21743],{"class":400,"line":2886},[398,21744,2676],{"emptyLinePlaceholder":328},[398,21746,21747,21749,21751,21753],{"class":400,"line":2892},[398,21748,2579],{"class":2239},[398,21750,409],{"class":408},[398,21752,2584],{"class":513},[398,21754,2995],{"class":408},[398,21756,21757],{"class":400,"line":2897},[398,21758,2676],{"emptyLinePlaceholder":328},[398,21760,21761,21763,21765],{"class":400,"line":8225},[398,21762,4366],{"class":404},[398,21764,4369],{"class":457},[398,21766,1566],{"class":408},[398,21768,21769],{"class":400,"line":8249},[398,21770,1841],{"class":408},[19,21772,21773,21774,21777,21778],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[23,21775,21776],{},"参数名就是定义的对象属性","，",[23,21779,21780],{},"属性后面的值为有参构造函数的形参",[389,21782,21784],{"className":391,"code":21783,"language":393,"meta":316,"style":316},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[395,21785,21786],{"__ignoreMap":316},[398,21787,21788,21790,21792,21794,21797,21799,21802,21804,21807,21809,21812,21814,21817,21819],{"class":400,"line":401},[398,21789,19323],{"class":2239},[398,21791,409],{"class":408},[398,21793,412],{"class":404},[398,21795,21796],{"class":408}," a.",[398,21798,412],{"class":404},[398,21800,21801],{"class":408}," b,",[398,21803,412],{"class":404},[398,21805,21806],{"class":408}," b):",[398,21808,21576],{"class":2239},[398,21810,21811],{"class":408},"(a),",[398,21813,21582],{"class":2239},[398,21815,21816],{"class":408},"(c),",[398,21818,21588],{"class":2239},[398,21820,21821],{"class":408},"(b) {}\n",[14,21823,21825],{"id":21824},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,21827,21828],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,21830,14910],{},[389,21832,21834],{"className":391,"code":21833,"language":393,"meta":316,"style":316},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[395,21835,21836,21841,21846,21850,21855,21859],{"__ignoreMap":316},[398,21837,21838],{"class":400,"line":401},[398,21839,21840],{"class":408},"A{};\n",[398,21842,21843],{"class":400,"line":317},[398,21844,21845],{"class":408},"B\n",[398,21847,21848],{"class":400,"line":320},[398,21849,1822],{"class":408},[398,21851,21852],{"class":400,"line":1470},[398,21853,21854],{"class":408},"    A a;\n",[398,21856,21857],{"class":400,"line":1476},[398,21858,1841],{"class":408},[398,21860,21861],{"class":400,"line":1490},[398,21862,21863],{"class":467},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,21865,21866],{},"案例",[389,21868,21870],{"className":391,"code":21869,"language":393,"meta":316,"style":316},"\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",[395,21871,21872,21877,21884,21888,21893,21898,21912,21916,21926,21937,21941,21948,21952,21965,21969,21974,21979,21983,21989,21993,21997,22001,22032,22036,22047,22051,22057,22061,22074,22078,22082,22086,22091,22096,22100,22108,22112,22129,22148,22152,22160,22164,22170],{"__ignoreMap":316},[398,21873,21874],{"class":400,"line":401},[398,21875,21876],{"class":467},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[398,21878,21879,21881],{"class":400,"line":317},[398,21880,14971],{"class":404},[398,21882,21883],{"class":2239}," Phone\n",[398,21885,21886],{"class":400,"line":320},[398,21887,1822],{"class":408},[398,21889,21890],{"class":400,"line":1470},[398,21891,21892],{"class":408},"public：\n",[398,21894,21895],{"class":400,"line":1476},[398,21896,21897],{"class":467},"    \u002F\u002F 赋值(构造函数)\n",[398,21899,21900,21903,21905,21907,21910],{"class":400,"line":1490},[398,21901,21902],{"class":2239},"    Phone",[398,21904,409],{"class":408},[398,21906,15194],{"class":2239},[398,21908,21909],{"class":5493}," pName",[398,21911,415],{"class":408},[398,21913,21914],{"class":400,"line":1496},[398,21915,2306],{"class":408},[398,21917,21918,21921,21923],{"class":400,"line":1587},[398,21919,21920],{"class":408},"        m_pName",[398,21922,454],{"class":404},[398,21924,21925],{"class":408},"pName;\n",[398,21927,21928,21930,21932,21935],{"class":400,"line":1593},[398,21929,3727],{"class":408},[398,21931,1445],{"class":404},[398,21933,21934],{"class":513},"\"Phone的构造函数调用\"",[398,21936,1566],{"class":408},[398,21938,21939],{"class":400,"line":1605},[398,21940,2463],{"class":408},[398,21942,21943,21946],{"class":400,"line":1888},[398,21944,21945],{"class":2239},"    ~Phone",[398,21947,2252],{"class":408},[398,21949,21950],{"class":400,"line":1893},[398,21951,2306],{"class":408},[398,21953,21954,21956,21958,21961,21963],{"class":400,"line":1899},[398,21955,3727],{"class":408},[398,21957,1445],{"class":404},[398,21959,21960],{"class":513},"\"Phone析构函数调用\"",[398,21962,1445],{"class":404},[398,21964,1467],{"class":408},[398,21966,21967],{"class":400,"line":1904},[398,21968,2463],{"class":408},[398,21970,21971],{"class":400,"line":1918},[398,21972,21973],{"class":467},"    \u002F\u002F\n",[398,21975,21976],{"class":400,"line":1923},[398,21977,21978],{"class":408},"    string m_PName;\n",[398,21980,21981],{"class":400,"line":1929},[398,21982,4271],{"class":408},[398,21984,21985,21987],{"class":400,"line":1950},[398,21986,14971],{"class":404},[398,21988,15448],{"class":2239},[398,21990,21991],{"class":400,"line":1955},[398,21992,1822],{"class":408},[398,21994,21995],{"class":400,"line":1969},[398,21996,14993],{"class":404},[398,21998,21999],{"class":400,"line":1974},[398,22000,17271],{"class":467},[398,22002,22003,22005,22007,22009,22011,22013,22015,22018,22021,22023,22026,22029],{"class":400,"line":2003},[398,22004,18796],{"class":2239},[398,22006,409],{"class":408},[398,22008,15194],{"class":2239},[398,22010,15197],{"class":5493},[398,22012,780],{"class":408},[398,22014,15194],{"class":2239},[398,22016,22017],{"class":5493}," pname",[398,22019,22020],{"class":408},"):",[398,22022,15287],{"class":2239},[398,22024,22025],{"class":408},"(name),m_phone.",[398,22027,22028],{"class":2239},"m_PName",[398,22030,22031],{"class":408},"(pname) \n",[398,22033,22034],{"class":400,"line":2008},[398,22035,2306],{"class":408},[398,22037,22038,22040,22042,22045],{"class":400,"line":2025},[398,22039,3727],{"class":408},[398,22041,1445],{"class":404},[398,22043,22044],{"class":513},"\"Person的构造函数调用\"",[398,22046,1566],{"class":408},[398,22048,22049],{"class":400,"line":2030},[398,22050,2463],{"class":408},[398,22052,22053,22055],{"class":400,"line":2035},[398,22054,18829],{"class":2239},[398,22056,2252],{"class":408},[398,22058,22059],{"class":400,"line":2040},[398,22060,2306],{"class":408},[398,22062,22063,22065,22067,22070,22072],{"class":400,"line":2054},[398,22064,3727],{"class":408},[398,22066,1445],{"class":404},[398,22068,22069],{"class":513},"\"Person析构函数调用\"",[398,22071,1445],{"class":404},[398,22073,1467],{"class":408},[398,22075,22076],{"class":400,"line":2059},[398,22077,2463],{"class":408},[398,22079,22080],{"class":400,"line":2853},[398,22081,8057],{"class":467},[398,22083,22084],{"class":400,"line":2867},[398,22085,15169],{"class":408},[398,22087,22088],{"class":400,"line":2875},[398,22089,22090],{"class":467},"    \u002F\u002F手机\n",[398,22092,22093],{"class":400,"line":2880},[398,22094,22095],{"class":408},"    Phone m_Phone;\n",[398,22097,22098],{"class":400,"line":2886},[398,22099,4271],{"class":408},[398,22101,22102,22104,22106],{"class":400,"line":2892},[398,22103,5641],{"class":404},[398,22105,5865],{"class":2239},[398,22107,2252],{"class":408},[398,22109,22110],{"class":400,"line":2897},[398,22111,1822],{"class":408},[398,22113,22114,22116,22118,22120,22122,22124,22127],{"class":400,"line":8225},[398,22115,19708],{"class":408},[398,22117,19],{"class":2239},[398,22119,409],{"class":408},[398,22121,8193],{"class":513},[398,22123,780],{"class":408},[398,22125,22126],{"class":513},"\"安卓\"",[398,22128,2995],{"class":408},[398,22130,22131,22133,22135,22138,22140,22143,22145],{"class":400,"line":8249},[398,22132,1827],{"class":408},[398,22134,1445],{"class":404},[398,22136,22137],{"class":408},"p.Name",[398,22139,1445],{"class":404},[398,22141,22142],{"class":513},"\"拿着：\"",[398,22144,1445],{"class":404},[398,22146,22147],{"class":408},"p.m_phone.m_PName;\n",[398,22149,22150],{"class":400,"line":8254},[398,22151,1841],{"class":408},[398,22153,22154,22156,22158],{"class":400,"line":8260},[398,22155,412],{"class":404},[398,22157,2249],{"class":2239},[398,22159,2252],{"class":408},[398,22161,22162],{"class":400,"line":8287},[398,22163,1822],{"class":408},[398,22165,22166,22168],{"class":400,"line":8292},[398,22167,5910],{"class":2239},[398,22169,5913],{"class":408},[398,22171,22172],{"class":400,"line":8298},[398,22173,1841],{"class":408},[19,22175,9302],{},[389,22177,22179],{"className":391,"code":22178,"language":393,"meta":316,"style":316},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[395,22180,22181,22186],{"__ignoreMap":316},[398,22182,22183],{"class":400,"line":401},[398,22184,22185],{"class":467},"    \u002F\u002F不需要写这个：\n",[398,22187,22188],{"class":400,"line":317},[398,22189,22190],{"class":467},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,22192,22193],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[389,22195,22197],{"className":391,"code":22196,"language":393,"meta":316,"style":316},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[395,22198,22199],{"__ignoreMap":316},[398,22200,22201,22203,22206,22208,22211,22214],{"class":400,"line":401},[398,22202,19323],{"class":2239},[398,22204,22205],{"class":408},"(string name.string pname):",[398,22207,15287],{"class":2239},[398,22209,22210],{"class":408},"(name),",[398,22212,22213],{"class":2239},"m_phone",[398,22215,22216],{"class":408},"(pname) {}\n",[19,22218,22219,22220,454,22223],{},"采用的是隐式转换法，实际为如下：\n",[395,22221,22222],{},"m_phone(pname)",[395,22224,22225],{},"Phone m_phone=pname",[19,22227,22228,22231],{},[23,22229,22230],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,22233,22234],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[14,22236,22238],{"id":22237},"_828静态对象","8.2.8静态对象",[19,22240,22241],{},"静态对象在成员对象前static，称为静态对象",[19,22243,22244],{},"静态对象分为两类：",[38,22246,22247],{},[41,22248,22249],{},"静态成员变量",[67,22251,22252,22255,22258],{},[41,22253,22254],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[41,22256,22257],{},"②在编译阶段分配内存",[41,22259,22260],{},"③类内声明，类外初始化",[38,22262,22263],{"start":317},[41,22264,22265],{},"静态成员函数",[67,22267,22268,22271],{},[41,22269,22270],{},"①所有对象共享同一个函数",[41,22272,22273],{},"②静态成员函数只能访问静态成员变量",[22275,22276,22278],"h4",{"id":22277},"_8281静态成员变量","8.2.8.1静态成员变量",[389,22280,22282],{"className":391,"code":22281,"language":393,"meta":316,"style":316},"#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",[395,22283,22284,22290,22300,22306,22310,22314,22319,22324,22329,22337,22341,22345,22349,22357,22361,22365,22370,22383,22387,22395,22399,22405],{"__ignoreMap":316},[398,22285,22286,22288],{"class":400,"line":401},[398,22287,2225],{"class":404},[398,22289,2228],{"class":513},[398,22291,22292,22294,22296,22298],{"class":400,"line":317},[398,22293,2233],{"class":404},[398,22295,2236],{"class":404},[398,22297,2240],{"class":2239},[398,22299,1566],{"class":408},[398,22301,22302,22304],{"class":400,"line":320},[398,22303,14971],{"class":404},[398,22305,15448],{"class":2239},[398,22307,22308],{"class":400,"line":1470},[398,22309,1822],{"class":408},[398,22311,22312],{"class":400,"line":1476},[398,22313,14993],{"class":404},[398,22315,22316],{"class":400,"line":1490},[398,22317,22318],{"class":467},"    \u002F\u002F非静态成员变量\n",[398,22320,22321],{"class":400,"line":1496},[398,22322,22323],{"class":467},"    \u002F\u002F int m_A;\n",[398,22325,22326],{"class":400,"line":1587},[398,22327,22328],{"class":467},"    \u002F\u002F定义静态成员变量\n",[398,22330,22331,22333,22335],{"class":400,"line":1593},[398,22332,11297],{"class":404},[398,22334,2658],{"class":404},[398,22336,21669],{"class":408},[398,22338,22339],{"class":400,"line":1605},[398,22340,2676],{"emptyLinePlaceholder":328},[398,22342,22343],{"class":400,"line":1888},[398,22344,2676],{"emptyLinePlaceholder":328},[398,22346,22347],{"class":400,"line":1893},[398,22348,4271],{"class":408},[398,22350,22351,22353,22355],{"class":400,"line":1899},[398,22352,5641],{"class":404},[398,22354,5865],{"class":2239},[398,22356,2252],{"class":408},[398,22358,22359],{"class":400,"line":1904},[398,22360,1822],{"class":408},[398,22362,22363],{"class":400,"line":1918},[398,22364,15590],{"class":408},[398,22366,22367],{"class":400,"line":1923},[398,22368,22369],{"class":467},"    \u002F\u002F输出类成员变量这块内存\n",[398,22371,22372,22374,22376,22379,22381],{"class":400,"line":1929},[398,22373,1827],{"class":408},[398,22375,1445],{"class":404},[398,22377,22378],{"class":408},"p.m_A",[398,22380,1445],{"class":404},[398,22382,1467],{"class":408},[398,22384,22385],{"class":400,"line":1950},[398,22386,1841],{"class":408},[398,22388,22389,22391,22393],{"class":400,"line":1955},[398,22390,412],{"class":404},[398,22392,2249],{"class":2239},[398,22394,2252],{"class":408},[398,22396,22397],{"class":400,"line":1969},[398,22398,1822],{"class":408},[398,22400,22401,22403],{"class":400,"line":1974},[398,22402,5910],{"class":2239},[398,22404,2252],{"class":408},[398,22406,22407],{"class":400,"line":2003},[398,22408,1841],{"class":408},[19,22410,22411],{},"此时输出是报错的：无法解析外部命令",[19,22413,22414],{},"解决这一问题：必须用到类内声明，类外初始化操作",[389,22416,22418],{"className":391,"code":22417,"language":393,"meta":316,"style":316},"#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",[395,22419,22420,22426,22436,22442,22446,22450,22455,22463,22467,22472,22487,22495,22499,22503,22508,22513,22525,22530,22541,22546,22551,22564,22568,22576,22580,22586],{"__ignoreMap":316},[398,22421,22422,22424],{"class":400,"line":401},[398,22423,2225],{"class":404},[398,22425,2228],{"class":513},[398,22427,22428,22430,22432,22434],{"class":400,"line":317},[398,22429,2233],{"class":404},[398,22431,2236],{"class":404},[398,22433,2240],{"class":2239},[398,22435,1566],{"class":408},[398,22437,22438,22440],{"class":400,"line":320},[398,22439,14971],{"class":404},[398,22441,15448],{"class":2239},[398,22443,22444],{"class":400,"line":1470},[398,22445,1822],{"class":408},[398,22447,22448],{"class":400,"line":1476},[398,22449,14993],{"class":404},[398,22451,22452],{"class":400,"line":1490},[398,22453,22454],{"class":467},"    \u002F\u002F类内声明\n",[398,22456,22457,22459,22461],{"class":400,"line":1496},[398,22458,11297],{"class":404},[398,22460,2658],{"class":404},[398,22462,21669],{"class":408},[398,22464,22465],{"class":400,"line":1587},[398,22466,4271],{"class":408},[398,22468,22469],{"class":400,"line":1593},[398,22470,22471],{"class":467},"\u002F\u002F类外初始化\n",[398,22473,22474,22476,22478,22481,22483,22485],{"class":400,"line":1605},[398,22475,412],{"class":404},[398,22477,15846],{"class":2239},[398,22479,22480],{"class":408},"::m_A",[398,22482,454],{"class":404},[398,22484,848],{"class":457},[398,22486,1566],{"class":408},[398,22488,22489,22491,22493],{"class":400,"line":1888},[398,22490,5641],{"class":404},[398,22492,5865],{"class":2239},[398,22494,2252],{"class":408},[398,22496,22497],{"class":400,"line":1893},[398,22498,1822],{"class":408},[398,22500,22501],{"class":400,"line":1899},[398,22502,15590],{"class":408},[398,22504,22505],{"class":400,"line":1904},[398,22506,22507],{"class":467},"    \u002F\u002F访问变量的原内存空间\n",[398,22509,22510],{"class":400,"line":1918},[398,22511,22512],{"class":467},"    \u002F\u002F100\n",[398,22514,22515,22517,22519,22521,22523],{"class":400,"line":1923},[398,22516,1827],{"class":408},[398,22518,1445],{"class":404},[398,22520,22378],{"class":408},[398,22522,1445],{"class":404},[398,22524,1467],{"class":408},[398,22526,22527],{"class":400,"line":1929},[398,22528,22529],{"class":408},"    Person p2;\n",[398,22531,22532,22535,22537,22539],{"class":400,"line":1950},[398,22533,22534],{"class":408},"    p2.m_A",[398,22536,454],{"class":404},[398,22538,1998],{"class":457},[398,22540,1566],{"class":408},[398,22542,22543],{"class":400,"line":1955},[398,22544,22545],{"class":467},"    \u002F\u002F继续访问这片空间\n",[398,22547,22548],{"class":400,"line":1969},[398,22549,22550],{"class":467},"    \u002F\u002F200\n",[398,22552,22553,22555,22557,22560,22562],{"class":400,"line":1974},[398,22554,1827],{"class":408},[398,22556,1445],{"class":404},[398,22558,22559],{"class":408},"p2.m_A",[398,22561,1445],{"class":404},[398,22563,1467],{"class":408},[398,22565,22566],{"class":400,"line":2003},[398,22567,1841],{"class":408},[398,22569,22570,22572,22574],{"class":400,"line":2008},[398,22571,412],{"class":404},[398,22573,2249],{"class":2239},[398,22575,2252],{"class":408},[398,22577,22578],{"class":400,"line":2025},[398,22579,1822],{"class":408},[398,22581,22582,22584],{"class":400,"line":2030},[398,22583,5910],{"class":2239},[398,22585,5913],{"class":408},[398,22587,22588],{"class":400,"line":2035},[398,22589,1841],{"class":408},[19,22591,22592],{},[23,22593,22594],{},"静态变量的访问",[389,22596,22598],{"className":391,"code":22597,"language":393,"meta":316,"style":316},"#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",[395,22599,22600,22606,22616,22622,22626,22630,22634,22642,22646,22651,22659,22663,22667,22681,22696,22704,22708,22713,22718,22723,22728,22740,22745,22750,22764,22781,22785,22793,22797,22803],{"__ignoreMap":316},[398,22601,22602,22604],{"class":400,"line":401},[398,22603,2225],{"class":404},[398,22605,2228],{"class":513},[398,22607,22608,22610,22612,22614],{"class":400,"line":317},[398,22609,2233],{"class":404},[398,22611,2236],{"class":404},[398,22613,2240],{"class":2239},[398,22615,1566],{"class":408},[398,22617,22618,22620],{"class":400,"line":320},[398,22619,14971],{"class":404},[398,22621,15448],{"class":2239},[398,22623,22624],{"class":400,"line":1470},[398,22625,1822],{"class":408},[398,22627,22628],{"class":400,"line":1476},[398,22629,14993],{"class":404},[398,22631,22632],{"class":400,"line":1490},[398,22633,22454],{"class":467},[398,22635,22636,22638,22640],{"class":400,"line":1496},[398,22637,11297],{"class":404},[398,22639,2658],{"class":404},[398,22641,21669],{"class":408},[398,22643,22644],{"class":400,"line":1587},[398,22645,15499],{"class":404},[398,22647,22648],{"class":400,"line":1593},[398,22649,22650],{"class":467},"    \u002F\u002F静态成员变量也是有访问权限的\n",[398,22652,22653,22655,22657],{"class":400,"line":1605},[398,22654,11297],{"class":404},[398,22656,2658],{"class":404},[398,22658,21676],{"class":408},[398,22660,22661],{"class":400,"line":1888},[398,22662,4271],{"class":408},[398,22664,22665],{"class":400,"line":1893},[398,22666,22471],{"class":467},[398,22668,22669,22671,22673,22675,22677,22679],{"class":400,"line":1899},[398,22670,412],{"class":404},[398,22672,15846],{"class":2239},[398,22674,22480],{"class":408},[398,22676,454],{"class":404},[398,22678,848],{"class":457},[398,22680,1566],{"class":408},[398,22682,22683,22685,22687,22690,22692,22694],{"class":400,"line":1904},[398,22684,412],{"class":404},[398,22686,15846],{"class":2239},[398,22688,22689],{"class":408},"::m_B",[398,22691,454],{"class":404},[398,22693,1102],{"class":457},[398,22695,1566],{"class":408},[398,22697,22698,22700,22702],{"class":400,"line":1918},[398,22699,5641],{"class":404},[398,22701,5934],{"class":2239},[398,22703,2252],{"class":408},[398,22705,22706],{"class":400,"line":1923},[398,22707,1822],{"class":408},[398,22709,22710],{"class":400,"line":1929},[398,22711,22712],{"class":467},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[398,22714,22715],{"class":400,"line":1950},[398,22716,22717],{"class":467},"    \u002F\u002F静态成员变量有两种访问方式：\n",[398,22719,22720],{"class":400,"line":1955},[398,22721,22722],{"class":467},"    \u002F\u002F1.通过对象进行访问\n",[398,22724,22725],{"class":400,"line":1969},[398,22726,22727],{"class":408},"    Person p;  \n",[398,22729,22730,22732,22734,22736,22738],{"class":400,"line":1974},[398,22731,1827],{"class":408},[398,22733,1445],{"class":404},[398,22735,22378],{"class":408},[398,22737,1445],{"class":404},[398,22739,1467],{"class":408},[398,22741,22742],{"class":400,"line":2003},[398,22743,22744],{"class":467},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[398,22746,22747],{"class":400,"line":2008},[398,22748,22749],{"class":467},"    \u002F\u002F2.通过类名进行访问\n",[398,22751,22752,22754,22756,22758,22760,22762],{"class":400,"line":2025},[398,22753,1827],{"class":408},[398,22755,1445],{"class":404},[398,22757,19323],{"class":2239},[398,22759,22480],{"class":408},[398,22761,1445],{"class":404},[398,22763,1467],{"class":408},[398,22765,22766,22768,22770,22772,22774,22776,22778],{"class":400,"line":2030},[398,22767,1827],{"class":408},[398,22769,1445],{"class":404},[398,22771,19323],{"class":2239},[398,22773,22689],{"class":408},[398,22775,1445],{"class":404},[398,22777,1514],{"class":408},[398,22779,22780],{"class":467}," \u002F\u002F没有访问权限，报错\n",[398,22782,22783],{"class":400,"line":2035},[398,22784,1841],{"class":408},[398,22786,22787,22789,22791],{"class":400,"line":2040},[398,22788,412],{"class":404},[398,22790,2249],{"class":2239},[398,22792,2252],{"class":408},[398,22794,22795],{"class":400,"line":2054},[398,22796,1822],{"class":408},[398,22798,22799,22801],{"class":400,"line":2059},[398,22800,5979],{"class":2239},[398,22802,5913],{"class":408},[398,22804,22805],{"class":400,"line":2853},[398,22806,1841],{"class":408},[22275,22808,22810],{"id":22809},"_8282静态成员函数","8.2.8.2静态成员函数",[19,22812,22813],{},"1.静态成员函数定义与访问",[389,22815,22817],{"className":391,"code":22816,"language":393,"meta":316,"style":316},"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",[395,22818,22819,22825,22829,22833,22838,22849,22853,22867,22871,22875,22883,22887,22892,22897,22901,22909,22914,22924],{"__ignoreMap":316},[398,22820,22821,22823],{"class":400,"line":401},[398,22822,14971],{"class":404},[398,22824,15448],{"class":2239},[398,22826,22827],{"class":400,"line":317},[398,22828,1822],{"class":408},[398,22830,22831],{"class":400,"line":320},[398,22832,14993],{"class":404},[398,22834,22835],{"class":400,"line":1470},[398,22836,22837],{"class":467},"    \u002F\u002F在公共权限下定义静态成员函数\n",[398,22839,22840,22842,22845,22847],{"class":400,"line":1476},[398,22841,11297],{"class":404},[398,22843,22844],{"class":404}," void",[398,22846,11662],{"class":2239},[398,22848,2252],{"class":408},[398,22850,22851],{"class":400,"line":1490},[398,22852,2306],{"class":408},[398,22854,22855,22858,22860,22863,22865],{"class":400,"line":1496},[398,22856,22857],{"class":408},"        coout",[398,22859,1445],{"class":404},[398,22861,22862],{"class":513},"\"静态成员函数的调用\"",[398,22864,1445],{"class":404},[398,22866,1467],{"class":408},[398,22868,22869],{"class":400,"line":1587},[398,22870,2463],{"class":408},[398,22872,22873],{"class":400,"line":1593},[398,22874,4271],{"class":408},[398,22876,22877,22879,22881],{"class":400,"line":1605},[398,22878,5641],{"class":404},[398,22880,5865],{"class":2239},[398,22882,2252],{"class":408},[398,22884,22885],{"class":400,"line":1888},[398,22886,1822],{"class":408},[398,22888,22889],{"class":400,"line":1893},[398,22890,22891],{"class":467},"    \u002F\u002F静态成员函数的调用方式:\n",[398,22893,22894],{"class":400,"line":1899},[398,22895,22896],{"class":467},"    \u002F\u002F1.通过对象访问\n",[398,22898,22899],{"class":400,"line":1904},[398,22900,15590],{"class":408},[398,22902,22903,22905,22907],{"class":400,"line":1918},[398,22904,16143],{"class":408},[398,22906,11828],{"class":2239},[398,22908,5913],{"class":408},[398,22910,22911],{"class":400,"line":1923},[398,22912,22913],{"class":467},"    \u002F\u002F2.通过类名访问\n",[398,22915,22916,22918,22920,22922],{"class":400,"line":1929},[398,22917,18796],{"class":2239},[398,22919,18009],{"class":408},[398,22921,11828],{"class":2239},[398,22923,5913],{"class":408},[398,22925,22926],{"class":400,"line":1950},[398,22927,1841],{"class":408},[38,22929,22930],{"start":317},[41,22931,22932],{},"静态成员函数只能访问静态成员变量",[389,22934,22936],{"className":391,"code":22935,"language":393,"meta":316,"style":316},"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",[395,22937,22938,22944,22948,22952,22956,22966,22970,22984,22989,23001,23005,23016,23026,23030,23034,23038,23048,23052,23065,23069,23073,23077,23081,23095,23103,23107,23111,23115,23119,23127,23131,23141,23146,23150,23158,23162,23168],{"__ignoreMap":316},[398,22939,22940,22942],{"class":400,"line":401},[398,22941,14971],{"class":404},[398,22943,15448],{"class":2239},[398,22945,22946],{"class":400,"line":317},[398,22947,1822],{"class":408},[398,22949,22950],{"class":400,"line":320},[398,22951,14993],{"class":404},[398,22953,22954],{"class":400,"line":1470},[398,22955,22837],{"class":467},[398,22957,22958,22960,22962,22964],{"class":400,"line":1476},[398,22959,11297],{"class":404},[398,22961,22844],{"class":404},[398,22963,11662],{"class":2239},[398,22965,2252],{"class":408},[398,22967,22968],{"class":400,"line":1490},[398,22969,2306],{"class":408},[398,22971,22972,22975,22977,22979,22981],{"class":400,"line":1496},[398,22973,22974],{"class":408},"        m_A",[398,22976,454],{"class":404},[398,22978,713],{"class":457},[398,22980,464],{"class":408},[398,22982,22983],{"class":467}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[398,22985,22986],{"class":400,"line":1587},[398,22987,22988],{"class":467},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[398,22990,22991,22993,22995,22997,22999],{"class":400,"line":1593},[398,22992,22857],{"class":408},[398,22994,1445],{"class":404},[398,22996,22862],{"class":513},[398,22998,1445],{"class":404},[398,23000,1467],{"class":408},[398,23002,23003],{"class":400,"line":1605},[398,23004,2463],{"class":408},[398,23006,23007,23009,23011,23013],{"class":400,"line":1888},[398,23008,11297],{"class":404},[398,23010,2658],{"class":404},[398,23012,15725],{"class":408},[398,23014,23015],{"class":467}," \u002F\u002F静态成员变量\n",[398,23017,23018,23020,23023],{"class":400,"line":1893},[398,23019,2261],{"class":404},[398,23021,23022],{"class":408}," m_B;",[398,23024,23025],{"class":467}," \u002F\u002F非静态成员变量\n",[398,23027,23028],{"class":400,"line":1899},[398,23029,2676],{"emptyLinePlaceholder":328},[398,23031,23032],{"class":400,"line":1904},[398,23033,15499],{"class":404},[398,23035,23036],{"class":400,"line":1918},[398,23037,22650],{"class":467},[398,23039,23040,23042,23044,23046],{"class":400,"line":1923},[398,23041,11297],{"class":404},[398,23043,22844],{"class":404},[398,23045,13895],{"class":2239},[398,23047,2252],{"class":408},[398,23049,23050],{"class":400,"line":1929},[398,23051,2306],{"class":408},[398,23053,23054,23056,23058,23061,23063],{"class":400,"line":1950},[398,23055,3727],{"class":408},[398,23057,1445],{"class":404},[398,23059,23060],{"class":513},"\"这是私有权限下的静态函数调用\"",[398,23062,1445],{"class":404},[398,23064,1467],{"class":408},[398,23066,23067],{"class":400,"line":1955},[398,23068,2463],{"class":408},[398,23070,23071],{"class":400,"line":1969},[398,23072,2676],{"emptyLinePlaceholder":328},[398,23074,23075],{"class":400,"line":1974},[398,23076,2676],{"emptyLinePlaceholder":328},[398,23078,23079],{"class":400,"line":2003},[398,23080,4271],{"class":408},[398,23082,23083,23085,23087,23089,23091,23093],{"class":400,"line":2008},[398,23084,412],{"class":404},[398,23086,15846],{"class":2239},[398,23088,22480],{"class":408},[398,23090,454],{"class":404},[398,23092,593],{"class":457},[398,23094,1566],{"class":408},[398,23096,23097,23099,23101],{"class":400,"line":2025},[398,23098,5641],{"class":404},[398,23100,5865],{"class":2239},[398,23102,2252],{"class":408},[398,23104,23105],{"class":400,"line":2030},[398,23106,1822],{"class":408},[398,23108,23109],{"class":400,"line":2035},[398,23110,22891],{"class":467},[398,23112,23113],{"class":400,"line":2040},[398,23114,22896],{"class":467},[398,23116,23117],{"class":400,"line":2054},[398,23118,15590],{"class":408},[398,23120,23121,23123,23125],{"class":400,"line":2059},[398,23122,16143],{"class":408},[398,23124,11828],{"class":2239},[398,23126,5913],{"class":408},[398,23128,23129],{"class":400,"line":2853},[398,23130,22913],{"class":467},[398,23132,23133,23135,23137,23139],{"class":400,"line":2867},[398,23134,18796],{"class":2239},[398,23136,18009],{"class":408},[398,23138,11828],{"class":2239},[398,23140,5913],{"class":408},[398,23142,23143],{"class":400,"line":2875},[398,23144,23145],{"class":467},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[398,23147,23148],{"class":400,"line":2880},[398,23149,1841],{"class":408},[398,23151,23152,23154,23156],{"class":400,"line":2886},[398,23153,412],{"class":404},[398,23155,2249],{"class":2239},[398,23157,2252],{"class":408},[398,23159,23160],{"class":400,"line":2892},[398,23161,1822],{"class":408},[398,23163,23164,23166],{"class":400,"line":2897},[398,23165,5910],{"class":2239},[398,23167,5913],{"class":408},[398,23169,23170],{"class":400,"line":8225},[398,23171,1841],{"class":408},[14,23173,23175],{"id":23174},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22275,23177,23179],{"id":23178},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,23181,23182],{},"在c++中，类内的成员变量和成员函数分开存储",[19,23184,23185],{},"只有非静态成员变量才属于类的对象上",[23187,23188,23190],"h5",{"id":23189},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[389,23192,23194],{"className":391,"code":23193,"language":393,"meta":316,"style":316},"#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",[395,23195,23196,23203,23213,23219,23223,23227,23231,23239,23243,23247,23270,23274,23282,23286,23292],{"__ignoreMap":316},[398,23197,23198,23200],{"class":400,"line":401},[398,23199,2225],{"class":404},[398,23201,23202],{"class":513},"\u003Ciostraem>\n",[398,23204,23205,23207,23209,23211],{"class":400,"line":317},[398,23206,2233],{"class":404},[398,23208,2236],{"class":404},[398,23210,2240],{"class":2239},[398,23212,1566],{"class":408},[398,23214,23215,23217],{"class":400,"line":320},[398,23216,14971],{"class":404},[398,23218,15448],{"class":2239},[398,23220,23221],{"class":400,"line":1470},[398,23222,1822],{"class":408},[398,23224,23225],{"class":400,"line":1476},[398,23226,2676],{"emptyLinePlaceholder":328},[398,23228,23229],{"class":400,"line":1490},[398,23230,4271],{"class":408},[398,23232,23233,23235,23237],{"class":400,"line":1496},[398,23234,5641],{"class":404},[398,23236,5865],{"class":2239},[398,23238,2252],{"class":408},[398,23240,23241],{"class":400,"line":1587},[398,23242,1822],{"class":408},[398,23244,23245],{"class":400,"line":1593},[398,23246,15590],{"class":408},[398,23248,23249,23251,23253,23256,23258,23261,23263,23265,23267],{"class":400,"line":1605},[398,23250,1827],{"class":408},[398,23252,1445],{"class":404},[398,23254,23255],{"class":513},"\"size of p=\"",[398,23257,1445],{"class":404},[398,23259,23260],{"class":2239},"sizeoif",[398,23262,6816],{"class":408},[398,23264,1445],{"class":404},[398,23266,1514],{"class":408},[398,23268,23269],{"class":467}," \u002F\u002F查看这个空类的占用的内存空间\n",[398,23271,23272],{"class":400,"line":1888},[398,23273,1841],{"class":408},[398,23275,23276,23278,23280],{"class":400,"line":1893},[398,23277,412],{"class":404},[398,23279,2249],{"class":2239},[398,23281,2252],{"class":408},[398,23283,23284],{"class":400,"line":1899},[398,23285,1822],{"class":408},[398,23287,23288,23290],{"class":400,"line":1904},[398,23289,5910],{"class":2239},[398,23291,5913],{"class":408},[398,23293,23294],{"class":400,"line":1918},[398,23295,1841],{"class":408},[19,23297,23298],{},"输出结果为：size of p=1",[19,23300,23301],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,23303,23304],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23187,23306,23308],{"id":23307},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[389,23310,23312],{"className":391,"code":23311,"language":393,"meta":316,"style":316},"#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",[395,23313,23314,23320,23330,23338,23342,23351,23355,23363,23367,23371,23390,23394,23398,23406,23410,23416],{"__ignoreMap":316},[398,23315,23316,23318],{"class":400,"line":401},[398,23317,2225],{"class":404},[398,23319,2228],{"class":513},[398,23321,23322,23324,23326,23328],{"class":400,"line":317},[398,23323,2233],{"class":404},[398,23325,2236],{"class":404},[398,23327,2240],{"class":2239},[398,23329,1566],{"class":408},[398,23331,23332,23334,23336],{"class":400,"line":320},[398,23333,14971],{"class":404},[398,23335,15846],{"class":2239},[398,23337,2950],{"class":408},[398,23339,23340],{"class":400,"line":1470},[398,23341,1822],{"class":408},[398,23343,23344,23346,23348],{"class":400,"line":1476},[398,23345,2261],{"class":404},[398,23347,15725],{"class":408},[398,23349,23350],{"class":467},"\u002F\u002F非静态成员变量\n",[398,23352,23353],{"class":400,"line":1490},[398,23354,4271],{"class":408},[398,23356,23357,23359,23361],{"class":400,"line":1496},[398,23358,5641],{"class":404},[398,23360,5865],{"class":2239},[398,23362,2252],{"class":408},[398,23364,23365],{"class":400,"line":1587},[398,23366,1822],{"class":408},[398,23368,23369],{"class":400,"line":1593},[398,23370,15590],{"class":408},[398,23372,23373,23375,23377,23379,23381,23383,23385,23387],{"class":400,"line":1605},[398,23374,1827],{"class":408},[398,23376,1445],{"class":404},[398,23378,23255],{"class":513},[398,23380,1648],{"class":404},[398,23382,6816],{"class":408},[398,23384,1445],{"class":404},[398,23386,1514],{"class":408},[398,23388,23389],{"class":467}," \u002F\u002F查看不是空对象时占用多少内存\n",[398,23391,23392],{"class":400,"line":1888},[398,23393,2676],{"emptyLinePlaceholder":328},[398,23395,23396],{"class":400,"line":1893},[398,23397,1841],{"class":408},[398,23399,23400,23402,23404],{"class":400,"line":1899},[398,23401,412],{"class":404},[398,23403,2249],{"class":2239},[398,23405,2252],{"class":408},[398,23407,23408],{"class":400,"line":1904},[398,23409,1822],{"class":408},[398,23411,23412,23414],{"class":400,"line":1918},[398,23413,5910],{"class":2239},[398,23415,5913],{"class":408},[398,23417,23418],{"class":400,"line":1923},[398,23419,1841],{"class":408},[19,23421,23422],{},"输出结果：size of p=4",[19,23424,23425],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[38,23427,23428],{},[41,23429,23430],{},"如果加上非静态成员变量，Person类修改如下",[389,23432,23434],{"className":391,"code":23433,"language":393,"meta":316,"style":316},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[395,23435,23436,23442,23446,23452,23460,23464,23469],{"__ignoreMap":316},[398,23437,23438,23440],{"class":400,"line":401},[398,23439,14971],{"class":404},[398,23441,15448],{"class":2239},[398,23443,23444],{"class":400,"line":317},[398,23445,1822],{"class":408},[398,23447,23448,23450],{"class":400,"line":320},[398,23449,2261],{"class":404},[398,23451,21669],{"class":408},[398,23453,23454,23456,23458],{"class":400,"line":1470},[398,23455,11297],{"class":404},[398,23457,2658],{"class":404},[398,23459,21676],{"class":408},[398,23461,23462],{"class":400,"line":1476},[398,23463,4271],{"class":408},[398,23465,23466],{"class":400,"line":1490},[398,23467,23468],{"class":467},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[398,23470,23471,23473,23475,23477,23479,23481],{"class":400,"line":1496},[398,23472,412],{"class":404},[398,23474,15846],{"class":2239},[398,23476,22689],{"class":408},[398,23478,454],{"class":404},[398,23480,593],{"class":457},[398,23482,1566],{"class":408},[19,23484,23485],{},"输出结果：4",[19,23487,23488],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[38,23490,23491],{"start":317},[41,23492,23493],{},"加上非静态成员函数",[389,23495,23497],{"className":391,"code":23496,"language":393,"meta":316,"style":316},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[395,23498,23499,23506,23510,23516,23524,23528,23532,23536],{"__ignoreMap":316},[398,23500,23501,23503],{"class":400,"line":401},[398,23502,14971],{"class":404},[398,23504,23505],{"class":2239},"  Person\n",[398,23507,23508],{"class":400,"line":317},[398,23509,1822],{"class":408},[398,23511,23512,23514],{"class":400,"line":320},[398,23513,2261],{"class":404},[398,23515,21669],{"class":408},[398,23517,23518,23520,23522],{"class":400,"line":1470},[398,23519,15186],{"class":404},[398,23521,11662],{"class":2239},[398,23523,2252],{"class":408},[398,23525,23526],{"class":400,"line":1476},[398,23527,2306],{"class":408},[398,23529,23530],{"class":400,"line":1490},[398,23531,2676],{"emptyLinePlaceholder":328},[398,23533,23534],{"class":400,"line":1496},[398,23535,2463],{"class":408},[398,23537,23538],{"class":400,"line":1587},[398,23539,4271],{"class":408},[19,23541,23542],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[38,23544,23545],{"start":320},[41,23546,23547],{},"加上静态成员函数",[389,23549,23551],{"className":391,"code":23550,"language":393,"meta":316,"style":316},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[395,23552,23553,23559,23563,23569,23577,23581,23585,23589,23600,23604,23608,23612],{"__ignoreMap":316},[398,23554,23555,23557],{"class":400,"line":401},[398,23556,14971],{"class":404},[398,23558,23505],{"class":2239},[398,23560,23561],{"class":400,"line":317},[398,23562,1822],{"class":408},[398,23564,23565,23567],{"class":400,"line":320},[398,23566,2261],{"class":404},[398,23568,21669],{"class":408},[398,23570,23571,23573,23575],{"class":400,"line":1470},[398,23572,15186],{"class":404},[398,23574,11662],{"class":2239},[398,23576,2252],{"class":408},[398,23578,23579],{"class":400,"line":1476},[398,23580,2306],{"class":408},[398,23582,23583],{"class":400,"line":1490},[398,23584,2676],{"emptyLinePlaceholder":328},[398,23586,23587],{"class":400,"line":1496},[398,23588,2463],{"class":408},[398,23590,23591,23593,23595,23598],{"class":400,"line":1587},[398,23592,11297],{"class":404},[398,23594,22844],{"class":404},[398,23596,23597],{"class":2239}," func1",[398,23599,2252],{"class":408},[398,23601,23602],{"class":400,"line":1593},[398,23603,2306],{"class":408},[398,23605,23606],{"class":400,"line":1605},[398,23607,2676],{"emptyLinePlaceholder":328},[398,23609,23610],{"class":400,"line":1888},[398,23611,2463],{"class":408},[398,23613,23614],{"class":400,"line":1893},[398,23615,4271],{"class":408},[19,23617,23485],{},[19,23619,23620],{},"解释：静态成员函数也不属于类上",[5403,23622,7951],{},{"title":316,"searchDepth":317,"depth":317,"links":23624},[23625,23631],{"id":14922,"depth":317,"text":14923,"children":23626},[23627,23628,23629,23630],{"id":14926,"depth":320,"text":14927},{"id":15651,"depth":320,"text":15652},{"id":15823,"depth":320,"text":15824},{"id":16282,"depth":320,"text":16283},{"id":18654,"depth":317,"text":18655,"children":23632},[23633,23634,23635,23636,23637,23638,23639,23640,23641],{"id":18666,"depth":320,"text":18667},{"id":18959,"depth":320,"text":18960},{"id":19450,"depth":320,"text":19451},{"id":20547,"depth":320,"text":20548},{"id":20970,"depth":320,"text":20971},{"id":21449,"depth":320,"text":21450},{"id":21824,"depth":320,"text":21825},{"id":22237,"depth":320,"text":22238},{"id":23174,"depth":320,"text":23175},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14887,"description":23642},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23649,"title":393,"body":23650,"description":23654,"extension":326,"meta":23655,"navigation":328,"path":23657,"seo":23658,"stem":23659,"__hash__":23660},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23651,"toc":23652},[],{"title":316,"searchDepth":317,"depth":317,"links":23653},[],null,{"category":23656},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":393,"description":23654},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23662,"title":23663,"body":23664,"description":316,"extension":326,"meta":24254,"navigation":328,"path":24255,"seo":24256,"stem":24257,"__hash__":24258},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23665,"toc":24236},[23666,23669,23673,23676,23679,23682,23700,23705,23708,23711,23714,23717,23722,23725,23730,23733,23736,23740,23743,23746,23752,23755,23773,23777,23781,23784,23789,23792,23796,23799,23812,23815,23819,23822,23825,23828,23853,23856,23865,23876,23891,23923,23927,23934,23942,23946,23949,23952,23957,23961,23964,23967,23972,23975,23979,23982,23985,23990,23993,23997,24002,24006,24072,24076,24079,24082,24085,24088,24091,24097,24118,24121,24135,24144,24148,24151,24154,24159,24162,24167,24172,24175,24178,24183,24188,24191,24196,24201,24204,24209,24214,24217,24220,24225,24228,24233],[10,23667,23663],{"id":23668},"_1强化学习基本认识",[343,23670,23672],{"id":23671},"_11什么是强化学习","1.1.什么是强化学习",[19,23674,23675],{},"强化学习有两部分组成：智能体和环境；",[19,23677,23678],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,23680,23681],{},"强化学习与监督学习的区别:",[38,23683,23684,23687,23690,23693],{},[41,23685,23686],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[41,23688,23689],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[41,23691,23692],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[41,23694,23695,23696,23699],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[23,23697,23698],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,23701,23702],{},[1738,23703],{"alt":316,"src":23704},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,23706,23707],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,23709,23710],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,23712,23713],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,23715,23716],{},"获取奖励",[19,23718,23719],{},[1738,23720],{"alt":316,"src":23721},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,23723,23724],{},"强化学习可以分成标准强化学习和深度强化学习",[19,23726,23727],{},[1738,23728],{"alt":316,"src":23729},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,23731,23732],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,23734,23735],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[343,23737,23739],{"id":23738},"_12强化学习应用场景","1.2.强化学习应用场景",[19,23741,23742],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,23744,23745],{},"具身智能中的应用",[19,23747,23748,23751],{},[23,23749,23750],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,23753,23754],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,23756,23757,23758,23761,23762,23765,23766,23769,23770],{},"机器人是",[23,23759,23760],{},"躯体","，深度学习是",[23,23763,23764],{},"神经元****网络","，VLA是",[23,23767,23768],{},"通用的行为逻辑","，而强化学习是",[23,23771,23772],{},"教练",[343,23774,23776],{"id":23775},"_13序列决策","1.3.序列决策",[14,23778,23780],{"id":23779},"_131智能体与环境","1.3.1.智能体与环境",[19,23782,23783],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,23785,23786],{},[1738,23787],{"alt":316,"src":23788},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,23790,23791],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[14,23793,23795],{"id":23794},"_132奖励","1.3.2.奖励",[19,23797,23798],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,23800,23801,23802,23811],{},"取某个策略的表现如何。强化学习的目的就是",[23,23803,23804,23805,23810],{},"最大化",[23,23806,23807],{},[23,23808,23809],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,23813,23814],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[14,23816,23818],{"id":23817},"_133序列决策","1.3.3.序列决策",[19,23820,23821],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,23823,23824],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,23826,23827],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,23829,23830,23834,23835,23837,23838,23840,23841,23843,23844,14072,23847,14072,23850],{},[23831,23832,23833],"em",{},"Ht"," = ",[23831,23836,998],{},"1*, a",[23831,23839,619],{},", r",[23831,23842,619],{},", . . . ,* ",[23831,23845,23846],{},"ot",[23831,23848,23849],{},", at ,",[23831,23851,23852],{},"rt",[19,23854,23855],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,23857,23858,23834,23861,1934,23863,831],{},[23831,23859,23860],{},"st",[23831,23862,461],{},[23831,23864,23833],{},[19,23866,23867,23868,23871,23872,23875],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[23,23869,23870],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[23,23873,23874],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,23877,23878,23879,23882,23883,23886,23887,23890],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[23,23880,23881],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[23,23884,23885],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23831,23888,23889],{},"S, A, T, R, Ω, O, γ",")。",[19,23892,23893,23894,23896,23897,23899,23900,409,23902,23905,23906,23908,23909,409,23912,23915,23916,23918,23919,23922],{},"其中 ",[23831,23895,1091],{}," 表示状态空间，为隐变量，",[23831,23898,634],{}," 为动作空间，",[23831,23901,1116],{},[23831,23903,23904],{},"s ′ |s, a",") 为状态转移概率，",[23831,23907,1066],{}," 为奖励函数，",[23831,23910,23911],{},"Ω",[23831,23913,23914],{},"o|s, a",") 为观测概率，",[23831,23917,992],{}," 为观测空间，",[23831,23920,23921],{},"γ"," 为折扣因子。",[343,23924,23926],{"id":23925},"_14动作空间","1.4.动作空间",[19,23928,23929,23930,23933],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[23,23931,23932],{},"动作空间"," ，动作空间分为:",[38,23935,23936,23939],{},[41,23937,23938],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[41,23940,23941],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[343,23943,23945],{"id":23944},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,23947,23948],{},"由策略、价值函数、模型三部分组成",[19,23950,23951],{},"这三者组成马尔可夫决策过程",[19,23953,23954],{},[1738,23955],{"alt":316,"src":23956},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[14,23958,23960],{"id":23959},"_151策略","1.5.1.策略",[19,23962,23963],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,23965,23966],{},"策略可分为两种：",[19,23968,23969],{},[1738,23970],{"alt":316,"src":23971},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,23973,23974],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[14,23976,23978],{"id":23977},"_152价值函数","1.5.2.价值函数",[19,23980,23981],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,23983,23984],{},"价值函数中有一个折扣因子，类似于存款利息",[19,23986,23987],{},[1738,23988],{"alt":316,"src":23989},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,23991,23992],{},"进入某个状态采取的最优动作可以通过Q函数得到",[14,23994,23996],{"id":23995},"_153模型","1.5.3.模型",[19,23998,23999],{},[1738,24000],{"alt":316,"src":24001},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[343,24003,24005],{"id":24004},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[84,24007,24008,24018],{},[87,24009,24010],{},[90,24011,24012,24015],{},[93,24013,24014],{"align":95},"类型",[93,24016,24017],{"align":95},"特点",[101,24019,24020,24030,24040,24050,24062],{},[90,24021,24022,24027],{},[106,24023,24024],{"align":95},[23,24025,24026],{},"基于价值的智能体",[106,24028,24029],{"align":95},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[90,24031,24032,24037],{},[106,24033,24034],{"align":95},[23,24035,24036],{},"基于策略的智能体",[106,24038,24039],{"align":95},"直接学习策略，没有学习价值函数",[90,24041,24042,24047],{},[106,24043,24044],{"align":95},[23,24045,24046],{},"演员-评论员智能体",[106,24048,24049],{"align":95},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[90,24051,24052,24057],{},[106,24053,24054],{"align":95},[23,24055,24056],{},"有模型强化学习智能体",[106,24058,24059],{"align":95},[1738,24060],{"alt":316,"src":24061},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[90,24063,24064,24069],{},[106,24065,24066],{"align":95},[23,24067,24068],{},"免模型强化学习智能体",[106,24070,24071],{"align":95},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[343,24073,24075],{"id":24074},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,24077,24078],{},"学习和规划是序列决策的两个基本问题",[19,24080,24081],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,24083,24084],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,24086,24087],{},"强化学习用到的库：Gym",[19,24089,24090],{},"Gym可以检验强化学习算法的优劣",[19,24092,24093,24096],{},[23,24094,24095],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[389,24098,24102],{"className":24099,"code":24100,"language":24101,"meta":316,"style":316},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[395,24103,24104],{"__ignoreMap":316},[398,24105,24106,24109,24112,24115],{"class":400,"line":401},[398,24107,24108],{"class":2239},"pip",[398,24110,24111],{"class":513}," install",[398,24113,24114],{"class":513}," gym==",[398,24116,24117],{"class":457},"0.25.2\n",[19,24119,24120],{},"显示图形界面需要",[389,24122,24124],{"className":24099,"code":24123,"language":24101,"meta":316,"style":316},"pip install pygame\n",[395,24125,24126],{"__ignoreMap":316},[398,24127,24128,24130,24132],{"class":400,"line":401},[398,24129,24108],{"class":2239},[398,24131,24111],{"class":513},[398,24133,24134],{"class":513}," pygame\n",[19,24136,24137,24138],{},"有关Gym库的相关文档介绍：",[640,24139,24143],{"href":24140,"rel":24141},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[24142],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[343,24145,24147],{"id":24146},"_18一些补充基础概念","1.8.一些补充基础概念",[19,24149,24150],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,24152,24153],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,24155,24156],{},[1738,24157],{"alt":316,"src":24158},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,24160,24161],{},"折扣率需要自己来设定",[19,24163,24164],{},[1738,24165],{"alt":316,"src":24166},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[38,24168,24169],{},[41,24170,24171],{},"状态转移函数：",[19,24173,24174],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,24176,24177],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,24179,24180],{},[1738,24181],{"alt":316,"src":24182},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[38,24184,24185],{"start":317},[41,24186,24187],{},"动作价值函数：",[19,24189,24190],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,24192,24193],{},[1738,24194],{"alt":316,"src":24195},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[38,24197,24198],{"start":320},[41,24199,24200],{},"最优动作价值函数：",[19,24202,24203],{},"这个函数是对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,24205,24206],{},[1738,24207],{"alt":316,"src":24208},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[38,24210,24211],{"start":1470},[41,24212,24213],{},"状态价值函数:",[19,24215,24216],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,24218,24219],{},"它衡量的是“一个具体动作”的长期价值",[19,24221,24222],{},[1738,24223],{"alt":316,"src":24224},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,24226,24227],{},"几个价值函数之间的比较：",[19,24229,24230],{},[1738,24231],{"alt":316,"src":24232},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[5403,24234,24235],{},"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":316,"searchDepth":317,"depth":317,"links":24237},[24238,24239,24240,24245,24246,24251,24252,24253],{"id":23671,"depth":317,"text":23672},{"id":23738,"depth":317,"text":23739},{"id":23775,"depth":317,"text":23776,"children":24241},[24242,24243,24244],{"id":23779,"depth":320,"text":23780},{"id":23794,"depth":320,"text":23795},{"id":23817,"depth":320,"text":23818},{"id":23925,"depth":317,"text":23926},{"id":23944,"depth":317,"text":23945,"children":24247},[24248,24249,24250],{"id":23959,"depth":320,"text":23960},{"id":23977,"depth":320,"text":23978},{"id":23995,"depth":320,"text":23996},{"id":24004,"depth":317,"text":24005},{"id":24074,"depth":317,"text":24075},{"id":24146,"depth":317,"text":24147},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23663,"description":316},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24260,"title":24261,"body":24262,"description":24269,"extension":326,"meta":24280,"navigation":328,"path":24281,"seo":24282,"stem":24283,"__hash__":24284},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24263,"toc":24278},[24264,24267,24270,24275],[10,24265,24261],{"id":24266},"_2马尔可夫决策过程",[19,24268,24269],{},"这是强化学习的基本框架",[19,24271,24272],{},[1738,24273],{"alt":316,"src":24274},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,24276,24277],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":316,"searchDepth":317,"depth":317,"links":24279},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24261,"description":24269},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24286,"title":24287,"body":24288,"description":316,"extension":326,"meta":24404,"navigation":328,"path":24405,"seo":24406,"stem":24407,"__hash__":24408},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24289,"toc":24399},[24290,24293,24297,24300,24305,24310,24313,24318,24321,24326,24329,24333,24338,24341,24346,24351,24356,24359,24363,24368,24371,24376,24381,24386,24391,24394],[10,24291,24287],{"id":24292},"_3动作价值函数",[343,24294,24296],{"id":24295},"_31dqn","3.1.DQN",[19,24298,24299],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,24301,24302],{},[1738,24303],{"alt":316,"src":24304},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,24306,24307],{},[1738,24308],{"alt":316,"src":24309},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,24311,24312],{},"DQN算法的描述：",[19,24314,24315],{},[1738,24316],{"alt":316,"src":24317},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,24319,24320],{},"这里的Dense指的是全连接层",[19,24322,24323],{},[1738,24324],{"alt":316,"src":24325},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,24327,24328],{},"当前观测的状态为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算法",[343,24330,24332],{"id":24331},"_32dqn的举例","3.2.DQN的举例",[19,24334,24335],{},[1738,24336],{"alt":316,"src":24337},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,24339,24340],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,24342,24343],{},[1738,24344],{"alt":316,"src":24345},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,24347,24348],{},[1738,24349],{"alt":316,"src":24350},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,24352,24353],{},[1738,24354],{"alt":316,"src":24355},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,24357,24358],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[343,24360,24362],{"id":24361},"_33td算法","3.3.TD算法",[19,24364,24365],{},[1738,24366],{"alt":316,"src":24367},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,24369,24370],{},"强化学习TD算法公式的粗略解释：",[19,24372,24373],{},[1738,24374],{"alt":316,"src":24375},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,24377,24378],{},[1738,24379],{"alt":316,"src":24380},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,24382,24383],{},[1738,24384],{"alt":316,"src":24385},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,24387,24388],{},[1738,24389],{"alt":316,"src":24390},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,24392,24393],{},"TD算法总结：",[19,24395,24396],{},[1738,24397],{"alt":316,"src":24398},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":316,"searchDepth":317,"depth":317,"links":24400},[24401,24402,24403],{"id":24295,"depth":317,"text":24296},{"id":24331,"depth":317,"text":24332},{"id":24361,"depth":317,"text":24362},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24287,"description":316},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24410,"title":24411,"body":24412,"description":316,"extension":326,"meta":24645,"navigation":328,"path":24646,"seo":24647,"stem":24648,"__hash__":24649},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24413,"toc":24641},[24414,24417,24421,24424,24427,24432,24437,24440,24445,24450,24453,24458,24461,24466,24469,24474,24477,24482,24485,24490,24495,24498,24503,24506,24509,24514,24517,24522,24527,24531,24534,24537,24542,24547,24550,24555,24560,24563,24568,24571,24574,24579,24582,24587,24590,24595,24600,24603,24608,24613,24616,24621,24624,24629,24632],[10,24415,24411],{"id":24416},"_4策略学习",[343,24418,24420],{"id":24419},"_41概念描述","4.1.概念描述",[19,24422,24423],{},"用神经网络（策略网络）近似策略函数",[19,24425,24426],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,24428,24429],{},[1738,24430],{"alt":316,"src":24431},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,24433,24434],{},[1738,24435],{"alt":316,"src":24436},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,24438,24439],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,24441,24442],{},[1738,24443],{"alt":316,"src":24444},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,24446,24447],{},[1738,24448],{"alt":316,"src":24449},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,24451,24452],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,24454,24455],{},[1738,24456],{"alt":316,"src":24457},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,24459,24460],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,24462,24463],{},[1738,24464],{"alt":316,"src":24465},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,24467,24468],{},"改进theta要用到策略梯度算法",[19,24470,24471],{},[1738,24472],{"alt":316,"src":24473},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,24475,24476],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,24478,24479],{},[1738,24480],{"alt":316,"src":24481},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,24483,24484],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,24486,24487],{},[1738,24488],{"alt":316,"src":24489},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,24491,24492],{},[1738,24493],{"alt":316,"src":24494},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,24496,24497],{},"梯度公式总结：",[19,24499,24500],{},[1738,24501],{"alt":316,"src":24502},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,24504,24505],{},"两个公式的分别应用场景：",[19,24507,24508],{},"对于离散的动作：",[19,24510,24511],{},[1738,24512],{"alt":316,"src":24513},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,24515,24516],{},"对于连续的动作：",[19,24518,24519],{},[1738,24520],{"alt":316,"src":24521},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,24523,24524],{},[1738,24525],{"alt":316,"src":24526},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[343,24528,24530],{"id":24529},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,24532,24533],{},"使用蒙特卡洛来近似计算策略梯度",[19,24535,24536],{},"蒙特卡洛法的解释如下：",[19,24538,24539],{},[1738,24540],{"alt":316,"src":24541},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,24543,24544],{},[1738,24545],{"alt":316,"src":24546},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,24548,24549],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[38,24551,24552],{},[41,24553,24554],{},"方法一：reinforce算法",[19,24556,24557],{},[1738,24558],{"alt":316,"src":24559},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,24561,24562],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[38,24564,24565],{"start":317},[41,24566,24567],{},"方法二：actor-critic算法",[19,24569,24570],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,24572,24573],{},"两个网络的构建：",[19,24575,24576],{},[1738,24577],{"alt":316,"src":24578},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,24580,24581],{},"actor网路：",[19,24583,24584],{},[1738,24585],{"alt":316,"src":24586},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,24588,24589],{},"critic网络",[19,24591,24592],{},[1738,24593],{"alt":316,"src":24594},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[38,24596,24597],{"start":320},[41,24598,24599],{},"网络的训练",[19,24601,24602],{},"网络描述",[19,24604,24605],{},[1738,24606],{"alt":316,"src":24607},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,24609,24610],{},[1738,24611],{"alt":316,"src":24612},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,24614,24615],{},"TD算法更新梯度：",[19,24617,24618],{},[1738,24619],{"alt":316,"src":24620},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,24622,24623],{},"策略网络更新梯度：",[19,24625,24626],{},[1738,24627],{"alt":316,"src":24628},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,24630,24631],{},"训练整个流程的具体描述：",[19,24633,24634,24637,24638],{},[1738,24635],{"alt":316,"src":24636},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[1738,24639],{"alt":316,"src":24640},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":316,"searchDepth":317,"depth":317,"links":24642},[24643,24644],{"id":24419,"depth":317,"text":24420},{"id":24529,"depth":317,"text":24530},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24411,"description":316},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24651,"title":24652,"body":24653,"description":24660,"extension":326,"meta":24710,"navigation":328,"path":24711,"seo":24712,"stem":24713,"__hash__":24714},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24654,"toc":24706},[24655,24658,24661,24665,24668,24673,24677,24680,24685,24688,24693,24698,24701],[10,24656,24652],{"id":24657},"_5alphago算法",[19,24659,24660],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[343,24662,24664],{"id":24663},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,24666,24667],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,24669,24670],{},[1738,24671],{"alt":316,"src":24672},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[343,24674,24676],{"id":24675},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,24678,24679],{},"采用强化学习的方式训练策略网络",[19,24681,24682],{},[1738,24683],{"alt":316,"src":24684},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,24686,24687],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,24689,24690],{},[1738,24691],{"alt":316,"src":24692},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,24694,24695],{},[1738,24696],{"alt":316,"src":24697},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,24699,24700],{},"强化学习训练策略网络的总结：",[19,24702,24703],{},[1738,24704],{"alt":316,"src":24705},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":316,"searchDepth":317,"depth":317,"links":24707},[24708,24709],{"id":24663,"depth":317,"text":24664},{"id":24675,"depth":317,"text":24676},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24652,"description":24660},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24716,"title":24717,"body":24718,"description":24725,"extension":326,"meta":24728,"navigation":328,"path":24729,"seo":24730,"stem":24731,"__hash__":24732},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24719,"toc":24726},[24720,24723],[10,24721,24717],{"id":24722},"_6价值网络",[19,24724,24725],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":316,"searchDepth":317,"depth":317,"links":24727},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24717,"description":24725},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24734,"title":24735,"body":24736,"description":24740,"extension":326,"meta":24741,"navigation":328,"path":24742,"seo":24743,"stem":24744,"__hash__":24745},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24737,"toc":24738},[],{"title":316,"searchDepth":317,"depth":317,"links":24739},[],"记录自己的强化学习笔记。",{"category":23656},"\u002Fwiki\u002F2025-12-04",{"title":24735,"description":24740},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24747,"title":24748,"body":24749,"description":23654,"extension":326,"meta":24788,"navigation":328,"path":24789,"seo":24790,"stem":24791,"__hash__":24792},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24750,"toc":24786},[24751,24754,24757,24763,24766,24772,24775,24780,24783],[10,24752,24748],{"id":24753},"_1-项目概览与官方资源",[19,24755,24756],{},"官方文档：",[19,24758,24759],{},[640,24760,24761],{"href":24761,"rel":24762},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[24142],[19,24764,24765],{},"官方代码仓库：",[19,24767,24768],{},[640,24769,24770],{"href":24770,"rel":24771},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[24142],[19,24773,24774],{},"复现大体流程：",[19,24776,24777],{},[1738,24778],{"alt":316,"src":24779},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,24781,24782],{},"本教程的目标是打通这条链路：",[19,24784,24785],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":316,"searchDepth":317,"depth":317,"links":24787},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24748,"description":23654},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24794,"title":24795,"body":24796,"description":23654,"extension":326,"meta":24912,"navigation":328,"path":24913,"seo":24914,"stem":24915,"__hash__":24916},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24797,"toc":24907},[24798,24801,24805,24808,24815,24819,24822,24831,24841,24845,24875,24878,24904],[10,24799,24795],{"id":24800},"_2-环境准备与设备连接",[343,24802,24804],{"id":24803},"_21-系统与环境","2.1 系统与环境",[19,24806,24807],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,24809,24810,24811,24814],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[395,24812,24813],{},"lerobot"," 依赖。",[343,24816,24818],{"id":24817},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,24820,24821],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[389,24823,24825],{"className":24099,"code":24824,"language":24101,"meta":316,"style":316},"lerobot-find-out\n",[395,24826,24827],{"__ignoreMap":316},[398,24828,24829],{"class":400,"line":401},[398,24830,24824],{"class":2239},[19,24832,24833,24834,614,24837,24840],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[395,24835,24836],{},"\u002Fdev\u002FttyACM0",[395,24838,24839],{},"\u002Fdev\u002FttyACM1","）。",[343,24842,24844],{"id":24843},"_23-串口授权","2.3 串口授权",[389,24846,24848],{"className":24099,"code":24847,"language":24101,"meta":316,"style":316},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[395,24849,24850,24864],{"__ignoreMap":316},[398,24851,24852,24855,24858,24861],{"class":400,"line":401},[398,24853,24854],{"class":2239},"sudo",[398,24856,24857],{"class":513}," chmod",[398,24859,24860],{"class":457}," 666",[398,24862,24863],{"class":513}," \u002Fdev\u002FttyACM0\n",[398,24865,24866,24868,24870,24872],{"class":400,"line":317},[398,24867,24854],{"class":2239},[398,24869,24857],{"class":513},[398,24871,24860],{"class":457},[398,24873,24874],{"class":513}," \u002Fdev\u002FttyACM1\n",[19,24876,24877],{},"说明：",[67,24879,24880,24885,24891,24901],{},[41,24881,24882,24884],{},[395,24883,24854],{},"：以 root 权限执行命令。",[41,24886,24887,24890],{},[395,24888,24889],{},"chmod","：修改设备节点权限。",[41,24892,24893,24896,24897,24900],{},[395,24894,24895],{},"666","：",[395,24898,24899],{},"rw-rw-rw-","，所有用户可读写。",[41,24902,24903],{},"串口号必须替换为你机器上的真实端口。",[5403,24905,24906],{},"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":316,"searchDepth":317,"depth":317,"links":24908},[24909,24910,24911],{"id":24803,"depth":317,"text":24804},{"id":24817,"depth":317,"text":24818},{"id":24843,"depth":317,"text":24844},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24795,"description":23654},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24918,"title":24919,"body":24920,"description":23654,"extension":326,"meta":25081,"navigation":328,"path":25082,"seo":25083,"stem":25084,"__hash__":25085},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24921,"toc":25077},[24922,24926,24930,24936,24939,24996,24999,25003,25006,25074],[10,24923,24925],{"id":24924},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[343,24927,24929],{"id":24928},"_31-配置电机-id","3.1 配置电机 ID",[19,24931,24932,24933,24935],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[395,24934,619],{},"，需要改成机械臂链路里不冲突的编号。",[19,24937,24938],{},"方式一：用 LeRobot 命令逐步写入。",[389,24940,24942],{"className":24099,"code":24941,"language":24101,"meta":316,"style":316},"# 主臂舵机配置 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",[395,24943,24944,24949,24957,24964,24969,24973,24978,24984,24991],{"__ignoreMap":316},[398,24945,24946],{"class":400,"line":401},[398,24947,24948],{"class":467},"# 主臂舵机配置 ID\n",[398,24950,24951,24954],{"class":400,"line":317},[398,24952,24953],{"class":2239},"lerobot-setup-motors",[398,24955,24956],{"class":457}," \\\n",[398,24958,24959,24962],{"class":400,"line":320},[398,24960,24961],{"class":457},"  --teleop.type=so101_leader",[398,24963,24956],{"class":457},[398,24965,24966],{"class":400,"line":1470},[398,24967,24968],{"class":457},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[398,24970,24971],{"class":400,"line":1476},[398,24972,2676],{"emptyLinePlaceholder":328},[398,24974,24975],{"class":400,"line":1490},[398,24976,24977],{"class":467},"# 从臂舵机配置 ID\n",[398,24979,24980,24982],{"class":400,"line":1496},[398,24981,24953],{"class":2239},[398,24983,24956],{"class":457},[398,24985,24986,24989],{"class":400,"line":1587},[398,24987,24988],{"class":457},"  --robot.type=so101_follower",[398,24990,24956],{"class":457},[398,24992,24993],{"class":400,"line":1593},[398,24994,24995],{"class":457},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,24997,24998],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[343,25000,25002],{"id":25001},"_32-机械臂校准","3.2 机械臂校准",[19,25004,25005],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[389,25007,25009],{"className":24099,"code":25008,"language":24101,"meta":316,"style":316},"# 主臂校准\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",[395,25010,25011,25016,25023,25029,25036,25041,25045,25050,25056,25062,25069],{"__ignoreMap":316},[398,25012,25013],{"class":400,"line":401},[398,25014,25015],{"class":467},"# 主臂校准\n",[398,25017,25018,25021],{"class":400,"line":317},[398,25019,25020],{"class":2239},"lerobot-calibrate",[398,25022,24956],{"class":457},[398,25024,25025,25027],{"class":400,"line":320},[398,25026,24961],{"class":457},[398,25028,24956],{"class":457},[398,25030,25031,25034],{"class":400,"line":1470},[398,25032,25033],{"class":457},"  --teleop.port=\u002Fdev\u002FttyACM0",[398,25035,24956],{"class":457},[398,25037,25038],{"class":400,"line":1476},[398,25039,25040],{"class":457},"  --teleop.id=my_awesome_leader_arm\n",[398,25042,25043],{"class":400,"line":1490},[398,25044,2676],{"emptyLinePlaceholder":328},[398,25046,25047],{"class":400,"line":1496},[398,25048,25049],{"class":467},"# 从臂校准\n",[398,25051,25052,25054],{"class":400,"line":1587},[398,25053,25020],{"class":2239},[398,25055,24956],{"class":457},[398,25057,25058,25060],{"class":400,"line":1593},[398,25059,24988],{"class":457},[398,25061,24956],{"class":457},[398,25063,25064,25067],{"class":400,"line":1605},[398,25065,25066],{"class":457},"  --robot.port=\u002Fdev\u002FttyACM1",[398,25068,24956],{"class":457},[398,25070,25071],{"class":400,"line":1888},[398,25072,25073],{"class":457},"  --robot.id=my_awesome_follower_arm\n",[5403,25075,25076],{},"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":316,"searchDepth":317,"depth":317,"links":25078},[25079,25080],{"id":24928,"depth":317,"text":24929},{"id":25001,"depth":317,"text":25002},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24919,"description":23654},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":25087,"title":25088,"body":25089,"description":23654,"extension":326,"meta":25280,"navigation":328,"path":25281,"seo":25282,"stem":25283,"__hash__":25284},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":25090,"toc":25276},[25091,25094,25098,25145,25149,25162,25225,25228,25273],[10,25092,25088],{"id":25093},"_4-遥操与相机接入",[343,25095,25097],{"id":25096},"_41-不带相机遥操","4.1 不带相机遥操",[389,25099,25101],{"className":24099,"code":25100,"language":24101,"meta":316,"style":316},"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",[395,25102,25103,25110,25116,25122,25129,25135,25141],{"__ignoreMap":316},[398,25104,25105,25108],{"class":400,"line":401},[398,25106,25107],{"class":2239},"lerobot-teleoperate",[398,25109,24956],{"class":457},[398,25111,25112,25114],{"class":400,"line":317},[398,25113,24988],{"class":457},[398,25115,24956],{"class":457},[398,25117,25118,25120],{"class":400,"line":320},[398,25119,25066],{"class":457},[398,25121,24956],{"class":457},[398,25123,25124,25127],{"class":400,"line":1470},[398,25125,25126],{"class":457},"  --robot.id=my_awesome_follower_arm",[398,25128,24956],{"class":457},[398,25130,25131,25133],{"class":400,"line":1476},[398,25132,24961],{"class":457},[398,25134,24956],{"class":457},[398,25136,25137,25139],{"class":400,"line":1490},[398,25138,25033],{"class":457},[398,25140,24956],{"class":457},[398,25142,25143],{"class":400,"line":1496},[398,25144,25040],{"class":457},[343,25146,25148],{"id":25147},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[389,25150,25152],{"className":24099,"code":25151,"language":24101,"meta":316,"style":316},"lerobot-find-cameras opencv\n",[395,25153,25154],{"__ignoreMap":316},[398,25155,25156,25159],{"class":400,"line":401},[398,25157,25158],{"class":2239},"lerobot-find-cameras",[398,25160,25161],{"class":513}," opencv\n",[389,25163,25165],{"className":24099,"code":25164,"language":24101,"meta":316,"style":316},"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",[395,25166,25167,25173,25179,25185,25191,25201,25207,25213,25220],{"__ignoreMap":316},[398,25168,25169,25171],{"class":400,"line":401},[398,25170,25107],{"class":2239},[398,25172,24956],{"class":457},[398,25174,25175,25177],{"class":400,"line":317},[398,25176,24988],{"class":457},[398,25178,24956],{"class":457},[398,25180,25181,25183],{"class":400,"line":320},[398,25182,25066],{"class":457},[398,25184,24956],{"class":457},[398,25186,25187,25189],{"class":400,"line":1470},[398,25188,25126],{"class":457},[398,25190,24956],{"class":457},[398,25192,25193,25196,25199],{"class":400,"line":1476},[398,25194,25195],{"class":457},"  --robot.cameras=",[398,25197,25198],{"class":513},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[398,25200,24956],{"class":457},[398,25202,25203,25205],{"class":400,"line":1490},[398,25204,24961],{"class":457},[398,25206,24956],{"class":457},[398,25208,25209,25211],{"class":400,"line":1496},[398,25210,25033],{"class":457},[398,25212,24956],{"class":457},[398,25214,25215,25218],{"class":400,"line":1587},[398,25216,25217],{"class":457},"  --teleop.id=my_awesome_leader_arm",[398,25219,24956],{"class":457},[398,25221,25222],{"class":400,"line":1593},[398,25223,25224],{"class":457},"  --display_data=true\n",[19,25226,25227],{},"相机参数说明：",[67,25229,25230,25236,25242,25251,25261,25267],{},[41,25231,25232,25235],{},[395,25233,25234],{},"front","：相机名称。",[41,25237,25238,25241],{},[395,25239,25240],{},"type: opencv","：相机驱动类型。",[41,25243,25244,25247,25248,24840],{},[395,25245,25246],{},"index_or_path","：设备编号或设备路径（如 ",[395,25249,25250],{},"\u002Fdev\u002Fvideo4",[41,25252,25253,25256,25257,25260],{},[395,25254,25255],{},"width"," \u002F ",[395,25258,25259],{},"height","：图像分辨率。",[41,25262,25263,25266],{},[395,25264,25265],{},"fps","：采样帧率。",[41,25268,25269,25272],{},[395,25270,25271],{},"--display_data=true","：启用实时可视化。",[5403,25274,25275],{},"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":316,"searchDepth":317,"depth":317,"links":25277},[25278,25279],{"id":25096,"depth":317,"text":25097},{"id":25147,"depth":317,"text":25148},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":25088,"description":23654},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25286,"title":25287,"body":25288,"description":23654,"extension":326,"meta":25460,"navigation":328,"path":25461,"seo":25462,"stem":25463,"__hash__":25464},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25289,"toc":25455},[25290,25294,25298,25303,25308,25311,25353,25359,25363,25412,25417,25421,25424,25432,25437,25442,25447,25452],[10,25291,25293],{"id":25292},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[343,25295,25297],{"id":25296},"_51-生成访问令牌","5.1 生成访问令牌",[19,25299,25300],{},[1738,25301],{"alt":316,"src":25302},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,25304,25305],{},[1738,25306],{"alt":316,"src":25307},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,25309,25310],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[389,25312,25314],{"className":24099,"code":25313,"language":24101,"meta":316,"style":316},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[395,25315,25316,25329],{"__ignoreMap":316},[398,25317,25318,25321,25324,25326],{"class":400,"line":401},[398,25319,25320],{"class":404},"export",[398,25322,25323],{"class":408}," HF_TOKEN",[398,25325,454],{"class":404},[398,25327,25328],{"class":513},"\"your_huggingface_token\"\n",[398,25330,25331,25334,25337,25340,25343,25345,25348,25350],{"class":400,"line":317},[398,25332,25333],{"class":2239},"hf",[398,25335,25336],{"class":513}," auth",[398,25338,25339],{"class":513}," login",[398,25341,25342],{"class":457}," --token",[398,25344,10001],{"class":513},[398,25346,25347],{"class":408},"$HF_TOKEN",[398,25349,653],{"class":513},[398,25351,25352],{"class":457}," --add-to-git-credential\n",[19,25354,25355,25358],{},[395,25356,25357],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[343,25360,25362],{"id":25361},"_52-验证登录","5.2 验证登录",[389,25364,25366],{"className":24099,"code":25365,"language":24101,"meta":316,"style":316},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[395,25367,25368,25399],{"__ignoreMap":316},[398,25369,25370,25373,25375,25378,25380,25382,25385,25388,25391,25394,25397],{"class":400,"line":401},[398,25371,25372],{"class":408},"HF_USER",[398,25374,454],{"class":404},[398,25376,25377],{"class":408},"$(",[398,25379,25333],{"class":2239},[398,25381,25336],{"class":513},[398,25383,25384],{"class":513}," whoami",[398,25386,25387],{"class":404}," |",[398,25389,25390],{"class":2239}," head",[398,25392,25393],{"class":457}," -n",[398,25395,25396],{"class":457}," 1",[398,25398,415],{"class":408},[398,25400,25401,25404,25406,25409],{"class":400,"line":317},[398,25402,25403],{"class":457},"echo",[398,25405,10001],{"class":513},[398,25407,25408],{"class":408},"$HF_USER",[398,25410,25411],{"class":513},"\"\n",[19,25413,25414],{},[1738,25415],{"alt":316,"src":25416},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[343,25418,25420],{"id":25419},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,25422,25423],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[67,25425,25426,25429],{},[41,25427,25428],{},"Dataset Repo（用于上传演示数据）",[41,25430,25431],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,25433,25434],{},[1738,25435],{"alt":316,"src":25436},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,25438,25439],{},[1738,25440],{"alt":316,"src":25441},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,25443,25444],{},[1738,25445],{"alt":316,"src":25446},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,25448,25449],{},[1738,25450],{"alt":316,"src":25451},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[5403,25453,25454],{},"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":316,"searchDepth":317,"depth":317,"links":25456},[25457,25458,25459],{"id":25296,"depth":317,"text":25297},{"id":25361,"depth":317,"text":25362},{"id":25419,"depth":317,"text":25420},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25287,"description":23654},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25466,"title":25467,"body":25468,"description":23654,"extension":326,"meta":25665,"navigation":328,"path":25666,"seo":25667,"stem":25668,"__hash__":25669},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25469,"toc":25660},[25470,25474,25478,25574,25582,25587,25591,25607,25610,25614,25657],[10,25471,25473],{"id":25472},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[343,25475,25477],{"id":25476},"_61-录制示教数据","6.1 录制示教数据",[389,25479,25481],{"className":24099,"code":25480,"language":24101,"meta":316,"style":316},"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",[395,25482,25483,25490,25496,25502,25508,25517,25523,25529,25535,25542,25552,25559,25569],{"__ignoreMap":316},[398,25484,25485,25488],{"class":400,"line":401},[398,25486,25487],{"class":2239},"lerobot-record",[398,25489,24956],{"class":457},[398,25491,25492,25494],{"class":400,"line":317},[398,25493,24988],{"class":457},[398,25495,24956],{"class":457},[398,25497,25498,25500],{"class":400,"line":320},[398,25499,25066],{"class":457},[398,25501,24956],{"class":457},[398,25503,25504,25506],{"class":400,"line":1470},[398,25505,25126],{"class":457},[398,25507,24956],{"class":457},[398,25509,25510,25512,25515],{"class":400,"line":1476},[398,25511,25195],{"class":457},[398,25513,25514],{"class":513},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[398,25516,24956],{"class":457},[398,25518,25519,25521],{"class":400,"line":1490},[398,25520,24961],{"class":457},[398,25522,24956],{"class":457},[398,25524,25525,25527],{"class":400,"line":1496},[398,25526,25033],{"class":457},[398,25528,24956],{"class":457},[398,25530,25531,25533],{"class":400,"line":1587},[398,25532,25217],{"class":457},[398,25534,24956],{"class":457},[398,25536,25537,25540],{"class":400,"line":1593},[398,25538,25539],{"class":457},"  --display_data=true",[398,25541,24956],{"class":457},[398,25543,25544,25547,25550],{"class":400,"line":1605},[398,25545,25546],{"class":457},"  --dataset.repo_id=",[398,25548,25549],{"class":513},"\"Embodied-AI-6\u002Fso101_test\"",[398,25551,24956],{"class":457},[398,25553,25554,25557],{"class":400,"line":1888},[398,25555,25556],{"class":457},"  --dataset.num_episodes=10",[398,25558,24956],{"class":457},[398,25560,25561,25564,25567],{"class":400,"line":1893},[398,25562,25563],{"class":457},"  --dataset.single_task=",[398,25565,25566],{"class":513},"\"Grab the green cube\"",[398,25568,24956],{"class":457},[398,25570,25571],{"class":400,"line":1899},[398,25572,25573],{"class":457},"  --resume=true\n",[67,25575,25576],{},[41,25577,25578,25581],{},[395,25579,25580],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,25583,25584],{},[1738,25585],{"alt":316,"src":25586},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[343,25588,25590],{"id":25589},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[389,25592,25594],{"className":24099,"code":25593,"language":24101,"meta":316,"style":316},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[395,25595,25596],{"__ignoreMap":316},[398,25597,25598,25601,25604],{"class":400,"line":401},[398,25599,25600],{"class":2239},"rm",[398,25602,25603],{"class":457}," -rf",[398,25605,25606],{"class":513}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,25608,25609],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[343,25611,25613],{"id":25612},"_63-回放指定-episode","6.3 回放指定 episode",[389,25615,25617],{"className":24099,"code":25616,"language":24101,"meta":316,"style":316},"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",[395,25618,25619,25626,25632,25638,25644,25652],{"__ignoreMap":316},[398,25620,25621,25624],{"class":400,"line":401},[398,25622,25623],{"class":2239},"lerobot-replay",[398,25625,24956],{"class":457},[398,25627,25628,25630],{"class":400,"line":317},[398,25629,24988],{"class":457},[398,25631,24956],{"class":457},[398,25633,25634,25636],{"class":400,"line":320},[398,25635,25066],{"class":457},[398,25637,24956],{"class":457},[398,25639,25640,25642],{"class":400,"line":1470},[398,25641,25126],{"class":457},[398,25643,24956],{"class":457},[398,25645,25646,25648,25650],{"class":400,"line":1476},[398,25647,25546],{"class":457},[398,25649,25549],{"class":513},[398,25651,24956],{"class":457},[398,25653,25654],{"class":400,"line":1490},[398,25655,25656],{"class":457},"  --dataset.episode=0\n",[5403,25658,25659],{},"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":316,"searchDepth":317,"depth":317,"links":25661},[25662,25663,25664],{"id":25476,"depth":317,"text":25477},{"id":25589,"depth":317,"text":25590},{"id":25612,"depth":317,"text":25613},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25467,"description":23654},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25671,"title":25672,"body":25673,"description":23654,"extension":326,"meta":25801,"navigation":328,"path":25802,"seo":25803,"stem":25804,"__hash__":25805},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25674,"toc":25799},[25675,25679,25742,25745,25792,25797],[10,25676,25678],{"id":25677},"_7-act-模型训练","7. ACT 模型训练",[389,25680,25682],{"className":24099,"code":25681,"language":24101,"meta":316,"style":316},"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",[395,25683,25684,25691,25699,25706,25713,25720,25727,25734],{"__ignoreMap":316},[398,25685,25686,25689],{"class":400,"line":401},[398,25687,25688],{"class":2239},"lerobot-train",[398,25690,24956],{"class":457},[398,25692,25693,25695,25697],{"class":400,"line":317},[398,25694,25546],{"class":457},[398,25696,25549],{"class":513},[398,25698,24956],{"class":457},[398,25700,25701,25704],{"class":400,"line":320},[398,25702,25703],{"class":457},"  --policy.type=act",[398,25705,24956],{"class":457},[398,25707,25708,25711],{"class":400,"line":1470},[398,25709,25710],{"class":457},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[398,25712,24956],{"class":457},[398,25714,25715,25718],{"class":400,"line":1476},[398,25716,25717],{"class":457},"  --job_name=act_so101_test",[398,25719,24956],{"class":457},[398,25721,25722,25725],{"class":400,"line":1490},[398,25723,25724],{"class":457},"  --policy.device=cuda",[398,25726,24956],{"class":457},[398,25728,25729,25732],{"class":400,"line":1496},[398,25730,25731],{"class":457},"  --wandb.enable=false",[398,25733,24956],{"class":457},[398,25735,25736,25739],{"class":400,"line":1587},[398,25737,25738],{"class":457},"  --policy.repo_id=",[398,25740,25741],{"class":513},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,25743,25744],{},"参数说明：",[67,25746,25747,25753,25759,25765,25771,25780,25786],{},[41,25748,25749,25752],{},[395,25750,25751],{},"--dataset.repo_id","：训练数据集仓库。",[41,25754,25755,25758],{},[395,25756,25757],{},"--policy.type=act","：策略模型类型为 ACT。",[41,25760,25761,25764],{},[395,25762,25763],{},"--output_dir","：本地训练输出目录。",[41,25766,25767,25770],{},[395,25768,25769],{},"--job_name","：训练任务名称。",[41,25772,25773,25776,25777,24840],{},[395,25774,25775],{},"--policy.device","：训练设备（如 ",[395,25778,25779],{},"cuda",[41,25781,25782,25785],{},[395,25783,25784],{},"--wandb.enable","：是否启用 WandB 可视化。",[41,25787,25788,25791],{},[395,25789,25790],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,25793,25794],{},[1738,25795],{"alt":316,"src":25796},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[5403,25798,25659],{},{"title":316,"searchDepth":317,"depth":317,"links":25800},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25672,"description":23654},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25807,"title":25808,"body":25809,"description":23654,"extension":326,"meta":25896,"navigation":328,"path":25897,"seo":25898,"stem":25899,"__hash__":25900},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25810,"toc":25894},[25811,25814,25817,25884,25892],[10,25812,25808],{"id":25813},"_8-策略部署与自动采集",[19,25815,25816],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[389,25818,25820],{"className":24099,"code":25819,"language":24101,"meta":316,"style":316},"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",[395,25821,25822,25828,25834,25840,25848,25854,25861,25869,25877],{"__ignoreMap":316},[398,25823,25824,25826],{"class":400,"line":401},[398,25825,25487],{"class":2239},[398,25827,24956],{"class":457},[398,25829,25830,25832],{"class":400,"line":317},[398,25831,24988],{"class":457},[398,25833,24956],{"class":457},[398,25835,25836,25838],{"class":400,"line":320},[398,25837,25066],{"class":457},[398,25839,24956],{"class":457},[398,25841,25842,25844,25846],{"class":400,"line":1470},[398,25843,25195],{"class":457},[398,25845,25514],{"class":513},[398,25847,24956],{"class":457},[398,25849,25850,25852],{"class":400,"line":1476},[398,25851,25126],{"class":457},[398,25853,24956],{"class":457},[398,25855,25856,25859],{"class":400,"line":1490},[398,25857,25858],{"class":457},"  --display_data=false",[398,25860,24956],{"class":457},[398,25862,25863,25865,25867],{"class":400,"line":1496},[398,25864,25546],{"class":457},[398,25866,25549],{"class":513},[398,25868,24956],{"class":457},[398,25870,25871,25873,25875],{"class":400,"line":1587},[398,25872,25563],{"class":457},[398,25874,25566],{"class":513},[398,25876,24956],{"class":457},[398,25878,25879,25882],{"class":400,"line":1593},[398,25880,25881],{"class":457},"  --policy.path=",[398,25883,25741],{"class":513},[67,25885,25886],{},[41,25887,25888,25891],{},[395,25889,25890],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[5403,25893,25659],{},{"title":316,"searchDepth":317,"depth":317,"links":25895},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25808,"description":23654},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25902,"title":25903,"body":25904,"description":23654,"extension":326,"meta":25933,"navigation":328,"path":25934,"seo":25935,"stem":25936,"__hash__":25937},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25905,"toc":25931},[25906,25910,25913,25919,25922,25928],[10,25907,25909],{"id":25908},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,25911,25912],{},"项目地址：",[19,25914,25915],{},[640,25916,25917],{"href":25917,"rel":25918},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[24142],[19,25920,25921],{},"参考教程：",[19,25923,25924],{},[640,25925,25926],{"href":25926,"rel":25927},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[24142],[19,25929,25930],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":316,"searchDepth":317,"depth":317,"links":25932},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25903,"description":23654},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25939,"title":25940,"body":25941,"description":25945,"extension":326,"meta":25946,"navigation":328,"path":25947,"seo":25948,"stem":25949,"__hash__":25950},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25942,"toc":25943},[],{"title":316,"searchDepth":317,"depth":317,"links":25944},[],"act复现",{"category":23656},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25940,"description":25945},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":4,"title":5,"body":25952,"description":316,"extension":326,"meta":26174,"navigation":328,"path":329,"seo":26175,"stem":331,"__hash__":332},{"type":7,"value":25953,"toc":26166},[25954,25956,25958,25964,25968,25974,25976,25982,25984,25986,25988,25996,25998,26034,26036,26038,26040,26042,26044,26046,26076,26080,26082,26124,26128,26130,26132,26136,26138,26142,26144,26146,26150,26152,26154,26156],[10,25955,5],{"id":12},[14,25957,17],{"id":16},[19,25959,21,25960,26,25962],{},[23,25961,25],{},[23,25963,29],{},[19,25965,32,25966,36],{},[23,25967,35],{},[38,25969,25970],{},[41,25971,25972],{},[23,25973,45],{},[19,25975,48],{},[38,25977,25978],{},[41,25979,25980],{},[23,25981,55],{},[19,25983,58],{},[19,25985,61],{},[14,25987,65],{"id":64},[67,25989,25990,25992],{},[41,25991,71],{},[41,25993,74,25994,78],{},[23,25995,77],{},[14,25997,82],{"id":81},[84,25999,26000,26008],{},[87,26001,26002],{},[90,26003,26004,26006],{},[93,26005,96],{"align":95},[93,26007,99],{"align":95},[101,26009,26010,26016,26022,26028],{},[90,26011,26012,26014],{},[106,26013,108],{"align":95},[106,26015,111],{"align":95},[90,26017,26018,26020],{},[106,26019,116],{"align":95},[106,26021,119],{"align":95},[90,26023,26024,26026],{},[106,26025,124],{"align":95},[106,26027,127],{"align":95},[90,26029,26030,26032],{},[106,26031,132],{"align":95},[106,26033,135],{"align":95},[19,26035,138],{},[19,26037,141],{},[19,26039,144],{},[19,26041,147],{},[19,26043,150],{},[14,26045,154],{"id":153},[84,26047,26048,26056],{},[87,26049,26050],{},[90,26051,26052,26054],{},[93,26053,163],{"align":95},[93,26055,166],{"align":95},[101,26057,26058,26064,26070],{},[90,26059,26060,26062],{},[106,26061,173],{"align":95},[106,26063,176],{"align":95},[90,26065,26066,26068],{},[106,26067,181],{"align":95},[106,26069,184],{"align":95},[90,26071,26072,26074],{},[106,26073,189],{"align":95},[106,26075,192],{"align":95},[19,26077,195,26078],{},[23,26079,198],{},[14,26081,202],{"id":201},[84,26083,26084,26092],{},[87,26085,26086],{},[90,26087,26088,26090],{},[93,26089,211],{"align":95},[93,26091,214],{"align":95},[101,26093,26094,26100,26106,26112,26118],{},[90,26095,26096,26098],{},[106,26097,221],{"align":95},[106,26099,224],{"align":95},[90,26101,26102,26104],{},[106,26103,229],{"align":95},[106,26105,232],{"align":95},[90,26107,26108,26110],{},[106,26109,237],{"align":95},[106,26111,240],{"align":95},[90,26113,26114,26116],{},[106,26115,245],{"align":95},[106,26117,248],{"align":95},[90,26119,26120,26122],{},[106,26121,253],{"align":95},[106,26123,256],{"align":95},[38,26125,26126],{},[41,26127,261],{},[19,26129,264],{},[19,26131,267],{},[38,26133,26134],{},[41,26135,272],{},[19,26137,275],{},[38,26139,26140],{},[41,26141,280],{},[19,26143,283],{},[19,26145,286],{},[38,26147,26148],{},[41,26149,253],{},[19,26151,293],{},[19,26153,296],{},[14,26155,300],{"id":299},[67,26157,26158,26160,26162,26164],{},[41,26159,305],{},[41,26161,308],{},[41,26163,311],{},[41,26165,314],{},{"title":316,"searchDepth":317,"depth":317,"links":26167},[26168,26169,26170,26171,26172,26173],{"id":16,"depth":320,"text":17},{"id":64,"depth":320,"text":65},{"id":81,"depth":320,"text":82},{"id":153,"depth":320,"text":154},{"id":201,"depth":320,"text":202},{"id":299,"depth":320,"text":300},{},{"title":5,"description":316},{"id":26177,"title":26178,"body":26179,"description":316,"extension":326,"meta":26912,"navigation":328,"path":26913,"seo":26914,"stem":26915,"__hash__":26916},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26180,"toc":26907},[26181,26184,26188,26191,26194,26200,26206,26210,26219,26222,26279,26282,26333,26336,26419,26422,26459,26463,26474,26487,26494,26497,26577,26580,26630,26633,26656,26660,26667,26670,26686,26692,26695,26711,26717,26720,26736,26750,26756,26776,26782,26785,26797,26803,26806,26820,26826,26829,26849,26854,26857,26860,26864,26867,26870,26873,26880,26883,26886,26889,26894,26899,26904],[10,26182,26178],{"id":26183},"_2安装docker",[14,26185,26187],{"id":26186},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,26189,26190],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,26192,26193],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,26195,26196],{},[640,26197,26198],{"href":26198,"rel":26199},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[24142],[19,26201,26202],{},[640,26203,26204],{"href":26204,"rel":26205},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[24142],[22275,26207,26209],{"id":26208},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,26211,26212,26213,26218],{},"以下内容根据 ",[640,26214,26217],{"href":26215,"rel":26216},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[24142],"官方文档"," 修改而来。",[19,26220,26221],{},"如果你过去安装过 docker，先删掉：",[389,26223,26225],{"className":24099,"code":26224,"language":24101,"meta":316,"style":316},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[395,26226,26227],{"__ignoreMap":316},[398,26228,26229,26231,26234,26237,26240,26243,26246,26249,26252,26255,26258,26261,26264,26267,26270,26273,26276],{"class":400,"line":401},[398,26230,3301],{"class":404},[398,26232,26233],{"class":408}," pkg ",[398,26235,26236],{"class":404},"in",[398,26238,26239],{"class":513}," docker.io",[398,26241,26242],{"class":513}," docker-doc",[398,26244,26245],{"class":513}," docker-compose",[398,26247,26248],{"class":513}," docker-compose-v2",[398,26250,26251],{"class":513}," podman-docker",[398,26253,26254],{"class":513}," containerd",[398,26256,26257],{"class":513}," runc",[398,26259,26260],{"class":408},"; ",[398,26262,26263],{"class":404},"do",[398,26265,26266],{"class":2239}," sudo",[398,26268,26269],{"class":513}," apt-get",[398,26271,26272],{"class":513}," remove",[398,26274,26275],{"class":408}," $pkg; ",[398,26277,26278],{"class":404},"done\n",[19,26280,26281],{},"首先安装依赖和GPG：",[389,26283,26287],{"className":26284,"code":26285,"language":26286,"meta":316,"style":316},"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",[395,26288,26289,26294,26299,26304,26309,26314,26319,26323,26328],{"__ignoreMap":316},[398,26290,26291],{"class":400,"line":401},[398,26292,26293],{},"# Add Docker's official GPG key:\n",[398,26295,26296],{"class":400,"line":317},[398,26297,26298],{},"sudo apt-get update\n",[398,26300,26301],{"class":400,"line":320},[398,26302,26303],{},"sudo apt-get install ca-certificates curl\n",[398,26305,26306],{"class":400,"line":1470},[398,26307,26308],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[398,26310,26311],{"class":400,"line":1476},[398,26312,26313],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[398,26315,26316],{"class":400,"line":1490},[398,26317,26318],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[398,26320,26321],{"class":400,"line":1496},[398,26322,2676],{"emptyLinePlaceholder":328},[398,26324,26325],{"class":400,"line":1587},[398,26326,26327],{},"# 如果上面这行报错就弄下面这行\n",[398,26329,26330],{"class":400,"line":1593},[398,26331,26332],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,26334,26335],{},"信任 Docker 的 GPG 公钥并添加仓库：",[389,26337,26339],{"className":24099,"code":26338,"language":24101,"meta":316,"style":316},"# 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",[395,26340,26341,26346,26352,26369,26402],{"__ignoreMap":316},[398,26342,26343],{"class":400,"line":401},[398,26344,26345],{"class":467},"# Add the repository to Apt sources:\n",[398,26347,26348,26350],{"class":400,"line":317},[398,26349,25403],{"class":457},[398,26351,24956],{"class":457},[398,26353,26354,26357,26360,26363,26366],{"class":400,"line":320},[398,26355,26356],{"class":513},"  \"deb [arch=$(",[398,26358,26359],{"class":2239},"dpkg",[398,26361,26362],{"class":457}," --print-architecture",[398,26364,26365],{"class":513},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[398,26367,26368],{"class":457},"\\\n",[398,26370,26371,26374,26376,26378,26381,26384,26386,26388,26391,26393,26395,26398,26400],{"class":400,"line":1470},[398,26372,26373],{"class":513},"  \"",[398,26375,25377],{"class":408},[398,26377,960],{"class":457},[398,26379,26380],{"class":513}," \u002Fetc\u002Fos-release",[398,26382,26383],{"class":408}," && ",[398,26385,25403],{"class":457},[398,26387,10001],{"class":513},[398,26389,26390],{"class":408},"$VERSION_CODENAME",[398,26392,653],{"class":513},[398,26394,831],{"class":408},[398,26396,26397],{"class":513},"\" stable\"",[398,26399,25387],{"class":404},[398,26401,24956],{"class":457},[398,26403,26404,26407,26410,26413,26416],{"class":400,"line":1476},[398,26405,26406],{"class":2239},"  sudo",[398,26408,26409],{"class":513}," tee",[398,26411,26412],{"class":513}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[398,26414,26415],{"class":404}," >",[398,26417,26418],{"class":513}," \u002Fdev\u002Fnull\n",[19,26420,26421],{},"最后安装",[389,26423,26425],{"className":24099,"code":26424,"language":24101,"meta":316,"style":316},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[395,26426,26427,26436],{"__ignoreMap":316},[398,26428,26429,26431,26433],{"class":400,"line":401},[398,26430,24854],{"class":2239},[398,26432,26269],{"class":513},[398,26434,26435],{"class":513}," update\n",[398,26437,26438,26440,26442,26444,26447,26450,26453,26456],{"class":400,"line":317},[398,26439,24854],{"class":2239},[398,26441,26269],{"class":513},[398,26443,24111],{"class":513},[398,26445,26446],{"class":513}," docker-ce",[398,26448,26449],{"class":513}," docker-ce-cli",[398,26451,26452],{"class":513}," containerd.io",[398,26454,26455],{"class":513}," docker-buildx-plugin",[398,26457,26458],{"class":513}," docker-compose-plugin\n",[22275,26460,26462],{"id":26461},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,26464,26465,26466,26469,26470,26473],{},"查看自己自己包管理工具版本（dnf是 ",[23,26467,26468],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[23,26471,26472],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[389,26475,26477],{"className":24099,"code":26476,"language":24101,"meta":316,"style":316},"dnf --version\n",[395,26478,26479],{"__ignoreMap":316},[398,26480,26481,26484],{"class":400,"line":401},[398,26482,26483],{"class":2239},"dnf",[398,26485,26486],{"class":457}," --version\n",[19,26488,26212,26489,26493],{},[640,26490,26217],{"href":26491,"rel":26492},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[24142]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,26495,26496],{},"如果你之前安装过 docker，请先删掉",[389,26498,26500],{"className":24099,"code":26499,"language":24101,"meta":316,"style":316},"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",[395,26501,26502,26516,26523,26530,26537,26544,26551,26558,26565,26572],{"__ignoreMap":316},[398,26503,26504,26506,26509,26511,26514],{"class":400,"line":401},[398,26505,24854],{"class":2239},[398,26507,26508],{"class":513}," dnf",[398,26510,26272],{"class":513},[398,26512,26513],{"class":513}," docker",[398,26515,24956],{"class":457},[398,26517,26518,26521],{"class":400,"line":317},[398,26519,26520],{"class":513},"                  docker-client",[398,26522,24956],{"class":457},[398,26524,26525,26528],{"class":400,"line":320},[398,26526,26527],{"class":513},"                  docker-client-latest",[398,26529,24956],{"class":457},[398,26531,26532,26535],{"class":400,"line":1470},[398,26533,26534],{"class":513},"                  docker-common",[398,26536,24956],{"class":457},[398,26538,26539,26542],{"class":400,"line":1476},[398,26540,26541],{"class":513},"                  docker-latest",[398,26543,24956],{"class":457},[398,26545,26546,26549],{"class":400,"line":1490},[398,26547,26548],{"class":513},"                  docker-latest-logrotate",[398,26550,24956],{"class":457},[398,26552,26553,26556],{"class":400,"line":1496},[398,26554,26555],{"class":513},"                  docker-logrotate",[398,26557,24956],{"class":457},[398,26559,26560,26563],{"class":400,"line":1587},[398,26561,26562],{"class":513},"                  docker-selinux",[398,26564,24956],{"class":457},[398,26566,26567,26570],{"class":400,"line":1593},[398,26568,26569],{"class":513},"                  docker-engine-selinux",[398,26571,24956],{"class":457},[398,26573,26574],{"class":400,"line":1605},[398,26575,26576],{"class":513},"                  docker-engine\n",[19,26578,26579],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[389,26581,26583],{"className":24099,"code":26582,"language":24101,"meta":316,"style":316},"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",[395,26584,26585,26599,26614],{"__ignoreMap":316},[398,26586,26587,26589,26591,26594,26596],{"class":400,"line":401},[398,26588,24854],{"class":2239},[398,26590,26508],{"class":513},[398,26592,26593],{"class":457}," -y",[398,26595,24111],{"class":513},[398,26597,26598],{"class":513}," dnf-plugins-core\n",[398,26600,26601,26603,26605,26608,26611],{"class":400,"line":317},[398,26602,24854],{"class":2239},[398,26604,26508],{"class":513},[398,26606,26607],{"class":513}," config-manager",[398,26609,26610],{"class":513}," addrepo",[398,26612,26613],{"class":457}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[398,26615,26616,26618,26621,26624,26627],{"class":400,"line":320},[398,26617,24854],{"class":2239},[398,26619,26620],{"class":513}," sed",[398,26622,26623],{"class":457}," -i",[398,26625,26626],{"class":513}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[398,26628,26629],{"class":513}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,26631,26632],{},"最后安装：",[389,26634,26636],{"className":24099,"code":26635,"language":24101,"meta":316,"style":316},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[395,26637,26638],{"__ignoreMap":316},[398,26639,26640,26642,26644,26646,26648,26650,26652,26654],{"class":400,"line":401},[398,26641,24854],{"class":2239},[398,26643,26508],{"class":513},[398,26645,24111],{"class":513},[398,26647,26446],{"class":513},[398,26649,26449],{"class":513},[398,26651,26452],{"class":513},[398,26653,26455],{"class":513},[398,26655,26458],{"class":513},[14,26657,26659],{"id":26658},"_22配置环境","2.2.配置环境",[22275,26661,26663,26666],{"id":26662},"_221检查-docker-服务状态",[23,26664,26665],{},"2.2.1.检查 Docker 服务状态"," ：",[19,26668,26669],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[389,26671,26673],{"className":24099,"code":26672,"language":24101,"meta":316,"style":316},"systemctl status docker\n",[395,26674,26675],{"__ignoreMap":316},[398,26676,26677,26680,26683],{"class":400,"line":401},[398,26678,26679],{"class":2239},"systemctl",[398,26681,26682],{"class":513}," status",[398,26684,26685],{"class":513}," docker\n",[22275,26687,26689,26666],{"id":26688},"_222启动-docker-服务",[23,26690,26691],{},"2.2.2.启动 Docker 服务",[19,26693,26694],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[389,26696,26698],{"className":24099,"code":26697,"language":24101,"meta":316,"style":316},"sudo systemctl start docker\n",[395,26699,26700],{"__ignoreMap":316},[398,26701,26702,26704,26707,26709],{"class":400,"line":401},[398,26703,24854],{"class":2239},[398,26705,26706],{"class":513}," systemctl",[398,26708,4460],{"class":513},[398,26710,26685],{"class":513},[22275,26712,26714,26666],{"id":26713},"_223设置-docker-开机自启",[23,26715,26716],{},"2.2.3.设置 Docker 开机自启",[19,26718,26719],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[389,26721,26723],{"className":24099,"code":26722,"language":24101,"meta":316,"style":316},"sudo systemctl enable docker\n",[395,26724,26725],{"__ignoreMap":316},[398,26726,26727,26729,26731,26734],{"class":400,"line":401},[398,26728,24854],{"class":2239},[398,26730,26706],{"class":513},[398,26732,26733],{"class":513}," enable",[398,26735,26685],{"class":513},[22275,26737,26739,14072,26742,14072,26747,26666],{"id":26738},"_224将用户添加到-docker-组",[23,26740,26741],{},"2.2.4.将用户添加到",[23,26743,26744],{},[395,26745,26746],{},"docker",[23,26748,26749],{},"组",[19,26751,26752,26753,26755],{},"使用以下命令将当前用户添加到 ",[395,26754,26746],{}," 组：",[389,26757,26759],{"className":24099,"code":26758,"language":24101,"meta":316,"style":316},"sudo usermod -aG docker $USER\n",[395,26760,26761],{"__ignoreMap":316},[398,26762,26763,26765,26768,26771,26773],{"class":400,"line":401},[398,26764,24854],{"class":2239},[398,26766,26767],{"class":513}," usermod",[398,26769,26770],{"class":457}," -aG",[398,26772,26513],{"class":513},[398,26774,26775],{"class":408}," $USER\n",[22275,26777,26779,26666],{"id":26778},"_225退出并重新登录",[23,26780,26781],{},"2.2.5.退出并重新登录",[19,26783,26784],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[389,26786,26788],{"className":24099,"code":26787,"language":24101,"meta":316,"style":316},"newgrp docker\n",[395,26789,26790],{"__ignoreMap":316},[398,26791,26792,26795],{"class":400,"line":401},[398,26793,26794],{"class":2239},"newgrp",[398,26796,26685],{"class":513},[22275,26798,26800,26666],{"id":26799},"_226重新启动-docker-服务如果需要",[23,26801,26802],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,26804,26805],{},"确保 Docker 服务正在运行，可以使用以下命令：",[389,26807,26808],{"className":24099,"code":26697,"language":24101,"meta":316,"style":316},[395,26809,26810],{"__ignoreMap":316},[398,26811,26812,26814,26816,26818],{"class":400,"line":401},[398,26813,24854],{"class":2239},[398,26815,26706],{"class":513},[398,26817,4460],{"class":513},[398,26819,26685],{"class":513},[22275,26821,26823,26666],{"id":26822},"_227重启电脑后检查-docker-服务状态",[23,26824,26825],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,26827,26828],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[389,26830,26832],{"className":24099,"code":26831,"language":24101,"meta":316,"style":316},"sudo reboot\nsystemctl status docker\n",[395,26833,26834,26841],{"__ignoreMap":316},[398,26835,26836,26838],{"class":400,"line":401},[398,26837,24854],{"class":2239},[398,26839,26840],{"class":513}," reboot\n",[398,26842,26843,26845,26847],{"class":400,"line":317},[398,26844,26679],{"class":2239},[398,26846,26682],{"class":513},[398,26848,26685],{"class":513},[19,26850,26851],{},[1738,26852],{"alt":316,"src":26853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,26855,26856],{},"第三行显示enabled说明开机自启动成功",[19,26858,26859],{},"按q退出",[14,26861,26863],{"id":26862},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,26865,26866],{},"优先使用linux来使用docker是比较好的",[19,26868,26869],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,26871,26872],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,26874,26875,26876],{},"官方下载安装:",[640,26877,26878],{"href":26878,"rel":26879},"https:\u002F\u002Fwww.docker.com\u002F",[24142],[19,26881,26882],{},"Windows的Docker显卡直通与USB直通:",[19,26884,26885],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,26887,26888],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,26890,26891],{},[1738,26892],{"alt":316,"src":26893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,26895,26896],{},[1738,26897],{"alt":316,"src":26898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,26900,26901],{},[1738,26902],{"alt":316,"src":26903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[5403,26905,26906],{},"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":316,"searchDepth":317,"depth":317,"links":26908},[26909,26910,26911],{"id":26186,"depth":320,"text":26187},{"id":26658,"depth":320,"text":26659},{"id":26862,"depth":320,"text":26863},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26178,"description":316},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26918,"title":26919,"body":26920,"description":26927,"extension":326,"meta":27620,"navigation":328,"path":27621,"seo":27622,"stem":27623,"__hash__":27624},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26921,"toc":27614},[26922,26925,26928,26932,26937,26942,26945,26973,26978,26987,26990,26995,26999,27006,27011,27017,27021,27024,27028,27033,27125,27130,27148,27153,27174,27179,27195,27199,27204,27233,27238,27284,27289,27333,27341,27358,27363,27379,27384,27398,27401,27404,27407,27410,27439,27442,27447,27451,27454,27457,27463,27466,27469,27472,27534,27541,27546,27549,27567,27571,27574,27591,27594,27597,27611],[10,26923,26919],{"id":26924},"_3docker直通",[19,26926,26927],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[14,26929,26931],{"id":26930},"_31usb直通","3.1.USB直通",[19,26933,26934],{},[1738,26935],{"alt":316,"src":26936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[38,26938,26939],{},[41,26940,26941],{},"方法一(不是很推荐新手)：",[19,26943,26944],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[389,26946,26948],{"className":24099,"code":26947,"language":24101,"meta":316,"style":316},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[395,26949,26950,26958,26963],{"__ignoreMap":316},[398,26951,26952,26955],{"class":400,"line":401},[398,26953,26954],{"class":2239},"ls",[398,26956,26957],{"class":513}," \u002Fdev\n",[398,26959,26960],{"class":400,"line":317},[398,26961,26962],{"class":467},"#例如\n",[398,26964,26965,26968,26970],{"class":400,"line":320},[398,26966,26967],{"class":408},"--device",[398,26969,454],{"class":404},[398,26971,26972],{"class":513},"\u002Fdev\u002Ftty_USB0\n",[38,26974,26975],{"start":317},[41,26976,26977],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[389,26979,26981],{"className":24099,"code":26980,"language":24101,"meta":316,"style":316},"--privileged\n",[395,26982,26983],{"__ignoreMap":316},[398,26984,26985],{"class":400,"line":401},[398,26986,26980],{"class":2239},[19,26988,26989],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,26991,26992],{},[1738,26993],{"alt":316,"src":26994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[14,26996,26998],{"id":26997},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,27000,27001,27002,27005],{},"NVIDIA Container Toolkit使用户 ",[23,27003,27004],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,27007,27008],{},[1738,27009],{"alt":316,"src":27010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,27012,27013],{},[640,27014,27015],{"href":27015,"rel":27016},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[24142],[22275,27018,27020],{"id":27019},"_321安装","3.2.1.安装",[19,27022,27023],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23187,27025,27027],{"id":27026},"_3211ubuntu","3.2.1.1.Ubuntu",[38,27029,27030],{},[41,27031,27032],{},"配置存储库 并更新",[389,27034,27036],{"className":24099,"code":27035,"language":24101,"meta":316,"style":316},"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",[395,27037,27038,27067,27087,27099,27111,27117],{"__ignoreMap":316},[398,27039,27040,27043,27046,27049,27051,27053,27056,27059,27062,27065],{"class":400,"line":401},[398,27041,27042],{"class":2239},"curl",[398,27044,27045],{"class":457}," -fsSL",[398,27047,27048],{"class":513}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[398,27050,25387],{"class":404},[398,27052,26266],{"class":2239},[398,27054,27055],{"class":513}," gpg",[398,27057,27058],{"class":457}," --dearmor",[398,27060,27061],{"class":457}," -o",[398,27063,27064],{"class":513}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[398,27066,24956],{"class":457},[398,27068,27069,27072,27074,27077,27080,27083,27085],{"class":400,"line":317},[398,27070,27071],{"class":408},"  && ",[398,27073,27042],{"class":2239},[398,27075,27076],{"class":457}," -s",[398,27078,27079],{"class":457}," -L",[398,27081,27082],{"class":513}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[398,27084,25387],{"class":404},[398,27086,24956],{"class":457},[398,27088,27089,27092,27095,27097],{"class":400,"line":320},[398,27090,27091],{"class":2239},"    sed",[398,27093,27094],{"class":513}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[398,27096,25387],{"class":404},[398,27098,24956],{"class":457},[398,27100,27101,27104,27106,27109],{"class":400,"line":1470},[398,27102,27103],{"class":2239},"    sudo",[398,27105,26409],{"class":513},[398,27107,27108],{"class":513}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[398,27110,24956],{"class":457},[398,27112,27113,27115],{"class":400,"line":1476},[398,27114,27071],{"class":408},[398,27116,26368],{"class":457},[398,27118,27119,27121,27123],{"class":400,"line":1490},[398,27120,27103],{"class":2239},[398,27122,26269],{"class":513},[398,27124,26435],{"class":513},[38,27126,27127],{"start":317},[41,27128,27129],{},"安装nvidia-docker2",[389,27131,27133],{"className":24099,"code":27132,"language":24101,"meta":316,"style":316},"sudo apt-get install -y nvidia-docker2\n",[395,27134,27135],{"__ignoreMap":316},[398,27136,27137,27139,27141,27143,27145],{"class":400,"line":401},[398,27138,24854],{"class":2239},[398,27140,26269],{"class":513},[398,27142,24111],{"class":513},[398,27144,26593],{"class":457},[398,27146,27147],{"class":513}," nvidia-docker2\n",[38,27149,27150],{"start":320},[41,27151,27152],{},"使用nvidia-ctk命令配置container runtime",[389,27154,27156],{"className":24099,"code":27155,"language":24101,"meta":316,"style":316},"sudo nvidia-ctk runtime configure --runtime=docker\n",[395,27157,27158],{"__ignoreMap":316},[398,27159,27160,27162,27165,27168,27171],{"class":400,"line":401},[398,27161,24854],{"class":2239},[398,27163,27164],{"class":513}," nvidia-ctk",[398,27166,27167],{"class":513}," runtime",[398,27169,27170],{"class":513}," configure",[398,27172,27173],{"class":457}," --runtime=docker\n",[38,27175,27176],{"start":1470},[41,27177,27178],{},"重启docker服务:",[389,27180,27182],{"className":24099,"code":27181,"language":24101,"meta":316,"style":316},"sudo systemctl restart docker\n",[395,27183,27184],{"__ignoreMap":316},[398,27185,27186,27188,27190,27193],{"class":400,"line":401},[398,27187,24854],{"class":2239},[398,27189,26706],{"class":513},[398,27191,27192],{"class":513}," restart",[398,27194,26685],{"class":513},[23187,27196,27198],{"id":27197},"_3212fedora","3.2.1.2.Fedora",[38,27200,27201],{},[41,27202,27203],{},"配置存储库",[389,27205,27207],{"className":24099,"code":27206,"language":24101,"meta":316,"style":316},"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",[395,27208,27209,27224],{"__ignoreMap":316},[398,27210,27211,27213,27215,27217,27220,27222],{"class":400,"line":401},[398,27212,27042],{"class":2239},[398,27214,27076],{"class":457},[398,27216,27079],{"class":457},[398,27218,27219],{"class":513}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[398,27221,25387],{"class":404},[398,27223,24956],{"class":457},[398,27225,27226,27228,27230],{"class":400,"line":317},[398,27227,24854],{"class":2239},[398,27229,26409],{"class":513},[398,27231,27232],{"class":513}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[38,27234,27235],{"start":317},[41,27236,27237],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[389,27239,27241],{"className":24099,"code":27240,"language":24101,"meta":316,"style":316},"# 如果是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",[395,27242,27243,27248,27262,27266,27271],{"__ignoreMap":316},[398,27244,27245],{"class":400,"line":401},[398,27246,27247],{"class":467},"# 如果是RHEL或者Rocky（DNF4）\n",[398,27249,27250,27252,27254,27256,27259],{"class":400,"line":317},[398,27251,24854],{"class":2239},[398,27253,26508],{"class":513},[398,27255,26607],{"class":513},[398,27257,27258],{"class":457}," --add-repo",[398,27260,27261],{"class":513}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[398,27263,27264],{"class":400,"line":320},[398,27265,2676],{"emptyLinePlaceholder":328},[398,27267,27268],{"class":400,"line":1470},[398,27269,27270],{"class":467},"# 如果是Feodra41+（DNF5）\n",[398,27272,27273,27275,27277,27279,27281],{"class":400,"line":1476},[398,27274,24854],{"class":2239},[398,27276,26508],{"class":513},[398,27278,26607],{"class":513},[398,27280,26610],{"class":513},[398,27282,27283],{"class":457}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[38,27285,27286],{"start":320},[41,27287,27288],{},"安装NVIDIA Container Toolki包",[389,27290,27292],{"className":24099,"code":27291,"language":24101,"meta":316,"style":316},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[395,27293,27294,27299,27312,27316,27321],{"__ignoreMap":316},[398,27295,27296],{"class":400,"line":401},[398,27297,27298],{"class":467},"# 如果是RHEL或者Rocky\n",[398,27300,27301,27303,27305,27307,27309],{"class":400,"line":317},[398,27302,24854],{"class":2239},[398,27304,26508],{"class":513},[398,27306,24111],{"class":513},[398,27308,26593],{"class":457},[398,27310,27311],{"class":513}," nvidia-container-toolkit\n",[398,27313,27314],{"class":400,"line":320},[398,27315,2676],{"emptyLinePlaceholder":328},[398,27317,27318],{"class":400,"line":1470},[398,27319,27320],{"class":467},"# 如果是Fedora\n",[398,27322,27323,27325,27327,27329,27331],{"class":400,"line":1476},[398,27324,24854],{"class":2239},[398,27326,26508],{"class":513},[398,27328,24111],{"class":513},[398,27330,26593],{"class":457},[398,27332,27311],{"class":513},[38,27334,27335],{"start":1470},[41,27336,27337,27338,27340],{},"安装nvidia-docker2 ： 在Fedora上使用",[395,27339,26483],{},"进行安装",[389,27342,27344],{"className":24099,"code":27343,"language":24101,"meta":316,"style":316},"sudo dnf install -y nvidia-docker2\n",[395,27345,27346],{"__ignoreMap":316},[398,27347,27348,27350,27352,27354,27356],{"class":400,"line":401},[398,27349,24854],{"class":2239},[398,27351,26508],{"class":513},[398,27353,24111],{"class":513},[398,27355,26593],{"class":457},[398,27357,27147],{"class":513},[38,27359,27360],{"start":1476},[41,27361,27362],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[389,27364,27365],{"className":24099,"code":27155,"language":24101,"meta":316,"style":316},[395,27366,27367],{"__ignoreMap":316},[398,27368,27369,27371,27373,27375,27377],{"class":400,"line":401},[398,27370,24854],{"class":2239},[398,27372,27164],{"class":513},[398,27374,27167],{"class":513},[398,27376,27170],{"class":513},[398,27378,27173],{"class":457},[38,27380,27381],{"start":1490},[41,27382,27383],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[389,27385,27386],{"className":24099,"code":27181,"language":24101,"meta":316,"style":316},[395,27387,27388],{"__ignoreMap":316},[398,27389,27390,27392,27394,27396],{"class":400,"line":401},[398,27391,24854],{"class":2239},[398,27393,26706],{"class":513},[398,27395,27192],{"class":513},[398,27397,26685],{"class":513},[19,27399,27400],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,27402,27403],{},"方法：",[19,27405,27406],{},"1️⃣nvidia-smi",[19,27408,27409],{},"2️⃣运行nvidia cuda 容器进行测试",[389,27411,27413],{"className":24099,"code":27412,"language":24101,"meta":316,"style":316},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[395,27414,27415],{"__ignoreMap":316},[398,27416,27417,27419,27421,27424,27427,27430,27433,27436],{"class":400,"line":401},[398,27418,24854],{"class":2239},[398,27420,26513],{"class":513},[398,27422,27423],{"class":513}," run",[398,27425,27426],{"class":457}," --rm",[398,27428,27429],{"class":457}," --gpus",[398,27431,27432],{"class":513}," all",[398,27434,27435],{"class":513}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[398,27437,27438],{"class":513}," nvidia-smi\n",[19,27440,27441],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,27443,27444],{},[1738,27445],{"alt":316,"src":27446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[14,27448,27450],{"id":27449},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,27452,27453],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,27455,27456],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,27458,27459],{},[640,27460,27461],{"href":27461,"rel":27462},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[24142],[19,27464,27465],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,27467,27468],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,27470,27471],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[84,27473,27474,27490],{},[87,27475,27476],{},[90,27477,27478,27481,27484,27487],{},[93,27479,27480],{"align":95},"镜像类型",[93,27482,27483],{"align":95},"适用场景",[93,27485,27486],{"align":95},"示例标签",[93,27488,27489],{"align":95},"大小",[101,27491,27492,27506,27520],{},[90,27493,27494,27497,27500,27503],{},[106,27495,27496],{"align":95},"base",[106,27498,27499],{"align":95},"仅需 CUDA 运行时库",[106,27501,27502],{"align":95},"12.4.0-base-ubuntu22.04",[106,27504,27505],{"align":95},"~240MB",[90,27507,27508,27511,27514,27517],{},[106,27509,27510],{"align":95},"runtime",[106,27512,27513],{"align":95},"部署编译后的应用（含数学库）",[106,27515,27516],{"align":95},"12.4.0-runtime-ubuntu22.04",[106,27518,27519],{"align":95},"~2GB",[90,27521,27522,27525,27528,27531],{},[106,27523,27524],{"align":95},"devel",[106,27526,27527],{"align":95},"开发环境（含编译工具）",[106,27529,27530],{"align":95},"12.4.0-devel-ubuntu22.04",[106,27532,27533],{"align":95},"~3GB",[19,27535,27536,27537,27540],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[395,27538,27539],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,27542,27543],{},[1738,27544],{"alt":316,"src":27545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,27547,27548],{},"在dockerfile里就可以开头这么写：",[389,27550,27552],{"className":24099,"code":27551,"language":24101,"meta":316,"style":316},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[395,27553,27554,27559],{"__ignoreMap":316},[398,27555,27556],{"class":400,"line":401},[398,27557,27558],{"class":467},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[398,27560,27561,27564],{"class":400,"line":317},[398,27562,27563],{"class":2239},"FROM",[398,27565,27566],{"class":513}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[14,27568,27570],{"id":27569},"_34配置以太网","3.4.配置以太网",[19,27572,27573],{},"指定网络模式",[389,27575,27577],{"className":24099,"code":27576,"language":24101,"meta":316,"style":316},"--net=host \\\n",[395,27578,27579],{"__ignoreMap":316},[398,27580,27581,27584,27586,27589],{"class":400,"line":401},[398,27582,27583],{"class":408},"--net",[398,27585,454],{"class":404},[398,27587,27588],{"class":513},"host",[398,27590,24956],{"class":2239},[19,27592,27593],{},"启动参数里加上这行即可。具体在下方",[19,27595,27596],{},"--net选项：指定网络模式，该选项有以下参数可选：",[67,27598,27599,27602,27605,27608],{},[41,27600,27601],{},"--net=bridge:默认选项，表示连接到默认的网桥",[41,27603,27604],{},"--net=host:容器使用宿主机的网络",[41,27606,27607],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[41,27609,27610],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[5403,27612,27613],{},"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":316,"searchDepth":317,"depth":317,"links":27615},[27616,27617,27618,27619],{"id":26930,"depth":320,"text":26931},{"id":26997,"depth":320,"text":26998},{"id":27449,"depth":320,"text":27450},{"id":27569,"depth":320,"text":27570},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26919,"description":26927},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27626,"title":27627,"body":27628,"description":27635,"extension":326,"meta":27641,"navigation":328,"path":27642,"seo":27643,"stem":27644,"__hash__":27645},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27629,"toc":27639},[27630,27633,27636],[10,27631,27627],{"id":27632},"_4dockerhub换源",[19,27634,27635],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,27637,27638],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":316,"searchDepth":317,"depth":317,"links":27640},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27627,"description":27635},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27647,"title":27648,"body":27649,"description":316,"extension":326,"meta":28661,"navigation":328,"path":28662,"seo":28663,"stem":28664,"__hash__":28665},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27650,"toc":28656},[27651,27654,27658,27664,27668,27671,28011,28014,28017,28020,28025,28030,28033,28036,28039,28042,28061,28064,28075,28081,28263,28273,28289,28552,28554,28579,28594,28603,28653],[10,27652,27648],{"id":27653},"_5docker命令学习",[14,27655,27657],{"id":27656},"_51参考文档","5.1.参考文档",[19,27659,27660],{},[640,27661,27662],{"href":27662,"rel":27663},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[24142],[14,27665,27667],{"id":27666},"_52常用命令","5.2.常用命令",[19,27669,27670],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[84,27672,27673,27686],{},[87,27674,27675],{},[90,27676,27677,27680,27683],{},[93,27678,27679],{"align":95},"命令",[93,27681,27682],{"align":95},"描述",[93,27684,27685],{"align":95},"示例",[101,27687,27688,27699,27710,27721,27732,27743,27754,27765,27775,27786,27797,27808,27818,27829,27840,27851,27861,27871,27881,27891,27902,27913,27924,27935,27946,27957,27967,27978,27989,28000],{},[90,27689,27690,27693,27696],{},[106,27691,27692],{"align":95},"docker run",[106,27694,27695],{"align":95},"创建并启动一个新的容器。",[106,27697,27698],{"align":95},"docker run -it ubuntu bash",[90,27700,27701,27704,27707],{},[106,27702,27703],{"align":95},"docker build",[106,27705,27706],{"align":95},"通过指定的 Dockerfile 创建一个新的镜像。",[106,27708,27709],{"align":95},"docker build -t myimage .",[90,27711,27712,27715,27718],{},[106,27713,27714],{"align":95},"docker pull",[106,27716,27717],{"align":95},"从 Docker 仓库拉取镜像。",[106,27719,27720],{"align":95},"docker pull ubuntu",[90,27722,27723,27726,27729],{},[106,27724,27725],{"align":95},"docker push",[106,27727,27728],{"align":95},"将本地镜像推送到 Docker 仓库。",[106,27730,27731],{"align":95},"docker push myimage",[90,27733,27734,27737,27740],{},[106,27735,27736],{"align":95},"docker stop",[106,27738,27739],{"align":95},"停止一个正在运行的容器。",[106,27741,27742],{"align":95},"docker stop container_id",[90,27744,27745,27748,27751],{},[106,27746,27747],{"align":95},"docker start",[106,27749,27750],{"align":95},"启动一个已经存在的容器。",[106,27752,27753],{"align":95},"docker start container_id",[90,27755,27756,27759,27762],{},[106,27757,27758],{"align":95},"docker restart",[106,27760,27761],{"align":95},"重新启动容器。",[106,27763,27764],{"align":95},"docker restart container_id",[90,27766,27767,27770,27773],{},[106,27768,27769],{"align":95},"docker ps",[106,27771,27772],{"align":95},"列出当前正在运行的容器。",[106,27774,27769],{"align":95},[90,27776,27777,27780,27783],{},[106,27778,27779],{"align":95},"docker rm",[106,27781,27782],{"align":95},"删除一个或多个停止的容器。",[106,27784,27785],{"align":95},"docker rm container_id",[90,27787,27788,27791,27794],{},[106,27789,27790],{"align":95},"docker exec",[106,27792,27793],{"align":95},"在一个正在运行的容器中执行命令。",[106,27795,27796],{"align":95},"docker exec -it container_id bash",[90,27798,27799,27802,27805],{},[106,27800,27801],{"align":95},"docker logs",[106,27803,27804],{"align":95},"查看容器的日志输出。",[106,27806,27807],{"align":95},"docker logs container_id",[90,27809,27810,27813,27816],{},[106,27811,27812],{"align":95},"docker images",[106,27814,27815],{"align":95},"列出本地所有镜像。",[106,27817,27812],{"align":95},[90,27819,27820,27823,27826],{},[106,27821,27822],{"align":95},"docker rmi",[106,27824,27825],{"align":95},"删除一个或多个镜像。",[106,27827,27828],{"align":95},"docker rmi myimage",[90,27830,27831,27834,27837],{},[106,27832,27833],{"align":95},"docker network",[106,27835,27836],{"align":95},"管理 Docker 网络。",[106,27838,27839],{"align":95},"docker network ls",[90,27841,27842,27845,27848],{},[106,27843,27844],{"align":95},"docker volume",[106,27846,27847],{"align":95},"管理 Docker 数据卷。",[106,27849,27850],{"align":95},"docker volume ls",[90,27852,27853,27856,27859],{},[106,27854,27855],{"align":95},"docker-compose up",[106,27857,27858],{"align":95},"启动 docker-compose.yml 中定义的所有服务。",[106,27860,27855],{"align":95},[90,27862,27863,27866,27869],{},[106,27864,27865],{"align":95},"docker-compose down",[106,27867,27868],{"align":95},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[106,27870,27865],{"align":95},[90,27872,27873,27876,27879],{},[106,27874,27875],{"align":95},"docker info",[106,27877,27878],{"align":95},"显示 Docker 系统的详细信息。",[106,27880,27875],{"align":95},[90,27882,27883,27886,27889],{},[106,27884,27885],{"align":95},"docker stats",[106,27887,27888],{"align":95},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[106,27890,27885],{"align":95},[90,27892,27893,27896,27899],{},[106,27894,27895],{"align":95},"docker inspect",[106,27897,27898],{"align":95},"查看容器或镜像的详细信息（JSON 格式）。",[106,27900,27901],{"align":95},"docker inspect container_id",[90,27903,27904,27907,27910],{},[106,27905,27906],{"align":95},"docker save",[106,27908,27909],{"align":95},"将一个镜像保存为 tar 文件。",[106,27911,27912],{"align":95},"docker save -o myimage.tar myimage",[90,27914,27915,27918,27921],{},[106,27916,27917],{"align":95},"docker load",[106,27919,27920],{"align":95},"从 tar 文件中加载镜像。",[106,27922,27923],{"align":95},"docker load -i myimage.tar",[90,27925,27926,27929,27932],{},[106,27927,27928],{"align":95},"docker tag",[106,27930,27931],{"align":95},"为镜像添加标签（tag）。",[106,27933,27934],{"align":95},"docker tag myimage myimage:v1",[90,27936,27937,27940,27943],{},[106,27938,27939],{"align":95},"docker buildx build",[106,27941,27942],{"align":95},"使用 Buildx 构建多架构镜像。",[106,27944,27945],{"align":95},"docker buildx build -t myimage .",[90,27947,27948,27951,27954],{},[106,27949,27950],{"align":95},"docker buildx create",[106,27952,27953],{"align":95},"创建一个新的 Buildx 构建实例。",[106,27955,27956],{"align":95},"docker buildx create –use",[90,27958,27959,27962,27965],{},[106,27960,27961],{"align":95},"docker buildx ls",[106,27963,27964],{"align":95},"列出所有可用的 Buildx 构建实例。",[106,27966,27961],{"align":95},[90,27968,27969,27972,27975],{},[106,27970,27971],{"align":95},"docker buildx use",[106,27973,27974],{"align":95},"设置当前的 Buildx 构建实例。",[106,27976,27977],{"align":95},"docker buildx use mybuilder",[90,27979,27980,27983,27986],{},[106,27981,27982],{"align":95},"docker buildx bake",[106,27984,27985],{"align":95},"使用 Bake 文件批量构建镜像。",[106,27987,27988],{"align":95},"docker buildx bake -f bake.hcl",[90,27990,27991,27994,27997],{},[106,27992,27993],{"align":95},"docker buildx build –push",[106,27995,27996],{"align":95},"构建镜像并推送到镜像仓库。",[106,27998,27999],{"align":95},"docker buildx build –push -t myimage .",[90,28001,28002,28005,28008],{},[106,28003,28004],{"align":95},"docker buildx build –platform",[106,28006,28007],{"align":95},"构建镜像并为多个平台生成支持。",[106,28009,28010],{"align":95},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,28012,28013],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,28015,28016],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,28018,28019],{},"docker images 可以查看已经下载的镜像",[19,28021,28022],{},[1738,28023],{"alt":316,"src":28024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,28026,28027],{},[23,28028,28029],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,28031,28032],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,28034,28035],{},"docker container logs 查看容器日志",[19,28037,28038],{},"docker top 查看容器里的进程",[19,28040,28041],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[389,28043,28045],{"className":24099,"code":28044,"language":24101,"meta":316,"style":316},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[395,28046,28047],{"__ignoreMap":316},[398,28048,28049,28052,28055,28058],{"class":400,"line":401},[398,28050,28051],{"class":2239},"如：docker",[398,28053,28054],{"class":513}," cp",[398,28056,28057],{"class":513}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[398,28059,28060],{"class":513}," \u002Fmydata\u002Fnginx\n",[19,28062,28063],{},"docker run时在启动容器的时候会有几个常用的选项：",[67,28065,28066,28069,28072],{},[41,28067,28068],{},"-d选项：表示后台运行",[41,28070,28071],{},"-P选项：随机端口映射",[41,28073,28074],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[14,28076,28078],{"id":28077},"_53run命令的参数非常重要",[23,28079,28080],{},"5.3.run命令的参数（非常重要）",[84,28082,28083,28096],{},[87,28084,28085],{},[90,28086,28087,28090,28093],{},[93,28088,28089],{"align":95},"参数\u002F配置",[93,28091,28092],{"align":95},"功能说明",[93,28094,28095],{"align":95},"重要性与参考依据",[101,28097,28098,28109,28120,28131,28142,28153,28164,28175,28186,28197,28208,28219,28230,28241,28252],{},[90,28099,28100,28103,28106],{},[106,28101,28102],{"align":95},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[106,28104,28105],{"align":95},"指定容器名称，便于后续管理",[106,28107,28108],{"align":95},"替代随机生成的容器名。",[90,28110,28111,28114,28117],{},[106,28112,28113],{"align":95},"–gpus all",[106,28115,28116],{"align":95},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[106,28118,28119],{"align":95},"用于CUDA加速等GPU依赖任务。",[90,28121,28122,28125,28128],{},[106,28123,28124],{"align":95},"-e NVIDIA_DRIVER_CAPABILITIES=all",[106,28126,28127],{"align":95},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[106,28129,28130],{"align":95},"确保容器内GPU功能完整67。",[90,28132,28133,28136,28139],{},[106,28134,28135],{"align":95},"-dit",[106,28137,28138],{"align":95},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[106,28140,28141],{"align":95},"允许容器在后台运行并支持交互操作。",[90,28143,28144,28147,28150],{},[106,28145,28146],{"align":95},"–privileged",[106,28148,28149],{"align":95},"赋予容器完全主机权限（可访问设备、内核模块等）",[106,28151,28152],{"align":95},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[90,28154,28155,28158,28161],{},[106,28156,28157],{"align":95},"–net=host",[106,28159,28160],{"align":95},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[106,28162,28163],{"align":95},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[90,28165,28166,28169,28172],{},[106,28167,28168],{"align":95},"–group-add audio–group-add video–group-add dialout",[106,28170,28171],{"align":95},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[106,28173,28174],{"align":95},"避免权限问题（如避免无法调用摄像头、麦克风）。",[90,28176,28177,28180,28183],{},[106,28178,28179],{"align":95},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[106,28181,28182],{"align":95},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[106,28184,28185],{"align":95},"支持容器内运行图形界面应用（如OpenCV可视化）。",[90,28187,28188,28191,28194],{},[106,28189,28190],{"align":95},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[106,28192,28193],{"align":95},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[106,28195,28196],{"align":95},"实现容器内图形显示。",[90,28198,28199,28202,28205],{},[106,28200,28201],{"align":95},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[106,28203,28204],{"align":95},"挂载X11认证文件（只读）",[106,28206,28207],{"align":95},"确保容器有权连接宿主机显示服务。",[90,28209,28210,28213,28216],{},[106,28211,28212],{"align":95},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[106,28214,28215],{"align":95},"挂载Wayland显示协议相关目录",[106,28217,28218],{"align":95},"支持Wayland协议的图形显示。",[90,28220,28221,28224,28227],{},[106,28222,28223],{"align":95},"–ulimit nofile=1024:524288",[106,28225,28226],{"align":95},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[106,28228,28229],{"align":95},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[90,28231,28232,28235,28238],{},[106,28233,28234],{"align":95},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[106,28236,28237],{"align":95},"挂载宿主机用户目录到容器内同名路径",[106,28239,28240],{"align":95},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[90,28242,28243,28246,28249],{},[106,28244,28245],{"align":95},"-w \u002Fhome\u002Ftungchiahui",[106,28247,28248],{"align":95},"设置容器启动后的默认工作目录",[106,28250,28251],{"align":95},"直接进入项目路径，方便执行命令2324。",[90,28253,28254,28257,28260],{},[106,28255,28256],{"align":95},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[106,28258,28259],{"align":95},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[106,28261,28262],{"align":95},"提供预配置的深度学习与机器人开发环境。",[19,28264,28265,28266,28268,28269,28272],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[395,28267,24854],{},"加不加",[395,28270,28271],{},"sudo -E","都无所谓。",[19,28274,28275,28276,28278,28279,28281,28282,28285,28286,28288],{},"用户已经被加到docker组了，不用",[395,28277,24854],{},"也行跑，其次，",[395,28280,24854],{},"运行的话，你的",[395,28283,28284],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[395,28287,28284],{},"更不可能变了。",[389,28290,28292],{"className":24099,"code":28291,"language":24101,"meta":316,"style":316},"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",[395,28293,28294,28307,28317,28327,28339,28346,28353,28360,28370,28379,28388,28402,28414,28426,28435,28445,28454,28469,28502,28529,28540,28547],{"__ignoreMap":316},[398,28295,28296,28298,28300,28302,28305],{"class":400,"line":401},[398,28297,24854],{"class":2239},[398,28299,26513],{"class":513},[398,28301,27423],{"class":513},[398,28303,28304],{"class":457}," --name=ros_opencv_cuda",[398,28306,24956],{"class":457},[398,28308,28309,28312,28315],{"class":400,"line":317},[398,28310,28311],{"class":408},"--gpus ",[398,28313,28314],{"class":513},"all",[398,28316,24956],{"class":457},[398,28318,28319,28322,28325],{"class":400,"line":320},[398,28320,28321],{"class":408},"-e ",[398,28323,28324],{"class":513},"NVIDIA_DRIVER_CAPABILITIES=all",[398,28326,24956],{"class":457},[398,28328,28329,28331,28334,28337],{"class":400,"line":1470},[398,28330,28321],{"class":408},[398,28332,28333],{"class":513},"DISPLAY=",[398,28335,28336],{"class":408},"$DISPLAY ",[398,28338,26368],{"class":457},[398,28340,28341,28344],{"class":400,"line":1476},[398,28342,28343],{"class":408},"-dit ",[398,28345,26368],{"class":457},[398,28347,28348,28351],{"class":400,"line":1490},[398,28349,28350],{"class":408},"--privileged ",[398,28352,26368],{"class":457},[398,28354,28355,28358],{"class":400,"line":1496},[398,28356,28357],{"class":408},"--net=host ",[398,28359,26368],{"class":457},[398,28361,28362,28365,28368],{"class":400,"line":1587},[398,28363,28364],{"class":408},"--group-add ",[398,28366,28367],{"class":513},"audio",[398,28369,24956],{"class":457},[398,28371,28372,28374,28377],{"class":400,"line":1593},[398,28373,28364],{"class":408},[398,28375,28376],{"class":513},"video",[398,28378,24956],{"class":457},[398,28380,28381,28383,28386],{"class":400,"line":1605},[398,28382,28364],{"class":408},[398,28384,28385],{"class":513},"dialout",[398,28387,24956],{"class":457},[398,28389,28390,28392,28395,28397,28400],{"class":400,"line":1888},[398,28391,28321],{"class":408},[398,28393,28394],{"class":513},"XAUTHORITY=",[398,28396,28284],{"class":408},[398,28398,28399],{"class":513},"\u002F.Xauthority",[398,28401,24956],{"class":457},[398,28403,28404,28406,28409,28412],{"class":400,"line":1893},[398,28405,28321],{"class":408},[398,28407,28408],{"class":513},"WAYLAND_DISPLAY=",[398,28410,28411],{"class":408},"$WAYLAND_DISPLAY ",[398,28413,26368],{"class":457},[398,28415,28416,28418,28421,28424],{"class":400,"line":1899},[398,28417,28321],{"class":408},[398,28419,28420],{"class":513},"XDG_RUNTIME_DIR=",[398,28422,28423],{"class":408},"$XDG_RUNTIME_DIR ",[398,28425,26368],{"class":457},[398,28427,28428,28430,28433],{"class":400,"line":1904},[398,28429,28321],{"class":408},[398,28431,28432],{"class":513},"QT_QPA_PLATFORM=xcb",[398,28434,24956],{"class":457},[398,28436,28437,28440,28443],{"class":400,"line":1918},[398,28438,28439],{"class":408},"-v ",[398,28441,28442],{"class":513},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[398,28444,24956],{"class":457},[398,28446,28447,28449,28452],{"class":400,"line":1923},[398,28448,28439],{"class":408},[398,28450,28451],{"class":513},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[398,28453,24956],{"class":457},[398,28455,28456,28459,28462,28464,28467],{"class":400,"line":1929},[398,28457,28458],{"class":408},"-v $HOME",[398,28460,28461],{"class":513},"\u002F.Xauthority:",[398,28463,28284],{"class":408},[398,28465,28466],{"class":513},"\u002F.Xauthority:ro",[398,28468,24956],{"class":457},[398,28470,28471,28473,28476,28478,28481,28484,28486,28489,28491,28493,28495,28497,28500],{"class":400,"line":1950},[398,28472,28439],{"class":408},[398,28474,28475],{"class":513},"\u002Frun\u002Fuser\u002F",[398,28477,25377],{"class":408},[398,28479,28480],{"class":2239},"id",[398,28482,28483],{"class":457}," -u",[398,28485,831],{"class":408},[398,28487,28488],{"class":513},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[398,28490,25377],{"class":408},[398,28492,28480],{"class":2239},[398,28494,28483],{"class":457},[398,28496,831],{"class":408},[398,28498,28499],{"class":513},"\u002Fwayland-0",[398,28501,24956],{"class":457},[398,28503,28504,28506,28508,28510,28512,28514,28516,28519,28521,28523,28525,28527],{"class":400,"line":1955},[398,28505,28439],{"class":408},[398,28507,28475],{"class":513},[398,28509,25377],{"class":408},[398,28511,28480],{"class":2239},[398,28513,28483],{"class":457},[398,28515,831],{"class":408},[398,28517,28518],{"class":513},":\u002Frun\u002Fuser\u002F",[398,28520,25377],{"class":408},[398,28522,28480],{"class":2239},[398,28524,28483],{"class":457},[398,28526,13991],{"class":408},[398,28528,26368],{"class":457},[398,28530,28531,28533,28535,28538],{"class":400,"line":1969},[398,28532,28458],{"class":408},[398,28534,1261],{"class":513},[398,28536,28537],{"class":408},"$HOME ",[398,28539,26368],{"class":457},[398,28541,28542,28545],{"class":400,"line":1974},[398,28543,28544],{"class":408},"-w $HOME ",[398,28546,26368],{"class":457},[398,28548,28549],{"class":400,"line":2003},[398,28550,28551],{"class":408},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,28553,9302],{},[38,28555,28556,28564,28567,28570],{},[41,28557,28558,14072,28560,28563],{},[395,28559,28324],{},[395,28561,28562],{},"--gpus all","没有英伟达显卡请注释。",[41,28565,28566],{},"--name后面请自己为容器起名。",[41,28568,28569],{},"最后一行仓库名称请你自己找对应的镜像填上。",[41,28571,28572,28573,28578],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23831,28574,28575],{},[23,28576,28577],{},"请不要加","。",[389,28580,28582],{"className":24099,"code":28581,"language":24101,"meta":316,"style":316},"--ulimit nofile=1024:524288 \\\n",[395,28583,28584],{"__ignoreMap":316},[398,28585,28586,28589,28592],{"class":400,"line":401},[398,28587,28588],{"class":2239},"--ulimit",[398,28590,28591],{"class":513}," nofile=1024:524288",[398,28593,24956],{"class":457},[19,28595,28596,28597,28602],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23831,28598,28599],{},[23,28600,28601],{},"不建议","**.**",[389,28604,28606],{"className":24099,"code":28605,"language":24101,"meta":316,"style":316},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[395,28607,28608,28635,28644],{"__ignoreMap":316},[398,28609,28610,28613,28616,28618,28620,28622,28624,28626,28628,28631,28633],{"class":400,"line":401},[398,28611,28612],{"class":2239},"--user",[398,28614,28615],{"class":408}," $(",[398,28617,28480],{"class":2239},[398,28619,28483],{"class":457},[398,28621,831],{"class":408},[398,28623,1261],{"class":513},[398,28625,25377],{"class":408},[398,28627,28480],{"class":2239},[398,28629,28630],{"class":457}," -g",[398,28632,13991],{"class":408},[398,28634,26368],{"class":457},[398,28636,28637,28639,28642],{"class":400,"line":317},[398,28638,28439],{"class":408},[398,28640,28641],{"class":513},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[398,28643,24956],{"class":457},[398,28645,28646,28648,28651],{"class":400,"line":320},[398,28647,28439],{"class":408},[398,28649,28650],{"class":513},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[398,28652,24956],{"class":457},[5403,28654,28655],{},"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":316,"searchDepth":317,"depth":317,"links":28657},[28658,28659,28660],{"id":27656,"depth":320,"text":27657},{"id":27666,"depth":320,"text":27667},{"id":28077,"depth":320,"text":28080},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27648,"description":316},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28667,"title":28668,"body":28669,"description":316,"extension":326,"meta":30292,"navigation":328,"path":30293,"seo":30294,"stem":30295,"__hash__":30296},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28670,"toc":30287},[28671,28674,28678,28681,28903,28907,28911,28914,29020,29025,29028,29033,29036,29041,29044,29049,29052,29064,29067,29072,29079,29107,29114,29190,29195,29198,29221,29223,29298,29303,29306,29310,29318,29323,29328,29332,29343,29349,29352,29355,29379,29382,29385,29413,29416,29419,29884,29887,29892,29897,29901,29924,29929,29933,29937,29940,29943,29946,29973,29976,29979,29997,30000,30003,30025,30033,30038,30043,30047,30050,30053,30056,30059,30104,30107,30125,30128,30133,30136,30157,30160,30216,30219,30224,30228,30231,30238,30241,30244,30249,30252,30268,30271,30284],[10,28672,28668],{"id":28673},"_6手动创建docker镜像",[14,28675,28677],{"id":28676},"_61dockerfile","6.1.DockerFile",[19,28679,28680],{},"常用命令：",[84,28682,28683,28694],{},[87,28684,28685],{},[90,28686,28687,28690,28692],{},[93,28688,28689],{"align":95},"指令",[93,28691,214],{"align":95},[93,28693,27685],{"align":95},[101,28695,28696,28706,28722,28733,28744,28755,28766,28777,28788,28802,28816,28827,28841,28852,28863,28877,28892],{},[90,28697,28698,28700,28703],{},[106,28699,27563],{"align":95},[106,28701,28702],{"align":95},"指定基础镜像，是 Dockerfile 的起点",[106,28704,28705],{"align":95},"FROM ubuntu:22.04",[90,28707,28708,28711,28714],{},[106,28709,28710],{"align":95},"LABEL",[106,28712,28713],{"align":95},"添加元数据（如作者、版本等）",[106,28715,28716,28717,28721],{"align":95},"LABEL maintainer=”",[640,28718,28720],{"href":28719},"mailto:you@example.com","you@example.com","”",[90,28723,28724,28727,28730],{},[106,28725,28726],{"align":95},"ENV",[106,28728,28729],{"align":95},"设置环境变量",[106,28731,28732],{"align":95},"ENV PORT=8080",[90,28734,28735,28738,28741],{},[106,28736,28737],{"align":95},"ARG",[106,28739,28740],{"align":95},"构建参数，只在构建期间可用",[106,28742,28743],{"align":95},"ARG VERSION=1.0",[90,28745,28746,28749,28752],{},[106,28747,28748],{"align":95},"RUN",[106,28750,28751],{"align":95},"构建镜像时运行命令",[106,28753,28754],{"align":95},"RUN apt-get update && apt-get install -y curl",[90,28756,28757,28760,28763],{},[106,28758,28759],{"align":95},"COPY",[106,28761,28762],{"align":95},"复制文件到镜像中",[106,28764,28765],{"align":95},"COPY . \u002Fapp",[90,28767,28768,28771,28774],{},[106,28769,28770],{"align":95},"ADD",[106,28772,28773],{"align":95},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[106,28775,28776],{"align":95},"ADD archive.tar.gz \u002Fdata\u002F",[90,28778,28779,28782,28785],{},[106,28780,28781],{"align":95},"WORKDIR",[106,28783,28784],{"align":95},"设置工作目录",[106,28786,28787],{"align":95},"WORKDIR \u002Fopt",[90,28789,28790,28793,28796],{},[106,28791,28792],{"align":95},"CMD",[106,28794,28795],{"align":95},"设置容器启动时默认命令（可被 docker run 覆盖）",[106,28797,28798,28799],{"align":95},"CMD ",[398,28800,28801],{},"“node”, “index.js”",[90,28803,28804,28807,28810],{},[106,28805,28806],{"align":95},"ENTRYPOINT",[106,28808,28809],{"align":95},"设置容器启动时固定命令（通常用于 CLI 工具等）",[106,28811,28812,28813],{"align":95},"ENTRYPOINT ",[398,28814,28815],{},"“python3”",[90,28817,28818,28821,28824],{},[106,28819,28820],{"align":95},"EXPOSE",[106,28822,28823],{"align":95},"声明镜像内服务监听的端口（不会自动映射）",[106,28825,28826],{"align":95},"EXPOSE 80",[90,28828,28829,28832,28835],{},[106,28830,28831],{"align":95},"VOLUME",[106,28833,28834],{"align":95},"声明数据卷挂载点",[106,28836,28837,28838],{"align":95},"VOLUME ",[398,28839,28840],{},"“\u002Fdata”",[90,28842,28843,28846,28849],{},[106,28844,28845],{"align":95},"USER",[106,28847,28848],{"align":95},"设置后续命令执行的用户",[106,28850,28851],{"align":95},"USER appuser",[90,28853,28854,28857,28860],{},[106,28855,28856],{"align":95},"ONBUILD",[106,28858,28859],{"align":95},"当镜像作为其他镜像基础镜像时触发的构建指令",[106,28861,28862],{"align":95},"ONBUILD COPY . \u002Fsrc",[90,28864,28865,28868,28871],{},[106,28866,28867],{"align":95},"SHELL",[106,28869,28870],{"align":95},"更改默认 shell，比如将 sh -c 改为 bash -c",[106,28872,28873,28874],{"align":95},"SHELL ",[398,28875,28876],{},"“\u002Fbin\u002Fbash”, “-c”",[90,28878,28879,28882,28885],{},[106,28880,28881],{"align":95},"HEALTHCHECK",[106,28883,28884],{"align":95},"定义容器运行时的健康检查命令",[106,28886,28887,28888],{"align":95},"`HEALTHCHECK CMD curl –fail ",[640,28889,28890],{"href":28890,"rel":28891},"http:\u002F\u002Flocalhost:8080",[24142],[90,28893,28894,28897,28900],{},[106,28895,28896],{"align":95},"STOPSIGNAL",[106,28898,28899],{"align":95},"容器停止时发送的信号",[106,28901,28902],{"align":95},"STOPSIGNAL SIGKILL",[14,28904,28906],{"id":28905},"_62自己创建容器","6.2.自己创建容器",[22275,28908,28910],{"id":28909},"_621手动创建","6.2.1.手动创建",[19,28912,28913],{},"在x86电脑上编译x86的：",[389,28915,28917],{"className":24099,"code":28916,"language":24101,"meta":316,"style":316},"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",[395,28918,28919,28935,28939,28952,28956,28969,28973,28986,28990,29003,29007],{"__ignoreMap":316},[398,28920,28921,28923,28926,28929,28932],{"class":400,"line":401},[398,28922,26746],{"class":2239},[398,28924,28925],{"class":513}," build",[398,28927,28928],{"class":457}," -t",[398,28930,28931],{"class":513}," ros-melodic-cuda118-cudnn8-bionic:latest",[398,28933,28934],{"class":513}," .\n",[398,28936,28937],{"class":400,"line":317},[398,28938,2676],{"emptyLinePlaceholder":328},[398,28940,28941,28943,28945,28947,28950],{"class":400,"line":320},[398,28942,26746],{"class":2239},[398,28944,28925],{"class":513},[398,28946,28928],{"class":457},[398,28948,28949],{"class":513}," ros-noetic-focal:latest",[398,28951,28934],{"class":513},[398,28953,28954],{"class":400,"line":1470},[398,28955,2676],{"emptyLinePlaceholder":328},[398,28957,28958,28960,28962,28964,28967],{"class":400,"line":1476},[398,28959,26746],{"class":2239},[398,28961,28925],{"class":513},[398,28963,28928],{"class":457},[398,28965,28966],{"class":513}," ros-humble-jammy:latest",[398,28968,28934],{"class":513},[398,28970,28971],{"class":400,"line":1490},[398,28972,2676],{"emptyLinePlaceholder":328},[398,28974,28975,28977,28979,28981,28984],{"class":400,"line":1496},[398,28976,26746],{"class":2239},[398,28978,28925],{"class":513},[398,28980,28928],{"class":457},[398,28982,28983],{"class":513}," ros-jazzy-noble:latest",[398,28985,28934],{"class":513},[398,28987,28988],{"class":400,"line":1587},[398,28989,2676],{"emptyLinePlaceholder":328},[398,28991,28992,28994,28996,28998,29001],{"class":400,"line":1593},[398,28993,26746],{"class":2239},[398,28995,28925],{"class":513},[398,28997,28928],{"class":457},[398,28999,29000],{"class":513}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[398,29002,28934],{"class":513},[398,29004,29005],{"class":400,"line":1605},[398,29006,2676],{"emptyLinePlaceholder":328},[398,29008,29009,29011,29013,29015,29018],{"class":400,"line":1888},[398,29010,26746],{"class":2239},[398,29012,28925],{"class":513},[398,29014,28928],{"class":457},[398,29016,29017],{"class":513}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[398,29019,28934],{"class":513},[19,29021,29022],{},[1738,29023],{"alt":316,"src":29024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,29026,29027],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,29029,29030],{},[1738,29031],{"alt":316,"src":29032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,29034,29035],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[38,29037,29038],{},[41,29039,29040],{},"创建 Docker Hub 账户",[19,29042,29043],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[38,29045,29046],{"start":317},[41,29047,29048],{},"登录 Docker Hub",[19,29050,29051],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[389,29053,29055],{"className":24099,"code":29054,"language":24101,"meta":316,"style":316},"docker login\n",[395,29056,29057],{"__ignoreMap":316},[398,29058,29059,29061],{"class":400,"line":401},[398,29060,26746],{"class":2239},[398,29062,29063],{"class":513}," login\n",[19,29065,29066],{},"输入你的 Docker Hub 用户名和密码进行验证。",[38,29068,29069],{},[41,29070,29071],{},"为你的镜像打标签",[19,29073,29074,29075,29078],{},"Docker Hub 使用 ",[395,29076,29077],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[389,29080,29082],{"className":24099,"code":29081,"language":24101,"meta":316,"style":316},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[395,29083,29084],{"__ignoreMap":316},[398,29085,29086,29088,29091,29093,29096,29099,29102,29104],{"class":400,"line":401},[398,29087,26746],{"class":2239},[398,29089,29090],{"class":513}," tag",[398,29092,28983],{"class":513},[398,29094,29095],{"class":404}," \u003C",[398,29097,29098],{"class":513},"你的用户",[398,29100,29101],{"class":408},"名",[398,29103,1362],{"class":404},[398,29105,29106],{"class":513},"\u002Fros-jazzy-noble:latest\n",[19,29108,29109,29110,29113],{},"例如，如果你的 Docker Hub 用户名是 ",[395,29111,29112],{},"tungchiahui","，你应该执行：",[389,29115,29117],{"className":24099,"code":29116,"language":24101,"meta":316,"style":316},"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",[395,29118,29119,29130,29134,29145,29149,29160,29164,29175,29179],{"__ignoreMap":316},[398,29120,29121,29123,29125,29127],{"class":400,"line":401},[398,29122,26746],{"class":2239},[398,29124,29090],{"class":513},[398,29126,28949],{"class":513},[398,29128,29129],{"class":513}," tungchiahui\u002Fros-noetic-focal:latest\n",[398,29131,29132],{"class":400,"line":317},[398,29133,2676],{"emptyLinePlaceholder":328},[398,29135,29136,29138,29140,29142],{"class":400,"line":320},[398,29137,26746],{"class":2239},[398,29139,29090],{"class":513},[398,29141,28966],{"class":513},[398,29143,29144],{"class":513}," tungchiahui\u002Fros-humble-jammy:latest\n",[398,29146,29147],{"class":400,"line":1470},[398,29148,2676],{"emptyLinePlaceholder":328},[398,29150,29151,29153,29155,29157],{"class":400,"line":1476},[398,29152,26746],{"class":2239},[398,29154,29090],{"class":513},[398,29156,28983],{"class":513},[398,29158,29159],{"class":513}," tungchiahui\u002Fros-jazzy-noble:latest\n",[398,29161,29162],{"class":400,"line":1490},[398,29163,2676],{"emptyLinePlaceholder":328},[398,29165,29166,29168,29170,29172],{"class":400,"line":1496},[398,29167,26746],{"class":2239},[398,29169,29090],{"class":513},[398,29171,29000],{"class":513},[398,29173,29174],{"class":513}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[398,29176,29177],{"class":400,"line":1587},[398,29178,2676],{"emptyLinePlaceholder":328},[398,29180,29181,29183,29185,29187],{"class":400,"line":1593},[398,29182,26746],{"class":2239},[398,29184,29090],{"class":513},[398,29186,29017],{"class":513},[398,29188,29189],{"class":513}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[38,29191,29192],{"start":317},[41,29193,29194],{},"推送镜像到 Docker Hub",[19,29196,29197],{},"使用以下命令将镜像推送到 Docker Hub：",[389,29199,29201],{"className":24099,"code":29200,"language":24101,"meta":316,"style":316},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[395,29202,29203],{"__ignoreMap":316},[398,29204,29205,29207,29210,29212,29214,29216,29218],{"class":400,"line":401},[398,29206,26746],{"class":2239},[398,29208,29209],{"class":513}," push",[398,29211,29095],{"class":404},[398,29213,29098],{"class":513},[398,29215,29101],{"class":408},[398,29217,1362],{"class":404},[398,29219,29220],{"class":513},"\u002Fros-noetic-jazzy-noble:latest\n",[19,29222,14910],{},[389,29224,29226],{"className":24099,"code":29225,"language":24101,"meta":316,"style":316},"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",[395,29227,29228,29236,29240,29248,29252,29260,29264,29273,29277,29285,29289],{"__ignoreMap":316},[398,29229,29230,29232,29234],{"class":400,"line":401},[398,29231,26746],{"class":2239},[398,29233,29209],{"class":513},[398,29235,29129],{"class":513},[398,29237,29238],{"class":400,"line":317},[398,29239,2676],{"emptyLinePlaceholder":328},[398,29241,29242,29244,29246],{"class":400,"line":320},[398,29243,26746],{"class":2239},[398,29245,29209],{"class":513},[398,29247,29144],{"class":513},[398,29249,29250],{"class":400,"line":1470},[398,29251,2676],{"emptyLinePlaceholder":328},[398,29253,29254,29256,29258],{"class":400,"line":1476},[398,29255,26746],{"class":2239},[398,29257,29209],{"class":513},[398,29259,29159],{"class":513},[398,29261,29262],{"class":400,"line":1490},[398,29263,2676],{"emptyLinePlaceholder":328},[398,29265,29266,29268,29270],{"class":400,"line":1496},[398,29267,26746],{"class":2239},[398,29269,29209],{"class":513},[398,29271,29272],{"class":513}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[398,29274,29275],{"class":400,"line":1587},[398,29276,2676],{"emptyLinePlaceholder":328},[398,29278,29279,29281,29283],{"class":400,"line":1593},[398,29280,26746],{"class":2239},[398,29282,29209],{"class":513},[398,29284,29189],{"class":513},[398,29286,29287],{"class":400,"line":1605},[398,29288,2676],{"emptyLinePlaceholder":328},[398,29290,29291,29293,29295],{"class":400,"line":1888},[398,29292,26746],{"class":2239},[398,29294,29209],{"class":513},[398,29296,29297],{"class":513}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[38,29299,29300],{"start":320},[41,29301,29302],{},"验证推送成功",[19,29304,29305],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,29307,29308],{},[23,29309,4060],{},[67,29311,29312,29315],{},[41,29313,29314],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[41,29316,29317],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,29319,29320],{},[1738,29321],{"alt":316,"src":29322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,29324,29325],{},[1738,29326],{"alt":316,"src":29327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22275,29329,29331],{"id":29330},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,29333,29334,29335,29338,29339,29342],{},"如果您想在 ",[23,29336,29337],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[23,29340,29341],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,29344,29345,29346],{},"1. ",[23,29347,29348],{},"启用 Docker 跨平台构建",[19,29350,29351],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,29353,29354],{},"第一步：启用 buildx（只需执行一次）",[389,29356,29358],{"className":24099,"code":29357,"language":24101,"meta":316,"style":316},"docker buildx create --name multiarch_builder --use\n",[395,29359,29360],{"__ignoreMap":316},[398,29361,29362,29364,29367,29370,29373,29376],{"class":400,"line":401},[398,29363,26746],{"class":2239},[398,29365,29366],{"class":513}," buildx",[398,29368,29369],{"class":513}," create",[398,29371,29372],{"class":457}," --name",[398,29374,29375],{"class":513}," multiarch_builder",[398,29377,29378],{"class":457}," --use\n",[19,29380,29381],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,29383,29384],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[389,29386,29388],{"className":24099,"code":29387,"language":24101,"meta":316,"style":316},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[395,29389,29390],{"__ignoreMap":316},[398,29391,29392,29394,29396,29398,29401,29404,29407,29410],{"class":400,"line":401},[398,29393,26746],{"class":2239},[398,29395,27423],{"class":513},[398,29397,27426],{"class":457},[398,29399,29400],{"class":457}," --privileged",[398,29402,29403],{"class":513}," multiarch\u002Fqemu-user-static",[398,29405,29406],{"class":457}," --reset",[398,29408,29409],{"class":457}," -p",[398,29411,29412],{"class":513}," yes\n",[19,29414,29415],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,29417,29418],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[389,29420,29422],{"className":24099,"code":29421,"language":24101,"meta":316,"style":316},"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",[395,29423,29424,29466,29470,29475,29485,29495,29504,29510,29514,29518,29528,29536,29545,29551,29555,29559,29569,29577,29586,29592,29596,29600,29610,29618,29627,29633,29637,29641,29651,29659,29668,29674,29678,29682,29692,29700,29709,29715,29719,29723,29733,29741,29750,29756,29760,29764,29774,29782,29791,29797,29801,29805,29815,29823,29832,29838,29842,29846,29857,29865,29874,29880],{"__ignoreMap":316},[398,29425,29426,29428,29430,29432,29435,29438,29440,29442,29445,29447,29449,29451,29453,29456,29459,29461,29464],{"class":400,"line":401},[398,29427,26746],{"class":2239},[398,29429,29366],{"class":513},[398,29431,28925],{"class":513},[398,29433,29434],{"class":457}," --platform",[398,29436,29437],{"class":513}," linux\u002Famd64,linux\u002Farm64",[398,29439,28928],{"class":457},[398,29441,29095],{"class":404},[398,29443,29444],{"class":513},"你的镜像",[398,29446,29101],{"class":408},[398,29448,1362],{"class":404},[398,29450,1261],{"class":513},[398,29452,1312],{"class":404},[398,29454,29455],{"class":513},"标",[398,29457,29458],{"class":408},"签",[398,29460,1362],{"class":404},[398,29462,29463],{"class":457}," --push",[398,29465,28934],{"class":513},[398,29467,29468],{"class":400,"line":317},[398,29469,2676],{"emptyLinePlaceholder":328},[398,29471,29472],{"class":400,"line":320},[398,29473,29474],{"class":467},"# 例子：\n",[398,29476,29477,29479,29481,29483],{"class":400,"line":1470},[398,29478,26746],{"class":2239},[398,29480,29366],{"class":513},[398,29482,28925],{"class":513},[398,29484,24956],{"class":457},[398,29486,29487,29490,29493],{"class":400,"line":1476},[398,29488,29489],{"class":408},"--platform ",[398,29491,29492],{"class":513},"linux\u002Famd64,linux\u002Farm64",[398,29494,24956],{"class":457},[398,29496,29497,29499,29502],{"class":400,"line":1490},[398,29498,28928],{"class":457},[398,29500,29501],{"class":513}," tungchiahui\u002Fros:noetic-focal",[398,29503,24956],{"class":457},[398,29505,29506,29508],{"class":400,"line":1496},[398,29507,29463],{"class":457},[398,29509,24956],{"class":457},[398,29511,29512],{"class":400,"line":1587},[398,29513,28934],{"class":513},[398,29515,29516],{"class":400,"line":1593},[398,29517,2676],{"emptyLinePlaceholder":328},[398,29519,29520,29522,29524,29526],{"class":400,"line":1605},[398,29521,26746],{"class":2239},[398,29523,29366],{"class":513},[398,29525,28925],{"class":513},[398,29527,24956],{"class":457},[398,29529,29530,29532,29534],{"class":400,"line":1888},[398,29531,29489],{"class":408},[398,29533,29492],{"class":513},[398,29535,24956],{"class":457},[398,29537,29538,29540,29543],{"class":400,"line":1893},[398,29539,28928],{"class":457},[398,29541,29542],{"class":513}," tungchiahui\u002Fros:humble-jammy",[398,29544,24956],{"class":457},[398,29546,29547,29549],{"class":400,"line":1899},[398,29548,29463],{"class":457},[398,29550,24956],{"class":457},[398,29552,29553],{"class":400,"line":1904},[398,29554,28934],{"class":513},[398,29556,29557],{"class":400,"line":1918},[398,29558,2676],{"emptyLinePlaceholder":328},[398,29560,29561,29563,29565,29567],{"class":400,"line":1923},[398,29562,26746],{"class":2239},[398,29564,29366],{"class":513},[398,29566,28925],{"class":513},[398,29568,24956],{"class":457},[398,29570,29571,29573,29575],{"class":400,"line":1929},[398,29572,29489],{"class":408},[398,29574,29492],{"class":513},[398,29576,24956],{"class":457},[398,29578,29579,29581,29584],{"class":400,"line":1950},[398,29580,28928],{"class":457},[398,29582,29583],{"class":513}," tungchiahui\u002Fros:jazzy-noble",[398,29585,24956],{"class":457},[398,29587,29588,29590],{"class":400,"line":1955},[398,29589,29463],{"class":457},[398,29591,24956],{"class":457},[398,29593,29594],{"class":400,"line":1969},[398,29595,28934],{"class":513},[398,29597,29598],{"class":400,"line":1974},[398,29599,2676],{"emptyLinePlaceholder":328},[398,29601,29602,29604,29606,29608],{"class":400,"line":2003},[398,29603,26513],{"class":2239},[398,29605,29366],{"class":513},[398,29607,28925],{"class":513},[398,29609,24956],{"class":457},[398,29611,29612,29614,29616],{"class":400,"line":2008},[398,29613,29489],{"class":408},[398,29615,29492],{"class":513},[398,29617,24956],{"class":457},[398,29619,29620,29622,29625],{"class":400,"line":2025},[398,29621,28928],{"class":457},[398,29623,29624],{"class":513}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[398,29626,24956],{"class":457},[398,29628,29629,29631],{"class":400,"line":2030},[398,29630,29463],{"class":457},[398,29632,24956],{"class":457},[398,29634,29635],{"class":400,"line":2035},[398,29636,28934],{"class":513},[398,29638,29639],{"class":400,"line":2040},[398,29640,2676],{"emptyLinePlaceholder":328},[398,29642,29643,29645,29647,29649],{"class":400,"line":2054},[398,29644,26746],{"class":2239},[398,29646,29366],{"class":513},[398,29648,28925],{"class":513},[398,29650,24956],{"class":457},[398,29652,29653,29655,29657],{"class":400,"line":2059},[398,29654,29489],{"class":408},[398,29656,29492],{"class":513},[398,29658,24956],{"class":457},[398,29660,29661,29663,29666],{"class":400,"line":2853},[398,29662,28928],{"class":457},[398,29664,29665],{"class":513}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[398,29667,24956],{"class":457},[398,29669,29670,29672],{"class":400,"line":2867},[398,29671,29463],{"class":457},[398,29673,24956],{"class":457},[398,29675,29676],{"class":400,"line":2875},[398,29677,28934],{"class":513},[398,29679,29680],{"class":400,"line":2880},[398,29681,2676],{"emptyLinePlaceholder":328},[398,29683,29684,29686,29688,29690],{"class":400,"line":2886},[398,29685,26513],{"class":2239},[398,29687,29366],{"class":513},[398,29689,28925],{"class":513},[398,29691,24956],{"class":457},[398,29693,29694,29696,29698],{"class":400,"line":2892},[398,29695,29489],{"class":408},[398,29697,29492],{"class":513},[398,29699,24956],{"class":457},[398,29701,29702,29704,29707],{"class":400,"line":2897},[398,29703,28928],{"class":457},[398,29705,29706],{"class":513}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[398,29708,24956],{"class":457},[398,29710,29711,29713],{"class":400,"line":8225},[398,29712,29463],{"class":457},[398,29714,24956],{"class":457},[398,29716,29717],{"class":400,"line":8249},[398,29718,28934],{"class":513},[398,29720,29721],{"class":400,"line":8254},[398,29722,2676],{"emptyLinePlaceholder":328},[398,29724,29725,29727,29729,29731],{"class":400,"line":8260},[398,29726,26746],{"class":2239},[398,29728,29366],{"class":513},[398,29730,28925],{"class":513},[398,29732,24956],{"class":457},[398,29734,29735,29737,29739],{"class":400,"line":8287},[398,29736,29489],{"class":408},[398,29738,29492],{"class":513},[398,29740,24956],{"class":457},[398,29742,29743,29745,29748],{"class":400,"line":8292},[398,29744,28928],{"class":457},[398,29746,29747],{"class":513}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[398,29749,24956],{"class":457},[398,29751,29752,29754],{"class":400,"line":8298},[398,29753,29463],{"class":457},[398,29755,24956],{"class":457},[398,29757,29758],{"class":400,"line":8310},[398,29759,28934],{"class":513},[398,29761,29762],{"class":400,"line":8322},[398,29763,2676],{"emptyLinePlaceholder":328},[398,29765,29766,29768,29770,29772],{"class":400,"line":8334},[398,29767,26746],{"class":2239},[398,29769,29366],{"class":513},[398,29771,28925],{"class":513},[398,29773,24956],{"class":457},[398,29775,29776,29778,29780],{"class":400,"line":9993},[398,29777,29489],{"class":408},[398,29779,29492],{"class":513},[398,29781,24956],{"class":457},[398,29783,29784,29786,29789],{"class":400,"line":10018},[398,29785,28928],{"class":457},[398,29787,29788],{"class":513}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[398,29790,24956],{"class":457},[398,29792,29793,29795],{"class":400,"line":10041},[398,29794,29463],{"class":457},[398,29796,24956],{"class":457},[398,29798,29799],{"class":400,"line":10065},[398,29800,28934],{"class":513},[398,29802,29803],{"class":400,"line":10070},[398,29804,2676],{"emptyLinePlaceholder":328},[398,29806,29807,29809,29811,29813],{"class":400,"line":10075},[398,29808,26513],{"class":2239},[398,29810,29366],{"class":513},[398,29812,28925],{"class":513},[398,29814,24956],{"class":457},[398,29816,29817,29819,29821],{"class":400,"line":10080},[398,29818,29489],{"class":408},[398,29820,29492],{"class":513},[398,29822,24956],{"class":457},[398,29824,29825,29827,29830],{"class":400,"line":10089},[398,29826,28928],{"class":457},[398,29828,29829],{"class":513}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[398,29831,24956],{"class":457},[398,29833,29834,29836],{"class":400,"line":10094},[398,29835,29463],{"class":457},[398,29837,24956],{"class":457},[398,29839,29840],{"class":400,"line":10100},[398,29841,28934],{"class":513},[398,29843,29844],{"class":400,"line":10121},[398,29845,2676],{"emptyLinePlaceholder":328},[398,29847,29848,29851,29853,29855],{"class":400,"line":10127},[398,29849,29850],{"class":2239},"  docker",[398,29852,29366],{"class":513},[398,29854,28925],{"class":513},[398,29856,24956],{"class":457},[398,29858,29859,29861,29863],{"class":400,"line":10141},[398,29860,29489],{"class":408},[398,29862,29492],{"class":513},[398,29864,24956],{"class":457},[398,29866,29867,29869,29872],{"class":400,"line":10147},[398,29868,28928],{"class":457},[398,29870,29871],{"class":513}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[398,29873,24956],{"class":457},[398,29875,29876,29878],{"class":400,"line":10174},[398,29877,29463],{"class":457},[398,29879,24956],{"class":457},[398,29881,29882],{"class":400,"line":10183},[398,29883,28934],{"class":513},[19,29885,29886],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,29888,29889],{},[1738,29890],{"alt":316,"src":29891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,29893,29894],{},[1738,29895],{"alt":316,"src":29896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22275,29898,29900],{"id":29899},"_623清除构建缓存","6.2.3.清除构建缓存",[389,29902,29904],{"className":24099,"code":29903,"language":24101,"meta":316,"style":316},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[395,29905,29906,29911],{"__ignoreMap":316},[398,29907,29908],{"class":400,"line":401},[398,29909,29910],{"class":467},"# 清理BuildKit构建缓存\n",[398,29912,29913,29915,29918,29921],{"class":400,"line":317},[398,29914,26746],{"class":2239},[398,29916,29917],{"class":513}," builder",[398,29919,29920],{"class":513}," prune",[398,29922,29923],{"class":457}," -f\n",[19,29925,29926],{},[1738,29927],{"alt":316,"src":29928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[14,29930,29932],{"id":29931},"_63补充","6.3.补充",[22275,29934,29936],{"id":29935},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,29938,29939],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,29941,29942],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,29944,29945],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[389,29947,29949],{"className":24099,"code":29948,"language":24101,"meta":316,"style":316},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[395,29950,29951,29958],{"__ignoreMap":316},[398,29952,29953,29955],{"class":400,"line":401},[398,29954,27563],{"class":2239},[398,29956,29957],{"class":513}," nginx\n",[398,29959,29960,29962,29965,29968,29970],{"class":400,"line":317},[398,29961,28748],{"class":2239},[398,29963,29964],{"class":513}," echo",[398,29966,29967],{"class":513}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[398,29969,26415],{"class":404},[398,29971,29972],{"class":513}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,29974,29975],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,29977,29978],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[389,29980,29982],{"className":24099,"code":29981,"language":24101,"meta":316,"style":316},"docker build -t nginx:tuling .\n",[395,29983,29984],{"__ignoreMap":316},[398,29985,29986,29988,29990,29992,29995],{"class":400,"line":401},[398,29987,26746],{"class":2239},[398,29989,28925],{"class":513},[398,29991,28928],{"class":457},[398,29993,29994],{"class":513}," nginx:tuling",[398,29996,28934],{"class":513},[19,29998,29999],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,30001,30002],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[389,30004,30006],{"className":24099,"code":30005,"language":24101,"meta":316,"style":316},"docker run -d -p 92:80 nginx:tuling\n",[395,30007,30008],{"__ignoreMap":316},[398,30009,30010,30012,30014,30017,30019,30022],{"class":400,"line":401},[398,30011,26746],{"class":2239},[398,30013,27423],{"class":513},[398,30015,30016],{"class":457}," -d",[398,30018,29409],{"class":457},[398,30020,30021],{"class":513}," 92:80",[398,30023,30024],{"class":513}," nginx:tuling\n",[19,30026,30027,30028],{},"4、访问 ",[640,30029,30032],{"href":30030,"rel":30031},"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",[24142],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,30034,30035],{},[1738,30036],{"alt":316,"src":30037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,30039,30040],{},[1738,30041],{"alt":316,"src":30042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22275,30044,30046],{"id":30045},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,30048,30049],{},"只需要知道大体流程即可",[19,30051,30052],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,30054,30055],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,30057,30058],{},"2、在Dockerfile中添加以下内容",[389,30060,30062],{"className":26284,"code":30061,"language":26286,"meta":316,"style":316},"# 基于哪个镜像\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",[395,30063,30064,30069,30074,30079,30084,30089,30094,30099],{"__ignoreMap":316},[398,30065,30066],{"class":400,"line":401},[398,30067,30068],{},"# 基于哪个镜像\n",[398,30070,30071],{"class":400,"line":317},[398,30072,30073],{},"From java:8\n",[398,30075,30076],{"class":400,"line":320},[398,30077,30078],{},"# 复制文件到容器\n",[398,30080,30081],{"class":400,"line":1470},[398,30082,30083],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[398,30085,30086],{"class":400,"line":1476},[398,30087,30088],{},"# 声明需要暴露的端口\n",[398,30090,30091],{"class":400,"line":1490},[398,30092,30093],{},"EXPOSE 8877\n",[398,30095,30096],{"class":400,"line":1496},[398,30097,30098],{},"# 配置容器启动后执行的命令\n",[398,30100,30101],{"class":400,"line":1587},[398,30102,30103],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,30105,30106],{},"3、使用docker build命令构建镜像",[389,30108,30110],{"className":24099,"code":30109,"language":24101,"meta":316,"style":316},"docker build -t tulingmall-member:0.0.5 .\n",[395,30111,30112],{"__ignoreMap":316},[398,30113,30114,30116,30118,30120,30123],{"class":400,"line":401},[398,30115,26746],{"class":2239},[398,30117,28925],{"class":513},[398,30119,28928],{"class":457},[398,30121,30122],{"class":513}," tulingmall-member:0.0.5",[398,30124,28934],{"class":513},[19,30126,30127],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,30129,30130],{},[1738,30131],{"alt":316,"src":30132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,30134,30135],{},"4、启动镜像，加-d可在后台启动",[389,30137,30139],{"className":24099,"code":30138,"language":24101,"meta":316,"style":316},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[395,30140,30141],{"__ignoreMap":316},[398,30142,30143,30145,30147,30149,30151,30154],{"class":400,"line":401},[398,30144,26746],{"class":2239},[398,30146,27423],{"class":513},[398,30148,30016],{"class":457},[398,30150,29409],{"class":457},[398,30152,30153],{"class":513}," 8877:8877",[398,30155,30156],{"class":513}," tulingmall-member:0.0.5\n",[19,30158,30159],{},"加上JVM参数：",[389,30161,30163],{"className":24099,"code":30162,"language":24101,"meta":316,"style":316},"# --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",[395,30164,30165,30170,30185,30195,30204,30211],{"__ignoreMap":316},[398,30166,30167],{"class":400,"line":401},[398,30168,30169],{"class":467},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[398,30171,30172,30174,30176,30179,30181,30183],{"class":400,"line":317},[398,30173,26746],{"class":2239},[398,30175,27423],{"class":513},[398,30177,30178],{"class":457},"  -d",[398,30180,29409],{"class":457},[398,30182,30153],{"class":513},[398,30184,24956],{"class":457},[398,30186,30187,30189,30192],{"class":400,"line":320},[398,30188,28321],{"class":408},[398,30190,30191],{"class":513},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[398,30193,30194],{"class":457},"  \\\n",[398,30196,30197,30199,30202],{"class":400,"line":1470},[398,30198,28321],{"class":408},[398,30200,30201],{"class":513},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[398,30203,30194],{"class":457},[398,30205,30206,30209],{"class":400,"line":1476},[398,30207,30208],{"class":408},"--cap-add=SYS_PTRACE  ",[398,30210,26368],{"class":457},[398,30212,30213],{"class":400,"line":1490},[398,30214,30215],{"class":408},"tulingmall-member:0.0.5\n",[19,30217,30218],{},"5、访问会员服务接口",[19,30220,30221],{},[1738,30222],{"alt":316,"src":30223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22275,30225,30227],{"id":30226},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,30229,30230],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,30232,30233,30234],{},"阿里云docker镜像仓库：",[640,30235,30236],{"href":30236,"rel":30237},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[24142],[19,30239,30240],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,30242,30243],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,30245,30246],{},[1738,30247],{"alt":316,"src":30248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,30250,30251],{},"要把镜像推送到镜像仓库",[389,30253,30255],{"className":24099,"code":30254,"language":24101,"meta":316,"style":316},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[395,30256,30257],{"__ignoreMap":316},[398,30258,30259,30261,30263,30265],{"class":400,"line":401},[398,30260,26746],{"class":2239},[398,30262,29090],{"class":513},[398,30264,30122],{"class":513},[398,30266,30267],{"class":513}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,30269,30270],{},"最后将镜像推送到远程仓库",[389,30272,30274],{"className":24099,"code":30273,"language":24101,"meta":316,"style":316},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[395,30275,30276],{"__ignoreMap":316},[398,30277,30278,30280,30282],{"class":400,"line":401},[398,30279,26746],{"class":2239},[398,30281,29209],{"class":513},[398,30283,30267],{"class":513},[5403,30285,30286],{},"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":316,"searchDepth":317,"depth":317,"links":30288},[30289,30290,30291],{"id":28676,"depth":320,"text":28677},{"id":28905,"depth":320,"text":28906},{"id":29931,"depth":320,"text":29932},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28668,"description":316},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30298,"title":30299,"body":30300,"description":316,"extension":326,"meta":30443,"navigation":328,"path":30444,"seo":30445,"stem":30446,"__hash__":30447},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30301,"toc":30441},[30302,30305,30310,30315,30318,30323,30328,30331,30336,30341,30344,30349,30352,30355,30358,30361,30364,30367,30387,30409,30412,30415,30435,30438],[10,30303,30299],{"id":30304},"_7vscode远程开发",[38,30306,30307],{},[41,30308,30309],{},"插件1：微软Docker工具",[19,30311,30312],{},[1738,30313],{"alt":316,"src":30314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,30316,30317],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,30319,30320],{},[1738,30321],{"alt":316,"src":30322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[38,30324,30325],{"start":317},[41,30326,30327],{},"插件2：微软Docker远程开发工具",[19,30329,30330],{},"下面这是远程开发的插件。",[19,30332,30333],{},[1738,30334],{"alt":316,"src":30335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,30337,30338],{},[1738,30339],{"alt":316,"src":30340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,30342,30343],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,30345,30346],{},[1738,30347],{"alt":316,"src":30348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,30350,30351],{},"安装完拓展之后，vscode进行链接：",[19,30353,30354],{},"1.按ctrl+shift+p",[19,30356,30357],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,30359,30360],{},"3.选择目前运行的容器",[19,30362,30363],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,30365,30366],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[389,30368,30370],{"className":24099,"code":30369,"language":24101,"meta":316,"style":316},"docker run -v 主机目录:容器目录 image-name\n",[395,30371,30372],{"__ignoreMap":316},[398,30373,30374,30376,30378,30381,30384],{"class":400,"line":401},[398,30375,26746],{"class":2239},[398,30377,27423],{"class":513},[398,30379,30380],{"class":457}," -v",[398,30382,30383],{"class":513}," 主机目录:容器目录",[398,30385,30386],{"class":513}," image-name\n",[389,30388,30390],{"className":24099,"code":30389,"language":24101,"meta":316,"style":316},"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",[395,30391,30392],{"__ignoreMap":316},[398,30393,30394,30396,30398,30401,30403,30406],{"class":400,"line":401},[398,30395,26746],{"class":2239},[398,30397,27423],{"class":513},[398,30399,30400],{"class":457}," -it",[398,30402,30380],{"class":457},[398,30404,30405],{"class":513}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[398,30407,30408],{"class":513}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,30410,30411],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,30413,30414],{},"查看挂载情况：",[389,30416,30418],{"className":24099,"code":30417,"language":24101,"meta":316,"style":316},"mount | grep -i project\n",[395,30419,30420],{"__ignoreMap":316},[398,30421,30422,30425,30427,30430,30432],{"class":400,"line":401},[398,30423,30424],{"class":2239},"mount",[398,30426,25387],{"class":404},[398,30428,30429],{"class":2239}," grep",[398,30431,26623],{"class":457},[398,30433,30434],{"class":513}," project\n",[19,30436,30437],{},"也可以通过ls来进行查看",[5403,30439,30440],{},"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":316,"searchDepth":317,"depth":317,"links":30442},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30299,"description":316},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30449,"title":30450,"body":30451,"description":23654,"extension":326,"meta":30455,"navigation":328,"path":30457,"seo":30458,"stem":30459,"__hash__":30460},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30452,"toc":30453},[],{"title":316,"searchDepth":317,"depth":317,"links":30454},[],{"category":30456},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30450,"description":23654},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30462,"title":30463,"body":30464,"description":23654,"extension":326,"meta":30468,"navigation":328,"path":30469,"seo":30470,"stem":30471,"__hash__":30472},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30465,"toc":30466},[],{"title":316,"searchDepth":317,"depth":317,"links":30467},[],{"category":30456},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30463,"description":23654},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30474,"title":30475,"body":30476,"description":23654,"extension":326,"meta":30769,"navigation":328,"path":30770,"seo":30771,"stem":30772,"__hash__":30773},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30477,"toc":30767},[30478,30481,30489,30504,30509,30560,30563,30569,30756,30761,30764],[10,30479,30475],{"id":30480},"_1验证深度学习环境",[19,30482,30483,30484],{},"关于环境的安装，看",[640,30485,30488],{"href":30486,"rel":30487},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[24142],"Pytorch-->深度学习",[19,30490,30491,30492,30495,30496,30499,30500,30503],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[395,30493,30494],{},"pytorch-cuda=12.4"," 是一个“ ",[23,30497,30498],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[23,30501,30502],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,30505,30506],{},[1738,30507],{"alt":316,"src":30508},"\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",[389,30510,30512],{"className":24099,"code":30511,"language":24101,"meta":316,"style":316},"# 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",[395,30513,30514,30519],{"__ignoreMap":316},[398,30515,30516],{"class":400,"line":401},[398,30517,30518],{"class":467},"# CUDA 12.4\n",[398,30520,30521,30524,30526,30529,30532,30535,30538,30541,30543,30546,30549,30552,30555,30557],{"class":400,"line":317},[398,30522,30523],{"class":2239},"conda",[398,30525,24111],{"class":513},[398,30527,30528],{"class":513}," pytorch==",[398,30530,30531],{"class":457},"2.5.1",[398,30533,30534],{"class":513}," torchvision==",[398,30536,30537],{"class":457},"0.20.1",[398,30539,30540],{"class":513}," torchaudio==",[398,30542,30531],{"class":457},[398,30544,30545],{"class":513}," pytorch-cuda=",[398,30547,30548],{"class":457},"12.4",[398,30550,30551],{"class":457}," -c",[398,30553,30554],{"class":513}," pytorch",[398,30556,30551],{"class":457},[398,30558,30559],{"class":513}," nvidia\n",[19,30561,30562],{},"）：",[19,30564,30565],{},[640,30566,30567],{"href":30567,"rel":30568},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[24142],[389,30570,30574],{"className":30571,"code":30572,"language":30573,"meta":316,"style":316},"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",[395,30575,30576,30581,30589,30594,30604,30620,30625,30635,30672,30679,30691,30707,30712,30722,30734,30744],{"__ignoreMap":316},[398,30577,30578],{"class":400,"line":401},[398,30579,30580],{"class":467},"# 对深度学习环境进行测试\n",[398,30582,30583,30586],{"class":400,"line":317},[398,30584,30585],{"class":404},"import",[398,30587,30588],{"class":408}," torch\n",[398,30590,30591],{"class":400,"line":320},[398,30592,30593],{"class":467},"# 查看cuda是否被激活\n",[398,30595,30596,30599,30601],{"class":400,"line":1470},[398,30597,30598],{"class":408},"flag",[398,30600,454],{"class":404},[398,30602,30603],{"class":408},"torch.cuda.is_available()\n",[398,30605,30606,30609,30611,30614,30617],{"class":400,"line":1476},[398,30607,30608],{"class":457},"print",[398,30610,409],{"class":408},[398,30612,30613],{"class":513},"\"cuda:\"",[398,30615,30616],{"class":408},", flag)   ",[398,30618,30619],{"class":467},"#返回true的话说明被激活\n",[398,30621,30622],{"class":400,"line":1490},[398,30623,30624],{"class":467},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[398,30626,30627,30630,30632],{"class":400,"line":1496},[398,30628,30629],{"class":408},"ngpu",[398,30631,454],{"class":404},[398,30633,30634],{"class":457},"1\n",[398,30636,30637,30640,30642,30645,30648,30650,30653,30656,30659,30661,30663,30665,30667,30670],{"class":400,"line":1587},[398,30638,30639],{"class":408},"device",[398,30641,454],{"class":404},[398,30643,30644],{"class":408},"torch.device(",[398,30646,30647],{"class":513},"\"cuda:0\"",[398,30649,1980],{"class":404},[398,30651,30652],{"class":408},"(torch.cuda.is_available() ",[398,30654,30655],{"class":404},"and",[398,30657,30658],{"class":408}," ngpu",[398,30660,1362],{"class":404},[398,30662,593],{"class":457},[398,30664,13991],{"class":408},[398,30666,1977],{"class":404},[398,30668,30669],{"class":513}," \"cpu\"",[398,30671,415],{"class":408},[398,30673,30674,30676],{"class":400,"line":1593},[398,30675,30608],{"class":457},[398,30677,30678],{"class":408},"(device)\n",[398,30680,30681,30683,30686,30688],{"class":400,"line":1605},[398,30682,30608],{"class":457},[398,30684,30685],{"class":408},"(torch.cuda.get_device_name(",[398,30687,593],{"class":457},[398,30689,30690],{"class":408},"))\n",[398,30692,30693,30695,30698,30700,30702,30704],{"class":400,"line":1888},[398,30694,30608],{"class":457},[398,30696,30697],{"class":408},"(torch.rand(",[398,30699,480],{"class":457},[398,30701,780],{"class":408},[398,30703,480],{"class":457},[398,30705,30706],{"class":408},").cuda())\n",[398,30708,30709],{"class":400,"line":1893},[398,30710,30711],{"class":467},"# 查看cuda和cudnn的版本\n",[398,30713,30714,30717,30719],{"class":400,"line":1899},[398,30715,30716],{"class":408},"cuda_version",[398,30718,454],{"class":404},[398,30720,30721],{"class":408},"torch.version.cuda\n",[398,30723,30724,30726,30728,30731],{"class":400,"line":1904},[398,30725,30608],{"class":457},[398,30727,409],{"class":408},[398,30729,30730],{"class":513},"\"cuda version\"",[398,30732,30733],{"class":408},",cuda_version)\n",[398,30735,30736,30739,30741],{"class":400,"line":1918},[398,30737,30738],{"class":408},"cudnn_version",[398,30740,454],{"class":404},[398,30742,30743],{"class":408},"torch.backends.cudnn.version()\n",[398,30745,30746,30748,30750,30753],{"class":400,"line":1923},[398,30747,30608],{"class":457},[398,30749,409],{"class":408},[398,30751,30752],{"class":513},"\"cudnn version\"",[398,30754,30755],{"class":408},",cudnn_version)\n",[19,30757,30758],{},[1738,30759],{"alt":316,"src":30760},"\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,30762,30763],{},"cuda:0 指的是一块显卡",[5403,30765,30766],{},"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":316,"searchDepth":317,"depth":317,"links":30768},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30475,"description":23654},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30775,"title":30776,"body":30777,"description":23654,"extension":326,"meta":50581,"navigation":328,"path":50582,"seo":50583,"stem":50584,"__hash__":50585},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30778,"toc":50575},[30779,30782,30786,30790,30793,30798,30803,30806,30811,30816,30821,30824,30828,30833,30837,30842,30845,30850,30853,30856,30859,30862,30867,30870,30875,30880,30885,30890,30893,30897,30900,30905,31509,31514,31517,31522,31525,31528,31992,31995,31998,32001,32004,34055,34058,34063,34068,34863,34866,34871,35649,35653,37312,37316,38030,38034,38038,38043,38048,38053,38056,38061,38066,38071,38076,38081,38085,38090,39372,39377,39380,39383,39386,39541,39544,39547,40763,40768,41463,41467,41471,41476,41481,41484,41489,41494,41499,41504,41509,41514,41519,41524,41529,41534,41539,41544,41549,41554,41559,41564,41569,41574,41579,41584,41589,41594,41599,41604,41609,41614,41619,41624,41629,41634,41638,41642,41645,43123,43127,44774,44778,45472,45476,45479,45482,46026,46029,46033,46036,47433,47437,47440,48018,49805,49809,49812,50572],[10,30780,30776],{"id":30781},"_2经典神经网络",[14,30783,30785],{"id":30784},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22275,30787,30789],{"id":30788},"_211原理介绍","2.1.1.原理介绍",[19,30791,30792],{},"LeNet-5",[38,30794,30795],{},[41,30796,30797],{},"原理",[19,30799,30800],{},[1738,30801],{"alt":316,"src":30802},"\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,30804,30805],{},"B是batch批次；C是channel通道",[38,30807,30808],{"start":317},[41,30809,30810],{},"网络参数详细",[19,30812,30813],{},[1738,30814],{"alt":316,"src":30815},"\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,30817,30818],{},[1738,30819],{"alt":316,"src":30820},"\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,30822,30823],{},"AlexNet",[38,30825,30826],{},[41,30827,30797],{},[19,30829,30830],{},[1738,30831],{"alt":316,"src":30832},"\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",[38,30834,30835],{"start":317},[41,30836,30810],{},[19,30838,30839],{},[1738,30840],{"alt":316,"src":30841},"\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,30843,30844],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,30846,30847],{},[1738,30848],{"alt":316,"src":30849},"\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,30851,30852],{},"数据处理中的图像增强操作:",[19,30854,30855],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,30857,30858],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,30860,30861],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,30863,30864],{},[1738,30865],{"alt":316,"src":30866},"\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,30868,30869],{},"提升网络精确度的方法：LRN正则化",[19,30871,30872],{},[1738,30873],{"alt":316,"src":30874},"\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,30876,30877],{},[1738,30878],{"alt":316,"src":30879},"\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",[38,30881,30882],{"start":320},[41,30883,30884],{},"AlexNet的总结",[19,30886,30887],{},[1738,30888],{"alt":316,"src":30889},"\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,30891,30892],{},"比LeNet模型要深一丢丢",[22275,30894,30896],{"id":30895},"_212代码实现","2.1.2.代码实现",[19,30898,30899],{},"（1）LeNet",[38,30901,30902],{},[41,30903,30904],{},"模型搭建",[389,30906,30908],{"className":30571,"code":30907,"language":30573,"meta":316,"style":316},"# 导入库\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",[395,30909,30910,30915,30921,30926,30939,30944,30956,30960,30980,30985,30990,31001,31006,31025,31029,31034,31083,31095,31100,31129,31164,31191,31196,31208,31213,31233,31252,31271,31275,31280,31290,31307,31318,31333,31344,31355,31370,31385,31396,31403,31407,31421,31426,31449,31454,31459,31464,31468,31473,31478,31488],{"__ignoreMap":316},[398,30911,30912],{"class":400,"line":401},[398,30913,30914],{"class":467},"# 导入库\n",[398,30916,30917,30919],{"class":400,"line":317},[398,30918,30585],{"class":404},[398,30920,30588],{"class":408},[398,30922,30923],{"class":400,"line":320},[398,30924,30925],{"class":467},"# 导入神经网络层\n",[398,30927,30928,30931,30934,30936],{"class":400,"line":1470},[398,30929,30930],{"class":404},"from",[398,30932,30933],{"class":408}," torch ",[398,30935,30585],{"class":404},[398,30937,30938],{"class":408}," nn\n",[398,30940,30941],{"class":400,"line":1476},[398,30942,30943],{"class":467},"# 导入展示神经网络参数的包\n",[398,30945,30946,30948,30951,30953],{"class":400,"line":1490},[398,30947,30930],{"class":404},[398,30949,30950],{"class":408}," torchsummary ",[398,30952,30585],{"class":404},[398,30954,30955],{"class":408}," summary\n",[398,30957,30958],{"class":400,"line":1496},[398,30959,2676],{"emptyLinePlaceholder":328},[398,30961,30962,30964,30967,30969,30972,30974,30977],{"class":400,"line":1587},[398,30963,14971],{"class":404},[398,30965,30966],{"class":2239}," LeNet",[398,30968,409],{"class":408},[398,30970,30971],{"class":2239},"nn",[398,30973,960],{"class":408},[398,30975,30976],{"class":2239},"Module",[398,30978,30979],{"class":408},"):\n",[398,30981,30982],{"class":400,"line":1593},[398,30983,30984],{"class":467},"    # 模型初始化:\n",[398,30986,30987],{"class":400,"line":1605},[398,30988,30989],{"class":467},"    # 定义一些网络层和激活函数\n",[398,30991,30992,30995,30998],{"class":400,"line":1888},[398,30993,30994],{"class":404},"    def",[398,30996,30997],{"class":457}," __init__",[398,30999,31000],{"class":408},"(self):\n",[398,31002,31003],{"class":400,"line":1893},[398,31004,31005],{"class":467},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[398,31007,31008,31011,31014,31017,31020,31023],{"class":400,"line":1899},[398,31009,31010],{"class":457},"        super",[398,31012,31013],{"class":408},"(LeNet,",[398,31015,31016],{"class":457},"self",[398,31018,31019],{"class":408},").",[398,31021,31022],{"class":457},"__init__",[398,31024,2252],{"class":408},[398,31026,31027],{"class":400,"line":1904},[398,31028,2676],{"emptyLinePlaceholder":328},[398,31030,31031],{"class":400,"line":1918},[398,31032,31033],{"class":467},"        # 定义网络层\n",[398,31035,31036,31039,31042,31044,31047,31050,31052,31054,31056,31059,31061,31063,31065,31068,31070,31072,31074,31077,31079,31081],{"class":400,"line":1923},[398,31037,31038],{"class":457},"        self",[398,31040,31041],{"class":408},".c1",[398,31043,454],{"class":404},[398,31045,31046],{"class":408},"nn.Conv2d(",[398,31048,31049],{"class":5493},"in_channels",[398,31051,454],{"class":404},[398,31053,619],{"class":457},[398,31055,780],{"class":408},[398,31057,31058],{"class":5493},"out_channels",[398,31060,454],{"class":404},[398,31062,746],{"class":457},[398,31064,780],{"class":408},[398,31066,31067],{"class":5493},"kernel_size",[398,31069,454],{"class":404},[398,31071,721],{"class":457},[398,31073,780],{"class":408},[398,31075,31076],{"class":5493},"padding",[398,31078,454],{"class":404},[398,31080,486],{"class":457},[398,31082,415],{"class":408},[398,31084,31085,31087,31090,31092],{"class":400,"line":1929},[398,31086,31038],{"class":457},[398,31088,31089],{"class":408},".sig",[398,31091,454],{"class":404},[398,31093,31094],{"class":408},"nn.Sigmoid()\n",[398,31096,31097],{"class":400,"line":1950},[398,31098,31099],{"class":467},"        # 定义池化\n",[398,31101,31102,31104,31107,31109,31112,31114,31116,31118,31120,31123,31125,31127],{"class":400,"line":1955},[398,31103,31038],{"class":457},[398,31105,31106],{"class":408},".s2",[398,31108,454],{"class":404},[398,31110,31111],{"class":408},"nn.AvgPool2d(",[398,31113,31067],{"class":5493},[398,31115,454],{"class":404},[398,31117,486],{"class":457},[398,31119,780],{"class":408},[398,31121,31122],{"class":5493},"stride",[398,31124,454],{"class":404},[398,31126,486],{"class":457},[398,31128,415],{"class":408},[398,31130,31131,31133,31136,31138,31140,31142,31144,31146,31148,31150,31152,31154,31156,31158,31160,31162],{"class":400,"line":1969},[398,31132,31038],{"class":457},[398,31134,31135],{"class":408},".c3",[398,31137,454],{"class":404},[398,31139,31046],{"class":408},[398,31141,31049],{"class":5493},[398,31143,454],{"class":404},[398,31145,746],{"class":457},[398,31147,780],{"class":408},[398,31149,31058],{"class":5493},[398,31151,454],{"class":404},[398,31153,1003],{"class":457},[398,31155,780],{"class":408},[398,31157,31067],{"class":5493},[398,31159,454],{"class":404},[398,31161,721],{"class":457},[398,31163,415],{"class":408},[398,31165,31166,31168,31171,31173,31175,31177,31179,31181,31183,31185,31187,31189],{"class":400,"line":1974},[398,31167,31038],{"class":457},[398,31169,31170],{"class":408},".s4",[398,31172,454],{"class":404},[398,31174,31111],{"class":408},[398,31176,31067],{"class":5493},[398,31178,454],{"class":404},[398,31180,486],{"class":457},[398,31182,780],{"class":408},[398,31184,31122],{"class":5493},[398,31186,454],{"class":404},[398,31188,486],{"class":457},[398,31190,415],{"class":408},[398,31192,31193],{"class":400,"line":2003},[398,31194,31195],{"class":467},"        # 定义平展层\n",[398,31197,31198,31200,31203,31205],{"class":400,"line":2008},[398,31199,31038],{"class":457},[398,31201,31202],{"class":408},".flatten",[398,31204,454],{"class":404},[398,31206,31207],{"class":408},"nn.Flatten()\n",[398,31209,31210],{"class":400,"line":2025},[398,31211,31212],{"class":467},"        # 定义全连接层\n",[398,31214,31215,31217,31220,31222,31225,31227,31229,31231],{"class":400,"line":2030},[398,31216,31038],{"class":457},[398,31218,31219],{"class":408},".f5",[398,31221,454],{"class":404},[398,31223,31224],{"class":408},"nn.Linear(",[398,31226,4263],{"class":457},[398,31228,780],{"class":408},[398,31230,1219],{"class":457},[398,31232,415],{"class":408},[398,31234,31235,31237,31240,31242,31244,31246,31248,31250],{"class":400,"line":2035},[398,31236,31038],{"class":457},[398,31238,31239],{"class":408},".f6",[398,31241,454],{"class":404},[398,31243,31224],{"class":408},[398,31245,1219],{"class":457},[398,31247,780],{"class":408},[398,31249,1113],{"class":457},[398,31251,415],{"class":408},[398,31253,31254,31256,31259,31261,31263,31265,31267,31269],{"class":400,"line":2040},[398,31255,31038],{"class":457},[398,31257,31258],{"class":408},".f7",[398,31260,454],{"class":404},[398,31262,31224],{"class":408},[398,31264,1113],{"class":457},[398,31266,780],{"class":408},[398,31268,848],{"class":457},[398,31270,415],{"class":408},[398,31272,31273],{"class":400,"line":2054},[398,31274,2676],{"emptyLinePlaceholder":328},[398,31276,31277],{"class":400,"line":2059},[398,31278,31279],{"class":467},"    # 写工具->写前向传播\n",[398,31281,31282,31284,31287],{"class":400,"line":2853},[398,31283,30994],{"class":404},[398,31285,31286],{"class":2239}," forward",[398,31288,31289],{"class":408},"(self,x):\n",[398,31291,31292,31295,31297,31299,31302,31304],{"class":400,"line":2867},[398,31293,31294],{"class":408},"        x",[398,31296,454],{"class":404},[398,31298,31016],{"class":457},[398,31300,31301],{"class":408},".sig(",[398,31303,31016],{"class":457},[398,31305,31306],{"class":408},".c1(x))\n",[398,31308,31309,31311,31313,31315],{"class":400,"line":2875},[398,31310,31294],{"class":408},[398,31312,454],{"class":404},[398,31314,31016],{"class":457},[398,31316,31317],{"class":408},".s2(x)\n",[398,31319,31320,31322,31324,31326,31328,31330],{"class":400,"line":2880},[398,31321,31294],{"class":408},[398,31323,454],{"class":404},[398,31325,31016],{"class":457},[398,31327,31301],{"class":408},[398,31329,31016],{"class":457},[398,31331,31332],{"class":408},".c3(x))\n",[398,31334,31335,31337,31339,31341],{"class":400,"line":2886},[398,31336,31294],{"class":408},[398,31338,454],{"class":404},[398,31340,31016],{"class":457},[398,31342,31343],{"class":408},".s4(x)\n",[398,31345,31346,31348,31350,31352],{"class":400,"line":2892},[398,31347,31294],{"class":408},[398,31349,454],{"class":404},[398,31351,31016],{"class":457},[398,31353,31354],{"class":408},".flatten(x)\n",[398,31356,31357,31359,31361,31363,31365,31367],{"class":400,"line":2897},[398,31358,31294],{"class":408},[398,31360,454],{"class":404},[398,31362,31016],{"class":457},[398,31364,31301],{"class":408},[398,31366,31016],{"class":457},[398,31368,31369],{"class":408},".f5(x))\n",[398,31371,31372,31374,31376,31378,31380,31382],{"class":400,"line":8225},[398,31373,31294],{"class":408},[398,31375,454],{"class":404},[398,31377,31016],{"class":457},[398,31379,31301],{"class":408},[398,31381,31016],{"class":457},[398,31383,31384],{"class":408},".f6(x))\n",[398,31386,31387,31389,31391,31393],{"class":400,"line":8249},[398,31388,31294],{"class":408},[398,31390,454],{"class":404},[398,31392,31016],{"class":457},[398,31394,31395],{"class":408},".f7(x)\n",[398,31397,31398,31400],{"class":400,"line":8254},[398,31399,15029],{"class":404},[398,31401,31402],{"class":408}," x\n",[398,31404,31405],{"class":400,"line":8260},[398,31406,2676],{"emptyLinePlaceholder":328},[398,31408,31409,31411,31414,31416,31419],{"class":400,"line":8287},[398,31410,1807],{"class":404},[398,31412,31413],{"class":457}," __name__",[398,31415,3225],{"class":404},[398,31417,31418],{"class":513},"\"__main__\"",[398,31420,4015],{"class":408},[398,31422,31423],{"class":400,"line":8292},[398,31424,31425],{"class":467},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[398,31427,31428,31431,31433,31435,31438,31440,31443,31445,31447],{"class":400,"line":8298},[398,31429,31430],{"class":408},"    device",[398,31432,454],{"class":404},[398,31434,30644],{"class":408},[398,31436,31437],{"class":513},"\"cuda\"",[398,31439,1980],{"class":404},[398,31441,31442],{"class":408}," torch.cuda.is_available() ",[398,31444,1977],{"class":404},[398,31446,30669],{"class":513},[398,31448,415],{"class":408},[398,31450,31451],{"class":400,"line":8310},[398,31452,31453],{"class":467},"    # 如果就是想指定用cpu用下方代码:\n",[398,31455,31456],{"class":400,"line":8322},[398,31457,31458],{"class":467},"    # device=\"cpu\"\n",[398,31460,31461],{"class":400,"line":8334},[398,31462,31463],{"class":467},"    # print(device)\n",[398,31465,31466],{"class":400,"line":9993},[398,31467,2676],{"emptyLinePlaceholder":328},[398,31469,31470],{"class":400,"line":10018},[398,31471,31472],{"class":467},"    # 实例化模型\n",[398,31474,31475],{"class":400,"line":10041},[398,31476,31477],{"class":467},"    # 将模型放到设备中去运行\n",[398,31479,31480,31483,31485],{"class":400,"line":10065},[398,31481,31482],{"class":408},"    model",[398,31484,454],{"class":404},[398,31486,31487],{"class":408},"LeNet().to(device)\n",[398,31489,31490,31493,31496,31498,31500,31502,31504,31506],{"class":400,"line":10070},[398,31491,31492],{"class":457},"    print",[398,31494,31495],{"class":408},"(summary(model,(",[398,31497,619],{"class":457},[398,31499,780],{"class":408},[398,31501,1303],{"class":457},[398,31503,780],{"class":408},[398,31505,1303],{"class":457},[398,31507,31508],{"class":408},")))\n",[19,31510,31511],{},[1738,31512],{"alt":316,"src":31513},"\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,31515,31516],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[38,31518,31519],{"start":317},[41,31520,31521],{},"训练",[19,31523,31524],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,31526,31527],{},"在训练之前可以将数据展示看一下",[389,31529,31531],{"className":30571,"code":31530,"language":30573,"meta":316,"style":316},"# 建立画图的函数，用于展示数据\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",[395,31532,31533,31538,31543,31555,31567,31580,31585,31597,31602,31614,31619,31631,31635,31639,31660,31672,31677,31698,31709,31713,31718,31736,31747,31752,31763,31768,31779,31783,31788,31803,31816,31821,31826,31839,31852,31865,31870,31874,31879,31899,31916,31936,31949,31962,31972,31987],{"__ignoreMap":316},[398,31534,31535],{"class":400,"line":401},[398,31536,31537],{"class":467},"# 建立画图的函数，用于展示数据\n",[398,31539,31540],{"class":400,"line":317},[398,31541,31542],{"class":467},"# torchvision中包含很多内置的数据集\n",[398,31544,31545,31547,31550,31552],{"class":400,"line":320},[398,31546,30930],{"class":404},[398,31548,31549],{"class":408}," sklearn.externals.array_api_compat.torch ",[398,31551,30585],{"class":404},[398,31553,31554],{"class":408}," squeeze\n",[398,31556,31557,31559,31562,31564],{"class":400,"line":1470},[398,31558,30930],{"class":404},[398,31560,31561],{"class":408}," torchvision.datasets ",[398,31563,30585],{"class":404},[398,31565,31566],{"class":408}," FashionMNIST\n",[398,31568,31569,31571,31574,31577],{"class":400,"line":1476},[398,31570,30585],{"class":404},[398,31572,31573],{"class":408}," numpy ",[398,31575,31576],{"class":404},"as",[398,31578,31579],{"class":408}," np\n",[398,31581,31582],{"class":400,"line":1490},[398,31583,31584],{"class":467},"# 引入处理数据集的包\n",[398,31586,31587,31589,31592,31594],{"class":400,"line":1496},[398,31588,30930],{"class":404},[398,31590,31591],{"class":408}," torchvision ",[398,31593,30585],{"class":404},[398,31595,31596],{"class":408}," transforms\n",[398,31598,31599],{"class":400,"line":1587},[398,31600,31601],{"class":467},"# 从torch库中引入数据处理的包\n",[398,31603,31604,31606,31609,31611],{"class":400,"line":1593},[398,31605,30585],{"class":404},[398,31607,31608],{"class":408}," torch.utils.data ",[398,31610,31576],{"class":404},[398,31612,31613],{"class":408}," Data\n",[398,31615,31616],{"class":400,"line":1605},[398,31617,31618],{"class":467},"# 导入画图的库\n",[398,31620,31621,31623,31626,31628],{"class":400,"line":1888},[398,31622,30585],{"class":404},[398,31624,31625],{"class":408}," matplotlib.pyplot ",[398,31627,31576],{"class":404},[398,31629,31630],{"class":408}," plt\n",[398,31632,31633],{"class":400,"line":1893},[398,31634,2676],{"emptyLinePlaceholder":328},[398,31636,31637],{"class":400,"line":1899},[398,31638,2676],{"emptyLinePlaceholder":328},[398,31640,31641,31644,31646,31649,31652,31654,31657],{"class":400,"line":1904},[398,31642,31643],{"class":408},"train_data",[398,31645,454],{"class":404},[398,31647,31648],{"class":408},"FashionMNIST(",[398,31650,31651],{"class":5493},"root",[398,31653,454],{"class":404},[398,31655,31656],{"class":513},"'.\u002Fdata'",[398,31658,31659],{"class":408},",\n",[398,31661,31662,31665,31667,31670],{"class":400,"line":1918},[398,31663,31664],{"class":5493},"                        train",[398,31666,454],{"class":404},[398,31668,31669],{"class":457},"True",[398,31671,31659],{"class":408},[398,31673,31674],{"class":400,"line":1923},[398,31675,31676],{"class":467},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[398,31678,31679,31682,31684,31687,31690,31692,31695],{"class":400,"line":1929},[398,31680,31681],{"class":5493},"                        transform",[398,31683,454],{"class":404},[398,31685,31686],{"class":408},"transforms.Compose([transforms.Resize(",[398,31688,31689],{"class":5493},"size",[398,31691,454],{"class":404},[398,31693,31694],{"class":457},"224",[398,31696,31697],{"class":408},"),transforms.ToTensor()]),\n",[398,31699,31700,31703,31705,31707],{"class":400,"line":1950},[398,31701,31702],{"class":5493},"                        download",[398,31704,454],{"class":404},[398,31706,31669],{"class":457},[398,31708,415],{"class":408},[398,31710,31711],{"class":400,"line":1955},[398,31712,2676],{"emptyLinePlaceholder":328},[398,31714,31715],{"class":400,"line":1969},[398,31716,31717],{"class":467},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[398,31719,31720,31723,31725,31728,31731,31733],{"class":400,"line":1974},[398,31721,31722],{"class":408},"train_loader",[398,31724,454],{"class":404},[398,31726,31727],{"class":408},"Data.DataLoader(",[398,31729,31730],{"class":5493},"dataset",[398,31732,454],{"class":404},[398,31734,31735],{"class":408},"train_data,\n",[398,31737,31738,31741,31743,31745],{"class":400,"line":2003},[398,31739,31740],{"class":5493},"                             batch_size",[398,31742,454],{"class":404},[398,31744,605],{"class":457},[398,31746,31659],{"class":408},[398,31748,31749],{"class":400,"line":2008},[398,31750,31751],{"class":467},"                             # 数据是否打乱\n",[398,31753,31754,31757,31759,31761],{"class":400,"line":2025},[398,31755,31756],{"class":5493},"                             shuffle",[398,31758,454],{"class":404},[398,31760,31669],{"class":457},[398,31762,31659],{"class":408},[398,31764,31765],{"class":400,"line":2030},[398,31766,31767],{"class":467},"                             # 规定加载数据的进程\n",[398,31769,31770,31773,31775,31777],{"class":400,"line":2035},[398,31771,31772],{"class":5493},"                             num_workers",[398,31774,454],{"class":404},[398,31776,593],{"class":457},[398,31778,415],{"class":408},[398,31780,31781],{"class":400,"line":2040},[398,31782,2676],{"emptyLinePlaceholder":328},[398,31784,31785],{"class":400,"line":2054},[398,31786,31787],{"class":467},"# 获得一个batch的数据\n",[398,31789,31790,31792,31795,31797,31800],{"class":400,"line":2059},[398,31791,3301],{"class":404},[398,31793,31794],{"class":408}," step,(b_x,b_y) ",[398,31796,26236],{"class":404},[398,31798,31799],{"class":457}," enumerate",[398,31801,31802],{"class":408},"(train_loader):\n",[398,31804,31805,31807,31810,31812,31814],{"class":400,"line":2853},[398,31806,3377],{"class":404},[398,31808,31809],{"class":408}," step ",[398,31811,1362],{"class":404},[398,31813,4369],{"class":457},[398,31815,4015],{"class":408},[398,31817,31818],{"class":400,"line":2867},[398,31819,31820],{"class":404},"        break\n",[398,31822,31823],{"class":400,"line":2875},[398,31824,31825],{"class":467},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[398,31827,31828,31831,31833,31836],{"class":400,"line":2880},[398,31829,31830],{"class":408},"batch_x",[398,31832,454],{"class":404},[398,31834,31835],{"class":408},"b_x.squeeze().numpy()  ",[398,31837,31838],{"class":467},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[398,31840,31841,31844,31846,31849],{"class":400,"line":2886},[398,31842,31843],{"class":408},"batch_y",[398,31845,454],{"class":404},[398,31847,31848],{"class":408},"b_y.numpy()   ",[398,31850,31851],{"class":467},"#将张量转换成功numpy数组\n",[398,31853,31854,31857,31859,31862],{"class":400,"line":2892},[398,31855,31856],{"class":408},"class_label",[398,31858,454],{"class":404},[398,31860,31861],{"class":408},"train_data.classes  ",[398,31863,31864],{"class":467},"#训练集标签\n",[398,31866,31867],{"class":400,"line":2897},[398,31868,31869],{"class":467},"# print(class_label)\n",[398,31871,31872],{"class":400,"line":8225},[398,31873,2676],{"emptyLinePlaceholder":328},[398,31875,31876],{"class":400,"line":8249},[398,31877,31878],{"class":467},"# 可视化一个batch的图像\n",[398,31880,31881,31884,31887,31889,31891,31893,31895,31897],{"class":400,"line":8254},[398,31882,31883],{"class":408},"plt.figure(",[398,31885,31886],{"class":5493},"figsize",[398,31888,454],{"class":404},[398,31890,409],{"class":408},[398,31892,900],{"class":457},[398,31894,780],{"class":408},[398,31896,721],{"class":457},[398,31898,30690],{"class":408},[398,31900,31901,31903,31906,31908,31911,31913],{"class":400,"line":8260},[398,31902,3301],{"class":404},[398,31904,31905],{"class":408}," ii ",[398,31907,26236],{"class":404},[398,31909,31910],{"class":408}," np.arange(",[398,31912,7635],{"class":457},[398,31914,31915],{"class":408},"(batch_y)):\n",[398,31917,31918,31921,31923,31925,31927,31930,31932,31934],{"class":400,"line":8287},[398,31919,31920],{"class":408},"    plt.subplot(",[398,31922,695],{"class":457},[398,31924,780],{"class":408},[398,31926,1003],{"class":457},[398,31928,31929],{"class":408},",ii ",[398,31931,883],{"class":404},[398,31933,25396],{"class":457},[398,31935,415],{"class":408},[398,31937,31938,31941,31944,31946],{"class":400,"line":8292},[398,31939,31940],{"class":408},"    plt.imshow(batch_x[ii,:,:],",[398,31942,31943],{"class":5493},"cmap",[398,31945,454],{"class":404},[398,31947,31948],{"class":408},"plt.cm.gray)\n",[398,31950,31951,31954,31956,31958,31960],{"class":400,"line":8298},[398,31952,31953],{"class":408},"    plt.title(class_label[batch_y[ii]],",[398,31955,31689],{"class":5493},[398,31957,454],{"class":404},[398,31959,848],{"class":457},[398,31961,415],{"class":408},[398,31963,31964,31967,31970],{"class":400,"line":8310},[398,31965,31966],{"class":408},"    plt.axis(",[398,31968,31969],{"class":513},"\"off\"",[398,31971,415],{"class":408},[398,31973,31974,31977,31980,31982,31985],{"class":400,"line":8322},[398,31975,31976],{"class":408},"    plt.subplots_adjust(",[398,31978,31979],{"class":5493},"wspace",[398,31981,454],{"class":404},[398,31983,31984],{"class":457},"0.05",[398,31986,415],{"class":408},[398,31988,31989],{"class":400,"line":8334},[398,31990,31991],{"class":408},"plt.show()\n",[19,31993,31994],{},"用matplotlib进行展示的过程可以后续再补",[19,31996,31997],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,31999,32000],{},"训练次数就是按照批次过整个训练集数据的次数",[19,32002,32003],{},"模型训练：",[389,32005,32007],{"className":30571,"code":32006,"language":30573,"meta":316,"style":316},"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",[395,32008,32009,32016,32023,32027,32039,32045,32056,32066,32076,32086,32096,32101,32113,32123,32127,32131,32136,32147,32160,32171,32188,32199,32238,32254,32266,32277,32282,32293,32309,32320,32331,32342,32349,32353,32358,32363,32367,32372,32382,32403,32407,32411,32416,32421,32426,32446,32450,32455,32465,32469,32474,32483,32488,32493,32498,32508,32512,32516,32521,32526,32536,32541,32551,32556,32565,32570,32579,32584,32593,32597,32602,32612,32616,32620,32625,32640,32668,32683,32687,32692,32697,32706,32711,32720,32725,32734,32739,32748,32753,32762,32767,32776,32781,32794,32799,32809,32814,32824,32830,32836,32842,32848,32859,32865,32885,32891,32902,32908,32914,32920,32926,32932,32938,32944,32964,32970,32986,32992,33006,33012,33027,33033,33042,33048,33057,33063,33069,33078,33084,33095,33101,33120,33126,33137,33143,33163,33179,33185,33199,33205,33211,33222,33228,33234,33244,33250,33261,33267,33277,33282,33288,33337,33384,33389,33395,33414,33420,33440,33446,33452,33462,33467,33473,33489,33534,33540,33546,33552,33563,33569,33575,33581,33599,33613,33622,33631,33640,33649,33655,33661,33669,33674,33680,33691,33697,33717,33723,33729,33735,33752,33758,33764,33770,33776,33782,33809,33833,33839,33845,33851,33862,33873,33879,33896,33919,33942,33948,33953,33962,33972,33978,33983,33989,34002,34008,34019,34030,34049],{"__ignoreMap":316},[398,32010,32011,32013],{"class":400,"line":401},[398,32012,30585],{"class":404},[398,32014,32015],{"class":408}," copy\n",[398,32017,32018,32020],{"class":400,"line":317},[398,32019,30585],{"class":404},[398,32021,32022],{"class":408}," time\n",[398,32024,32025],{"class":400,"line":320},[398,32026,2676],{"emptyLinePlaceholder":328},[398,32028,32029,32031,32034,32036],{"class":400,"line":1470},[398,32030,30585],{"class":404},[398,32032,32033],{"class":408}," pandas ",[398,32035,31576],{"class":404},[398,32037,32038],{"class":408}," pd\n",[398,32040,32041,32043],{"class":400,"line":1476},[398,32042,30585],{"class":404},[398,32044,30588],{"class":408},[398,32046,32047,32049,32051,32053],{"class":400,"line":1490},[398,32048,30930],{"class":404},[398,32050,31608],{"class":408},[398,32052,30585],{"class":404},[398,32054,32055],{"class":408}," Dataset\n",[398,32057,32058,32060,32062,32064],{"class":400,"line":1496},[398,32059,30930],{"class":404},[398,32061,31561],{"class":408},[398,32063,30585],{"class":404},[398,32065,31566],{"class":408},[398,32067,32068,32070,32072,32074],{"class":400,"line":1587},[398,32069,30930],{"class":404},[398,32071,31591],{"class":408},[398,32073,30585],{"class":404},[398,32075,31596],{"class":408},[398,32077,32078,32080,32082,32084],{"class":400,"line":1593},[398,32079,30585],{"class":404},[398,32081,31608],{"class":408},[398,32083,31576],{"class":404},[398,32085,31613],{"class":408},[398,32087,32088,32090,32092,32094],{"class":400,"line":1605},[398,32089,30585],{"class":404},[398,32091,31625],{"class":408},[398,32093,31576],{"class":404},[398,32095,31630],{"class":408},[398,32097,32098],{"class":400,"line":1888},[398,32099,32100],{"class":467},"# 导入模型\n",[398,32102,32103,32105,32108,32110],{"class":400,"line":1893},[398,32104,30930],{"class":404},[398,32106,32107],{"class":408}," model ",[398,32109,30585],{"class":404},[398,32111,32112],{"class":408}," LeNet\n",[398,32114,32115,32117,32119,32121],{"class":400,"line":1899},[398,32116,30930],{"class":404},[398,32118,30933],{"class":408},[398,32120,30585],{"class":404},[398,32122,30938],{"class":408},[398,32124,32125],{"class":400,"line":1904},[398,32126,2676],{"emptyLinePlaceholder":328},[398,32128,32129],{"class":400,"line":1918},[398,32130,2676],{"emptyLinePlaceholder":328},[398,32132,32133],{"class":400,"line":1923},[398,32134,32135],{"class":467},"# 处理训练集与验证集函数--->划分数据集\n",[398,32137,32138,32141,32144],{"class":400,"line":1929},[398,32139,32140],{"class":404},"def",[398,32142,32143],{"class":2239}," train_val_data_process",[398,32145,32146],{"class":408},"():\n",[398,32148,32149,32152,32154,32156,32158],{"class":400,"line":1950},[398,32150,32151],{"class":408},"    train_data",[398,32153,454],{"class":404},[398,32155,31648],{"class":408},[398,32157,31656],{"class":513},[398,32159,31659],{"class":408},[398,32161,32162,32165,32167,32169],{"class":400,"line":1955},[398,32163,32164],{"class":5493},"                            train",[398,32166,454],{"class":404},[398,32168,31669],{"class":457},[398,32170,31659],{"class":408},[398,32172,32173,32176,32178,32180,32182,32184,32186],{"class":400,"line":1969},[398,32174,32175],{"class":5493},"                            transform",[398,32177,454],{"class":404},[398,32179,31686],{"class":408},[398,32181,31689],{"class":5493},[398,32183,454],{"class":404},[398,32185,1303],{"class":457},[398,32187,31697],{"class":408},[398,32189,32190,32193,32195,32197],{"class":400,"line":1974},[398,32191,32192],{"class":5493},"                            download",[398,32194,454],{"class":404},[398,32196,31669],{"class":457},[398,32198,415],{"class":408},[398,32200,32201,32204,32206,32209,32212,32214,32217,32219,32221,32224,32226,32228,32231,32233,32235],{"class":400,"line":2003},[398,32202,32203],{"class":408},"    train_data,val_data",[398,32205,454],{"class":404},[398,32207,32208],{"class":408},"Data.random_split(train_data,[",[398,32210,32211],{"class":457},"round",[398,32213,409],{"class":408},[398,32215,32216],{"class":457},"0.8",[398,32218,857],{"class":404},[398,32220,7635],{"class":457},[398,32222,32223],{"class":408},"(train_data)),",[398,32225,32211],{"class":457},[398,32227,409],{"class":408},[398,32229,32230],{"class":457},"0.2",[398,32232,857],{"class":404},[398,32234,7635],{"class":457},[398,32236,32237],{"class":408},"(train_data))])\n",[398,32239,32240,32243,32245,32248,32250,32252],{"class":400,"line":2008},[398,32241,32242],{"class":408},"    train_dataloader ",[398,32244,454],{"class":404},[398,32246,32247],{"class":408}," Data.DataLoader(",[398,32249,31730],{"class":5493},[398,32251,454],{"class":404},[398,32253,31735],{"class":408},[398,32255,32256,32259,32261,32264],{"class":400,"line":2025},[398,32257,32258],{"class":5493},"                                       batch_size",[398,32260,454],{"class":404},[398,32262,32263],{"class":457},"128",[398,32265,31659],{"class":408},[398,32267,32268,32271,32273,32275],{"class":400,"line":2030},[398,32269,32270],{"class":5493},"                                       shuffle",[398,32272,454],{"class":404},[398,32274,31669],{"class":457},[398,32276,31659],{"class":408},[398,32278,32279],{"class":400,"line":2035},[398,32280,32281],{"class":467},"                                       # 规定8个进程\n",[398,32283,32284,32287,32289,32291],{"class":400,"line":2040},[398,32285,32286],{"class":5493},"                                       num_workers",[398,32288,454],{"class":404},[398,32290,797],{"class":457},[398,32292,415],{"class":408},[398,32294,32295,32298,32300,32302,32304,32306],{"class":400,"line":2054},[398,32296,32297],{"class":408},"    val_dataloader",[398,32299,454],{"class":404},[398,32301,31727],{"class":408},[398,32303,31730],{"class":5493},[398,32305,454],{"class":404},[398,32307,32308],{"class":408},"val_data,\n",[398,32310,32311,32314,32316,32318],{"class":400,"line":2059},[398,32312,32313],{"class":5493},"                                   batch_size",[398,32315,454],{"class":404},[398,32317,32263],{"class":457},[398,32319,31659],{"class":408},[398,32321,32322,32325,32327,32329],{"class":400,"line":2853},[398,32323,32324],{"class":5493},"                                   shuffle",[398,32326,454],{"class":404},[398,32328,31669],{"class":457},[398,32330,31659],{"class":408},[398,32332,32333,32336,32338,32340],{"class":400,"line":2867},[398,32334,32335],{"class":5493},"                                   num_workers",[398,32337,454],{"class":404},[398,32339,797],{"class":457},[398,32341,415],{"class":408},[398,32343,32344,32346],{"class":400,"line":2875},[398,32345,4366],{"class":404},[398,32347,32348],{"class":408}," train_dataloader,val_dataloader\n",[398,32350,32351],{"class":400,"line":2880},[398,32352,2676],{"emptyLinePlaceholder":328},[398,32354,32355],{"class":400,"line":2886},[398,32356,32357],{"class":467},"# 验证是否出错\n",[398,32359,32360],{"class":400,"line":2892},[398,32361,32362],{"class":467},"# train_val_data_process()\n",[398,32364,32365],{"class":400,"line":2897},[398,32366,2676],{"emptyLinePlaceholder":328},[398,32368,32369],{"class":400,"line":8225},[398,32370,32371],{"class":467},"# 定义模型训练函数\n",[398,32373,32374,32376,32379],{"class":400,"line":8249},[398,32375,32140],{"class":404},[398,32377,32378],{"class":2239}," train_model_process",[398,32380,32381],{"class":408},"(model,train_dataloader,val_dataloader,num_epochs):\n",[398,32383,32384,32386,32388,32390,32392,32394,32396,32398,32401],{"class":400,"line":8254},[398,32385,31430],{"class":408},[398,32387,454],{"class":404},[398,32389,30644],{"class":408},[398,32391,31437],{"class":513},[398,32393,1980],{"class":404},[398,32395,31442],{"class":408},[398,32397,1977],{"class":404},[398,32399,32400],{"class":513}," 'cpu'",[398,32402,415],{"class":408},[398,32404,32405],{"class":400,"line":8260},[398,32406,2676],{"emptyLinePlaceholder":328},[398,32408,32409],{"class":400,"line":8287},[398,32410,2676],{"emptyLinePlaceholder":328},[398,32412,32413],{"class":400,"line":8292},[398,32414,32415],{"class":467},"    # 定义优化器\n",[398,32417,32418],{"class":400,"line":8298},[398,32419,32420],{"class":467},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[398,32422,32423],{"class":400,"line":8310},[398,32424,32425],{"class":467},"    # lr为学习率\n",[398,32427,32428,32431,32433,32436,32439,32441,32444],{"class":400,"line":8322},[398,32429,32430],{"class":408},"    optimizer",[398,32432,454],{"class":404},[398,32434,32435],{"class":408},"torch.optim.Adam(model.parameters(),",[398,32437,32438],{"class":5493},"lr",[398,32440,454],{"class":404},[398,32442,32443],{"class":457},"0.001",[398,32445,415],{"class":408},[398,32447,32448],{"class":400,"line":8334},[398,32449,2676],{"emptyLinePlaceholder":328},[398,32451,32452],{"class":400,"line":9993},[398,32453,32454],{"class":467},"    # 定义损失函数使用交叉熵损失函数\n",[398,32456,32457,32460,32462],{"class":400,"line":10018},[398,32458,32459],{"class":408},"    criterion",[398,32461,454],{"class":404},[398,32463,32464],{"class":408},"nn.CrossEntropyLoss()\n",[398,32466,32467],{"class":400,"line":10041},[398,32468,2676],{"emptyLinePlaceholder":328},[398,32470,32471],{"class":400,"line":10065},[398,32472,32473],{"class":467},"    # 将模型放到GPU中进行训练\n",[398,32475,32476,32478,32480],{"class":400,"line":10070},[398,32477,31482],{"class":408},[398,32479,454],{"class":404},[398,32481,32482],{"class":408},"model.to(device)\n",[398,32484,32485],{"class":400,"line":10075},[398,32486,32487],{"class":467},"    # 复制当前模型的参数\n",[398,32489,32490],{"class":400,"line":10080},[398,32491,32492],{"class":467},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[398,32494,32495],{"class":400,"line":10089},[398,32496,32497],{"class":467},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[398,32499,32500,32503,32505],{"class":400,"line":10094},[398,32501,32502],{"class":408},"    best_model_wts",[398,32504,454],{"class":404},[398,32506,32507],{"class":408},"copy.deepcopy(model.state_dict())\n",[398,32509,32510],{"class":400,"line":10100},[398,32511,2676],{"emptyLinePlaceholder":328},[398,32513,32514],{"class":400,"line":10121},[398,32515,2676],{"emptyLinePlaceholder":328},[398,32517,32518],{"class":400,"line":10127},[398,32519,32520],{"class":467},"    # 初始化参数\n",[398,32522,32523],{"class":400,"line":10141},[398,32524,32525],{"class":467},"    # 最高准确度\n",[398,32527,32528,32531,32533],{"class":400,"line":10147},[398,32529,32530],{"class":408},"    best_acc",[398,32532,454],{"class":404},[398,32534,32535],{"class":457},"0.0\n",[398,32537,32538],{"class":400,"line":10174},[398,32539,32540],{"class":467},"    # 训练集损失列表\n",[398,32542,32543,32546,32548],{"class":400,"line":10183},[398,32544,32545],{"class":408},"    train_loss_all",[398,32547,454],{"class":404},[398,32549,32550],{"class":408},"[]\n",[398,32552,32553],{"class":400,"line":10189},[398,32554,32555],{"class":467},"    # 验证集函数列表\n",[398,32557,32558,32561,32563],{"class":400,"line":10197},[398,32559,32560],{"class":408},"    val_loss_all",[398,32562,454],{"class":404},[398,32564,32550],{"class":408},[398,32566,32567],{"class":400,"line":10202},[398,32568,32569],{"class":467},"    # 训练集准确度列表\n",[398,32571,32572,32575,32577],{"class":400,"line":16881},[398,32573,32574],{"class":408},"    train_acc_all",[398,32576,454],{"class":404},[398,32578,32550],{"class":408},[398,32580,32581],{"class":400,"line":16887},[398,32582,32583],{"class":467},"    # 验证集准确度列表\n",[398,32585,32586,32589,32591],{"class":400,"line":16910},[398,32587,32588],{"class":408},"    val_acc_all",[398,32590,454],{"class":404},[398,32592,32550],{"class":408},[398,32594,32595],{"class":400,"line":16916},[398,32596,2676],{"emptyLinePlaceholder":328},[398,32598,32599],{"class":400,"line":16939},[398,32600,32601],{"class":467},"    # 保存当前时间--->方便看每轮训练的时间\n",[398,32603,32604,32607,32609],{"class":400,"line":16953},[398,32605,32606],{"class":408},"    since",[398,32608,454],{"class":404},[398,32610,32611],{"class":408},"time.time()\n",[398,32613,32614],{"class":400,"line":16973},[398,32615,2676],{"emptyLinePlaceholder":328},[398,32617,32618],{"class":400,"line":16979},[398,32619,2676],{"emptyLinePlaceholder":328},[398,32621,32622],{"class":400,"line":16990},[398,32623,32624],{"class":467},"    # 准备工作完成--->开始训练模型\n",[398,32626,32627,32629,32632,32634,32637],{"class":400,"line":17013},[398,32628,3477],{"class":404},[398,32630,32631],{"class":408}," epoch ",[398,32633,26236],{"class":404},[398,32635,32636],{"class":457}," range",[398,32638,32639],{"class":408},"(num_epochs):\n",[398,32641,32642,32645,32647,32650,32653,32655,32657,32659,32662,32664,32666],{"class":400,"line":17035},[398,32643,32644],{"class":457},"        print",[398,32646,409],{"class":408},[398,32648,32649],{"class":513},"\"Epoch ",[398,32651,32652],{"class":457},"{}",[398,32654,986],{"class":513},[398,32656,32652],{"class":457},[398,32658,653],{"class":513},[398,32660,32661],{"class":408},".format(epoch,num_epochs",[398,32663,934],{"class":404},[398,32665,619],{"class":457},[398,32667,30690],{"class":408},[398,32669,32670,32672,32674,32677,32679,32681],{"class":400,"line":17040},[398,32671,32644],{"class":457},[398,32673,409],{"class":408},[398,32675,32676],{"class":513},"\"-\"",[398,32678,857],{"class":404},[398,32680,848],{"class":457},[398,32682,415],{"class":408},[398,32684,32685],{"class":400,"line":17046},[398,32686,2676],{"emptyLinePlaceholder":328},[398,32688,32689],{"class":400,"line":17060},[398,32690,32691],{"class":467},"        # 初始化参数\n",[398,32693,32694],{"class":400,"line":17073},[398,32695,32696],{"class":467},"        # 训练集损失函数\n",[398,32698,32699,32702,32704],{"class":400,"line":17078},[398,32700,32701],{"class":408},"        train_loss",[398,32703,454],{"class":404},[398,32705,32535],{"class":457},[398,32707,32708],{"class":400,"line":17092},[398,32709,32710],{"class":467},"        # 训练集准确度\n",[398,32712,32713,32716,32718],{"class":400,"line":17097},[398,32714,32715],{"class":408},"        train_corrects",[398,32717,454],{"class":404},[398,32719,3361],{"class":457},[398,32721,32722],{"class":400,"line":17103},[398,32723,32724],{"class":467},"        # 验证集损失函数\n",[398,32726,32727,32730,32732],{"class":400,"line":17108},[398,32728,32729],{"class":408},"        val_loss",[398,32731,454],{"class":404},[398,32733,32535],{"class":457},[398,32735,32736],{"class":400,"line":17122},[398,32737,32738],{"class":467},"        # 验证集准确度\n",[398,32740,32741,32744,32746],{"class":400,"line":17127},[398,32742,32743],{"class":408},"        val_corrects",[398,32745,454],{"class":404},[398,32747,3361],{"class":457},[398,32749,32750],{"class":400,"line":17132},[398,32751,32752],{"class":467},"        # 训练集样本数量\n",[398,32754,32755,32758,32760],{"class":400,"line":17146},[398,32756,32757],{"class":408},"        train_num",[398,32759,454],{"class":404},[398,32761,3361],{"class":457},[398,32763,32764],{"class":400,"line":17158},[398,32765,32766],{"class":467},"        # 验证集样本数量\n",[398,32768,32769,32772,32774],{"class":400,"line":17163},[398,32770,32771],{"class":408},"        val_num",[398,32773,454],{"class":404},[398,32775,3361],{"class":457},[398,32777,32778],{"class":400,"line":17176},[398,32779,32780],{"class":467},"        # 将数据放到设备,并开始训练\n",[398,32782,32783,32785,32787,32789,32791],{"class":400,"line":17181},[398,32784,3679],{"class":404},[398,32786,31794],{"class":408},[398,32788,26236],{"class":404},[398,32790,31799],{"class":457},[398,32792,32793],{"class":408},"(train_dataloader):\n",[398,32795,32796],{"class":400,"line":17186},[398,32797,32798],{"class":467},"            # 将特征放入到训练设备\n",[398,32800,32801,32804,32806],{"class":400,"line":17191},[398,32802,32803],{"class":408},"            b_x",[398,32805,454],{"class":404},[398,32807,32808],{"class":408},"b_x.to(device)\n",[398,32810,32811],{"class":400,"line":17204},[398,32812,32813],{"class":467},"            # 将标签放入到训练设备当中\n",[398,32815,32816,32819,32821],{"class":400,"line":17209},[398,32817,32818],{"class":408},"            b_y",[398,32820,454],{"class":404},[398,32822,32823],{"class":408},"b_y.to(device)\n",[398,32825,32827],{"class":400,"line":32826},98,[398,32828,32829],{"class":467},"            # 设置模型为训练模式\n",[398,32831,32833],{"class":400,"line":32832},99,[398,32834,32835],{"class":408},"            model.train()\n",[398,32837,32839],{"class":400,"line":32838},100,[398,32840,32841],{"class":467},"            # 将数据放到模型当中,开始前向传播\n",[398,32843,32845],{"class":400,"line":32844},101,[398,32846,32847],{"class":467},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[398,32849,32851,32854,32856],{"class":400,"line":32850},102,[398,32852,32853],{"class":408},"            output",[398,32855,454],{"class":404},[398,32857,32858],{"class":408},"model(b_x)\n",[398,32860,32862],{"class":400,"line":32861},103,[398,32863,32864],{"class":467},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[398,32866,32868,32871,32873,32876,32879,32881,32883],{"class":400,"line":32867},104,[398,32869,32870],{"class":408},"            pre_lab",[398,32872,454],{"class":404},[398,32874,32875],{"class":408},"torch.argmax(output,",[398,32877,32878],{"class":5493},"dim",[398,32880,454],{"class":404},[398,32882,619],{"class":457},[398,32884,415],{"class":408},[398,32886,32888],{"class":400,"line":32887},105,[398,32889,32890],{"class":467},"            # 计算每一个batch的损失函数\n",[398,32892,32894,32897,32899],{"class":400,"line":32893},106,[398,32895,32896],{"class":408},"            loss",[398,32898,454],{"class":404},[398,32900,32901],{"class":408},"criterion(output,b_y)\n",[398,32903,32905],{"class":400,"line":32904},107,[398,32906,32907],{"class":467},"            # 将梯度初始化为0\n",[398,32909,32911],{"class":400,"line":32910},108,[398,32912,32913],{"class":408},"            optimizer.zero_grad()\n",[398,32915,32917],{"class":400,"line":32916},109,[398,32918,32919],{"class":467},"            # 梯度置为0后再进行反向传播\n",[398,32921,32923],{"class":400,"line":32922},110,[398,32924,32925],{"class":408},"            loss.backward()\n",[398,32927,32929],{"class":400,"line":32928},111,[398,32930,32931],{"class":467},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[398,32933,32935],{"class":400,"line":32934},112,[398,32936,32937],{"class":408},"            optimizer.step()\n",[398,32939,32941],{"class":400,"line":32940},113,[398,32942,32943],{"class":467},"            # loss.item()指的是batch的平均损失\n",[398,32945,32947,32950,32952,32955,32957,32960,32962],{"class":400,"line":32946},114,[398,32948,32949],{"class":408},"            train_loss",[398,32951,9754],{"class":404},[398,32953,32954],{"class":408},"loss.item()",[398,32956,857],{"class":404},[398,32958,32959],{"class":408},"b_x.size(",[398,32961,593],{"class":457},[398,32963,415],{"class":408},[398,32965,32967],{"class":400,"line":32966},115,[398,32968,32969],{"class":467},"            # 计算每个批次中正确预测的数量\n",[398,32971,32973,32976,32978,32981,32983],{"class":400,"line":32972},116,[398,32974,32975],{"class":408},"            train_corrects",[398,32977,9754],{"class":404},[398,32979,32980],{"class":408},"torch.sum(pre_lab",[398,32982,3225],{"class":404},[398,32984,32985],{"class":408},"b_y.data)\n",[398,32987,32989],{"class":400,"line":32988},117,[398,32990,32991],{"class":467},"            # 计算目前为止一共处理了多少样本\n",[398,32993,32995,32998,33000,33002,33004],{"class":400,"line":32994},118,[398,32996,32997],{"class":408},"            train_num",[398,32999,9754],{"class":404},[398,33001,32959],{"class":408},[398,33003,593],{"class":457},[398,33005,415],{"class":408},[398,33007,33009],{"class":400,"line":33008},119,[398,33010,33011],{"class":467},"        # 验证数据\n",[398,33013,33015,33017,33020,33022,33024],{"class":400,"line":33014},120,[398,33016,3679],{"class":404},[398,33018,33019],{"class":408}," step ,(b_x,b_y) ",[398,33021,26236],{"class":404},[398,33023,31799],{"class":457},[398,33025,33026],{"class":408},"(val_dataloader):\n",[398,33028,33030],{"class":400,"line":33029},121,[398,33031,33032],{"class":467},"            # 将特征放到验证设备当中\n",[398,33034,33036,33038,33040],{"class":400,"line":33035},122,[398,33037,32803],{"class":408},[398,33039,454],{"class":404},[398,33041,32808],{"class":408},[398,33043,33045],{"class":400,"line":33044},123,[398,33046,33047],{"class":467},"            # 将标签放到放到训练设备当中\n",[398,33049,33051,33053,33055],{"class":400,"line":33050},124,[398,33052,32818],{"class":408},[398,33054,454],{"class":404},[398,33056,32823],{"class":408},[398,33058,33060],{"class":400,"line":33059},125,[398,33061,33062],{"class":467},"            # 开启验证模式，设置模型为评估模式\n",[398,33064,33066],{"class":400,"line":33065},126,[398,33067,33068],{"class":408},"            model.eval()\n",[398,33070,33072,33075],{"class":400,"line":33071},127,[398,33073,33074],{"class":404},"            with",[398,33076,33077],{"class":408}," torch.no_grad():\n",[398,33079,33081],{"class":400,"line":33080},128,[398,33082,33083],{"class":467},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[398,33085,33087,33090,33092],{"class":400,"line":33086},129,[398,33088,33089],{"class":408},"                output ",[398,33091,454],{"class":404},[398,33093,33094],{"class":408}," model(b_x)\n",[398,33096,33098],{"class":400,"line":33097},130,[398,33099,33100],{"class":467},"                # 查找每一行中最大值对应的下标\n",[398,33102,33104,33107,33109,33112,33114,33116,33118],{"class":400,"line":33103},131,[398,33105,33106],{"class":408},"                pre_lab ",[398,33108,454],{"class":404},[398,33110,33111],{"class":408}," torch.argmax(output, ",[398,33113,32878],{"class":5493},[398,33115,454],{"class":404},[398,33117,619],{"class":457},[398,33119,415],{"class":408},[398,33121,33123],{"class":400,"line":33122},132,[398,33124,33125],{"class":467},"                # 计算验证集上的当前 batch 损失\n",[398,33127,33129,33132,33134],{"class":400,"line":33128},133,[398,33130,33131],{"class":408},"                val_batch_loss ",[398,33133,454],{"class":404},[398,33135,33136],{"class":408}," criterion(output, b_y)\n",[398,33138,33140],{"class":400,"line":33139},134,[398,33141,33142],{"class":467},"                # 对损失函数进行累加（按样本数加权）\n",[398,33144,33146,33149,33151,33154,33156,33159,33161],{"class":400,"line":33145},135,[398,33147,33148],{"class":408},"                val_loss ",[398,33150,9754],{"class":404},[398,33152,33153],{"class":408}," val_batch_loss.item() ",[398,33155,857],{"class":404},[398,33157,33158],{"class":408}," b_x.size(",[398,33160,593],{"class":457},[398,33162,415],{"class":408},[398,33164,33166,33169,33171,33174,33176],{"class":400,"line":33165},136,[398,33167,33168],{"class":408},"                val_corrects ",[398,33170,9754],{"class":404},[398,33172,33173],{"class":408}," torch.sum(pre_lab ",[398,33175,3225],{"class":404},[398,33177,33178],{"class":408}," b_y.data)\n",[398,33180,33182],{"class":400,"line":33181},137,[398,33183,33184],{"class":467},"                # 当前用于验证的样本数量\n",[398,33186,33188,33191,33193,33195,33197],{"class":400,"line":33187},138,[398,33189,33190],{"class":408},"            val_num ",[398,33192,9754],{"class":404},[398,33194,33158],{"class":408},[398,33196,593],{"class":457},[398,33198,415],{"class":408},[398,33200,33202],{"class":400,"line":33201},139,[398,33203,33204],{"class":467},"        # 计算并保存每一次迭代的loss值和准确率\n",[398,33206,33208],{"class":400,"line":33207},140,[398,33209,33210],{"class":467},"        # 计算并保存训练集的loss值\n",[398,33212,33214,33217,33219],{"class":400,"line":33213},141,[398,33215,33216],{"class":408},"        train_loss_all.append(train_loss",[398,33218,986],{"class":404},[398,33220,33221],{"class":408},"train_num)\n",[398,33223,33225],{"class":400,"line":33224},142,[398,33226,33227],{"class":467},"        # 取双精度\n",[398,33229,33231],{"class":400,"line":33230},143,[398,33232,33233],{"class":467},"        # 计算并保存训练集的准确率\n",[398,33235,33237,33240,33242],{"class":400,"line":33236},144,[398,33238,33239],{"class":408},"        train_acc_all.append(train_corrects.double().item()",[398,33241,986],{"class":404},[398,33243,33221],{"class":408},[398,33245,33247],{"class":400,"line":33246},145,[398,33248,33249],{"class":467},"        # 计算并保存验证集的loss值\n",[398,33251,33253,33256,33258],{"class":400,"line":33252},146,[398,33254,33255],{"class":408},"        val_loss_all.append(val_loss",[398,33257,986],{"class":404},[398,33259,33260],{"class":408},"val_num)\n",[398,33262,33264],{"class":400,"line":33263},147,[398,33265,33266],{"class":467},"        # 计算并保存验证集的准确率\n",[398,33268,33270,33273,33275],{"class":400,"line":33269},148,[398,33271,33272],{"class":408},"        val_acc_all.append(val_corrects.double().item()",[398,33274,986],{"class":404},[398,33276,33260],{"class":408},[398,33278,33280],{"class":400,"line":33279},149,[398,33281,2676],{"emptyLinePlaceholder":328},[398,33283,33285],{"class":400,"line":33284},150,[398,33286,33287],{"class":467},"        # 打印训练一轮的loss值和准确率\n",[398,33289,33291,33293,33295,33297,33299,33302,33304,33307,33309,33312,33314,33316,33318,33320,33323,33325,33327,33330,33332,33334],{"class":400,"line":33290},151,[398,33292,32644],{"class":457},[398,33294,409],{"class":408},[398,33296,3868],{"class":513},[398,33298,32652],{"class":457},[398,33300,33301],{"class":513},"train loss:",[398,33303,1298],{"class":457},[398,33305,33306],{"class":404},":.4f",[398,33308,1348],{"class":457},[398,33310,33311],{"class":513}," train acc:",[398,33313,1298],{"class":457},[398,33315,33306],{"class":404},[398,33317,1348],{"class":457},[398,33319,3868],{"class":513},[398,33321,33322],{"class":408},".format(epoch,train_loss_all[",[398,33324,934],{"class":404},[398,33326,619],{"class":457},[398,33328,33329],{"class":408},"],train_acc_all[",[398,33331,934],{"class":404},[398,33333,619],{"class":457},[398,33335,33336],{"class":408},"]))\n",[398,33338,33340,33342,33344,33346,33348,33351,33353,33355,33357,33360,33362,33364,33366,33368,33371,33373,33375,33378,33380,33382],{"class":400,"line":33339},152,[398,33341,32644],{"class":457},[398,33343,409],{"class":408},[398,33345,3868],{"class":513},[398,33347,32652],{"class":457},[398,33349,33350],{"class":513},"val loss:",[398,33352,1298],{"class":457},[398,33354,33306],{"class":404},[398,33356,1348],{"class":457},[398,33358,33359],{"class":513}," val acc:",[398,33361,1298],{"class":457},[398,33363,33306],{"class":404},[398,33365,1348],{"class":457},[398,33367,3868],{"class":513},[398,33369,33370],{"class":408},".format(epoch,val_loss_all[",[398,33372,934],{"class":404},[398,33374,619],{"class":457},[398,33376,33377],{"class":408},"],val_acc_all[",[398,33379,934],{"class":404},[398,33381,619],{"class":457},[398,33383,33336],{"class":408},[398,33385,33387],{"class":400,"line":33386},153,[398,33388,2676],{"emptyLinePlaceholder":328},[398,33390,33392],{"class":400,"line":33391},154,[398,33393,33394],{"class":467},"        # 判断准确度--->保存最优模型\n",[398,33396,33398,33400,33403,33405,33407,33409,33411],{"class":400,"line":33397},155,[398,33399,2773],{"class":404},[398,33401,33402],{"class":408}," val_acc_all[",[398,33404,934],{"class":404},[398,33406,619],{"class":457},[398,33408,1342],{"class":408},[398,33410,1362],{"class":404},[398,33412,33413],{"class":408},"best_acc:\n",[398,33415,33417],{"class":400,"line":33416},156,[398,33418,33419],{"class":467},"            # 保存当前模型准确度\n",[398,33421,33423,33426,33428,33430,33433,33435,33437],{"class":400,"line":33422},157,[398,33424,33425],{"class":408},"            best_acc:",[398,33427,448],{"class":457},[398,33429,454],{"class":404},[398,33431,33432],{"class":408},"val_acc_all[",[398,33434,934],{"class":404},[398,33436,619],{"class":457},[398,33438,33439],{"class":408},"]\n",[398,33441,33443],{"class":400,"line":33442},158,[398,33444,33445],{"class":467},"            # 保存当前的准确度\n",[398,33447,33449],{"class":400,"line":33448},159,[398,33450,33451],{"class":467},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[398,33453,33455,33458,33460],{"class":400,"line":33454},160,[398,33456,33457],{"class":408},"            best_model_wts",[398,33459,454],{"class":404},[398,33461,32507],{"class":408},[398,33463,33465],{"class":400,"line":33464},161,[398,33466,2676],{"emptyLinePlaceholder":328},[398,33468,33470],{"class":400,"line":33469},162,[398,33471,33472],{"class":467},"        # 计算耗时\n",[398,33474,33476,33479,33481,33484,33486],{"class":400,"line":33475},163,[398,33477,33478],{"class":408},"        time_use",[398,33480,454],{"class":404},[398,33482,33483],{"class":408},"time.time()",[398,33485,934],{"class":404},[398,33487,33488],{"class":408},"since\n",[398,33490,33492,33494,33496,33499,33501,33504,33506,33508,33510,33512,33514,33517,33520,33523,33525,33528,33530,33532],{"class":400,"line":33491},164,[398,33493,32644],{"class":457},[398,33495,409],{"class":408},[398,33497,33498],{"class":513},"'训练和验证耗费的时间",[398,33500,1298],{"class":457},[398,33502,33503],{"class":404},":.0f",[398,33505,1348],{"class":457},[398,33507,946],{"class":513},[398,33509,1298],{"class":457},[398,33511,33503],{"class":404},[398,33513,1348],{"class":457},[398,33515,33516],{"class":513},"s'",[398,33518,33519],{"class":408},".format(time_use",[398,33521,33522],{"class":404},"\u002F\u002F",[398,33524,1309],{"class":457},[398,33526,33527],{"class":408},",time_use",[398,33529,730],{"class":404},[398,33531,1309],{"class":457},[398,33533,30690],{"class":408},[398,33535,33537],{"class":400,"line":33536},165,[398,33538,33539],{"class":467},"    # 选择最优参数\n",[398,33541,33543],{"class":400,"line":33542},166,[398,33544,33545],{"class":467},"    # 加载最高准确率下的模型参数\n",[398,33547,33549],{"class":400,"line":33548},167,[398,33550,33551],{"class":467},"    # model.load_state_dict(best_model_wts)\n",[398,33553,33555,33558,33561],{"class":400,"line":33554},168,[398,33556,33557],{"class":408},"    torch.save(model.state_dict(best_model_wts), ",[398,33559,33560],{"class":513},"'.\u002Fbest_model.pth'",[398,33562,415],{"class":408},[398,33564,33566],{"class":400,"line":33565},169,[398,33567,33568],{"class":467},"    # 或者写成\n",[398,33570,33572],{"class":400,"line":33571},170,[398,33573,33574],{"class":467},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[398,33576,33578],{"class":400,"line":33577},171,[398,33579,33580],{"class":467},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[398,33582,33584,33587,33589,33592,33595,33597],{"class":400,"line":33583},172,[398,33585,33586],{"class":408},"    train_process",[398,33588,454],{"class":404},[398,33590,33591],{"class":408},"pd.DataFrame(",[398,33593,33594],{"class":5493},"data",[398,33596,454],{"class":404},[398,33598,1822],{"class":408},[398,33600,33602,33605,33607,33610],{"class":400,"line":33601},173,[398,33603,33604],{"class":513},"        \"epoch\"",[398,33606,1261],{"class":408},[398,33608,33609],{"class":457},"range",[398,33611,33612],{"class":408},"(num_epochs),\n",[398,33614,33616,33619],{"class":400,"line":33615},174,[398,33617,33618],{"class":513},"        \"train_loss_all\"",[398,33620,33621],{"class":408},":train_loss_all,\n",[398,33623,33625,33628],{"class":400,"line":33624},175,[398,33626,33627],{"class":513},"        \"val_loss_all\"",[398,33629,33630],{"class":408},":val_loss_all,\n",[398,33632,33634,33637],{"class":400,"line":33633},176,[398,33635,33636],{"class":513},"        \"train_acc_all\"",[398,33638,33639],{"class":408},":train_acc_all,\n",[398,33641,33643,33646],{"class":400,"line":33642},177,[398,33644,33645],{"class":513},"        \"val_acc_all\"",[398,33647,33648],{"class":408},":val_acc_all\n",[398,33650,33652],{"class":400,"line":33651},178,[398,33653,33654],{"class":408},"    })\n",[398,33656,33658],{"class":400,"line":33657},179,[398,33659,33660],{"class":467},"    # 返回训练保存的过程\n",[398,33662,33664,33666],{"class":400,"line":33663},180,[398,33665,4366],{"class":404},[398,33667,33668],{"class":408}," train_process\n",[398,33670,33672],{"class":400,"line":33671},181,[398,33673,2676],{"emptyLinePlaceholder":328},[398,33675,33677],{"class":400,"line":33676},182,[398,33678,33679],{"class":467},"# 将loss值和精度按照图片的形式展示出来\n",[398,33681,33683,33685,33688],{"class":400,"line":33682},183,[398,33684,32140],{"class":404},[398,33686,33687],{"class":2239}," matplot_acc_loss",[398,33689,33690],{"class":408},"(train_process):\n",[398,33692,33694],{"class":400,"line":33693},184,[398,33695,33696],{"class":467},"    # 设置图的大小\n",[398,33698,33700,33703,33705,33707,33709,33711,33713,33715],{"class":400,"line":33699},185,[398,33701,33702],{"class":408},"    plt.figure(",[398,33704,31886],{"class":5493},[398,33706,454],{"class":404},[398,33708,409],{"class":408},[398,33710,900],{"class":457},[398,33712,780],{"class":408},[398,33714,695],{"class":457},[398,33716,30690],{"class":408},[398,33718,33720],{"class":400,"line":33719},186,[398,33721,33722],{"class":467},"    # 设置图中有几张图\n",[398,33724,33726],{"class":400,"line":33725},187,[398,33727,33728],{"class":467},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[398,33730,33732],{"class":400,"line":33731},188,[398,33733,33734],{"class":467},"    # ①loss图\n",[398,33736,33738,33740,33742,33744,33746,33748,33750],{"class":400,"line":33737},189,[398,33739,31920],{"class":408},[398,33741,619],{"class":457},[398,33743,780],{"class":408},[398,33745,486],{"class":457},[398,33747,780],{"class":408},[398,33749,619],{"class":457},[398,33751,415],{"class":408},[398,33753,33755],{"class":400,"line":33754},190,[398,33756,33757],{"class":467},"    # 补充:\n",[398,33759,33761],{"class":400,"line":33760},191,[398,33762,33763],{"class":467},"    # plt.subplot(nrows, ncols, index)\n",[398,33765,33767],{"class":400,"line":33766},192,[398,33768,33769],{"class":467},"    # nrows：行数\n",[398,33771,33773],{"class":400,"line":33772},193,[398,33774,33775],{"class":467},"    # ncols：列数\n",[398,33777,33779],{"class":400,"line":33778},194,[398,33780,33781],{"class":467},"    # index：目前选中第几个子图（从1开始）\n",[398,33783,33785,33788,33791,33794,33797,33799,33802,33804,33807],{"class":400,"line":33784},195,[398,33786,33787],{"class":408},"    plt.plot(train_process[",[398,33789,33790],{"class":513},"\"epoch\"",[398,33792,33793],{"class":408},"],train_process.train_loss_all,",[398,33795,33796],{"class":513},"'ro-'",[398,33798,780],{"class":408},[398,33800,33801],{"class":5493},"label",[398,33803,454],{"class":404},[398,33805,33806],{"class":513},"'train loss'",[398,33808,415],{"class":408},[398,33810,33812,33814,33816,33819,33822,33824,33826,33828,33831],{"class":400,"line":33811},196,[398,33813,33787],{"class":408},[398,33815,33790],{"class":513},[398,33817,33818],{"class":408},"],train_process.val_loss_all,",[398,33820,33821],{"class":513},"'bs--'",[398,33823,780],{"class":408},[398,33825,33801],{"class":5493},[398,33827,454],{"class":404},[398,33829,33830],{"class":513},"'val loss'",[398,33832,415],{"class":408},[398,33834,33836],{"class":400,"line":33835},197,[398,33837,33838],{"class":467},"    # 添加一个图例\n",[398,33840,33842],{"class":400,"line":33841},198,[398,33843,33844],{"class":408},"    plt.legend()\n",[398,33846,33848],{"class":400,"line":33847},199,[398,33849,33850],{"class":467},"    # 给轴添加标签\n",[398,33852,33854,33857,33860],{"class":400,"line":33853},200,[398,33855,33856],{"class":408},"    plt.xlabel(",[398,33858,33859],{"class":513},"'epoch'",[398,33861,415],{"class":408},[398,33863,33865,33868,33871],{"class":400,"line":33864},201,[398,33866,33867],{"class":408},"    plt.ylabel(",[398,33869,33870],{"class":513},"'loss'",[398,33872,415],{"class":408},[398,33874,33876],{"class":400,"line":33875},202,[398,33877,33878],{"class":467},"    # ②准确度图\n",[398,33880,33882,33884,33886,33888,33890,33892,33894],{"class":400,"line":33881},203,[398,33883,31920],{"class":408},[398,33885,619],{"class":457},[398,33887,780],{"class":408},[398,33889,486],{"class":457},[398,33891,780],{"class":408},[398,33893,486],{"class":457},[398,33895,415],{"class":408},[398,33897,33899,33901,33903,33906,33908,33910,33912,33914,33917],{"class":400,"line":33898},204,[398,33900,33787],{"class":408},[398,33902,33790],{"class":513},[398,33904,33905],{"class":408},"],train_process.train_acc_all,",[398,33907,33796],{"class":513},[398,33909,780],{"class":408},[398,33911,33801],{"class":5493},[398,33913,454],{"class":404},[398,33915,33916],{"class":513},"'train acc'",[398,33918,415],{"class":408},[398,33920,33922,33924,33926,33929,33931,33933,33935,33937,33940],{"class":400,"line":33921},205,[398,33923,33787],{"class":408},[398,33925,33790],{"class":513},[398,33927,33928],{"class":408},"],train_process.val_acc_all,",[398,33930,33821],{"class":513},[398,33932,780],{"class":408},[398,33934,33801],{"class":5493},[398,33936,454],{"class":404},[398,33938,33939],{"class":513},"'val acc'",[398,33941,415],{"class":408},[398,33943,33945],{"class":400,"line":33944},206,[398,33946,33947],{"class":467},"    # 添加图例\n",[398,33949,33951],{"class":400,"line":33950},207,[398,33952,33844],{"class":408},[398,33954,33956,33958,33960],{"class":400,"line":33955},208,[398,33957,33856],{"class":408},[398,33959,33790],{"class":513},[398,33961,415],{"class":408},[398,33963,33965,33967,33970],{"class":400,"line":33964},209,[398,33966,33867],{"class":408},[398,33968,33969],{"class":513},"\"acc\"",[398,33971,415],{"class":408},[398,33973,33975],{"class":400,"line":33974},210,[398,33976,33977],{"class":408},"    plt.show()\n",[398,33979,33981],{"class":400,"line":33980},211,[398,33982,2676],{"emptyLinePlaceholder":328},[398,33984,33986],{"class":400,"line":33985},212,[398,33987,33988],{"class":467},"# 正式开始训练:\n",[398,33990,33992,33994,33996,33998,34000],{"class":400,"line":33991},213,[398,33993,1807],{"class":404},[398,33995,31413],{"class":457},[398,33997,3225],{"class":404},[398,33999,31418],{"class":513},[398,34001,4015],{"class":408},[398,34003,34005],{"class":400,"line":34004},214,[398,34006,34007],{"class":467},"    # 将模型实例化\n",[398,34009,34011,34014,34016],{"class":400,"line":34010},215,[398,34012,34013],{"class":408},"    LeNet",[398,34015,454],{"class":404},[398,34017,34018],{"class":408},"LeNet()\n",[398,34020,34022,34025,34027],{"class":400,"line":34021},216,[398,34023,34024],{"class":408},"    train_dataloader,val_dataloader",[398,34026,454],{"class":404},[398,34028,34029],{"class":408},"train_val_data_process()\n",[398,34031,34033,34035,34037,34040,34043,34045,34047],{"class":400,"line":34032},217,[398,34034,33586],{"class":408},[398,34036,454],{"class":404},[398,34038,34039],{"class":408},"train_model_process(LeNet,train_dataloader,val_dataloader,",[398,34041,34042],{"class":5493},"num_epochs",[398,34044,454],{"class":404},[398,34046,1102],{"class":457},[398,34048,415],{"class":408},[398,34050,34052],{"class":400,"line":34051},218,[398,34053,34054],{"class":408},"    matplot_acc_loss(train_process)\n",[19,34056,34057],{},"画图的补充点学习：",[19,34059,34060],{},[1738,34061],{"alt":316,"src":34062},"\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",[38,34064,34065],{"start":320},[41,34066,34067],{},"测试",[389,34069,34071],{"className":30571,"code":34070,"language":30573,"meta":316,"style":316},"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",[395,34072,34073,34079,34089,34101,34111,34116,34126,34136,34140,34145,34154,34171,34183,34200,34211,34227,34232,34243,34254,34265,34272,34276,34281,34291,34296,34313,34321,34325,34330,34339,34348,34352,34357,34362,34367,34374,34379,34391,34401,34411,34416,34420,34425,34434,34439,34455,34460,34465,34470,34484,34489,34503,34507,34512,34527,34532,34544,34548,34553,34565,34570,34578,34583,34588,34598,34603,34612,34617,34622,34626,34631,34636,34652,34660,34665,34670,34729,34735,34740,34751,34759,34767,34771,34776,34780,34785,34793,34798,34814,34819,34829,34839],{"__ignoreMap":316},[398,34074,34075,34077],{"class":400,"line":401},[398,34076,30585],{"class":404},[398,34078,30588],{"class":408},[398,34080,34081,34083,34085,34087],{"class":400,"line":317},[398,34082,30585],{"class":404},[398,34084,31608],{"class":408},[398,34086,31576],{"class":404},[398,34088,31613],{"class":408},[398,34090,34091,34093,34096,34098],{"class":400,"line":320},[398,34092,30930],{"class":404},[398,34094,34095],{"class":408}," jupyter_client.consoleapp ",[398,34097,30585],{"class":404},[398,34099,34100],{"class":408}," classes\n",[398,34102,34103,34105,34107,34109],{"class":400,"line":1470},[398,34104,30930],{"class":404},[398,34106,31591],{"class":408},[398,34108,30585],{"class":404},[398,34110,31596],{"class":408},[398,34112,34113],{"class":400,"line":1476},[398,34114,34115],{"class":467},"# 导入数据集\n",[398,34117,34118,34120,34122,34124],{"class":400,"line":1490},[398,34119,30930],{"class":404},[398,34121,31561],{"class":408},[398,34123,30585],{"class":404},[398,34125,31566],{"class":408},[398,34127,34128,34130,34132,34134],{"class":400,"line":1496},[398,34129,30930],{"class":404},[398,34131,32107],{"class":408},[398,34133,30585],{"class":404},[398,34135,32112],{"class":408},[398,34137,34138],{"class":400,"line":1587},[398,34139,2676],{"emptyLinePlaceholder":328},[398,34141,34142],{"class":400,"line":1593},[398,34143,34144],{"class":467},"# 测试数据处理\n",[398,34146,34147,34149,34152],{"class":400,"line":1605},[398,34148,32140],{"class":404},[398,34150,34151],{"class":2239}," test_data_process",[398,34153,32146],{"class":408},[398,34155,34156,34159,34161,34163,34165,34167,34169],{"class":400,"line":1888},[398,34157,34158],{"class":408},"    test_data",[398,34160,454],{"class":404},[398,34162,31648],{"class":408},[398,34164,31651],{"class":5493},[398,34166,454],{"class":404},[398,34168,31656],{"class":513},[398,34170,31659],{"class":408},[398,34172,34173,34176,34178,34181],{"class":400,"line":1893},[398,34174,34175],{"class":5493},"                           train",[398,34177,454],{"class":404},[398,34179,34180],{"class":457},"False",[398,34182,31659],{"class":408},[398,34184,34185,34188,34190,34192,34194,34196,34198],{"class":400,"line":1899},[398,34186,34187],{"class":5493},"                           transform",[398,34189,454],{"class":404},[398,34191,31686],{"class":408},[398,34193,31689],{"class":5493},[398,34195,454],{"class":404},[398,34197,1303],{"class":457},[398,34199,31697],{"class":408},[398,34201,34202,34205,34207,34209],{"class":400,"line":1904},[398,34203,34204],{"class":5493},"                           download",[398,34206,454],{"class":404},[398,34208,31669],{"class":457},[398,34210,415],{"class":408},[398,34212,34213,34216,34218,34220,34222,34224],{"class":400,"line":1918},[398,34214,34215],{"class":408},"    test_dataloader",[398,34217,454],{"class":404},[398,34219,31727],{"class":408},[398,34221,31730],{"class":5493},[398,34223,454],{"class":404},[398,34225,34226],{"class":408},"test_data,\n",[398,34228,34229],{"class":400,"line":1923},[398,34230,34231],{"class":467},"                                    # 这里是一张一张进行测试\n",[398,34233,34234,34237,34239,34241],{"class":400,"line":1929},[398,34235,34236],{"class":5493},"                                    batch_size",[398,34238,454],{"class":404},[398,34240,619],{"class":457},[398,34242,31659],{"class":408},[398,34244,34245,34248,34250,34252],{"class":400,"line":1950},[398,34246,34247],{"class":5493},"                                    shuffle",[398,34249,454],{"class":404},[398,34251,31669],{"class":457},[398,34253,31659],{"class":408},[398,34255,34256,34259,34261,34263],{"class":400,"line":1955},[398,34257,34258],{"class":5493},"                                    num_workers",[398,34260,454],{"class":404},[398,34262,593],{"class":457},[398,34264,415],{"class":408},[398,34266,34267,34269],{"class":400,"line":1969},[398,34268,4366],{"class":404},[398,34270,34271],{"class":408}," test_dataloader\n",[398,34273,34274],{"class":400,"line":1974},[398,34275,2676],{"emptyLinePlaceholder":328},[398,34277,34278],{"class":400,"line":2003},[398,34279,34280],{"class":467},"# 定义模型测试函数\n",[398,34282,34283,34285,34288],{"class":400,"line":2008},[398,34284,32140],{"class":404},[398,34286,34287],{"class":2239}," test_model_process",[398,34289,34290],{"class":408},"(model,test_dataloader):\n",[398,34292,34293],{"class":400,"line":2025},[398,34294,34295],{"class":467},"    # 将模型放到设备当中，先进行判断\n",[398,34297,34298,34300,34302,34304,34306,34308,34310],{"class":400,"line":2030},[398,34299,31430],{"class":408},[398,34301,454],{"class":404},[398,34303,31437],{"class":513},[398,34305,1980],{"class":404},[398,34307,31442],{"class":408},[398,34309,1977],{"class":404},[398,34311,34312],{"class":513}," \"cpu\"\n",[398,34314,34315,34317,34319],{"class":400,"line":2035},[398,34316,31482],{"class":408},[398,34318,454],{"class":404},[398,34320,32482],{"class":408},[398,34322,34323],{"class":400,"line":2040},[398,34324,2676],{"emptyLinePlaceholder":328},[398,34326,34327],{"class":400,"line":2054},[398,34328,34329],{"class":467},"    # 设置初始化参数\n",[398,34331,34332,34335,34337],{"class":400,"line":2059},[398,34333,34334],{"class":408},"    test_corrects",[398,34336,454],{"class":404},[398,34338,32535],{"class":457},[398,34340,34341,34344,34346],{"class":400,"line":2853},[398,34342,34343],{"class":408},"    test_num",[398,34345,454],{"class":404},[398,34347,3361],{"class":457},[398,34349,34350],{"class":400,"line":2867},[398,34351,2676],{"emptyLinePlaceholder":328},[398,34353,34354],{"class":400,"line":2875},[398,34355,34356],{"class":467},"    # 进行模型测试\n",[398,34358,34359],{"class":400,"line":2880},[398,34360,34361],{"class":467},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[398,34363,34364],{"class":400,"line":2886},[398,34365,34366],{"class":467},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[398,34368,34369,34372],{"class":400,"line":2892},[398,34370,34371],{"class":404},"    with",[398,34373,33077],{"class":408},[398,34375,34376],{"class":400,"line":2897},[398,34377,34378],{"class":467},"        # 从数据中进行\n",[398,34380,34381,34383,34386,34388],{"class":400,"line":8225},[398,34382,3679],{"class":404},[398,34384,34385],{"class":408}," test_data_x,test_data_y ",[398,34387,26236],{"class":404},[398,34389,34390],{"class":408}," test_dataloader:\n",[398,34392,34393,34396,34398],{"class":400,"line":8249},[398,34394,34395],{"class":408},"            test_data_x",[398,34397,454],{"class":404},[398,34399,34400],{"class":408},"test_data_x.to(device)\n",[398,34402,34403,34406,34408],{"class":400,"line":8254},[398,34404,34405],{"class":408},"            test_data_y",[398,34407,454],{"class":404},[398,34409,34410],{"class":408},"test_data_y.to(device)\n",[398,34412,34413],{"class":400,"line":8260},[398,34414,34415],{"class":467},"            # 设置为验证模式\n",[398,34417,34418],{"class":400,"line":8287},[398,34419,33068],{"class":408},[398,34421,34422],{"class":400,"line":8292},[398,34423,34424],{"class":467},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[398,34426,34427,34429,34431],{"class":400,"line":8298},[398,34428,32853],{"class":408},[398,34430,454],{"class":404},[398,34432,34433],{"class":408},"model(test_data_x)\n",[398,34435,34436],{"class":400,"line":8310},[398,34437,34438],{"class":467},"            # 查找每一行中最大值对应的下标\n",[398,34440,34441,34443,34445,34447,34449,34451,34453],{"class":400,"line":8322},[398,34442,32870],{"class":408},[398,34444,454],{"class":404},[398,34446,32875],{"class":408},[398,34448,32878],{"class":5493},[398,34450,454],{"class":404},[398,34452,619],{"class":457},[398,34454,415],{"class":408},[398,34456,34457],{"class":400,"line":8334},[398,34458,34459],{"class":467},"            # 计算正确率\n",[398,34461,34462],{"class":400,"line":9993},[398,34463,34464],{"class":467},"            # .data表示是一个不带梯度信息的tensor\n",[398,34466,34467],{"class":400,"line":10018},[398,34468,34469],{"class":467},"            # 如果预测正确，则准确度test_corrects加1\n",[398,34471,34472,34475,34477,34479,34481],{"class":400,"line":10041},[398,34473,34474],{"class":408},"            test_corrects",[398,34476,9754],{"class":404},[398,34478,32980],{"class":408},[398,34480,3225],{"class":404},[398,34482,34483],{"class":408},"test_data_y.data)\n",[398,34485,34486],{"class":400,"line":10065},[398,34487,34488],{"class":467},"            # 将所有的测试样本进行累计\n",[398,34490,34491,34494,34496,34499,34501],{"class":400,"line":10070},[398,34492,34493],{"class":408},"            test_num",[398,34495,9754],{"class":404},[398,34497,34498],{"class":408},"test_data_x.size(",[398,34500,593],{"class":457},[398,34502,415],{"class":408},[398,34504,34505],{"class":400,"line":10075},[398,34506,2676],{"emptyLinePlaceholder":328},[398,34508,34509],{"class":400,"line":10080},[398,34510,34511],{"class":467},"        # 计算准确度\n",[398,34513,34514,34517,34519,34522,34524],{"class":400,"line":10089},[398,34515,34516],{"class":408},"        test_acc",[398,34518,454],{"class":404},[398,34520,34521],{"class":408},"test_corrects.double().item()",[398,34523,986],{"class":404},[398,34525,34526],{"class":408},"test_num\n",[398,34528,34529],{"class":400,"line":10094},[398,34530,34531],{"class":467},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[398,34533,34534,34536,34538,34541],{"class":400,"line":10100},[398,34535,32644],{"class":457},[398,34537,409],{"class":408},[398,34539,34540],{"class":513},"\"测试的准确率：\"",[398,34542,34543],{"class":408},",test_acc)\n",[398,34545,34546],{"class":400,"line":10121},[398,34547,2676],{"emptyLinePlaceholder":328},[398,34549,34550],{"class":400,"line":10127},[398,34551,34552],{"class":467},"# 实现模型的测试功能\n",[398,34554,34555,34557,34559,34561,34563],{"class":400,"line":10141},[398,34556,1807],{"class":404},[398,34558,31413],{"class":457},[398,34560,3225],{"class":404},[398,34562,31418],{"class":513},[398,34564,4015],{"class":408},[398,34566,34567],{"class":400,"line":10147},[398,34568,34569],{"class":467},"    # 加载模型\n",[398,34571,34572,34574,34576],{"class":400,"line":10174},[398,34573,31482],{"class":408},[398,34575,454],{"class":404},[398,34577,34018],{"class":408},[398,34579,34580],{"class":400,"line":10183},[398,34581,34582],{"class":467},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[398,34584,34585],{"class":400,"line":10189},[398,34586,34587],{"class":467},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[398,34589,34590,34593,34596],{"class":400,"line":10197},[398,34591,34592],{"class":408},"    model.load_state_dict(torch.load(",[398,34594,34595],{"class":513},"'best_model.pth'",[398,34597,30690],{"class":408},[398,34599,34600],{"class":400,"line":10202},[398,34601,34602],{"class":467},"    # 数据加载\n",[398,34604,34605,34607,34609],{"class":400,"line":16881},[398,34606,34215],{"class":408},[398,34608,454],{"class":404},[398,34610,34611],{"class":408},"test_data_process()\n",[398,34613,34614],{"class":400,"line":16887},[398,34615,34616],{"class":467},"    # 加载模型测试的函数\n",[398,34618,34619],{"class":400,"line":16910},[398,34620,34621],{"class":408},"    test_model_process(model,test_dataloader)\n",[398,34623,34624],{"class":400,"line":16916},[398,34625,2676],{"emptyLinePlaceholder":328},[398,34627,34628],{"class":400,"line":16939},[398,34629,34630],{"class":467},"    # 验证集推理实现：\n",[398,34632,34633],{"class":400,"line":16953},[398,34634,34635],{"class":467},"    # 加载数据加载的更详细一些\n",[398,34637,34638,34640,34642,34644,34646,34648,34650],{"class":400,"line":16973},[398,34639,31430],{"class":408},[398,34641,454],{"class":404},[398,34643,31437],{"class":513},[398,34645,1980],{"class":404},[398,34647,31442],{"class":408},[398,34649,1977],{"class":404},[398,34651,34312],{"class":513},[398,34653,34654,34656,34658],{"class":400,"line":16979},[398,34655,31482],{"class":408},[398,34657,454],{"class":404},[398,34659,32482],{"class":408},[398,34661,34662],{"class":400,"line":16990},[398,34663,34664],{"class":467},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[398,34666,34667],{"class":400,"line":17013},[398,34668,34669],{"class":467},"    # 顺序不可改变\n",[398,34671,34672,34675,34677,34679,34682,34684,34687,34689,34692,34694,34697,34699,34702,34704,34707,34709,34712,34714,34717,34719,34722,34724,34727],{"class":400,"line":17035},[398,34673,34674],{"class":408},"    classes",[398,34676,454],{"class":404},[398,34678,1292],{"class":408},[398,34680,34681],{"class":513},"'T-shirt\u002Ftop'",[398,34683,780],{"class":408},[398,34685,34686],{"class":513},"'Trouser'",[398,34688,780],{"class":408},[398,34690,34691],{"class":513},"'Pullover'",[398,34693,780],{"class":408},[398,34695,34696],{"class":513},"'Dress'",[398,34698,780],{"class":408},[398,34700,34701],{"class":513},"'Coat'",[398,34703,780],{"class":408},[398,34705,34706],{"class":513},"'Sandal'",[398,34708,780],{"class":408},[398,34710,34711],{"class":513},"'Shirt'",[398,34713,780],{"class":408},[398,34715,34716],{"class":513},"'Sneaker'",[398,34718,780],{"class":408},[398,34720,34721],{"class":513},"'Bag'",[398,34723,780],{"class":408},[398,34725,34726],{"class":513},"'Ankle boot'",[398,34728,33439],{"class":408},[398,34730,34731,34733],{"class":400,"line":17040},[398,34732,34371],{"class":404},[398,34734,33077],{"class":408},[398,34736,34737],{"class":400,"line":17046},[398,34738,34739],{"class":467},"        # 将数据和标签都放到设备当中\n",[398,34741,34742,34744,34747,34749],{"class":400,"line":17060},[398,34743,3679],{"class":404},[398,34745,34746],{"class":408}," b_x,b_y ",[398,34748,26236],{"class":404},[398,34750,34390],{"class":408},[398,34752,34753,34755,34757],{"class":400,"line":17073},[398,34754,32803],{"class":408},[398,34756,454],{"class":404},[398,34758,32808],{"class":408},[398,34760,34761,34763,34765],{"class":400,"line":17078},[398,34762,32818],{"class":408},[398,34764,454],{"class":404},[398,34766,32823],{"class":408},[398,34768,34769],{"class":400,"line":17092},[398,34770,2676],{"emptyLinePlaceholder":328},[398,34772,34773],{"class":400,"line":17097},[398,34774,34775],{"class":467},"            # 设置模型为验证模式\n",[398,34777,34778],{"class":400,"line":17103},[398,34779,33068],{"class":408},[398,34781,34782],{"class":400,"line":17108},[398,34783,34784],{"class":467},"            # 模型推理结果\n",[398,34786,34787,34789,34791],{"class":400,"line":17122},[398,34788,32853],{"class":408},[398,34790,454],{"class":404},[398,34792,32858],{"class":408},[398,34794,34795],{"class":400,"line":17127},[398,34796,34797],{"class":467},"            # 获取最大下标，最大下标就是类别号\n",[398,34799,34800,34802,34804,34806,34808,34810,34812],{"class":400,"line":17132},[398,34801,32870],{"class":408},[398,34803,454],{"class":404},[398,34805,32875],{"class":408},[398,34807,32878],{"class":5493},[398,34809,454],{"class":404},[398,34811,619],{"class":457},[398,34813,415],{"class":408},[398,34815,34816],{"class":400,"line":17146},[398,34817,34818],{"class":467},"            # 取出张量中的数值\n",[398,34820,34821,34824,34826],{"class":400,"line":17158},[398,34822,34823],{"class":408},"            result",[398,34825,454],{"class":404},[398,34827,34828],{"class":408},"pre_lab.item()\n",[398,34830,34831,34834,34836],{"class":400,"line":17163},[398,34832,34833],{"class":408},"            label",[398,34835,454],{"class":404},[398,34837,34838],{"class":408},"b_y.item()\n",[398,34840,34841,34844,34846,34849,34852,34855,34857,34860],{"class":400,"line":17176},[398,34842,34843],{"class":457},"            print",[398,34845,409],{"class":408},[398,34847,34848],{"class":513},"\"预测值：\"",[398,34850,34851],{"class":408},",classes[result],",[398,34853,34854],{"class":513},"\"------\"",[398,34856,780],{"class":408},[398,34858,34859],{"class":513},"\"真实值：\"",[398,34861,34862],{"class":408},",classes[label])\n",[19,34864,34865],{},"（2）AlexNet",[38,34867,34868],{},[41,34869,34870],{},"神经网络构建",[389,34872,34874],{"className":30571,"code":34873,"language":30573,"meta":316,"style":316},"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",[395,34875,34876,34882,34892,34902,34914,34918,34935,34943,34958,34970,35012,35039,35082,35108,35152,35195,35238,35265,35269,35279,35284,35312,35331,35350,35354,35359,35367,35382,35392,35406,35416,35431,35446,35461,35472,35476,35481,35491,35506,35511,35525,35540,35552,35557,35568,35573,35579,35584,35596,35616,35621,35630],{"__ignoreMap":316},[398,34877,34878,34880],{"class":400,"line":401},[398,34879,30585],{"class":404},[398,34881,30588],{"class":408},[398,34883,34884,34886,34888,34890],{"class":400,"line":317},[398,34885,30930],{"class":404},[398,34887,30933],{"class":408},[398,34889,30585],{"class":404},[398,34891,30938],{"class":408},[398,34893,34894,34896,34898,34900],{"class":400,"line":320},[398,34895,30930],{"class":404},[398,34897,30950],{"class":408},[398,34899,30585],{"class":404},[398,34901,30955],{"class":408},[398,34903,34904,34906,34909,34911],{"class":400,"line":1470},[398,34905,30585],{"class":404},[398,34907,34908],{"class":408}," torch.nn.functional ",[398,34910,31576],{"class":404},[398,34912,34913],{"class":408}," F\n",[398,34915,34916],{"class":400,"line":1476},[398,34917,2676],{"emptyLinePlaceholder":328},[398,34919,34920,34922,34925,34927,34929,34931,34933],{"class":400,"line":1490},[398,34921,14971],{"class":404},[398,34923,34924],{"class":2239}," AlexNet",[398,34926,409],{"class":408},[398,34928,30971],{"class":2239},[398,34930,960],{"class":408},[398,34932,30976],{"class":2239},[398,34934,30979],{"class":408},[398,34936,34937,34939,34941],{"class":400,"line":1496},[398,34938,30994],{"class":404},[398,34940,30997],{"class":457},[398,34942,31000],{"class":408},[398,34944,34945,34947,34950,34952,34954,34956],{"class":400,"line":1587},[398,34946,31010],{"class":457},[398,34948,34949],{"class":408},"(AlexNet,",[398,34951,31016],{"class":457},[398,34953,31019],{"class":408},[398,34955,31022],{"class":457},[398,34957,2252],{"class":408},[398,34959,34960,34962,34965,34967],{"class":400,"line":1593},[398,34961,31038],{"class":457},[398,34963,34964],{"class":408},".ReLu",[398,34966,454],{"class":404},[398,34968,34969],{"class":408},"nn.ReLU()\n",[398,34971,34972,34974,34976,34978,34980,34982,34984,34986,34988,34990,34992,34994,34996,34998,35000,35002,35004,35006,35008,35010],{"class":400,"line":1605},[398,34973,31038],{"class":457},[398,34975,31041],{"class":408},[398,34977,454],{"class":404},[398,34979,31046],{"class":408},[398,34981,31049],{"class":5493},[398,34983,454],{"class":404},[398,34985,619],{"class":457},[398,34987,780],{"class":408},[398,34989,31058],{"class":5493},[398,34991,454],{"class":404},[398,34993,611],{"class":457},[398,34995,780],{"class":408},[398,34997,31067],{"class":5493},[398,34999,454],{"class":404},[398,35001,874],{"class":457},[398,35003,780],{"class":408},[398,35005,31122],{"class":5493},[398,35007,454],{"class":404},[398,35009,695],{"class":457},[398,35011,415],{"class":408},[398,35013,35014,35016,35018,35020,35023,35025,35027,35029,35031,35033,35035,35037],{"class":400,"line":1888},[398,35015,31038],{"class":457},[398,35017,31106],{"class":408},[398,35019,454],{"class":404},[398,35021,35022],{"class":408},"nn.MaxPool2d(",[398,35024,31067],{"class":5493},[398,35026,454],{"class":404},[398,35028,480],{"class":457},[398,35030,780],{"class":408},[398,35032,31122],{"class":5493},[398,35034,454],{"class":404},[398,35036,486],{"class":457},[398,35038,415],{"class":408},[398,35040,35041,35043,35045,35047,35049,35051,35053,35055,35057,35059,35061,35064,35066,35068,35070,35072,35074,35076,35078,35080],{"class":400,"line":1893},[398,35042,31038],{"class":457},[398,35044,31135],{"class":408},[398,35046,454],{"class":404},[398,35048,31046],{"class":408},[398,35050,31049],{"class":5493},[398,35052,454],{"class":404},[398,35054,611],{"class":457},[398,35056,780],{"class":408},[398,35058,31058],{"class":5493},[398,35060,454],{"class":404},[398,35062,35063],{"class":457},"256",[398,35065,780],{"class":408},[398,35067,31067],{"class":5493},[398,35069,454],{"class":404},[398,35071,721],{"class":457},[398,35073,780],{"class":408},[398,35075,31076],{"class":5493},[398,35077,454],{"class":404},[398,35079,486],{"class":457},[398,35081,415],{"class":408},[398,35083,35084,35086,35088,35090,35092,35094,35096,35098,35100,35102,35104,35106],{"class":400,"line":1899},[398,35085,31038],{"class":457},[398,35087,31170],{"class":408},[398,35089,454],{"class":404},[398,35091,35022],{"class":408},[398,35093,31067],{"class":5493},[398,35095,454],{"class":404},[398,35097,480],{"class":457},[398,35099,780],{"class":408},[398,35101,31122],{"class":5493},[398,35103,454],{"class":404},[398,35105,486],{"class":457},[398,35107,415],{"class":408},[398,35109,35110,35112,35115,35117,35119,35121,35123,35125,35127,35129,35131,35134,35136,35138,35140,35142,35144,35146,35148,35150],{"class":400,"line":1904},[398,35111,31038],{"class":457},[398,35113,35114],{"class":408},".c5",[398,35116,454],{"class":404},[398,35118,31046],{"class":408},[398,35120,31049],{"class":5493},[398,35122,454],{"class":404},[398,35124,35063],{"class":457},[398,35126,780],{"class":408},[398,35128,31058],{"class":5493},[398,35130,454],{"class":404},[398,35132,35133],{"class":457},"384",[398,35135,780],{"class":408},[398,35137,31067],{"class":5493},[398,35139,454],{"class":404},[398,35141,480],{"class":457},[398,35143,780],{"class":408},[398,35145,31076],{"class":5493},[398,35147,454],{"class":404},[398,35149,619],{"class":457},[398,35151,415],{"class":408},[398,35153,35154,35156,35159,35161,35163,35165,35167,35169,35171,35173,35175,35177,35179,35181,35183,35185,35187,35189,35191,35193],{"class":400,"line":1918},[398,35155,31038],{"class":457},[398,35157,35158],{"class":408},".c6",[398,35160,454],{"class":404},[398,35162,31046],{"class":408},[398,35164,31049],{"class":5493},[398,35166,454],{"class":404},[398,35168,35133],{"class":457},[398,35170,780],{"class":408},[398,35172,31058],{"class":5493},[398,35174,454],{"class":404},[398,35176,35133],{"class":457},[398,35178,780],{"class":408},[398,35180,31067],{"class":5493},[398,35182,454],{"class":404},[398,35184,480],{"class":457},[398,35186,780],{"class":408},[398,35188,31076],{"class":5493},[398,35190,454],{"class":404},[398,35192,619],{"class":457},[398,35194,415],{"class":408},[398,35196,35197,35199,35202,35204,35206,35208,35210,35212,35214,35216,35218,35220,35222,35224,35226,35228,35230,35232,35234,35236],{"class":400,"line":1923},[398,35198,31038],{"class":457},[398,35200,35201],{"class":408},".c7",[398,35203,454],{"class":404},[398,35205,31046],{"class":408},[398,35207,31049],{"class":5493},[398,35209,454],{"class":404},[398,35211,35133],{"class":457},[398,35213,780],{"class":408},[398,35215,31058],{"class":5493},[398,35217,454],{"class":404},[398,35219,35063],{"class":457},[398,35221,780],{"class":408},[398,35223,31067],{"class":5493},[398,35225,454],{"class":404},[398,35227,480],{"class":457},[398,35229,780],{"class":408},[398,35231,31076],{"class":5493},[398,35233,454],{"class":404},[398,35235,619],{"class":457},[398,35237,415],{"class":408},[398,35239,35240,35242,35245,35247,35249,35251,35253,35255,35257,35259,35261,35263],{"class":400,"line":1929},[398,35241,31038],{"class":457},[398,35243,35244],{"class":408},".s8",[398,35246,454],{"class":404},[398,35248,35022],{"class":408},[398,35250,31067],{"class":5493},[398,35252,454],{"class":404},[398,35254,480],{"class":457},[398,35256,780],{"class":408},[398,35258,31122],{"class":5493},[398,35260,454],{"class":404},[398,35262,486],{"class":457},[398,35264,415],{"class":408},[398,35266,35267],{"class":400,"line":1950},[398,35268,31195],{"class":467},[398,35270,35271,35273,35275,35277],{"class":400,"line":1955},[398,35272,31038],{"class":457},[398,35274,31202],{"class":408},[398,35276,454],{"class":404},[398,35278,31207],{"class":408},[398,35280,35281],{"class":400,"line":1969},[398,35282,35283],{"class":467},"       # 定义全连接层\n",[398,35285,35286,35288,35291,35293,35295,35297,35299,35301,35303,35305,35307,35310],{"class":400,"line":1974},[398,35287,31038],{"class":457},[398,35289,35290],{"class":408},".f1",[398,35292,454],{"class":404},[398,35294,31224],{"class":408},[398,35296,746],{"class":457},[398,35298,857],{"class":404},[398,35300,746],{"class":457},[398,35302,857],{"class":404},[398,35304,35063],{"class":457},[398,35306,780],{"class":408},[398,35308,35309],{"class":457},"4096",[398,35311,415],{"class":408},[398,35313,35314,35316,35319,35321,35323,35325,35327,35329],{"class":400,"line":2003},[398,35315,31038],{"class":457},[398,35317,35318],{"class":408},".f2",[398,35320,454],{"class":404},[398,35322,31224],{"class":408},[398,35324,35309],{"class":457},[398,35326,780],{"class":408},[398,35328,35309],{"class":457},[398,35330,415],{"class":408},[398,35332,35333,35335,35338,35340,35342,35344,35346,35348],{"class":400,"line":2008},[398,35334,31038],{"class":457},[398,35336,35337],{"class":408},".f3",[398,35339,454],{"class":404},[398,35341,31224],{"class":408},[398,35343,35309],{"class":457},[398,35345,780],{"class":408},[398,35347,848],{"class":457},[398,35349,415],{"class":408},[398,35351,35352],{"class":400,"line":2025},[398,35353,2676],{"emptyLinePlaceholder":328},[398,35355,35356],{"class":400,"line":2030},[398,35357,35358],{"class":467},"    # 定义前向传播\n",[398,35360,35361,35363,35365],{"class":400,"line":2035},[398,35362,30994],{"class":404},[398,35364,31286],{"class":2239},[398,35366,31289],{"class":408},[398,35368,35369,35371,35373,35375,35378,35380],{"class":400,"line":2040},[398,35370,31294],{"class":408},[398,35372,454],{"class":404},[398,35374,31016],{"class":457},[398,35376,35377],{"class":408},".ReLu(",[398,35379,31016],{"class":457},[398,35381,31306],{"class":408},[398,35383,35384,35386,35388,35390],{"class":400,"line":2054},[398,35385,31294],{"class":408},[398,35387,454],{"class":404},[398,35389,31016],{"class":457},[398,35391,31317],{"class":408},[398,35393,35394,35396,35398,35400,35402,35404],{"class":400,"line":2059},[398,35395,31294],{"class":408},[398,35397,454],{"class":404},[398,35399,31016],{"class":457},[398,35401,35377],{"class":408},[398,35403,31016],{"class":457},[398,35405,31332],{"class":408},[398,35407,35408,35410,35412,35414],{"class":400,"line":2853},[398,35409,31294],{"class":408},[398,35411,454],{"class":404},[398,35413,31016],{"class":457},[398,35415,31343],{"class":408},[398,35417,35418,35420,35422,35424,35426,35428],{"class":400,"line":2867},[398,35419,31294],{"class":408},[398,35421,454],{"class":404},[398,35423,31016],{"class":457},[398,35425,35377],{"class":408},[398,35427,31016],{"class":457},[398,35429,35430],{"class":408},".c5(x))\n",[398,35432,35433,35435,35437,35439,35441,35443],{"class":400,"line":2875},[398,35434,31294],{"class":408},[398,35436,454],{"class":404},[398,35438,31016],{"class":457},[398,35440,35377],{"class":408},[398,35442,31016],{"class":457},[398,35444,35445],{"class":408},".c6(x))\n",[398,35447,35448,35450,35452,35454,35456,35458],{"class":400,"line":2880},[398,35449,31294],{"class":408},[398,35451,454],{"class":404},[398,35453,31016],{"class":457},[398,35455,35377],{"class":408},[398,35457,31016],{"class":457},[398,35459,35460],{"class":408},".c7(x))\n",[398,35462,35463,35465,35467,35469],{"class":400,"line":2886},[398,35464,31294],{"class":408},[398,35466,454],{"class":404},[398,35468,31016],{"class":457},[398,35470,35471],{"class":408},".s8(x)\n",[398,35473,35474],{"class":400,"line":2892},[398,35475,2676],{"emptyLinePlaceholder":328},[398,35477,35478],{"class":400,"line":2897},[398,35479,35480],{"class":467},"        # 展平加线性全连接层\n",[398,35482,35483,35485,35487,35489],{"class":400,"line":8225},[398,35484,31294],{"class":408},[398,35486,454],{"class":404},[398,35488,31016],{"class":457},[398,35490,31354],{"class":408},[398,35492,35493,35495,35497,35499,35501,35503],{"class":400,"line":8249},[398,35494,31294],{"class":408},[398,35496,454],{"class":404},[398,35498,31016],{"class":457},[398,35500,35377],{"class":408},[398,35502,31016],{"class":457},[398,35504,35505],{"class":408},".f1(x))\n",[398,35507,35508],{"class":400,"line":8254},[398,35509,35510],{"class":467},"        # 还需要dropout对神经元随机进行失活\n",[398,35512,35513,35515,35517,35520,35523],{"class":400,"line":8260},[398,35514,31294],{"class":408},[398,35516,454],{"class":404},[398,35518,35519],{"class":408},"F.dropout(x,",[398,35521,35522],{"class":457},"0.5",[398,35524,415],{"class":408},[398,35526,35527,35529,35531,35533,35535,35537],{"class":400,"line":8287},[398,35528,31294],{"class":408},[398,35530,454],{"class":404},[398,35532,31016],{"class":457},[398,35534,35377],{"class":408},[398,35536,31016],{"class":457},[398,35538,35539],{"class":408},".f2(x))\n",[398,35541,35542,35544,35546,35548,35550],{"class":400,"line":8292},[398,35543,31294],{"class":408},[398,35545,454],{"class":404},[398,35547,35519],{"class":408},[398,35549,35522],{"class":457},[398,35551,415],{"class":408},[398,35553,35554],{"class":400,"line":8298},[398,35555,35556],{"class":467},"        # 直接输出\n",[398,35558,35559,35561,35563,35565],{"class":400,"line":8310},[398,35560,31294],{"class":408},[398,35562,454],{"class":404},[398,35564,31016],{"class":457},[398,35566,35567],{"class":408},".f3(x)\n",[398,35569,35570],{"class":400,"line":8322},[398,35571,35572],{"class":467},"        # 前向传播输出\n",[398,35574,35575,35577],{"class":400,"line":8334},[398,35576,15029],{"class":404},[398,35578,31402],{"class":408},[398,35580,35581],{"class":400,"line":9993},[398,35582,35583],{"class":467},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[398,35585,35586,35588,35590,35592,35594],{"class":400,"line":10018},[398,35587,1807],{"class":404},[398,35589,31413],{"class":457},[398,35591,3225],{"class":404},[398,35593,31418],{"class":513},[398,35595,4015],{"class":408},[398,35597,35598,35600,35602,35604,35606,35608,35610,35612,35614],{"class":400,"line":10041},[398,35599,31430],{"class":408},[398,35601,454],{"class":404},[398,35603,30644],{"class":408},[398,35605,31437],{"class":513},[398,35607,1980],{"class":404},[398,35609,31442],{"class":408},[398,35611,1977],{"class":404},[398,35613,30669],{"class":513},[398,35615,415],{"class":408},[398,35617,35618],{"class":400,"line":10065},[398,35619,35620],{"class":467},"    # 模型实例化，然后将实例化的模型放到设备中\n",[398,35622,35623,35625,35627],{"class":400,"line":10070},[398,35624,31482],{"class":408},[398,35626,454],{"class":404},[398,35628,35629],{"class":408},"AlexNet().to(device)\n",[398,35631,35632,35634,35636,35638,35640,35643,35645,35647],{"class":400,"line":10075},[398,35633,31492],{"class":457},[398,35635,31495],{"class":408},[398,35637,619],{"class":457},[398,35639,780],{"class":408},[398,35641,35642],{"class":457},"227",[398,35644,780],{"class":408},[398,35646,35642],{"class":457},[398,35648,31508],{"class":408},[38,35650,35651],{"start":317},[41,35652,31521],{},[389,35654,35656],{"className":30571,"code":35655,"language":30573,"meta":316,"style":316},"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",[395,35657,35658,35664,35670,35680,35686,35696,35706,35716,35726,35736,35740,35751,35761,35765,35769,35773,35781,35793,35803,35819,35829,35861,35875,35885,35895,35899,35909,35923,35933,35943,35953,35959,35963,35967,35971,35975,35979,35987,36007,36011,36015,36019,36023,36027,36043,36047,36051,36059,36063,36067,36075,36079,36083,36087,36095,36099,36103,36107,36111,36119,36123,36131,36135,36143,36147,36155,36159,36167,36171,36175,36183,36187,36191,36195,36207,36231,36245,36249,36253,36257,36265,36269,36277,36281,36289,36293,36301,36305,36313,36317,36325,36329,36341,36345,36353,36357,36365,36369,36373,36377,36381,36389,36393,36409,36413,36421,36425,36429,36433,36437,36441,36445,36449,36465,36469,36481,36485,36497,36501,36513,36517,36525,36529,36537,36541,36545,36550,36556,36560,36569,36573,36590,36594,36603,36607,36625,36638,36643,36656,36660,36664,36672,36676,36680,36688,36692,36700,36704,36712,36716,36720,36762,36804,36808,36812,36828,36832,36848,36852,36856,36864,36868,36872,36884,36922,36927,36932,36941,36945,36959,36969,36975,36981,36987,36993,36997,37001,37007,37011,37015,37023,37027,37045,37049,37053,37057,37073,37077,37081,37085,37089,37093,37113,37133,37137,37141,37145,37153,37161,37165,37181,37201,37221,37225,37229,37237,37245,37249,37253,37257,37269,37273,37283,37291,37308],{"__ignoreMap":316},[398,35659,35660,35662],{"class":400,"line":401},[398,35661,30585],{"class":404},[398,35663,32015],{"class":408},[398,35665,35666,35668],{"class":400,"line":317},[398,35667,30585],{"class":404},[398,35669,32022],{"class":408},[398,35671,35672,35674,35676,35678],{"class":400,"line":320},[398,35673,30585],{"class":404},[398,35675,32033],{"class":408},[398,35677,31576],{"class":404},[398,35679,32038],{"class":408},[398,35681,35682,35684],{"class":400,"line":1470},[398,35683,30585],{"class":404},[398,35685,30588],{"class":408},[398,35687,35688,35690,35692,35694],{"class":400,"line":1476},[398,35689,30930],{"class":404},[398,35691,31608],{"class":408},[398,35693,30585],{"class":404},[398,35695,32055],{"class":408},[398,35697,35698,35700,35702,35704],{"class":400,"line":1490},[398,35699,30930],{"class":404},[398,35701,31561],{"class":408},[398,35703,30585],{"class":404},[398,35705,31566],{"class":408},[398,35707,35708,35710,35712,35714],{"class":400,"line":1496},[398,35709,30930],{"class":404},[398,35711,31591],{"class":408},[398,35713,30585],{"class":404},[398,35715,31596],{"class":408},[398,35717,35718,35720,35722,35724],{"class":400,"line":1587},[398,35719,30585],{"class":404},[398,35721,31608],{"class":408},[398,35723,31576],{"class":404},[398,35725,31613],{"class":408},[398,35727,35728,35730,35732,35734],{"class":400,"line":1593},[398,35729,30585],{"class":404},[398,35731,31625],{"class":408},[398,35733,31576],{"class":404},[398,35735,31630],{"class":408},[398,35737,35738],{"class":400,"line":1605},[398,35739,32100],{"class":467},[398,35741,35742,35744,35746,35748],{"class":400,"line":1888},[398,35743,30930],{"class":404},[398,35745,32107],{"class":408},[398,35747,30585],{"class":404},[398,35749,35750],{"class":408}," AlexNet\n",[398,35752,35753,35755,35757,35759],{"class":400,"line":1893},[398,35754,30930],{"class":404},[398,35756,30933],{"class":408},[398,35758,30585],{"class":404},[398,35760,30938],{"class":408},[398,35762,35763],{"class":400,"line":1899},[398,35764,2676],{"emptyLinePlaceholder":328},[398,35766,35767],{"class":400,"line":1904},[398,35768,2676],{"emptyLinePlaceholder":328},[398,35770,35771],{"class":400,"line":1918},[398,35772,32135],{"class":467},[398,35774,35775,35777,35779],{"class":400,"line":1923},[398,35776,32140],{"class":404},[398,35778,32143],{"class":2239},[398,35780,32146],{"class":408},[398,35782,35783,35785,35787,35789,35791],{"class":400,"line":1929},[398,35784,32151],{"class":408},[398,35786,454],{"class":404},[398,35788,31648],{"class":408},[398,35790,31656],{"class":513},[398,35792,31659],{"class":408},[398,35794,35795,35797,35799,35801],{"class":400,"line":1950},[398,35796,32164],{"class":5493},[398,35798,454],{"class":404},[398,35800,31669],{"class":457},[398,35802,31659],{"class":408},[398,35804,35805,35807,35809,35811,35813,35815,35817],{"class":400,"line":1955},[398,35806,32175],{"class":5493},[398,35808,454],{"class":404},[398,35810,31686],{"class":408},[398,35812,31689],{"class":5493},[398,35814,454],{"class":404},[398,35816,35642],{"class":457},[398,35818,31697],{"class":408},[398,35820,35821,35823,35825,35827],{"class":400,"line":1969},[398,35822,32192],{"class":5493},[398,35824,454],{"class":404},[398,35826,31669],{"class":457},[398,35828,415],{"class":408},[398,35830,35831,35833,35835,35837,35839,35841,35843,35845,35847,35849,35851,35853,35855,35857,35859],{"class":400,"line":1974},[398,35832,32203],{"class":408},[398,35834,454],{"class":404},[398,35836,32208],{"class":408},[398,35838,32211],{"class":457},[398,35840,409],{"class":408},[398,35842,32216],{"class":457},[398,35844,857],{"class":404},[398,35846,7635],{"class":457},[398,35848,32223],{"class":408},[398,35850,32211],{"class":457},[398,35852,409],{"class":408},[398,35854,32230],{"class":457},[398,35856,857],{"class":404},[398,35858,7635],{"class":457},[398,35860,32237],{"class":408},[398,35862,35863,35865,35867,35869,35871,35873],{"class":400,"line":2003},[398,35864,32242],{"class":408},[398,35866,454],{"class":404},[398,35868,32247],{"class":408},[398,35870,31730],{"class":5493},[398,35872,454],{"class":404},[398,35874,31735],{"class":408},[398,35876,35877,35879,35881,35883],{"class":400,"line":2008},[398,35878,32258],{"class":5493},[398,35880,454],{"class":404},[398,35882,32263],{"class":457},[398,35884,31659],{"class":408},[398,35886,35887,35889,35891,35893],{"class":400,"line":2025},[398,35888,32270],{"class":5493},[398,35890,454],{"class":404},[398,35892,31669],{"class":457},[398,35894,31659],{"class":408},[398,35896,35897],{"class":400,"line":2030},[398,35898,32281],{"class":467},[398,35900,35901,35903,35905,35907],{"class":400,"line":2035},[398,35902,32286],{"class":5493},[398,35904,454],{"class":404},[398,35906,797],{"class":457},[398,35908,415],{"class":408},[398,35910,35911,35913,35915,35917,35919,35921],{"class":400,"line":2040},[398,35912,32297],{"class":408},[398,35914,454],{"class":404},[398,35916,31727],{"class":408},[398,35918,31730],{"class":5493},[398,35920,454],{"class":404},[398,35922,32308],{"class":408},[398,35924,35925,35927,35929,35931],{"class":400,"line":2054},[398,35926,32313],{"class":5493},[398,35928,454],{"class":404},[398,35930,32263],{"class":457},[398,35932,31659],{"class":408},[398,35934,35935,35937,35939,35941],{"class":400,"line":2059},[398,35936,32324],{"class":5493},[398,35938,454],{"class":404},[398,35940,31669],{"class":457},[398,35942,31659],{"class":408},[398,35944,35945,35947,35949,35951],{"class":400,"line":2853},[398,35946,32335],{"class":5493},[398,35948,454],{"class":404},[398,35950,797],{"class":457},[398,35952,415],{"class":408},[398,35954,35955,35957],{"class":400,"line":2867},[398,35956,4366],{"class":404},[398,35958,32348],{"class":408},[398,35960,35961],{"class":400,"line":2875},[398,35962,2676],{"emptyLinePlaceholder":328},[398,35964,35965],{"class":400,"line":2880},[398,35966,32357],{"class":467},[398,35968,35969],{"class":400,"line":2886},[398,35970,32362],{"class":467},[398,35972,35973],{"class":400,"line":2892},[398,35974,2676],{"emptyLinePlaceholder":328},[398,35976,35977],{"class":400,"line":2897},[398,35978,32371],{"class":467},[398,35980,35981,35983,35985],{"class":400,"line":8225},[398,35982,32140],{"class":404},[398,35984,32378],{"class":2239},[398,35986,32381],{"class":408},[398,35988,35989,35991,35993,35995,35997,35999,36001,36003,36005],{"class":400,"line":8249},[398,35990,31430],{"class":408},[398,35992,454],{"class":404},[398,35994,30644],{"class":408},[398,35996,31437],{"class":513},[398,35998,1980],{"class":404},[398,36000,31442],{"class":408},[398,36002,1977],{"class":404},[398,36004,32400],{"class":513},[398,36006,415],{"class":408},[398,36008,36009],{"class":400,"line":8254},[398,36010,2676],{"emptyLinePlaceholder":328},[398,36012,36013],{"class":400,"line":8260},[398,36014,2676],{"emptyLinePlaceholder":328},[398,36016,36017],{"class":400,"line":8287},[398,36018,32415],{"class":467},[398,36020,36021],{"class":400,"line":8292},[398,36022,32420],{"class":467},[398,36024,36025],{"class":400,"line":8298},[398,36026,32425],{"class":467},[398,36028,36029,36031,36033,36035,36037,36039,36041],{"class":400,"line":8310},[398,36030,32430],{"class":408},[398,36032,454],{"class":404},[398,36034,32435],{"class":408},[398,36036,32438],{"class":5493},[398,36038,454],{"class":404},[398,36040,32443],{"class":457},[398,36042,415],{"class":408},[398,36044,36045],{"class":400,"line":8322},[398,36046,2676],{"emptyLinePlaceholder":328},[398,36048,36049],{"class":400,"line":8334},[398,36050,32454],{"class":467},[398,36052,36053,36055,36057],{"class":400,"line":9993},[398,36054,32459],{"class":408},[398,36056,454],{"class":404},[398,36058,32464],{"class":408},[398,36060,36061],{"class":400,"line":10018},[398,36062,2676],{"emptyLinePlaceholder":328},[398,36064,36065],{"class":400,"line":10041},[398,36066,32473],{"class":467},[398,36068,36069,36071,36073],{"class":400,"line":10065},[398,36070,31482],{"class":408},[398,36072,454],{"class":404},[398,36074,32482],{"class":408},[398,36076,36077],{"class":400,"line":10070},[398,36078,32487],{"class":467},[398,36080,36081],{"class":400,"line":10075},[398,36082,32492],{"class":467},[398,36084,36085],{"class":400,"line":10080},[398,36086,32497],{"class":467},[398,36088,36089,36091,36093],{"class":400,"line":10089},[398,36090,32502],{"class":408},[398,36092,454],{"class":404},[398,36094,32507],{"class":408},[398,36096,36097],{"class":400,"line":10094},[398,36098,2676],{"emptyLinePlaceholder":328},[398,36100,36101],{"class":400,"line":10100},[398,36102,2676],{"emptyLinePlaceholder":328},[398,36104,36105],{"class":400,"line":10121},[398,36106,32520],{"class":467},[398,36108,36109],{"class":400,"line":10127},[398,36110,32525],{"class":467},[398,36112,36113,36115,36117],{"class":400,"line":10141},[398,36114,32530],{"class":408},[398,36116,454],{"class":404},[398,36118,32535],{"class":457},[398,36120,36121],{"class":400,"line":10147},[398,36122,32540],{"class":467},[398,36124,36125,36127,36129],{"class":400,"line":10174},[398,36126,32545],{"class":408},[398,36128,454],{"class":404},[398,36130,32550],{"class":408},[398,36132,36133],{"class":400,"line":10183},[398,36134,32555],{"class":467},[398,36136,36137,36139,36141],{"class":400,"line":10189},[398,36138,32560],{"class":408},[398,36140,454],{"class":404},[398,36142,32550],{"class":408},[398,36144,36145],{"class":400,"line":10197},[398,36146,32569],{"class":467},[398,36148,36149,36151,36153],{"class":400,"line":10202},[398,36150,32574],{"class":408},[398,36152,454],{"class":404},[398,36154,32550],{"class":408},[398,36156,36157],{"class":400,"line":16881},[398,36158,32583],{"class":467},[398,36160,36161,36163,36165],{"class":400,"line":16887},[398,36162,32588],{"class":408},[398,36164,454],{"class":404},[398,36166,32550],{"class":408},[398,36168,36169],{"class":400,"line":16910},[398,36170,2676],{"emptyLinePlaceholder":328},[398,36172,36173],{"class":400,"line":16916},[398,36174,32601],{"class":467},[398,36176,36177,36179,36181],{"class":400,"line":16939},[398,36178,32606],{"class":408},[398,36180,454],{"class":404},[398,36182,32611],{"class":408},[398,36184,36185],{"class":400,"line":16953},[398,36186,2676],{"emptyLinePlaceholder":328},[398,36188,36189],{"class":400,"line":16973},[398,36190,2676],{"emptyLinePlaceholder":328},[398,36192,36193],{"class":400,"line":16979},[398,36194,32624],{"class":467},[398,36196,36197,36199,36201,36203,36205],{"class":400,"line":16990},[398,36198,3477],{"class":404},[398,36200,32631],{"class":408},[398,36202,26236],{"class":404},[398,36204,32636],{"class":457},[398,36206,32639],{"class":408},[398,36208,36209,36211,36213,36215,36217,36219,36221,36223,36225,36227,36229],{"class":400,"line":17013},[398,36210,32644],{"class":457},[398,36212,409],{"class":408},[398,36214,32649],{"class":513},[398,36216,32652],{"class":457},[398,36218,986],{"class":513},[398,36220,32652],{"class":457},[398,36222,653],{"class":513},[398,36224,32661],{"class":408},[398,36226,934],{"class":404},[398,36228,619],{"class":457},[398,36230,30690],{"class":408},[398,36232,36233,36235,36237,36239,36241,36243],{"class":400,"line":17035},[398,36234,32644],{"class":457},[398,36236,409],{"class":408},[398,36238,32676],{"class":513},[398,36240,857],{"class":404},[398,36242,848],{"class":457},[398,36244,415],{"class":408},[398,36246,36247],{"class":400,"line":17040},[398,36248,2676],{"emptyLinePlaceholder":328},[398,36250,36251],{"class":400,"line":17046},[398,36252,32691],{"class":467},[398,36254,36255],{"class":400,"line":17060},[398,36256,32696],{"class":467},[398,36258,36259,36261,36263],{"class":400,"line":17073},[398,36260,32701],{"class":408},[398,36262,454],{"class":404},[398,36264,32535],{"class":457},[398,36266,36267],{"class":400,"line":17078},[398,36268,32710],{"class":467},[398,36270,36271,36273,36275],{"class":400,"line":17092},[398,36272,32715],{"class":408},[398,36274,454],{"class":404},[398,36276,3361],{"class":457},[398,36278,36279],{"class":400,"line":17097},[398,36280,32724],{"class":467},[398,36282,36283,36285,36287],{"class":400,"line":17103},[398,36284,32729],{"class":408},[398,36286,454],{"class":404},[398,36288,32535],{"class":457},[398,36290,36291],{"class":400,"line":17108},[398,36292,32738],{"class":467},[398,36294,36295,36297,36299],{"class":400,"line":17122},[398,36296,32743],{"class":408},[398,36298,454],{"class":404},[398,36300,3361],{"class":457},[398,36302,36303],{"class":400,"line":17127},[398,36304,32752],{"class":467},[398,36306,36307,36309,36311],{"class":400,"line":17132},[398,36308,32757],{"class":408},[398,36310,454],{"class":404},[398,36312,3361],{"class":457},[398,36314,36315],{"class":400,"line":17146},[398,36316,32766],{"class":467},[398,36318,36319,36321,36323],{"class":400,"line":17158},[398,36320,32771],{"class":408},[398,36322,454],{"class":404},[398,36324,3361],{"class":457},[398,36326,36327],{"class":400,"line":17163},[398,36328,32780],{"class":467},[398,36330,36331,36333,36335,36337,36339],{"class":400,"line":17176},[398,36332,3679],{"class":404},[398,36334,31794],{"class":408},[398,36336,26236],{"class":404},[398,36338,31799],{"class":457},[398,36340,32793],{"class":408},[398,36342,36343],{"class":400,"line":17181},[398,36344,32798],{"class":467},[398,36346,36347,36349,36351],{"class":400,"line":17186},[398,36348,32803],{"class":408},[398,36350,454],{"class":404},[398,36352,32808],{"class":408},[398,36354,36355],{"class":400,"line":17191},[398,36356,32813],{"class":467},[398,36358,36359,36361,36363],{"class":400,"line":17204},[398,36360,32818],{"class":408},[398,36362,454],{"class":404},[398,36364,32823],{"class":408},[398,36366,36367],{"class":400,"line":17209},[398,36368,32829],{"class":467},[398,36370,36371],{"class":400,"line":32826},[398,36372,32835],{"class":408},[398,36374,36375],{"class":400,"line":32832},[398,36376,32841],{"class":467},[398,36378,36379],{"class":400,"line":32838},[398,36380,32847],{"class":467},[398,36382,36383,36385,36387],{"class":400,"line":32844},[398,36384,32853],{"class":408},[398,36386,454],{"class":404},[398,36388,32858],{"class":408},[398,36390,36391],{"class":400,"line":32850},[398,36392,32864],{"class":467},[398,36394,36395,36397,36399,36401,36403,36405,36407],{"class":400,"line":32861},[398,36396,32870],{"class":408},[398,36398,454],{"class":404},[398,36400,32875],{"class":408},[398,36402,32878],{"class":5493},[398,36404,454],{"class":404},[398,36406,619],{"class":457},[398,36408,415],{"class":408},[398,36410,36411],{"class":400,"line":32867},[398,36412,32890],{"class":467},[398,36414,36415,36417,36419],{"class":400,"line":32887},[398,36416,32896],{"class":408},[398,36418,454],{"class":404},[398,36420,32901],{"class":408},[398,36422,36423],{"class":400,"line":32893},[398,36424,32907],{"class":467},[398,36426,36427],{"class":400,"line":32904},[398,36428,32913],{"class":408},[398,36430,36431],{"class":400,"line":32910},[398,36432,32919],{"class":467},[398,36434,36435],{"class":400,"line":32916},[398,36436,32925],{"class":408},[398,36438,36439],{"class":400,"line":32922},[398,36440,32931],{"class":467},[398,36442,36443],{"class":400,"line":32928},[398,36444,32937],{"class":408},[398,36446,36447],{"class":400,"line":32934},[398,36448,32943],{"class":467},[398,36450,36451,36453,36455,36457,36459,36461,36463],{"class":400,"line":32940},[398,36452,32949],{"class":408},[398,36454,9754],{"class":404},[398,36456,32954],{"class":408},[398,36458,857],{"class":404},[398,36460,32959],{"class":408},[398,36462,593],{"class":457},[398,36464,415],{"class":408},[398,36466,36467],{"class":400,"line":32946},[398,36468,32969],{"class":467},[398,36470,36471,36473,36475,36477,36479],{"class":400,"line":32966},[398,36472,32975],{"class":408},[398,36474,9754],{"class":404},[398,36476,32980],{"class":408},[398,36478,3225],{"class":404},[398,36480,32985],{"class":408},[398,36482,36483],{"class":400,"line":32972},[398,36484,32991],{"class":467},[398,36486,36487,36489,36491,36493,36495],{"class":400,"line":32988},[398,36488,32997],{"class":408},[398,36490,9754],{"class":404},[398,36492,32959],{"class":408},[398,36494,593],{"class":457},[398,36496,415],{"class":408},[398,36498,36499],{"class":400,"line":32994},[398,36500,33011],{"class":467},[398,36502,36503,36505,36507,36509,36511],{"class":400,"line":33008},[398,36504,3679],{"class":404},[398,36506,33019],{"class":408},[398,36508,26236],{"class":404},[398,36510,31799],{"class":457},[398,36512,33026],{"class":408},[398,36514,36515],{"class":400,"line":33014},[398,36516,33032],{"class":467},[398,36518,36519,36521,36523],{"class":400,"line":33029},[398,36520,32803],{"class":408},[398,36522,454],{"class":404},[398,36524,32808],{"class":408},[398,36526,36527],{"class":400,"line":33035},[398,36528,33047],{"class":467},[398,36530,36531,36533,36535],{"class":400,"line":33044},[398,36532,32818],{"class":408},[398,36534,454],{"class":404},[398,36536,32823],{"class":408},[398,36538,36539],{"class":400,"line":33050},[398,36540,33062],{"class":467},[398,36542,36543],{"class":400,"line":33059},[398,36544,33068],{"class":408},[398,36546,36547],{"class":400,"line":33065},[398,36548,36549],{"class":467},"            # 验证时不计算梯度以节省内存\u002F计算\n",[398,36551,36552,36554],{"class":400,"line":33071},[398,36553,33074],{"class":404},[398,36555,33077],{"class":408},[398,36557,36558],{"class":400,"line":33080},[398,36559,33083],{"class":467},[398,36561,36562,36565,36567],{"class":400,"line":33086},[398,36563,36564],{"class":408},"                output",[398,36566,454],{"class":404},[398,36568,32858],{"class":408},[398,36570,36571],{"class":400,"line":33097},[398,36572,33100],{"class":467},[398,36574,36575,36578,36580,36582,36584,36586,36588],{"class":400,"line":33103},[398,36576,36577],{"class":408},"                pre_lab",[398,36579,454],{"class":404},[398,36581,32875],{"class":408},[398,36583,32878],{"class":5493},[398,36585,454],{"class":404},[398,36587,619],{"class":457},[398,36589,415],{"class":408},[398,36591,36592],{"class":400,"line":33122},[398,36593,33125],{"class":467},[398,36595,36596,36599,36601],{"class":400,"line":33128},[398,36597,36598],{"class":408},"                val_batch_loss",[398,36600,454],{"class":404},[398,36602,32901],{"class":408},[398,36604,36605],{"class":400,"line":33139},[398,36606,33142],{"class":467},[398,36608,36609,36612,36614,36617,36619,36621,36623],{"class":400,"line":33145},[398,36610,36611],{"class":408},"                val_loss",[398,36613,9754],{"class":404},[398,36615,36616],{"class":408},"val_batch_loss.item()",[398,36618,857],{"class":404},[398,36620,32959],{"class":408},[398,36622,593],{"class":457},[398,36624,415],{"class":408},[398,36626,36627,36630,36632,36634,36636],{"class":400,"line":33165},[398,36628,36629],{"class":408},"                val_corrects",[398,36631,9754],{"class":404},[398,36633,32980],{"class":408},[398,36635,3225],{"class":404},[398,36637,32985],{"class":408},[398,36639,36640],{"class":400,"line":33181},[398,36641,36642],{"class":467},"            # 当前用于验证的样本数量\n",[398,36644,36645,36648,36650,36652,36654],{"class":400,"line":33187},[398,36646,36647],{"class":408},"            val_num",[398,36649,9754],{"class":404},[398,36651,32959],{"class":408},[398,36653,593],{"class":457},[398,36655,415],{"class":408},[398,36657,36658],{"class":400,"line":33201},[398,36659,33204],{"class":467},[398,36661,36662],{"class":400,"line":33207},[398,36663,33210],{"class":467},[398,36665,36666,36668,36670],{"class":400,"line":33213},[398,36667,33216],{"class":408},[398,36669,986],{"class":404},[398,36671,33221],{"class":408},[398,36673,36674],{"class":400,"line":33224},[398,36675,33227],{"class":467},[398,36677,36678],{"class":400,"line":33230},[398,36679,33233],{"class":467},[398,36681,36682,36684,36686],{"class":400,"line":33236},[398,36683,33239],{"class":408},[398,36685,986],{"class":404},[398,36687,33221],{"class":408},[398,36689,36690],{"class":400,"line":33246},[398,36691,33249],{"class":467},[398,36693,36694,36696,36698],{"class":400,"line":33252},[398,36695,33255],{"class":408},[398,36697,986],{"class":404},[398,36699,33260],{"class":408},[398,36701,36702],{"class":400,"line":33263},[398,36703,33266],{"class":467},[398,36705,36706,36708,36710],{"class":400,"line":33269},[398,36707,33272],{"class":408},[398,36709,986],{"class":404},[398,36711,33260],{"class":408},[398,36713,36714],{"class":400,"line":33279},[398,36715,2676],{"emptyLinePlaceholder":328},[398,36717,36718],{"class":400,"line":33284},[398,36719,33287],{"class":467},[398,36721,36722,36724,36726,36728,36730,36732,36734,36736,36738,36740,36742,36744,36746,36748,36750,36752,36754,36756,36758,36760],{"class":400,"line":33290},[398,36723,32644],{"class":457},[398,36725,409],{"class":408},[398,36727,3868],{"class":513},[398,36729,32652],{"class":457},[398,36731,33301],{"class":513},[398,36733,1298],{"class":457},[398,36735,33306],{"class":404},[398,36737,1348],{"class":457},[398,36739,33311],{"class":513},[398,36741,1298],{"class":457},[398,36743,33306],{"class":404},[398,36745,1348],{"class":457},[398,36747,3868],{"class":513},[398,36749,33322],{"class":408},[398,36751,934],{"class":404},[398,36753,619],{"class":457},[398,36755,33329],{"class":408},[398,36757,934],{"class":404},[398,36759,619],{"class":457},[398,36761,33336],{"class":408},[398,36763,36764,36766,36768,36770,36772,36774,36776,36778,36780,36782,36784,36786,36788,36790,36792,36794,36796,36798,36800,36802],{"class":400,"line":33339},[398,36765,32644],{"class":457},[398,36767,409],{"class":408},[398,36769,3868],{"class":513},[398,36771,32652],{"class":457},[398,36773,33350],{"class":513},[398,36775,1298],{"class":457},[398,36777,33306],{"class":404},[398,36779,1348],{"class":457},[398,36781,33359],{"class":513},[398,36783,1298],{"class":457},[398,36785,33306],{"class":404},[398,36787,1348],{"class":457},[398,36789,3868],{"class":513},[398,36791,33370],{"class":408},[398,36793,934],{"class":404},[398,36795,619],{"class":457},[398,36797,33377],{"class":408},[398,36799,934],{"class":404},[398,36801,619],{"class":457},[398,36803,33336],{"class":408},[398,36805,36806],{"class":400,"line":33386},[398,36807,2676],{"emptyLinePlaceholder":328},[398,36809,36810],{"class":400,"line":33391},[398,36811,33394],{"class":467},[398,36813,36814,36816,36818,36820,36822,36824,36826],{"class":400,"line":33397},[398,36815,2773],{"class":404},[398,36817,33402],{"class":408},[398,36819,934],{"class":404},[398,36821,619],{"class":457},[398,36823,1342],{"class":408},[398,36825,1362],{"class":404},[398,36827,33413],{"class":408},[398,36829,36830],{"class":400,"line":33416},[398,36831,33419],{"class":467},[398,36833,36834,36836,36838,36840,36842,36844,36846],{"class":400,"line":33422},[398,36835,33425],{"class":408},[398,36837,448],{"class":457},[398,36839,454],{"class":404},[398,36841,33432],{"class":408},[398,36843,934],{"class":404},[398,36845,619],{"class":457},[398,36847,33439],{"class":408},[398,36849,36850],{"class":400,"line":33442},[398,36851,33445],{"class":467},[398,36853,36854],{"class":400,"line":33448},[398,36855,33451],{"class":467},[398,36857,36858,36860,36862],{"class":400,"line":33454},[398,36859,33457],{"class":408},[398,36861,454],{"class":404},[398,36863,32507],{"class":408},[398,36865,36866],{"class":400,"line":33464},[398,36867,2676],{"emptyLinePlaceholder":328},[398,36869,36870],{"class":400,"line":33469},[398,36871,33472],{"class":467},[398,36873,36874,36876,36878,36880,36882],{"class":400,"line":33475},[398,36875,33478],{"class":408},[398,36877,454],{"class":404},[398,36879,33483],{"class":408},[398,36881,934],{"class":404},[398,36883,33488],{"class":408},[398,36885,36886,36888,36890,36892,36894,36896,36898,36900,36902,36904,36906,36908,36910,36912,36914,36916,36918,36920],{"class":400,"line":33491},[398,36887,32644],{"class":457},[398,36889,409],{"class":408},[398,36891,33498],{"class":513},[398,36893,1298],{"class":457},[398,36895,33503],{"class":404},[398,36897,1348],{"class":457},[398,36899,946],{"class":513},[398,36901,1298],{"class":457},[398,36903,33503],{"class":404},[398,36905,1348],{"class":457},[398,36907,33516],{"class":513},[398,36909,33519],{"class":408},[398,36911,33522],{"class":404},[398,36913,1309],{"class":457},[398,36915,33527],{"class":408},[398,36917,730],{"class":404},[398,36919,1309],{"class":457},[398,36921,30690],{"class":408},[398,36923,36924],{"class":400,"line":33536},[398,36925,36926],{"class":467},"    # 选择最优参数并保存\n",[398,36928,36929],{"class":400,"line":33542},[398,36930,36931],{"class":467},"    # 保存最佳模型权重字典\n",[398,36933,36934,36937,36939],{"class":400,"line":33548},[398,36935,36936],{"class":408},"    torch.save(best_model_wts,",[398,36938,33560],{"class":513},[398,36940,415],{"class":408},[398,36942,36943],{"class":400,"line":33554},[398,36944,33580],{"class":467},[398,36946,36947,36949,36951,36953,36955,36957],{"class":400,"line":33565},[398,36948,33586],{"class":408},[398,36950,454],{"class":404},[398,36952,33591],{"class":408},[398,36954,33594],{"class":5493},[398,36956,454],{"class":404},[398,36958,1822],{"class":408},[398,36960,36961,36963,36965,36967],{"class":400,"line":33571},[398,36962,33604],{"class":513},[398,36964,1261],{"class":408},[398,36966,33609],{"class":457},[398,36968,33612],{"class":408},[398,36970,36971,36973],{"class":400,"line":33577},[398,36972,33618],{"class":513},[398,36974,33621],{"class":408},[398,36976,36977,36979],{"class":400,"line":33583},[398,36978,33627],{"class":513},[398,36980,33630],{"class":408},[398,36982,36983,36985],{"class":400,"line":33601},[398,36984,33636],{"class":513},[398,36986,33639],{"class":408},[398,36988,36989,36991],{"class":400,"line":33615},[398,36990,33645],{"class":513},[398,36992,33648],{"class":408},[398,36994,36995],{"class":400,"line":33624},[398,36996,33654],{"class":408},[398,36998,36999],{"class":400,"line":33633},[398,37000,33660],{"class":467},[398,37002,37003,37005],{"class":400,"line":33642},[398,37004,4366],{"class":404},[398,37006,33668],{"class":408},[398,37008,37009],{"class":400,"line":33651},[398,37010,2676],{"emptyLinePlaceholder":328},[398,37012,37013],{"class":400,"line":33657},[398,37014,33679],{"class":467},[398,37016,37017,37019,37021],{"class":400,"line":33663},[398,37018,32140],{"class":404},[398,37020,33687],{"class":2239},[398,37022,33690],{"class":408},[398,37024,37025],{"class":400,"line":33671},[398,37026,33696],{"class":467},[398,37028,37029,37031,37033,37035,37037,37039,37041,37043],{"class":400,"line":33676},[398,37030,33702],{"class":408},[398,37032,31886],{"class":5493},[398,37034,454],{"class":404},[398,37036,409],{"class":408},[398,37038,900],{"class":457},[398,37040,780],{"class":408},[398,37042,695],{"class":457},[398,37044,30690],{"class":408},[398,37046,37047],{"class":400,"line":33682},[398,37048,33722],{"class":467},[398,37050,37051],{"class":400,"line":33693},[398,37052,33728],{"class":467},[398,37054,37055],{"class":400,"line":33699},[398,37056,33734],{"class":467},[398,37058,37059,37061,37063,37065,37067,37069,37071],{"class":400,"line":33719},[398,37060,31920],{"class":408},[398,37062,619],{"class":457},[398,37064,780],{"class":408},[398,37066,486],{"class":457},[398,37068,780],{"class":408},[398,37070,619],{"class":457},[398,37072,415],{"class":408},[398,37074,37075],{"class":400,"line":33725},[398,37076,33757],{"class":467},[398,37078,37079],{"class":400,"line":33731},[398,37080,33763],{"class":467},[398,37082,37083],{"class":400,"line":33737},[398,37084,33769],{"class":467},[398,37086,37087],{"class":400,"line":33754},[398,37088,33775],{"class":467},[398,37090,37091],{"class":400,"line":33760},[398,37092,33781],{"class":467},[398,37094,37095,37097,37099,37101,37103,37105,37107,37109,37111],{"class":400,"line":33766},[398,37096,33787],{"class":408},[398,37098,33790],{"class":513},[398,37100,33793],{"class":408},[398,37102,33796],{"class":513},[398,37104,780],{"class":408},[398,37106,33801],{"class":5493},[398,37108,454],{"class":404},[398,37110,33806],{"class":513},[398,37112,415],{"class":408},[398,37114,37115,37117,37119,37121,37123,37125,37127,37129,37131],{"class":400,"line":33772},[398,37116,33787],{"class":408},[398,37118,33790],{"class":513},[398,37120,33818],{"class":408},[398,37122,33821],{"class":513},[398,37124,780],{"class":408},[398,37126,33801],{"class":5493},[398,37128,454],{"class":404},[398,37130,33830],{"class":513},[398,37132,415],{"class":408},[398,37134,37135],{"class":400,"line":33778},[398,37136,33838],{"class":467},[398,37138,37139],{"class":400,"line":33784},[398,37140,33844],{"class":408},[398,37142,37143],{"class":400,"line":33811},[398,37144,33850],{"class":467},[398,37146,37147,37149,37151],{"class":400,"line":33835},[398,37148,33856],{"class":408},[398,37150,33859],{"class":513},[398,37152,415],{"class":408},[398,37154,37155,37157,37159],{"class":400,"line":33841},[398,37156,33867],{"class":408},[398,37158,33870],{"class":513},[398,37160,415],{"class":408},[398,37162,37163],{"class":400,"line":33847},[398,37164,33878],{"class":467},[398,37166,37167,37169,37171,37173,37175,37177,37179],{"class":400,"line":33853},[398,37168,31920],{"class":408},[398,37170,619],{"class":457},[398,37172,780],{"class":408},[398,37174,486],{"class":457},[398,37176,780],{"class":408},[398,37178,486],{"class":457},[398,37180,415],{"class":408},[398,37182,37183,37185,37187,37189,37191,37193,37195,37197,37199],{"class":400,"line":33864},[398,37184,33787],{"class":408},[398,37186,33790],{"class":513},[398,37188,33905],{"class":408},[398,37190,33796],{"class":513},[398,37192,780],{"class":408},[398,37194,33801],{"class":5493},[398,37196,454],{"class":404},[398,37198,33916],{"class":513},[398,37200,415],{"class":408},[398,37202,37203,37205,37207,37209,37211,37213,37215,37217,37219],{"class":400,"line":33875},[398,37204,33787],{"class":408},[398,37206,33790],{"class":513},[398,37208,33928],{"class":408},[398,37210,33821],{"class":513},[398,37212,780],{"class":408},[398,37214,33801],{"class":5493},[398,37216,454],{"class":404},[398,37218,33939],{"class":513},[398,37220,415],{"class":408},[398,37222,37223],{"class":400,"line":33881},[398,37224,33947],{"class":467},[398,37226,37227],{"class":400,"line":33898},[398,37228,33844],{"class":408},[398,37230,37231,37233,37235],{"class":400,"line":33921},[398,37232,33856],{"class":408},[398,37234,33790],{"class":513},[398,37236,415],{"class":408},[398,37238,37239,37241,37243],{"class":400,"line":33944},[398,37240,33867],{"class":408},[398,37242,33969],{"class":513},[398,37244,415],{"class":408},[398,37246,37247],{"class":400,"line":33950},[398,37248,33977],{"class":408},[398,37250,37251],{"class":400,"line":33955},[398,37252,2676],{"emptyLinePlaceholder":328},[398,37254,37255],{"class":400,"line":33964},[398,37256,33988],{"class":467},[398,37258,37259,37261,37263,37265,37267],{"class":400,"line":33974},[398,37260,1807],{"class":404},[398,37262,31413],{"class":457},[398,37264,3225],{"class":404},[398,37266,31418],{"class":513},[398,37268,4015],{"class":408},[398,37270,37271],{"class":400,"line":33980},[398,37272,34007],{"class":467},[398,37274,37275,37278,37280],{"class":400,"line":33985},[398,37276,37277],{"class":408},"    AlexNet",[398,37279,454],{"class":404},[398,37281,37282],{"class":408},"AlexNet()\n",[398,37284,37285,37287,37289],{"class":400,"line":33991},[398,37286,34024],{"class":408},[398,37288,454],{"class":404},[398,37290,34029],{"class":408},[398,37292,37293,37295,37297,37300,37302,37304,37306],{"class":400,"line":34004},[398,37294,33586],{"class":408},[398,37296,454],{"class":404},[398,37298,37299],{"class":408},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[398,37301,34042],{"class":5493},[398,37303,454],{"class":404},[398,37305,1102],{"class":457},[398,37307,415],{"class":408},[398,37309,37310],{"class":400,"line":34010},[398,37311,34054],{"class":408},[38,37313,37314],{"start":320},[41,37315,34067],{},[389,37317,37319],{"className":30571,"code":37318,"language":30573,"meta":316,"style":316},"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",[395,37320,37321,37327,37337,37347,37357,37361,37371,37381,37392,37396,37400,37404,37412,37428,37438,37454,37464,37478,37482,37492,37502,37512,37518,37522,37526,37534,37538,37554,37562,37566,37570,37578,37586,37590,37594,37598,37602,37608,37612,37622,37630,37638,37642,37646,37650,37658,37662,37678,37682,37686,37690,37702,37706,37718,37722,37726,37738,37742,37752,37756,37760,37772,37776,37784,37788,37792,37800,37804,37812,37816,37820,37824,37828,37832,37848,37856,37860,37864,37912,37918,37922,37932,37940,37948,37952,37956,37960,37964,37972,37976,37992,37996,38004,38012],{"__ignoreMap":316},[398,37322,37323,37325],{"class":400,"line":401},[398,37324,30585],{"class":404},[398,37326,30588],{"class":408},[398,37328,37329,37331,37333,37335],{"class":400,"line":317},[398,37330,30585],{"class":404},[398,37332,31608],{"class":408},[398,37334,31576],{"class":404},[398,37336,31613],{"class":408},[398,37338,37339,37341,37343,37345],{"class":400,"line":320},[398,37340,30930],{"class":404},[398,37342,34095],{"class":408},[398,37344,30585],{"class":404},[398,37346,34100],{"class":408},[398,37348,37349,37351,37353,37355],{"class":400,"line":1470},[398,37350,30930],{"class":404},[398,37352,31591],{"class":408},[398,37354,30585],{"class":404},[398,37356,31596],{"class":408},[398,37358,37359],{"class":400,"line":1476},[398,37360,34115],{"class":467},[398,37362,37363,37365,37367,37369],{"class":400,"line":1490},[398,37364,30930],{"class":404},[398,37366,31561],{"class":408},[398,37368,30585],{"class":404},[398,37370,31566],{"class":408},[398,37372,37373,37375,37377,37379],{"class":400,"line":1496},[398,37374,30930],{"class":404},[398,37376,32107],{"class":408},[398,37378,30585],{"class":404},[398,37380,35750],{"class":408},[398,37382,37383,37385,37388,37390],{"class":400,"line":1587},[398,37384,30930],{"class":404},[398,37386,37387],{"class":408}," 练习.AlexNet.model ",[398,37389,30585],{"class":404},[398,37391,35750],{"class":408},[398,37393,37394],{"class":400,"line":1593},[398,37395,2676],{"emptyLinePlaceholder":328},[398,37397,37398],{"class":400,"line":1605},[398,37399,2676],{"emptyLinePlaceholder":328},[398,37401,37402],{"class":400,"line":1888},[398,37403,34144],{"class":467},[398,37405,37406,37408,37410],{"class":400,"line":1893},[398,37407,32140],{"class":404},[398,37409,34151],{"class":2239},[398,37411,32146],{"class":408},[398,37413,37414,37416,37418,37420,37422,37424,37426],{"class":400,"line":1899},[398,37415,34158],{"class":408},[398,37417,454],{"class":404},[398,37419,31648],{"class":408},[398,37421,31651],{"class":5493},[398,37423,454],{"class":404},[398,37425,31656],{"class":513},[398,37427,31659],{"class":408},[398,37429,37430,37432,37434,37436],{"class":400,"line":1904},[398,37431,34175],{"class":5493},[398,37433,454],{"class":404},[398,37435,34180],{"class":457},[398,37437,31659],{"class":408},[398,37439,37440,37442,37444,37446,37448,37450,37452],{"class":400,"line":1918},[398,37441,34187],{"class":5493},[398,37443,454],{"class":404},[398,37445,31686],{"class":408},[398,37447,31689],{"class":5493},[398,37449,454],{"class":404},[398,37451,35642],{"class":457},[398,37453,31697],{"class":408},[398,37455,37456,37458,37460,37462],{"class":400,"line":1923},[398,37457,34204],{"class":5493},[398,37459,454],{"class":404},[398,37461,31669],{"class":457},[398,37463,415],{"class":408},[398,37465,37466,37468,37470,37472,37474,37476],{"class":400,"line":1929},[398,37467,34215],{"class":408},[398,37469,454],{"class":404},[398,37471,31727],{"class":408},[398,37473,31730],{"class":5493},[398,37475,454],{"class":404},[398,37477,34226],{"class":408},[398,37479,37480],{"class":400,"line":1950},[398,37481,34231],{"class":467},[398,37483,37484,37486,37488,37490],{"class":400,"line":1955},[398,37485,34236],{"class":5493},[398,37487,454],{"class":404},[398,37489,619],{"class":457},[398,37491,31659],{"class":408},[398,37493,37494,37496,37498,37500],{"class":400,"line":1969},[398,37495,34247],{"class":5493},[398,37497,454],{"class":404},[398,37499,31669],{"class":457},[398,37501,31659],{"class":408},[398,37503,37504,37506,37508,37510],{"class":400,"line":1974},[398,37505,34258],{"class":5493},[398,37507,454],{"class":404},[398,37509,593],{"class":457},[398,37511,415],{"class":408},[398,37513,37514,37516],{"class":400,"line":2003},[398,37515,4366],{"class":404},[398,37517,34271],{"class":408},[398,37519,37520],{"class":400,"line":2008},[398,37521,2676],{"emptyLinePlaceholder":328},[398,37523,37524],{"class":400,"line":2025},[398,37525,34280],{"class":467},[398,37527,37528,37530,37532],{"class":400,"line":2030},[398,37529,32140],{"class":404},[398,37531,34287],{"class":2239},[398,37533,34290],{"class":408},[398,37535,37536],{"class":400,"line":2035},[398,37537,34295],{"class":467},[398,37539,37540,37542,37544,37546,37548,37550,37552],{"class":400,"line":2040},[398,37541,31430],{"class":408},[398,37543,454],{"class":404},[398,37545,31437],{"class":513},[398,37547,1980],{"class":404},[398,37549,31442],{"class":408},[398,37551,1977],{"class":404},[398,37553,34312],{"class":513},[398,37555,37556,37558,37560],{"class":400,"line":2054},[398,37557,31482],{"class":408},[398,37559,454],{"class":404},[398,37561,32482],{"class":408},[398,37563,37564],{"class":400,"line":2059},[398,37565,2676],{"emptyLinePlaceholder":328},[398,37567,37568],{"class":400,"line":2853},[398,37569,34329],{"class":467},[398,37571,37572,37574,37576],{"class":400,"line":2867},[398,37573,34334],{"class":408},[398,37575,454],{"class":404},[398,37577,32535],{"class":457},[398,37579,37580,37582,37584],{"class":400,"line":2875},[398,37581,34343],{"class":408},[398,37583,454],{"class":404},[398,37585,3361],{"class":457},[398,37587,37588],{"class":400,"line":2880},[398,37589,2676],{"emptyLinePlaceholder":328},[398,37591,37592],{"class":400,"line":2886},[398,37593,34356],{"class":467},[398,37595,37596],{"class":400,"line":2892},[398,37597,34361],{"class":467},[398,37599,37600],{"class":400,"line":2897},[398,37601,34366],{"class":467},[398,37603,37604,37606],{"class":400,"line":8225},[398,37605,34371],{"class":404},[398,37607,33077],{"class":408},[398,37609,37610],{"class":400,"line":8249},[398,37611,34378],{"class":467},[398,37613,37614,37616,37618,37620],{"class":400,"line":8254},[398,37615,3679],{"class":404},[398,37617,34385],{"class":408},[398,37619,26236],{"class":404},[398,37621,34390],{"class":408},[398,37623,37624,37626,37628],{"class":400,"line":8260},[398,37625,34395],{"class":408},[398,37627,454],{"class":404},[398,37629,34400],{"class":408},[398,37631,37632,37634,37636],{"class":400,"line":8287},[398,37633,34405],{"class":408},[398,37635,454],{"class":404},[398,37637,34410],{"class":408},[398,37639,37640],{"class":400,"line":8292},[398,37641,34415],{"class":467},[398,37643,37644],{"class":400,"line":8298},[398,37645,33068],{"class":408},[398,37647,37648],{"class":400,"line":8310},[398,37649,34424],{"class":467},[398,37651,37652,37654,37656],{"class":400,"line":8322},[398,37653,32853],{"class":408},[398,37655,454],{"class":404},[398,37657,34433],{"class":408},[398,37659,37660],{"class":400,"line":8334},[398,37661,34438],{"class":467},[398,37663,37664,37666,37668,37670,37672,37674,37676],{"class":400,"line":9993},[398,37665,32870],{"class":408},[398,37667,454],{"class":404},[398,37669,32875],{"class":408},[398,37671,32878],{"class":5493},[398,37673,454],{"class":404},[398,37675,619],{"class":457},[398,37677,415],{"class":408},[398,37679,37680],{"class":400,"line":10018},[398,37681,34459],{"class":467},[398,37683,37684],{"class":400,"line":10041},[398,37685,34464],{"class":467},[398,37687,37688],{"class":400,"line":10065},[398,37689,34469],{"class":467},[398,37691,37692,37694,37696,37698,37700],{"class":400,"line":10070},[398,37693,34474],{"class":408},[398,37695,9754],{"class":404},[398,37697,32980],{"class":408},[398,37699,3225],{"class":404},[398,37701,34483],{"class":408},[398,37703,37704],{"class":400,"line":10075},[398,37705,34488],{"class":467},[398,37707,37708,37710,37712,37714,37716],{"class":400,"line":10080},[398,37709,34493],{"class":408},[398,37711,9754],{"class":404},[398,37713,34498],{"class":408},[398,37715,593],{"class":457},[398,37717,415],{"class":408},[398,37719,37720],{"class":400,"line":10089},[398,37721,2676],{"emptyLinePlaceholder":328},[398,37723,37724],{"class":400,"line":10094},[398,37725,34511],{"class":467},[398,37727,37728,37730,37732,37734,37736],{"class":400,"line":10100},[398,37729,34516],{"class":408},[398,37731,454],{"class":404},[398,37733,34521],{"class":408},[398,37735,986],{"class":404},[398,37737,34526],{"class":408},[398,37739,37740],{"class":400,"line":10121},[398,37741,34531],{"class":467},[398,37743,37744,37746,37748,37750],{"class":400,"line":10127},[398,37745,32644],{"class":457},[398,37747,409],{"class":408},[398,37749,34540],{"class":513},[398,37751,34543],{"class":408},[398,37753,37754],{"class":400,"line":10141},[398,37755,2676],{"emptyLinePlaceholder":328},[398,37757,37758],{"class":400,"line":10147},[398,37759,34552],{"class":467},[398,37761,37762,37764,37766,37768,37770],{"class":400,"line":10174},[398,37763,1807],{"class":404},[398,37765,31413],{"class":457},[398,37767,3225],{"class":404},[398,37769,31418],{"class":513},[398,37771,4015],{"class":408},[398,37773,37774],{"class":400,"line":10183},[398,37775,34569],{"class":467},[398,37777,37778,37780,37782],{"class":400,"line":10189},[398,37779,31482],{"class":408},[398,37781,454],{"class":404},[398,37783,37282],{"class":408},[398,37785,37786],{"class":400,"line":10197},[398,37787,34582],{"class":467},[398,37789,37790],{"class":400,"line":10202},[398,37791,34587],{"class":467},[398,37793,37794,37796,37798],{"class":400,"line":16881},[398,37795,34592],{"class":408},[398,37797,34595],{"class":513},[398,37799,30690],{"class":408},[398,37801,37802],{"class":400,"line":16887},[398,37803,34602],{"class":467},[398,37805,37806,37808,37810],{"class":400,"line":16910},[398,37807,34215],{"class":408},[398,37809,454],{"class":404},[398,37811,34611],{"class":408},[398,37813,37814],{"class":400,"line":16916},[398,37815,34616],{"class":467},[398,37817,37818],{"class":400,"line":16939},[398,37819,34621],{"class":408},[398,37821,37822],{"class":400,"line":16953},[398,37823,2676],{"emptyLinePlaceholder":328},[398,37825,37826],{"class":400,"line":16973},[398,37827,34630],{"class":467},[398,37829,37830],{"class":400,"line":16979},[398,37831,34635],{"class":467},[398,37833,37834,37836,37838,37840,37842,37844,37846],{"class":400,"line":16990},[398,37835,31430],{"class":408},[398,37837,454],{"class":404},[398,37839,31437],{"class":513},[398,37841,1980],{"class":404},[398,37843,31442],{"class":408},[398,37845,1977],{"class":404},[398,37847,34312],{"class":513},[398,37849,37850,37852,37854],{"class":400,"line":17013},[398,37851,31482],{"class":408},[398,37853,454],{"class":404},[398,37855,32482],{"class":408},[398,37857,37858],{"class":400,"line":17035},[398,37859,34664],{"class":467},[398,37861,37862],{"class":400,"line":17040},[398,37863,34669],{"class":467},[398,37865,37866,37868,37870,37872,37874,37876,37878,37880,37882,37884,37886,37888,37890,37892,37894,37896,37898,37900,37902,37904,37906,37908,37910],{"class":400,"line":17046},[398,37867,34674],{"class":408},[398,37869,454],{"class":404},[398,37871,1292],{"class":408},[398,37873,34681],{"class":513},[398,37875,780],{"class":408},[398,37877,34686],{"class":513},[398,37879,780],{"class":408},[398,37881,34691],{"class":513},[398,37883,780],{"class":408},[398,37885,34696],{"class":513},[398,37887,780],{"class":408},[398,37889,34701],{"class":513},[398,37891,780],{"class":408},[398,37893,34706],{"class":513},[398,37895,780],{"class":408},[398,37897,34711],{"class":513},[398,37899,780],{"class":408},[398,37901,34716],{"class":513},[398,37903,780],{"class":408},[398,37905,34721],{"class":513},[398,37907,780],{"class":408},[398,37909,34726],{"class":513},[398,37911,33439],{"class":408},[398,37913,37914,37916],{"class":400,"line":17060},[398,37915,34371],{"class":404},[398,37917,33077],{"class":408},[398,37919,37920],{"class":400,"line":17073},[398,37921,34739],{"class":467},[398,37923,37924,37926,37928,37930],{"class":400,"line":17078},[398,37925,3679],{"class":404},[398,37927,34746],{"class":408},[398,37929,26236],{"class":404},[398,37931,34390],{"class":408},[398,37933,37934,37936,37938],{"class":400,"line":17092},[398,37935,32803],{"class":408},[398,37937,454],{"class":404},[398,37939,32808],{"class":408},[398,37941,37942,37944,37946],{"class":400,"line":17097},[398,37943,32818],{"class":408},[398,37945,454],{"class":404},[398,37947,32823],{"class":408},[398,37949,37950],{"class":400,"line":17103},[398,37951,2676],{"emptyLinePlaceholder":328},[398,37953,37954],{"class":400,"line":17108},[398,37955,34775],{"class":467},[398,37957,37958],{"class":400,"line":17122},[398,37959,33068],{"class":408},[398,37961,37962],{"class":400,"line":17127},[398,37963,34784],{"class":467},[398,37965,37966,37968,37970],{"class":400,"line":17132},[398,37967,32853],{"class":408},[398,37969,454],{"class":404},[398,37971,32858],{"class":408},[398,37973,37974],{"class":400,"line":17146},[398,37975,34797],{"class":467},[398,37977,37978,37980,37982,37984,37986,37988,37990],{"class":400,"line":17158},[398,37979,32870],{"class":408},[398,37981,454],{"class":404},[398,37983,32875],{"class":408},[398,37985,32878],{"class":5493},[398,37987,454],{"class":404},[398,37989,619],{"class":457},[398,37991,415],{"class":408},[398,37993,37994],{"class":400,"line":17163},[398,37995,34818],{"class":467},[398,37997,37998,38000,38002],{"class":400,"line":17176},[398,37999,34823],{"class":408},[398,38001,454],{"class":404},[398,38003,34828],{"class":408},[398,38005,38006,38008,38010],{"class":400,"line":17181},[398,38007,34833],{"class":408},[398,38009,454],{"class":404},[398,38011,34838],{"class":408},[398,38013,38014,38016,38018,38020,38022,38024,38026,38028],{"class":400,"line":17186},[398,38015,34843],{"class":457},[398,38017,409],{"class":408},[398,38019,34848],{"class":513},[398,38021,34851],{"class":408},[398,38023,34854],{"class":513},[398,38025,780],{"class":408},[398,38027,34859],{"class":513},[398,38029,34862],{"class":408},[14,38031,38033],{"id":38032},"_22vgg","2.2.VGG",[22275,38035,38037],{"id":38036},"_221原理","2.2.1.原理",[19,38039,38040],{},[1738,38041],{"alt":316,"src":38042},"\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,38044,38045],{},[1738,38046],{"alt":316,"src":38047},"\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,38049,38050],{},[1738,38051],{"alt":316,"src":38052},"\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,38054,38055],{},"参数详细描述：",[19,38057,38058],{},[1738,38059],{"alt":316,"src":38060},"\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,38062,38063],{},[1738,38064],{"alt":316,"src":38065},"\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,38067,38068],{},[1738,38069],{"alt":316,"src":38070},"\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,38072,38073],{},[1738,38074],{"alt":316,"src":38075},"\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,38077,38078],{},[1738,38079],{"alt":316,"src":38080},"\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",[22275,38082,38084],{"id":38083},"_222代码实现","2.2.2.代码实现",[38,38086,38087],{},[41,38088,38089],{},"网络搭建",[389,38091,38093],{"className":30571,"code":38092,"language":30573,"meta":316,"style":316},"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",[395,38094,38095,38101,38113,38123,38133,38137,38154,38162,38181,38186,38191,38203,38241,38246,38282,38286,38315,38320,38325,38336,38372,38376,38412,38416,38444,38448,38453,38464,38500,38504,38540,38544,38580,38584,38612,38616,38621,38632,38669,38673,38709,38713,38749,38753,38781,38785,38790,38801,38837,38841,38877,38881,38917,38921,38949,38953,38958,38969,38974,38979,38984,39005,39009,39021,39025,39037,39041,39045,39050,39055,39070,39075,39085,39090,39105,39110,39129,39134,39143,39148,39158,39163,39168,39182,39187,39201,39209,39213,39217,39225,39236,39247,39258,39269,39280,39291,39297,39301,39306,39319,39339,39345,39354],{"__ignoreMap":316},[398,38096,38097,38099],{"class":400,"line":401},[398,38098,30585],{"class":404},[398,38100,30588],{"class":408},[398,38102,38103,38105,38108,38110],{"class":400,"line":317},[398,38104,30930],{"class":404},[398,38106,38107],{"class":408}," sympy.core.sympify ",[398,38109,30585],{"class":404},[398,38111,38112],{"class":408}," kernS\n",[398,38114,38115,38117,38119,38121],{"class":400,"line":320},[398,38116,30930],{"class":404},[398,38118,30933],{"class":408},[398,38120,30585],{"class":404},[398,38122,30938],{"class":408},[398,38124,38125,38127,38129,38131],{"class":400,"line":1470},[398,38126,30930],{"class":404},[398,38128,30950],{"class":408},[398,38130,30585],{"class":404},[398,38132,30955],{"class":408},[398,38134,38135],{"class":400,"line":1476},[398,38136,2676],{"emptyLinePlaceholder":328},[398,38138,38139,38141,38144,38146,38148,38150,38152],{"class":400,"line":1490},[398,38140,14971],{"class":404},[398,38142,38143],{"class":2239}," VGG16",[398,38145,409],{"class":408},[398,38147,30971],{"class":2239},[398,38149,960],{"class":408},[398,38151,30976],{"class":2239},[398,38153,30979],{"class":408},[398,38155,38156,38158,38160],{"class":400,"line":1496},[398,38157,30994],{"class":404},[398,38159,30997],{"class":457},[398,38161,31000],{"class":408},[398,38163,38164,38166,38168,38171,38173,38175,38177,38179],{"class":400,"line":1587},[398,38165,31010],{"class":457},[398,38167,409],{"class":408},[398,38169,38170],{"class":457},"VGG16",[398,38172,12712],{"class":408},[398,38174,31016],{"class":457},[398,38176,31019],{"class":408},[398,38178,31022],{"class":457},[398,38180,2252],{"class":408},[398,38182,38183],{"class":400,"line":1593},[398,38184,38185],{"class":467},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[398,38187,38188],{"class":400,"line":1605},[398,38189,38190],{"class":467},"        # 这里用的是灰度图\n",[398,38192,38193,38195,38198,38200],{"class":400,"line":1888},[398,38194,31038],{"class":457},[398,38196,38197],{"class":408},".block1",[398,38199,454],{"class":404},[398,38201,38202],{"class":408},"nn.Sequential(\n",[398,38204,38205,38208,38210,38212,38214,38216,38218,38220,38222,38224,38226,38228,38230,38232,38234,38236,38238],{"class":400,"line":1893},[398,38206,38207],{"class":408},"            nn.Conv2d(",[398,38209,31049],{"class":5493},[398,38211,454],{"class":404},[398,38213,619],{"class":457},[398,38215,780],{"class":408},[398,38217,31058],{"class":5493},[398,38219,454],{"class":404},[398,38221,605],{"class":457},[398,38223,780],{"class":408},[398,38225,31067],{"class":5493},[398,38227,454],{"class":404},[398,38229,480],{"class":457},[398,38231,780],{"class":408},[398,38233,31076],{"class":5493},[398,38235,454],{"class":404},[398,38237,619],{"class":457},[398,38239,38240],{"class":408},"),\n",[398,38242,38243],{"class":400,"line":1899},[398,38244,38245],{"class":408},"            nn.ReLU(),\n",[398,38247,38248,38250,38252,38254,38256,38258,38260,38262,38264,38266,38268,38270,38272,38274,38276,38278,38280],{"class":400,"line":1904},[398,38249,38207],{"class":408},[398,38251,31049],{"class":5493},[398,38253,454],{"class":404},[398,38255,605],{"class":457},[398,38257,780],{"class":408},[398,38259,31058],{"class":5493},[398,38261,454],{"class":404},[398,38263,605],{"class":457},[398,38265,780],{"class":408},[398,38267,31067],{"class":5493},[398,38269,454],{"class":404},[398,38271,480],{"class":457},[398,38273,780],{"class":408},[398,38275,31076],{"class":5493},[398,38277,454],{"class":404},[398,38279,619],{"class":457},[398,38281,38240],{"class":408},[398,38283,38284],{"class":400,"line":1918},[398,38285,38245],{"class":408},[398,38287,38288,38291,38293,38295,38297,38299,38301,38303,38305,38307,38309,38311,38313],{"class":400,"line":1923},[398,38289,38290],{"class":408},"            nn.MaxPool2d(",[398,38292,31067],{"class":5493},[398,38294,454],{"class":404},[398,38296,486],{"class":457},[398,38298,780],{"class":408},[398,38300,31122],{"class":5493},[398,38302,454],{"class":404},[398,38304,486],{"class":457},[398,38306,780],{"class":408},[398,38308,31076],{"class":5493},[398,38310,454],{"class":404},[398,38312,593],{"class":457},[398,38314,415],{"class":408},[398,38316,38317],{"class":400,"line":1929},[398,38318,38319],{"class":408},"        )\n",[398,38321,38322],{"class":400,"line":1950},[398,38323,38324],{"class":467},"        # 第二层\n",[398,38326,38327,38329,38332,38334],{"class":400,"line":1955},[398,38328,31038],{"class":457},[398,38330,38331],{"class":408},".block2",[398,38333,454],{"class":404},[398,38335,38202],{"class":408},[398,38337,38338,38340,38342,38344,38346,38348,38350,38352,38354,38356,38358,38360,38362,38364,38366,38368,38370],{"class":400,"line":1969},[398,38339,38207],{"class":408},[398,38341,31049],{"class":5493},[398,38343,454],{"class":404},[398,38345,605],{"class":457},[398,38347,780],{"class":408},[398,38349,31058],{"class":5493},[398,38351,454],{"class":404},[398,38353,32263],{"class":457},[398,38355,780],{"class":408},[398,38357,31067],{"class":5493},[398,38359,454],{"class":404},[398,38361,480],{"class":457},[398,38363,780],{"class":408},[398,38365,31076],{"class":5493},[398,38367,454],{"class":404},[398,38369,619],{"class":457},[398,38371,38240],{"class":408},[398,38373,38374],{"class":400,"line":1974},[398,38375,38245],{"class":408},[398,38377,38378,38380,38382,38384,38386,38388,38390,38392,38394,38396,38398,38400,38402,38404,38406,38408,38410],{"class":400,"line":2003},[398,38379,38207],{"class":408},[398,38381,31049],{"class":5493},[398,38383,454],{"class":404},[398,38385,32263],{"class":457},[398,38387,780],{"class":408},[398,38389,31058],{"class":5493},[398,38391,454],{"class":404},[398,38393,32263],{"class":457},[398,38395,780],{"class":408},[398,38397,31067],{"class":5493},[398,38399,454],{"class":404},[398,38401,480],{"class":457},[398,38403,780],{"class":408},[398,38405,31076],{"class":5493},[398,38407,454],{"class":404},[398,38409,619],{"class":457},[398,38411,38240],{"class":408},[398,38413,38414],{"class":400,"line":2008},[398,38415,38245],{"class":408},[398,38417,38418,38420,38422,38424,38426,38428,38430,38432,38434,38436,38438,38440,38442],{"class":400,"line":2025},[398,38419,38290],{"class":408},[398,38421,31067],{"class":5493},[398,38423,454],{"class":404},[398,38425,486],{"class":457},[398,38427,780],{"class":408},[398,38429,31122],{"class":5493},[398,38431,454],{"class":404},[398,38433,486],{"class":457},[398,38435,780],{"class":408},[398,38437,31076],{"class":5493},[398,38439,454],{"class":404},[398,38441,593],{"class":457},[398,38443,415],{"class":408},[398,38445,38446],{"class":400,"line":2030},[398,38447,38319],{"class":408},[398,38449,38450],{"class":400,"line":2035},[398,38451,38452],{"class":467},"        # 第三层\n",[398,38454,38455,38457,38460,38462],{"class":400,"line":2040},[398,38456,31038],{"class":457},[398,38458,38459],{"class":408},".block3",[398,38461,454],{"class":404},[398,38463,38202],{"class":408},[398,38465,38466,38468,38470,38472,38474,38476,38478,38480,38482,38484,38486,38488,38490,38492,38494,38496,38498],{"class":400,"line":2054},[398,38467,38207],{"class":408},[398,38469,31049],{"class":5493},[398,38471,454],{"class":404},[398,38473,32263],{"class":457},[398,38475,780],{"class":408},[398,38477,31058],{"class":5493},[398,38479,454],{"class":404},[398,38481,35063],{"class":457},[398,38483,780],{"class":408},[398,38485,31067],{"class":5493},[398,38487,454],{"class":404},[398,38489,480],{"class":457},[398,38491,780],{"class":408},[398,38493,31076],{"class":5493},[398,38495,454],{"class":404},[398,38497,619],{"class":457},[398,38499,38240],{"class":408},[398,38501,38502],{"class":400,"line":2059},[398,38503,38245],{"class":408},[398,38505,38506,38508,38510,38512,38514,38516,38518,38520,38522,38524,38526,38528,38530,38532,38534,38536,38538],{"class":400,"line":2853},[398,38507,38207],{"class":408},[398,38509,31049],{"class":5493},[398,38511,454],{"class":404},[398,38513,35063],{"class":457},[398,38515,780],{"class":408},[398,38517,31058],{"class":5493},[398,38519,454],{"class":404},[398,38521,35063],{"class":457},[398,38523,780],{"class":408},[398,38525,31067],{"class":5493},[398,38527,454],{"class":404},[398,38529,480],{"class":457},[398,38531,780],{"class":408},[398,38533,31076],{"class":5493},[398,38535,454],{"class":404},[398,38537,619],{"class":457},[398,38539,38240],{"class":408},[398,38541,38542],{"class":400,"line":2867},[398,38543,38245],{"class":408},[398,38545,38546,38548,38550,38552,38554,38556,38558,38560,38562,38564,38566,38568,38570,38572,38574,38576,38578],{"class":400,"line":2875},[398,38547,38207],{"class":408},[398,38549,31049],{"class":5493},[398,38551,454],{"class":404},[398,38553,35063],{"class":457},[398,38555,780],{"class":408},[398,38557,31058],{"class":5493},[398,38559,454],{"class":404},[398,38561,35063],{"class":457},[398,38563,780],{"class":408},[398,38565,31067],{"class":5493},[398,38567,454],{"class":404},[398,38569,480],{"class":457},[398,38571,780],{"class":408},[398,38573,31076],{"class":5493},[398,38575,454],{"class":404},[398,38577,619],{"class":457},[398,38579,38240],{"class":408},[398,38581,38582],{"class":400,"line":2880},[398,38583,38245],{"class":408},[398,38585,38586,38588,38590,38592,38594,38596,38598,38600,38602,38604,38606,38608,38610],{"class":400,"line":2886},[398,38587,38290],{"class":408},[398,38589,31067],{"class":5493},[398,38591,454],{"class":404},[398,38593,486],{"class":457},[398,38595,780],{"class":408},[398,38597,31122],{"class":5493},[398,38599,454],{"class":404},[398,38601,486],{"class":457},[398,38603,780],{"class":408},[398,38605,31076],{"class":5493},[398,38607,454],{"class":404},[398,38609,593],{"class":457},[398,38611,415],{"class":408},[398,38613,38614],{"class":400,"line":2892},[398,38615,38319],{"class":408},[398,38617,38618],{"class":400,"line":2897},[398,38619,38620],{"class":467},"        # 第四层\n",[398,38622,38623,38625,38628,38630],{"class":400,"line":8225},[398,38624,31038],{"class":457},[398,38626,38627],{"class":408},".block4",[398,38629,454],{"class":404},[398,38631,38202],{"class":408},[398,38633,38634,38636,38638,38640,38642,38644,38646,38648,38651,38653,38655,38657,38659,38661,38663,38665,38667],{"class":400,"line":8249},[398,38635,38207],{"class":408},[398,38637,31049],{"class":5493},[398,38639,454],{"class":404},[398,38641,35063],{"class":457},[398,38643,780],{"class":408},[398,38645,31058],{"class":5493},[398,38647,454],{"class":404},[398,38649,38650],{"class":457},"512",[398,38652,780],{"class":408},[398,38654,31067],{"class":5493},[398,38656,454],{"class":404},[398,38658,480],{"class":457},[398,38660,780],{"class":408},[398,38662,31076],{"class":5493},[398,38664,454],{"class":404},[398,38666,619],{"class":457},[398,38668,38240],{"class":408},[398,38670,38671],{"class":400,"line":8254},[398,38672,38245],{"class":408},[398,38674,38675,38677,38679,38681,38683,38685,38687,38689,38691,38693,38695,38697,38699,38701,38703,38705,38707],{"class":400,"line":8260},[398,38676,38207],{"class":408},[398,38678,31049],{"class":5493},[398,38680,454],{"class":404},[398,38682,38650],{"class":457},[398,38684,780],{"class":408},[398,38686,31058],{"class":5493},[398,38688,454],{"class":404},[398,38690,38650],{"class":457},[398,38692,780],{"class":408},[398,38694,31067],{"class":5493},[398,38696,454],{"class":404},[398,38698,480],{"class":457},[398,38700,780],{"class":408},[398,38702,31076],{"class":5493},[398,38704,454],{"class":404},[398,38706,619],{"class":457},[398,38708,38240],{"class":408},[398,38710,38711],{"class":400,"line":8287},[398,38712,38245],{"class":408},[398,38714,38715,38717,38719,38721,38723,38725,38727,38729,38731,38733,38735,38737,38739,38741,38743,38745,38747],{"class":400,"line":8292},[398,38716,38207],{"class":408},[398,38718,31049],{"class":5493},[398,38720,454],{"class":404},[398,38722,38650],{"class":457},[398,38724,780],{"class":408},[398,38726,31058],{"class":5493},[398,38728,454],{"class":404},[398,38730,38650],{"class":457},[398,38732,780],{"class":408},[398,38734,31067],{"class":5493},[398,38736,454],{"class":404},[398,38738,480],{"class":457},[398,38740,780],{"class":408},[398,38742,31076],{"class":5493},[398,38744,454],{"class":404},[398,38746,619],{"class":457},[398,38748,38240],{"class":408},[398,38750,38751],{"class":400,"line":8298},[398,38752,38245],{"class":408},[398,38754,38755,38757,38759,38761,38763,38765,38767,38769,38771,38773,38775,38777,38779],{"class":400,"line":8310},[398,38756,38290],{"class":408},[398,38758,31067],{"class":5493},[398,38760,454],{"class":404},[398,38762,486],{"class":457},[398,38764,780],{"class":408},[398,38766,31122],{"class":5493},[398,38768,454],{"class":404},[398,38770,486],{"class":457},[398,38772,780],{"class":408},[398,38774,31076],{"class":5493},[398,38776,454],{"class":404},[398,38778,593],{"class":457},[398,38780,415],{"class":408},[398,38782,38783],{"class":400,"line":8322},[398,38784,38319],{"class":408},[398,38786,38787],{"class":400,"line":8334},[398,38788,38789],{"class":467},"        # 第五层\n",[398,38791,38792,38794,38797,38799],{"class":400,"line":9993},[398,38793,31038],{"class":457},[398,38795,38796],{"class":408},".block5",[398,38798,454],{"class":404},[398,38800,38202],{"class":408},[398,38802,38803,38805,38807,38809,38811,38813,38815,38817,38819,38821,38823,38825,38827,38829,38831,38833,38835],{"class":400,"line":10018},[398,38804,38207],{"class":408},[398,38806,31049],{"class":5493},[398,38808,454],{"class":404},[398,38810,38650],{"class":457},[398,38812,780],{"class":408},[398,38814,31058],{"class":5493},[398,38816,454],{"class":404},[398,38818,38650],{"class":457},[398,38820,780],{"class":408},[398,38822,31067],{"class":5493},[398,38824,454],{"class":404},[398,38826,480],{"class":457},[398,38828,780],{"class":408},[398,38830,31076],{"class":5493},[398,38832,454],{"class":404},[398,38834,619],{"class":457},[398,38836,38240],{"class":408},[398,38838,38839],{"class":400,"line":10041},[398,38840,38245],{"class":408},[398,38842,38843,38845,38847,38849,38851,38853,38855,38857,38859,38861,38863,38865,38867,38869,38871,38873,38875],{"class":400,"line":10065},[398,38844,38207],{"class":408},[398,38846,31049],{"class":5493},[398,38848,454],{"class":404},[398,38850,38650],{"class":457},[398,38852,780],{"class":408},[398,38854,31058],{"class":5493},[398,38856,454],{"class":404},[398,38858,38650],{"class":457},[398,38860,780],{"class":408},[398,38862,31067],{"class":5493},[398,38864,454],{"class":404},[398,38866,480],{"class":457},[398,38868,780],{"class":408},[398,38870,31076],{"class":5493},[398,38872,454],{"class":404},[398,38874,619],{"class":457},[398,38876,38240],{"class":408},[398,38878,38879],{"class":400,"line":10070},[398,38880,38245],{"class":408},[398,38882,38883,38885,38887,38889,38891,38893,38895,38897,38899,38901,38903,38905,38907,38909,38911,38913,38915],{"class":400,"line":10075},[398,38884,38207],{"class":408},[398,38886,31049],{"class":5493},[398,38888,454],{"class":404},[398,38890,38650],{"class":457},[398,38892,780],{"class":408},[398,38894,31058],{"class":5493},[398,38896,454],{"class":404},[398,38898,38650],{"class":457},[398,38900,780],{"class":408},[398,38902,31067],{"class":5493},[398,38904,454],{"class":404},[398,38906,480],{"class":457},[398,38908,780],{"class":408},[398,38910,31076],{"class":5493},[398,38912,454],{"class":404},[398,38914,619],{"class":457},[398,38916,38240],{"class":408},[398,38918,38919],{"class":400,"line":10080},[398,38920,38245],{"class":408},[398,38922,38923,38925,38927,38929,38931,38933,38935,38937,38939,38941,38943,38945,38947],{"class":400,"line":10089},[398,38924,38290],{"class":408},[398,38926,31067],{"class":5493},[398,38928,454],{"class":404},[398,38930,486],{"class":457},[398,38932,780],{"class":408},[398,38934,31122],{"class":5493},[398,38936,454],{"class":404},[398,38938,486],{"class":457},[398,38940,780],{"class":408},[398,38942,31076],{"class":5493},[398,38944,454],{"class":404},[398,38946,593],{"class":457},[398,38948,415],{"class":408},[398,38950,38951],{"class":400,"line":10094},[398,38952,38319],{"class":408},[398,38954,38955],{"class":400,"line":10100},[398,38956,38957],{"class":467},"        # 全连接层\n",[398,38959,38960,38962,38965,38967],{"class":400,"line":10121},[398,38961,31038],{"class":457},[398,38963,38964],{"class":408},".block6",[398,38966,454],{"class":404},[398,38968,38202],{"class":408},[398,38970,38971],{"class":400,"line":10127},[398,38972,38973],{"class":467},"            # 平展操作\n",[398,38975,38976],{"class":400,"line":10141},[398,38977,38978],{"class":467},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[398,38980,38981],{"class":400,"line":10147},[398,38982,38983],{"class":408},"            nn.Flatten(),\n",[398,38985,38986,38989,38991,38993,38995,38997,38999,39001,39003],{"class":400,"line":10174},[398,38987,38988],{"class":408},"            nn.Linear(",[398,38990,771],{"class":457},[398,38992,857],{"class":404},[398,38994,771],{"class":457},[398,38996,857],{"class":404},[398,38998,38650],{"class":457},[398,39000,780],{"class":408},[398,39002,35063],{"class":457},[398,39004,38240],{"class":408},[398,39006,39007],{"class":400,"line":10183},[398,39008,38245],{"class":408},[398,39010,39011,39013,39015,39017,39019],{"class":400,"line":10189},[398,39012,38988],{"class":408},[398,39014,35063],{"class":457},[398,39016,780],{"class":408},[398,39018,32263],{"class":457},[398,39020,38240],{"class":408},[398,39022,39023],{"class":400,"line":10197},[398,39024,38245],{"class":408},[398,39026,39027,39029,39031,39033,39035],{"class":400,"line":10202},[398,39028,38988],{"class":408},[398,39030,32263],{"class":457},[398,39032,780],{"class":408},[398,39034,848],{"class":457},[398,39036,415],{"class":408},[398,39038,39039],{"class":400,"line":16881},[398,39040,38319],{"class":408},[398,39042,39043],{"class":400,"line":16887},[398,39044,2676],{"emptyLinePlaceholder":328},[398,39046,39047],{"class":400,"line":16910},[398,39048,39049],{"class":467},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[398,39051,39052],{"class":400,"line":16916},[398,39053,39054],{"class":467},"        # 循环遍历模型\n",[398,39056,39057,39059,39062,39064,39067],{"class":400,"line":16939},[398,39058,3679],{"class":404},[398,39060,39061],{"class":408}," m ",[398,39063,26236],{"class":404},[398,39065,39066],{"class":457}," self",[398,39068,39069],{"class":408},".modules():\n",[398,39071,39072],{"class":400,"line":16953},[398,39073,39074],{"class":467},"            # print(m)\n",[398,39076,39077,39079,39082],{"class":400,"line":16973},[398,39078,4918],{"class":404},[398,39080,39081],{"class":457}," isinstance",[398,39083,39084],{"class":408},"(m,nn.Conv2d):\n",[398,39086,39087],{"class":400,"line":16979},[398,39088,39089],{"class":467},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[398,39091,39092,39095,39098,39100,39103],{"class":400,"line":16990},[398,39093,39094],{"class":408},"                nn.init.kaiming_normal_(m.weight,",[398,39096,39097],{"class":5493},"nonlinearity",[398,39099,454],{"class":404},[398,39101,39102],{"class":513},"'relu'",[398,39104,415],{"class":408},[398,39106,39107],{"class":400,"line":17013},[398,39108,39109],{"class":467},"                # 判断b参数是否存在\n",[398,39111,39112,39115,39118,39121,39124,39127],{"class":400,"line":17035},[398,39113,39114],{"class":404},"                if",[398,39116,39117],{"class":408}," m.bias ",[398,39119,39120],{"class":404},"is",[398,39122,39123],{"class":404}," not",[398,39125,39126],{"class":457}," None",[398,39128,4015],{"class":408},[398,39130,39131],{"class":400,"line":17040},[398,39132,39133],{"class":467},"                    # 如果参数不存在的化初始化b=0\n",[398,39135,39136,39139,39141],{"class":400,"line":17046},[398,39137,39138],{"class":408},"                    nn.init.constant_(m.bias,",[398,39140,593],{"class":457},[398,39142,415],{"class":408},[398,39144,39145],{"class":400,"line":17060},[398,39146,39147],{"class":467},"            # 全连接层初始化\n",[398,39149,39150,39153,39155],{"class":400,"line":17073},[398,39151,39152],{"class":404},"            elif",[398,39154,39081],{"class":457},[398,39156,39157],{"class":408},"(m,nn.Linear):\n",[398,39159,39160],{"class":400,"line":17078},[398,39161,39162],{"class":467},"                # 这个初始化方法是利用的是正太分布的方式\n",[398,39164,39165],{"class":400,"line":17092},[398,39166,39167],{"class":467},"                # 均值为0，方差为0.01\n",[398,39169,39170,39173,39175,39177,39180],{"class":400,"line":17097},[398,39171,39172],{"class":408},"                nn.init.normal_(m.weight,",[398,39174,593],{"class":457},[398,39176,780],{"class":408},[398,39178,39179],{"class":457},"0.01",[398,39181,415],{"class":408},[398,39183,39184],{"class":400,"line":17103},[398,39185,39186],{"class":467},"                # 初始化b参数\n",[398,39188,39189,39191,39193,39195,39197,39199],{"class":400,"line":17108},[398,39190,39114],{"class":404},[398,39192,39117],{"class":408},[398,39194,39120],{"class":404},[398,39196,39123],{"class":404},[398,39198,39126],{"class":457},[398,39200,4015],{"class":408},[398,39202,39203,39205,39207],{"class":400,"line":17122},[398,39204,39138],{"class":408},[398,39206,593],{"class":457},[398,39208,415],{"class":408},[398,39210,39211],{"class":400,"line":17127},[398,39212,2676],{"emptyLinePlaceholder":328},[398,39214,39215],{"class":400,"line":17132},[398,39216,35358],{"class":467},[398,39218,39219,39221,39223],{"class":400,"line":17146},[398,39220,30994],{"class":404},[398,39222,31286],{"class":2239},[398,39224,31289],{"class":408},[398,39226,39227,39229,39231,39233],{"class":400,"line":17158},[398,39228,31294],{"class":408},[398,39230,454],{"class":404},[398,39232,31016],{"class":457},[398,39234,39235],{"class":408},".block1(x)\n",[398,39237,39238,39240,39242,39244],{"class":400,"line":17163},[398,39239,31294],{"class":408},[398,39241,454],{"class":404},[398,39243,31016],{"class":457},[398,39245,39246],{"class":408},".block2(x)\n",[398,39248,39249,39251,39253,39255],{"class":400,"line":17176},[398,39250,31294],{"class":408},[398,39252,454],{"class":404},[398,39254,31016],{"class":457},[398,39256,39257],{"class":408},".block3(x)\n",[398,39259,39260,39262,39264,39266],{"class":400,"line":17181},[398,39261,31294],{"class":408},[398,39263,454],{"class":404},[398,39265,31016],{"class":457},[398,39267,39268],{"class":408},".block4(x)\n",[398,39270,39271,39273,39275,39277],{"class":400,"line":17186},[398,39272,31294],{"class":408},[398,39274,454],{"class":404},[398,39276,31016],{"class":457},[398,39278,39279],{"class":408},".block5(x)\n",[398,39281,39282,39284,39286,39288],{"class":400,"line":17191},[398,39283,31294],{"class":408},[398,39285,454],{"class":404},[398,39287,31016],{"class":457},[398,39289,39290],{"class":408},".block6(x)\n",[398,39292,39293,39295],{"class":400,"line":17204},[398,39294,15029],{"class":404},[398,39296,31402],{"class":408},[398,39298,39299],{"class":400,"line":17209},[398,39300,2676],{"emptyLinePlaceholder":328},[398,39302,39303],{"class":400,"line":32826},[398,39304,39305],{"class":467},"# 验证模型\n",[398,39307,39308,39310,39312,39314,39317],{"class":400,"line":32832},[398,39309,1807],{"class":404},[398,39311,31413],{"class":457},[398,39313,3225],{"class":404},[398,39315,39316],{"class":513},"'__main__'",[398,39318,4015],{"class":408},[398,39320,39321,39323,39325,39327,39329,39331,39333,39335,39337],{"class":400,"line":32838},[398,39322,31430],{"class":408},[398,39324,454],{"class":404},[398,39326,30644],{"class":408},[398,39328,31437],{"class":513},[398,39330,1980],{"class":404},[398,39332,31442],{"class":408},[398,39334,1977],{"class":404},[398,39336,30669],{"class":513},[398,39338,415],{"class":408},[398,39340,39341,39343],{"class":400,"line":32844},[398,39342,31492],{"class":457},[398,39344,30678],{"class":408},[398,39346,39347,39349,39351],{"class":400,"line":32850},[398,39348,31482],{"class":408},[398,39350,454],{"class":404},[398,39352,39353],{"class":408},"VGG16().to(device)\n",[398,39355,39356,39358,39360,39362,39364,39366,39368,39370],{"class":400,"line":32861},[398,39357,31492],{"class":457},[398,39359,31495],{"class":408},[398,39361,619],{"class":457},[398,39363,780],{"class":408},[398,39365,31694],{"class":457},[398,39367,780],{"class":408},[398,39369,31694],{"class":457},[398,39371,31508],{"class":408},[38,39373,39374],{"start":317},[41,39375,39376],{},"训练代码",[19,39378,39379],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,39381,39382],{},"解决方式:",[19,39384,39385],{},"①权重初始化",[389,39387,39389],{"className":30571,"code":39388,"language":30573,"meta":316,"style":316},"# 权重初始化,保证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",[395,39390,39391,39396,39401,39413,39418,39426,39431,39444,39449,39463,39468,39477,39482,39491,39496,39501,39514,39519,39533],{"__ignoreMap":316},[398,39392,39393],{"class":400,"line":401},[398,39394,39395],{"class":467},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[398,39397,39398],{"class":400,"line":317},[398,39399,39400],{"class":467},"# 循环遍历模型\n",[398,39402,39403,39405,39407,39409,39411],{"class":400,"line":320},[398,39404,3301],{"class":404},[398,39406,39061],{"class":408},[398,39408,26236],{"class":404},[398,39410,39066],{"class":457},[398,39412,39069],{"class":408},[398,39414,39415],{"class":400,"line":1470},[398,39416,39417],{"class":467},"    # print(m)\n",[398,39419,39420,39422,39424],{"class":400,"line":1476},[398,39421,3377],{"class":404},[398,39423,39081],{"class":457},[398,39425,39084],{"class":408},[398,39427,39428],{"class":400,"line":1490},[398,39429,39430],{"class":467},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[398,39432,39433,39436,39438,39440,39442],{"class":400,"line":1496},[398,39434,39435],{"class":408},"        nn.init.kaiming_normal_(m.weight,",[398,39437,39097],{"class":5493},[398,39439,454],{"class":404},[398,39441,39102],{"class":513},[398,39443,415],{"class":408},[398,39445,39446],{"class":400,"line":1587},[398,39447,39448],{"class":467},"        # 判断b参数是否存在\n",[398,39450,39451,39453,39455,39457,39459,39461],{"class":400,"line":1593},[398,39452,2773],{"class":404},[398,39454,39117],{"class":408},[398,39456,39120],{"class":404},[398,39458,39123],{"class":404},[398,39460,39126],{"class":457},[398,39462,4015],{"class":408},[398,39464,39465],{"class":400,"line":1605},[398,39466,39467],{"class":467},"            # 如果参数不存在的化初始化b=0\n",[398,39469,39470,39473,39475],{"class":400,"line":1888},[398,39471,39472],{"class":408},"            nn.init.constant_(m.bias,",[398,39474,593],{"class":457},[398,39476,415],{"class":408},[398,39478,39479],{"class":400,"line":1893},[398,39480,39481],{"class":467},"    # 全连接层初始化\n",[398,39483,39484,39487,39489],{"class":400,"line":1899},[398,39485,39486],{"class":404},"    elif",[398,39488,39081],{"class":457},[398,39490,39157],{"class":408},[398,39492,39493],{"class":400,"line":1904},[398,39494,39495],{"class":467},"        # 这个初始化方法是利用的是正太分布的方式\n",[398,39497,39498],{"class":400,"line":1918},[398,39499,39500],{"class":467},"        # 均值为0，方差为0.01\n",[398,39502,39503,39506,39508,39510,39512],{"class":400,"line":1923},[398,39504,39505],{"class":408},"        nn.init.normal_(m.weight,",[398,39507,593],{"class":457},[398,39509,780],{"class":408},[398,39511,39179],{"class":457},[398,39513,415],{"class":408},[398,39515,39516],{"class":400,"line":1929},[398,39517,39518],{"class":467},"        # 初始化b参数\n",[398,39520,39521,39523,39525,39527,39529,39531],{"class":400,"line":1950},[398,39522,2773],{"class":404},[398,39524,39117],{"class":408},[398,39526,39120],{"class":404},[398,39528,39123],{"class":404},[398,39530,39126],{"class":457},[398,39532,4015],{"class":408},[398,39534,39535,39537,39539],{"class":400,"line":1955},[398,39536,39472],{"class":408},[398,39538,593],{"class":457},[398,39540,415],{"class":408},[19,39542,39543],{},"②尽可能地增加批次",[19,39545,39546],{},"训练完整代码：",[389,39548,39549],{"className":30571,"code":38092,"language":30573,"meta":316,"style":316},[395,39550,39551,39557,39567,39577,39587,39591,39607,39615,39633,39637,39641,39651,39687,39691,39727,39731,39759,39763,39767,39777,39813,39817,39853,39857,39885,39889,39893,39903,39939,39943,39979,39983,40019,40023,40051,40055,40059,40069,40105,40109,40145,40149,40185,40189,40217,40221,40225,40235,40271,40275,40311,40315,40351,40355,40383,40387,40391,40401,40405,40409,40413,40433,40437,40449,40453,40465,40469,40473,40477,40481,40493,40497,40505,40509,40521,40525,40539,40543,40551,40555,40563,40567,40571,40583,40587,40601,40609,40613,40617,40625,40635,40645,40655,40665,40675,40685,40691,40695,40699,40711,40731,40737,40745],{"__ignoreMap":316},[398,39552,39553,39555],{"class":400,"line":401},[398,39554,30585],{"class":404},[398,39556,30588],{"class":408},[398,39558,39559,39561,39563,39565],{"class":400,"line":317},[398,39560,30930],{"class":404},[398,39562,38107],{"class":408},[398,39564,30585],{"class":404},[398,39566,38112],{"class":408},[398,39568,39569,39571,39573,39575],{"class":400,"line":320},[398,39570,30930],{"class":404},[398,39572,30933],{"class":408},[398,39574,30585],{"class":404},[398,39576,30938],{"class":408},[398,39578,39579,39581,39583,39585],{"class":400,"line":1470},[398,39580,30930],{"class":404},[398,39582,30950],{"class":408},[398,39584,30585],{"class":404},[398,39586,30955],{"class":408},[398,39588,39589],{"class":400,"line":1476},[398,39590,2676],{"emptyLinePlaceholder":328},[398,39592,39593,39595,39597,39599,39601,39603,39605],{"class":400,"line":1490},[398,39594,14971],{"class":404},[398,39596,38143],{"class":2239},[398,39598,409],{"class":408},[398,39600,30971],{"class":2239},[398,39602,960],{"class":408},[398,39604,30976],{"class":2239},[398,39606,30979],{"class":408},[398,39608,39609,39611,39613],{"class":400,"line":1496},[398,39610,30994],{"class":404},[398,39612,30997],{"class":457},[398,39614,31000],{"class":408},[398,39616,39617,39619,39621,39623,39625,39627,39629,39631],{"class":400,"line":1587},[398,39618,31010],{"class":457},[398,39620,409],{"class":408},[398,39622,38170],{"class":457},[398,39624,12712],{"class":408},[398,39626,31016],{"class":457},[398,39628,31019],{"class":408},[398,39630,31022],{"class":457},[398,39632,2252],{"class":408},[398,39634,39635],{"class":400,"line":1593},[398,39636,38185],{"class":467},[398,39638,39639],{"class":400,"line":1605},[398,39640,38190],{"class":467},[398,39642,39643,39645,39647,39649],{"class":400,"line":1888},[398,39644,31038],{"class":457},[398,39646,38197],{"class":408},[398,39648,454],{"class":404},[398,39650,38202],{"class":408},[398,39652,39653,39655,39657,39659,39661,39663,39665,39667,39669,39671,39673,39675,39677,39679,39681,39683,39685],{"class":400,"line":1893},[398,39654,38207],{"class":408},[398,39656,31049],{"class":5493},[398,39658,454],{"class":404},[398,39660,619],{"class":457},[398,39662,780],{"class":408},[398,39664,31058],{"class":5493},[398,39666,454],{"class":404},[398,39668,605],{"class":457},[398,39670,780],{"class":408},[398,39672,31067],{"class":5493},[398,39674,454],{"class":404},[398,39676,480],{"class":457},[398,39678,780],{"class":408},[398,39680,31076],{"class":5493},[398,39682,454],{"class":404},[398,39684,619],{"class":457},[398,39686,38240],{"class":408},[398,39688,39689],{"class":400,"line":1899},[398,39690,38245],{"class":408},[398,39692,39693,39695,39697,39699,39701,39703,39705,39707,39709,39711,39713,39715,39717,39719,39721,39723,39725],{"class":400,"line":1904},[398,39694,38207],{"class":408},[398,39696,31049],{"class":5493},[398,39698,454],{"class":404},[398,39700,605],{"class":457},[398,39702,780],{"class":408},[398,39704,31058],{"class":5493},[398,39706,454],{"class":404},[398,39708,605],{"class":457},[398,39710,780],{"class":408},[398,39712,31067],{"class":5493},[398,39714,454],{"class":404},[398,39716,480],{"class":457},[398,39718,780],{"class":408},[398,39720,31076],{"class":5493},[398,39722,454],{"class":404},[398,39724,619],{"class":457},[398,39726,38240],{"class":408},[398,39728,39729],{"class":400,"line":1918},[398,39730,38245],{"class":408},[398,39732,39733,39735,39737,39739,39741,39743,39745,39747,39749,39751,39753,39755,39757],{"class":400,"line":1923},[398,39734,38290],{"class":408},[398,39736,31067],{"class":5493},[398,39738,454],{"class":404},[398,39740,486],{"class":457},[398,39742,780],{"class":408},[398,39744,31122],{"class":5493},[398,39746,454],{"class":404},[398,39748,486],{"class":457},[398,39750,780],{"class":408},[398,39752,31076],{"class":5493},[398,39754,454],{"class":404},[398,39756,593],{"class":457},[398,39758,415],{"class":408},[398,39760,39761],{"class":400,"line":1929},[398,39762,38319],{"class":408},[398,39764,39765],{"class":400,"line":1950},[398,39766,38324],{"class":467},[398,39768,39769,39771,39773,39775],{"class":400,"line":1955},[398,39770,31038],{"class":457},[398,39772,38331],{"class":408},[398,39774,454],{"class":404},[398,39776,38202],{"class":408},[398,39778,39779,39781,39783,39785,39787,39789,39791,39793,39795,39797,39799,39801,39803,39805,39807,39809,39811],{"class":400,"line":1969},[398,39780,38207],{"class":408},[398,39782,31049],{"class":5493},[398,39784,454],{"class":404},[398,39786,605],{"class":457},[398,39788,780],{"class":408},[398,39790,31058],{"class":5493},[398,39792,454],{"class":404},[398,39794,32263],{"class":457},[398,39796,780],{"class":408},[398,39798,31067],{"class":5493},[398,39800,454],{"class":404},[398,39802,480],{"class":457},[398,39804,780],{"class":408},[398,39806,31076],{"class":5493},[398,39808,454],{"class":404},[398,39810,619],{"class":457},[398,39812,38240],{"class":408},[398,39814,39815],{"class":400,"line":1974},[398,39816,38245],{"class":408},[398,39818,39819,39821,39823,39825,39827,39829,39831,39833,39835,39837,39839,39841,39843,39845,39847,39849,39851],{"class":400,"line":2003},[398,39820,38207],{"class":408},[398,39822,31049],{"class":5493},[398,39824,454],{"class":404},[398,39826,32263],{"class":457},[398,39828,780],{"class":408},[398,39830,31058],{"class":5493},[398,39832,454],{"class":404},[398,39834,32263],{"class":457},[398,39836,780],{"class":408},[398,39838,31067],{"class":5493},[398,39840,454],{"class":404},[398,39842,480],{"class":457},[398,39844,780],{"class":408},[398,39846,31076],{"class":5493},[398,39848,454],{"class":404},[398,39850,619],{"class":457},[398,39852,38240],{"class":408},[398,39854,39855],{"class":400,"line":2008},[398,39856,38245],{"class":408},[398,39858,39859,39861,39863,39865,39867,39869,39871,39873,39875,39877,39879,39881,39883],{"class":400,"line":2025},[398,39860,38290],{"class":408},[398,39862,31067],{"class":5493},[398,39864,454],{"class":404},[398,39866,486],{"class":457},[398,39868,780],{"class":408},[398,39870,31122],{"class":5493},[398,39872,454],{"class":404},[398,39874,486],{"class":457},[398,39876,780],{"class":408},[398,39878,31076],{"class":5493},[398,39880,454],{"class":404},[398,39882,593],{"class":457},[398,39884,415],{"class":408},[398,39886,39887],{"class":400,"line":2030},[398,39888,38319],{"class":408},[398,39890,39891],{"class":400,"line":2035},[398,39892,38452],{"class":467},[398,39894,39895,39897,39899,39901],{"class":400,"line":2040},[398,39896,31038],{"class":457},[398,39898,38459],{"class":408},[398,39900,454],{"class":404},[398,39902,38202],{"class":408},[398,39904,39905,39907,39909,39911,39913,39915,39917,39919,39921,39923,39925,39927,39929,39931,39933,39935,39937],{"class":400,"line":2054},[398,39906,38207],{"class":408},[398,39908,31049],{"class":5493},[398,39910,454],{"class":404},[398,39912,32263],{"class":457},[398,39914,780],{"class":408},[398,39916,31058],{"class":5493},[398,39918,454],{"class":404},[398,39920,35063],{"class":457},[398,39922,780],{"class":408},[398,39924,31067],{"class":5493},[398,39926,454],{"class":404},[398,39928,480],{"class":457},[398,39930,780],{"class":408},[398,39932,31076],{"class":5493},[398,39934,454],{"class":404},[398,39936,619],{"class":457},[398,39938,38240],{"class":408},[398,39940,39941],{"class":400,"line":2059},[398,39942,38245],{"class":408},[398,39944,39945,39947,39949,39951,39953,39955,39957,39959,39961,39963,39965,39967,39969,39971,39973,39975,39977],{"class":400,"line":2853},[398,39946,38207],{"class":408},[398,39948,31049],{"class":5493},[398,39950,454],{"class":404},[398,39952,35063],{"class":457},[398,39954,780],{"class":408},[398,39956,31058],{"class":5493},[398,39958,454],{"class":404},[398,39960,35063],{"class":457},[398,39962,780],{"class":408},[398,39964,31067],{"class":5493},[398,39966,454],{"class":404},[398,39968,480],{"class":457},[398,39970,780],{"class":408},[398,39972,31076],{"class":5493},[398,39974,454],{"class":404},[398,39976,619],{"class":457},[398,39978,38240],{"class":408},[398,39980,39981],{"class":400,"line":2867},[398,39982,38245],{"class":408},[398,39984,39985,39987,39989,39991,39993,39995,39997,39999,40001,40003,40005,40007,40009,40011,40013,40015,40017],{"class":400,"line":2875},[398,39986,38207],{"class":408},[398,39988,31049],{"class":5493},[398,39990,454],{"class":404},[398,39992,35063],{"class":457},[398,39994,780],{"class":408},[398,39996,31058],{"class":5493},[398,39998,454],{"class":404},[398,40000,35063],{"class":457},[398,40002,780],{"class":408},[398,40004,31067],{"class":5493},[398,40006,454],{"class":404},[398,40008,480],{"class":457},[398,40010,780],{"class":408},[398,40012,31076],{"class":5493},[398,40014,454],{"class":404},[398,40016,619],{"class":457},[398,40018,38240],{"class":408},[398,40020,40021],{"class":400,"line":2880},[398,40022,38245],{"class":408},[398,40024,40025,40027,40029,40031,40033,40035,40037,40039,40041,40043,40045,40047,40049],{"class":400,"line":2886},[398,40026,38290],{"class":408},[398,40028,31067],{"class":5493},[398,40030,454],{"class":404},[398,40032,486],{"class":457},[398,40034,780],{"class":408},[398,40036,31122],{"class":5493},[398,40038,454],{"class":404},[398,40040,486],{"class":457},[398,40042,780],{"class":408},[398,40044,31076],{"class":5493},[398,40046,454],{"class":404},[398,40048,593],{"class":457},[398,40050,415],{"class":408},[398,40052,40053],{"class":400,"line":2892},[398,40054,38319],{"class":408},[398,40056,40057],{"class":400,"line":2897},[398,40058,38620],{"class":467},[398,40060,40061,40063,40065,40067],{"class":400,"line":8225},[398,40062,31038],{"class":457},[398,40064,38627],{"class":408},[398,40066,454],{"class":404},[398,40068,38202],{"class":408},[398,40070,40071,40073,40075,40077,40079,40081,40083,40085,40087,40089,40091,40093,40095,40097,40099,40101,40103],{"class":400,"line":8249},[398,40072,38207],{"class":408},[398,40074,31049],{"class":5493},[398,40076,454],{"class":404},[398,40078,35063],{"class":457},[398,40080,780],{"class":408},[398,40082,31058],{"class":5493},[398,40084,454],{"class":404},[398,40086,38650],{"class":457},[398,40088,780],{"class":408},[398,40090,31067],{"class":5493},[398,40092,454],{"class":404},[398,40094,480],{"class":457},[398,40096,780],{"class":408},[398,40098,31076],{"class":5493},[398,40100,454],{"class":404},[398,40102,619],{"class":457},[398,40104,38240],{"class":408},[398,40106,40107],{"class":400,"line":8254},[398,40108,38245],{"class":408},[398,40110,40111,40113,40115,40117,40119,40121,40123,40125,40127,40129,40131,40133,40135,40137,40139,40141,40143],{"class":400,"line":8260},[398,40112,38207],{"class":408},[398,40114,31049],{"class":5493},[398,40116,454],{"class":404},[398,40118,38650],{"class":457},[398,40120,780],{"class":408},[398,40122,31058],{"class":5493},[398,40124,454],{"class":404},[398,40126,38650],{"class":457},[398,40128,780],{"class":408},[398,40130,31067],{"class":5493},[398,40132,454],{"class":404},[398,40134,480],{"class":457},[398,40136,780],{"class":408},[398,40138,31076],{"class":5493},[398,40140,454],{"class":404},[398,40142,619],{"class":457},[398,40144,38240],{"class":408},[398,40146,40147],{"class":400,"line":8287},[398,40148,38245],{"class":408},[398,40150,40151,40153,40155,40157,40159,40161,40163,40165,40167,40169,40171,40173,40175,40177,40179,40181,40183],{"class":400,"line":8292},[398,40152,38207],{"class":408},[398,40154,31049],{"class":5493},[398,40156,454],{"class":404},[398,40158,38650],{"class":457},[398,40160,780],{"class":408},[398,40162,31058],{"class":5493},[398,40164,454],{"class":404},[398,40166,38650],{"class":457},[398,40168,780],{"class":408},[398,40170,31067],{"class":5493},[398,40172,454],{"class":404},[398,40174,480],{"class":457},[398,40176,780],{"class":408},[398,40178,31076],{"class":5493},[398,40180,454],{"class":404},[398,40182,619],{"class":457},[398,40184,38240],{"class":408},[398,40186,40187],{"class":400,"line":8298},[398,40188,38245],{"class":408},[398,40190,40191,40193,40195,40197,40199,40201,40203,40205,40207,40209,40211,40213,40215],{"class":400,"line":8310},[398,40192,38290],{"class":408},[398,40194,31067],{"class":5493},[398,40196,454],{"class":404},[398,40198,486],{"class":457},[398,40200,780],{"class":408},[398,40202,31122],{"class":5493},[398,40204,454],{"class":404},[398,40206,486],{"class":457},[398,40208,780],{"class":408},[398,40210,31076],{"class":5493},[398,40212,454],{"class":404},[398,40214,593],{"class":457},[398,40216,415],{"class":408},[398,40218,40219],{"class":400,"line":8322},[398,40220,38319],{"class":408},[398,40222,40223],{"class":400,"line":8334},[398,40224,38789],{"class":467},[398,40226,40227,40229,40231,40233],{"class":400,"line":9993},[398,40228,31038],{"class":457},[398,40230,38796],{"class":408},[398,40232,454],{"class":404},[398,40234,38202],{"class":408},[398,40236,40237,40239,40241,40243,40245,40247,40249,40251,40253,40255,40257,40259,40261,40263,40265,40267,40269],{"class":400,"line":10018},[398,40238,38207],{"class":408},[398,40240,31049],{"class":5493},[398,40242,454],{"class":404},[398,40244,38650],{"class":457},[398,40246,780],{"class":408},[398,40248,31058],{"class":5493},[398,40250,454],{"class":404},[398,40252,38650],{"class":457},[398,40254,780],{"class":408},[398,40256,31067],{"class":5493},[398,40258,454],{"class":404},[398,40260,480],{"class":457},[398,40262,780],{"class":408},[398,40264,31076],{"class":5493},[398,40266,454],{"class":404},[398,40268,619],{"class":457},[398,40270,38240],{"class":408},[398,40272,40273],{"class":400,"line":10041},[398,40274,38245],{"class":408},[398,40276,40277,40279,40281,40283,40285,40287,40289,40291,40293,40295,40297,40299,40301,40303,40305,40307,40309],{"class":400,"line":10065},[398,40278,38207],{"class":408},[398,40280,31049],{"class":5493},[398,40282,454],{"class":404},[398,40284,38650],{"class":457},[398,40286,780],{"class":408},[398,40288,31058],{"class":5493},[398,40290,454],{"class":404},[398,40292,38650],{"class":457},[398,40294,780],{"class":408},[398,40296,31067],{"class":5493},[398,40298,454],{"class":404},[398,40300,480],{"class":457},[398,40302,780],{"class":408},[398,40304,31076],{"class":5493},[398,40306,454],{"class":404},[398,40308,619],{"class":457},[398,40310,38240],{"class":408},[398,40312,40313],{"class":400,"line":10070},[398,40314,38245],{"class":408},[398,40316,40317,40319,40321,40323,40325,40327,40329,40331,40333,40335,40337,40339,40341,40343,40345,40347,40349],{"class":400,"line":10075},[398,40318,38207],{"class":408},[398,40320,31049],{"class":5493},[398,40322,454],{"class":404},[398,40324,38650],{"class":457},[398,40326,780],{"class":408},[398,40328,31058],{"class":5493},[398,40330,454],{"class":404},[398,40332,38650],{"class":457},[398,40334,780],{"class":408},[398,40336,31067],{"class":5493},[398,40338,454],{"class":404},[398,40340,480],{"class":457},[398,40342,780],{"class":408},[398,40344,31076],{"class":5493},[398,40346,454],{"class":404},[398,40348,619],{"class":457},[398,40350,38240],{"class":408},[398,40352,40353],{"class":400,"line":10080},[398,40354,38245],{"class":408},[398,40356,40357,40359,40361,40363,40365,40367,40369,40371,40373,40375,40377,40379,40381],{"class":400,"line":10089},[398,40358,38290],{"class":408},[398,40360,31067],{"class":5493},[398,40362,454],{"class":404},[398,40364,486],{"class":457},[398,40366,780],{"class":408},[398,40368,31122],{"class":5493},[398,40370,454],{"class":404},[398,40372,486],{"class":457},[398,40374,780],{"class":408},[398,40376,31076],{"class":5493},[398,40378,454],{"class":404},[398,40380,593],{"class":457},[398,40382,415],{"class":408},[398,40384,40385],{"class":400,"line":10094},[398,40386,38319],{"class":408},[398,40388,40389],{"class":400,"line":10100},[398,40390,38957],{"class":467},[398,40392,40393,40395,40397,40399],{"class":400,"line":10121},[398,40394,31038],{"class":457},[398,40396,38964],{"class":408},[398,40398,454],{"class":404},[398,40400,38202],{"class":408},[398,40402,40403],{"class":400,"line":10127},[398,40404,38973],{"class":467},[398,40406,40407],{"class":400,"line":10141},[398,40408,38978],{"class":467},[398,40410,40411],{"class":400,"line":10147},[398,40412,38983],{"class":408},[398,40414,40415,40417,40419,40421,40423,40425,40427,40429,40431],{"class":400,"line":10174},[398,40416,38988],{"class":408},[398,40418,771],{"class":457},[398,40420,857],{"class":404},[398,40422,771],{"class":457},[398,40424,857],{"class":404},[398,40426,38650],{"class":457},[398,40428,780],{"class":408},[398,40430,35063],{"class":457},[398,40432,38240],{"class":408},[398,40434,40435],{"class":400,"line":10183},[398,40436,38245],{"class":408},[398,40438,40439,40441,40443,40445,40447],{"class":400,"line":10189},[398,40440,38988],{"class":408},[398,40442,35063],{"class":457},[398,40444,780],{"class":408},[398,40446,32263],{"class":457},[398,40448,38240],{"class":408},[398,40450,40451],{"class":400,"line":10197},[398,40452,38245],{"class":408},[398,40454,40455,40457,40459,40461,40463],{"class":400,"line":10202},[398,40456,38988],{"class":408},[398,40458,32263],{"class":457},[398,40460,780],{"class":408},[398,40462,848],{"class":457},[398,40464,415],{"class":408},[398,40466,40467],{"class":400,"line":16881},[398,40468,38319],{"class":408},[398,40470,40471],{"class":400,"line":16887},[398,40472,2676],{"emptyLinePlaceholder":328},[398,40474,40475],{"class":400,"line":16910},[398,40476,39049],{"class":467},[398,40478,40479],{"class":400,"line":16916},[398,40480,39054],{"class":467},[398,40482,40483,40485,40487,40489,40491],{"class":400,"line":16939},[398,40484,3679],{"class":404},[398,40486,39061],{"class":408},[398,40488,26236],{"class":404},[398,40490,39066],{"class":457},[398,40492,39069],{"class":408},[398,40494,40495],{"class":400,"line":16953},[398,40496,39074],{"class":467},[398,40498,40499,40501,40503],{"class":400,"line":16973},[398,40500,4918],{"class":404},[398,40502,39081],{"class":457},[398,40504,39084],{"class":408},[398,40506,40507],{"class":400,"line":16979},[398,40508,39089],{"class":467},[398,40510,40511,40513,40515,40517,40519],{"class":400,"line":16990},[398,40512,39094],{"class":408},[398,40514,39097],{"class":5493},[398,40516,454],{"class":404},[398,40518,39102],{"class":513},[398,40520,415],{"class":408},[398,40522,40523],{"class":400,"line":17013},[398,40524,39109],{"class":467},[398,40526,40527,40529,40531,40533,40535,40537],{"class":400,"line":17035},[398,40528,39114],{"class":404},[398,40530,39117],{"class":408},[398,40532,39120],{"class":404},[398,40534,39123],{"class":404},[398,40536,39126],{"class":457},[398,40538,4015],{"class":408},[398,40540,40541],{"class":400,"line":17040},[398,40542,39133],{"class":467},[398,40544,40545,40547,40549],{"class":400,"line":17046},[398,40546,39138],{"class":408},[398,40548,593],{"class":457},[398,40550,415],{"class":408},[398,40552,40553],{"class":400,"line":17060},[398,40554,39147],{"class":467},[398,40556,40557,40559,40561],{"class":400,"line":17073},[398,40558,39152],{"class":404},[398,40560,39081],{"class":457},[398,40562,39157],{"class":408},[398,40564,40565],{"class":400,"line":17078},[398,40566,39162],{"class":467},[398,40568,40569],{"class":400,"line":17092},[398,40570,39167],{"class":467},[398,40572,40573,40575,40577,40579,40581],{"class":400,"line":17097},[398,40574,39172],{"class":408},[398,40576,593],{"class":457},[398,40578,780],{"class":408},[398,40580,39179],{"class":457},[398,40582,415],{"class":408},[398,40584,40585],{"class":400,"line":17103},[398,40586,39186],{"class":467},[398,40588,40589,40591,40593,40595,40597,40599],{"class":400,"line":17108},[398,40590,39114],{"class":404},[398,40592,39117],{"class":408},[398,40594,39120],{"class":404},[398,40596,39123],{"class":404},[398,40598,39126],{"class":457},[398,40600,4015],{"class":408},[398,40602,40603,40605,40607],{"class":400,"line":17122},[398,40604,39138],{"class":408},[398,40606,593],{"class":457},[398,40608,415],{"class":408},[398,40610,40611],{"class":400,"line":17127},[398,40612,2676],{"emptyLinePlaceholder":328},[398,40614,40615],{"class":400,"line":17132},[398,40616,35358],{"class":467},[398,40618,40619,40621,40623],{"class":400,"line":17146},[398,40620,30994],{"class":404},[398,40622,31286],{"class":2239},[398,40624,31289],{"class":408},[398,40626,40627,40629,40631,40633],{"class":400,"line":17158},[398,40628,31294],{"class":408},[398,40630,454],{"class":404},[398,40632,31016],{"class":457},[398,40634,39235],{"class":408},[398,40636,40637,40639,40641,40643],{"class":400,"line":17163},[398,40638,31294],{"class":408},[398,40640,454],{"class":404},[398,40642,31016],{"class":457},[398,40644,39246],{"class":408},[398,40646,40647,40649,40651,40653],{"class":400,"line":17176},[398,40648,31294],{"class":408},[398,40650,454],{"class":404},[398,40652,31016],{"class":457},[398,40654,39257],{"class":408},[398,40656,40657,40659,40661,40663],{"class":400,"line":17181},[398,40658,31294],{"class":408},[398,40660,454],{"class":404},[398,40662,31016],{"class":457},[398,40664,39268],{"class":408},[398,40666,40667,40669,40671,40673],{"class":400,"line":17186},[398,40668,31294],{"class":408},[398,40670,454],{"class":404},[398,40672,31016],{"class":457},[398,40674,39279],{"class":408},[398,40676,40677,40679,40681,40683],{"class":400,"line":17191},[398,40678,31294],{"class":408},[398,40680,454],{"class":404},[398,40682,31016],{"class":457},[398,40684,39290],{"class":408},[398,40686,40687,40689],{"class":400,"line":17204},[398,40688,15029],{"class":404},[398,40690,31402],{"class":408},[398,40692,40693],{"class":400,"line":17209},[398,40694,2676],{"emptyLinePlaceholder":328},[398,40696,40697],{"class":400,"line":32826},[398,40698,39305],{"class":467},[398,40700,40701,40703,40705,40707,40709],{"class":400,"line":32832},[398,40702,1807],{"class":404},[398,40704,31413],{"class":457},[398,40706,3225],{"class":404},[398,40708,39316],{"class":513},[398,40710,4015],{"class":408},[398,40712,40713,40715,40717,40719,40721,40723,40725,40727,40729],{"class":400,"line":32838},[398,40714,31430],{"class":408},[398,40716,454],{"class":404},[398,40718,30644],{"class":408},[398,40720,31437],{"class":513},[398,40722,1980],{"class":404},[398,40724,31442],{"class":408},[398,40726,1977],{"class":404},[398,40728,30669],{"class":513},[398,40730,415],{"class":408},[398,40732,40733,40735],{"class":400,"line":32844},[398,40734,31492],{"class":457},[398,40736,30678],{"class":408},[398,40738,40739,40741,40743],{"class":400,"line":32850},[398,40740,31482],{"class":408},[398,40742,454],{"class":404},[398,40744,39353],{"class":408},[398,40746,40747,40749,40751,40753,40755,40757,40759,40761],{"class":400,"line":32861},[398,40748,31492],{"class":457},[398,40750,31495],{"class":408},[398,40752,619],{"class":457},[398,40754,780],{"class":408},[398,40756,31694],{"class":457},[398,40758,780],{"class":408},[398,40760,31694],{"class":457},[398,40762,31508],{"class":408},[38,40764,40765],{"start":320},[41,40766,40767],{},"测试代码",[389,40769,40771],{"className":30571,"code":40770,"language":30573,"meta":316,"style":316},"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",[395,40772,40773,40779,40789,40799,40803,40813,40824,40828,40832,40836,40844,40860,40870,40886,40896,40910,40914,40924,40934,40944,40950,40954,40958,40966,40970,40986,40994,40998,41002,41010,41018,41022,41026,41030,41034,41040,41044,41054,41062,41070,41074,41078,41082,41090,41094,41110,41114,41118,41122,41134,41138,41150,41154,41158,41170,41174,41184,41188,41192,41204,41208,41217,41221,41225,41233,41237,41245,41249,41253,41257,41261,41265,41281,41289,41293,41297,41345,41351,41355,41365,41373,41381,41385,41389,41393,41397,41405,41409,41425,41429,41437,41445],{"__ignoreMap":316},[398,40774,40775,40777],{"class":400,"line":401},[398,40776,30585],{"class":404},[398,40778,30588],{"class":408},[398,40780,40781,40783,40785,40787],{"class":400,"line":317},[398,40782,30585],{"class":404},[398,40784,31608],{"class":408},[398,40786,31576],{"class":404},[398,40788,31613],{"class":408},[398,40790,40791,40793,40795,40797],{"class":400,"line":320},[398,40792,30930],{"class":404},[398,40794,31591],{"class":408},[398,40796,30585],{"class":404},[398,40798,31596],{"class":408},[398,40800,40801],{"class":400,"line":1470},[398,40802,34115],{"class":467},[398,40804,40805,40807,40809,40811],{"class":400,"line":1476},[398,40806,30930],{"class":404},[398,40808,31561],{"class":408},[398,40810,30585],{"class":404},[398,40812,31566],{"class":408},[398,40814,40815,40817,40819,40821],{"class":400,"line":1490},[398,40816,30930],{"class":404},[398,40818,32107],{"class":408},[398,40820,30585],{"class":404},[398,40822,40823],{"class":457}," VGG16\n",[398,40825,40826],{"class":400,"line":1496},[398,40827,2676],{"emptyLinePlaceholder":328},[398,40829,40830],{"class":400,"line":1587},[398,40831,2676],{"emptyLinePlaceholder":328},[398,40833,40834],{"class":400,"line":1593},[398,40835,34144],{"class":467},[398,40837,40838,40840,40842],{"class":400,"line":1605},[398,40839,32140],{"class":404},[398,40841,34151],{"class":2239},[398,40843,32146],{"class":408},[398,40845,40846,40848,40850,40852,40854,40856,40858],{"class":400,"line":1888},[398,40847,34158],{"class":408},[398,40849,454],{"class":404},[398,40851,31648],{"class":408},[398,40853,31651],{"class":5493},[398,40855,454],{"class":404},[398,40857,31656],{"class":513},[398,40859,31659],{"class":408},[398,40861,40862,40864,40866,40868],{"class":400,"line":1893},[398,40863,34175],{"class":5493},[398,40865,454],{"class":404},[398,40867,34180],{"class":457},[398,40869,31659],{"class":408},[398,40871,40872,40874,40876,40878,40880,40882,40884],{"class":400,"line":1899},[398,40873,34187],{"class":5493},[398,40875,454],{"class":404},[398,40877,31686],{"class":408},[398,40879,31689],{"class":5493},[398,40881,454],{"class":404},[398,40883,31694],{"class":457},[398,40885,31697],{"class":408},[398,40887,40888,40890,40892,40894],{"class":400,"line":1904},[398,40889,34204],{"class":5493},[398,40891,454],{"class":404},[398,40893,31669],{"class":457},[398,40895,415],{"class":408},[398,40897,40898,40900,40902,40904,40906,40908],{"class":400,"line":1918},[398,40899,34215],{"class":408},[398,40901,454],{"class":404},[398,40903,31727],{"class":408},[398,40905,31730],{"class":5493},[398,40907,454],{"class":404},[398,40909,34226],{"class":408},[398,40911,40912],{"class":400,"line":1923},[398,40913,34231],{"class":467},[398,40915,40916,40918,40920,40922],{"class":400,"line":1929},[398,40917,34236],{"class":5493},[398,40919,454],{"class":404},[398,40921,619],{"class":457},[398,40923,31659],{"class":408},[398,40925,40926,40928,40930,40932],{"class":400,"line":1950},[398,40927,34247],{"class":5493},[398,40929,454],{"class":404},[398,40931,31669],{"class":457},[398,40933,31659],{"class":408},[398,40935,40936,40938,40940,40942],{"class":400,"line":1955},[398,40937,34258],{"class":5493},[398,40939,454],{"class":404},[398,40941,593],{"class":457},[398,40943,415],{"class":408},[398,40945,40946,40948],{"class":400,"line":1969},[398,40947,4366],{"class":404},[398,40949,34271],{"class":408},[398,40951,40952],{"class":400,"line":1974},[398,40953,2676],{"emptyLinePlaceholder":328},[398,40955,40956],{"class":400,"line":2003},[398,40957,34280],{"class":467},[398,40959,40960,40962,40964],{"class":400,"line":2008},[398,40961,32140],{"class":404},[398,40963,34287],{"class":2239},[398,40965,34290],{"class":408},[398,40967,40968],{"class":400,"line":2025},[398,40969,34295],{"class":467},[398,40971,40972,40974,40976,40978,40980,40982,40984],{"class":400,"line":2030},[398,40973,31430],{"class":408},[398,40975,454],{"class":404},[398,40977,31437],{"class":513},[398,40979,1980],{"class":404},[398,40981,31442],{"class":408},[398,40983,1977],{"class":404},[398,40985,34312],{"class":513},[398,40987,40988,40990,40992],{"class":400,"line":2035},[398,40989,31482],{"class":408},[398,40991,454],{"class":404},[398,40993,32482],{"class":408},[398,40995,40996],{"class":400,"line":2040},[398,40997,2676],{"emptyLinePlaceholder":328},[398,40999,41000],{"class":400,"line":2054},[398,41001,34329],{"class":467},[398,41003,41004,41006,41008],{"class":400,"line":2059},[398,41005,34334],{"class":408},[398,41007,454],{"class":404},[398,41009,32535],{"class":457},[398,41011,41012,41014,41016],{"class":400,"line":2853},[398,41013,34343],{"class":408},[398,41015,454],{"class":404},[398,41017,3361],{"class":457},[398,41019,41020],{"class":400,"line":2867},[398,41021,2676],{"emptyLinePlaceholder":328},[398,41023,41024],{"class":400,"line":2875},[398,41025,34356],{"class":467},[398,41027,41028],{"class":400,"line":2880},[398,41029,34361],{"class":467},[398,41031,41032],{"class":400,"line":2886},[398,41033,34366],{"class":467},[398,41035,41036,41038],{"class":400,"line":2892},[398,41037,34371],{"class":404},[398,41039,33077],{"class":408},[398,41041,41042],{"class":400,"line":2897},[398,41043,34378],{"class":467},[398,41045,41046,41048,41050,41052],{"class":400,"line":8225},[398,41047,3679],{"class":404},[398,41049,34385],{"class":408},[398,41051,26236],{"class":404},[398,41053,34390],{"class":408},[398,41055,41056,41058,41060],{"class":400,"line":8249},[398,41057,34395],{"class":408},[398,41059,454],{"class":404},[398,41061,34400],{"class":408},[398,41063,41064,41066,41068],{"class":400,"line":8254},[398,41065,34405],{"class":408},[398,41067,454],{"class":404},[398,41069,34410],{"class":408},[398,41071,41072],{"class":400,"line":8260},[398,41073,34415],{"class":467},[398,41075,41076],{"class":400,"line":8287},[398,41077,33068],{"class":408},[398,41079,41080],{"class":400,"line":8292},[398,41081,34424],{"class":467},[398,41083,41084,41086,41088],{"class":400,"line":8298},[398,41085,32853],{"class":408},[398,41087,454],{"class":404},[398,41089,34433],{"class":408},[398,41091,41092],{"class":400,"line":8310},[398,41093,34438],{"class":467},[398,41095,41096,41098,41100,41102,41104,41106,41108],{"class":400,"line":8322},[398,41097,32870],{"class":408},[398,41099,454],{"class":404},[398,41101,32875],{"class":408},[398,41103,32878],{"class":5493},[398,41105,454],{"class":404},[398,41107,619],{"class":457},[398,41109,415],{"class":408},[398,41111,41112],{"class":400,"line":8334},[398,41113,34459],{"class":467},[398,41115,41116],{"class":400,"line":9993},[398,41117,34464],{"class":467},[398,41119,41120],{"class":400,"line":10018},[398,41121,34469],{"class":467},[398,41123,41124,41126,41128,41130,41132],{"class":400,"line":10041},[398,41125,34474],{"class":408},[398,41127,9754],{"class":404},[398,41129,32980],{"class":408},[398,41131,3225],{"class":404},[398,41133,34483],{"class":408},[398,41135,41136],{"class":400,"line":10065},[398,41137,34488],{"class":467},[398,41139,41140,41142,41144,41146,41148],{"class":400,"line":10070},[398,41141,34493],{"class":408},[398,41143,9754],{"class":404},[398,41145,34498],{"class":408},[398,41147,593],{"class":457},[398,41149,415],{"class":408},[398,41151,41152],{"class":400,"line":10075},[398,41153,2676],{"emptyLinePlaceholder":328},[398,41155,41156],{"class":400,"line":10080},[398,41157,34511],{"class":467},[398,41159,41160,41162,41164,41166,41168],{"class":400,"line":10089},[398,41161,34516],{"class":408},[398,41163,454],{"class":404},[398,41165,34521],{"class":408},[398,41167,986],{"class":404},[398,41169,34526],{"class":408},[398,41171,41172],{"class":400,"line":10094},[398,41173,34531],{"class":467},[398,41175,41176,41178,41180,41182],{"class":400,"line":10100},[398,41177,32644],{"class":457},[398,41179,409],{"class":408},[398,41181,34540],{"class":513},[398,41183,34543],{"class":408},[398,41185,41186],{"class":400,"line":10121},[398,41187,2676],{"emptyLinePlaceholder":328},[398,41189,41190],{"class":400,"line":10127},[398,41191,34552],{"class":467},[398,41193,41194,41196,41198,41200,41202],{"class":400,"line":10141},[398,41195,1807],{"class":404},[398,41197,31413],{"class":457},[398,41199,3225],{"class":404},[398,41201,31418],{"class":513},[398,41203,4015],{"class":408},[398,41205,41206],{"class":400,"line":10147},[398,41207,34569],{"class":467},[398,41209,41210,41212,41214],{"class":400,"line":10174},[398,41211,31482],{"class":408},[398,41213,454],{"class":404},[398,41215,41216],{"class":408},"VGG16()\n",[398,41218,41219],{"class":400,"line":10183},[398,41220,34582],{"class":467},[398,41222,41223],{"class":400,"line":10189},[398,41224,34587],{"class":467},[398,41226,41227,41229,41231],{"class":400,"line":10197},[398,41228,34592],{"class":408},[398,41230,34595],{"class":513},[398,41232,30690],{"class":408},[398,41234,41235],{"class":400,"line":10202},[398,41236,34602],{"class":467},[398,41238,41239,41241,41243],{"class":400,"line":16881},[398,41240,34215],{"class":408},[398,41242,454],{"class":404},[398,41244,34611],{"class":408},[398,41246,41247],{"class":400,"line":16887},[398,41248,34616],{"class":467},[398,41250,41251],{"class":400,"line":16910},[398,41252,34621],{"class":408},[398,41254,41255],{"class":400,"line":16916},[398,41256,2676],{"emptyLinePlaceholder":328},[398,41258,41259],{"class":400,"line":16939},[398,41260,34630],{"class":467},[398,41262,41263],{"class":400,"line":16953},[398,41264,34635],{"class":467},[398,41266,41267,41269,41271,41273,41275,41277,41279],{"class":400,"line":16973},[398,41268,31430],{"class":408},[398,41270,454],{"class":404},[398,41272,31437],{"class":513},[398,41274,1980],{"class":404},[398,41276,31442],{"class":408},[398,41278,1977],{"class":404},[398,41280,34312],{"class":513},[398,41282,41283,41285,41287],{"class":400,"line":16979},[398,41284,31482],{"class":408},[398,41286,454],{"class":404},[398,41288,32482],{"class":408},[398,41290,41291],{"class":400,"line":16990},[398,41292,34664],{"class":467},[398,41294,41295],{"class":400,"line":17013},[398,41296,34669],{"class":467},[398,41298,41299,41301,41303,41305,41307,41309,41311,41313,41315,41317,41319,41321,41323,41325,41327,41329,41331,41333,41335,41337,41339,41341,41343],{"class":400,"line":17035},[398,41300,34674],{"class":408},[398,41302,454],{"class":404},[398,41304,1292],{"class":408},[398,41306,34681],{"class":513},[398,41308,780],{"class":408},[398,41310,34686],{"class":513},[398,41312,780],{"class":408},[398,41314,34691],{"class":513},[398,41316,780],{"class":408},[398,41318,34696],{"class":513},[398,41320,780],{"class":408},[398,41322,34701],{"class":513},[398,41324,780],{"class":408},[398,41326,34706],{"class":513},[398,41328,780],{"class":408},[398,41330,34711],{"class":513},[398,41332,780],{"class":408},[398,41334,34716],{"class":513},[398,41336,780],{"class":408},[398,41338,34721],{"class":513},[398,41340,780],{"class":408},[398,41342,34726],{"class":513},[398,41344,33439],{"class":408},[398,41346,41347,41349],{"class":400,"line":17040},[398,41348,34371],{"class":404},[398,41350,33077],{"class":408},[398,41352,41353],{"class":400,"line":17046},[398,41354,34739],{"class":467},[398,41356,41357,41359,41361,41363],{"class":400,"line":17060},[398,41358,3679],{"class":404},[398,41360,34746],{"class":408},[398,41362,26236],{"class":404},[398,41364,34390],{"class":408},[398,41366,41367,41369,41371],{"class":400,"line":17073},[398,41368,32803],{"class":408},[398,41370,454],{"class":404},[398,41372,32808],{"class":408},[398,41374,41375,41377,41379],{"class":400,"line":17078},[398,41376,32818],{"class":408},[398,41378,454],{"class":404},[398,41380,32823],{"class":408},[398,41382,41383],{"class":400,"line":17092},[398,41384,2676],{"emptyLinePlaceholder":328},[398,41386,41387],{"class":400,"line":17097},[398,41388,34775],{"class":467},[398,41390,41391],{"class":400,"line":17103},[398,41392,33068],{"class":408},[398,41394,41395],{"class":400,"line":17108},[398,41396,34784],{"class":467},[398,41398,41399,41401,41403],{"class":400,"line":17122},[398,41400,32853],{"class":408},[398,41402,454],{"class":404},[398,41404,32858],{"class":408},[398,41406,41407],{"class":400,"line":17127},[398,41408,34797],{"class":467},[398,41410,41411,41413,41415,41417,41419,41421,41423],{"class":400,"line":17132},[398,41412,32870],{"class":408},[398,41414,454],{"class":404},[398,41416,32875],{"class":408},[398,41418,32878],{"class":5493},[398,41420,454],{"class":404},[398,41422,619],{"class":457},[398,41424,415],{"class":408},[398,41426,41427],{"class":400,"line":17146},[398,41428,34818],{"class":467},[398,41430,41431,41433,41435],{"class":400,"line":17158},[398,41432,34823],{"class":408},[398,41434,454],{"class":404},[398,41436,34828],{"class":408},[398,41438,41439,41441,41443],{"class":400,"line":17163},[398,41440,34833],{"class":408},[398,41442,454],{"class":404},[398,41444,34838],{"class":408},[398,41446,41447,41449,41451,41453,41455,41457,41459,41461],{"class":400,"line":17176},[398,41448,34843],{"class":457},[398,41450,409],{"class":408},[398,41452,34848],{"class":513},[398,41454,34851],{"class":408},[398,41456,34854],{"class":513},[398,41458,780],{"class":408},[398,41460,34859],{"class":513},[398,41462,34862],{"class":408},[14,41464,41466],{"id":41465},"_23googlenet","2.3.GoogLeNet",[22275,41468,41470],{"id":41469},"_231原理","2.3.1.原理",[38,41472,41473],{},[41,41474,41475],{},"网络结构",[19,41477,41478],{},[1738,41479],{"alt":316,"src":41480},"\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,41482,41483],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,41485,41486],{},[1738,41487],{"alt":316,"src":41488},"\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,41490,41491],{},[1738,41492],{"alt":316,"src":41493},"\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,41495,41496],{},[1738,41497],{"alt":316,"src":41498},"\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",[38,41500,41501],{"start":317},[41,41502,41503],{},"1x1卷积的优点",[19,41505,41506],{},[1738,41507],{"alt":316,"src":41508},"\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",[38,41510,41511],{"start":320},[41,41512,41513],{},"全局平均池化层优点",[19,41515,41516],{},[1738,41517],{"alt":316,"src":41518},"\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,41520,41521],{},[1738,41522],{"alt":316,"src":41523},"\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",[38,41525,41526],{"start":1470},[41,41527,41528],{},"参数详细描述",[19,41530,41531],{},[1738,41532],{"alt":316,"src":41533},"\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,41535,41536],{},[1738,41537],{"alt":316,"src":41538},"\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,41540,41541],{},[1738,41542],{"alt":316,"src":41543},"\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,41545,41546],{},[1738,41547],{"alt":316,"src":41548},"\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,41550,41551],{},[1738,41552],{"alt":316,"src":41553},"\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,41555,41556],{},[1738,41557],{"alt":316,"src":41558},"\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,41560,41561],{},[1738,41562],{"alt":316,"src":41563},"\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,41565,41566],{},[1738,41567],{"alt":316,"src":41568},"\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,41570,41571],{},[1738,41572],{"alt":316,"src":41573},"\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,41575,41576],{},[1738,41577],{"alt":316,"src":41578},"\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,41580,41581],{},[1738,41582],{"alt":316,"src":41583},"\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,41585,41586],{},[1738,41587],{"alt":316,"src":41588},"\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,41590,41591],{},[1738,41592],{"alt":316,"src":41593},"\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,41595,41596],{},[1738,41597],{"alt":316,"src":41598},"\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,41600,41601],{},[1738,41602],{"alt":316,"src":41603},"\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,41605,41606],{},[1738,41607],{"alt":316,"src":41608},"\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,41610,41611],{},[1738,41612],{"alt":316,"src":41613},"\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,41615,41616],{},[1738,41617],{"alt":316,"src":41618},"\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,41620,41621],{},[1738,41622],{"alt":316,"src":41623},"\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,41625,41626],{},[1738,41627],{"alt":316,"src":41628},"\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,41630,41631],{},[1738,41632],{"alt":316,"src":41633},"\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",[22275,41635,41637],{"id":41636},"_232代码实现","2.3.2.代码实现",[38,41639,41640],{},[41,41641,30904],{},[19,41643,41644],{},"根据原理一步一步搭建即可",[389,41646,41648],{"className":30571,"code":41647,"language":30573,"meta":316,"style":316},"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",[395,41649,41650,41656,41666,41676,41680,41697,41706,41721,41731,41736,41769,41774,41811,41858,41863,41899,41946,41951,41956,41991,42023,42027,42035,42051,42075,42100,42121,42126,42141,42145,42149,42154,42171,42176,42185,42200,42211,42255,42259,42287,42291,42302,42330,42334,42371,42375,42403,42407,42418,42454,42486,42514,42518,42529,42563,42595,42627,42660,42694,42722,42726,42737,42770,42802,42816,42820,42833,42837,42842,42854,42862,42884,42889,42894,42899,42904,42909,42914,42928,42936,42945,42958,42973,42982,42986,42994,43005,43016,43027,43038,43049,43055,43059,43064,43076,43096,43105],{"__ignoreMap":316},[398,41651,41652,41654],{"class":400,"line":401},[398,41653,30585],{"class":404},[398,41655,30588],{"class":408},[398,41657,41658,41660,41662,41664],{"class":400,"line":317},[398,41659,30930],{"class":404},[398,41661,30933],{"class":408},[398,41663,30585],{"class":404},[398,41665,30938],{"class":408},[398,41667,41668,41670,41672,41674],{"class":400,"line":320},[398,41669,30930],{"class":404},[398,41671,30950],{"class":408},[398,41673,30585],{"class":404},[398,41675,30955],{"class":408},[398,41677,41678],{"class":400,"line":1470},[398,41679,2676],{"emptyLinePlaceholder":328},[398,41681,41682,41684,41687,41689,41691,41693,41695],{"class":400,"line":1476},[398,41683,14971],{"class":404},[398,41685,41686],{"class":2239}," Inception",[398,41688,409],{"class":408},[398,41690,30971],{"class":2239},[398,41692,960],{"class":408},[398,41694,30976],{"class":2239},[398,41696,30979],{"class":408},[398,41698,41699,41701,41703],{"class":400,"line":1490},[398,41700,30994],{"class":404},[398,41702,30997],{"class":457},[398,41704,41705],{"class":408},"(self,in_channels,c1,c2,c3,c4):\n",[398,41707,41708,41710,41713,41715,41717,41719],{"class":400,"line":1496},[398,41709,31010],{"class":457},[398,41711,41712],{"class":408},"(Inception,",[398,41714,31016],{"class":457},[398,41716,31019],{"class":408},[398,41718,31022],{"class":457},[398,41720,2252],{"class":408},[398,41722,41723,41725,41727,41729],{"class":400,"line":1587},[398,41724,31038],{"class":457},[398,41726,34964],{"class":408},[398,41728,454],{"class":404},[398,41730,34969],{"class":408},[398,41732,41733],{"class":400,"line":1593},[398,41734,41735],{"class":467},"        # 路线1：定义1*1卷积\n",[398,41737,41738,41740,41743,41745,41747,41749,41751,41754,41756,41758,41761,41763,41765,41767],{"class":400,"line":1605},[398,41739,31038],{"class":457},[398,41741,41742],{"class":408},".p1_1",[398,41744,454],{"class":404},[398,41746,31046],{"class":408},[398,41748,31049],{"class":5493},[398,41750,454],{"class":404},[398,41752,41753],{"class":408},"in_channels,",[398,41755,31058],{"class":5493},[398,41757,454],{"class":404},[398,41759,41760],{"class":408},"c1,",[398,41762,31067],{"class":5493},[398,41764,454],{"class":404},[398,41766,619],{"class":457},[398,41768,415],{"class":408},[398,41770,41771],{"class":400,"line":1888},[398,41772,41773],{"class":467},"        # 路线2：定义1*1卷积和3*3\n",[398,41775,41776,41778,41781,41783,41785,41787,41789,41791,41793,41795,41798,41800,41803,41805,41807,41809],{"class":400,"line":1893},[398,41777,31038],{"class":457},[398,41779,41780],{"class":408},".p2_1",[398,41782,454],{"class":404},[398,41784,31046],{"class":408},[398,41786,31049],{"class":5493},[398,41788,454],{"class":404},[398,41790,41753],{"class":408},[398,41792,31058],{"class":5493},[398,41794,454],{"class":404},[398,41796,41797],{"class":408},"c2[",[398,41799,593],{"class":457},[398,41801,41802],{"class":408},"],",[398,41804,31067],{"class":5493},[398,41806,454],{"class":404},[398,41808,619],{"class":457},[398,41810,415],{"class":408},[398,41812,41813,41815,41818,41820,41822,41824,41826,41828,41830,41832,41834,41836,41838,41840,41842,41844,41846,41848,41850,41852,41854,41856],{"class":400,"line":1899},[398,41814,31038],{"class":457},[398,41816,41817],{"class":408},".p2_2",[398,41819,454],{"class":404},[398,41821,31046],{"class":408},[398,41823,31049],{"class":5493},[398,41825,454],{"class":404},[398,41827,41797],{"class":408},[398,41829,593],{"class":457},[398,41831,41802],{"class":408},[398,41833,31058],{"class":5493},[398,41835,454],{"class":404},[398,41837,41797],{"class":408},[398,41839,619],{"class":457},[398,41841,41802],{"class":408},[398,41843,31067],{"class":5493},[398,41845,454],{"class":404},[398,41847,480],{"class":457},[398,41849,780],{"class":408},[398,41851,31076],{"class":5493},[398,41853,454],{"class":404},[398,41855,619],{"class":457},[398,41857,415],{"class":408},[398,41859,41860],{"class":400,"line":1904},[398,41861,41862],{"class":467},"        # 路线3：定义1*1卷积和5*5\n",[398,41864,41865,41867,41870,41872,41874,41876,41878,41880,41882,41884,41887,41889,41891,41893,41895,41897],{"class":400,"line":1918},[398,41866,31038],{"class":457},[398,41868,41869],{"class":408},".p3_1",[398,41871,454],{"class":404},[398,41873,31046],{"class":408},[398,41875,31049],{"class":5493},[398,41877,454],{"class":404},[398,41879,41753],{"class":408},[398,41881,31058],{"class":5493},[398,41883,454],{"class":404},[398,41885,41886],{"class":408},"c3[",[398,41888,593],{"class":457},[398,41890,41802],{"class":408},[398,41892,31067],{"class":5493},[398,41894,454],{"class":404},[398,41896,619],{"class":457},[398,41898,415],{"class":408},[398,41900,41901,41903,41906,41908,41910,41912,41914,41916,41918,41920,41922,41924,41926,41928,41930,41932,41934,41936,41938,41940,41942,41944],{"class":400,"line":1923},[398,41902,31038],{"class":457},[398,41904,41905],{"class":408},".p3_2",[398,41907,454],{"class":404},[398,41909,31046],{"class":408},[398,41911,31049],{"class":5493},[398,41913,454],{"class":404},[398,41915,41886],{"class":408},[398,41917,593],{"class":457},[398,41919,41802],{"class":408},[398,41921,31058],{"class":5493},[398,41923,454],{"class":404},[398,41925,41886],{"class":408},[398,41927,619],{"class":457},[398,41929,41802],{"class":408},[398,41931,31067],{"class":5493},[398,41933,454],{"class":404},[398,41935,721],{"class":457},[398,41937,780],{"class":408},[398,41939,31076],{"class":5493},[398,41941,454],{"class":404},[398,41943,486],{"class":457},[398,41945,415],{"class":408},[398,41947,41948],{"class":400,"line":1929},[398,41949,41950],{"class":467},"        # 路线4：定义3*3最大池化和1*1卷积\n",[398,41952,41953],{"class":400,"line":1950},[398,41954,41955],{"class":467},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[398,41957,41958,41960,41963,41965,41967,41969,41971,41973,41975,41977,41979,41981,41983,41985,41987,41989],{"class":400,"line":1955},[398,41959,31038],{"class":457},[398,41961,41962],{"class":408},".p4_1",[398,41964,454],{"class":404},[398,41966,35022],{"class":408},[398,41968,31067],{"class":5493},[398,41970,454],{"class":404},[398,41972,480],{"class":457},[398,41974,780],{"class":408},[398,41976,31122],{"class":5493},[398,41978,454],{"class":404},[398,41980,619],{"class":457},[398,41982,780],{"class":408},[398,41984,31076],{"class":5493},[398,41986,454],{"class":404},[398,41988,619],{"class":457},[398,41990,415],{"class":408},[398,41992,41993,41995,41998,42000,42002,42004,42006,42008,42010,42012,42015,42017,42019,42021],{"class":400,"line":1969},[398,41994,31038],{"class":457},[398,41996,41997],{"class":408},".p4_2",[398,41999,454],{"class":404},[398,42001,31046],{"class":408},[398,42003,31049],{"class":5493},[398,42005,454],{"class":404},[398,42007,41753],{"class":408},[398,42009,31058],{"class":5493},[398,42011,454],{"class":404},[398,42013,42014],{"class":408},"c4,",[398,42016,31067],{"class":5493},[398,42018,454],{"class":404},[398,42020,619],{"class":457},[398,42022,415],{"class":408},[398,42024,42025],{"class":400,"line":1974},[398,42026,2676],{"emptyLinePlaceholder":328},[398,42028,42029,42031,42033],{"class":400,"line":2003},[398,42030,30994],{"class":404},[398,42032,31286],{"class":2239},[398,42034,31289],{"class":408},[398,42036,42037,42040,42042,42044,42046,42048],{"class":400,"line":2008},[398,42038,42039],{"class":408},"        p1",[398,42041,454],{"class":404},[398,42043,31016],{"class":457},[398,42045,35377],{"class":408},[398,42047,31016],{"class":457},[398,42049,42050],{"class":408},".p1_1(x))\n",[398,42052,42053,42055,42057,42059,42061,42063,42066,42068,42070,42072],{"class":400,"line":2025},[398,42054,7362],{"class":408},[398,42056,454],{"class":404},[398,42058,31016],{"class":457},[398,42060,35377],{"class":408},[398,42062,31016],{"class":457},[398,42064,42065],{"class":408},".p2_2(",[398,42067,31016],{"class":457},[398,42069,35377],{"class":408},[398,42071,31016],{"class":457},[398,42073,42074],{"class":408},".p2_1(x))))\n",[398,42076,42077,42080,42082,42084,42086,42088,42091,42093,42095,42097],{"class":400,"line":2030},[398,42078,42079],{"class":408},"        p3",[398,42081,454],{"class":404},[398,42083,31016],{"class":457},[398,42085,35377],{"class":408},[398,42087,31016],{"class":457},[398,42089,42090],{"class":408},".p3_2(",[398,42092,31016],{"class":457},[398,42094,35377],{"class":408},[398,42096,31016],{"class":457},[398,42098,42099],{"class":408},".p3_1(x))))\n",[398,42101,42102,42105,42107,42109,42111,42113,42116,42118],{"class":400,"line":2035},[398,42103,42104],{"class":408},"        p4",[398,42106,454],{"class":404},[398,42108,31016],{"class":457},[398,42110,35377],{"class":408},[398,42112,31016],{"class":457},[398,42114,42115],{"class":408},".p4_2(",[398,42117,31016],{"class":457},[398,42119,42120],{"class":408},".p4_1(x)))\n",[398,42122,42123],{"class":400,"line":2040},[398,42124,42125],{"class":467},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[398,42127,42128,42130,42133,42135,42137,42139],{"class":400,"line":2054},[398,42129,15029],{"class":404},[398,42131,42132],{"class":408}," torch.cat((p1,p2,p3,p4),",[398,42134,32878],{"class":5493},[398,42136,454],{"class":404},[398,42138,619],{"class":457},[398,42140,415],{"class":408},[398,42142,42143],{"class":400,"line":2059},[398,42144,2676],{"emptyLinePlaceholder":328},[398,42146,42147],{"class":400,"line":2853},[398,42148,2676],{"emptyLinePlaceholder":328},[398,42150,42151],{"class":400,"line":2867},[398,42152,42153],{"class":467},"# 搭建GoogLeNet网络\n",[398,42155,42156,42158,42161,42163,42165,42167,42169],{"class":400,"line":2875},[398,42157,14971],{"class":404},[398,42159,42160],{"class":2239}," GoogLeNet",[398,42162,409],{"class":408},[398,42164,30971],{"class":2239},[398,42166,960],{"class":408},[398,42168,30976],{"class":2239},[398,42170,30979],{"class":408},[398,42172,42173],{"class":400,"line":2880},[398,42174,42175],{"class":467},"    # 必须把Inception导入到里边\n",[398,42177,42178,42180,42182],{"class":400,"line":2886},[398,42179,30994],{"class":404},[398,42181,30997],{"class":457},[398,42183,42184],{"class":408},"(self,Inception):\n",[398,42186,42187,42189,42192,42194,42196,42198],{"class":400,"line":2892},[398,42188,31010],{"class":457},[398,42190,42191],{"class":408},"(GoogLeNet,",[398,42193,31016],{"class":457},[398,42195,31019],{"class":408},[398,42197,31022],{"class":457},[398,42199,2252],{"class":408},[398,42201,42202,42204,42207,42209],{"class":400,"line":2897},[398,42203,31038],{"class":457},[398,42205,42206],{"class":408},".b1",[398,42208,454],{"class":404},[398,42210,38202],{"class":408},[398,42212,42213,42215,42217,42219,42221,42223,42225,42227,42229,42231,42233,42235,42237,42239,42241,42243,42245,42247,42249,42251,42253],{"class":400,"line":8225},[398,42214,38207],{"class":408},[398,42216,31049],{"class":5493},[398,42218,454],{"class":404},[398,42220,619],{"class":457},[398,42222,780],{"class":408},[398,42224,31058],{"class":5493},[398,42226,454],{"class":404},[398,42228,605],{"class":457},[398,42230,780],{"class":408},[398,42232,31067],{"class":5493},[398,42234,454],{"class":404},[398,42236,771],{"class":457},[398,42238,780],{"class":408},[398,42240,31122],{"class":5493},[398,42242,454],{"class":404},[398,42244,486],{"class":457},[398,42246,780],{"class":408},[398,42248,31076],{"class":5493},[398,42250,454],{"class":404},[398,42252,480],{"class":457},[398,42254,38240],{"class":408},[398,42256,42257],{"class":400,"line":8249},[398,42258,38245],{"class":408},[398,42260,42261,42263,42265,42267,42269,42271,42273,42275,42277,42279,42281,42283,42285],{"class":400,"line":8254},[398,42262,38290],{"class":408},[398,42264,31067],{"class":5493},[398,42266,454],{"class":404},[398,42268,480],{"class":457},[398,42270,780],{"class":408},[398,42272,31122],{"class":5493},[398,42274,454],{"class":404},[398,42276,486],{"class":457},[398,42278,780],{"class":408},[398,42280,31076],{"class":5493},[398,42282,454],{"class":404},[398,42284,619],{"class":457},[398,42286,415],{"class":408},[398,42288,42289],{"class":400,"line":8260},[398,42290,38319],{"class":408},[398,42292,42293,42295,42298,42300],{"class":400,"line":8287},[398,42294,31038],{"class":457},[398,42296,42297],{"class":408},".b2",[398,42299,454],{"class":404},[398,42301,38202],{"class":408},[398,42303,42304,42306,42308,42310,42312,42314,42316,42318,42320,42322,42324,42326,42328],{"class":400,"line":8292},[398,42305,38207],{"class":408},[398,42307,31049],{"class":5493},[398,42309,454],{"class":404},[398,42311,605],{"class":457},[398,42313,780],{"class":408},[398,42315,31058],{"class":5493},[398,42317,454],{"class":404},[398,42319,605],{"class":457},[398,42321,780],{"class":408},[398,42323,31067],{"class":5493},[398,42325,454],{"class":404},[398,42327,619],{"class":457},[398,42329,38240],{"class":408},[398,42331,42332],{"class":400,"line":8298},[398,42333,38245],{"class":408},[398,42335,42336,42338,42340,42342,42344,42346,42348,42350,42353,42355,42357,42359,42361,42363,42365,42367,42369],{"class":400,"line":8310},[398,42337,38207],{"class":408},[398,42339,31049],{"class":5493},[398,42341,454],{"class":404},[398,42343,605],{"class":457},[398,42345,780],{"class":408},[398,42347,31058],{"class":5493},[398,42349,454],{"class":404},[398,42351,42352],{"class":457},"192",[398,42354,780],{"class":408},[398,42356,31067],{"class":5493},[398,42358,454],{"class":404},[398,42360,480],{"class":457},[398,42362,780],{"class":408},[398,42364,31076],{"class":5493},[398,42366,454],{"class":404},[398,42368,619],{"class":457},[398,42370,38240],{"class":408},[398,42372,42373],{"class":400,"line":8322},[398,42374,38245],{"class":408},[398,42376,42377,42379,42381,42383,42385,42387,42389,42391,42393,42395,42397,42399,42401],{"class":400,"line":8334},[398,42378,38290],{"class":408},[398,42380,31067],{"class":5493},[398,42382,454],{"class":404},[398,42384,480],{"class":457},[398,42386,780],{"class":408},[398,42388,31122],{"class":5493},[398,42390,454],{"class":404},[398,42392,486],{"class":457},[398,42394,780],{"class":408},[398,42396,31076],{"class":5493},[398,42398,454],{"class":404},[398,42400,619],{"class":457},[398,42402,415],{"class":408},[398,42404,42405],{"class":400,"line":9993},[398,42406,38319],{"class":408},[398,42408,42409,42411,42414,42416],{"class":400,"line":10018},[398,42410,31038],{"class":457},[398,42412,42413],{"class":408},".b3",[398,42415,454],{"class":404},[398,42417,38202],{"class":408},[398,42419,42420,42423,42425,42427,42429,42432,42434,42436,42438,42441,42443,42445,42447,42450,42452],{"class":400,"line":10041},[398,42421,42422],{"class":408},"            Inception(",[398,42424,42352],{"class":457},[398,42426,780],{"class":408},[398,42428,605],{"class":457},[398,42430,42431],{"class":408},",(",[398,42433,611],{"class":457},[398,42435,780],{"class":408},[398,42437,32263],{"class":457},[398,42439,42440],{"class":408},"),(",[398,42442,1003],{"class":457},[398,42444,780],{"class":408},[398,42446,599],{"class":457},[398,42448,42449],{"class":408},"),",[398,42451,599],{"class":457},[398,42453,38240],{"class":408},[398,42455,42456,42458,42460,42462,42464,42466,42468,42470,42472,42474,42476,42478,42480,42482,42484],{"class":400,"line":10065},[398,42457,42422],{"class":408},[398,42459,35063],{"class":457},[398,42461,780],{"class":408},[398,42463,32263],{"class":457},[398,42465,42431],{"class":408},[398,42467,32263],{"class":457},[398,42469,780],{"class":408},[398,42471,42352],{"class":457},[398,42473,42440],{"class":408},[398,42475,599],{"class":457},[398,42477,780],{"class":408},[398,42479,611],{"class":457},[398,42481,42449],{"class":408},[398,42483,605],{"class":457},[398,42485,38240],{"class":408},[398,42487,42488,42490,42492,42494,42496,42498,42500,42502,42504,42506,42508,42510,42512],{"class":400,"line":10070},[398,42489,38290],{"class":408},[398,42491,31067],{"class":5493},[398,42493,454],{"class":404},[398,42495,480],{"class":457},[398,42497,780],{"class":408},[398,42499,31122],{"class":5493},[398,42501,454],{"class":404},[398,42503,486],{"class":457},[398,42505,780],{"class":408},[398,42507,31076],{"class":5493},[398,42509,454],{"class":404},[398,42511,619],{"class":457},[398,42513,415],{"class":408},[398,42515,42516],{"class":400,"line":10075},[398,42517,38319],{"class":408},[398,42519,42520,42522,42525,42527],{"class":400,"line":10080},[398,42521,31038],{"class":457},[398,42523,42524],{"class":408},".b4",[398,42526,454],{"class":404},[398,42528,38202],{"class":408},[398,42530,42531,42533,42536,42538,42540,42542,42544,42546,42549,42551,42553,42555,42557,42559,42561],{"class":400,"line":10089},[398,42532,42422],{"class":408},[398,42534,42535],{"class":457},"480",[398,42537,780],{"class":408},[398,42539,42352],{"class":457},[398,42541,42431],{"class":408},[398,42543,611],{"class":457},[398,42545,780],{"class":408},[398,42547,42548],{"class":457},"208",[398,42550,42440],{"class":408},[398,42552,1003],{"class":457},[398,42554,780],{"class":408},[398,42556,1009],{"class":457},[398,42558,42449],{"class":408},[398,42560,605],{"class":457},[398,42562,38240],{"class":408},[398,42564,42565,42567,42569,42571,42573,42575,42577,42579,42581,42583,42585,42587,42589,42591,42593],{"class":400,"line":10094},[398,42566,42422],{"class":408},[398,42568,38650],{"class":457},[398,42570,780],{"class":408},[398,42572,21325],{"class":457},[398,42574,42431],{"class":408},[398,42576,1020],{"class":457},[398,42578,780],{"class":408},[398,42580,31694],{"class":457},[398,42582,42440],{"class":408},[398,42584,1202],{"class":457},[398,42586,780],{"class":408},[398,42588,605],{"class":457},[398,42590,42449],{"class":408},[398,42592,605],{"class":457},[398,42594,38240],{"class":408},[398,42596,42597,42599,42601,42603,42605,42607,42609,42611,42613,42615,42617,42619,42621,42623,42625],{"class":400,"line":10100},[398,42598,42422],{"class":408},[398,42600,38650],{"class":457},[398,42602,780],{"class":408},[398,42604,32263],{"class":457},[398,42606,42431],{"class":408},[398,42608,32263],{"class":457},[398,42610,780],{"class":408},[398,42612,35063],{"class":457},[398,42614,42440],{"class":408},[398,42616,1202],{"class":457},[398,42618,780],{"class":408},[398,42620,605],{"class":457},[398,42622,42449],{"class":408},[398,42624,605],{"class":457},[398,42626,38240],{"class":408},[398,42628,42629,42631,42633,42635,42637,42639,42641,42643,42646,42648,42650,42652,42654,42656,42658],{"class":400,"line":10121},[398,42630,42422],{"class":408},[398,42632,38650],{"class":457},[398,42634,780],{"class":408},[398,42636,1020],{"class":457},[398,42638,42431],{"class":408},[398,42640,32263],{"class":457},[398,42642,780],{"class":408},[398,42644,42645],{"class":457},"288",[398,42647,42440],{"class":408},[398,42649,599],{"class":457},[398,42651,780],{"class":408},[398,42653,605],{"class":457},[398,42655,42449],{"class":408},[398,42657,605],{"class":457},[398,42659,38240],{"class":408},[398,42661,42662,42664,42667,42669,42671,42673,42675,42677,42680,42682,42684,42686,42688,42690,42692],{"class":400,"line":10127},[398,42663,42422],{"class":408},[398,42665,42666],{"class":457},"528",[398,42668,780],{"class":408},[398,42670,35063],{"class":457},[398,42672,42431],{"class":408},[398,42674,21325],{"class":457},[398,42676,780],{"class":408},[398,42678,42679],{"class":457},"320",[398,42681,42440],{"class":408},[398,42683,599],{"class":457},[398,42685,780],{"class":408},[398,42687,32263],{"class":457},[398,42689,42449],{"class":408},[398,42691,32263],{"class":457},[398,42693,38240],{"class":408},[398,42695,42696,42698,42700,42702,42704,42706,42708,42710,42712,42714,42716,42718,42720],{"class":400,"line":10141},[398,42697,38290],{"class":408},[398,42699,31067],{"class":5493},[398,42701,454],{"class":404},[398,42703,480],{"class":457},[398,42705,780],{"class":408},[398,42707,31122],{"class":5493},[398,42709,454],{"class":404},[398,42711,486],{"class":457},[398,42713,780],{"class":408},[398,42715,31076],{"class":5493},[398,42717,454],{"class":404},[398,42719,619],{"class":457},[398,42721,415],{"class":408},[398,42723,42724],{"class":400,"line":10147},[398,42725,38319],{"class":408},[398,42727,42728,42730,42733,42735],{"class":400,"line":10174},[398,42729,31038],{"class":457},[398,42731,42732],{"class":408},".b5",[398,42734,454],{"class":404},[398,42736,38202],{"class":408},[398,42738,42739,42741,42744,42746,42748,42750,42752,42754,42756,42758,42760,42762,42764,42766,42768],{"class":400,"line":10183},[398,42740,42422],{"class":408},[398,42742,42743],{"class":457},"832",[398,42745,780],{"class":408},[398,42747,35063],{"class":457},[398,42749,42431],{"class":408},[398,42751,21325],{"class":457},[398,42753,780],{"class":408},[398,42755,42679],{"class":457},[398,42757,42440],{"class":408},[398,42759,599],{"class":457},[398,42761,780],{"class":408},[398,42763,32263],{"class":457},[398,42765,42449],{"class":408},[398,42767,32263],{"class":457},[398,42769,38240],{"class":408},[398,42771,42772,42774,42776,42778,42780,42782,42784,42786,42788,42790,42792,42794,42796,42798,42800],{"class":400,"line":10189},[398,42773,42422],{"class":408},[398,42775,42743],{"class":457},[398,42777,780],{"class":408},[398,42779,35133],{"class":457},[398,42781,42431],{"class":408},[398,42783,42352],{"class":457},[398,42785,780],{"class":408},[398,42787,35133],{"class":457},[398,42789,42440],{"class":408},[398,42791,1009],{"class":457},[398,42793,780],{"class":408},[398,42795,32263],{"class":457},[398,42797,42449],{"class":408},[398,42799,32263],{"class":457},[398,42801,38240],{"class":408},[398,42803,42804,42807,42809,42811,42813],{"class":400,"line":10197},[398,42805,42806],{"class":408},"            nn.AdaptiveAvgPool2d((",[398,42808,619],{"class":457},[398,42810,780],{"class":408},[398,42812,619],{"class":457},[398,42814,42815],{"class":408},")),\n",[398,42817,42818],{"class":400,"line":10202},[398,42819,38983],{"class":408},[398,42821,42822,42824,42827,42829,42831],{"class":400,"line":16881},[398,42823,38988],{"class":408},[398,42825,42826],{"class":457},"1024",[398,42828,780],{"class":408},[398,42830,848],{"class":457},[398,42832,415],{"class":408},[398,42834,42835],{"class":400,"line":16887},[398,42836,38319],{"class":408},[398,42838,42839],{"class":400,"line":16910},[398,42840,42841],{"class":467},"        # 对模型参数初始化\n",[398,42843,42844,42846,42848,42850,42852],{"class":400,"line":16916},[398,42845,3679],{"class":404},[398,42847,39061],{"class":408},[398,42849,26236],{"class":404},[398,42851,39066],{"class":457},[398,42853,39069],{"class":408},[398,42855,42856,42858,42860],{"class":400,"line":16939},[398,42857,4918],{"class":404},[398,42859,39081],{"class":457},[398,42861,39084],{"class":408},[398,42863,42864,42866,42869,42871,42874,42876,42878,42880,42882],{"class":400,"line":16953},[398,42865,39094],{"class":408},[398,42867,42868],{"class":5493},"mode",[398,42870,454],{"class":404},[398,42872,42873],{"class":513},"'fan_out'",[398,42875,780],{"class":408},[398,42877,39097],{"class":5493},[398,42879,454],{"class":404},[398,42881,39102],{"class":513},[398,42883,415],{"class":408},[398,42885,42886],{"class":400,"line":16973},[398,42887,42888],{"class":467},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[398,42890,42891],{"class":400,"line":16979},[398,42892,42893],{"class":467},"                # ② mode = 'fan_out'决定使用的fan值：\n",[398,42895,42896],{"class":400,"line":16990},[398,42897,42898],{"class":467},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[398,42900,42901],{"class":400,"line":17013},[398,42902,42903],{"class":467},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[398,42905,42906],{"class":400,"line":17035},[398,42907,42908],{"class":467},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[398,42910,42911],{"class":400,"line":17040},[398,42912,42913],{"class":467},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[398,42915,42916,42918,42920,42922,42924,42926],{"class":400,"line":17046},[398,42917,39114],{"class":404},[398,42919,39117],{"class":408},[398,42921,39120],{"class":404},[398,42923,39123],{"class":404},[398,42925,39126],{"class":457},[398,42927,4015],{"class":408},[398,42929,42930,42932,42934],{"class":400,"line":17060},[398,42931,39138],{"class":408},[398,42933,593],{"class":457},[398,42935,415],{"class":408},[398,42937,42938,42941,42943],{"class":400,"line":17073},[398,42939,42940],{"class":404},"                elif",[398,42942,39081],{"class":457},[398,42944,39157],{"class":408},[398,42946,42947,42950,42952,42954,42956],{"class":400,"line":17078},[398,42948,42949],{"class":408},"                    nn.init.normal_(m.weight,",[398,42951,593],{"class":457},[398,42953,780],{"class":408},[398,42955,39179],{"class":457},[398,42957,415],{"class":408},[398,42959,42960,42963,42965,42967,42969,42971],{"class":400,"line":17092},[398,42961,42962],{"class":404},"                    if",[398,42964,39117],{"class":408},[398,42966,39120],{"class":404},[398,42968,39123],{"class":404},[398,42970,39126],{"class":457},[398,42972,4015],{"class":408},[398,42974,42975,42978,42980],{"class":400,"line":17097},[398,42976,42977],{"class":408},"                        nn.init.constant_(m.bias,",[398,42979,593],{"class":457},[398,42981,415],{"class":408},[398,42983,42984],{"class":400,"line":17103},[398,42985,35358],{"class":467},[398,42987,42988,42990,42992],{"class":400,"line":17108},[398,42989,30994],{"class":404},[398,42991,31286],{"class":2239},[398,42993,31289],{"class":408},[398,42995,42996,42998,43000,43002],{"class":400,"line":17122},[398,42997,31294],{"class":408},[398,42999,454],{"class":404},[398,43001,31016],{"class":457},[398,43003,43004],{"class":408},".b1(x)\n",[398,43006,43007,43009,43011,43013],{"class":400,"line":17127},[398,43008,31294],{"class":408},[398,43010,454],{"class":404},[398,43012,31016],{"class":457},[398,43014,43015],{"class":408},".b2(x)\n",[398,43017,43018,43020,43022,43024],{"class":400,"line":17132},[398,43019,31294],{"class":408},[398,43021,454],{"class":404},[398,43023,31016],{"class":457},[398,43025,43026],{"class":408},".b3(x)\n",[398,43028,43029,43031,43033,43035],{"class":400,"line":17146},[398,43030,31294],{"class":408},[398,43032,454],{"class":404},[398,43034,31016],{"class":457},[398,43036,43037],{"class":408},".b4(x)\n",[398,43039,43040,43042,43044,43046],{"class":400,"line":17158},[398,43041,31294],{"class":408},[398,43043,454],{"class":404},[398,43045,31016],{"class":457},[398,43047,43048],{"class":408},".b5(x)\n",[398,43050,43051,43053],{"class":400,"line":17163},[398,43052,15029],{"class":404},[398,43054,31402],{"class":408},[398,43056,43057],{"class":400,"line":17176},[398,43058,2676],{"emptyLinePlaceholder":328},[398,43060,43061],{"class":400,"line":17181},[398,43062,43063],{"class":467},"# 模型展示\n",[398,43065,43066,43068,43070,43072,43074],{"class":400,"line":17186},[398,43067,1807],{"class":404},[398,43069,31413],{"class":457},[398,43071,3225],{"class":404},[398,43073,31418],{"class":513},[398,43075,4015],{"class":408},[398,43077,43078,43080,43082,43084,43086,43088,43090,43092,43094],{"class":400,"line":17191},[398,43079,31430],{"class":408},[398,43081,454],{"class":404},[398,43083,30644],{"class":408},[398,43085,31437],{"class":513},[398,43087,1980],{"class":404},[398,43089,31442],{"class":408},[398,43091,1977],{"class":404},[398,43093,30669],{"class":513},[398,43095,415],{"class":408},[398,43097,43098,43100,43102],{"class":400,"line":17204},[398,43099,31482],{"class":408},[398,43101,454],{"class":404},[398,43103,43104],{"class":408},"GoogLeNet(Inception).to(device)\n",[398,43106,43107,43109,43111,43113,43115,43117,43119,43121],{"class":400,"line":17209},[398,43108,31492],{"class":457},[398,43110,31495],{"class":408},[398,43112,619],{"class":457},[398,43114,780],{"class":408},[398,43116,31694],{"class":457},[398,43118,780],{"class":408},[398,43120,31694],{"class":457},[398,43122,31508],{"class":408},[38,43124,43125],{"start":317},[41,43126,39376],{},[389,43128,43130],{"className":30571,"code":43129,"language":30573,"meta":316,"style":316},"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",[395,43131,43132,43138,43144,43154,43160,43170,43180,43190,43200,43210,43214,43225,43235,43239,43243,43247,43255,43267,43277,43293,43303,43335,43349,43359,43369,43373,43383,43397,43407,43417,43427,43433,43437,43441,43445,43449,43453,43461,43481,43485,43489,43493,43497,43501,43517,43521,43525,43533,43537,43541,43549,43553,43557,43561,43569,43573,43577,43581,43585,43593,43597,43605,43609,43617,43621,43629,43633,43641,43645,43649,43657,43661,43665,43669,43681,43705,43719,43723,43727,43731,43739,43743,43751,43755,43763,43767,43775,43779,43787,43791,43799,43803,43815,43819,43827,43831,43839,43843,43847,43851,43855,43863,43867,43883,43887,43895,43899,43903,43907,43911,43915,43919,43923,43939,43943,43955,43959,43971,43975,43987,43991,43999,44003,44011,44015,44019,44023,44029,44033,44041,44045,44061,44065,44073,44077,44093,44105,44109,44121,44125,44129,44137,44141,44145,44153,44157,44165,44169,44177,44181,44185,44227,44269,44273,44277,44293,44297,44313,44317,44321,44329,44333,44337,44349,44387,44391,44395,44403,44407,44421,44431,44437,44443,44449,44455,44459,44463,44469,44473,44477,44485,44489,44507,44511,44515,44519,44535,44539,44543,44547,44551,44555,44575,44595,44599,44603,44607,44615,44623,44627,44643,44663,44683,44687,44691,44699,44707,44711,44715,44719,44731,44735,44745,44753,44770],{"__ignoreMap":316},[398,43133,43134,43136],{"class":400,"line":401},[398,43135,30585],{"class":404},[398,43137,32015],{"class":408},[398,43139,43140,43142],{"class":400,"line":317},[398,43141,30585],{"class":404},[398,43143,32022],{"class":408},[398,43145,43146,43148,43150,43152],{"class":400,"line":320},[398,43147,30585],{"class":404},[398,43149,32033],{"class":408},[398,43151,31576],{"class":404},[398,43153,32038],{"class":408},[398,43155,43156,43158],{"class":400,"line":1470},[398,43157,30585],{"class":404},[398,43159,30588],{"class":408},[398,43161,43162,43164,43166,43168],{"class":400,"line":1476},[398,43163,30930],{"class":404},[398,43165,31608],{"class":408},[398,43167,30585],{"class":404},[398,43169,32055],{"class":408},[398,43171,43172,43174,43176,43178],{"class":400,"line":1490},[398,43173,30930],{"class":404},[398,43175,31561],{"class":408},[398,43177,30585],{"class":404},[398,43179,31566],{"class":408},[398,43181,43182,43184,43186,43188],{"class":400,"line":1496},[398,43183,30930],{"class":404},[398,43185,31591],{"class":408},[398,43187,30585],{"class":404},[398,43189,31596],{"class":408},[398,43191,43192,43194,43196,43198],{"class":400,"line":1587},[398,43193,30585],{"class":404},[398,43195,31608],{"class":408},[398,43197,31576],{"class":404},[398,43199,31613],{"class":408},[398,43201,43202,43204,43206,43208],{"class":400,"line":1593},[398,43203,30585],{"class":404},[398,43205,31625],{"class":408},[398,43207,31576],{"class":404},[398,43209,31630],{"class":408},[398,43211,43212],{"class":400,"line":1605},[398,43213,32100],{"class":467},[398,43215,43216,43218,43220,43222],{"class":400,"line":1888},[398,43217,30930],{"class":404},[398,43219,32107],{"class":408},[398,43221,30585],{"class":404},[398,43223,43224],{"class":408}," GoogLeNet, Inception\n",[398,43226,43227,43229,43231,43233],{"class":400,"line":1893},[398,43228,30930],{"class":404},[398,43230,30933],{"class":408},[398,43232,30585],{"class":404},[398,43234,30938],{"class":408},[398,43236,43237],{"class":400,"line":1899},[398,43238,2676],{"emptyLinePlaceholder":328},[398,43240,43241],{"class":400,"line":1904},[398,43242,2676],{"emptyLinePlaceholder":328},[398,43244,43245],{"class":400,"line":1918},[398,43246,32135],{"class":467},[398,43248,43249,43251,43253],{"class":400,"line":1923},[398,43250,32140],{"class":404},[398,43252,32143],{"class":2239},[398,43254,32146],{"class":408},[398,43256,43257,43259,43261,43263,43265],{"class":400,"line":1929},[398,43258,32151],{"class":408},[398,43260,454],{"class":404},[398,43262,31648],{"class":408},[398,43264,31656],{"class":513},[398,43266,31659],{"class":408},[398,43268,43269,43271,43273,43275],{"class":400,"line":1950},[398,43270,32164],{"class":5493},[398,43272,454],{"class":404},[398,43274,31669],{"class":457},[398,43276,31659],{"class":408},[398,43278,43279,43281,43283,43285,43287,43289,43291],{"class":400,"line":1955},[398,43280,32175],{"class":5493},[398,43282,454],{"class":404},[398,43284,31686],{"class":408},[398,43286,31689],{"class":5493},[398,43288,454],{"class":404},[398,43290,35642],{"class":457},[398,43292,31697],{"class":408},[398,43294,43295,43297,43299,43301],{"class":400,"line":1969},[398,43296,32192],{"class":5493},[398,43298,454],{"class":404},[398,43300,31669],{"class":457},[398,43302,415],{"class":408},[398,43304,43305,43307,43309,43311,43313,43315,43317,43319,43321,43323,43325,43327,43329,43331,43333],{"class":400,"line":1974},[398,43306,32203],{"class":408},[398,43308,454],{"class":404},[398,43310,32208],{"class":408},[398,43312,32211],{"class":457},[398,43314,409],{"class":408},[398,43316,32216],{"class":457},[398,43318,857],{"class":404},[398,43320,7635],{"class":457},[398,43322,32223],{"class":408},[398,43324,32211],{"class":457},[398,43326,409],{"class":408},[398,43328,32230],{"class":457},[398,43330,857],{"class":404},[398,43332,7635],{"class":457},[398,43334,32237],{"class":408},[398,43336,43337,43339,43341,43343,43345,43347],{"class":400,"line":2003},[398,43338,32242],{"class":408},[398,43340,454],{"class":404},[398,43342,32247],{"class":408},[398,43344,31730],{"class":5493},[398,43346,454],{"class":404},[398,43348,31735],{"class":408},[398,43350,43351,43353,43355,43357],{"class":400,"line":2008},[398,43352,32258],{"class":5493},[398,43354,454],{"class":404},[398,43356,599],{"class":457},[398,43358,31659],{"class":408},[398,43360,43361,43363,43365,43367],{"class":400,"line":2025},[398,43362,32270],{"class":5493},[398,43364,454],{"class":404},[398,43366,31669],{"class":457},[398,43368,31659],{"class":408},[398,43370,43371],{"class":400,"line":2030},[398,43372,32281],{"class":467},[398,43374,43375,43377,43379,43381],{"class":400,"line":2035},[398,43376,32286],{"class":5493},[398,43378,454],{"class":404},[398,43380,797],{"class":457},[398,43382,415],{"class":408},[398,43384,43385,43387,43389,43391,43393,43395],{"class":400,"line":2040},[398,43386,32297],{"class":408},[398,43388,454],{"class":404},[398,43390,31727],{"class":408},[398,43392,31730],{"class":5493},[398,43394,454],{"class":404},[398,43396,32308],{"class":408},[398,43398,43399,43401,43403,43405],{"class":400,"line":2054},[398,43400,32313],{"class":5493},[398,43402,454],{"class":404},[398,43404,599],{"class":457},[398,43406,31659],{"class":408},[398,43408,43409,43411,43413,43415],{"class":400,"line":2059},[398,43410,32324],{"class":5493},[398,43412,454],{"class":404},[398,43414,31669],{"class":457},[398,43416,31659],{"class":408},[398,43418,43419,43421,43423,43425],{"class":400,"line":2853},[398,43420,32335],{"class":5493},[398,43422,454],{"class":404},[398,43424,797],{"class":457},[398,43426,415],{"class":408},[398,43428,43429,43431],{"class":400,"line":2867},[398,43430,4366],{"class":404},[398,43432,32348],{"class":408},[398,43434,43435],{"class":400,"line":2875},[398,43436,2676],{"emptyLinePlaceholder":328},[398,43438,43439],{"class":400,"line":2880},[398,43440,32357],{"class":467},[398,43442,43443],{"class":400,"line":2886},[398,43444,32362],{"class":467},[398,43446,43447],{"class":400,"line":2892},[398,43448,2676],{"emptyLinePlaceholder":328},[398,43450,43451],{"class":400,"line":2897},[398,43452,32371],{"class":467},[398,43454,43455,43457,43459],{"class":400,"line":8225},[398,43456,32140],{"class":404},[398,43458,32378],{"class":2239},[398,43460,32381],{"class":408},[398,43462,43463,43465,43467,43469,43471,43473,43475,43477,43479],{"class":400,"line":8249},[398,43464,31430],{"class":408},[398,43466,454],{"class":404},[398,43468,30644],{"class":408},[398,43470,31437],{"class":513},[398,43472,1980],{"class":404},[398,43474,31442],{"class":408},[398,43476,1977],{"class":404},[398,43478,32400],{"class":513},[398,43480,415],{"class":408},[398,43482,43483],{"class":400,"line":8254},[398,43484,2676],{"emptyLinePlaceholder":328},[398,43486,43487],{"class":400,"line":8260},[398,43488,2676],{"emptyLinePlaceholder":328},[398,43490,43491],{"class":400,"line":8287},[398,43492,32415],{"class":467},[398,43494,43495],{"class":400,"line":8292},[398,43496,32420],{"class":467},[398,43498,43499],{"class":400,"line":8298},[398,43500,32425],{"class":467},[398,43502,43503,43505,43507,43509,43511,43513,43515],{"class":400,"line":8310},[398,43504,32430],{"class":408},[398,43506,454],{"class":404},[398,43508,32435],{"class":408},[398,43510,32438],{"class":5493},[398,43512,454],{"class":404},[398,43514,32443],{"class":457},[398,43516,415],{"class":408},[398,43518,43519],{"class":400,"line":8322},[398,43520,2676],{"emptyLinePlaceholder":328},[398,43522,43523],{"class":400,"line":8334},[398,43524,32454],{"class":467},[398,43526,43527,43529,43531],{"class":400,"line":9993},[398,43528,32459],{"class":408},[398,43530,454],{"class":404},[398,43532,32464],{"class":408},[398,43534,43535],{"class":400,"line":10018},[398,43536,2676],{"emptyLinePlaceholder":328},[398,43538,43539],{"class":400,"line":10041},[398,43540,32473],{"class":467},[398,43542,43543,43545,43547],{"class":400,"line":10065},[398,43544,31482],{"class":408},[398,43546,454],{"class":404},[398,43548,32482],{"class":408},[398,43550,43551],{"class":400,"line":10070},[398,43552,32487],{"class":467},[398,43554,43555],{"class":400,"line":10075},[398,43556,32492],{"class":467},[398,43558,43559],{"class":400,"line":10080},[398,43560,32497],{"class":467},[398,43562,43563,43565,43567],{"class":400,"line":10089},[398,43564,32502],{"class":408},[398,43566,454],{"class":404},[398,43568,32507],{"class":408},[398,43570,43571],{"class":400,"line":10094},[398,43572,2676],{"emptyLinePlaceholder":328},[398,43574,43575],{"class":400,"line":10100},[398,43576,2676],{"emptyLinePlaceholder":328},[398,43578,43579],{"class":400,"line":10121},[398,43580,32520],{"class":467},[398,43582,43583],{"class":400,"line":10127},[398,43584,32525],{"class":467},[398,43586,43587,43589,43591],{"class":400,"line":10141},[398,43588,32530],{"class":408},[398,43590,454],{"class":404},[398,43592,32535],{"class":457},[398,43594,43595],{"class":400,"line":10147},[398,43596,32540],{"class":467},[398,43598,43599,43601,43603],{"class":400,"line":10174},[398,43600,32545],{"class":408},[398,43602,454],{"class":404},[398,43604,32550],{"class":408},[398,43606,43607],{"class":400,"line":10183},[398,43608,32555],{"class":467},[398,43610,43611,43613,43615],{"class":400,"line":10189},[398,43612,32560],{"class":408},[398,43614,454],{"class":404},[398,43616,32550],{"class":408},[398,43618,43619],{"class":400,"line":10197},[398,43620,32569],{"class":467},[398,43622,43623,43625,43627],{"class":400,"line":10202},[398,43624,32574],{"class":408},[398,43626,454],{"class":404},[398,43628,32550],{"class":408},[398,43630,43631],{"class":400,"line":16881},[398,43632,32583],{"class":467},[398,43634,43635,43637,43639],{"class":400,"line":16887},[398,43636,32588],{"class":408},[398,43638,454],{"class":404},[398,43640,32550],{"class":408},[398,43642,43643],{"class":400,"line":16910},[398,43644,2676],{"emptyLinePlaceholder":328},[398,43646,43647],{"class":400,"line":16916},[398,43648,32601],{"class":467},[398,43650,43651,43653,43655],{"class":400,"line":16939},[398,43652,32606],{"class":408},[398,43654,454],{"class":404},[398,43656,32611],{"class":408},[398,43658,43659],{"class":400,"line":16953},[398,43660,2676],{"emptyLinePlaceholder":328},[398,43662,43663],{"class":400,"line":16973},[398,43664,2676],{"emptyLinePlaceholder":328},[398,43666,43667],{"class":400,"line":16979},[398,43668,32624],{"class":467},[398,43670,43671,43673,43675,43677,43679],{"class":400,"line":16990},[398,43672,3477],{"class":404},[398,43674,32631],{"class":408},[398,43676,26236],{"class":404},[398,43678,32636],{"class":457},[398,43680,32639],{"class":408},[398,43682,43683,43685,43687,43689,43691,43693,43695,43697,43699,43701,43703],{"class":400,"line":17013},[398,43684,32644],{"class":457},[398,43686,409],{"class":408},[398,43688,32649],{"class":513},[398,43690,32652],{"class":457},[398,43692,986],{"class":513},[398,43694,32652],{"class":457},[398,43696,653],{"class":513},[398,43698,32661],{"class":408},[398,43700,934],{"class":404},[398,43702,619],{"class":457},[398,43704,30690],{"class":408},[398,43706,43707,43709,43711,43713,43715,43717],{"class":400,"line":17035},[398,43708,32644],{"class":457},[398,43710,409],{"class":408},[398,43712,32676],{"class":513},[398,43714,857],{"class":404},[398,43716,848],{"class":457},[398,43718,415],{"class":408},[398,43720,43721],{"class":400,"line":17040},[398,43722,2676],{"emptyLinePlaceholder":328},[398,43724,43725],{"class":400,"line":17046},[398,43726,32691],{"class":467},[398,43728,43729],{"class":400,"line":17060},[398,43730,32696],{"class":467},[398,43732,43733,43735,43737],{"class":400,"line":17073},[398,43734,32701],{"class":408},[398,43736,454],{"class":404},[398,43738,32535],{"class":457},[398,43740,43741],{"class":400,"line":17078},[398,43742,32710],{"class":467},[398,43744,43745,43747,43749],{"class":400,"line":17092},[398,43746,32715],{"class":408},[398,43748,454],{"class":404},[398,43750,3361],{"class":457},[398,43752,43753],{"class":400,"line":17097},[398,43754,32724],{"class":467},[398,43756,43757,43759,43761],{"class":400,"line":17103},[398,43758,32729],{"class":408},[398,43760,454],{"class":404},[398,43762,32535],{"class":457},[398,43764,43765],{"class":400,"line":17108},[398,43766,32738],{"class":467},[398,43768,43769,43771,43773],{"class":400,"line":17122},[398,43770,32743],{"class":408},[398,43772,454],{"class":404},[398,43774,3361],{"class":457},[398,43776,43777],{"class":400,"line":17127},[398,43778,32752],{"class":467},[398,43780,43781,43783,43785],{"class":400,"line":17132},[398,43782,32757],{"class":408},[398,43784,454],{"class":404},[398,43786,3361],{"class":457},[398,43788,43789],{"class":400,"line":17146},[398,43790,32766],{"class":467},[398,43792,43793,43795,43797],{"class":400,"line":17158},[398,43794,32771],{"class":408},[398,43796,454],{"class":404},[398,43798,3361],{"class":457},[398,43800,43801],{"class":400,"line":17163},[398,43802,32780],{"class":467},[398,43804,43805,43807,43809,43811,43813],{"class":400,"line":17176},[398,43806,3679],{"class":404},[398,43808,31794],{"class":408},[398,43810,26236],{"class":404},[398,43812,31799],{"class":457},[398,43814,32793],{"class":408},[398,43816,43817],{"class":400,"line":17181},[398,43818,32798],{"class":467},[398,43820,43821,43823,43825],{"class":400,"line":17186},[398,43822,32803],{"class":408},[398,43824,454],{"class":404},[398,43826,32808],{"class":408},[398,43828,43829],{"class":400,"line":17191},[398,43830,32813],{"class":467},[398,43832,43833,43835,43837],{"class":400,"line":17204},[398,43834,32818],{"class":408},[398,43836,454],{"class":404},[398,43838,32823],{"class":408},[398,43840,43841],{"class":400,"line":17209},[398,43842,32829],{"class":467},[398,43844,43845],{"class":400,"line":32826},[398,43846,32835],{"class":408},[398,43848,43849],{"class":400,"line":32832},[398,43850,32841],{"class":467},[398,43852,43853],{"class":400,"line":32838},[398,43854,32847],{"class":467},[398,43856,43857,43859,43861],{"class":400,"line":32844},[398,43858,32853],{"class":408},[398,43860,454],{"class":404},[398,43862,32858],{"class":408},[398,43864,43865],{"class":400,"line":32850},[398,43866,32864],{"class":467},[398,43868,43869,43871,43873,43875,43877,43879,43881],{"class":400,"line":32861},[398,43870,32870],{"class":408},[398,43872,454],{"class":404},[398,43874,32875],{"class":408},[398,43876,32878],{"class":5493},[398,43878,454],{"class":404},[398,43880,619],{"class":457},[398,43882,415],{"class":408},[398,43884,43885],{"class":400,"line":32867},[398,43886,32890],{"class":467},[398,43888,43889,43891,43893],{"class":400,"line":32887},[398,43890,32896],{"class":408},[398,43892,454],{"class":404},[398,43894,32901],{"class":408},[398,43896,43897],{"class":400,"line":32893},[398,43898,32907],{"class":467},[398,43900,43901],{"class":400,"line":32904},[398,43902,32913],{"class":408},[398,43904,43905],{"class":400,"line":32910},[398,43906,32919],{"class":467},[398,43908,43909],{"class":400,"line":32916},[398,43910,32925],{"class":408},[398,43912,43913],{"class":400,"line":32922},[398,43914,32931],{"class":467},[398,43916,43917],{"class":400,"line":32928},[398,43918,32937],{"class":408},[398,43920,43921],{"class":400,"line":32934},[398,43922,32943],{"class":467},[398,43924,43925,43927,43929,43931,43933,43935,43937],{"class":400,"line":32940},[398,43926,32949],{"class":408},[398,43928,9754],{"class":404},[398,43930,32954],{"class":408},[398,43932,857],{"class":404},[398,43934,32959],{"class":408},[398,43936,593],{"class":457},[398,43938,415],{"class":408},[398,43940,43941],{"class":400,"line":32946},[398,43942,32969],{"class":467},[398,43944,43945,43947,43949,43951,43953],{"class":400,"line":32966},[398,43946,32975],{"class":408},[398,43948,9754],{"class":404},[398,43950,32980],{"class":408},[398,43952,3225],{"class":404},[398,43954,32985],{"class":408},[398,43956,43957],{"class":400,"line":32972},[398,43958,32991],{"class":467},[398,43960,43961,43963,43965,43967,43969],{"class":400,"line":32988},[398,43962,32997],{"class":408},[398,43964,9754],{"class":404},[398,43966,32959],{"class":408},[398,43968,593],{"class":457},[398,43970,415],{"class":408},[398,43972,43973],{"class":400,"line":32994},[398,43974,33011],{"class":467},[398,43976,43977,43979,43981,43983,43985],{"class":400,"line":33008},[398,43978,3679],{"class":404},[398,43980,33019],{"class":408},[398,43982,26236],{"class":404},[398,43984,31799],{"class":457},[398,43986,33026],{"class":408},[398,43988,43989],{"class":400,"line":33014},[398,43990,33032],{"class":467},[398,43992,43993,43995,43997],{"class":400,"line":33029},[398,43994,32803],{"class":408},[398,43996,454],{"class":404},[398,43998,32808],{"class":408},[398,44000,44001],{"class":400,"line":33035},[398,44002,33047],{"class":467},[398,44004,44005,44007,44009],{"class":400,"line":33044},[398,44006,32818],{"class":408},[398,44008,454],{"class":404},[398,44010,32823],{"class":408},[398,44012,44013],{"class":400,"line":33050},[398,44014,33062],{"class":467},[398,44016,44017],{"class":400,"line":33059},[398,44018,33068],{"class":408},[398,44020,44021],{"class":400,"line":33065},[398,44022,36549],{"class":467},[398,44024,44025,44027],{"class":400,"line":33071},[398,44026,33074],{"class":404},[398,44028,33077],{"class":408},[398,44030,44031],{"class":400,"line":33080},[398,44032,33083],{"class":467},[398,44034,44035,44037,44039],{"class":400,"line":33086},[398,44036,36564],{"class":408},[398,44038,454],{"class":404},[398,44040,32858],{"class":408},[398,44042,44043],{"class":400,"line":33097},[398,44044,33100],{"class":467},[398,44046,44047,44049,44051,44053,44055,44057,44059],{"class":400,"line":33103},[398,44048,36577],{"class":408},[398,44050,454],{"class":404},[398,44052,32875],{"class":408},[398,44054,32878],{"class":5493},[398,44056,454],{"class":404},[398,44058,619],{"class":457},[398,44060,415],{"class":408},[398,44062,44063],{"class":400,"line":33122},[398,44064,33125],{"class":467},[398,44066,44067,44069,44071],{"class":400,"line":33128},[398,44068,36598],{"class":408},[398,44070,454],{"class":404},[398,44072,32901],{"class":408},[398,44074,44075],{"class":400,"line":33139},[398,44076,33142],{"class":467},[398,44078,44079,44081,44083,44085,44087,44089,44091],{"class":400,"line":33145},[398,44080,36611],{"class":408},[398,44082,9754],{"class":404},[398,44084,36616],{"class":408},[398,44086,857],{"class":404},[398,44088,32959],{"class":408},[398,44090,593],{"class":457},[398,44092,415],{"class":408},[398,44094,44095,44097,44099,44101,44103],{"class":400,"line":33165},[398,44096,36629],{"class":408},[398,44098,9754],{"class":404},[398,44100,32980],{"class":408},[398,44102,3225],{"class":404},[398,44104,32985],{"class":408},[398,44106,44107],{"class":400,"line":33181},[398,44108,36642],{"class":467},[398,44110,44111,44113,44115,44117,44119],{"class":400,"line":33187},[398,44112,36647],{"class":408},[398,44114,9754],{"class":404},[398,44116,32959],{"class":408},[398,44118,593],{"class":457},[398,44120,415],{"class":408},[398,44122,44123],{"class":400,"line":33201},[398,44124,33204],{"class":467},[398,44126,44127],{"class":400,"line":33207},[398,44128,33210],{"class":467},[398,44130,44131,44133,44135],{"class":400,"line":33213},[398,44132,33216],{"class":408},[398,44134,986],{"class":404},[398,44136,33221],{"class":408},[398,44138,44139],{"class":400,"line":33224},[398,44140,33227],{"class":467},[398,44142,44143],{"class":400,"line":33230},[398,44144,33233],{"class":467},[398,44146,44147,44149,44151],{"class":400,"line":33236},[398,44148,33239],{"class":408},[398,44150,986],{"class":404},[398,44152,33221],{"class":408},[398,44154,44155],{"class":400,"line":33246},[398,44156,33249],{"class":467},[398,44158,44159,44161,44163],{"class":400,"line":33252},[398,44160,33255],{"class":408},[398,44162,986],{"class":404},[398,44164,33260],{"class":408},[398,44166,44167],{"class":400,"line":33263},[398,44168,33266],{"class":467},[398,44170,44171,44173,44175],{"class":400,"line":33269},[398,44172,33272],{"class":408},[398,44174,986],{"class":404},[398,44176,33260],{"class":408},[398,44178,44179],{"class":400,"line":33279},[398,44180,2676],{"emptyLinePlaceholder":328},[398,44182,44183],{"class":400,"line":33284},[398,44184,33287],{"class":467},[398,44186,44187,44189,44191,44193,44195,44197,44199,44201,44203,44205,44207,44209,44211,44213,44215,44217,44219,44221,44223,44225],{"class":400,"line":33290},[398,44188,32644],{"class":457},[398,44190,409],{"class":408},[398,44192,3868],{"class":513},[398,44194,32652],{"class":457},[398,44196,33301],{"class":513},[398,44198,1298],{"class":457},[398,44200,33306],{"class":404},[398,44202,1348],{"class":457},[398,44204,33311],{"class":513},[398,44206,1298],{"class":457},[398,44208,33306],{"class":404},[398,44210,1348],{"class":457},[398,44212,3868],{"class":513},[398,44214,33322],{"class":408},[398,44216,934],{"class":404},[398,44218,619],{"class":457},[398,44220,33329],{"class":408},[398,44222,934],{"class":404},[398,44224,619],{"class":457},[398,44226,33336],{"class":408},[398,44228,44229,44231,44233,44235,44237,44239,44241,44243,44245,44247,44249,44251,44253,44255,44257,44259,44261,44263,44265,44267],{"class":400,"line":33339},[398,44230,32644],{"class":457},[398,44232,409],{"class":408},[398,44234,3868],{"class":513},[398,44236,32652],{"class":457},[398,44238,33350],{"class":513},[398,44240,1298],{"class":457},[398,44242,33306],{"class":404},[398,44244,1348],{"class":457},[398,44246,33359],{"class":513},[398,44248,1298],{"class":457},[398,44250,33306],{"class":404},[398,44252,1348],{"class":457},[398,44254,3868],{"class":513},[398,44256,33370],{"class":408},[398,44258,934],{"class":404},[398,44260,619],{"class":457},[398,44262,33377],{"class":408},[398,44264,934],{"class":404},[398,44266,619],{"class":457},[398,44268,33336],{"class":408},[398,44270,44271],{"class":400,"line":33386},[398,44272,2676],{"emptyLinePlaceholder":328},[398,44274,44275],{"class":400,"line":33391},[398,44276,33394],{"class":467},[398,44278,44279,44281,44283,44285,44287,44289,44291],{"class":400,"line":33397},[398,44280,2773],{"class":404},[398,44282,33402],{"class":408},[398,44284,934],{"class":404},[398,44286,619],{"class":457},[398,44288,1342],{"class":408},[398,44290,1362],{"class":404},[398,44292,33413],{"class":408},[398,44294,44295],{"class":400,"line":33416},[398,44296,33419],{"class":467},[398,44298,44299,44301,44303,44305,44307,44309,44311],{"class":400,"line":33422},[398,44300,33425],{"class":408},[398,44302,448],{"class":457},[398,44304,454],{"class":404},[398,44306,33432],{"class":408},[398,44308,934],{"class":404},[398,44310,619],{"class":457},[398,44312,33439],{"class":408},[398,44314,44315],{"class":400,"line":33442},[398,44316,33445],{"class":467},[398,44318,44319],{"class":400,"line":33448},[398,44320,33451],{"class":467},[398,44322,44323,44325,44327],{"class":400,"line":33454},[398,44324,33457],{"class":408},[398,44326,454],{"class":404},[398,44328,32507],{"class":408},[398,44330,44331],{"class":400,"line":33464},[398,44332,2676],{"emptyLinePlaceholder":328},[398,44334,44335],{"class":400,"line":33469},[398,44336,33472],{"class":467},[398,44338,44339,44341,44343,44345,44347],{"class":400,"line":33475},[398,44340,33478],{"class":408},[398,44342,454],{"class":404},[398,44344,33483],{"class":408},[398,44346,934],{"class":404},[398,44348,33488],{"class":408},[398,44350,44351,44353,44355,44357,44359,44361,44363,44365,44367,44369,44371,44373,44375,44377,44379,44381,44383,44385],{"class":400,"line":33491},[398,44352,32644],{"class":457},[398,44354,409],{"class":408},[398,44356,33498],{"class":513},[398,44358,1298],{"class":457},[398,44360,33503],{"class":404},[398,44362,1348],{"class":457},[398,44364,946],{"class":513},[398,44366,1298],{"class":457},[398,44368,33503],{"class":404},[398,44370,1348],{"class":457},[398,44372,33516],{"class":513},[398,44374,33519],{"class":408},[398,44376,33522],{"class":404},[398,44378,1309],{"class":457},[398,44380,33527],{"class":408},[398,44382,730],{"class":404},[398,44384,1309],{"class":457},[398,44386,30690],{"class":408},[398,44388,44389],{"class":400,"line":33536},[398,44390,36926],{"class":467},[398,44392,44393],{"class":400,"line":33542},[398,44394,36931],{"class":467},[398,44396,44397,44399,44401],{"class":400,"line":33548},[398,44398,36936],{"class":408},[398,44400,33560],{"class":513},[398,44402,415],{"class":408},[398,44404,44405],{"class":400,"line":33554},[398,44406,33580],{"class":467},[398,44408,44409,44411,44413,44415,44417,44419],{"class":400,"line":33565},[398,44410,33586],{"class":408},[398,44412,454],{"class":404},[398,44414,33591],{"class":408},[398,44416,33594],{"class":5493},[398,44418,454],{"class":404},[398,44420,1822],{"class":408},[398,44422,44423,44425,44427,44429],{"class":400,"line":33571},[398,44424,33604],{"class":513},[398,44426,1261],{"class":408},[398,44428,33609],{"class":457},[398,44430,33612],{"class":408},[398,44432,44433,44435],{"class":400,"line":33577},[398,44434,33618],{"class":513},[398,44436,33621],{"class":408},[398,44438,44439,44441],{"class":400,"line":33583},[398,44440,33627],{"class":513},[398,44442,33630],{"class":408},[398,44444,44445,44447],{"class":400,"line":33601},[398,44446,33636],{"class":513},[398,44448,33639],{"class":408},[398,44450,44451,44453],{"class":400,"line":33615},[398,44452,33645],{"class":513},[398,44454,33648],{"class":408},[398,44456,44457],{"class":400,"line":33624},[398,44458,33654],{"class":408},[398,44460,44461],{"class":400,"line":33633},[398,44462,33660],{"class":467},[398,44464,44465,44467],{"class":400,"line":33642},[398,44466,4366],{"class":404},[398,44468,33668],{"class":408},[398,44470,44471],{"class":400,"line":33651},[398,44472,2676],{"emptyLinePlaceholder":328},[398,44474,44475],{"class":400,"line":33657},[398,44476,33679],{"class":467},[398,44478,44479,44481,44483],{"class":400,"line":33663},[398,44480,32140],{"class":404},[398,44482,33687],{"class":2239},[398,44484,33690],{"class":408},[398,44486,44487],{"class":400,"line":33671},[398,44488,33696],{"class":467},[398,44490,44491,44493,44495,44497,44499,44501,44503,44505],{"class":400,"line":33676},[398,44492,33702],{"class":408},[398,44494,31886],{"class":5493},[398,44496,454],{"class":404},[398,44498,409],{"class":408},[398,44500,900],{"class":457},[398,44502,780],{"class":408},[398,44504,695],{"class":457},[398,44506,30690],{"class":408},[398,44508,44509],{"class":400,"line":33682},[398,44510,33722],{"class":467},[398,44512,44513],{"class":400,"line":33693},[398,44514,33728],{"class":467},[398,44516,44517],{"class":400,"line":33699},[398,44518,33734],{"class":467},[398,44520,44521,44523,44525,44527,44529,44531,44533],{"class":400,"line":33719},[398,44522,31920],{"class":408},[398,44524,619],{"class":457},[398,44526,780],{"class":408},[398,44528,486],{"class":457},[398,44530,780],{"class":408},[398,44532,619],{"class":457},[398,44534,415],{"class":408},[398,44536,44537],{"class":400,"line":33725},[398,44538,33757],{"class":467},[398,44540,44541],{"class":400,"line":33731},[398,44542,33763],{"class":467},[398,44544,44545],{"class":400,"line":33737},[398,44546,33769],{"class":467},[398,44548,44549],{"class":400,"line":33754},[398,44550,33775],{"class":467},[398,44552,44553],{"class":400,"line":33760},[398,44554,33781],{"class":467},[398,44556,44557,44559,44561,44563,44565,44567,44569,44571,44573],{"class":400,"line":33766},[398,44558,33787],{"class":408},[398,44560,33790],{"class":513},[398,44562,33793],{"class":408},[398,44564,33796],{"class":513},[398,44566,780],{"class":408},[398,44568,33801],{"class":5493},[398,44570,454],{"class":404},[398,44572,33806],{"class":513},[398,44574,415],{"class":408},[398,44576,44577,44579,44581,44583,44585,44587,44589,44591,44593],{"class":400,"line":33772},[398,44578,33787],{"class":408},[398,44580,33790],{"class":513},[398,44582,33818],{"class":408},[398,44584,33821],{"class":513},[398,44586,780],{"class":408},[398,44588,33801],{"class":5493},[398,44590,454],{"class":404},[398,44592,33830],{"class":513},[398,44594,415],{"class":408},[398,44596,44597],{"class":400,"line":33778},[398,44598,33838],{"class":467},[398,44600,44601],{"class":400,"line":33784},[398,44602,33844],{"class":408},[398,44604,44605],{"class":400,"line":33811},[398,44606,33850],{"class":467},[398,44608,44609,44611,44613],{"class":400,"line":33835},[398,44610,33856],{"class":408},[398,44612,33859],{"class":513},[398,44614,415],{"class":408},[398,44616,44617,44619,44621],{"class":400,"line":33841},[398,44618,33867],{"class":408},[398,44620,33870],{"class":513},[398,44622,415],{"class":408},[398,44624,44625],{"class":400,"line":33847},[398,44626,33878],{"class":467},[398,44628,44629,44631,44633,44635,44637,44639,44641],{"class":400,"line":33853},[398,44630,31920],{"class":408},[398,44632,619],{"class":457},[398,44634,780],{"class":408},[398,44636,486],{"class":457},[398,44638,780],{"class":408},[398,44640,486],{"class":457},[398,44642,415],{"class":408},[398,44644,44645,44647,44649,44651,44653,44655,44657,44659,44661],{"class":400,"line":33864},[398,44646,33787],{"class":408},[398,44648,33790],{"class":513},[398,44650,33905],{"class":408},[398,44652,33796],{"class":513},[398,44654,780],{"class":408},[398,44656,33801],{"class":5493},[398,44658,454],{"class":404},[398,44660,33916],{"class":513},[398,44662,415],{"class":408},[398,44664,44665,44667,44669,44671,44673,44675,44677,44679,44681],{"class":400,"line":33875},[398,44666,33787],{"class":408},[398,44668,33790],{"class":513},[398,44670,33928],{"class":408},[398,44672,33821],{"class":513},[398,44674,780],{"class":408},[398,44676,33801],{"class":5493},[398,44678,454],{"class":404},[398,44680,33939],{"class":513},[398,44682,415],{"class":408},[398,44684,44685],{"class":400,"line":33881},[398,44686,33947],{"class":467},[398,44688,44689],{"class":400,"line":33898},[398,44690,33844],{"class":408},[398,44692,44693,44695,44697],{"class":400,"line":33921},[398,44694,33856],{"class":408},[398,44696,33790],{"class":513},[398,44698,415],{"class":408},[398,44700,44701,44703,44705],{"class":400,"line":33944},[398,44702,33867],{"class":408},[398,44704,33969],{"class":513},[398,44706,415],{"class":408},[398,44708,44709],{"class":400,"line":33950},[398,44710,33977],{"class":408},[398,44712,44713],{"class":400,"line":33955},[398,44714,2676],{"emptyLinePlaceholder":328},[398,44716,44717],{"class":400,"line":33964},[398,44718,33988],{"class":467},[398,44720,44721,44723,44725,44727,44729],{"class":400,"line":33974},[398,44722,1807],{"class":404},[398,44724,31413],{"class":457},[398,44726,3225],{"class":404},[398,44728,31418],{"class":513},[398,44730,4015],{"class":408},[398,44732,44733],{"class":400,"line":33980},[398,44734,34007],{"class":467},[398,44736,44737,44740,44742],{"class":400,"line":33985},[398,44738,44739],{"class":408},"    GoogLeNet",[398,44741,454],{"class":404},[398,44743,44744],{"class":408},"GoogLeNet(Inception)\n",[398,44746,44747,44749,44751],{"class":400,"line":33991},[398,44748,34024],{"class":408},[398,44750,454],{"class":404},[398,44752,34029],{"class":408},[398,44754,44755,44757,44759,44762,44764,44766,44768],{"class":400,"line":34004},[398,44756,33586],{"class":408},[398,44758,454],{"class":404},[398,44760,44761],{"class":408},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[398,44763,34042],{"class":5493},[398,44765,454],{"class":404},[398,44767,1353],{"class":457},[398,44769,415],{"class":408},[398,44771,44772],{"class":400,"line":34010},[398,44773,34054],{"class":408},[38,44775,44776],{"start":320},[41,44777,40767],{},[389,44779,44781],{"className":30571,"code":44780,"language":30573,"meta":316,"style":316},"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",[395,44782,44783,44789,44799,44809,44813,44823,44834,44838,44842,44846,44854,44870,44880,44896,44906,44920,44924,44934,44944,44954,44960,44964,44968,44976,44980,44996,45004,45008,45012,45020,45028,45032,45036,45040,45044,45050,45054,45064,45072,45080,45084,45088,45092,45100,45104,45120,45124,45128,45132,45144,45148,45160,45164,45168,45180,45184,45194,45198,45202,45214,45218,45226,45230,45234,45242,45246,45254,45258,45262,45266,45270,45274,45290,45298,45302,45306,45354,45360,45364,45374,45382,45390,45394,45398,45402,45406,45414,45418,45434,45438,45446,45454],{"__ignoreMap":316},[398,44784,44785,44787],{"class":400,"line":401},[398,44786,30585],{"class":404},[398,44788,30588],{"class":408},[398,44790,44791,44793,44795,44797],{"class":400,"line":317},[398,44792,30585],{"class":404},[398,44794,31608],{"class":408},[398,44796,31576],{"class":404},[398,44798,31613],{"class":408},[398,44800,44801,44803,44805,44807],{"class":400,"line":320},[398,44802,30930],{"class":404},[398,44804,31591],{"class":408},[398,44806,30585],{"class":404},[398,44808,31596],{"class":408},[398,44810,44811],{"class":400,"line":1470},[398,44812,34115],{"class":467},[398,44814,44815,44817,44819,44821],{"class":400,"line":1476},[398,44816,30930],{"class":404},[398,44818,31561],{"class":408},[398,44820,30585],{"class":404},[398,44822,31566],{"class":408},[398,44824,44825,44827,44829,44831],{"class":400,"line":1490},[398,44826,30930],{"class":404},[398,44828,32107],{"class":408},[398,44830,30585],{"class":404},[398,44832,44833],{"class":408}," GoogLeNet,Inception\n",[398,44835,44836],{"class":400,"line":1496},[398,44837,2676],{"emptyLinePlaceholder":328},[398,44839,44840],{"class":400,"line":1587},[398,44841,2676],{"emptyLinePlaceholder":328},[398,44843,44844],{"class":400,"line":1593},[398,44845,34144],{"class":467},[398,44847,44848,44850,44852],{"class":400,"line":1605},[398,44849,32140],{"class":404},[398,44851,34151],{"class":2239},[398,44853,32146],{"class":408},[398,44855,44856,44858,44860,44862,44864,44866,44868],{"class":400,"line":1888},[398,44857,34158],{"class":408},[398,44859,454],{"class":404},[398,44861,31648],{"class":408},[398,44863,31651],{"class":5493},[398,44865,454],{"class":404},[398,44867,31656],{"class":513},[398,44869,31659],{"class":408},[398,44871,44872,44874,44876,44878],{"class":400,"line":1893},[398,44873,34175],{"class":5493},[398,44875,454],{"class":404},[398,44877,34180],{"class":457},[398,44879,31659],{"class":408},[398,44881,44882,44884,44886,44888,44890,44892,44894],{"class":400,"line":1899},[398,44883,34187],{"class":5493},[398,44885,454],{"class":404},[398,44887,31686],{"class":408},[398,44889,31689],{"class":5493},[398,44891,454],{"class":404},[398,44893,35642],{"class":457},[398,44895,31697],{"class":408},[398,44897,44898,44900,44902,44904],{"class":400,"line":1904},[398,44899,34204],{"class":5493},[398,44901,454],{"class":404},[398,44903,31669],{"class":457},[398,44905,415],{"class":408},[398,44907,44908,44910,44912,44914,44916,44918],{"class":400,"line":1918},[398,44909,34215],{"class":408},[398,44911,454],{"class":404},[398,44913,31727],{"class":408},[398,44915,31730],{"class":5493},[398,44917,454],{"class":404},[398,44919,34226],{"class":408},[398,44921,44922],{"class":400,"line":1923},[398,44923,34231],{"class":467},[398,44925,44926,44928,44930,44932],{"class":400,"line":1929},[398,44927,34236],{"class":5493},[398,44929,454],{"class":404},[398,44931,619],{"class":457},[398,44933,31659],{"class":408},[398,44935,44936,44938,44940,44942],{"class":400,"line":1950},[398,44937,34247],{"class":5493},[398,44939,454],{"class":404},[398,44941,31669],{"class":457},[398,44943,31659],{"class":408},[398,44945,44946,44948,44950,44952],{"class":400,"line":1955},[398,44947,34258],{"class":5493},[398,44949,454],{"class":404},[398,44951,593],{"class":457},[398,44953,415],{"class":408},[398,44955,44956,44958],{"class":400,"line":1969},[398,44957,4366],{"class":404},[398,44959,34271],{"class":408},[398,44961,44962],{"class":400,"line":1974},[398,44963,2676],{"emptyLinePlaceholder":328},[398,44965,44966],{"class":400,"line":2003},[398,44967,34280],{"class":467},[398,44969,44970,44972,44974],{"class":400,"line":2008},[398,44971,32140],{"class":404},[398,44973,34287],{"class":2239},[398,44975,34290],{"class":408},[398,44977,44978],{"class":400,"line":2025},[398,44979,34295],{"class":467},[398,44981,44982,44984,44986,44988,44990,44992,44994],{"class":400,"line":2030},[398,44983,31430],{"class":408},[398,44985,454],{"class":404},[398,44987,31437],{"class":513},[398,44989,1980],{"class":404},[398,44991,31442],{"class":408},[398,44993,1977],{"class":404},[398,44995,34312],{"class":513},[398,44997,44998,45000,45002],{"class":400,"line":2035},[398,44999,31482],{"class":408},[398,45001,454],{"class":404},[398,45003,32482],{"class":408},[398,45005,45006],{"class":400,"line":2040},[398,45007,2676],{"emptyLinePlaceholder":328},[398,45009,45010],{"class":400,"line":2054},[398,45011,34329],{"class":467},[398,45013,45014,45016,45018],{"class":400,"line":2059},[398,45015,34334],{"class":408},[398,45017,454],{"class":404},[398,45019,32535],{"class":457},[398,45021,45022,45024,45026],{"class":400,"line":2853},[398,45023,34343],{"class":408},[398,45025,454],{"class":404},[398,45027,3361],{"class":457},[398,45029,45030],{"class":400,"line":2867},[398,45031,2676],{"emptyLinePlaceholder":328},[398,45033,45034],{"class":400,"line":2875},[398,45035,34356],{"class":467},[398,45037,45038],{"class":400,"line":2880},[398,45039,34361],{"class":467},[398,45041,45042],{"class":400,"line":2886},[398,45043,34366],{"class":467},[398,45045,45046,45048],{"class":400,"line":2892},[398,45047,34371],{"class":404},[398,45049,33077],{"class":408},[398,45051,45052],{"class":400,"line":2897},[398,45053,34378],{"class":467},[398,45055,45056,45058,45060,45062],{"class":400,"line":8225},[398,45057,3679],{"class":404},[398,45059,34385],{"class":408},[398,45061,26236],{"class":404},[398,45063,34390],{"class":408},[398,45065,45066,45068,45070],{"class":400,"line":8249},[398,45067,34395],{"class":408},[398,45069,454],{"class":404},[398,45071,34400],{"class":408},[398,45073,45074,45076,45078],{"class":400,"line":8254},[398,45075,34405],{"class":408},[398,45077,454],{"class":404},[398,45079,34410],{"class":408},[398,45081,45082],{"class":400,"line":8260},[398,45083,34415],{"class":467},[398,45085,45086],{"class":400,"line":8287},[398,45087,33068],{"class":408},[398,45089,45090],{"class":400,"line":8292},[398,45091,34424],{"class":467},[398,45093,45094,45096,45098],{"class":400,"line":8298},[398,45095,32853],{"class":408},[398,45097,454],{"class":404},[398,45099,34433],{"class":408},[398,45101,45102],{"class":400,"line":8310},[398,45103,34438],{"class":467},[398,45105,45106,45108,45110,45112,45114,45116,45118],{"class":400,"line":8322},[398,45107,32870],{"class":408},[398,45109,454],{"class":404},[398,45111,32875],{"class":408},[398,45113,32878],{"class":5493},[398,45115,454],{"class":404},[398,45117,619],{"class":457},[398,45119,415],{"class":408},[398,45121,45122],{"class":400,"line":8334},[398,45123,34459],{"class":467},[398,45125,45126],{"class":400,"line":9993},[398,45127,34464],{"class":467},[398,45129,45130],{"class":400,"line":10018},[398,45131,34469],{"class":467},[398,45133,45134,45136,45138,45140,45142],{"class":400,"line":10041},[398,45135,34474],{"class":408},[398,45137,9754],{"class":404},[398,45139,32980],{"class":408},[398,45141,3225],{"class":404},[398,45143,34483],{"class":408},[398,45145,45146],{"class":400,"line":10065},[398,45147,34488],{"class":467},[398,45149,45150,45152,45154,45156,45158],{"class":400,"line":10070},[398,45151,34493],{"class":408},[398,45153,9754],{"class":404},[398,45155,34498],{"class":408},[398,45157,593],{"class":457},[398,45159,415],{"class":408},[398,45161,45162],{"class":400,"line":10075},[398,45163,2676],{"emptyLinePlaceholder":328},[398,45165,45166],{"class":400,"line":10080},[398,45167,34511],{"class":467},[398,45169,45170,45172,45174,45176,45178],{"class":400,"line":10089},[398,45171,34516],{"class":408},[398,45173,454],{"class":404},[398,45175,34521],{"class":408},[398,45177,986],{"class":404},[398,45179,34526],{"class":408},[398,45181,45182],{"class":400,"line":10094},[398,45183,34531],{"class":467},[398,45185,45186,45188,45190,45192],{"class":400,"line":10100},[398,45187,32644],{"class":457},[398,45189,409],{"class":408},[398,45191,34540],{"class":513},[398,45193,34543],{"class":408},[398,45195,45196],{"class":400,"line":10121},[398,45197,2676],{"emptyLinePlaceholder":328},[398,45199,45200],{"class":400,"line":10127},[398,45201,34552],{"class":467},[398,45203,45204,45206,45208,45210,45212],{"class":400,"line":10141},[398,45205,1807],{"class":404},[398,45207,31413],{"class":457},[398,45209,3225],{"class":404},[398,45211,31418],{"class":513},[398,45213,4015],{"class":408},[398,45215,45216],{"class":400,"line":10147},[398,45217,34569],{"class":467},[398,45219,45220,45222,45224],{"class":400,"line":10174},[398,45221,31482],{"class":408},[398,45223,454],{"class":404},[398,45225,44744],{"class":408},[398,45227,45228],{"class":400,"line":10183},[398,45229,34582],{"class":467},[398,45231,45232],{"class":400,"line":10189},[398,45233,34587],{"class":467},[398,45235,45236,45238,45240],{"class":400,"line":10197},[398,45237,34592],{"class":408},[398,45239,34595],{"class":513},[398,45241,30690],{"class":408},[398,45243,45244],{"class":400,"line":10202},[398,45245,34602],{"class":467},[398,45247,45248,45250,45252],{"class":400,"line":16881},[398,45249,34215],{"class":408},[398,45251,454],{"class":404},[398,45253,34611],{"class":408},[398,45255,45256],{"class":400,"line":16887},[398,45257,34616],{"class":467},[398,45259,45260],{"class":400,"line":16910},[398,45261,34621],{"class":408},[398,45263,45264],{"class":400,"line":16916},[398,45265,2676],{"emptyLinePlaceholder":328},[398,45267,45268],{"class":400,"line":16939},[398,45269,34630],{"class":467},[398,45271,45272],{"class":400,"line":16953},[398,45273,34635],{"class":467},[398,45275,45276,45278,45280,45282,45284,45286,45288],{"class":400,"line":16973},[398,45277,31430],{"class":408},[398,45279,454],{"class":404},[398,45281,31437],{"class":513},[398,45283,1980],{"class":404},[398,45285,31442],{"class":408},[398,45287,1977],{"class":404},[398,45289,34312],{"class":513},[398,45291,45292,45294,45296],{"class":400,"line":16979},[398,45293,31482],{"class":408},[398,45295,454],{"class":404},[398,45297,32482],{"class":408},[398,45299,45300],{"class":400,"line":16990},[398,45301,34664],{"class":467},[398,45303,45304],{"class":400,"line":17013},[398,45305,34669],{"class":467},[398,45307,45308,45310,45312,45314,45316,45318,45320,45322,45324,45326,45328,45330,45332,45334,45336,45338,45340,45342,45344,45346,45348,45350,45352],{"class":400,"line":17035},[398,45309,34674],{"class":408},[398,45311,454],{"class":404},[398,45313,1292],{"class":408},[398,45315,34681],{"class":513},[398,45317,780],{"class":408},[398,45319,34686],{"class":513},[398,45321,780],{"class":408},[398,45323,34691],{"class":513},[398,45325,780],{"class":408},[398,45327,34696],{"class":513},[398,45329,780],{"class":408},[398,45331,34701],{"class":513},[398,45333,780],{"class":408},[398,45335,34706],{"class":513},[398,45337,780],{"class":408},[398,45339,34711],{"class":513},[398,45341,780],{"class":408},[398,45343,34716],{"class":513},[398,45345,780],{"class":408},[398,45347,34721],{"class":513},[398,45349,780],{"class":408},[398,45351,34726],{"class":513},[398,45353,33439],{"class":408},[398,45355,45356,45358],{"class":400,"line":17040},[398,45357,34371],{"class":404},[398,45359,33077],{"class":408},[398,45361,45362],{"class":400,"line":17046},[398,45363,34739],{"class":467},[398,45365,45366,45368,45370,45372],{"class":400,"line":17060},[398,45367,3679],{"class":404},[398,45369,34746],{"class":408},[398,45371,26236],{"class":404},[398,45373,34390],{"class":408},[398,45375,45376,45378,45380],{"class":400,"line":17073},[398,45377,32803],{"class":408},[398,45379,454],{"class":404},[398,45381,32808],{"class":408},[398,45383,45384,45386,45388],{"class":400,"line":17078},[398,45385,32818],{"class":408},[398,45387,454],{"class":404},[398,45389,32823],{"class":408},[398,45391,45392],{"class":400,"line":17092},[398,45393,2676],{"emptyLinePlaceholder":328},[398,45395,45396],{"class":400,"line":17097},[398,45397,34775],{"class":467},[398,45399,45400],{"class":400,"line":17103},[398,45401,33068],{"class":408},[398,45403,45404],{"class":400,"line":17108},[398,45405,34784],{"class":467},[398,45407,45408,45410,45412],{"class":400,"line":17122},[398,45409,32853],{"class":408},[398,45411,454],{"class":404},[398,45413,32858],{"class":408},[398,45415,45416],{"class":400,"line":17127},[398,45417,34797],{"class":467},[398,45419,45420,45422,45424,45426,45428,45430,45432],{"class":400,"line":17132},[398,45421,32870],{"class":408},[398,45423,454],{"class":404},[398,45425,32875],{"class":408},[398,45427,32878],{"class":5493},[398,45429,454],{"class":404},[398,45431,619],{"class":457},[398,45433,415],{"class":408},[398,45435,45436],{"class":400,"line":17146},[398,45437,34818],{"class":467},[398,45439,45440,45442,45444],{"class":400,"line":17158},[398,45441,34823],{"class":408},[398,45443,454],{"class":404},[398,45445,34828],{"class":408},[398,45447,45448,45450,45452],{"class":400,"line":17163},[398,45449,34833],{"class":408},[398,45451,454],{"class":404},[398,45453,34838],{"class":408},[398,45455,45456,45458,45460,45462,45464,45466,45468,45470],{"class":400,"line":17176},[398,45457,34843],{"class":457},[398,45459,409],{"class":408},[398,45461,34848],{"class":513},[398,45463,34851],{"class":408},[398,45465,34854],{"class":513},[398,45467,780],{"class":408},[398,45469,34859],{"class":513},[398,45471,34862],{"class":408},[14,45473,45475],{"id":45474},"_24训练自己的数据集","2.4.训练自己的数据集",[19,45477,45478],{},"猫狗分类任务",[19,45480,45481],{},"划分数据集和验证集",[389,45483,45485],{"className":30571,"code":45484,"language":30573,"meta":316,"style":316},"# 创建脚本，用于划分数据集和验证集\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",[395,45486,45487,45492,45499,45504,45515,45522,45526,45536,45550,45559,45563,45568,45578,45598,45602,45607,45617,45628,45641,45645,45650,45659,45669,45680,45684,45689,45699,45703,45708,45713,45718,45723,45728,45732,45742,45769,45782,45794,45821,45826,45831,45845,45850,45862,45877,45892,45900,45904,45909,45915,45927,45940,45945,45950,45955,46005,46011,46015],{"__ignoreMap":316},[398,45488,45489],{"class":400,"line":401},[398,45490,45491],{"class":467},"# 创建脚本，用于划分数据集和验证集\n",[398,45493,45494,45496],{"class":400,"line":317},[398,45495,30585],{"class":404},[398,45497,45498],{"class":408}," os\n",[398,45500,45501],{"class":400,"line":320},[398,45502,45503],{"class":467},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[398,45505,45506,45508,45511,45513],{"class":400,"line":1470},[398,45507,30930],{"class":404},[398,45509,45510],{"class":408}," shutil ",[398,45512,30585],{"class":404},[398,45514,32015],{"class":408},[398,45516,45517,45519],{"class":400,"line":1476},[398,45518,30585],{"class":404},[398,45520,45521],{"class":408}," random\n",[398,45523,45524],{"class":400,"line":1490},[398,45525,2676],{"emptyLinePlaceholder":328},[398,45527,45528,45530,45533],{"class":400,"line":1496},[398,45529,32140],{"class":404},[398,45531,45532],{"class":2239}," mkfile",[398,45534,45535],{"class":408},"(file):\n",[398,45537,45538,45540,45542,45545,45548],{"class":400,"line":1587},[398,45539,3377],{"class":404},[398,45541,39123],{"class":404},[398,45543,45544],{"class":408}," os.path.exists(",[398,45546,45547],{"class":5493},"file",[398,45549,30979],{"class":408},[398,45551,45552,45555,45557],{"class":400,"line":1593},[398,45553,45554],{"class":408},"        os.makedirs(",[398,45556,45547],{"class":5493},[398,45558,415],{"class":408},[398,45560,45561],{"class":400,"line":1605},[398,45562,2676],{"emptyLinePlaceholder":328},[398,45564,45565],{"class":400,"line":1888},[398,45566,45567],{"class":467},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[398,45569,45570,45573,45575],{"class":400,"line":1893},[398,45571,45572],{"class":408},"file_path",[398,45574,454],{"class":404},[398,45576,45577],{"class":513},"'data_cat_dog'\n",[398,45579,45580,45583,45585,45588,45590,45593,45595],{"class":400,"line":1899},[398,45581,45582],{"class":408},"flower_class",[398,45584,454],{"class":404},[398,45586,45587],{"class":408},"[cla ",[398,45589,3301],{"class":404},[398,45591,45592],{"class":408}," cla ",[398,45594,26236],{"class":404},[398,45596,45597],{"class":408}," os.listdir(file_path)]\n",[398,45599,45600],{"class":400,"line":1904},[398,45601,2676],{"emptyLinePlaceholder":328},[398,45603,45604],{"class":400,"line":1918},[398,45605,45606],{"class":467},"# 创建训练集train文件夹\n",[398,45608,45609,45612,45615],{"class":400,"line":1923},[398,45610,45611],{"class":408},"mkfile(",[398,45613,45614],{"class":513},"'data\u002Ftrain'",[398,45616,415],{"class":408},[398,45618,45619,45621,45623,45625],{"class":400,"line":1929},[398,45620,3301],{"class":404},[398,45622,45592],{"class":408},[398,45624,26236],{"class":404},[398,45626,45627],{"class":408}," flower_class:\n",[398,45629,45630,45633,45636,45638],{"class":400,"line":1950},[398,45631,45632],{"class":408},"    mkfile(",[398,45634,45635],{"class":513},"'data\u002Ftrain\u002F'",[398,45637,883],{"class":404},[398,45639,45640],{"class":408},"cla)\n",[398,45642,45643],{"class":400,"line":1955},[398,45644,2676],{"emptyLinePlaceholder":328},[398,45646,45647],{"class":400,"line":1969},[398,45648,45649],{"class":467},"# 创建验证集val文件夹\n",[398,45651,45652,45654,45657],{"class":400,"line":1974},[398,45653,45611],{"class":408},[398,45655,45656],{"class":513},"'data\u002Ftest'",[398,45658,415],{"class":408},[398,45660,45661,45663,45665,45667],{"class":400,"line":2003},[398,45662,3301],{"class":404},[398,45664,45592],{"class":408},[398,45666,26236],{"class":404},[398,45668,45627],{"class":408},[398,45670,45671,45673,45676,45678],{"class":400,"line":2008},[398,45672,45632],{"class":408},[398,45674,45675],{"class":513},"'data\u002Ftest\u002F'",[398,45677,883],{"class":404},[398,45679,45640],{"class":408},[398,45681,45682],{"class":400,"line":2025},[398,45683,2676],{"emptyLinePlaceholder":328},[398,45685,45686],{"class":400,"line":2030},[398,45687,45688],{"class":467},"# 划分比例，训练集：测试集=9：1\n",[398,45690,45691,45694,45696],{"class":400,"line":2035},[398,45692,45693],{"class":408},"split_rate",[398,45695,454],{"class":404},[398,45697,45698],{"class":457},"0.1\n",[398,45700,45701],{"class":400,"line":2040},[398,45702,2676],{"emptyLinePlaceholder":328},[398,45704,45705],{"class":400,"line":2054},[398,45706,45707],{"class":467},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[398,45709,45710],{"class":400,"line":2059},[398,45711,45712],{"class":467},"# cla_path：当前类别的原始图片路径\n",[398,45714,45715],{"class":400,"line":2853},[398,45716,45717],{"class":467},"# images：当前类别下所有图片的文件名列表\n",[398,45719,45720],{"class":400,"line":2867},[398,45721,45722],{"class":467},"# num：该类别图片总数\n",[398,45724,45725],{"class":400,"line":2875},[398,45726,45727],{"class":467},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[398,45729,45730],{"class":400,"line":2880},[398,45731,2676],{"emptyLinePlaceholder":328},[398,45733,45734,45736,45738,45740],{"class":400,"line":2886},[398,45735,3301],{"class":404},[398,45737,45592],{"class":408},[398,45739,26236],{"class":404},[398,45741,45627],{"class":408},[398,45743,45744,45747,45749,45752,45754,45757,45760,45762,45764,45766],{"class":400,"line":2892},[398,45745,45746],{"class":408},"    cla_path ",[398,45748,454],{"class":404},[398,45750,45751],{"class":408}," file_path ",[398,45753,883],{"class":404},[398,45755,45756],{"class":513}," '\u002F'",[398,45758,45759],{"class":404}," +",[398,45761,45592],{"class":408},[398,45763,883],{"class":404},[398,45765,45756],{"class":513},[398,45767,45768],{"class":467},"  # 某一类别的子目录\n",[398,45770,45771,45774,45776,45779],{"class":400,"line":2897},[398,45772,45773],{"class":408},"    images ",[398,45775,454],{"class":404},[398,45777,45778],{"class":408}," os.listdir(cla_path)  ",[398,45780,45781],{"class":467},"# iamges 列表存储了该目录下所有图像的名称\n",[398,45783,45784,45787,45789,45791],{"class":400,"line":8225},[398,45785,45786],{"class":408},"    num ",[398,45788,454],{"class":404},[398,45790,7608],{"class":457},[398,45792,45793],{"class":408},"(images)\n",[398,45795,45796,45799,45801,45804,45806,45808,45810,45813,45815,45818],{"class":400,"line":8249},[398,45797,45798],{"class":408},"    eval_index ",[398,45800,454],{"class":404},[398,45802,45803],{"class":408}," random.sample(images, ",[398,45805,895],{"class":5493},[398,45807,454],{"class":404},[398,45809,412],{"class":457},[398,45811,45812],{"class":408},"(num ",[398,45814,857],{"class":404},[398,45816,45817],{"class":408}," split_rate))  ",[398,45819,45820],{"class":467},"# 从images列表中随机抽取 k 个图像名称\n",[398,45822,45823],{"class":400,"line":8254},[398,45824,45825],{"class":467},"    # 遍历该类别下的所有图片\n",[398,45827,45828],{"class":400,"line":8260},[398,45829,45830],{"class":467},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[398,45832,45833,45835,45838,45840,45842],{"class":400,"line":8287},[398,45834,3477],{"class":404},[398,45836,45837],{"class":408}," index, image ",[398,45839,26236],{"class":404},[398,45841,31799],{"class":457},[398,45843,45844],{"class":408},"(images):\n",[398,45846,45847],{"class":400,"line":8292},[398,45848,45849],{"class":467},"        # eval_index 中保存验证集val的图像名称\n",[398,45851,45852,45854,45857,45859],{"class":400,"line":8298},[398,45853,2773],{"class":404},[398,45855,45856],{"class":408}," image ",[398,45858,26236],{"class":404},[398,45860,45861],{"class":408}," eval_index:\n",[398,45863,45864,45867,45869,45872,45874],{"class":400,"line":8310},[398,45865,45866],{"class":408},"            image_path ",[398,45868,454],{"class":404},[398,45870,45871],{"class":408}," cla_path ",[398,45873,883],{"class":404},[398,45875,45876],{"class":408}," image\n",[398,45878,45879,45882,45884,45887,45889],{"class":400,"line":8322},[398,45880,45881],{"class":408},"            new_path ",[398,45883,454],{"class":404},[398,45885,45886],{"class":513}," 'data\u002Ftest\u002F'",[398,45888,45759],{"class":404},[398,45890,45891],{"class":408}," cla\n",[398,45893,45894,45897],{"class":400,"line":8334},[398,45895,45896],{"class":408},"            copy(image_path, new_path)  ",[398,45898,45899],{"class":467},"# 将选中的图像复制到新路径\n",[398,45901,45902],{"class":400,"line":9993},[398,45903,2676],{"emptyLinePlaceholder":328},[398,45905,45906],{"class":400,"line":10018},[398,45907,45908],{"class":467},"        # 其余的图像保存在训练集train中\n",[398,45910,45911,45913],{"class":400,"line":10041},[398,45912,2810],{"class":404},[398,45914,4015],{"class":408},[398,45916,45917,45919,45921,45923,45925],{"class":400,"line":10065},[398,45918,45866],{"class":408},[398,45920,454],{"class":404},[398,45922,45871],{"class":408},[398,45924,883],{"class":404},[398,45926,45876],{"class":408},[398,45928,45929,45931,45933,45936,45938],{"class":400,"line":10070},[398,45930,45881],{"class":408},[398,45932,454],{"class":404},[398,45934,45935],{"class":513}," 'data\u002Ftrain\u002F'",[398,45937,45759],{"class":404},[398,45939,45891],{"class":408},[398,45941,45942],{"class":400,"line":10075},[398,45943,45944],{"class":408},"            copy(image_path, new_path)\n",[398,45946,45947],{"class":400,"line":10080},[398,45948,45949],{"class":467},"            # 打印进度条信息\n",[398,45951,45952],{"class":400,"line":10089},[398,45953,45954],{"class":467},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[398,45956,45957,45959,45961,45963,45966,45968,45970,45973,45975,45977,45979,45982,45985,45987,45989,45992,45995,45997,45999,46002],{"class":400,"line":10094},[398,45958,32644],{"class":457},[398,45960,409],{"class":408},[398,45962,653],{"class":513},[398,45964,45965],{"class":457},"\\r",[398,45967,1292],{"class":513},[398,45969,32652],{"class":457},[398,45971,45972],{"class":513},"] processing [",[398,45974,32652],{"class":457},[398,45976,986],{"class":513},[398,45978,32652],{"class":457},[398,45980,45981],{"class":513},"]\"",[398,45983,45984],{"class":408},".format(cla, index ",[398,45986,883],{"class":404},[398,45988,25396],{"class":457},[398,45990,45991],{"class":408},", num), ",[398,45993,45994],{"class":5493},"end",[398,45996,454],{"class":404},[398,45998,7929],{"class":513},[398,46000,46001],{"class":408},")  ",[398,46003,46004],{"class":467},"# processing bar\n",[398,46006,46007,46009],{"class":400,"line":10100},[398,46008,31492],{"class":457},[398,46010,2252],{"class":408},[398,46012,46013],{"class":400,"line":10121},[398,46014,2676],{"emptyLinePlaceholder":328},[398,46016,46017,46019,46021,46024],{"class":400,"line":10127},[398,46018,30608],{"class":457},[398,46020,409],{"class":408},[398,46022,46023],{"class":513},"\"processing done!\"",[398,46025,415],{"class":408},[19,46027,46028],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22275,46030,46032],{"id":46031},"_242模型代码","2.4.2.模型代码",[19,46034,46035],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[389,46037,46039],{"className":30571,"code":46038,"language":30573,"meta":316,"style":316},"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",[395,46040,46041,46047,46057,46067,46071,46087,46095,46109,46119,46123,46153,46157,46191,46237,46241,46275,46321,46325,46329,46363,46393,46397,46405,46419,46441,46463,46481,46485,46499,46503,46507,46523,46527,46535,46549,46559,46603,46607,46635,46639,46649,46677,46681,46717,46721,46749,46753,46763,46795,46827,46855,46859,46869,46901,46933,46965,46997,47029,47057,47061,47071,47103,47135,47147,47151,47163,47167,47171,47183,47191,47211,47215,47219,47223,47227,47231,47235,47249,47257,47265,47277,47291,47299,47303,47311,47321,47331,47341,47351,47361,47367,47371,47375,47387,47407,47415],{"__ignoreMap":316},[398,46042,46043,46045],{"class":400,"line":401},[398,46044,30585],{"class":404},[398,46046,30588],{"class":408},[398,46048,46049,46051,46053,46055],{"class":400,"line":317},[398,46050,30930],{"class":404},[398,46052,30933],{"class":408},[398,46054,30585],{"class":404},[398,46056,30938],{"class":408},[398,46058,46059,46061,46063,46065],{"class":400,"line":320},[398,46060,30930],{"class":404},[398,46062,30950],{"class":408},[398,46064,30585],{"class":404},[398,46066,30955],{"class":408},[398,46068,46069],{"class":400,"line":1470},[398,46070,2676],{"emptyLinePlaceholder":328},[398,46072,46073,46075,46077,46079,46081,46083,46085],{"class":400,"line":1476},[398,46074,14971],{"class":404},[398,46076,41686],{"class":2239},[398,46078,409],{"class":408},[398,46080,30971],{"class":2239},[398,46082,960],{"class":408},[398,46084,30976],{"class":2239},[398,46086,30979],{"class":408},[398,46088,46089,46091,46093],{"class":400,"line":1490},[398,46090,30994],{"class":404},[398,46092,30997],{"class":457},[398,46094,41705],{"class":408},[398,46096,46097,46099,46101,46103,46105,46107],{"class":400,"line":1496},[398,46098,31010],{"class":457},[398,46100,41712],{"class":408},[398,46102,31016],{"class":457},[398,46104,31019],{"class":408},[398,46106,31022],{"class":457},[398,46108,2252],{"class":408},[398,46110,46111,46113,46115,46117],{"class":400,"line":1587},[398,46112,31038],{"class":457},[398,46114,34964],{"class":408},[398,46116,454],{"class":404},[398,46118,34969],{"class":408},[398,46120,46121],{"class":400,"line":1593},[398,46122,41735],{"class":467},[398,46124,46125,46127,46129,46131,46133,46135,46137,46139,46141,46143,46145,46147,46149,46151],{"class":400,"line":1605},[398,46126,31038],{"class":457},[398,46128,41742],{"class":408},[398,46130,454],{"class":404},[398,46132,31046],{"class":408},[398,46134,31049],{"class":5493},[398,46136,454],{"class":404},[398,46138,41753],{"class":408},[398,46140,31058],{"class":5493},[398,46142,454],{"class":404},[398,46144,41760],{"class":408},[398,46146,31067],{"class":5493},[398,46148,454],{"class":404},[398,46150,619],{"class":457},[398,46152,415],{"class":408},[398,46154,46155],{"class":400,"line":1888},[398,46156,41773],{"class":467},[398,46158,46159,46161,46163,46165,46167,46169,46171,46173,46175,46177,46179,46181,46183,46185,46187,46189],{"class":400,"line":1893},[398,46160,31038],{"class":457},[398,46162,41780],{"class":408},[398,46164,454],{"class":404},[398,46166,31046],{"class":408},[398,46168,31049],{"class":5493},[398,46170,454],{"class":404},[398,46172,41753],{"class":408},[398,46174,31058],{"class":5493},[398,46176,454],{"class":404},[398,46178,41797],{"class":408},[398,46180,593],{"class":457},[398,46182,41802],{"class":408},[398,46184,31067],{"class":5493},[398,46186,454],{"class":404},[398,46188,619],{"class":457},[398,46190,415],{"class":408},[398,46192,46193,46195,46197,46199,46201,46203,46205,46207,46209,46211,46213,46215,46217,46219,46221,46223,46225,46227,46229,46231,46233,46235],{"class":400,"line":1899},[398,46194,31038],{"class":457},[398,46196,41817],{"class":408},[398,46198,454],{"class":404},[398,46200,31046],{"class":408},[398,46202,31049],{"class":5493},[398,46204,454],{"class":404},[398,46206,41797],{"class":408},[398,46208,593],{"class":457},[398,46210,41802],{"class":408},[398,46212,31058],{"class":5493},[398,46214,454],{"class":404},[398,46216,41797],{"class":408},[398,46218,619],{"class":457},[398,46220,41802],{"class":408},[398,46222,31067],{"class":5493},[398,46224,454],{"class":404},[398,46226,480],{"class":457},[398,46228,780],{"class":408},[398,46230,31076],{"class":5493},[398,46232,454],{"class":404},[398,46234,619],{"class":457},[398,46236,415],{"class":408},[398,46238,46239],{"class":400,"line":1904},[398,46240,41862],{"class":467},[398,46242,46243,46245,46247,46249,46251,46253,46255,46257,46259,46261,46263,46265,46267,46269,46271,46273],{"class":400,"line":1918},[398,46244,31038],{"class":457},[398,46246,41869],{"class":408},[398,46248,454],{"class":404},[398,46250,31046],{"class":408},[398,46252,31049],{"class":5493},[398,46254,454],{"class":404},[398,46256,41753],{"class":408},[398,46258,31058],{"class":5493},[398,46260,454],{"class":404},[398,46262,41886],{"class":408},[398,46264,593],{"class":457},[398,46266,41802],{"class":408},[398,46268,31067],{"class":5493},[398,46270,454],{"class":404},[398,46272,619],{"class":457},[398,46274,415],{"class":408},[398,46276,46277,46279,46281,46283,46285,46287,46289,46291,46293,46295,46297,46299,46301,46303,46305,46307,46309,46311,46313,46315,46317,46319],{"class":400,"line":1923},[398,46278,31038],{"class":457},[398,46280,41905],{"class":408},[398,46282,454],{"class":404},[398,46284,31046],{"class":408},[398,46286,31049],{"class":5493},[398,46288,454],{"class":404},[398,46290,41886],{"class":408},[398,46292,593],{"class":457},[398,46294,41802],{"class":408},[398,46296,31058],{"class":5493},[398,46298,454],{"class":404},[398,46300,41886],{"class":408},[398,46302,619],{"class":457},[398,46304,41802],{"class":408},[398,46306,31067],{"class":5493},[398,46308,454],{"class":404},[398,46310,721],{"class":457},[398,46312,780],{"class":408},[398,46314,31076],{"class":5493},[398,46316,454],{"class":404},[398,46318,486],{"class":457},[398,46320,415],{"class":408},[398,46322,46323],{"class":400,"line":1929},[398,46324,41950],{"class":467},[398,46326,46327],{"class":400,"line":1950},[398,46328,41955],{"class":467},[398,46330,46331,46333,46335,46337,46339,46341,46343,46345,46347,46349,46351,46353,46355,46357,46359,46361],{"class":400,"line":1955},[398,46332,31038],{"class":457},[398,46334,41962],{"class":408},[398,46336,454],{"class":404},[398,46338,35022],{"class":408},[398,46340,31067],{"class":5493},[398,46342,454],{"class":404},[398,46344,480],{"class":457},[398,46346,780],{"class":408},[398,46348,31122],{"class":5493},[398,46350,454],{"class":404},[398,46352,619],{"class":457},[398,46354,780],{"class":408},[398,46356,31076],{"class":5493},[398,46358,454],{"class":404},[398,46360,619],{"class":457},[398,46362,415],{"class":408},[398,46364,46365,46367,46369,46371,46373,46375,46377,46379,46381,46383,46385,46387,46389,46391],{"class":400,"line":1969},[398,46366,31038],{"class":457},[398,46368,41997],{"class":408},[398,46370,454],{"class":404},[398,46372,31046],{"class":408},[398,46374,31049],{"class":5493},[398,46376,454],{"class":404},[398,46378,41753],{"class":408},[398,46380,31058],{"class":5493},[398,46382,454],{"class":404},[398,46384,42014],{"class":408},[398,46386,31067],{"class":5493},[398,46388,454],{"class":404},[398,46390,619],{"class":457},[398,46392,415],{"class":408},[398,46394,46395],{"class":400,"line":1974},[398,46396,2676],{"emptyLinePlaceholder":328},[398,46398,46399,46401,46403],{"class":400,"line":2003},[398,46400,30994],{"class":404},[398,46402,31286],{"class":2239},[398,46404,31289],{"class":408},[398,46406,46407,46409,46411,46413,46415,46417],{"class":400,"line":2008},[398,46408,42039],{"class":408},[398,46410,454],{"class":404},[398,46412,31016],{"class":457},[398,46414,35377],{"class":408},[398,46416,31016],{"class":457},[398,46418,42050],{"class":408},[398,46420,46421,46423,46425,46427,46429,46431,46433,46435,46437,46439],{"class":400,"line":2025},[398,46422,7362],{"class":408},[398,46424,454],{"class":404},[398,46426,31016],{"class":457},[398,46428,35377],{"class":408},[398,46430,31016],{"class":457},[398,46432,42065],{"class":408},[398,46434,31016],{"class":457},[398,46436,35377],{"class":408},[398,46438,31016],{"class":457},[398,46440,42074],{"class":408},[398,46442,46443,46445,46447,46449,46451,46453,46455,46457,46459,46461],{"class":400,"line":2030},[398,46444,42079],{"class":408},[398,46446,454],{"class":404},[398,46448,31016],{"class":457},[398,46450,35377],{"class":408},[398,46452,31016],{"class":457},[398,46454,42090],{"class":408},[398,46456,31016],{"class":457},[398,46458,35377],{"class":408},[398,46460,31016],{"class":457},[398,46462,42099],{"class":408},[398,46464,46465,46467,46469,46471,46473,46475,46477,46479],{"class":400,"line":2035},[398,46466,42104],{"class":408},[398,46468,454],{"class":404},[398,46470,31016],{"class":457},[398,46472,35377],{"class":408},[398,46474,31016],{"class":457},[398,46476,42115],{"class":408},[398,46478,31016],{"class":457},[398,46480,42120],{"class":408},[398,46482,46483],{"class":400,"line":2040},[398,46484,42125],{"class":467},[398,46486,46487,46489,46491,46493,46495,46497],{"class":400,"line":2054},[398,46488,15029],{"class":404},[398,46490,42132],{"class":408},[398,46492,32878],{"class":5493},[398,46494,454],{"class":404},[398,46496,619],{"class":457},[398,46498,415],{"class":408},[398,46500,46501],{"class":400,"line":2059},[398,46502,2676],{"emptyLinePlaceholder":328},[398,46504,46505],{"class":400,"line":2853},[398,46506,42153],{"class":467},[398,46508,46509,46511,46513,46515,46517,46519,46521],{"class":400,"line":2867},[398,46510,14971],{"class":404},[398,46512,42160],{"class":2239},[398,46514,409],{"class":408},[398,46516,30971],{"class":2239},[398,46518,960],{"class":408},[398,46520,30976],{"class":2239},[398,46522,30979],{"class":408},[398,46524,46525],{"class":400,"line":2875},[398,46526,42175],{"class":467},[398,46528,46529,46531,46533],{"class":400,"line":2880},[398,46530,30994],{"class":404},[398,46532,30997],{"class":457},[398,46534,42184],{"class":408},[398,46536,46537,46539,46541,46543,46545,46547],{"class":400,"line":2886},[398,46538,31010],{"class":457},[398,46540,42191],{"class":408},[398,46542,31016],{"class":457},[398,46544,31019],{"class":408},[398,46546,31022],{"class":457},[398,46548,2252],{"class":408},[398,46550,46551,46553,46555,46557],{"class":400,"line":2892},[398,46552,31038],{"class":457},[398,46554,42206],{"class":408},[398,46556,454],{"class":404},[398,46558,38202],{"class":408},[398,46560,46561,46563,46565,46567,46569,46571,46573,46575,46577,46579,46581,46583,46585,46587,46589,46591,46593,46595,46597,46599,46601],{"class":400,"line":2897},[398,46562,38207],{"class":408},[398,46564,31049],{"class":5493},[398,46566,454],{"class":404},[398,46568,480],{"class":457},[398,46570,780],{"class":408},[398,46572,31058],{"class":5493},[398,46574,454],{"class":404},[398,46576,605],{"class":457},[398,46578,780],{"class":408},[398,46580,31067],{"class":5493},[398,46582,454],{"class":404},[398,46584,771],{"class":457},[398,46586,780],{"class":408},[398,46588,31122],{"class":5493},[398,46590,454],{"class":404},[398,46592,486],{"class":457},[398,46594,780],{"class":408},[398,46596,31076],{"class":5493},[398,46598,454],{"class":404},[398,46600,480],{"class":457},[398,46602,38240],{"class":408},[398,46604,46605],{"class":400,"line":8225},[398,46606,38245],{"class":408},[398,46608,46609,46611,46613,46615,46617,46619,46621,46623,46625,46627,46629,46631,46633],{"class":400,"line":8249},[398,46610,38290],{"class":408},[398,46612,31067],{"class":5493},[398,46614,454],{"class":404},[398,46616,480],{"class":457},[398,46618,780],{"class":408},[398,46620,31122],{"class":5493},[398,46622,454],{"class":404},[398,46624,486],{"class":457},[398,46626,780],{"class":408},[398,46628,31076],{"class":5493},[398,46630,454],{"class":404},[398,46632,619],{"class":457},[398,46634,415],{"class":408},[398,46636,46637],{"class":400,"line":8254},[398,46638,38319],{"class":408},[398,46640,46641,46643,46645,46647],{"class":400,"line":8260},[398,46642,31038],{"class":457},[398,46644,42297],{"class":408},[398,46646,454],{"class":404},[398,46648,38202],{"class":408},[398,46650,46651,46653,46655,46657,46659,46661,46663,46665,46667,46669,46671,46673,46675],{"class":400,"line":8287},[398,46652,38207],{"class":408},[398,46654,31049],{"class":5493},[398,46656,454],{"class":404},[398,46658,605],{"class":457},[398,46660,780],{"class":408},[398,46662,31058],{"class":5493},[398,46664,454],{"class":404},[398,46666,605],{"class":457},[398,46668,780],{"class":408},[398,46670,31067],{"class":5493},[398,46672,454],{"class":404},[398,46674,619],{"class":457},[398,46676,38240],{"class":408},[398,46678,46679],{"class":400,"line":8292},[398,46680,38245],{"class":408},[398,46682,46683,46685,46687,46689,46691,46693,46695,46697,46699,46701,46703,46705,46707,46709,46711,46713,46715],{"class":400,"line":8298},[398,46684,38207],{"class":408},[398,46686,31049],{"class":5493},[398,46688,454],{"class":404},[398,46690,605],{"class":457},[398,46692,780],{"class":408},[398,46694,31058],{"class":5493},[398,46696,454],{"class":404},[398,46698,42352],{"class":457},[398,46700,780],{"class":408},[398,46702,31067],{"class":5493},[398,46704,454],{"class":404},[398,46706,480],{"class":457},[398,46708,780],{"class":408},[398,46710,31076],{"class":5493},[398,46712,454],{"class":404},[398,46714,619],{"class":457},[398,46716,38240],{"class":408},[398,46718,46719],{"class":400,"line":8310},[398,46720,38245],{"class":408},[398,46722,46723,46725,46727,46729,46731,46733,46735,46737,46739,46741,46743,46745,46747],{"class":400,"line":8322},[398,46724,38290],{"class":408},[398,46726,31067],{"class":5493},[398,46728,454],{"class":404},[398,46730,480],{"class":457},[398,46732,780],{"class":408},[398,46734,31122],{"class":5493},[398,46736,454],{"class":404},[398,46738,486],{"class":457},[398,46740,780],{"class":408},[398,46742,31076],{"class":5493},[398,46744,454],{"class":404},[398,46746,619],{"class":457},[398,46748,415],{"class":408},[398,46750,46751],{"class":400,"line":8334},[398,46752,38319],{"class":408},[398,46754,46755,46757,46759,46761],{"class":400,"line":9993},[398,46756,31038],{"class":457},[398,46758,42413],{"class":408},[398,46760,454],{"class":404},[398,46762,38202],{"class":408},[398,46764,46765,46767,46769,46771,46773,46775,46777,46779,46781,46783,46785,46787,46789,46791,46793],{"class":400,"line":10018},[398,46766,42422],{"class":408},[398,46768,42352],{"class":457},[398,46770,780],{"class":408},[398,46772,605],{"class":457},[398,46774,42431],{"class":408},[398,46776,611],{"class":457},[398,46778,780],{"class":408},[398,46780,32263],{"class":457},[398,46782,42440],{"class":408},[398,46784,1003],{"class":457},[398,46786,780],{"class":408},[398,46788,599],{"class":457},[398,46790,42449],{"class":408},[398,46792,599],{"class":457},[398,46794,38240],{"class":408},[398,46796,46797,46799,46801,46803,46805,46807,46809,46811,46813,46815,46817,46819,46821,46823,46825],{"class":400,"line":10041},[398,46798,42422],{"class":408},[398,46800,35063],{"class":457},[398,46802,780],{"class":408},[398,46804,32263],{"class":457},[398,46806,42431],{"class":408},[398,46808,32263],{"class":457},[398,46810,780],{"class":408},[398,46812,42352],{"class":457},[398,46814,42440],{"class":408},[398,46816,599],{"class":457},[398,46818,780],{"class":408},[398,46820,611],{"class":457},[398,46822,42449],{"class":408},[398,46824,605],{"class":457},[398,46826,38240],{"class":408},[398,46828,46829,46831,46833,46835,46837,46839,46841,46843,46845,46847,46849,46851,46853],{"class":400,"line":10065},[398,46830,38290],{"class":408},[398,46832,31067],{"class":5493},[398,46834,454],{"class":404},[398,46836,480],{"class":457},[398,46838,780],{"class":408},[398,46840,31122],{"class":5493},[398,46842,454],{"class":404},[398,46844,486],{"class":457},[398,46846,780],{"class":408},[398,46848,31076],{"class":5493},[398,46850,454],{"class":404},[398,46852,619],{"class":457},[398,46854,415],{"class":408},[398,46856,46857],{"class":400,"line":10070},[398,46858,38319],{"class":408},[398,46860,46861,46863,46865,46867],{"class":400,"line":10075},[398,46862,31038],{"class":457},[398,46864,42524],{"class":408},[398,46866,454],{"class":404},[398,46868,38202],{"class":408},[398,46870,46871,46873,46875,46877,46879,46881,46883,46885,46887,46889,46891,46893,46895,46897,46899],{"class":400,"line":10080},[398,46872,42422],{"class":408},[398,46874,42535],{"class":457},[398,46876,780],{"class":408},[398,46878,42352],{"class":457},[398,46880,42431],{"class":408},[398,46882,611],{"class":457},[398,46884,780],{"class":408},[398,46886,42548],{"class":457},[398,46888,42440],{"class":408},[398,46890,1003],{"class":457},[398,46892,780],{"class":408},[398,46894,1009],{"class":457},[398,46896,42449],{"class":408},[398,46898,605],{"class":457},[398,46900,38240],{"class":408},[398,46902,46903,46905,46907,46909,46911,46913,46915,46917,46919,46921,46923,46925,46927,46929,46931],{"class":400,"line":10089},[398,46904,42422],{"class":408},[398,46906,38650],{"class":457},[398,46908,780],{"class":408},[398,46910,21325],{"class":457},[398,46912,42431],{"class":408},[398,46914,1020],{"class":457},[398,46916,780],{"class":408},[398,46918,31694],{"class":457},[398,46920,42440],{"class":408},[398,46922,1202],{"class":457},[398,46924,780],{"class":408},[398,46926,605],{"class":457},[398,46928,42449],{"class":408},[398,46930,605],{"class":457},[398,46932,38240],{"class":408},[398,46934,46935,46937,46939,46941,46943,46945,46947,46949,46951,46953,46955,46957,46959,46961,46963],{"class":400,"line":10094},[398,46936,42422],{"class":408},[398,46938,38650],{"class":457},[398,46940,780],{"class":408},[398,46942,32263],{"class":457},[398,46944,42431],{"class":408},[398,46946,32263],{"class":457},[398,46948,780],{"class":408},[398,46950,35063],{"class":457},[398,46952,42440],{"class":408},[398,46954,1202],{"class":457},[398,46956,780],{"class":408},[398,46958,605],{"class":457},[398,46960,42449],{"class":408},[398,46962,605],{"class":457},[398,46964,38240],{"class":408},[398,46966,46967,46969,46971,46973,46975,46977,46979,46981,46983,46985,46987,46989,46991,46993,46995],{"class":400,"line":10100},[398,46968,42422],{"class":408},[398,46970,38650],{"class":457},[398,46972,780],{"class":408},[398,46974,1020],{"class":457},[398,46976,42431],{"class":408},[398,46978,32263],{"class":457},[398,46980,780],{"class":408},[398,46982,42645],{"class":457},[398,46984,42440],{"class":408},[398,46986,599],{"class":457},[398,46988,780],{"class":408},[398,46990,605],{"class":457},[398,46992,42449],{"class":408},[398,46994,605],{"class":457},[398,46996,38240],{"class":408},[398,46998,46999,47001,47003,47005,47007,47009,47011,47013,47015,47017,47019,47021,47023,47025,47027],{"class":400,"line":10121},[398,47000,42422],{"class":408},[398,47002,42666],{"class":457},[398,47004,780],{"class":408},[398,47006,35063],{"class":457},[398,47008,42431],{"class":408},[398,47010,21325],{"class":457},[398,47012,780],{"class":408},[398,47014,42679],{"class":457},[398,47016,42440],{"class":408},[398,47018,599],{"class":457},[398,47020,780],{"class":408},[398,47022,32263],{"class":457},[398,47024,42449],{"class":408},[398,47026,32263],{"class":457},[398,47028,38240],{"class":408},[398,47030,47031,47033,47035,47037,47039,47041,47043,47045,47047,47049,47051,47053,47055],{"class":400,"line":10127},[398,47032,38290],{"class":408},[398,47034,31067],{"class":5493},[398,47036,454],{"class":404},[398,47038,480],{"class":457},[398,47040,780],{"class":408},[398,47042,31122],{"class":5493},[398,47044,454],{"class":404},[398,47046,486],{"class":457},[398,47048,780],{"class":408},[398,47050,31076],{"class":5493},[398,47052,454],{"class":404},[398,47054,619],{"class":457},[398,47056,415],{"class":408},[398,47058,47059],{"class":400,"line":10141},[398,47060,38319],{"class":408},[398,47062,47063,47065,47067,47069],{"class":400,"line":10147},[398,47064,31038],{"class":457},[398,47066,42732],{"class":408},[398,47068,454],{"class":404},[398,47070,38202],{"class":408},[398,47072,47073,47075,47077,47079,47081,47083,47085,47087,47089,47091,47093,47095,47097,47099,47101],{"class":400,"line":10174},[398,47074,42422],{"class":408},[398,47076,42743],{"class":457},[398,47078,780],{"class":408},[398,47080,35063],{"class":457},[398,47082,42431],{"class":408},[398,47084,21325],{"class":457},[398,47086,780],{"class":408},[398,47088,42679],{"class":457},[398,47090,42440],{"class":408},[398,47092,599],{"class":457},[398,47094,780],{"class":408},[398,47096,32263],{"class":457},[398,47098,42449],{"class":408},[398,47100,32263],{"class":457},[398,47102,38240],{"class":408},[398,47104,47105,47107,47109,47111,47113,47115,47117,47119,47121,47123,47125,47127,47129,47131,47133],{"class":400,"line":10183},[398,47106,42422],{"class":408},[398,47108,42743],{"class":457},[398,47110,780],{"class":408},[398,47112,35133],{"class":457},[398,47114,42431],{"class":408},[398,47116,42352],{"class":457},[398,47118,780],{"class":408},[398,47120,35133],{"class":457},[398,47122,42440],{"class":408},[398,47124,1009],{"class":457},[398,47126,780],{"class":408},[398,47128,32263],{"class":457},[398,47130,42449],{"class":408},[398,47132,32263],{"class":457},[398,47134,38240],{"class":408},[398,47136,47137,47139,47141,47143,47145],{"class":400,"line":10189},[398,47138,42806],{"class":408},[398,47140,619],{"class":457},[398,47142,780],{"class":408},[398,47144,619],{"class":457},[398,47146,42815],{"class":408},[398,47148,47149],{"class":400,"line":10197},[398,47150,38983],{"class":408},[398,47152,47153,47155,47157,47159,47161],{"class":400,"line":10202},[398,47154,38988],{"class":408},[398,47156,42826],{"class":457},[398,47158,780],{"class":408},[398,47160,486],{"class":457},[398,47162,415],{"class":408},[398,47164,47165],{"class":400,"line":16881},[398,47166,38319],{"class":408},[398,47168,47169],{"class":400,"line":16887},[398,47170,42841],{"class":467},[398,47172,47173,47175,47177,47179,47181],{"class":400,"line":16910},[398,47174,3679],{"class":404},[398,47176,39061],{"class":408},[398,47178,26236],{"class":404},[398,47180,39066],{"class":457},[398,47182,39069],{"class":408},[398,47184,47185,47187,47189],{"class":400,"line":16916},[398,47186,4918],{"class":404},[398,47188,39081],{"class":457},[398,47190,39084],{"class":408},[398,47192,47193,47195,47197,47199,47201,47203,47205,47207,47209],{"class":400,"line":16939},[398,47194,39094],{"class":408},[398,47196,42868],{"class":5493},[398,47198,454],{"class":404},[398,47200,42873],{"class":513},[398,47202,780],{"class":408},[398,47204,39097],{"class":5493},[398,47206,454],{"class":404},[398,47208,39102],{"class":513},[398,47210,415],{"class":408},[398,47212,47213],{"class":400,"line":16953},[398,47214,42888],{"class":467},[398,47216,47217],{"class":400,"line":16973},[398,47218,42893],{"class":467},[398,47220,47221],{"class":400,"line":16979},[398,47222,42898],{"class":467},[398,47224,47225],{"class":400,"line":16990},[398,47226,42903],{"class":467},[398,47228,47229],{"class":400,"line":17013},[398,47230,42908],{"class":467},[398,47232,47233],{"class":400,"line":17035},[398,47234,42913],{"class":467},[398,47236,47237,47239,47241,47243,47245,47247],{"class":400,"line":17040},[398,47238,39114],{"class":404},[398,47240,39117],{"class":408},[398,47242,39120],{"class":404},[398,47244,39123],{"class":404},[398,47246,39126],{"class":457},[398,47248,4015],{"class":408},[398,47250,47251,47253,47255],{"class":400,"line":17046},[398,47252,39138],{"class":408},[398,47254,593],{"class":457},[398,47256,415],{"class":408},[398,47258,47259,47261,47263],{"class":400,"line":17060},[398,47260,42940],{"class":404},[398,47262,39081],{"class":457},[398,47264,39157],{"class":408},[398,47266,47267,47269,47271,47273,47275],{"class":400,"line":17073},[398,47268,42949],{"class":408},[398,47270,593],{"class":457},[398,47272,780],{"class":408},[398,47274,39179],{"class":457},[398,47276,415],{"class":408},[398,47278,47279,47281,47283,47285,47287,47289],{"class":400,"line":17078},[398,47280,42962],{"class":404},[398,47282,39117],{"class":408},[398,47284,39120],{"class":404},[398,47286,39123],{"class":404},[398,47288,39126],{"class":457},[398,47290,4015],{"class":408},[398,47292,47293,47295,47297],{"class":400,"line":17092},[398,47294,42977],{"class":408},[398,47296,593],{"class":457},[398,47298,415],{"class":408},[398,47300,47301],{"class":400,"line":17097},[398,47302,35358],{"class":467},[398,47304,47305,47307,47309],{"class":400,"line":17103},[398,47306,30994],{"class":404},[398,47308,31286],{"class":2239},[398,47310,31289],{"class":408},[398,47312,47313,47315,47317,47319],{"class":400,"line":17108},[398,47314,31294],{"class":408},[398,47316,454],{"class":404},[398,47318,31016],{"class":457},[398,47320,43004],{"class":408},[398,47322,47323,47325,47327,47329],{"class":400,"line":17122},[398,47324,31294],{"class":408},[398,47326,454],{"class":404},[398,47328,31016],{"class":457},[398,47330,43015],{"class":408},[398,47332,47333,47335,47337,47339],{"class":400,"line":17127},[398,47334,31294],{"class":408},[398,47336,454],{"class":404},[398,47338,31016],{"class":457},[398,47340,43026],{"class":408},[398,47342,47343,47345,47347,47349],{"class":400,"line":17132},[398,47344,31294],{"class":408},[398,47346,454],{"class":404},[398,47348,31016],{"class":457},[398,47350,43037],{"class":408},[398,47352,47353,47355,47357,47359],{"class":400,"line":17146},[398,47354,31294],{"class":408},[398,47356,454],{"class":404},[398,47358,31016],{"class":457},[398,47360,43048],{"class":408},[398,47362,47363,47365],{"class":400,"line":17158},[398,47364,15029],{"class":404},[398,47366,31402],{"class":408},[398,47368,47369],{"class":400,"line":17163},[398,47370,2676],{"emptyLinePlaceholder":328},[398,47372,47373],{"class":400,"line":17176},[398,47374,43063],{"class":467},[398,47376,47377,47379,47381,47383,47385],{"class":400,"line":17181},[398,47378,1807],{"class":404},[398,47380,31413],{"class":457},[398,47382,3225],{"class":404},[398,47384,31418],{"class":513},[398,47386,4015],{"class":408},[398,47388,47389,47391,47393,47395,47397,47399,47401,47403,47405],{"class":400,"line":17186},[398,47390,31430],{"class":408},[398,47392,454],{"class":404},[398,47394,30644],{"class":408},[398,47396,31437],{"class":513},[398,47398,1980],{"class":404},[398,47400,31442],{"class":408},[398,47402,1977],{"class":404},[398,47404,30669],{"class":513},[398,47406,415],{"class":408},[398,47408,47409,47411,47413],{"class":400,"line":17191},[398,47410,31482],{"class":408},[398,47412,454],{"class":404},[398,47414,43104],{"class":408},[398,47416,47417,47419,47421,47423,47425,47427,47429,47431],{"class":400,"line":17204},[398,47418,31492],{"class":457},[398,47420,31495],{"class":408},[398,47422,619],{"class":457},[398,47424,780],{"class":408},[398,47426,31694],{"class":457},[398,47428,780],{"class":408},[398,47430,31694],{"class":457},[398,47432,31508],{"class":408},[22275,47434,47436],{"id":47435},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,47438,47439],{},"计算图片的均值与方差，用于训练中归一化处理操作",[389,47441,47443],{"className":30571,"code":47442,"language":30573,"meta":316,"style":316},"# 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",[395,47444,47445,47450,47463,47468,47474,47479,47489,47493,47498,47508,47512,47517,47527,47544,47548,47553,47565,47577,47608,47617,47627,47637,47641,47646,47661,47665,47670,47675,47680,47690,47695,47720,47724,47729,47744,47748,47761,47765,47770,47775,47780,47785,47790,47800,47810,47833,47841,47849,47857,47861,47873,47877,47882,47886,47890,47897,47917,47941,47948,47962,47967,47972,47976,47990,47994,48006],{"__ignoreMap":316},[398,47446,47447],{"class":400,"line":401},[398,47448,47449],{"class":467},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[398,47451,47452,47454,47457,47460],{"class":400,"line":317},[398,47453,30930],{"class":404},[398,47455,47456],{"class":457}," PIL",[398,47458,47459],{"class":404}," import",[398,47461,47462],{"class":408}," Image\n",[398,47464,47465],{"class":400,"line":320},[398,47466,47467],{"class":467},"# os 用来处理文件夹和文件路径\n",[398,47469,47470,47472],{"class":400,"line":1470},[398,47471,30585],{"class":404},[398,47473,45498],{"class":408},[398,47475,47476],{"class":400,"line":1476},[398,47477,47478],{"class":467},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[398,47480,47481,47483,47485,47487],{"class":400,"line":1490},[398,47482,30585],{"class":404},[398,47484,31573],{"class":408},[398,47486,31576],{"class":404},[398,47488,31579],{"class":408},[398,47490,47491],{"class":400,"line":1496},[398,47492,2676],{"emptyLinePlaceholder":328},[398,47494,47495],{"class":400,"line":1587},[398,47496,47497],{"class":467},"# 文件夹路径，包含所有图片文件\n",[398,47499,47500,47503,47505],{"class":400,"line":1593},[398,47501,47502],{"class":408},"folder_path ",[398,47504,454],{"class":404},[398,47506,47507],{"class":513}," 'data_cat_dog'\n",[398,47509,47510],{"class":400,"line":1605},[398,47511,2676],{"emptyLinePlaceholder":328},[398,47513,47514],{"class":400,"line":1888},[398,47515,47516],{"class":467},"# 初始化累积变量\n",[398,47518,47519,47522,47524],{"class":400,"line":1893},[398,47520,47521],{"class":408},"total_pixels ",[398,47523,454],{"class":404},[398,47525,47526],{"class":457}," 0\n",[398,47528,47529,47532,47534,47537,47539,47541],{"class":400,"line":1899},[398,47530,47531],{"class":408},"sum_normalized_pixel_values ",[398,47533,454],{"class":404},[398,47535,47536],{"class":408}," np.zeros(",[398,47538,480],{"class":457},[398,47540,46001],{"class":408},[398,47542,47543],{"class":467},"# 如果是RGB图像，需要三个通道的均值和方差\n",[398,47545,47546],{"class":400,"line":1904},[398,47547,2676],{"emptyLinePlaceholder":328},[398,47549,47550],{"class":400,"line":1918},[398,47551,47552],{"class":467},"# 遍历文件夹中的图片文件\n",[398,47554,47555,47557,47560,47562],{"class":400,"line":1923},[398,47556,3301],{"class":404},[398,47558,47559],{"class":408}," root, dirs, files ",[398,47561,26236],{"class":404},[398,47563,47564],{"class":408}," os.walk(folder_path):\n",[398,47566,47567,47569,47572,47574],{"class":400,"line":1929},[398,47568,3477],{"class":404},[398,47570,47571],{"class":408}," filename ",[398,47573,26236],{"class":404},[398,47575,47576],{"class":408}," files:\n",[398,47578,47579,47581,47584,47587,47589,47592,47594,47597,47599,47602,47605],{"class":400,"line":1950},[398,47580,2773],{"class":404},[398,47582,47583],{"class":408}," filename.endswith((",[398,47585,47586],{"class":513},"'.jpg'",[398,47588,12712],{"class":408},[398,47590,47591],{"class":513},"'.jpeg'",[398,47593,12712],{"class":408},[398,47595,47596],{"class":513},"'.png'",[398,47598,12712],{"class":408},[398,47600,47601],{"class":513},"'.bmp'",[398,47603,47604],{"class":408},")):  ",[398,47606,47607],{"class":467},"# 可根据实际情况添加其他格式\n",[398,47609,47610,47612,47614],{"class":400,"line":1955},[398,47611,45866],{"class":408},[398,47613,454],{"class":404},[398,47615,47616],{"class":408}," os.path.join(root, filename)\n",[398,47618,47619,47622,47624],{"class":400,"line":1969},[398,47620,47621],{"class":408},"            image ",[398,47623,454],{"class":404},[398,47625,47626],{"class":408}," Image.open(image_path)\n",[398,47628,47629,47632,47634],{"class":400,"line":1974},[398,47630,47631],{"class":408},"            image_array ",[398,47633,454],{"class":404},[398,47635,47636],{"class":408}," np.array(image)\n",[398,47638,47639],{"class":400,"line":2003},[398,47640,2676],{"emptyLinePlaceholder":328},[398,47642,47643],{"class":400,"line":2008},[398,47644,47645],{"class":467},"            # 归一化像素值到0-1之间\n",[398,47647,47648,47651,47653,47656,47658],{"class":400,"line":2025},[398,47649,47650],{"class":408},"            normalized_image_array ",[398,47652,454],{"class":404},[398,47654,47655],{"class":408}," image_array ",[398,47657,986],{"class":404},[398,47659,47660],{"class":457}," 255.0\n",[398,47662,47663],{"class":400,"line":2030},[398,47664,2676],{"emptyLinePlaceholder":328},[398,47666,47667],{"class":400,"line":2035},[398,47668,47669],{"class":467},"            # print(image_path)\n",[398,47671,47672],{"class":400,"line":2040},[398,47673,47674],{"class":467},"            # print(normalized_image_array.shape)\n",[398,47676,47677],{"class":400,"line":2054},[398,47678,47679],{"class":467},"            # 累积归一化后的像素值和像素数量\n",[398,47681,47682,47685,47687],{"class":400,"line":2059},[398,47683,47684],{"class":408},"            total_pixels ",[398,47686,9754],{"class":404},[398,47688,47689],{"class":408}," normalized_image_array.size\n",[398,47691,47692],{"class":400,"line":2853},[398,47693,47694],{"class":467},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[398,47696,47697,47700,47702,47705,47708,47710,47712,47714,47716,47718],{"class":400,"line":2867},[398,47698,47699],{"class":408},"            sum_normalized_pixel_values ",[398,47701,9754],{"class":404},[398,47703,47704],{"class":408}," np.sum(normalized_image_array, ",[398,47706,47707],{"class":5493},"axis",[398,47709,454],{"class":404},[398,47711,409],{"class":408},[398,47713,593],{"class":457},[398,47715,12712],{"class":408},[398,47717,619],{"class":457},[398,47719,30690],{"class":408},[398,47721,47722],{"class":400,"line":2875},[398,47723,2676],{"emptyLinePlaceholder":328},[398,47725,47726],{"class":400,"line":2880},[398,47727,47728],{"class":467},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[398,47730,47731,47734,47736,47739,47741],{"class":400,"line":2886},[398,47732,47733],{"class":408},"mean ",[398,47735,454],{"class":404},[398,47737,47738],{"class":408}," sum_normalized_pixel_values ",[398,47740,986],{"class":404},[398,47742,47743],{"class":408}," total_pixels\n",[398,47745,47746],{"class":400,"line":2892},[398,47747,2676],{"emptyLinePlaceholder":328},[398,47749,47750,47753,47755,47757,47759],{"class":400,"line":2897},[398,47751,47752],{"class":408},"sum_squared_diff ",[398,47754,454],{"class":404},[398,47756,47536],{"class":408},[398,47758,480],{"class":457},[398,47760,415],{"class":408},[398,47762,47763],{"class":400,"line":8225},[398,47764,2676],{"emptyLinePlaceholder":328},[398,47766,47767],{"class":400,"line":8249},[398,47768,47769],{"class":467},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[398,47771,47772],{"class":400,"line":8254},[398,47773,47774],{"class":467},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[398,47776,47777],{"class":400,"line":8260},[398,47778,47779],{"class":467},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[398,47781,47782],{"class":400,"line":8287},[398,47783,47784],{"class":467},"# Image.open(image_path)：打开图片\n",[398,47786,47787],{"class":400,"line":8292},[398,47788,47789],{"class":467},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[398,47791,47792,47794,47796,47798],{"class":400,"line":8298},[398,47793,3301],{"class":404},[398,47795,47559],{"class":408},[398,47797,26236],{"class":404},[398,47799,47564],{"class":408},[398,47801,47802,47804,47806,47808],{"class":400,"line":8310},[398,47803,3477],{"class":404},[398,47805,47571],{"class":408},[398,47807,26236],{"class":404},[398,47809,47576],{"class":408},[398,47811,47812,47814,47816,47818,47820,47822,47824,47826,47828,47830],{"class":400,"line":8322},[398,47813,2773],{"class":404},[398,47815,47583],{"class":408},[398,47817,47586],{"class":513},[398,47819,12712],{"class":408},[398,47821,47591],{"class":513},[398,47823,12712],{"class":408},[398,47825,47596],{"class":513},[398,47827,12712],{"class":408},[398,47829,47601],{"class":513},[398,47831,47832],{"class":408},")):\n",[398,47834,47835,47837,47839],{"class":400,"line":8334},[398,47836,45866],{"class":408},[398,47838,454],{"class":404},[398,47840,47616],{"class":408},[398,47842,47843,47845,47847],{"class":400,"line":9993},[398,47844,47621],{"class":408},[398,47846,454],{"class":404},[398,47848,47626],{"class":408},[398,47850,47851,47853,47855],{"class":400,"line":10018},[398,47852,47631],{"class":408},[398,47854,454],{"class":404},[398,47856,47636],{"class":408},[398,47858,47859],{"class":400,"line":10041},[398,47860,47645],{"class":467},[398,47862,47863,47865,47867,47869,47871],{"class":400,"line":10065},[398,47864,47650],{"class":408},[398,47866,454],{"class":404},[398,47868,47655],{"class":408},[398,47870,986],{"class":404},[398,47872,47660],{"class":457},[398,47874,47875],{"class":400,"line":10070},[398,47876,47674],{"class":467},[398,47878,47879],{"class":400,"line":10075},[398,47880,47881],{"class":467},"            # print(mean.shape)\n",[398,47883,47884],{"class":400,"line":10080},[398,47885,47669],{"class":467},[398,47887,47888],{"class":400,"line":10089},[398,47889,2676],{"emptyLinePlaceholder":328},[398,47891,47892,47895],{"class":400,"line":10094},[398,47893,47894],{"class":404},"            try",[398,47896,4015],{"class":408},[398,47898,47899,47902,47904,47907,47909,47912,47914],{"class":400,"line":10100},[398,47900,47901],{"class":408},"                diff ",[398,47903,454],{"class":404},[398,47905,47906],{"class":408}," (normalized_image_array ",[398,47908,934],{"class":404},[398,47910,47911],{"class":408}," mean) ",[398,47913,10938],{"class":404},[398,47915,47916],{"class":457}," 2\n",[398,47918,47919,47922,47924,47927,47929,47931,47933,47935,47937,47939],{"class":400,"line":10121},[398,47920,47921],{"class":408},"                sum_squared_diff ",[398,47923,9754],{"class":404},[398,47925,47926],{"class":408}," np.sum(diff, ",[398,47928,47707],{"class":5493},[398,47930,454],{"class":404},[398,47932,409],{"class":408},[398,47934,593],{"class":457},[398,47936,12712],{"class":408},[398,47938,619],{"class":457},[398,47940,30690],{"class":408},[398,47942,47943,47946],{"class":400,"line":10127},[398,47944,47945],{"class":404},"            except",[398,47947,4015],{"class":408},[398,47949,47950,47953,47955,47957,47960],{"class":400,"line":10141},[398,47951,47952],{"class":457},"                print",[398,47954,409],{"class":408},[398,47956,461],{"class":404},[398,47958,47959],{"class":513},"\"捕获到自定义异常\"",[398,47961,415],{"class":408},[398,47963,47964],{"class":400,"line":10147},[398,47965,47966],{"class":467},"            # diff = (normalized_image_array - mean) ** 2\n",[398,47968,47969],{"class":400,"line":10174},[398,47970,47971],{"class":467},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[398,47973,47974],{"class":400,"line":10183},[398,47975,2676],{"emptyLinePlaceholder":328},[398,47977,47978,47981,47983,47986,47988],{"class":400,"line":10189},[398,47979,47980],{"class":408},"variance ",[398,47982,454],{"class":404},[398,47984,47985],{"class":408}," sum_squared_diff ",[398,47987,986],{"class":404},[398,47989,47743],{"class":408},[398,47991,47992],{"class":400,"line":10197},[398,47993,2676],{"emptyLinePlaceholder":328},[398,47995,47996,47998,48000,48003],{"class":400,"line":10202},[398,47997,30608],{"class":457},[398,47999,409],{"class":408},[398,48001,48002],{"class":513},"\"Mean:\"",[398,48004,48005],{"class":408},", mean)\n",[398,48007,48008,48010,48012,48015],{"class":400,"line":16881},[398,48009,30608],{"class":457},[398,48011,409],{"class":408},[398,48013,48014],{"class":513},"\"Variance:\"",[398,48016,48017],{"class":408},", variance)\n",[389,48019,48021],{"className":30571,"code":48020,"language":30573,"meta":316,"style":316},"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",[395,48022,48023,48029,48035,48045,48051,48061,48075,48085,48095,48105,48109,48119,48129,48133,48137,48145,48150,48155,48174,48178,48183,48188,48193,48198,48239,48244,48254,48259,48272,48277,48282,48287,48292,48297,48301,48306,48311,48333,48337,48369,48383,48393,48403,48407,48417,48431,48441,48451,48461,48467,48471,48475,48479,48483,48487,48495,48515,48519,48523,48527,48531,48547,48551,48555,48563,48567,48571,48579,48583,48587,48591,48599,48603,48607,48611,48619,48623,48631,48635,48643,48647,48655,48659,48667,48671,48675,48683,48687,48691,48703,48727,48741,48745,48749,48753,48761,48765,48773,48777,48785,48789,48797,48801,48809,48813,48821,48825,48837,48841,48849,48853,48861,48865,48869,48873,48877,48885,48889,48905,48909,48917,48921,48925,48929,48933,48937,48941,48945,48961,48965,48977,48981,48993,48997,49009,49013,49021,49025,49033,49037,49041,49045,49051,49055,49063,49067,49083,49087,49095,49099,49115,49127,49131,49143,49147,49151,49159,49163,49167,49175,49179,49187,49191,49199,49203,49207,49249,49291,49295,49299,49315,49319,49335,49339,49343,49351,49355,49359,49371,49409,49413,49417,49425,49429,49443,49453,49459,49465,49471,49477,49481,49485,49491,49495,49499,49507,49511,49529,49533,49537,49541,49557,49561,49565,49569,49573,49577,49597,49617,49621,49625,49629,49637,49645,49649,49665,49685,49705,49709,49714,49723,49732,49737,49742,49747,49760,49765,49774,49783,49800],{"__ignoreMap":316},[398,48024,48025,48027],{"class":400,"line":401},[398,48026,30585],{"class":404},[398,48028,32015],{"class":408},[398,48030,48031,48033],{"class":400,"line":317},[398,48032,30585],{"class":404},[398,48034,32022],{"class":408},[398,48036,48037,48039,48041,48043],{"class":400,"line":320},[398,48038,30585],{"class":404},[398,48040,32033],{"class":408},[398,48042,31576],{"class":404},[398,48044,32038],{"class":408},[398,48046,48047,48049],{"class":400,"line":1470},[398,48048,30585],{"class":404},[398,48050,30588],{"class":408},[398,48052,48053,48055,48057,48059],{"class":400,"line":1476},[398,48054,30930],{"class":404},[398,48056,31608],{"class":408},[398,48058,30585],{"class":404},[398,48060,32055],{"class":408},[398,48062,48063,48065,48067,48069,48072],{"class":400,"line":1490},[398,48064,30930],{"class":404},[398,48066,31561],{"class":408},[398,48068,30585],{"class":404},[398,48070,48071],{"class":408}," ImageFolder ",[398,48073,48074],{"class":467},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[398,48076,48077,48079,48081,48083],{"class":400,"line":1496},[398,48078,30930],{"class":404},[398,48080,31591],{"class":408},[398,48082,30585],{"class":404},[398,48084,31596],{"class":408},[398,48086,48087,48089,48091,48093],{"class":400,"line":1587},[398,48088,30585],{"class":404},[398,48090,31608],{"class":408},[398,48092,31576],{"class":404},[398,48094,31613],{"class":408},[398,48096,48097,48099,48101,48103],{"class":400,"line":1593},[398,48098,30585],{"class":404},[398,48100,31625],{"class":408},[398,48102,31576],{"class":404},[398,48104,31630],{"class":408},[398,48106,48107],{"class":400,"line":1605},[398,48108,32100],{"class":467},[398,48110,48111,48113,48115,48117],{"class":400,"line":1888},[398,48112,30930],{"class":404},[398,48114,32107],{"class":408},[398,48116,30585],{"class":404},[398,48118,43224],{"class":408},[398,48120,48121,48123,48125,48127],{"class":400,"line":1893},[398,48122,30930],{"class":404},[398,48124,30933],{"class":408},[398,48126,30585],{"class":404},[398,48128,30938],{"class":408},[398,48130,48131],{"class":400,"line":1899},[398,48132,2676],{"emptyLinePlaceholder":328},[398,48134,48135],{"class":400,"line":1904},[398,48136,32135],{"class":467},[398,48138,48139,48141,48143],{"class":400,"line":1918},[398,48140,32140],{"class":404},[398,48142,32143],{"class":2239},[398,48144,32146],{"class":408},[398,48146,48147],{"class":400,"line":1923},[398,48148,48149],{"class":467},"    # 导入自己的数据集，并进行数据处理\n",[398,48151,48152],{"class":400,"line":1929},[398,48153,48154],{"class":467},"    # 定义数据集的路径\n",[398,48156,48157,48160,48162,48164,48166,48168,48172],{"class":400,"line":1950},[398,48158,48159],{"class":457},"    ROOT_PATH",[398,48161,454],{"class":404},[398,48163,1072],{"class":404},[398,48165,653],{"class":513},[398,48167,960],{"class":457},[398,48169,48171],{"class":48170},"sA_wV","\u002Fdata\u002Ftrain",[398,48173,25411],{"class":513},[398,48175,48176],{"class":400,"line":1955},[398,48177,2676],{"emptyLinePlaceholder":328},[398,48179,48180],{"class":400,"line":1969},[398,48181,48182],{"class":467},"    # 定义归一化方法\n",[398,48184,48185],{"class":400,"line":1974},[398,48186,48187],{"class":467},"    # 这里需要先计算一下数据集的均值和方差\n",[398,48189,48190],{"class":400,"line":2003},[398,48191,48192],{"class":467},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[398,48194,48195],{"class":400,"line":2008},[398,48196,48197],{"class":467},"    # 第一个参数是均值，第二个参数是方差\n",[398,48199,48200,48203,48205,48208,48211,48213,48216,48218,48221,48224,48227,48229,48232,48234,48237],{"class":400,"line":2025},[398,48201,48202],{"class":408},"    normalize",[398,48204,454],{"class":404},[398,48206,48207],{"class":408},"transforms.Normalize([",[398,48209,48210],{"class":457},"0.162",[398,48212,780],{"class":408},[398,48214,48215],{"class":457},"0.151",[398,48217,780],{"class":408},[398,48219,48220],{"class":457},"0.138",[398,48222,48223],{"class":408},"],[",[398,48225,48226],{"class":457},"0.058",[398,48228,780],{"class":408},[398,48230,48231],{"class":457},"0.052",[398,48233,780],{"class":408},[398,48235,48236],{"class":457},"0.048",[398,48238,4933],{"class":408},[398,48240,48241],{"class":400,"line":2030},[398,48242,48243],{"class":467},"    # 定义数据集处理方法变量\n",[398,48245,48246,48249,48251],{"class":400,"line":2035},[398,48247,48248],{"class":408},"    train_transform",[398,48250,454],{"class":404},[398,48252,48253],{"class":408},"transforms.Compose([\n",[398,48255,48256],{"class":400,"line":2040},[398,48257,48258],{"class":467},"        # 调整图像大小为224*224\n",[398,48260,48261,48264,48266,48268,48270],{"class":400,"line":2054},[398,48262,48263],{"class":408},"        transforms.Resize((",[398,48265,31694],{"class":457},[398,48267,780],{"class":408},[398,48269,31694],{"class":457},[398,48271,42815],{"class":408},[398,48273,48274],{"class":400,"line":2059},[398,48275,48276],{"class":467},"        # 将图像转换为张量\n",[398,48278,48279],{"class":400,"line":2853},[398,48280,48281],{"class":408},"        transforms.ToTensor(),\n",[398,48283,48284],{"class":400,"line":2867},[398,48285,48286],{"class":408},"        normalize])\n",[398,48288,48289],{"class":400,"line":2875},[398,48290,48291],{"class":467},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[398,48293,48294],{"class":400,"line":2880},[398,48295,48296],{"class":467},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[398,48298,48299],{"class":400,"line":2886},[398,48300,2676],{"emptyLinePlaceholder":328},[398,48302,48303],{"class":400,"line":2892},[398,48304,48305],{"class":467},"    # 加载数据集\n",[398,48307,48308],{"class":400,"line":2897},[398,48309,48310],{"class":467},"    # 传入数据集路径与处理方法\n",[398,48312,48313,48315,48317,48320,48323,48325,48328,48330],{"class":400,"line":8225},[398,48314,32151],{"class":408},[398,48316,454],{"class":404},[398,48318,48319],{"class":408},"ImageFolder(",[398,48321,48322],{"class":457},"ROOT_PATH",[398,48324,780],{"class":408},[398,48326,48327],{"class":5493},"transform",[398,48329,454],{"class":404},[398,48331,48332],{"class":408},"train_transform)\n",[398,48334,48335],{"class":400,"line":8249},[398,48336,2676],{"emptyLinePlaceholder":328},[398,48338,48339,48341,48343,48345,48347,48349,48351,48353,48355,48357,48359,48361,48363,48365,48367],{"class":400,"line":8254},[398,48340,32203],{"class":408},[398,48342,454],{"class":404},[398,48344,32208],{"class":408},[398,48346,32211],{"class":457},[398,48348,409],{"class":408},[398,48350,32216],{"class":457},[398,48352,857],{"class":404},[398,48354,7635],{"class":457},[398,48356,32223],{"class":408},[398,48358,32211],{"class":457},[398,48360,409],{"class":408},[398,48362,32230],{"class":457},[398,48364,857],{"class":404},[398,48366,7635],{"class":457},[398,48368,32237],{"class":408},[398,48370,48371,48373,48375,48377,48379,48381],{"class":400,"line":8260},[398,48372,32242],{"class":408},[398,48374,454],{"class":404},[398,48376,32247],{"class":408},[398,48378,31730],{"class":5493},[398,48380,454],{"class":404},[398,48382,31735],{"class":408},[398,48384,48385,48387,48389,48391],{"class":400,"line":8287},[398,48386,32258],{"class":5493},[398,48388,454],{"class":404},[398,48390,599],{"class":457},[398,48392,31659],{"class":408},[398,48394,48395,48397,48399,48401],{"class":400,"line":8292},[398,48396,32270],{"class":5493},[398,48398,454],{"class":404},[398,48400,31669],{"class":457},[398,48402,31659],{"class":408},[398,48404,48405],{"class":400,"line":8298},[398,48406,32281],{"class":467},[398,48408,48409,48411,48413,48415],{"class":400,"line":8310},[398,48410,32286],{"class":5493},[398,48412,454],{"class":404},[398,48414,797],{"class":457},[398,48416,415],{"class":408},[398,48418,48419,48421,48423,48425,48427,48429],{"class":400,"line":8322},[398,48420,32297],{"class":408},[398,48422,454],{"class":404},[398,48424,31727],{"class":408},[398,48426,31730],{"class":5493},[398,48428,454],{"class":404},[398,48430,32308],{"class":408},[398,48432,48433,48435,48437,48439],{"class":400,"line":8334},[398,48434,32313],{"class":5493},[398,48436,454],{"class":404},[398,48438,599],{"class":457},[398,48440,31659],{"class":408},[398,48442,48443,48445,48447,48449],{"class":400,"line":9993},[398,48444,32324],{"class":5493},[398,48446,454],{"class":404},[398,48448,31669],{"class":457},[398,48450,31659],{"class":408},[398,48452,48453,48455,48457,48459],{"class":400,"line":10018},[398,48454,32335],{"class":5493},[398,48456,454],{"class":404},[398,48458,797],{"class":457},[398,48460,415],{"class":408},[398,48462,48463,48465],{"class":400,"line":10041},[398,48464,4366],{"class":404},[398,48466,32348],{"class":408},[398,48468,48469],{"class":400,"line":10065},[398,48470,2676],{"emptyLinePlaceholder":328},[398,48472,48473],{"class":400,"line":10070},[398,48474,32357],{"class":467},[398,48476,48477],{"class":400,"line":10075},[398,48478,32362],{"class":467},[398,48480,48481],{"class":400,"line":10080},[398,48482,2676],{"emptyLinePlaceholder":328},[398,48484,48485],{"class":400,"line":10089},[398,48486,32371],{"class":467},[398,48488,48489,48491,48493],{"class":400,"line":10094},[398,48490,32140],{"class":404},[398,48492,32378],{"class":2239},[398,48494,32381],{"class":408},[398,48496,48497,48499,48501,48503,48505,48507,48509,48511,48513],{"class":400,"line":10100},[398,48498,31430],{"class":408},[398,48500,454],{"class":404},[398,48502,30644],{"class":408},[398,48504,31437],{"class":513},[398,48506,1980],{"class":404},[398,48508,31442],{"class":408},[398,48510,1977],{"class":404},[398,48512,32400],{"class":513},[398,48514,415],{"class":408},[398,48516,48517],{"class":400,"line":10121},[398,48518,2676],{"emptyLinePlaceholder":328},[398,48520,48521],{"class":400,"line":10127},[398,48522,32415],{"class":467},[398,48524,48525],{"class":400,"line":10141},[398,48526,32420],{"class":467},[398,48528,48529],{"class":400,"line":10147},[398,48530,32425],{"class":467},[398,48532,48533,48535,48537,48539,48541,48543,48545],{"class":400,"line":10174},[398,48534,32430],{"class":408},[398,48536,454],{"class":404},[398,48538,32435],{"class":408},[398,48540,32438],{"class":5493},[398,48542,454],{"class":404},[398,48544,32443],{"class":457},[398,48546,415],{"class":408},[398,48548,48549],{"class":400,"line":10183},[398,48550,2676],{"emptyLinePlaceholder":328},[398,48552,48553],{"class":400,"line":10189},[398,48554,32454],{"class":467},[398,48556,48557,48559,48561],{"class":400,"line":10197},[398,48558,32459],{"class":408},[398,48560,454],{"class":404},[398,48562,32464],{"class":408},[398,48564,48565],{"class":400,"line":10202},[398,48566,2676],{"emptyLinePlaceholder":328},[398,48568,48569],{"class":400,"line":16881},[398,48570,32473],{"class":467},[398,48572,48573,48575,48577],{"class":400,"line":16887},[398,48574,31482],{"class":408},[398,48576,454],{"class":404},[398,48578,32482],{"class":408},[398,48580,48581],{"class":400,"line":16910},[398,48582,32487],{"class":467},[398,48584,48585],{"class":400,"line":16916},[398,48586,32492],{"class":467},[398,48588,48589],{"class":400,"line":16939},[398,48590,32497],{"class":467},[398,48592,48593,48595,48597],{"class":400,"line":16953},[398,48594,32502],{"class":408},[398,48596,454],{"class":404},[398,48598,32507],{"class":408},[398,48600,48601],{"class":400,"line":16973},[398,48602,2676],{"emptyLinePlaceholder":328},[398,48604,48605],{"class":400,"line":16979},[398,48606,32520],{"class":467},[398,48608,48609],{"class":400,"line":16990},[398,48610,32525],{"class":467},[398,48612,48613,48615,48617],{"class":400,"line":17013},[398,48614,32530],{"class":408},[398,48616,454],{"class":404},[398,48618,32535],{"class":457},[398,48620,48621],{"class":400,"line":17035},[398,48622,32540],{"class":467},[398,48624,48625,48627,48629],{"class":400,"line":17040},[398,48626,32545],{"class":408},[398,48628,454],{"class":404},[398,48630,32550],{"class":408},[398,48632,48633],{"class":400,"line":17046},[398,48634,32555],{"class":467},[398,48636,48637,48639,48641],{"class":400,"line":17060},[398,48638,32560],{"class":408},[398,48640,454],{"class":404},[398,48642,32550],{"class":408},[398,48644,48645],{"class":400,"line":17073},[398,48646,32569],{"class":467},[398,48648,48649,48651,48653],{"class":400,"line":17078},[398,48650,32574],{"class":408},[398,48652,454],{"class":404},[398,48654,32550],{"class":408},[398,48656,48657],{"class":400,"line":17092},[398,48658,32583],{"class":467},[398,48660,48661,48663,48665],{"class":400,"line":17097},[398,48662,32588],{"class":408},[398,48664,454],{"class":404},[398,48666,32550],{"class":408},[398,48668,48669],{"class":400,"line":17103},[398,48670,2676],{"emptyLinePlaceholder":328},[398,48672,48673],{"class":400,"line":17108},[398,48674,32601],{"class":467},[398,48676,48677,48679,48681],{"class":400,"line":17122},[398,48678,32606],{"class":408},[398,48680,454],{"class":404},[398,48682,32611],{"class":408},[398,48684,48685],{"class":400,"line":17127},[398,48686,2676],{"emptyLinePlaceholder":328},[398,48688,48689],{"class":400,"line":17132},[398,48690,32624],{"class":467},[398,48692,48693,48695,48697,48699,48701],{"class":400,"line":17146},[398,48694,3477],{"class":404},[398,48696,32631],{"class":408},[398,48698,26236],{"class":404},[398,48700,32636],{"class":457},[398,48702,32639],{"class":408},[398,48704,48705,48707,48709,48711,48713,48715,48717,48719,48721,48723,48725],{"class":400,"line":17158},[398,48706,32644],{"class":457},[398,48708,409],{"class":408},[398,48710,32649],{"class":513},[398,48712,32652],{"class":457},[398,48714,986],{"class":513},[398,48716,32652],{"class":457},[398,48718,653],{"class":513},[398,48720,32661],{"class":408},[398,48722,934],{"class":404},[398,48724,619],{"class":457},[398,48726,30690],{"class":408},[398,48728,48729,48731,48733,48735,48737,48739],{"class":400,"line":17163},[398,48730,32644],{"class":457},[398,48732,409],{"class":408},[398,48734,32676],{"class":513},[398,48736,857],{"class":404},[398,48738,848],{"class":457},[398,48740,415],{"class":408},[398,48742,48743],{"class":400,"line":17176},[398,48744,2676],{"emptyLinePlaceholder":328},[398,48746,48747],{"class":400,"line":17181},[398,48748,32691],{"class":467},[398,48750,48751],{"class":400,"line":17186},[398,48752,32696],{"class":467},[398,48754,48755,48757,48759],{"class":400,"line":17191},[398,48756,32701],{"class":408},[398,48758,454],{"class":404},[398,48760,32535],{"class":457},[398,48762,48763],{"class":400,"line":17204},[398,48764,32710],{"class":467},[398,48766,48767,48769,48771],{"class":400,"line":17209},[398,48768,32715],{"class":408},[398,48770,454],{"class":404},[398,48772,3361],{"class":457},[398,48774,48775],{"class":400,"line":32826},[398,48776,32724],{"class":467},[398,48778,48779,48781,48783],{"class":400,"line":32832},[398,48780,32729],{"class":408},[398,48782,454],{"class":404},[398,48784,32535],{"class":457},[398,48786,48787],{"class":400,"line":32838},[398,48788,32738],{"class":467},[398,48790,48791,48793,48795],{"class":400,"line":32844},[398,48792,32743],{"class":408},[398,48794,454],{"class":404},[398,48796,3361],{"class":457},[398,48798,48799],{"class":400,"line":32850},[398,48800,32752],{"class":467},[398,48802,48803,48805,48807],{"class":400,"line":32861},[398,48804,32757],{"class":408},[398,48806,454],{"class":404},[398,48808,3361],{"class":457},[398,48810,48811],{"class":400,"line":32867},[398,48812,32766],{"class":467},[398,48814,48815,48817,48819],{"class":400,"line":32887},[398,48816,32771],{"class":408},[398,48818,454],{"class":404},[398,48820,3361],{"class":457},[398,48822,48823],{"class":400,"line":32893},[398,48824,32780],{"class":467},[398,48826,48827,48829,48831,48833,48835],{"class":400,"line":32904},[398,48828,3679],{"class":404},[398,48830,31794],{"class":408},[398,48832,26236],{"class":404},[398,48834,31799],{"class":457},[398,48836,32793],{"class":408},[398,48838,48839],{"class":400,"line":32910},[398,48840,32798],{"class":467},[398,48842,48843,48845,48847],{"class":400,"line":32916},[398,48844,32803],{"class":408},[398,48846,454],{"class":404},[398,48848,32808],{"class":408},[398,48850,48851],{"class":400,"line":32922},[398,48852,32813],{"class":467},[398,48854,48855,48857,48859],{"class":400,"line":32928},[398,48856,32818],{"class":408},[398,48858,454],{"class":404},[398,48860,32823],{"class":408},[398,48862,48863],{"class":400,"line":32934},[398,48864,32829],{"class":467},[398,48866,48867],{"class":400,"line":32940},[398,48868,32835],{"class":408},[398,48870,48871],{"class":400,"line":32946},[398,48872,32841],{"class":467},[398,48874,48875],{"class":400,"line":32966},[398,48876,32847],{"class":467},[398,48878,48879,48881,48883],{"class":400,"line":32972},[398,48880,32853],{"class":408},[398,48882,454],{"class":404},[398,48884,32858],{"class":408},[398,48886,48887],{"class":400,"line":32988},[398,48888,32864],{"class":467},[398,48890,48891,48893,48895,48897,48899,48901,48903],{"class":400,"line":32994},[398,48892,32870],{"class":408},[398,48894,454],{"class":404},[398,48896,32875],{"class":408},[398,48898,32878],{"class":5493},[398,48900,454],{"class":404},[398,48902,619],{"class":457},[398,48904,415],{"class":408},[398,48906,48907],{"class":400,"line":33008},[398,48908,32890],{"class":467},[398,48910,48911,48913,48915],{"class":400,"line":33014},[398,48912,32896],{"class":408},[398,48914,454],{"class":404},[398,48916,32901],{"class":408},[398,48918,48919],{"class":400,"line":33029},[398,48920,32907],{"class":467},[398,48922,48923],{"class":400,"line":33035},[398,48924,32913],{"class":408},[398,48926,48927],{"class":400,"line":33044},[398,48928,32919],{"class":467},[398,48930,48931],{"class":400,"line":33050},[398,48932,32925],{"class":408},[398,48934,48935],{"class":400,"line":33059},[398,48936,32931],{"class":467},[398,48938,48939],{"class":400,"line":33065},[398,48940,32937],{"class":408},[398,48942,48943],{"class":400,"line":33071},[398,48944,32943],{"class":467},[398,48946,48947,48949,48951,48953,48955,48957,48959],{"class":400,"line":33080},[398,48948,32949],{"class":408},[398,48950,9754],{"class":404},[398,48952,32954],{"class":408},[398,48954,857],{"class":404},[398,48956,32959],{"class":408},[398,48958,593],{"class":457},[398,48960,415],{"class":408},[398,48962,48963],{"class":400,"line":33086},[398,48964,32969],{"class":467},[398,48966,48967,48969,48971,48973,48975],{"class":400,"line":33097},[398,48968,32975],{"class":408},[398,48970,9754],{"class":404},[398,48972,32980],{"class":408},[398,48974,3225],{"class":404},[398,48976,32985],{"class":408},[398,48978,48979],{"class":400,"line":33103},[398,48980,32991],{"class":467},[398,48982,48983,48985,48987,48989,48991],{"class":400,"line":33122},[398,48984,32997],{"class":408},[398,48986,9754],{"class":404},[398,48988,32959],{"class":408},[398,48990,593],{"class":457},[398,48992,415],{"class":408},[398,48994,48995],{"class":400,"line":33128},[398,48996,33011],{"class":467},[398,48998,48999,49001,49003,49005,49007],{"class":400,"line":33139},[398,49000,3679],{"class":404},[398,49002,33019],{"class":408},[398,49004,26236],{"class":404},[398,49006,31799],{"class":457},[398,49008,33026],{"class":408},[398,49010,49011],{"class":400,"line":33145},[398,49012,33032],{"class":467},[398,49014,49015,49017,49019],{"class":400,"line":33165},[398,49016,32803],{"class":408},[398,49018,454],{"class":404},[398,49020,32808],{"class":408},[398,49022,49023],{"class":400,"line":33181},[398,49024,33047],{"class":467},[398,49026,49027,49029,49031],{"class":400,"line":33187},[398,49028,32818],{"class":408},[398,49030,454],{"class":404},[398,49032,32823],{"class":408},[398,49034,49035],{"class":400,"line":33201},[398,49036,33062],{"class":467},[398,49038,49039],{"class":400,"line":33207},[398,49040,33068],{"class":408},[398,49042,49043],{"class":400,"line":33213},[398,49044,36549],{"class":467},[398,49046,49047,49049],{"class":400,"line":33224},[398,49048,33074],{"class":404},[398,49050,33077],{"class":408},[398,49052,49053],{"class":400,"line":33230},[398,49054,33083],{"class":467},[398,49056,49057,49059,49061],{"class":400,"line":33236},[398,49058,36564],{"class":408},[398,49060,454],{"class":404},[398,49062,32858],{"class":408},[398,49064,49065],{"class":400,"line":33246},[398,49066,33100],{"class":467},[398,49068,49069,49071,49073,49075,49077,49079,49081],{"class":400,"line":33252},[398,49070,36577],{"class":408},[398,49072,454],{"class":404},[398,49074,32875],{"class":408},[398,49076,32878],{"class":5493},[398,49078,454],{"class":404},[398,49080,619],{"class":457},[398,49082,415],{"class":408},[398,49084,49085],{"class":400,"line":33263},[398,49086,33125],{"class":467},[398,49088,49089,49091,49093],{"class":400,"line":33269},[398,49090,36598],{"class":408},[398,49092,454],{"class":404},[398,49094,32901],{"class":408},[398,49096,49097],{"class":400,"line":33279},[398,49098,33142],{"class":467},[398,49100,49101,49103,49105,49107,49109,49111,49113],{"class":400,"line":33284},[398,49102,36611],{"class":408},[398,49104,9754],{"class":404},[398,49106,36616],{"class":408},[398,49108,857],{"class":404},[398,49110,32959],{"class":408},[398,49112,593],{"class":457},[398,49114,415],{"class":408},[398,49116,49117,49119,49121,49123,49125],{"class":400,"line":33290},[398,49118,36629],{"class":408},[398,49120,9754],{"class":404},[398,49122,32980],{"class":408},[398,49124,3225],{"class":404},[398,49126,32985],{"class":408},[398,49128,49129],{"class":400,"line":33339},[398,49130,36642],{"class":467},[398,49132,49133,49135,49137,49139,49141],{"class":400,"line":33386},[398,49134,36647],{"class":408},[398,49136,9754],{"class":404},[398,49138,32959],{"class":408},[398,49140,593],{"class":457},[398,49142,415],{"class":408},[398,49144,49145],{"class":400,"line":33391},[398,49146,33204],{"class":467},[398,49148,49149],{"class":400,"line":33397},[398,49150,33210],{"class":467},[398,49152,49153,49155,49157],{"class":400,"line":33416},[398,49154,33216],{"class":408},[398,49156,986],{"class":404},[398,49158,33221],{"class":408},[398,49160,49161],{"class":400,"line":33422},[398,49162,33227],{"class":467},[398,49164,49165],{"class":400,"line":33442},[398,49166,33233],{"class":467},[398,49168,49169,49171,49173],{"class":400,"line":33448},[398,49170,33239],{"class":408},[398,49172,986],{"class":404},[398,49174,33221],{"class":408},[398,49176,49177],{"class":400,"line":33454},[398,49178,33249],{"class":467},[398,49180,49181,49183,49185],{"class":400,"line":33464},[398,49182,33255],{"class":408},[398,49184,986],{"class":404},[398,49186,33260],{"class":408},[398,49188,49189],{"class":400,"line":33469},[398,49190,33266],{"class":467},[398,49192,49193,49195,49197],{"class":400,"line":33475},[398,49194,33272],{"class":408},[398,49196,986],{"class":404},[398,49198,33260],{"class":408},[398,49200,49201],{"class":400,"line":33491},[398,49202,2676],{"emptyLinePlaceholder":328},[398,49204,49205],{"class":400,"line":33536},[398,49206,33287],{"class":467},[398,49208,49209,49211,49213,49215,49217,49219,49221,49223,49225,49227,49229,49231,49233,49235,49237,49239,49241,49243,49245,49247],{"class":400,"line":33542},[398,49210,32644],{"class":457},[398,49212,409],{"class":408},[398,49214,3868],{"class":513},[398,49216,32652],{"class":457},[398,49218,33301],{"class":513},[398,49220,1298],{"class":457},[398,49222,33306],{"class":404},[398,49224,1348],{"class":457},[398,49226,33311],{"class":513},[398,49228,1298],{"class":457},[398,49230,33306],{"class":404},[398,49232,1348],{"class":457},[398,49234,3868],{"class":513},[398,49236,33322],{"class":408},[398,49238,934],{"class":404},[398,49240,619],{"class":457},[398,49242,33329],{"class":408},[398,49244,934],{"class":404},[398,49246,619],{"class":457},[398,49248,33336],{"class":408},[398,49250,49251,49253,49255,49257,49259,49261,49263,49265,49267,49269,49271,49273,49275,49277,49279,49281,49283,49285,49287,49289],{"class":400,"line":33548},[398,49252,32644],{"class":457},[398,49254,409],{"class":408},[398,49256,3868],{"class":513},[398,49258,32652],{"class":457},[398,49260,33350],{"class":513},[398,49262,1298],{"class":457},[398,49264,33306],{"class":404},[398,49266,1348],{"class":457},[398,49268,33359],{"class":513},[398,49270,1298],{"class":457},[398,49272,33306],{"class":404},[398,49274,1348],{"class":457},[398,49276,3868],{"class":513},[398,49278,33370],{"class":408},[398,49280,934],{"class":404},[398,49282,619],{"class":457},[398,49284,33377],{"class":408},[398,49286,934],{"class":404},[398,49288,619],{"class":457},[398,49290,33336],{"class":408},[398,49292,49293],{"class":400,"line":33554},[398,49294,2676],{"emptyLinePlaceholder":328},[398,49296,49297],{"class":400,"line":33565},[398,49298,33394],{"class":467},[398,49300,49301,49303,49305,49307,49309,49311,49313],{"class":400,"line":33571},[398,49302,2773],{"class":404},[398,49304,33402],{"class":408},[398,49306,934],{"class":404},[398,49308,619],{"class":457},[398,49310,1342],{"class":408},[398,49312,1362],{"class":404},[398,49314,33413],{"class":408},[398,49316,49317],{"class":400,"line":33577},[398,49318,33419],{"class":467},[398,49320,49321,49323,49325,49327,49329,49331,49333],{"class":400,"line":33583},[398,49322,33425],{"class":408},[398,49324,448],{"class":457},[398,49326,454],{"class":404},[398,49328,33432],{"class":408},[398,49330,934],{"class":404},[398,49332,619],{"class":457},[398,49334,33439],{"class":408},[398,49336,49337],{"class":400,"line":33601},[398,49338,33445],{"class":467},[398,49340,49341],{"class":400,"line":33615},[398,49342,33451],{"class":467},[398,49344,49345,49347,49349],{"class":400,"line":33624},[398,49346,33457],{"class":408},[398,49348,454],{"class":404},[398,49350,32507],{"class":408},[398,49352,49353],{"class":400,"line":33633},[398,49354,2676],{"emptyLinePlaceholder":328},[398,49356,49357],{"class":400,"line":33642},[398,49358,33472],{"class":467},[398,49360,49361,49363,49365,49367,49369],{"class":400,"line":33651},[398,49362,33478],{"class":408},[398,49364,454],{"class":404},[398,49366,33483],{"class":408},[398,49368,934],{"class":404},[398,49370,33488],{"class":408},[398,49372,49373,49375,49377,49379,49381,49383,49385,49387,49389,49391,49393,49395,49397,49399,49401,49403,49405,49407],{"class":400,"line":33657},[398,49374,32644],{"class":457},[398,49376,409],{"class":408},[398,49378,33498],{"class":513},[398,49380,1298],{"class":457},[398,49382,33503],{"class":404},[398,49384,1348],{"class":457},[398,49386,946],{"class":513},[398,49388,1298],{"class":457},[398,49390,33503],{"class":404},[398,49392,1348],{"class":457},[398,49394,33516],{"class":513},[398,49396,33519],{"class":408},[398,49398,33522],{"class":404},[398,49400,1309],{"class":457},[398,49402,33527],{"class":408},[398,49404,730],{"class":404},[398,49406,1309],{"class":457},[398,49408,30690],{"class":408},[398,49410,49411],{"class":400,"line":33663},[398,49412,36926],{"class":467},[398,49414,49415],{"class":400,"line":33671},[398,49416,36931],{"class":467},[398,49418,49419,49421,49423],{"class":400,"line":33676},[398,49420,36936],{"class":408},[398,49422,33560],{"class":513},[398,49424,415],{"class":408},[398,49426,49427],{"class":400,"line":33682},[398,49428,33580],{"class":467},[398,49430,49431,49433,49435,49437,49439,49441],{"class":400,"line":33693},[398,49432,33586],{"class":408},[398,49434,454],{"class":404},[398,49436,33591],{"class":408},[398,49438,33594],{"class":5493},[398,49440,454],{"class":404},[398,49442,1822],{"class":408},[398,49444,49445,49447,49449,49451],{"class":400,"line":33699},[398,49446,33604],{"class":513},[398,49448,1261],{"class":408},[398,49450,33609],{"class":457},[398,49452,33612],{"class":408},[398,49454,49455,49457],{"class":400,"line":33719},[398,49456,33618],{"class":513},[398,49458,33621],{"class":408},[398,49460,49461,49463],{"class":400,"line":33725},[398,49462,33627],{"class":513},[398,49464,33630],{"class":408},[398,49466,49467,49469],{"class":400,"line":33731},[398,49468,33636],{"class":513},[398,49470,33639],{"class":408},[398,49472,49473,49475],{"class":400,"line":33737},[398,49474,33645],{"class":513},[398,49476,33648],{"class":408},[398,49478,49479],{"class":400,"line":33754},[398,49480,33654],{"class":408},[398,49482,49483],{"class":400,"line":33760},[398,49484,33660],{"class":467},[398,49486,49487,49489],{"class":400,"line":33766},[398,49488,4366],{"class":404},[398,49490,33668],{"class":408},[398,49492,49493],{"class":400,"line":33772},[398,49494,2676],{"emptyLinePlaceholder":328},[398,49496,49497],{"class":400,"line":33778},[398,49498,33679],{"class":467},[398,49500,49501,49503,49505],{"class":400,"line":33784},[398,49502,32140],{"class":404},[398,49504,33687],{"class":2239},[398,49506,33690],{"class":408},[398,49508,49509],{"class":400,"line":33811},[398,49510,33696],{"class":467},[398,49512,49513,49515,49517,49519,49521,49523,49525,49527],{"class":400,"line":33835},[398,49514,33702],{"class":408},[398,49516,31886],{"class":5493},[398,49518,454],{"class":404},[398,49520,409],{"class":408},[398,49522,900],{"class":457},[398,49524,780],{"class":408},[398,49526,695],{"class":457},[398,49528,30690],{"class":408},[398,49530,49531],{"class":400,"line":33841},[398,49532,33722],{"class":467},[398,49534,49535],{"class":400,"line":33847},[398,49536,33728],{"class":467},[398,49538,49539],{"class":400,"line":33853},[398,49540,33734],{"class":467},[398,49542,49543,49545,49547,49549,49551,49553,49555],{"class":400,"line":33864},[398,49544,31920],{"class":408},[398,49546,619],{"class":457},[398,49548,780],{"class":408},[398,49550,486],{"class":457},[398,49552,780],{"class":408},[398,49554,619],{"class":457},[398,49556,415],{"class":408},[398,49558,49559],{"class":400,"line":33875},[398,49560,33757],{"class":467},[398,49562,49563],{"class":400,"line":33881},[398,49564,33763],{"class":467},[398,49566,49567],{"class":400,"line":33898},[398,49568,33769],{"class":467},[398,49570,49571],{"class":400,"line":33921},[398,49572,33775],{"class":467},[398,49574,49575],{"class":400,"line":33944},[398,49576,33781],{"class":467},[398,49578,49579,49581,49583,49585,49587,49589,49591,49593,49595],{"class":400,"line":33950},[398,49580,33787],{"class":408},[398,49582,33790],{"class":513},[398,49584,33793],{"class":408},[398,49586,33796],{"class":513},[398,49588,780],{"class":408},[398,49590,33801],{"class":5493},[398,49592,454],{"class":404},[398,49594,33806],{"class":513},[398,49596,415],{"class":408},[398,49598,49599,49601,49603,49605,49607,49609,49611,49613,49615],{"class":400,"line":33955},[398,49600,33787],{"class":408},[398,49602,33790],{"class":513},[398,49604,33818],{"class":408},[398,49606,33821],{"class":513},[398,49608,780],{"class":408},[398,49610,33801],{"class":5493},[398,49612,454],{"class":404},[398,49614,33830],{"class":513},[398,49616,415],{"class":408},[398,49618,49619],{"class":400,"line":33964},[398,49620,33838],{"class":467},[398,49622,49623],{"class":400,"line":33974},[398,49624,33844],{"class":408},[398,49626,49627],{"class":400,"line":33980},[398,49628,33850],{"class":467},[398,49630,49631,49633,49635],{"class":400,"line":33985},[398,49632,33856],{"class":408},[398,49634,33859],{"class":513},[398,49636,415],{"class":408},[398,49638,49639,49641,49643],{"class":400,"line":33991},[398,49640,33867],{"class":408},[398,49642,33870],{"class":513},[398,49644,415],{"class":408},[398,49646,49647],{"class":400,"line":34004},[398,49648,33878],{"class":467},[398,49650,49651,49653,49655,49657,49659,49661,49663],{"class":400,"line":34010},[398,49652,31920],{"class":408},[398,49654,619],{"class":457},[398,49656,780],{"class":408},[398,49658,486],{"class":457},[398,49660,780],{"class":408},[398,49662,486],{"class":457},[398,49664,415],{"class":408},[398,49666,49667,49669,49671,49673,49675,49677,49679,49681,49683],{"class":400,"line":34021},[398,49668,33787],{"class":408},[398,49670,33790],{"class":513},[398,49672,33905],{"class":408},[398,49674,33796],{"class":513},[398,49676,780],{"class":408},[398,49678,33801],{"class":5493},[398,49680,454],{"class":404},[398,49682,33916],{"class":513},[398,49684,415],{"class":408},[398,49686,49687,49689,49691,49693,49695,49697,49699,49701,49703],{"class":400,"line":34032},[398,49688,33787],{"class":408},[398,49690,33790],{"class":513},[398,49692,33928],{"class":408},[398,49694,33821],{"class":513},[398,49696,780],{"class":408},[398,49698,33801],{"class":5493},[398,49700,454],{"class":404},[398,49702,33939],{"class":513},[398,49704,415],{"class":408},[398,49706,49707],{"class":400,"line":34051},[398,49708,33947],{"class":467},[398,49710,49712],{"class":400,"line":49711},219,[398,49713,33844],{"class":408},[398,49715,49717,49719,49721],{"class":400,"line":49716},220,[398,49718,33856],{"class":408},[398,49720,33790],{"class":513},[398,49722,415],{"class":408},[398,49724,49726,49728,49730],{"class":400,"line":49725},221,[398,49727,33867],{"class":408},[398,49729,33969],{"class":513},[398,49731,415],{"class":408},[398,49733,49735],{"class":400,"line":49734},222,[398,49736,33977],{"class":408},[398,49738,49740],{"class":400,"line":49739},223,[398,49741,2676],{"emptyLinePlaceholder":328},[398,49743,49745],{"class":400,"line":49744},224,[398,49746,33988],{"class":467},[398,49748,49750,49752,49754,49756,49758],{"class":400,"line":49749},225,[398,49751,1807],{"class":404},[398,49753,31413],{"class":457},[398,49755,3225],{"class":404},[398,49757,31418],{"class":513},[398,49759,4015],{"class":408},[398,49761,49763],{"class":400,"line":49762},226,[398,49764,34007],{"class":467},[398,49766,49768,49770,49772],{"class":400,"line":49767},227,[398,49769,44739],{"class":408},[398,49771,454],{"class":404},[398,49773,44744],{"class":408},[398,49775,49777,49779,49781],{"class":400,"line":49776},228,[398,49778,34024],{"class":408},[398,49780,454],{"class":404},[398,49782,34029],{"class":408},[398,49784,49786,49788,49790,49792,49794,49796,49798],{"class":400,"line":49785},229,[398,49787,33586],{"class":408},[398,49789,454],{"class":404},[398,49791,44761],{"class":408},[398,49793,34042],{"class":5493},[398,49795,454],{"class":404},[398,49797,1309],{"class":457},[398,49799,415],{"class":408},[398,49801,49803],{"class":400,"line":49802},230,[398,49804,34054],{"class":408},[22275,49806,49808],{"id":49807},"_242测试代码","2.4.2.测试代码",[19,49810,49811],{},"使用测试集进行测试与推理",[389,49813,49815],{"className":30571,"code":49814,"language":30573,"meta":316,"style":316},"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",[395,49816,49817,49823,49833,49843,49854,49864,49868,49872,49880,49885,49889,49906,49910,49914,49918,49922,49926,49958,49962,49970,49974,49986,49990,49994,49998,50002,50006,50010,50014,50018,50036,50050,50054,50064,50074,50084,50090,50094,50098,50106,50110,50126,50134,50138,50142,50150,50158,50162,50166,50170,50174,50180,50184,50194,50202,50210,50214,50218,50222,50230,50234,50250,50254,50258,50262,50274,50278,50290,50294,50298,50310,50314,50324,50328,50332,50344,50348,50356,50360,50364,50372,50376,50384,50388,50392,50396,50400,50404,50420,50428,50432,50436,50454,50460,50464,50474,50482,50490,50494,50498,50502,50506,50514,50518,50534,50538,50546,50554],{"__ignoreMap":316},[398,49818,49819,49821],{"class":400,"line":401},[398,49820,30585],{"class":404},[398,49822,30588],{"class":408},[398,49824,49825,49827,49829,49831],{"class":400,"line":317},[398,49826,30585],{"class":404},[398,49828,31608],{"class":408},[398,49830,31576],{"class":404},[398,49832,31613],{"class":408},[398,49834,49835,49837,49839,49841],{"class":400,"line":320},[398,49836,30930],{"class":404},[398,49838,31591],{"class":408},[398,49840,30585],{"class":404},[398,49842,31596],{"class":408},[398,49844,49845,49847,49849,49851],{"class":400,"line":1470},[398,49846,30930],{"class":404},[398,49848,31561],{"class":408},[398,49850,30585],{"class":404},[398,49852,49853],{"class":408}," ImageFolder\n",[398,49855,49856,49858,49860,49862],{"class":400,"line":1476},[398,49857,30930],{"class":404},[398,49859,32107],{"class":408},[398,49861,30585],{"class":404},[398,49863,44833],{"class":408},[398,49865,49866],{"class":400,"line":1490},[398,49867,2676],{"emptyLinePlaceholder":328},[398,49869,49870],{"class":400,"line":1496},[398,49871,34144],{"class":467},[398,49873,49874,49876,49878],{"class":400,"line":1587},[398,49875,32140],{"class":404},[398,49877,34151],{"class":2239},[398,49879,32146],{"class":408},[398,49881,49882],{"class":400,"line":1593},[398,49883,49884],{"class":467},"   # 导入自己的数据集，并进行数据处理\n",[398,49886,49887],{"class":400,"line":1605},[398,49888,48154],{"class":467},[398,49890,49891,49893,49895,49897,49899,49901,49904],{"class":400,"line":1888},[398,49892,48159],{"class":457},[398,49894,454],{"class":404},[398,49896,1072],{"class":404},[398,49898,653],{"class":513},[398,49900,960],{"class":457},[398,49902,49903],{"class":48170},"\u002Fdata\u002Ftest",[398,49905,25411],{"class":513},[398,49907,49908],{"class":400,"line":1893},[398,49909,2676],{"emptyLinePlaceholder":328},[398,49911,49912],{"class":400,"line":1899},[398,49913,48182],{"class":467},[398,49915,49916],{"class":400,"line":1904},[398,49917,48187],{"class":467},[398,49919,49920],{"class":400,"line":1918},[398,49921,48192],{"class":467},[398,49923,49924],{"class":400,"line":1923},[398,49925,48197],{"class":467},[398,49927,49928,49930,49932,49934,49936,49938,49940,49942,49944,49946,49948,49950,49952,49954,49956],{"class":400,"line":1929},[398,49929,48202],{"class":408},[398,49931,454],{"class":404},[398,49933,48207],{"class":408},[398,49935,48210],{"class":457},[398,49937,780],{"class":408},[398,49939,48215],{"class":457},[398,49941,780],{"class":408},[398,49943,48220],{"class":457},[398,49945,48223],{"class":408},[398,49947,48226],{"class":457},[398,49949,780],{"class":408},[398,49951,48231],{"class":457},[398,49953,780],{"class":408},[398,49955,48236],{"class":457},[398,49957,4933],{"class":408},[398,49959,49960],{"class":400,"line":1950},[398,49961,48243],{"class":467},[398,49963,49964,49966,49968],{"class":400,"line":1955},[398,49965,48248],{"class":408},[398,49967,454],{"class":404},[398,49969,48253],{"class":408},[398,49971,49972],{"class":400,"line":1969},[398,49973,48258],{"class":467},[398,49975,49976,49978,49980,49982,49984],{"class":400,"line":1974},[398,49977,48263],{"class":408},[398,49979,31694],{"class":457},[398,49981,780],{"class":408},[398,49983,31694],{"class":457},[398,49985,42815],{"class":408},[398,49987,49988],{"class":400,"line":2003},[398,49989,48276],{"class":467},[398,49991,49992],{"class":400,"line":2008},[398,49993,48281],{"class":408},[398,49995,49996],{"class":400,"line":2025},[398,49997,48286],{"class":408},[398,49999,50000],{"class":400,"line":2030},[398,50001,48291],{"class":467},[398,50003,50004],{"class":400,"line":2035},[398,50005,48296],{"class":467},[398,50007,50008],{"class":400,"line":2040},[398,50009,2676],{"emptyLinePlaceholder":328},[398,50011,50012],{"class":400,"line":2054},[398,50013,48305],{"class":467},[398,50015,50016],{"class":400,"line":2059},[398,50017,48310],{"class":467},[398,50019,50020,50022,50024,50026,50028,50030,50032,50034],{"class":400,"line":2853},[398,50021,34158],{"class":408},[398,50023,454],{"class":404},[398,50025,48319],{"class":408},[398,50027,48322],{"class":457},[398,50029,780],{"class":408},[398,50031,48327],{"class":5493},[398,50033,454],{"class":404},[398,50035,48332],{"class":408},[398,50037,50038,50040,50042,50044,50046,50048],{"class":400,"line":2867},[398,50039,34215],{"class":408},[398,50041,454],{"class":404},[398,50043,31727],{"class":408},[398,50045,31730],{"class":5493},[398,50047,454],{"class":404},[398,50049,34226],{"class":408},[398,50051,50052],{"class":400,"line":2875},[398,50053,34231],{"class":467},[398,50055,50056,50058,50060,50062],{"class":400,"line":2880},[398,50057,34236],{"class":5493},[398,50059,454],{"class":404},[398,50061,619],{"class":457},[398,50063,31659],{"class":408},[398,50065,50066,50068,50070,50072],{"class":400,"line":2886},[398,50067,34247],{"class":5493},[398,50069,454],{"class":404},[398,50071,31669],{"class":457},[398,50073,31659],{"class":408},[398,50075,50076,50078,50080,50082],{"class":400,"line":2892},[398,50077,34258],{"class":5493},[398,50079,454],{"class":404},[398,50081,593],{"class":457},[398,50083,415],{"class":408},[398,50085,50086,50088],{"class":400,"line":2897},[398,50087,4366],{"class":404},[398,50089,34271],{"class":408},[398,50091,50092],{"class":400,"line":8225},[398,50093,2676],{"emptyLinePlaceholder":328},[398,50095,50096],{"class":400,"line":8249},[398,50097,34280],{"class":467},[398,50099,50100,50102,50104],{"class":400,"line":8254},[398,50101,32140],{"class":404},[398,50103,34287],{"class":2239},[398,50105,34290],{"class":408},[398,50107,50108],{"class":400,"line":8260},[398,50109,34295],{"class":467},[398,50111,50112,50114,50116,50118,50120,50122,50124],{"class":400,"line":8287},[398,50113,31430],{"class":408},[398,50115,454],{"class":404},[398,50117,31437],{"class":513},[398,50119,1980],{"class":404},[398,50121,31442],{"class":408},[398,50123,1977],{"class":404},[398,50125,34312],{"class":513},[398,50127,50128,50130,50132],{"class":400,"line":8292},[398,50129,31482],{"class":408},[398,50131,454],{"class":404},[398,50133,32482],{"class":408},[398,50135,50136],{"class":400,"line":8298},[398,50137,2676],{"emptyLinePlaceholder":328},[398,50139,50140],{"class":400,"line":8310},[398,50141,34329],{"class":467},[398,50143,50144,50146,50148],{"class":400,"line":8322},[398,50145,34334],{"class":408},[398,50147,454],{"class":404},[398,50149,32535],{"class":457},[398,50151,50152,50154,50156],{"class":400,"line":8334},[398,50153,34343],{"class":408},[398,50155,454],{"class":404},[398,50157,3361],{"class":457},[398,50159,50160],{"class":400,"line":9993},[398,50161,2676],{"emptyLinePlaceholder":328},[398,50163,50164],{"class":400,"line":10018},[398,50165,34356],{"class":467},[398,50167,50168],{"class":400,"line":10041},[398,50169,34361],{"class":467},[398,50171,50172],{"class":400,"line":10065},[398,50173,34366],{"class":467},[398,50175,50176,50178],{"class":400,"line":10070},[398,50177,34371],{"class":404},[398,50179,33077],{"class":408},[398,50181,50182],{"class":400,"line":10075},[398,50183,34378],{"class":467},[398,50185,50186,50188,50190,50192],{"class":400,"line":10080},[398,50187,3679],{"class":404},[398,50189,34385],{"class":408},[398,50191,26236],{"class":404},[398,50193,34390],{"class":408},[398,50195,50196,50198,50200],{"class":400,"line":10089},[398,50197,34395],{"class":408},[398,50199,454],{"class":404},[398,50201,34400],{"class":408},[398,50203,50204,50206,50208],{"class":400,"line":10094},[398,50205,34405],{"class":408},[398,50207,454],{"class":404},[398,50209,34410],{"class":408},[398,50211,50212],{"class":400,"line":10100},[398,50213,34415],{"class":467},[398,50215,50216],{"class":400,"line":10121},[398,50217,33068],{"class":408},[398,50219,50220],{"class":400,"line":10127},[398,50221,34424],{"class":467},[398,50223,50224,50226,50228],{"class":400,"line":10141},[398,50225,32853],{"class":408},[398,50227,454],{"class":404},[398,50229,34433],{"class":408},[398,50231,50232],{"class":400,"line":10147},[398,50233,34438],{"class":467},[398,50235,50236,50238,50240,50242,50244,50246,50248],{"class":400,"line":10174},[398,50237,32870],{"class":408},[398,50239,454],{"class":404},[398,50241,32875],{"class":408},[398,50243,32878],{"class":5493},[398,50245,454],{"class":404},[398,50247,619],{"class":457},[398,50249,415],{"class":408},[398,50251,50252],{"class":400,"line":10183},[398,50253,34459],{"class":467},[398,50255,50256],{"class":400,"line":10189},[398,50257,34464],{"class":467},[398,50259,50260],{"class":400,"line":10197},[398,50261,34469],{"class":467},[398,50263,50264,50266,50268,50270,50272],{"class":400,"line":10202},[398,50265,34474],{"class":408},[398,50267,9754],{"class":404},[398,50269,32980],{"class":408},[398,50271,3225],{"class":404},[398,50273,34483],{"class":408},[398,50275,50276],{"class":400,"line":16881},[398,50277,34488],{"class":467},[398,50279,50280,50282,50284,50286,50288],{"class":400,"line":16887},[398,50281,34493],{"class":408},[398,50283,9754],{"class":404},[398,50285,34498],{"class":408},[398,50287,593],{"class":457},[398,50289,415],{"class":408},[398,50291,50292],{"class":400,"line":16910},[398,50293,2676],{"emptyLinePlaceholder":328},[398,50295,50296],{"class":400,"line":16916},[398,50297,34511],{"class":467},[398,50299,50300,50302,50304,50306,50308],{"class":400,"line":16939},[398,50301,34516],{"class":408},[398,50303,454],{"class":404},[398,50305,34521],{"class":408},[398,50307,986],{"class":404},[398,50309,34526],{"class":408},[398,50311,50312],{"class":400,"line":16953},[398,50313,34531],{"class":467},[398,50315,50316,50318,50320,50322],{"class":400,"line":16973},[398,50317,32644],{"class":457},[398,50319,409],{"class":408},[398,50321,34540],{"class":513},[398,50323,34543],{"class":408},[398,50325,50326],{"class":400,"line":16979},[398,50327,2676],{"emptyLinePlaceholder":328},[398,50329,50330],{"class":400,"line":16990},[398,50331,34552],{"class":467},[398,50333,50334,50336,50338,50340,50342],{"class":400,"line":17013},[398,50335,1807],{"class":404},[398,50337,31413],{"class":457},[398,50339,3225],{"class":404},[398,50341,31418],{"class":513},[398,50343,4015],{"class":408},[398,50345,50346],{"class":400,"line":17035},[398,50347,34569],{"class":467},[398,50349,50350,50352,50354],{"class":400,"line":17040},[398,50351,31482],{"class":408},[398,50353,454],{"class":404},[398,50355,44744],{"class":408},[398,50357,50358],{"class":400,"line":17046},[398,50359,34582],{"class":467},[398,50361,50362],{"class":400,"line":17060},[398,50363,34587],{"class":467},[398,50365,50366,50368,50370],{"class":400,"line":17073},[398,50367,34592],{"class":408},[398,50369,34595],{"class":513},[398,50371,30690],{"class":408},[398,50373,50374],{"class":400,"line":17078},[398,50375,34602],{"class":467},[398,50377,50378,50380,50382],{"class":400,"line":17092},[398,50379,34215],{"class":408},[398,50381,454],{"class":404},[398,50383,34611],{"class":408},[398,50385,50386],{"class":400,"line":17097},[398,50387,34616],{"class":467},[398,50389,50390],{"class":400,"line":17103},[398,50391,34621],{"class":408},[398,50393,50394],{"class":400,"line":17108},[398,50395,2676],{"emptyLinePlaceholder":328},[398,50397,50398],{"class":400,"line":17122},[398,50399,34630],{"class":467},[398,50401,50402],{"class":400,"line":17127},[398,50403,34635],{"class":467},[398,50405,50406,50408,50410,50412,50414,50416,50418],{"class":400,"line":17132},[398,50407,31430],{"class":408},[398,50409,454],{"class":404},[398,50411,31437],{"class":513},[398,50413,1980],{"class":404},[398,50415,31442],{"class":408},[398,50417,1977],{"class":404},[398,50419,34312],{"class":513},[398,50421,50422,50424,50426],{"class":400,"line":17146},[398,50423,31482],{"class":408},[398,50425,454],{"class":404},[398,50427,32482],{"class":408},[398,50429,50430],{"class":400,"line":17158},[398,50431,34664],{"class":467},[398,50433,50434],{"class":400,"line":17163},[398,50435,34669],{"class":467},[398,50437,50438,50440,50442,50444,50447,50449,50452],{"class":400,"line":17176},[398,50439,34674],{"class":408},[398,50441,454],{"class":404},[398,50443,1292],{"class":408},[398,50445,50446],{"class":513},"'猫'",[398,50448,780],{"class":408},[398,50450,50451],{"class":513},"'狗'",[398,50453,33439],{"class":408},[398,50455,50456,50458],{"class":400,"line":17181},[398,50457,34371],{"class":404},[398,50459,33077],{"class":408},[398,50461,50462],{"class":400,"line":17186},[398,50463,34739],{"class":467},[398,50465,50466,50468,50470,50472],{"class":400,"line":17191},[398,50467,3679],{"class":404},[398,50469,34746],{"class":408},[398,50471,26236],{"class":404},[398,50473,34390],{"class":408},[398,50475,50476,50478,50480],{"class":400,"line":17204},[398,50477,32803],{"class":408},[398,50479,454],{"class":404},[398,50481,32808],{"class":408},[398,50483,50484,50486,50488],{"class":400,"line":17209},[398,50485,32818],{"class":408},[398,50487,454],{"class":404},[398,50489,32823],{"class":408},[398,50491,50492],{"class":400,"line":32826},[398,50493,2676],{"emptyLinePlaceholder":328},[398,50495,50496],{"class":400,"line":32832},[398,50497,34775],{"class":467},[398,50499,50500],{"class":400,"line":32838},[398,50501,33068],{"class":408},[398,50503,50504],{"class":400,"line":32844},[398,50505,34784],{"class":467},[398,50507,50508,50510,50512],{"class":400,"line":32850},[398,50509,32853],{"class":408},[398,50511,454],{"class":404},[398,50513,32858],{"class":408},[398,50515,50516],{"class":400,"line":32861},[398,50517,34797],{"class":467},[398,50519,50520,50522,50524,50526,50528,50530,50532],{"class":400,"line":32867},[398,50521,32870],{"class":408},[398,50523,454],{"class":404},[398,50525,32875],{"class":408},[398,50527,32878],{"class":5493},[398,50529,454],{"class":404},[398,50531,619],{"class":457},[398,50533,415],{"class":408},[398,50535,50536],{"class":400,"line":32887},[398,50537,34818],{"class":467},[398,50539,50540,50542,50544],{"class":400,"line":32893},[398,50541,34823],{"class":408},[398,50543,454],{"class":404},[398,50545,34828],{"class":408},[398,50547,50548,50550,50552],{"class":400,"line":32904},[398,50549,34833],{"class":408},[398,50551,454],{"class":404},[398,50553,34838],{"class":408},[398,50555,50556,50558,50560,50562,50564,50566,50568,50570],{"class":400,"line":32910},[398,50557,34843],{"class":457},[398,50559,409],{"class":408},[398,50561,34848],{"class":513},[398,50563,34851],{"class":408},[398,50565,34854],{"class":513},[398,50567,780],{"class":408},[398,50569,34859],{"class":513},[398,50571,34862],{"class":408},[5403,50573,50574],{},"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":316,"searchDepth":317,"depth":317,"links":50576},[50577,50578,50579,50580],{"id":30784,"depth":320,"text":30785},{"id":38032,"depth":320,"text":38033},{"id":41465,"depth":320,"text":41466},{"id":45474,"depth":320,"text":45475},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30776,"description":23654},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50587,"title":50588,"body":50589,"description":23654,"extension":326,"meta":50596,"navigation":328,"path":50597,"seo":50598,"stem":50599,"__hash__":50600},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50590,"toc":50594},[50591],[10,50592,50588],{"id":50593},"_3yolo模型学习",{"title":316,"searchDepth":317,"depth":317,"links":50595},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50588,"description":23654},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50602,"title":50603,"body":50604,"description":50611,"extension":326,"meta":50612,"navigation":328,"path":50614,"seo":50615,"stem":50616,"__hash__":50617},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50605,"toc":50609},[50606],[19,50607,50608],{},"yolo模型还未补充",{"title":316,"searchDepth":317,"depth":317,"links":50610},[],"深度学习学习",{"category":50613},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50603,"description":50611},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50619,"title":50620,"body":50621,"description":23654,"extension":326,"meta":50646,"navigation":328,"path":50647,"seo":50648,"stem":50649,"__hash__":50650},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50622,"toc":50644},[50623,50626,50629,50634,50641],[10,50624,50620],{"id":50625},"_1工具",[19,50627,50628],{},"提示错误插件：有问题会提前报错",[19,50630,50631],{},[1738,50632],{"alt":316,"src":50633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,50635,50636],{},[640,50637,50640],{"href":50638,"rel":50639},"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",[24142],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,50642,50643],{},"alt键加上下箭头可以实现语句的移动",{"title":316,"searchDepth":317,"depth":317,"links":50645},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50620,"description":23654},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50652,"title":50653,"body":50654,"description":23654,"extension":326,"meta":53518,"navigation":328,"path":53519,"seo":53520,"stem":53521,"__hash__":53522},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50655,"toc":53469},[50656,50659,50663,50667,50672,50675,50680,50684,50691,50696,50703,50708,50715,50720,50724,50729,50732,50736,50741,50745,50750,50753,50756,50759,50762,50765,50768,50771,50774,50779,50784,50789,50793,50796,50799,50803,50808,50811,50819,50824,50841,50849,50854,50859,50864,50869,50874,50877,50882,50887,50891,50900,50905,50910,50914,50919,50922,50926,50931,50939,50944,50949,50952,50957,50962,50967,50970,50973,50976,50981,50986,50989,50994,50997,51002,51005,51008,51011,51016,51019,51022,51037,51042,51047,51052,51055,51058,51061,51075,51078,51083,51088,51091,51094,51097,51100,51103,51106,51109,51113,51117,51122,51126,51129,51134,51139,51142,51147,51150,51154,51159,51162,51165,51168,51171,51174,51177,51180,51183,51186,51190,51195,51200,51205,51208,51211,51215,51220,51223,51227,51230,51233,51238,51241,51244,51248,51252,51255,51260,51265,51268,51297,51302,51307,51312,51317,51321,51326,51330,51335,51338,51342,51346,51351,51355,51360,51365,51369,51374,51377,51379,51382,51387,51391,51396,51400,51404,51409,51414,51419,51424,51428,51433,51438,51443,51446,51449,51454,51457,51462,51467,51472,51477,51481,52288,52292,52635,52640,52643,52646,52649,52652,52655,52658,52661,52664,52666,52669,52671,52674,52678,52683,52686,52689,52692,52696,52701,52706,52726,52729,52733,52738,52743,52760,52764,52793,52797,52819,52821,52860,52868,52874,52878,52881,52884,52889,52894,52897,52900,52903,52908,52913,52916,52919,52922,52925,52928,52931,52934,52937,52940,52943,52946,52948,52951,52954,52957,52960,52963,52966,52969,52972,52976,52981,52984,52989,52992,52995,52998,53001,53004,53007,53010,53012,53015,53018,53021,53024,53027,53030,53034,53037,53046,53049,53054,53057,53062,53065,53068,53071,53074,53077,53080,53083,53087,53091,53094,53097,53102,53107,53112,53116,53121,53126,53129,53132,53135,53138,53141,53146,53149,53154,53156,53161,53164,53168,53173,53176,53179,53184,53188,53191,53196,53199,53202,53231,53236,53239,53242,53245,53248,53251,53255,53258,53344,53348,53351,53356,53361,53368,53371,53374,53377,53380,53383,53388,53393,53396,53399,53402,53405,53408,53411,53414,53417,53420,53422,53425,53429,53434,53439,53444,53447,53452,53457,53460,53463,53466],[10,50657,50653],{"id":50658},"_2基础语法",[343,50660,50662],{"id":50661},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[14,50664,50666],{"id":50665},"_211-js组成","2.1.1 js组成",[38,50668,50669],{},[41,50670,50671],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,50673,50674],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[38,50676,50677],{"start":317},[41,50678,50679],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[14,50681,50683],{"id":50682},"_212-js书写位置","2.1.2 js书写位置",[38,50685,50686],{},[41,50687,50688],{},[23,50689,50690],{},"内部 JavaScript",[19,50692,50693],{},[1738,50694],{"alt":316,"src":50695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[38,50697,50698],{"start":317},[41,50699,50700],{},[23,50701,50702],{},"外部 JavaScript",[19,50704,50705],{},[1738,50706],{"alt":316,"src":50707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[38,50709,50710],{"start":320},[41,50711,50712],{},[23,50713,50714],{},"内联 JavaScript",[19,50716,50717],{},[1738,50718],{"alt":316,"src":50719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[14,50721,50723],{"id":50722},"_213-javascript注释","2.1.3 JavaScript注释",[19,50725,50726],{},[1738,50727],{"alt":316,"src":50728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,50730,50731],{},"alt+shift+a一定要记住！",[14,50733,50735],{"id":50734},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,50737,50738],{},[1738,50739],{"alt":316,"src":50740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[14,50742,50744],{"id":50743},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[38,50746,50747],{},[41,50748,50749],{},"输出语法：",[19,50751,50752],{},"①document.write('要出的内容')",[19,50754,50755],{},"向body内输出内容；",[19,50757,50758],{},"如果输出的内容写的是标签，也会被解析cheng",[19,50760,50761],{},"②alert('要出的内容')",[19,50763,50764],{},"页面弹出警告对话框",[19,50766,50767],{},"③console.log('控制台打印')",[19,50769,50770],{},"控制台输出语法，程序员调试使用",[19,50772,50773],{},"输入log就行，自动生成：",[19,50775,50776],{},[1738,50777],{"alt":316,"src":50778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[38,50780,50781],{"start":317},[41,50782,50783],{},"输入语法：",[19,50785,50786],{},[1738,50787],{"alt":316,"src":50788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[14,50790,50792],{"id":50791},"_2116-字面量","21.1.6 字面量",[19,50794,50795],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,50797,50798],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[343,50800,50802],{"id":50801},"_22-变量","2.2 变量",[38,50804,50805],{},[41,50806,50807],{},"变量声明",[19,50809,50810],{},"let 变量名",[67,50812,50813,50816],{},[41,50814,50815],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[41,50817,50818],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[38,50820,50821],{"start":317},[41,50822,50823],{},"变量赋值",[389,50825,50829],{"className":50826,"code":50827,"language":50828,"meta":316,"style":316},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[395,50830,50831,50836],{"__ignoreMap":316},[398,50832,50833],{"class":400,"line":401},[398,50834,50835],{"class":408},"let age\n",[398,50837,50838],{"class":400,"line":317},[398,50839,50840],{"class":408},"age=18\n",[38,50842,50843,50846],{"start":320},[41,50844,50845],{},"连这些（变量的初始化）：let age=18",[41,50847,50848],{},"更新变量",[19,50850,50851],{},[1738,50852],{"alt":316,"src":50853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[38,50855,50856],{"start":1476},[41,50857,50858],{},"声明多个变量",[19,50860,50861],{},[1738,50862],{"alt":316,"src":50863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[38,50865,50866],{"start":1490},[41,50867,50868],{},"变量命名规则与规范",[19,50870,50871],{},[1738,50872],{"alt":316,"src":50873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,50875,50876],{},"遵守小驼峰！",[38,50878,50879],{"start":1496},[41,50880,50881],{},"变量拓展-let和var的区别",[19,50883,50884],{},[1738,50885],{"alt":316,"src":50886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[343,50888,50890],{"id":50889},"_23-数组","2.3 数组",[389,50892,50894],{"className":50826,"code":50893,"language":50828,"meta":316,"style":316},"let arr = []\n",[395,50895,50896],{"__ignoreMap":316},[398,50897,50898],{"class":400,"line":401},[398,50899,50893],{"class":408},[19,50901,50902],{},[1738,50903],{"alt":316,"src":50904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,50906,50907],{},[1738,50908],{"alt":316,"src":50909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[343,50911,50913],{"id":50912},"_24-常量","2.4 常量",[19,50915,50916],{},[1738,50917],{"alt":316,"src":50918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,50920,50921],{},"const — 类似于 let ，但是变量的值无法被修改",[343,50923,50925],{"id":50924},"_25-数据类型","2.5 数据类型",[19,50927,50928],{},[1738,50929],{"alt":316,"src":50930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[38,50932,50933,50936],{},[41,50934,50935],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[41,50937,50938],{},"算数运算符：",[19,50940,50941],{},[1738,50942],{"alt":316,"src":50943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[38,50945,50946],{"start":320},[41,50947,50948],{},"数字类型（Number）",[19,50950,50951],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,50953,50954],{},[1738,50955],{"alt":316,"src":50956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[38,50958,50959],{"start":1470},[41,50960,50961],{},"字符串类型（string）",[19,50963,50964],{},[1738,50965],{"alt":316,"src":50966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,50968,50969],{},"反引号也是可以使用的",[19,50971,50972],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,50974,50975],{},"例如：document.write(\"我今年\"+age+\"岁\")",[38,50977,50978],{"start":1476},[41,50979,50980],{},"模板字符串",[19,50982,50983],{},[1738,50984],{"alt":316,"src":50985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,50987,50988],{},"类似于python的字符串格式化",[38,50990,50991],{"start":1490},[41,50992,50993],{},"布尔类型",[19,50995,50996],{},"true 和 false",[38,50998,50999],{"start":1496},[41,51000,51001],{},"未定义类型（underfined）",[19,51003,51004],{},"表示没有赋值",[19,51006,51007],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,51009,51010],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[38,51012,51013],{"start":1587},[41,51014,51015],{},"null（空类型）",[19,51017,51018],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,51020,51021],{},"赋值了，但是内容为空",[389,51023,51025],{"className":50826,"code":51024,"language":50828,"meta":316,"style":316},"typeof null\n输出的是'object'，是一个对象数据类型\n",[395,51026,51027,51032],{"__ignoreMap":316},[398,51028,51029],{"class":400,"line":401},[398,51030,51031],{"class":408},"typeof null\n",[398,51033,51034],{"class":400,"line":317},[398,51035,51036],{"class":408},"输出的是'object'，是一个对象数据类型\n",[38,51038,51039],{"start":1593},[41,51040,51041],{},"控制台检测数据类型",[19,51043,51044],{},[1738,51045],{"alt":316,"src":51046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[38,51048,51049],{"start":1605},[41,51050,51051],{},"类型转换",[19,51053,51054],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,51056,51057],{},"转换方式：隐式转换和显示转换",[19,51059,51060],{},"①隐式转换",[67,51062,51063,51066,51069,51072],{},[41,51064,51065],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[41,51067,51068],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[41,51070,51071],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[41,51073,51074],{},"任何数据和字符串相加结果都是字符串",[19,51076,51077],{},"②显示转换",[19,51079,51080],{},[1738,51081],{"alt":316,"src":51082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,51084,51085],{},[1738,51086],{"alt":316,"src":51087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,51089,51090],{},"在输入的时候要用好隐式转换，简单写起来",[19,51092,51093],{},"let num = +prompt(’请输入数字：‘)",[19,51095,51096],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,51098,51099],{},"console.log(parseInt('12.333px'))",[19,51101,51102],{},"输出为：12",[19,51104,51105],{},"console.log(parseInt('a'a'a12.333px'))",[19,51107,51108],{},"输出：NaN",[343,51110,51112],{"id":51111},"_26-运算符","2.6 运算符",[14,51114,51116],{"id":51115},"_261-赋值运算符","2.6.1 赋值运算符",[19,51118,51119],{},[1738,51120],{"alt":316,"src":51121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[14,51123,51125],{"id":51124},"_262-一元运算符","2.6.2 一元运算符",[19,51127,51128],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,51130,51131],{},[1738,51132],{"alt":316,"src":51133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,51135,51136],{},[1738,51137],{"alt":316,"src":51138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,51140,51141],{},"两者的区别：",[19,51143,51144],{},[1738,51145],{"alt":316,"src":51146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,51148,51149],{},"前置先自加；后置后加，代码执行完之后再加",[14,51151,51153],{"id":51152},"_263-比较运算符","2.6.3 比较运算符",[19,51155,51156],{},[1738,51157],{"alt":316,"src":51158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,51160,51161],{},"比较运算符也有隐式转换",[19,51163,51164],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,51166,51167],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,51169,51170],{},"要使用三等，开发的时候",[19,51172,51173],{},"NaN不等于任何人，包括它自己",[19,51175,51176],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,51178,51179],{},"7\u002F10=0.7",[19,51181,51182],{},"最后：0.5+0.2=0.7",[19,51184,51185],{},"字符串比较，比较的是字符对应的ASCII码",[14,51187,51189],{"id":51188},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,51191,51192],{},[1738,51193],{"alt":316,"src":51194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,51196,51197],{},[1738,51198],{"alt":316,"src":51199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,51201,51202],{},[1738,51203],{"alt":316,"src":51204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,51206,51207],{},"上述题目选D",[19,51209,51210],{},"与真2假1；或真1假2",[14,51212,51214],{"id":51213},"_265-运算符优先级","2.6.5 运算符优先级",[19,51216,51217],{},[1738,51218],{"alt":316,"src":51219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,51221,51222],{},"先算逻辑与，后算逻辑或",[343,51224,51226],{"id":51225},"_27-语句","2.7 语句",[19,51228,51229],{},"表达式：是可以被求值的代码，会有结果给我们",[19,51231,51232],{},"语句：语句是可以被执行的代码，例如prompt()",[19,51234,51235],{},[1738,51236],{"alt":316,"src":51237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,51239,51240],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,51242,51243],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[14,51245,51247],{"id":51246},"_271-分支语句","2.7.1 分支语句",[22275,51249,51251],{"id":51250},"_2711-if分支语句","2.7.1.1 if分支语句",[19,51253,51254],{},"if语句单行简单的话，可以不写{}，写在一行就行",[38,51256,51257],{},[41,51258,51259],{},"单分支语句",[19,51261,51262],{},[1738,51263],{"alt":316,"src":51264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,51266,51267],{},"除了0，所有数字都为真",[389,51269,51271],{"className":50826,"code":51270,"language":50828,"meta":316,"style":316},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[395,51272,51273,51278,51283,51288,51292],{"__ignoreMap":316},[398,51274,51275],{"class":400,"line":401},[398,51276,51277],{"class":408},"if（0) {\n",[398,51279,51280],{"class":400,"line":317},[398,51281,51282],{"class":408},"    let a=1\n",[398,51284,51285],{"class":400,"line":320},[398,51286,51287],{"class":408},"    alert(typeof a)\n",[398,51289,51290],{"class":400,"line":1470},[398,51291,1841],{"class":408},[398,51293,51294],{"class":400,"line":1476},[398,51295,51296],{"class":408},"不输出，括号为假\n",[38,51298,51299],{"start":317},[41,51300,51301],{},"双分支语句",[19,51303,51304],{},[1738,51305],{"alt":316,"src":51306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[38,51308,51309],{"start":320},[41,51310,51311],{},"多分支语句",[19,51313,51314],{},[1738,51315],{"alt":316,"src":51316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22275,51318,51320],{"id":51319},"_2712-三元运算符","2.7.1.2 三元运算符",[19,51322,51323],{},[1738,51324],{"alt":316,"src":51325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22275,51327,51329],{"id":51328},"_2713-switch语句","2.7.1.3 switch语句",[19,51331,51332],{},[1738,51333],{"alt":316,"src":51334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,51336,51337],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[14,51339,51341],{"id":51340},"_272-循环语句","2.7.2 循环语句",[22275,51343,51345],{"id":51344},"_2721-断点演示","2.7.2.1 断点演示",[19,51347,51348],{},[1738,51349],{"alt":316,"src":51350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22275,51352,51354],{"id":51353},"_2722-while循环","2.7.2.2 while循环",[19,51356,51357],{},[1738,51358],{"alt":316,"src":51359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,51361,51362],{},[1738,51363],{"alt":316,"src":51364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22275,51366,51368],{"id":51367},"_2723-for循环","2.7.2.3 for循环",[19,51370,51371],{},[1738,51372],{"alt":316,"src":51373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,51375,51376],{},"for(;;) {",[19,51378,1348],{},[19,51380,51381],{},"表示无限循环",[19,51383,51384],{},[1738,51385],{"alt":316,"src":51386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22275,51388,51390],{"id":51389},"_2724-循环的退出","2.7.2.4 循环的退出",[19,51392,51393],{},[1738,51394],{"alt":316,"src":51395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[343,51397,51399],{"id":51398},"_28-数组","2.8 数组",[14,51401,51403],{"id":51402},"_281-基础认识","2.8.1 基础认识",[19,51405,51406],{},[1738,51407],{"alt":316,"src":51408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,51410,51411],{},[1738,51412],{"alt":316,"src":51413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,51415,51416],{},[1738,51417],{"alt":316,"src":51418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,51420,51421],{},[1738,51422],{"alt":316,"src":51423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[14,51425,51427],{"id":51426},"_282-操作数组","2.8.2 操作数组",[19,51429,51430],{},[1738,51431],{"alt":316,"src":51432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[38,51434,51435],{},[41,51436,51437],{},"添加元素",[19,51439,51440],{},[1738,51441],{"alt":316,"src":51442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,51444,51445],{},"console.log(arr.push('green'))",[19,51447,51448],{},"输出结果：为新数组的长度",[19,51450,51451],{},[1738,51452],{"alt":316,"src":51453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,51455,51456],{},"push用的非常多，一定要记住",[38,51458,51459],{},[41,51460,51461],{},"删除元素",[19,51463,51464],{},[1738,51465],{"alt":316,"src":51466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,51468,51469],{},[1738,51470],{"alt":316,"src":51471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,51473,51474],{},[1738,51475],{"alt":316,"src":51476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[14,51478,51480],{"id":51479},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[389,51482,51484],{"className":50826,"code":51483,"language":50828,"meta":316,"style":316},"\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",[395,51485,51486,51501,51517,51521,51530,51548,51572,51594,51608,51616,51623,51635,51646,51650,51654,51661,51673,51688,51701,51720,51737,51752,51764,51776,51788,51792,51796,51807,51817,51829,51841,51853,51864,51868,51872,51884,51888,51902,51906,51910,51921,51935,51947,51961,51965,51974,51983,51987,51996,52000,52009,52014,52019,52032,52060,52065,52070,52095,52100,52104,52109,52114,52129,52133,52138,52168,52180,52196,52212,52226,52231,52238,52242,52247,52260,52268,52276,52280],{"__ignoreMap":316},[398,51487,51488,51491,51495,51498],{"class":400,"line":401},[398,51489,51490],{"class":408},"\u003C!",[398,51492,51494],{"class":51493},"s9eBZ","DOCTYPE",[398,51496,51497],{"class":2239}," html",[398,51499,51500],{"class":408},">\n",[398,51502,51503,51505,51507,51510,51512,51515],{"class":400,"line":317},[398,51504,1312],{"class":408},[398,51506,50828],{"class":51493},[398,51508,51509],{"class":2239}," lang",[398,51511,454],{"class":408},[398,51513,51514],{"class":513},"\"en\"",[398,51516,51500],{"class":408},[398,51518,51519],{"class":400,"line":320},[398,51520,2676],{"emptyLinePlaceholder":328},[398,51522,51523,51525,51528],{"class":400,"line":1470},[398,51524,1312],{"class":408},[398,51526,51527],{"class":51493},"head",[398,51529,51500],{"class":408},[398,51531,51532,51535,51538,51541,51543,51546],{"class":400,"line":1476},[398,51533,51534],{"class":408},"    \u003C",[398,51536,51537],{"class":51493},"meta",[398,51539,51540],{"class":2239}," charset",[398,51542,454],{"class":408},[398,51544,51545],{"class":513},"\"UTF-8\"",[398,51547,51500],{"class":408},[398,51549,51550,51552,51554,51557,51559,51562,51565,51567,51570],{"class":400,"line":1490},[398,51551,51534],{"class":408},[398,51553,51537],{"class":51493},[398,51555,51556],{"class":2239}," http-equiv",[398,51558,454],{"class":408},[398,51560,51561],{"class":513},"\"X-UA-Compatible\"",[398,51563,51564],{"class":2239}," content",[398,51566,454],{"class":408},[398,51568,51569],{"class":513},"\"IE=edge\"",[398,51571,51500],{"class":408},[398,51573,51574,51576,51578,51580,51582,51585,51587,51589,51592],{"class":400,"line":1496},[398,51575,51534],{"class":408},[398,51577,51537],{"class":51493},[398,51579,15197],{"class":2239},[398,51581,454],{"class":408},[398,51583,51584],{"class":513},"\"viewport\"",[398,51586,51564],{"class":2239},[398,51588,454],{"class":408},[398,51590,51591],{"class":513},"\"width=device-width, initial-scale=1.0\"",[398,51593,51500],{"class":408},[398,51595,51596,51598,51601,51604,51606],{"class":400,"line":1587},[398,51597,51534],{"class":408},[398,51599,51600],{"class":51493},"title",[398,51602,51603],{"class":408},">Document\u003C\u002F",[398,51605,51600],{"class":51493},[398,51607,51500],{"class":408},[398,51609,51610,51612,51614],{"class":400,"line":1593},[398,51611,51534],{"class":408},[398,51613,5403],{"class":51493},[398,51615,51500],{"class":408},[398,51617,51618,51621],{"class":400,"line":1605},[398,51619,51620],{"class":51493},"        *",[398,51622,15849],{"class":408},[398,51624,51625,51628,51631,51633],{"class":400,"line":1888},[398,51626,51627],{"class":457},"            margin",[398,51629,51630],{"class":408},": ",[398,51632,593],{"class":457},[398,51634,1566],{"class":408},[398,51636,51637,51640,51642,51644],{"class":400,"line":1893},[398,51638,51639],{"class":457},"            padding",[398,51641,51630],{"class":408},[398,51643,593],{"class":457},[398,51645,1566],{"class":408},[398,51647,51648],{"class":400,"line":1899},[398,51649,2805],{"class":408},[398,51651,51652],{"class":400,"line":1904},[398,51653,2676],{"emptyLinePlaceholder":328},[398,51655,51656,51659],{"class":400,"line":1918},[398,51657,51658],{"class":2239},"        .box",[398,51660,15849],{"class":408},[398,51662,51663,51666,51668,51671],{"class":400,"line":1923},[398,51664,51665],{"class":457},"            display",[398,51667,51630],{"class":408},[398,51669,51670],{"class":457},"flex",[398,51672,1566],{"class":408},[398,51674,51675,51678,51680,51683,51686],{"class":400,"line":1929},[398,51676,51677],{"class":457},"            width",[398,51679,51630],{"class":408},[398,51681,51682],{"class":457},"700",[398,51684,51685],{"class":404},"px",[398,51687,1566],{"class":408},[398,51689,51690,51693,51695,51697,51699],{"class":400,"line":1950},[398,51691,51692],{"class":457},"            height",[398,51694,51630],{"class":408},[398,51696,4249],{"class":457},[398,51698,51685],{"class":404},[398,51700,1566],{"class":408},[398,51702,51703,51706,51708,51710,51712,51715,51718],{"class":400,"line":1955},[398,51704,51705],{"class":457},"            border-left",[398,51707,51630],{"class":408},[398,51709,619],{"class":457},[398,51711,51685],{"class":404},[398,51713,51714],{"class":457}," solid",[398,51716,51717],{"class":457}," pink",[398,51719,1566],{"class":408},[398,51721,51722,51725,51727,51729,51731,51733,51735],{"class":400,"line":1969},[398,51723,51724],{"class":457},"            border-bottom",[398,51726,51630],{"class":408},[398,51728,619],{"class":457},[398,51730,51685],{"class":404},[398,51732,51714],{"class":457},[398,51734,51717],{"class":457},[398,51736,1566],{"class":408},[398,51738,51739,51741,51743,51745,51747,51750],{"class":400,"line":1974},[398,51740,51627],{"class":457},[398,51742,51630],{"class":408},[398,51744,1058],{"class":457},[398,51746,51685],{"class":404},[398,51748,51749],{"class":457}," auto",[398,51751,1566],{"class":408},[398,51753,51754,51757,51759,51762],{"class":400,"line":2003},[398,51755,51756],{"class":457},"            justify-content",[398,51758,51630],{"class":408},[398,51760,51761],{"class":457},"space-around",[398,51763,1566],{"class":408},[398,51765,51766,51769,51771,51774],{"class":400,"line":2008},[398,51767,51768],{"class":457},"            align-items",[398,51770,51630],{"class":408},[398,51772,51773],{"class":457},"flex-end",[398,51775,1566],{"class":408},[398,51777,51778,51781,51783,51786],{"class":400,"line":2025},[398,51779,51780],{"class":457},"            text-align",[398,51782,51630],{"class":408},[398,51784,51785],{"class":457},"center",[398,51787,1566],{"class":408},[398,51789,51790],{"class":400,"line":2030},[398,51791,2805],{"class":408},[398,51793,51794],{"class":400,"line":2035},[398,51795,2676],{"emptyLinePlaceholder":328},[398,51797,51798,51800,51802,51805],{"class":400,"line":2040},[398,51799,51658],{"class":2239},[398,51801,1362],{"class":404},[398,51803,51804],{"class":51493},"div",[398,51806,15849],{"class":408},[398,51808,51809,51811,51813,51815],{"class":400,"line":2054},[398,51810,51665],{"class":457},[398,51812,51630],{"class":408},[398,51814,51670],{"class":457},[398,51816,1566],{"class":408},[398,51818,51819,51821,51823,51825,51827],{"class":400,"line":2059},[398,51820,51677],{"class":457},[398,51822,51630],{"class":408},[398,51824,1058],{"class":457},[398,51826,51685],{"class":404},[398,51828,1566],{"class":408},[398,51830,51831,51834,51836,51839],{"class":400,"line":2853},[398,51832,51833],{"class":457},"            background-color",[398,51835,51630],{"class":408},[398,51837,51838],{"class":457},"pink",[398,51840,1566],{"class":408},[398,51842,51843,51846,51848,51851],{"class":400,"line":2867},[398,51844,51845],{"class":457},"            flex-direction",[398,51847,51630],{"class":408},[398,51849,51850],{"class":457},"column",[398,51852,1566],{"class":408},[398,51854,51855,51857,51859,51862],{"class":400,"line":2875},[398,51856,51756],{"class":457},[398,51858,51630],{"class":408},[398,51860,51861],{"class":457},"space-between",[398,51863,1566],{"class":408},[398,51865,51866],{"class":400,"line":2880},[398,51867,2805],{"class":408},[398,51869,51870],{"class":400,"line":2886},[398,51871,2676],{"emptyLinePlaceholder":328},[398,51873,51874,51876,51879,51882],{"class":400,"line":2892},[398,51875,51658],{"class":2239},[398,51877,51878],{"class":51493}," div",[398,51880,51881],{"class":51493}," span",[398,51883,15849],{"class":408},[398,51885,51886],{"class":400,"line":2897},[398,51887,2676],{"emptyLinePlaceholder":328},[398,51889,51890,51893,51895,51898,51900],{"class":400,"line":8225},[398,51891,51892],{"class":457},"            margin-top",[398,51894,51630],{"class":408},[398,51896,51897],{"class":457},"-20",[398,51899,51685],{"class":404},[398,51901,1566],{"class":408},[398,51903,51904],{"class":400,"line":8249},[398,51905,2805],{"class":408},[398,51907,51908],{"class":400,"line":8254},[398,51909,2676],{"emptyLinePlaceholder":328},[398,51911,51912,51914,51916,51919],{"class":400,"line":8260},[398,51913,51658],{"class":2239},[398,51915,51878],{"class":51493},[398,51917,51918],{"class":51493}," h4",[398,51920,15849],{"class":408},[398,51922,51923,51926,51928,51931,51933],{"class":400,"line":8287},[398,51924,51925],{"class":457},"            margin-bottom",[398,51927,51630],{"class":408},[398,51929,51930],{"class":457},"-35",[398,51932,51685],{"class":404},[398,51934,1566],{"class":408},[398,51936,51937,51939,51941,51943,51945],{"class":400,"line":8292},[398,51938,51677],{"class":457},[398,51940,51630],{"class":408},[398,51942,758],{"class":457},[398,51944,51685],{"class":404},[398,51946,1566],{"class":408},[398,51948,51949,51952,51954,51957,51959],{"class":400,"line":8298},[398,51950,51951],{"class":457},"            margin-left",[398,51953,51630],{"class":408},[398,51955,51956],{"class":457},"-10",[398,51958,51685],{"class":404},[398,51960,1566],{"class":408},[398,51962,51963],{"class":400,"line":8310},[398,51964,2805],{"class":408},[398,51966,51967,51970,51972],{"class":400,"line":8322},[398,51968,51969],{"class":408},"    \u003C\u002F",[398,51971,5403],{"class":51493},[398,51973,51500],{"class":408},[398,51975,51976,51979,51981],{"class":400,"line":8334},[398,51977,51978],{"class":408},"\u003C\u002F",[398,51980,51527],{"class":51493},[398,51982,51500],{"class":408},[398,51984,51985],{"class":400,"line":9993},[398,51986,2676],{"emptyLinePlaceholder":328},[398,51988,51989,51991,51994],{"class":400,"line":10018},[398,51990,1312],{"class":408},[398,51992,51993],{"class":51493},"body",[398,51995,51500],{"class":408},[398,51997,51998],{"class":400,"line":10041},[398,51999,2676],{"emptyLinePlaceholder":328},[398,52001,52002,52004,52007],{"class":400,"line":10065},[398,52003,51534],{"class":408},[398,52005,52006],{"class":51493},"script",[398,52008,51500],{"class":408},[398,52010,52011],{"class":400,"line":10070},[398,52012,52013],{"class":467},"        \u002F\u002F 1. 四次弹框效果\n",[398,52015,52016],{"class":400,"line":10075},[398,52017,52018],{"class":467},"        \u002F\u002F 声明一个新的数组\n",[398,52020,52021,52024,52027,52029],{"class":400,"line":10080},[398,52022,52023],{"class":404},"        let",[398,52025,52026],{"class":408}," arr ",[398,52028,454],{"class":404},[398,52030,52031],{"class":408}," []\n",[398,52033,52034,52036,52038,52041,52043,52045,52047,52049,52051,52054,52056,52058],{"class":400,"line":10089},[398,52035,3679],{"class":404},[398,52037,1934],{"class":408},[398,52039,52040],{"class":404},"let",[398,52042,9715],{"class":408},[398,52044,454],{"class":404},[398,52046,25396],{"class":457},[398,52048,9722],{"class":408},[398,52050,1864],{"class":404},[398,52052,52053],{"class":457}," 4",[398,52055,3490],{"class":408},[398,52057,2568],{"class":404},[398,52059,12719],{"class":408},[398,52061,52062],{"class":400,"line":10094},[398,52063,52064],{"class":467},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[398,52066,52067],{"class":400,"line":10100},[398,52068,52069],{"class":467},"            \u002F\u002F arr.push(num)\n",[398,52071,52072,52075,52078,52080,52083,52085,52088,52090,52093],{"class":400,"line":10121},[398,52073,52074],{"class":408},"            arr.",[398,52076,52077],{"class":2239},"push",[398,52079,409],{"class":408},[398,52081,52082],{"class":2239},"prompt",[398,52084,409],{"class":408},[398,52086,52087],{"class":513},"`请输入第${",[398,52089,843],{"class":408},[398,52091,52092],{"class":513},"}季度的数据:`",[398,52094,30690],{"class":408},[398,52096,52097],{"class":400,"line":10127},[398,52098,52099],{"class":467},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[398,52101,52102],{"class":400,"line":10141},[398,52103,2805],{"class":408},[398,52105,52106],{"class":400,"line":10147},[398,52107,52108],{"class":467},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[398,52110,52111],{"class":400,"line":10174},[398,52112,52113],{"class":467},"        \u002F\u002F 盒子开头\n",[398,52115,52116,52119,52122,52124,52127],{"class":400,"line":10183},[398,52117,52118],{"class":408},"        document.",[398,52120,52121],{"class":2239},"write",[398,52123,409],{"class":408},[398,52125,52126],{"class":513},"` \u003Cdiv class=\"box\">`",[398,52128,415],{"class":408},[398,52130,52131],{"class":400,"line":10189},[398,52132,2676],{"emptyLinePlaceholder":328},[398,52134,52135],{"class":400,"line":10197},[398,52136,52137],{"class":467},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[398,52139,52140,52142,52144,52146,52148,52150,52152,52154,52156,52159,52162,52164,52166],{"class":400,"line":10202},[398,52141,3679],{"class":404},[398,52143,1934],{"class":408},[398,52145,52040],{"class":404},[398,52147,9715],{"class":408},[398,52149,454],{"class":404},[398,52151,4369],{"class":457},[398,52153,9722],{"class":408},[398,52155,1312],{"class":404},[398,52157,52158],{"class":408}," arr.",[398,52160,52161],{"class":457},"length",[398,52163,3490],{"class":408},[398,52165,2568],{"class":404},[398,52167,12719],{"class":408},[398,52169,52170,52173,52175,52177],{"class":400,"line":16881},[398,52171,52172],{"class":408},"            document.",[398,52174,52121],{"class":2239},[398,52176,409],{"class":408},[398,52178,52179],{"class":513},"`\n",[398,52181,52182,52185,52187,52189,52191,52193],{"class":400,"line":16887},[398,52183,52184],{"class":513},"              \u003Cdiv style=\"height: ${",[398,52186,4156],{"class":408},[398,52188,1292],{"class":513},[398,52190,843],{"class":408},[398,52192,1342],{"class":513},[398,52194,52195],{"class":513},"}px;\">\n",[398,52197,52198,52201,52203,52205,52207,52209],{"class":400,"line":16910},[398,52199,52200],{"class":513},"                \u003Cspan>${",[398,52202,4156],{"class":408},[398,52204,1292],{"class":513},[398,52206,843],{"class":408},[398,52208,1342],{"class":513},[398,52210,52211],{"class":513},"}\u003C\u002Fspan>\n",[398,52213,52214,52217,52219,52221,52223],{"class":400,"line":16916},[398,52215,52216],{"class":513},"                \u003Ch4>第${",[398,52218,843],{"class":408},[398,52220,45759],{"class":404},[398,52222,25396],{"class":457},[398,52224,52225],{"class":513},"}季度\u003C\u002Fh4>\n",[398,52227,52228],{"class":400,"line":16939},[398,52229,52230],{"class":513},"              \u003C\u002Fdiv>          \n",[398,52232,52233,52236],{"class":400,"line":16953},[398,52234,52235],{"class":513},"            `",[398,52237,415],{"class":408},[398,52239,52240],{"class":400,"line":16973},[398,52241,2805],{"class":408},[398,52243,52244],{"class":400,"line":16979},[398,52245,52246],{"class":467},"        \u002F\u002F 盒子结尾\n",[398,52248,52249,52251,52253,52255,52258],{"class":400,"line":16990},[398,52250,52118],{"class":408},[398,52252,52121],{"class":2239},[398,52254,409],{"class":408},[398,52256,52257],{"class":513},"` \u003C\u002Fdiv>`",[398,52259,415],{"class":408},[398,52261,52262,52264,52266],{"class":400,"line":17013},[398,52263,51969],{"class":408},[398,52265,52006],{"class":51493},[398,52267,51500],{"class":408},[398,52269,52270,52272,52274],{"class":400,"line":17035},[398,52271,51978],{"class":408},[398,52273,51993],{"class":51493},[398,52275,51500],{"class":408},[398,52277,52278],{"class":400,"line":17040},[398,52279,2676],{"emptyLinePlaceholder":328},[398,52281,52282,52284,52286],{"class":400,"line":17046},[398,52283,51978],{"class":408},[398,52285,50828],{"class":51493},[398,52287,51500],{"class":408},[14,52289,52291],{"id":52290},"_284-冒泡排序","2.8.4 冒泡排序",[389,52293,52295],{"className":50826,"code":52294,"language":50828,"meta":316,"style":316},"\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",[395,52296,52297,52307,52321,52325,52333,52348,52368,52380,52388,52392,52400,52408,52440,52473,52510,52515,52534,52539,52552,52567,52583,52587,52592,52596,52606,52615,52623,52627],{"__ignoreMap":316},[398,52298,52299,52301,52303,52305],{"class":400,"line":401},[398,52300,51490],{"class":408},[398,52302,51494],{"class":51493},[398,52304,51497],{"class":2239},[398,52306,51500],{"class":408},[398,52308,52309,52311,52313,52315,52317,52319],{"class":400,"line":317},[398,52310,1312],{"class":408},[398,52312,50828],{"class":51493},[398,52314,51509],{"class":2239},[398,52316,454],{"class":408},[398,52318,51514],{"class":513},[398,52320,51500],{"class":408},[398,52322,52323],{"class":400,"line":320},[398,52324,2676],{"emptyLinePlaceholder":328},[398,52326,52327,52329,52331],{"class":400,"line":1470},[398,52328,1312],{"class":408},[398,52330,51527],{"class":51493},[398,52332,51500],{"class":408},[398,52334,52335,52338,52340,52342,52344,52346],{"class":400,"line":1476},[398,52336,52337],{"class":408},"  \u003C",[398,52339,51537],{"class":51493},[398,52341,51540],{"class":2239},[398,52343,454],{"class":408},[398,52345,51545],{"class":513},[398,52347,51500],{"class":408},[398,52349,52350,52352,52354,52356,52358,52360,52362,52364,52366],{"class":400,"line":1490},[398,52351,52337],{"class":408},[398,52353,51537],{"class":51493},[398,52355,15197],{"class":2239},[398,52357,454],{"class":408},[398,52359,51584],{"class":513},[398,52361,51564],{"class":2239},[398,52363,454],{"class":408},[398,52365,51591],{"class":513},[398,52367,51500],{"class":408},[398,52369,52370,52372,52374,52376,52378],{"class":400,"line":1496},[398,52371,52337],{"class":408},[398,52373,51600],{"class":51493},[398,52375,51603],{"class":408},[398,52377,51600],{"class":51493},[398,52379,51500],{"class":408},[398,52381,52382,52384,52386],{"class":400,"line":1587},[398,52383,51978],{"class":408},[398,52385,51527],{"class":51493},[398,52387,51500],{"class":408},[398,52389,52390],{"class":400,"line":1593},[398,52391,2676],{"emptyLinePlaceholder":328},[398,52393,52394,52396,52398],{"class":400,"line":1605},[398,52395,1312],{"class":408},[398,52397,51993],{"class":51493},[398,52399,51500],{"class":408},[398,52401,52402,52404,52406],{"class":400,"line":1888},[398,52403,52337],{"class":408},[398,52405,52006],{"class":51493},[398,52407,51500],{"class":408},[398,52409,52410,52413,52415,52417,52420,52422,52424,52426,52428,52430,52432,52434,52436,52438],{"class":400,"line":1893},[398,52411,52412],{"class":404},"    let",[398,52414,52026],{"class":408},[398,52416,454],{"class":404},[398,52418,52419],{"class":408}," [",[398,52421,721],{"class":457},[398,52423,12712],{"class":408},[398,52425,695],{"class":457},[398,52427,12712],{"class":408},[398,52429,480],{"class":457},[398,52431,12712],{"class":408},[398,52433,486],{"class":457},[398,52435,12712],{"class":408},[398,52437,619],{"class":457},[398,52439,33439],{"class":408},[398,52441,52442,52444,52446,52448,52450,52452,52454,52456,52458,52460,52462,52465,52467,52469,52471],{"class":400,"line":1899},[398,52443,3477],{"class":404},[398,52445,1934],{"class":408},[398,52447,52040],{"class":404},[398,52449,9715],{"class":408},[398,52451,454],{"class":404},[398,52453,4369],{"class":457},[398,52455,9722],{"class":408},[398,52457,1312],{"class":404},[398,52459,52158],{"class":408},[398,52461,52161],{"class":457},[398,52463,52464],{"class":404}," -",[398,52466,25396],{"class":457},[398,52468,3490],{"class":408},[398,52470,2568],{"class":404},[398,52472,12719],{"class":408},[398,52474,52475,52478,52480,52482,52484,52486,52488,52490,52492,52494,52496,52498,52500,52502,52504,52506,52508],{"class":400,"line":1904},[398,52476,52477],{"class":404},"      for",[398,52479,1934],{"class":408},[398,52481,52040],{"class":404},[398,52483,9777],{"class":408},[398,52485,454],{"class":404},[398,52487,4369],{"class":457},[398,52489,9784],{"class":408},[398,52491,1312],{"class":404},[398,52493,52158],{"class":408},[398,52495,52161],{"class":457},[398,52497,52464],{"class":404},[398,52499,9715],{"class":408},[398,52501,934],{"class":404},[398,52503,25396],{"class":457},[398,52505,9791],{"class":408},[398,52507,2568],{"class":404},[398,52509,12719],{"class":408},[398,52511,52512],{"class":400,"line":1918},[398,52513,52514],{"class":467},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[398,52516,52517,52519,52522,52524,52527,52529,52531],{"class":400,"line":1923},[398,52518,2773],{"class":404},[398,52520,52521],{"class":408}," (arr[j] ",[398,52523,1362],{"class":404},[398,52525,52526],{"class":408}," arr[j ",[398,52528,883],{"class":404},[398,52530,25396],{"class":457},[398,52532,52533],{"class":408},"]) {\n",[398,52535,52536],{"class":400,"line":1929},[398,52537,52538],{"class":467},"          \u002F\u002F 交换两个变量\n",[398,52540,52541,52544,52547,52549],{"class":400,"line":1950},[398,52542,52543],{"class":404},"          let",[398,52545,52546],{"class":408}," tmp ",[398,52548,454],{"class":404},[398,52550,52551],{"class":408}," arr[j]\n",[398,52553,52554,52557,52559,52561,52563,52565],{"class":400,"line":1955},[398,52555,52556],{"class":408},"          arr[j] ",[398,52558,454],{"class":404},[398,52560,52526],{"class":408},[398,52562,883],{"class":404},[398,52564,25396],{"class":457},[398,52566,33439],{"class":408},[398,52568,52569,52572,52574,52576,52578,52580],{"class":400,"line":1969},[398,52570,52571],{"class":408},"          arr[j ",[398,52573,883],{"class":404},[398,52575,25396],{"class":457},[398,52577,4719],{"class":408},[398,52579,454],{"class":404},[398,52581,52582],{"class":408}," tmp\n",[398,52584,52585],{"class":400,"line":1974},[398,52586,2805],{"class":408},[398,52588,52589],{"class":400,"line":2003},[398,52590,52591],{"class":408},"      }\n",[398,52593,52594],{"class":400,"line":2008},[398,52595,2463],{"class":408},[398,52597,52598,52601,52603],{"class":400,"line":2025},[398,52599,52600],{"class":408},"    document.",[398,52602,52121],{"class":2239},[398,52604,52605],{"class":408},"(arr)\n",[398,52607,52608,52611,52613],{"class":400,"line":2030},[398,52609,52610],{"class":408},"  \u003C\u002F",[398,52612,52006],{"class":51493},[398,52614,51500],{"class":408},[398,52616,52617,52619,52621],{"class":400,"line":2035},[398,52618,51978],{"class":408},[398,52620,51993],{"class":51493},[398,52622,51500],{"class":408},[398,52624,52625],{"class":400,"line":2040},[398,52626,2676],{"emptyLinePlaceholder":328},[398,52628,52629,52631,52633],{"class":400,"line":2054},[398,52630,51978],{"class":408},[398,52632,50828],{"class":51493},[398,52634,51500],{"class":408},[19,52636,52637],{},[1738,52638],{"alt":316,"src":52639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,52641,52642],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,52644,52645],{},"let arr = [4, 2, 5, 1, 3]",[19,52647,52648],{},"\u002F\u002F 1.升序排列写法",[19,52650,52651],{},"arr.sort(function (a, b) {",[19,52653,52654],{},"return a - b",[19,52656,52657],{},"})",[19,52659,52660],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,52662,52663],{},"\u002F\u002F 降序排列写法",[19,52665,52651],{},[19,52667,52668],{},"return b - a",[19,52670,52657],{},[19,52672,52673],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[343,52675,52677],{"id":52676},"_29-函数","2.9 函数",[19,52679,52680],{},[1738,52681],{"alt":316,"src":52682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,52684,52685],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,52687,52688],{},"函数的声明用function",[19,52690,52691],{},"函数里边可以嵌套函数",[14,52693,52695],{"id":52694},"_291-函数传参","2.9.1 函数传参",[19,52697,52698],{},[1738,52699],{"alt":316,"src":52700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,52702,52703],{},[1738,52704],{"alt":316,"src":52705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[67,52707,52708,52711,52714,52717,52720,52723],{},[41,52709,52710],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[41,52712,52713],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[41,52715,52716],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[41,52718,52719],{},"开发中尽量保持形参和实参个数一致",[41,52721,52722],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[41,52724,52725],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,52727,52728],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[14,52730,52732],{"id":52731},"_292-函数的返回值","2.9.2 函数的返回值",[19,52734,52735],{},[1738,52736],{"alt":316,"src":52737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,52739,52740],{},[1738,52741],{"alt":316,"src":52742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[67,52744,52745,52748,52751,52754,52757],{},[41,52746,52747],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[41,52749,52750],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[41,52752,52753],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[41,52755,52756],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[41,52758,52759],{},"断点调试:进入函数内部看执行过程F11",[14,52761,52763],{"id":52762},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[389,52765,52767],{"className":50826,"code":52766,"language":50828,"meta":316,"style":316},"    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",[395,52768,52769,52774,52779,52783,52788],{"__ignoreMap":316},[398,52770,52771],{"class":400,"line":401},[398,52772,52773],{"class":408},"    function fn(a, b) {\n",[398,52775,52776],{"class":400,"line":317},[398,52777,52778],{"class":408},"      console.log(a + b);\n",[398,52780,52781],{"class":400,"line":320},[398,52782,2463],{"class":408},[398,52784,52785],{"class":400,"line":1470},[398,52786,52787],{"class":408},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[398,52789,52790],{"class":400,"line":1476},[398,52791,52792],{"class":408},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[14,52794,52796],{"id":52795},"_294-作用域","2.9.4 作用域",[67,52798,52799,52805,52810,52813,52816],{},[41,52800,52801,52802],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[23,52803,52804],{},"作用域",[41,52806,52807],{},[23,52808,52809],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[41,52811,52812],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[41,52814,52815],{},"函数内部可以直接所使用全局变量",[41,52817,52818],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,52820,14910],{},[389,52822,52824],{"className":50826,"code":52823,"language":50828,"meta":316,"style":316},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[395,52825,52826,52831,52836,52840,52845,52850,52855],{"__ignoreMap":316},[398,52827,52828],{"class":400,"line":401},[398,52829,52830],{"class":408},"    function fun() {\n",[398,52832,52833],{"class":400,"line":317},[398,52834,52835],{"class":408},"      num = 10\n",[398,52837,52838],{"class":400,"line":320},[398,52839,2463],{"class":408},[398,52841,52842],{"class":400,"line":1470},[398,52843,52844],{"class":408},"    fun()\n",[398,52846,52847],{"class":400,"line":1476},[398,52848,52849],{"class":408},"    console.log(num)\n",[398,52851,52852],{"class":400,"line":1490},[398,52853,52854],{"class":408},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[398,52856,52857],{"class":400,"line":1496},[398,52858,52859],{"class":408},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[67,52861,52862,52865],{},[41,52863,52864],{},"函数内部的形参可以看做是局部变量",[41,52866,52867],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,52869,52870,52871],{},"变量访问原则： ",[23,52872,52873],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[14,52875,52877],{"id":52876},"_295-匿名函数","2.9.5 匿名函数",[19,52879,52880],{},"函数可以分为具名函数和匿名函数",[19,52882,52883],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[38,52885,52886],{},[41,52887,52888],{},"函数表达式",[19,52890,52891],{},[1738,52892],{"alt":316,"src":52893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,52895,52896],{},"里边也可以写参数",[19,52898,52899],{},"具名函数调用位置可以随意调整；",[19,52901,52902],{},"匿名函数函数表达式形式只能在声明后才可以使用",[38,52904,52905],{"start":317},[41,52906,52907],{},"立即执行函数",[19,52909,52910],{},[1738,52911],{"alt":316,"src":52912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,52914,52915],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,52917,52918],{},"写法：两个小括号，然后在第一个小括号中写function",[19,52920,52921],{},"(function () {})();",[19,52923,52924],{},"不要落下最后的;",[19,52926,52927],{},"立即执行函数必须要加;",[19,52929,52930],{},"分号写前写后都没问题",[19,52932,52933],{},"写前：",[19,52935,52936],{},"(function() {})()",[19,52938,52939],{},";(function () {})();",[19,52941,52942],{},"写后:",[19,52944,52945],{},"(function() {})();",[19,52947,52921],{},[19,52949,52950],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,52952,52953],{},"还有一种写法：",[19,52955,52956],{},"(function(){}());",[19,52958,52959],{},"或者:",[19,52961,52962],{},"!function(){}();",[19,52964,52965],{},"立即执行函数有时候也是可以加名字的：",[19,52967,52968],{},"(function flexible(window,document) {}(window,document));",[19,52970,52971],{},"省一些调用方法",[14,52973,52975],{"id":52974},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,52977,52978],{},[1738,52979],{"alt":316,"src":52980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,52982,52983],{},"这样就不用非得给x,y初始化了",[19,52985,52986],{},[1738,52987],{"alt":316,"src":52988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,52990,52991],{},"代码执行时先看左边",[19,52993,52994],{},"例如：console.log(false && 3+5)",[19,52996,52997],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,52999,53000],{},"&&都是真时，就返回最后一个真值",[19,53002,53003],{},"console.log(11 && 22)",[19,53005,53006],{},"输出22",[19,53008,53009],{},"逻辑与：遇真则真",[19,53011,14910],{},[19,53013,53014],{},"let age=1",[19,53016,53017],{},"console.log(11 || age++)",[19,53019,53020],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,53022,53023],{},"console.log(11 || 22)",[19,53025,53026],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,53028,53029],{},"||如果都是假的话，就取最后一个假的值了",[14,53031,53033],{"id":53032},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,53035,53036],{},"显示转换：",[19,53038,53039,53042,53043],{},[23,53040,53041],{},"记忆","： ",[23,53044,53045],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,53047,53048],{},"空字符串为假，其他字符串全为真",[19,53050,53051],{},[1738,53052],{"alt":316,"src":53053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,53055,53056],{},"隐式转换：",[19,53058,53059],{},[1738,53060],{"alt":316,"src":53061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,53063,53064],{},"隐式转换:",[19,53066,53067],{},"null+3=3",[19,53069,53070],{},"undefined+3=NaN",[19,53072,53073],{},"null==undefined 输出true,他两个都当0看",[19,53075,53076],{},"null===undefined 输出false",[19,53078,53079],{},"undefined做任何操作都是NaN",[19,53081,53082],{},"NaN不等于NaN，NaN表示计算错误",[343,53084,53086],{"id":53085},"_210-对象","2.10 对象",[14,53088,53090],{"id":53089},"_2101-对象的介绍","2.10.1 对象的介绍",[19,53092,53093],{},"对象也是一种数据类型，里边的数据是无序的",[19,53095,53096],{},"对象由属性和方法组成",[19,53098,53099],{},[1738,53100],{"alt":316,"src":53101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,53103,53104],{},[1738,53105],{"alt":316,"src":53106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,53108,53109],{},[1738,53110],{"alt":316,"src":53111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[14,53113,53115],{"id":53114},"_2102-对象属性","2.10.2 对象属性",[19,53117,53118],{},[1738,53119],{"alt":316,"src":53120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[38,53122,53123],{},[41,53124,53125],{},"查询对象",[19,53127,53128],{},"对象名.属性 goods.uname",[19,53130,53131],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,53133,53134],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,53136,53137],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,53139,53140],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[38,53142,53143],{"start":317},[41,53144,53145],{},"重新赋值",[19,53147,53148],{},"对象名.属性=新值",[38,53150,53151],{"start":320},[41,53152,53153],{},"增加新数据",[19,53155,53148],{},[38,53157,53158],{"start":1470},[41,53159,53160],{},"删除对象中的属性",[19,53162,53163],{},"delete 对象名.属性",[14,53165,53167],{"id":53166},"_2103-对象方法","2.10.3 对象方法",[19,53169,53170],{},[1738,53171],{"alt":316,"src":53172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,53174,53175],{},"后边跟的是匿名函数",[19,53177,53178],{},"对象外面的叫函数；对象内部的叫方法",[19,53180,53181],{},[1738,53182],{"alt":316,"src":53183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[14,53185,53187],{"id":53186},"_2104-遍历对象","2.10.4 遍历对象",[19,53189,53190],{},"理解为加括号的python字典遍历",[19,53192,53193],{},[1738,53194],{"alt":316,"src":53195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,53197,53198],{},"k是字符串类型",[19,53200,53201],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[389,53203,53205],{"className":50826,"code":53204,"language":50828,"meta":316,"style":316},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[395,53206,53207,53212,53217,53222,53227],{"__ignoreMap":316},[398,53208,53209],{"class":400,"line":401},[398,53210,53211],{"class":408},"   let arr = [1, 2, 3]\n",[398,53213,53214],{"class":400,"line":317},[398,53215,53216],{"class":408},"    for (let k in arr) {\n",[398,53218,53219],{"class":400,"line":320},[398,53220,53221],{"class":408},"      console.log(k)\n",[398,53223,53224],{"class":400,"line":1470},[398,53225,53226],{"class":408},"      console.log(arr[k])\n",[398,53228,53229],{"class":400,"line":1476},[398,53230,2463],{"class":408},[19,53232,53233],{},[1738,53234],{"alt":316,"src":53235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,53237,53238],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,53240,53241],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,53243,53244],{},"for in 得到的k是属性名",[52006,53246,53247],{},"\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,53249,53250],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[14,53252,53254],{"id":53253},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,53256,53257],{},"数组中放对象信息",[389,53259,53263],{"className":53260,"code":53261,"language":53262,"meta":316,"style":316},"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",[395,53264,53265,53273,53278,53283,53288,53293,53298,53303,53308,53313,53318,53323,53328,53332,53336],{"__ignoreMap":316},[398,53266,53267,53269,53271],{"class":400,"line":401},[398,53268,1312],{"class":408},[398,53270,52006],{"class":51493},[398,53272,51500],{"class":408},[398,53274,53275],{"class":400,"line":317},[398,53276,53277],{"class":408},"    let students = [\n",[398,53279,53280],{"class":400,"line":320},[398,53281,53282],{"class":408},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[398,53284,53285],{"class":400,"line":1470},[398,53286,53287],{"class":408},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[398,53289,53290],{"class":400,"line":1476},[398,53291,53292],{"class":408},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[398,53294,53295],{"class":400,"line":1490},[398,53296,53297],{"class":408},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[398,53299,53300],{"class":400,"line":1496},[398,53301,53302],{"class":408},"    ]\n",[398,53304,53305],{"class":400,"line":1587},[398,53306,53307],{"class":408},"    for (let i = 0; i \u003C students.length; i++) {\n",[398,53309,53310],{"class":400,"line":1593},[398,53311,53312],{"class":408},"      for (let k in students[i]) {\n",[398,53314,53315],{"class":400,"line":1605},[398,53316,53317],{"class":408},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[398,53319,53320],{"class":400,"line":1888},[398,53321,53322],{"class":408},"        \u002F\u002F输出每个人的名字：\n",[398,53324,53325],{"class":400,"line":1893},[398,53326,53327],{"class":408},"        \u002F\u002Fconsole.log(students[i].name)\n",[398,53329,53330],{"class":400,"line":1899},[398,53331,52591],{"class":408},[398,53333,53334],{"class":400,"line":1904},[398,53335,2463],{"class":408},[398,53337,53338,53340,53342],{"class":400,"line":1918},[398,53339,52610],{"class":408},[398,53341,52006],{"class":51493},[398,53343,51500],{"class":408},[14,53345,53347],{"id":53346},"_2106-内置对象","2.10.6 内置对象",[19,53349,53350],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[38,53352,53353],{},[41,53354,53355],{},"数学对象Math",[19,53357,53358],{},[1738,53359],{"alt":316,"src":53360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,53362,53363],{},[640,53364,53367],{"href":53365,"rel":53366},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[24142],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,53369,53370],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,53372,53373],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,53375,53376],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,53378,53379],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,53381,53382],{},"null属于对象数据类型",[38,53384,53385],{"start":317},[41,53386,53387],{},"生成任意范围随机数",[19,53389,53390],{},[1738,53391],{"alt":316,"src":53392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,53394,53395],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,53397,53398],{},"乘以几就取不到几",[19,53400,53401],{},"取数组中的随机元素：",[19,53403,53404],{},"let arr = ['red', 'green', 'blue']",[19,53406,53407],{},"let random = Math.floor(Math.random() * arr.length)",[19,53409,53410],{},"console.log(arr[random])",[19,53412,53413],{},"这个函数得到的是全闭区间",[19,53415,53416],{},"function getRandom(N, M) {",[19,53418,53419],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,53421,1348],{},[19,53423,53424],{},"console.log(getRandom(4, 8))",[14,53426,53428],{"id":53427},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,53430,53431],{},[1738,53432],{"alt":316,"src":53433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,53435,53436],{},[1738,53437],{"alt":316,"src":53438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,53440,53441],{},[1738,53442],{"alt":316,"src":53443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,53445,53446],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,53448,53449],{},[1738,53450],{"alt":316,"src":53451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,53453,53454],{},[1738,53455],{"alt":316,"src":53456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,53458,53459],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,53461,53462],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,53464,53465],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[5403,53467,53468],{},"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":316,"searchDepth":317,"depth":317,"links":53470},[53471,53479,53480,53481,53482,53483,53490,53494,53500,53509],{"id":50661,"depth":317,"text":50662,"children":53472},[53473,53474,53475,53476,53477,53478],{"id":50665,"depth":320,"text":50666},{"id":50682,"depth":320,"text":50683},{"id":50722,"depth":320,"text":50723},{"id":50734,"depth":320,"text":50735},{"id":50743,"depth":320,"text":50744},{"id":50791,"depth":320,"text":50792},{"id":50801,"depth":317,"text":50802},{"id":50889,"depth":317,"text":50890},{"id":50912,"depth":317,"text":50913},{"id":50924,"depth":317,"text":50925},{"id":51111,"depth":317,"text":51112,"children":53484},[53485,53486,53487,53488,53489],{"id":51115,"depth":320,"text":51116},{"id":51124,"depth":320,"text":51125},{"id":51152,"depth":320,"text":51153},{"id":51188,"depth":320,"text":51189},{"id":51213,"depth":320,"text":51214},{"id":51225,"depth":317,"text":51226,"children":53491},[53492,53493],{"id":51246,"depth":320,"text":51247},{"id":51340,"depth":320,"text":51341},{"id":51398,"depth":317,"text":51399,"children":53495},[53496,53497,53498,53499],{"id":51402,"depth":320,"text":51403},{"id":51426,"depth":320,"text":51427},{"id":51479,"depth":320,"text":51480},{"id":52290,"depth":320,"text":52291},{"id":52676,"depth":317,"text":52677,"children":53501},[53502,53503,53504,53505,53506,53507,53508],{"id":52694,"depth":320,"text":52695},{"id":52731,"depth":320,"text":52732},{"id":52762,"depth":320,"text":52763},{"id":52795,"depth":320,"text":52796},{"id":52876,"depth":320,"text":52877},{"id":52974,"depth":320,"text":52975},{"id":53032,"depth":320,"text":53033},{"id":53085,"depth":317,"text":53086,"children":53510},[53511,53512,53513,53514,53515,53516,53517],{"id":53089,"depth":320,"text":53090},{"id":53114,"depth":320,"text":53115},{"id":53166,"depth":320,"text":53167},{"id":53186,"depth":320,"text":53187},{"id":53253,"depth":320,"text":53254},{"id":53346,"depth":320,"text":53347},{"id":53427,"depth":320,"text":53428},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50653,"description":23654},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53524,"title":53525,"body":53526,"description":23654,"extension":326,"meta":76866,"navigation":328,"path":76867,"seo":76868,"stem":76869,"__hash__":76870},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53527,"toc":76806},[53528,53531,53534,53537,53542,53545,53548,53551,53555,53559,53565,53570,53578,53585,53588,53592,53597,53602,53607,53610,53613,53624,53627,53631,53634,53637,53642,53647,53652,53655,53658,53750,53753,53758,53761,53766,53769,53772,53777,53780,53785,53789,53792,53806,53810,53815,53818,53821,53825,53830,53833,53837,53841,53846,53850,53855,53858,53861,53864,53867,53870,53873,53878,53883,53911,53914,53917,53920,53925,53928,53931,53934,53937,53941,53970,53974,53979,53984,53987,53990,53993,53998,54113,54118,54123,54284,54289,54292,54296,54301,54306,54309,54312,54315,54318,54321,54324,54327,54330,54333,54336,54339,54342,54345,54348,54350,54353,54356,54359,54364,54368,54765,54768,54774,54778,54783,56065,56070,56073,56076,56079,56084,57280,57284,57290,57295,57298,57303,57308,57312,57316,57321,57324,57329,57332,57335,57339,58247,58250,58254,58475,58478,58481,58484,58710,58713,58937,58940,58944,58949,58952,58955,59183,59186,59219,59222,59226,59231,59235,59238,59241,59244,59247,59250,59253,59256,59261,60541,60545,60548,61641,61645,61648,61651,61654,61657,61661,61664,61667,61669,61677,63158,63162,63165,63168,63171,63380,63383,63387,63391,63396,63401,63404,63407,63412,63416,63421,63424,63533,63537,63542,63547,63550,63553,63557,63562,63567,63572,63575,63578,63589,63592,63597,63602,63605,63608,63681,63685,63690,63693,63695,63706,63710,63715,65041,65044,65047,65050,65052,65055,65058,65061,65064,65067,65070,65073,65076,65079,65082,65085,65088,65090,65092,65095,65099,66193,66196,66199,66215,66229,66232,66237,66243,66248,66252,66256,66261,66265,66270,66712,66717,66720,66724,66729,66732,66735,66739,66744,66748,66753,66758,66762,66767,66772,66775,66780,66785,66789,66794,66799,66903,66906,66910,66915,67281,67284,67287,67290,67293,67296,67299,67302,67305,68601,68605,68610,68615,68618,68621,68624,68627,68629,68634,68639,68642,68646,68651,68656,68661,68664,68667,68670,68673,68676,68681,68684,68688,68693,68698,68702,68707,68710,68715,68718,68721,68724,68727,68730,68735,68738,68741,68744,68747,68751,68756,68759,68763,68768,68771,68774,68778,68807,68810,68814,68818,68823,68827,68832,68835,68838,68841,68844,68847,68850,68853,68856,68859,68862,68865,68868,68871,68874,68878,68883,68888,68891,68895,68899,68904,68907,68911,68914,68917,68922,68927,68932,68937,68942,68945,68948,68953,68958,68962,68967,68970,68975,68978,68981,68984,68987,68992,68995,69004,69008,69013,69016,69019,69023,69026,69031,69035,69038,69044,69050,69054,69080,69083,70644,70647,71143,71146,71151,71156,71161,71165,71170,71175,71180,71184,71189,71192,71195,71198,71201,71205,71208,71213,71216,71221,71225,71230,71233,71238,71243,71248,71251,71254,71259,71264,71267,71270,71274,71277,71282,71285,71290,71293,71298,71303,71308,71311,71316,71381,71384,71395,71399,71404,71576,71580,71585,71588,71591,71594,71598,71609,71613,71616,71621,71626,71629,71632,71635,71638,71641,71643,71646,71649,71652,71657,71660,71665,71668,71672,71675,71678,71692,71696,71699,71754,71759,71762,71765,71770,71773,71777,71782,71912,71916,71921,71926,72007,72012,72016,72019,72024,72029,72035,72038,72041,72044,72048,72053,72056,72067,72071,72088,75135,75139,75142,75145,75148,75169,75173,75176,75184,75187,75192,75195,75198,75203,75208,75212,75233,75237,75242,75245,75248,75251,75254,75258,75263,75266,75270,75275,75278,75283,75286,75291,75294,75299,76502,76506,76511,76514,76519,76803],[10,53529,53525],{"id":53530},"_3web-apis",[19,53532,53533],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,53535,53536],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,53538,53539],{},[1738,53540],{"alt":316,"src":53541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,53543,53544],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,53546,53547],{},"建议数组和对象使用 const 来声明",[19,53549,53550],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[343,53552,53554],{"id":53553},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[14,53556,53558],{"id":53557},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,53560,53561,53564],{},[395,53562,53563],{},"document"," = HTML 文件解析后的对象化表示；",[19,53566,53567,53569],{},[395,53568,53563],{}," ≠ HTML 文件本身",[19,53571,53572,53577],{},[23,53573,53574],{},[395,53575,53576],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,53579,53580,53584],{},[23,53581,53582],{},[395,53583,53563],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,53586,53587],{},"document实际上为window.document的简写",[14,53589,53591],{"id":53590},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,53593,53594],{},[1738,53595],{"alt":316,"src":53596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,53598,53599],{},[1738,53600],{"alt":316,"src":53601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,53603,53604],{},[1738,53605],{"alt":316,"src":53606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,53608,53609],{},"console.dir()",[19,53611,53612],{},"dir用来打印对象",[67,53614,53615,53618,53621],{},[41,53616,53617],{},"任何一个标签，都是一个对象",[41,53619,53620],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[41,53622,53623],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,53625,53626],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[14,53628,53630],{"id":53629},"_312-获取dom对象","3.1.2 获取DoM对象",[19,53632,53633],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,53635,53636],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,53638,53639],{},[23,53640,53641],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[38,53643,53644],{},[41,53645,53646],{},"利用CSS选择器来获取标签元素",[19,53648,53649],{},[1738,53650],{"alt":316,"src":53651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,53653,53654],{},"里边的选择器必须必须加引号！！！",[19,53656,53657],{},"只选择第一个元素",[389,53659,53661],{"className":53260,"code":53660,"language":53262,"meta":316,"style":316},"\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",[395,53662,53663,53671,53692,53711,53719,53724,53729,53734,53742],{"__ignoreMap":316},[398,53664,53665,53667,53669],{"class":400,"line":401},[398,53666,1312],{"class":408},[398,53668,51993],{"class":51493},[398,53670,51500],{"class":408},[398,53672,53673,53675,53677,53680,53682,53685,53688,53690],{"class":400,"line":317},[398,53674,52337],{"class":408},[398,53676,51804],{"class":51493},[398,53678,53679],{"class":2239}," class",[398,53681,454],{"class":408},[398,53683,53684],{"class":513},"\"box\"",[398,53686,53687],{"class":408},">123\u003C\u002F",[398,53689,51804],{"class":51493},[398,53691,51500],{"class":408},[398,53693,53694,53696,53698,53700,53702,53704,53707,53709],{"class":400,"line":320},[398,53695,52337],{"class":408},[398,53697,51804],{"class":51493},[398,53699,53679],{"class":2239},[398,53701,454],{"class":408},[398,53703,53684],{"class":513},[398,53705,53706],{"class":408},">456\u003C\u002F",[398,53708,51804],{"class":51493},[398,53710,51500],{"class":408},[398,53712,53713,53715,53717],{"class":400,"line":1470},[398,53714,52337],{"class":408},[398,53716,52006],{"class":51493},[398,53718,51500],{"class":408},[398,53720,53721],{"class":400,"line":1476},[398,53722,53723],{"class":408},"    \u002F\u002F 1.获取匹配的第一个元素\n",[398,53725,53726],{"class":400,"line":1490},[398,53727,53728],{"class":408},"    const box = document.querySelector('div')\n",[398,53730,53731],{"class":400,"line":1496},[398,53732,53733],{"class":408},"    console.dir(box)\n",[398,53735,53736,53738,53740],{"class":400,"line":1587},[398,53737,52610],{"class":408},[398,53739,52006],{"class":51493},[398,53741,51500],{"class":408},[398,53743,53744,53746,53748],{"class":400,"line":1593},[398,53745,51978],{"class":408},[398,53747,51993],{"class":51493},[398,53749,51500],{"class":408},[19,53751,53752],{},"只选123，不选456",[19,53754,53755],{},[1738,53756],{"alt":316,"src":53757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,53759,53760],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,53762,53763],{},[1738,53764],{"alt":316,"src":53765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,53767,53768],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,53770,53771],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[38,53773,53774],{"start":317},[41,53775,53776],{},"其他方法来获取标签元素",[19,53778,53779],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,53781,53782],{},[1738,53783],{"alt":316,"src":53784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[14,53786,53788],{"id":53787},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,53790,53791],{},"设置修改DOM元素内容有两种方式：",[67,53793,53794,53797,53800,53803],{},[41,53795,53796],{},"元素.innerText=''",[41,53798,53799],{},"元素.innerHTML=''",[41,53801,53802],{},"不写字符串输出数字也是可以的",[41,53804,53805],{},"元素.innerHtml=1",[22275,53807,53809],{"id":53808},"_3131-innertext","3.1.3.1 innerText",[19,53811,53812],{},[1738,53813],{"alt":316,"src":53814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,53816,53817],{},"思路：实现了修改盒子中的内容！",[19,53819,53820],{},"它只显示纯文本，不解析标签",[22275,53822,53824],{"id":53823},"_3132-innerhtml","3.1.3.2 innerHTML",[19,53826,53827],{},[1738,53828],{"alt":316,"src":53829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,53831,53832],{},"相比于innerText，他的强大之处在于可以解析标签",[14,53834,53836],{"id":53835},"_314-操作元素属性","3.1.4 操作元素属性",[22275,53838,53840],{"id":53839},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,53842,53843],{},[1738,53844],{"alt":316,"src":53845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22275,53847,53849],{"id":53848},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,53851,53852],{},[1738,53853],{"alt":316,"src":53854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,53856,53857],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,53859,53860],{},"div.style.backgroundColor = 'hotpink'",[19,53862,53863],{},"如果按照css的写法，-表示减，就会出错",[19,53865,53866],{},"body元素不需要再获取，直接用就行！！！！！！",[19,53868,53869],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,53871,53872],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,53874,53875],{},[1738,53876],{"alt":316,"src":53877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,53879,53880],{},[1738,53881],{"alt":316,"src":53882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[38,53884,53885,53888,53891,53894,53897,53900],{},[41,53886,53887],{},"className这个方式就是修改很多样式的时候来使用的！",[41,53889,53890],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[41,53892,53893],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[41,53895,53896],{},"className为属性名，如果还用class的话就导致与关键字冲突",[41,53898,53899],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[41,53901,53902,53903,53908],{},"解析标签的时候就变为了",[51804,53904],{"className":53905},[53906,53907],"nav","box",[53909,53910],"br",{},[19,53912,53913],{},"例子：",[51804,53915],{"className":53916},[53906],[52006,53918,53919],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,53921,53922],{},[1738,53923],{"alt":316,"src":53924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,53926,53927],{},"追加和删除类名用classList",[19,53929,53930],{},"常用于类似于开关的操作",[19,53932,53933],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,53935,53936],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22275,53938,53940],{"id":53939},"_3143-牢记点","3.1.4.3 牢记点",[38,53942,53943,53946,53949,53952,53955,53958,53961,53964,53967],{},[41,53944,53945],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[41,53947,53948],{},"使用style属性操作css时不要忘记引号",[41,53950,53951],{},"使用className或者classList时也不要忘记引号",[41,53953,53954],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[41,53956,53957],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[41,53959,53960],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[41,53962,53963],{},"若： let arr=['1','2',3] arr[0]=1",[41,53965,53966],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[41,53968,53969],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[14,53971,53973],{"id":53972},"_315-操作表单元素","3.1.5 操作表单元素",[38,53975,53976],{},[41,53977,53978],{},"天生的属性",[19,53980,53981],{},[1738,53982],{"alt":316,"src":53983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,53985,53986],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,53988,53989],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,53991,53992],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,53994,53995],{},[1738,53996],{"alt":316,"src":53997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[389,53999,54001],{"className":50826,"code":54000,"language":50828,"meta":316,"style":316},"在复选框中如果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",[395,54002,54003,54008,54040,54045,54050,54055,54060,54064,54069,54074,54091,54103,54108],{"__ignoreMap":316},[398,54004,54005],{"class":400,"line":401},[398,54006,54007],{"class":408},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[398,54009,54010,54012,54015,54018,54020,54023,54025,54027,54029,54031,54033,54035,54038],{"class":400,"line":317},[398,54011,1312],{"class":408},[398,54013,54014],{"class":51493},"input",[398,54016,54017],{"class":2239}," type",[398,54019,454],{"class":408},[398,54021,54022],{"class":513},"\"checkbox\"",[398,54024,15197],{"class":2239},[398,54026,454],{"class":408},[398,54028,7929],{"class":513},[398,54030,15236],{"class":2239},[398,54032,454],{"class":408},[398,54034,7929],{"class":513},[398,54036,54037],{"class":2239}," checked",[398,54039,51500],{"class":408},[398,54041,54042],{"class":400,"line":320},[398,54043,54044],{"class":408},"不选的话：\n",[398,54046,54047],{"class":400,"line":1470},[398,54048,54049],{"class":408},"const input = document.querySelector('input')\n",[398,54051,54052],{"class":400,"line":1476},[398,54053,54054],{"class":408},"input.checked=false\n",[398,54056,54057],{"class":400,"line":1490},[398,54058,54059],{"class":408},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[398,54061,54062],{"class":400,"line":1496},[398,54063,2676],{"emptyLinePlaceholder":328},[398,54065,54066],{"class":400,"line":1587},[398,54067,54068],{"class":408},"禁用按钮：\n",[398,54070,54071],{"class":400,"line":1593},[398,54072,54073],{"class":408},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[398,54075,54076,54078,54081,54084,54087,54089],{"class":400,"line":1605},[398,54077,1312],{"class":408},[398,54079,54080],{"class":51493},"button",[398,54082,54083],{"class":2239}," disabled",[398,54085,54086],{"class":408},">点击\u003C\u002F",[398,54088,54080],{"class":51493},[398,54090,51500],{"class":408},[398,54092,54093,54095,54097,54099,54101],{"class":400,"line":1888},[398,54094,1312],{"class":408},[398,54096,54080],{"class":51493},[398,54098,54086],{"class":408},[398,54100,54080],{"class":51493},[398,54102,51500],{"class":408},[398,54104,54105],{"class":400,"line":1893},[398,54106,54107],{"class":408},"const bt = document.querySelector('button')\n",[398,54109,54110],{"class":400,"line":1899},[398,54111,54112],{"class":408},"bt.disabled = false\n",[38,54114,54115],{"start":317},[41,54116,54117],{},"自定义属性",[19,54119,54120],{},[1738,54121],{"alt":316,"src":54122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[389,54124,54126],{"className":53260,"code":54125,"language":53262,"meta":316,"style":316},"\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",[395,54127,54128,54136,54164,54183,54202,54221,54240,54248,54253,54258,54263,54268,54276],{"__ignoreMap":316},[398,54129,54130,54132,54134],{"class":400,"line":401},[398,54131,1312],{"class":408},[398,54133,51993],{"class":51493},[398,54135,51500],{"class":408},[398,54137,54138,54140,54142,54145,54147,54149,54152,54154,54157,54160,54162],{"class":400,"line":317},[398,54139,52337],{"class":408},[398,54141,51804],{"class":51493},[398,54143,54144],{"class":2239}," data-id",[398,54146,454],{"class":408},[398,54148,3954],{"class":513},[398,54150,54151],{"class":2239}," data-spm",[398,54153,454],{"class":408},[398,54155,54156],{"class":513},"\"我不知道\"",[398,54158,54159],{"class":408},">1\u003C\u002F",[398,54161,51804],{"class":51493},[398,54163,51500],{"class":408},[398,54165,54166,54168,54170,54172,54174,54176,54179,54181],{"class":400,"line":320},[398,54167,52337],{"class":408},[398,54169,51804],{"class":51493},[398,54171,54144],{"class":2239},[398,54173,454],{"class":408},[398,54175,3977],{"class":513},[398,54177,54178],{"class":408},">2\u003C\u002F",[398,54180,51804],{"class":51493},[398,54182,51500],{"class":408},[398,54184,54185,54187,54189,54191,54193,54195,54198,54200],{"class":400,"line":1470},[398,54186,52337],{"class":408},[398,54188,51804],{"class":51493},[398,54190,54144],{"class":2239},[398,54192,454],{"class":408},[398,54194,3990],{"class":513},[398,54196,54197],{"class":408},">3\u003C\u002F",[398,54199,51804],{"class":51493},[398,54201,51500],{"class":408},[398,54203,54204,54206,54208,54210,54212,54214,54217,54219],{"class":400,"line":1476},[398,54205,52337],{"class":408},[398,54207,51804],{"class":51493},[398,54209,54144],{"class":2239},[398,54211,454],{"class":408},[398,54213,4003],{"class":513},[398,54215,54216],{"class":408},">4\u003C\u002F",[398,54218,51804],{"class":51493},[398,54220,51500],{"class":408},[398,54222,54223,54225,54227,54229,54231,54233,54236,54238],{"class":400,"line":1490},[398,54224,52337],{"class":408},[398,54226,51804],{"class":51493},[398,54228,54144],{"class":2239},[398,54230,454],{"class":408},[398,54232,4024],{"class":513},[398,54234,54235],{"class":408},">5\u003C\u002F",[398,54237,51804],{"class":51493},[398,54239,51500],{"class":408},[398,54241,54242,54244,54246],{"class":400,"line":1496},[398,54243,52337],{"class":408},[398,54245,52006],{"class":51493},[398,54247,51500],{"class":408},[398,54249,54250],{"class":400,"line":1587},[398,54251,54252],{"class":408},"    const one = document.querySelector('div')\n",[398,54254,54255],{"class":400,"line":1593},[398,54256,54257],{"class":408},"    console.log(one.dataset)\n",[398,54259,54260],{"class":400,"line":1605},[398,54261,54262],{"class":408},"    console.log(one.dataset.id)\n",[398,54264,54265],{"class":400,"line":1888},[398,54266,54267],{"class":408},"    console.log(one.dataset.spm)\n",[398,54269,54270,54272,54274],{"class":400,"line":1893},[398,54271,52610],{"class":408},[398,54273,52006],{"class":51493},[398,54275,51500],{"class":408},[398,54277,54278,54280,54282],{"class":400,"line":1899},[398,54279,51978],{"class":408},[398,54281,51993],{"class":51493},[398,54283,51500],{"class":408},[19,54285,54286],{},[1738,54287],{"alt":316,"src":54288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,54290,54291],{},"document.querySelector选择的是第一个对象（元素）",[14,54293,54295],{"id":54294},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,54297,54298],{},[1738,54299],{"alt":316,"src":54300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,54302,54303],{},[1738,54304],{"alt":316,"src":54305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,54307,54308],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[52006,54310,54311],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,54313,54314],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[52006,54316,54317],{},"\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,54319,54320],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,54322,54323],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,54325,54326],{},"单位为毫秒！！！",[19,54328,54329],{},"可以搭配匿名函数来用！！！",[19,54331,54332],{},"setInterval(function () {",[19,54334,54335],{},"alert('两秒执行一次')",[19,54337,54338],{},"}, 2000)",[19,54340,54341],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,54343,54344],{},"function fn() {",[19,54346,54347],{},"document.write(1)",[19,54349,1348],{},[19,54351,54352],{},"setInterval(fn, 1000)",[19,54354,54355],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,54357,54358],{},"setInterval('fn()', 1000)",[19,54360,54361],{},[1738,54362],{"alt":316,"src":54363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22275,54365,54367],{"id":54366},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[389,54369,54371],{"className":50826,"code":54370,"language":50828,"meta":316,"style":316},"\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",[395,54372,54373,54383,54397,54401,54409,54423,54443,54455,54463,54467,54475,54512,54517,54522,54527,54535,54543,54565,54573,54578,54600,54605,54610,54621,54626,54646,54654,54669,54684,54695,54700,54710,54720,54724,54733,54737,54745,54753,54757],{"__ignoreMap":316},[398,54374,54375,54377,54379,54381],{"class":400,"line":401},[398,54376,51490],{"class":408},[398,54378,51494],{"class":51493},[398,54380,51497],{"class":2239},[398,54382,51500],{"class":408},[398,54384,54385,54387,54389,54391,54393,54395],{"class":400,"line":317},[398,54386,1312],{"class":408},[398,54388,50828],{"class":51493},[398,54390,51509],{"class":2239},[398,54392,454],{"class":408},[398,54394,51514],{"class":513},[398,54396,51500],{"class":408},[398,54398,54399],{"class":400,"line":320},[398,54400,2676],{"emptyLinePlaceholder":328},[398,54402,54403,54405,54407],{"class":400,"line":1470},[398,54404,1312],{"class":408},[398,54406,51527],{"class":51493},[398,54408,51500],{"class":408},[398,54410,54411,54413,54415,54417,54419,54421],{"class":400,"line":1476},[398,54412,52337],{"class":408},[398,54414,51537],{"class":51493},[398,54416,51540],{"class":2239},[398,54418,454],{"class":408},[398,54420,51545],{"class":513},[398,54422,51500],{"class":408},[398,54424,54425,54427,54429,54431,54433,54435,54437,54439,54441],{"class":400,"line":1490},[398,54426,52337],{"class":408},[398,54428,51537],{"class":51493},[398,54430,15197],{"class":2239},[398,54432,454],{"class":408},[398,54434,51584],{"class":513},[398,54436,51564],{"class":2239},[398,54438,454],{"class":408},[398,54440,51591],{"class":513},[398,54442,51500],{"class":408},[398,54444,54445,54447,54449,54451,54453],{"class":400,"line":1496},[398,54446,52337],{"class":408},[398,54448,51600],{"class":51493},[398,54450,51603],{"class":408},[398,54452,51600],{"class":51493},[398,54454,51500],{"class":408},[398,54456,54457,54459,54461],{"class":400,"line":1587},[398,54458,51978],{"class":408},[398,54460,51527],{"class":51493},[398,54462,51500],{"class":408},[398,54464,54465],{"class":400,"line":1593},[398,54466,2676],{"emptyLinePlaceholder":328},[398,54468,54469,54471,54473],{"class":400,"line":1605},[398,54470,1312],{"class":408},[398,54472,51993],{"class":51493},[398,54474,51500],{"class":408},[398,54476,54477,54479,54482,54484,54486,54488,54490,54492,54494,54497,54499,54502,54505,54507,54510],{"class":400,"line":1888},[398,54478,52337],{"class":408},[398,54480,54481],{"class":51493},"textarea",[398,54483,15197],{"class":2239},[398,54485,454],{"class":408},[398,54487,7929],{"class":513},[398,54489,15236],{"class":2239},[398,54491,454],{"class":408},[398,54493,7929],{"class":513},[398,54495,54496],{"class":2239}," cols",[398,54498,454],{"class":408},[398,54500,54501],{"class":513},"\"30\"",[398,54503,54504],{"class":2239}," rows",[398,54506,454],{"class":408},[398,54508,54509],{"class":513},"\"10\"",[398,54511,51500],{"class":408},[398,54513,54514],{"class":400,"line":1893},[398,54515,54516],{"class":408},"        用户注册协议\n",[398,54518,54519],{"class":400,"line":1899},[398,54520,54521],{"class":408},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[398,54523,54524],{"class":400,"line":1904},[398,54525,54526],{"class":408},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[398,54528,54529,54531,54533],{"class":400,"line":1918},[398,54530,51969],{"class":408},[398,54532,54481],{"class":51493},[398,54534,51500],{"class":408},[398,54536,54537,54539,54541],{"class":400,"line":1923},[398,54538,52337],{"class":408},[398,54540,53909],{"class":51493},[398,54542,51500],{"class":408},[398,54544,54545,54547,54549,54551,54553,54556,54558,54561,54563],{"class":400,"line":1929},[398,54546,52337],{"class":408},[398,54548,54080],{"class":51493},[398,54550,53679],{"class":2239},[398,54552,454],{"class":408},[398,54554,54555],{"class":513},"\"btn\"",[398,54557,54083],{"class":2239},[398,54559,54560],{"class":408},">我已经阅读用户协议(5)\u003C\u002F",[398,54562,54080],{"class":51493},[398,54564,51500],{"class":408},[398,54566,54567,54569,54571],{"class":400,"line":1950},[398,54568,52337],{"class":408},[398,54570,52006],{"class":51493},[398,54572,51500],{"class":408},[398,54574,54575],{"class":400,"line":1955},[398,54576,54577],{"class":467},"    \u002F\u002F 1. 获取元素\n",[398,54579,54580,54582,54585,54587,54590,54593,54595,54598],{"class":400,"line":1969},[398,54581,11498],{"class":404},[398,54583,54584],{"class":457}," btn",[398,54586,13841],{"class":404},[398,54588,54589],{"class":408}," document.",[398,54591,54592],{"class":2239},"querySelector",[398,54594,409],{"class":408},[398,54596,54597],{"class":513},"'.btn'",[398,54599,415],{"class":408},[398,54601,54602],{"class":400,"line":1974},[398,54603,54604],{"class":467},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[398,54606,54607],{"class":400,"line":2003},[398,54608,54609],{"class":467},"    \u002F\u002F 2. 倒计时\n",[398,54611,54612,54614,54616,54618],{"class":400,"line":2008},[398,54613,52412],{"class":404},[398,54615,9715],{"class":408},[398,54617,454],{"class":404},[398,54619,54620],{"class":457}," 5\n",[398,54622,54623],{"class":400,"line":2025},[398,54624,54625],{"class":467},"    \u002F\u002F 2.1 开启定时器\n",[398,54627,54628,54630,54633,54635,54638,54640,54643],{"class":400,"line":2030},[398,54629,52412],{"class":404},[398,54631,54632],{"class":408}," n ",[398,54634,454],{"class":404},[398,54636,54637],{"class":2239}," setInterval",[398,54639,409],{"class":408},[398,54641,54642],{"class":404},"function",[398,54644,54645],{"class":408}," () {\n",[398,54647,54648,54651],{"class":400,"line":2035},[398,54649,54650],{"class":408},"      i",[398,54652,54653],{"class":404},"--\n",[398,54655,54656,54659,54661,54664,54666],{"class":400,"line":2040},[398,54657,54658],{"class":408},"      btn.innerHTML ",[398,54660,454],{"class":404},[398,54662,54663],{"class":513}," `我已经阅读用户协议(${",[398,54665,843],{"class":408},[398,54667,54668],{"class":513},"})`\n",[398,54670,54671,54674,54677,54680,54682],{"class":400,"line":2054},[398,54672,54673],{"class":404},"      if",[398,54675,54676],{"class":408}," (i ",[398,54678,54679],{"class":404},"===",[398,54681,4369],{"class":457},[398,54683,12719],{"class":408},[398,54685,54686,54689,54692],{"class":400,"line":2059},[398,54687,54688],{"class":2239},"        clearInterval",[398,54690,54691],{"class":408},"(n)  ",[398,54693,54694],{"class":467},"\u002F\u002F 关闭定时器\n",[398,54696,54697],{"class":400,"line":2853},[398,54698,54699],{"class":467},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[398,54701,54702,54705,54707],{"class":400,"line":2867},[398,54703,54704],{"class":408},"        btn.disabled ",[398,54706,454],{"class":404},[398,54708,54709],{"class":457}," false\n",[398,54711,54712,54715,54717],{"class":400,"line":2875},[398,54713,54714],{"class":408},"        btn.innerHTML ",[398,54716,454],{"class":404},[398,54718,54719],{"class":513}," '同意'\n",[398,54721,54722],{"class":400,"line":2880},[398,54723,52591],{"class":408},[398,54725,54726,54729,54731],{"class":400,"line":2886},[398,54727,54728],{"class":408},"    }, ",[398,54730,6687],{"class":457},[398,54732,415],{"class":408},[398,54734,54735],{"class":400,"line":2892},[398,54736,2676],{"emptyLinePlaceholder":328},[398,54738,54739,54741,54743],{"class":400,"line":2897},[398,54740,52610],{"class":408},[398,54742,52006],{"class":51493},[398,54744,51500],{"class":408},[398,54746,54747,54749,54751],{"class":400,"line":8225},[398,54748,51978],{"class":408},[398,54750,51993],{"class":51493},[398,54752,51500],{"class":408},[398,54754,54755],{"class":400,"line":8249},[398,54756,2676],{"emptyLinePlaceholder":328},[398,54758,54759,54761,54763],{"class":400,"line":8254},[398,54760,51978],{"class":408},[398,54762,50828],{"class":51493},[398,54764,51500],{"class":408},[19,54766,54767],{},"不要一直想着用死循环,避免死循环",[19,54769,54770,54773],{},[395,54771,54772],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22275,54775,54777],{"id":54776},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[38,54779,54780],{},[41,54781,54782],{},"法1",[389,54784,54786],{"className":50826,"code":54785,"language":50828,"meta":316,"style":316},"\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",[395,54787,54788,54798,54812,54816,54824,54838,54858,54870,54878,54884,54895,54906,54910,54914,54921,54933,54937,54941,54948,54960,54974,54987,55001,55005,55009,55016,55027,55038,55049,55061,55073,55085,55089,55093,55101,55111,55124,55136,55149,55153,55157,55164,55174,55186,55198,55209,55220,55230,55242,55254,55258,55262,55271,55283,55295,55323,55336,55340,55344,55351,55362,55366,55374,55382,55386,55394,55408,55423,55447,55455,55470,55483,55491,55512,55524,55536,55548,55560,55572,55584,55596,55605,55613,55621,55629,55641,55664,55683,55702,55721,55740,55759,55778,55798,55802,55822,55841,55861,55882,55893,55910,55920,55930,55940,55945,55950,55955,55960,55985,55998,56002,56025,56029,56037,56045,56053,56057],{"__ignoreMap":316},[398,54789,54790,54792,54794,54796],{"class":400,"line":401},[398,54791,51490],{"class":408},[398,54793,51494],{"class":51493},[398,54795,51497],{"class":2239},[398,54797,51500],{"class":408},[398,54799,54800,54802,54804,54806,54808,54810],{"class":400,"line":317},[398,54801,1312],{"class":408},[398,54803,50828],{"class":51493},[398,54805,51509],{"class":2239},[398,54807,454],{"class":408},[398,54809,51514],{"class":513},[398,54811,51500],{"class":408},[398,54813,54814],{"class":400,"line":320},[398,54815,2676],{"emptyLinePlaceholder":328},[398,54817,54818,54820,54822],{"class":400,"line":1470},[398,54819,1312],{"class":408},[398,54821,51527],{"class":51493},[398,54823,51500],{"class":408},[398,54825,54826,54828,54830,54832,54834,54836],{"class":400,"line":1476},[398,54827,52337],{"class":408},[398,54829,51537],{"class":51493},[398,54831,51540],{"class":2239},[398,54833,454],{"class":408},[398,54835,51545],{"class":513},[398,54837,51500],{"class":408},[398,54839,54840,54842,54844,54846,54848,54850,54852,54854,54856],{"class":400,"line":1490},[398,54841,52337],{"class":408},[398,54843,51537],{"class":51493},[398,54845,15197],{"class":2239},[398,54847,454],{"class":408},[398,54849,51584],{"class":513},[398,54851,51564],{"class":2239},[398,54853,454],{"class":408},[398,54855,51591],{"class":513},[398,54857,51500],{"class":408},[398,54859,54860,54862,54864,54866,54868],{"class":400,"line":1496},[398,54861,52337],{"class":408},[398,54863,51600],{"class":51493},[398,54865,51603],{"class":408},[398,54867,51600],{"class":51493},[398,54869,51500],{"class":408},[398,54871,54872,54874,54876],{"class":400,"line":1587},[398,54873,52337],{"class":408},[398,54875,5403],{"class":51493},[398,54877,51500],{"class":408},[398,54879,54880,54882],{"class":400,"line":1593},[398,54881,6680],{"class":51493},[398,54883,15849],{"class":408},[398,54885,54886,54889,54891,54893],{"class":400,"line":1605},[398,54887,54888],{"class":457},"      padding",[398,54890,51630],{"class":408},[398,54892,593],{"class":457},[398,54894,1566],{"class":408},[398,54896,54897,54900,54902,54904],{"class":400,"line":1888},[398,54898,54899],{"class":457},"      margin",[398,54901,51630],{"class":408},[398,54903,593],{"class":457},[398,54905,1566],{"class":408},[398,54907,54908],{"class":400,"line":1893},[398,54909,2463],{"class":408},[398,54911,54912],{"class":400,"line":1899},[398,54913,2676],{"emptyLinePlaceholder":328},[398,54915,54916,54919],{"class":400,"line":1904},[398,54917,54918],{"class":51493},"    li",[398,54920,15849],{"class":408},[398,54922,54923,54926,54928,54931],{"class":400,"line":1918},[398,54924,54925],{"class":457},"      list-style",[398,54927,51630],{"class":408},[398,54929,54930],{"class":457},"none",[398,54932,1566],{"class":408},[398,54934,54935],{"class":400,"line":1923},[398,54936,2463],{"class":408},[398,54938,54939],{"class":400,"line":1929},[398,54940,2676],{"emptyLinePlaceholder":328},[398,54942,54943,54946],{"class":400,"line":1950},[398,54944,54945],{"class":2239},"    .box",[398,54947,15849],{"class":408},[398,54949,54950,54953,54955,54958],{"class":400,"line":1955},[398,54951,54952],{"class":457},"      position",[398,54954,51630],{"class":408},[398,54956,54957],{"class":457},"relative",[398,54959,1566],{"class":408},[398,54961,54962,54965,54967,54970,54972],{"class":400,"line":1969},[398,54963,54964],{"class":457},"      width",[398,54966,51630],{"class":408},[398,54968,54969],{"class":457},"976",[398,54971,51685],{"class":404},[398,54973,1566],{"class":408},[398,54975,54976,54979,54981,54983,54985],{"class":400,"line":1974},[398,54977,54978],{"class":457},"      height",[398,54980,51630],{"class":408},[398,54982,1815],{"class":457},[398,54984,51685],{"class":404},[398,54986,1566],{"class":408},[398,54988,54989,54991,54993,54995,54997,54999],{"class":400,"line":2003},[398,54990,54899],{"class":457},[398,54992,51630],{"class":408},[398,54994,713],{"class":457},[398,54996,51685],{"class":404},[398,54998,51749],{"class":457},[398,55000,1566],{"class":408},[398,55002,55003],{"class":400,"line":2008},[398,55004,2463],{"class":408},[398,55006,55007],{"class":400,"line":2025},[398,55008,2676],{"emptyLinePlaceholder":328},[398,55010,55011,55014],{"class":400,"line":2030},[398,55012,55013],{"class":2239},"    .slider-footer",[398,55015,15849],{"class":408},[398,55017,55018,55020,55022,55025],{"class":400,"line":2035},[398,55019,54952],{"class":457},[398,55021,51630],{"class":408},[398,55023,55024],{"class":457},"absolute",[398,55026,1566],{"class":408},[398,55028,55029,55032,55034,55036],{"class":400,"line":2040},[398,55030,55031],{"class":457},"      left",[398,55033,51630],{"class":408},[398,55035,593],{"class":457},[398,55037,1566],{"class":408},[398,55039,55040,55043,55045,55047],{"class":400,"line":2054},[398,55041,55042],{"class":457},"      bottom",[398,55044,51630],{"class":408},[398,55046,593],{"class":457},[398,55048,1566],{"class":408},[398,55050,55051,55053,55055,55057,55059],{"class":400,"line":2059},[398,55052,54964],{"class":457},[398,55054,51630],{"class":408},[398,55056,713],{"class":457},[398,55058,730],{"class":404},[398,55060,1566],{"class":408},[398,55062,55063,55065,55067,55069,55071],{"class":400,"line":2853},[398,55064,54978],{"class":457},[398,55066,51630],{"class":408},[398,55068,977],{"class":457},[398,55070,730],{"class":404},[398,55072,1566],{"class":408},[398,55074,55075,55078,55080,55083],{"class":400,"line":2867},[398,55076,55077],{"class":457},"      background-color",[398,55079,51630],{"class":408},[398,55081,55082],{"class":457},"skyblue",[398,55084,1566],{"class":408},[398,55086,55087],{"class":400,"line":2875},[398,55088,2463],{"class":408},[398,55090,55091],{"class":400,"line":2880},[398,55092,2676],{"emptyLinePlaceholder":328},[398,55094,55095,55097,55099],{"class":400,"line":2886},[398,55096,55013],{"class":2239},[398,55098,7102],{"class":51493},[398,55100,15849],{"class":408},[398,55102,55103,55105,55107,55109],{"class":400,"line":2892},[398,55104,54952],{"class":457},[398,55106,51630],{"class":408},[398,55108,55024],{"class":457},[398,55110,1566],{"class":408},[398,55112,55113,55116,55118,55120,55122],{"class":400,"line":2897},[398,55114,55115],{"class":457},"      font-size",[398,55117,51630],{"class":408},[398,55119,1303],{"class":457},[398,55121,51685],{"class":404},[398,55123,1566],{"class":408},[398,55125,55126,55128,55130,55132,55134],{"class":400,"line":8225},[398,55127,55031],{"class":457},[398,55129,51630],{"class":408},[398,55131,1102],{"class":457},[398,55133,51685],{"class":404},[398,55135,1566],{"class":408},[398,55137,55138,55141,55143,55145,55147],{"class":400,"line":8249},[398,55139,55140],{"class":457},"      top",[398,55142,51630],{"class":408},[398,55144,721],{"class":457},[398,55146,51685],{"class":404},[398,55148,1566],{"class":408},[398,55150,55151],{"class":400,"line":8254},[398,55152,2463],{"class":408},[398,55154,55155],{"class":400,"line":8260},[398,55156,2676],{"emptyLinePlaceholder":328},[398,55158,55159,55162],{"class":400,"line":8287},[398,55160,55161],{"class":51493},"    ul",[398,55163,15849],{"class":408},[398,55165,55166,55168,55170,55172],{"class":400,"line":8292},[398,55167,54952],{"class":457},[398,55169,51630],{"class":408},[398,55171,55024],{"class":457},[398,55173,1566],{"class":408},[398,55175,55176,55178,55180,55182,55184],{"class":400,"line":8298},[398,55177,55140],{"class":457},[398,55179,51630],{"class":408},[398,55181,1183],{"class":457},[398,55183,51685],{"class":404},[398,55185,1566],{"class":408},[398,55187,55188,55190,55192,55194,55196],{"class":400,"line":8310},[398,55189,55031],{"class":457},[398,55191,51630],{"class":408},[398,55193,1102],{"class":457},[398,55195,51685],{"class":404},[398,55197,1566],{"class":408},[398,55199,55200,55203,55205,55207],{"class":400,"line":8322},[398,55201,55202],{"class":457},"      display",[398,55204,51630],{"class":408},[398,55206,51670],{"class":457},[398,55208,1566],{"class":408},[398,55210,55211,55214,55216,55218],{"class":400,"line":8334},[398,55212,55213],{"class":457},"      justify-content",[398,55215,51630],{"class":408},[398,55217,51861],{"class":457},[398,55219,1566],{"class":408},[398,55221,55222,55224,55226,55228],{"class":400,"line":9993},[398,55223,54952],{"class":457},[398,55225,51630],{"class":408},[398,55227,55024],{"class":457},[398,55229,1566],{"class":408},[398,55231,55232,55234,55236,55238,55240],{"class":400,"line":10018},[398,55233,54964],{"class":457},[398,55235,51630],{"class":408},[398,55237,4268],{"class":457},[398,55239,51685],{"class":404},[398,55241,1566],{"class":408},[398,55243,55244,55246,55248,55250,55252],{"class":400,"line":10041},[398,55245,54978],{"class":457},[398,55247,51630],{"class":408},[398,55249,1102],{"class":457},[398,55251,51685],{"class":404},[398,55253,1566],{"class":408},[398,55255,55256],{"class":400,"line":10065},[398,55257,2463],{"class":408},[398,55259,55260],{"class":400,"line":10070},[398,55261,2676],{"emptyLinePlaceholder":328},[398,55263,55264,55266,55269],{"class":400,"line":10075},[398,55265,55161],{"class":51493},[398,55267,55268],{"class":51493}," li",[398,55270,15849],{"class":408},[398,55272,55273,55275,55277,55279,55281],{"class":400,"line":10080},[398,55274,54964],{"class":457},[398,55276,51630],{"class":408},[398,55278,1102],{"class":457},[398,55280,51685],{"class":404},[398,55282,1566],{"class":408},[398,55284,55285,55287,55289,55291,55293],{"class":400,"line":10089},[398,55286,54978],{"class":457},[398,55288,51630],{"class":408},[398,55290,1102],{"class":457},[398,55292,51685],{"class":404},[398,55294,1566],{"class":408},[398,55296,55297,55299,55301,55304,55306,55308,55310,55312,55314,55316,55318,55321],{"class":400,"line":10094},[398,55298,55077],{"class":457},[398,55300,51630],{"class":408},[398,55302,55303],{"class":457},"rgba",[398,55305,409],{"class":408},[398,55307,593],{"class":457},[398,55309,12712],{"class":408},[398,55311,593],{"class":457},[398,55313,12712],{"class":408},[398,55315,593],{"class":457},[398,55317,12712],{"class":408},[398,55319,55320],{"class":457},".4",[398,55322,2995],{"class":408},[398,55324,55325,55328,55330,55332,55334],{"class":400,"line":10100},[398,55326,55327],{"class":457},"      border-radius",[398,55329,51630],{"class":408},[398,55331,848],{"class":457},[398,55333,51685],{"class":404},[398,55335,1566],{"class":408},[398,55337,55338],{"class":400,"line":10121},[398,55339,2463],{"class":408},[398,55341,55342],{"class":400,"line":10127},[398,55343,2676],{"emptyLinePlaceholder":328},[398,55345,55346,55349],{"class":400,"line":10141},[398,55347,55348],{"class":2239},"    .activate",[398,55350,15849],{"class":408},[398,55352,55353,55355,55357,55360],{"class":400,"line":10147},[398,55354,55077],{"class":457},[398,55356,51630],{"class":408},[398,55358,55359],{"class":457},"#f7f7f7",[398,55361,1566],{"class":408},[398,55363,55364],{"class":400,"line":10174},[398,55365,2463],{"class":408},[398,55367,55368,55370,55372],{"class":400,"line":10183},[398,55369,52610],{"class":408},[398,55371,5403],{"class":51493},[398,55373,51500],{"class":408},[398,55375,55376,55378,55380],{"class":400,"line":10189},[398,55377,51978],{"class":408},[398,55379,51527],{"class":51493},[398,55381,51500],{"class":408},[398,55383,55384],{"class":400,"line":10197},[398,55385,2676],{"emptyLinePlaceholder":328},[398,55387,55388,55390,55392],{"class":400,"line":10202},[398,55389,1312],{"class":408},[398,55391,51993],{"class":51493},[398,55393,51500],{"class":408},[398,55395,55396,55398,55400,55402,55404,55406],{"class":400,"line":16881},[398,55397,52337],{"class":408},[398,55399,51804],{"class":51493},[398,55401,53679],{"class":2239},[398,55403,454],{"class":408},[398,55405,53684],{"class":513},[398,55407,51500],{"class":408},[398,55409,55410,55412,55414,55416,55418,55421],{"class":400,"line":16887},[398,55411,51534],{"class":408},[398,55413,51804],{"class":51493},[398,55415,53679],{"class":2239},[398,55417,454],{"class":408},[398,55419,55420],{"class":513},"\"slider-wrapper\"",[398,55422,51500],{"class":408},[398,55424,55425,55428,55430,55433,55435,55438,55441,55443,55445],{"class":400,"line":16910},[398,55426,55427],{"class":408},"      \u003C",[398,55429,1738],{"class":51493},[398,55431,55432],{"class":2239}," src",[398,55434,454],{"class":408},[398,55436,55437],{"class":513},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[398,55439,55440],{"class":2239}," alt",[398,55442,454],{"class":408},[398,55444,7929],{"class":513},[398,55446,51500],{"class":408},[398,55448,55449,55451,55453],{"class":400,"line":16916},[398,55450,51969],{"class":408},[398,55452,51804],{"class":51493},[398,55454,51500],{"class":408},[398,55456,55457,55459,55461,55463,55465,55468],{"class":400,"line":16939},[398,55458,51534],{"class":408},[398,55460,51804],{"class":51493},[398,55462,53679],{"class":2239},[398,55464,454],{"class":408},[398,55466,55467],{"class":513},"\"slider-footer\"",[398,55469,51500],{"class":408},[398,55471,55472,55474,55476,55479,55481],{"class":400,"line":16953},[398,55473,55427],{"class":408},[398,55475,19],{"class":51493},[398,55477,55478],{"class":408},">对人类来说会不会太超前了?\u003C\u002F",[398,55480,19],{"class":51493},[398,55482,51500],{"class":408},[398,55484,55485,55487,55489],{"class":400,"line":16973},[398,55486,55427],{"class":408},[398,55488,67],{"class":51493},[398,55490,51500],{"class":408},[398,55492,55493,55496,55498,55500,55502,55505,55508,55510],{"class":400,"line":16979},[398,55494,55495],{"class":408},"        \u003C",[398,55497,41],{"class":51493},[398,55499,53679],{"class":2239},[398,55501,454],{"class":408},[398,55503,55504],{"class":513},"\"activate\"",[398,55506,55507],{"class":408},">\u003C\u002F",[398,55509,41],{"class":51493},[398,55511,51500],{"class":408},[398,55513,55514,55516,55518,55520,55522],{"class":400,"line":16990},[398,55515,55495],{"class":408},[398,55517,41],{"class":51493},[398,55519,55507],{"class":408},[398,55521,41],{"class":51493},[398,55523,51500],{"class":408},[398,55525,55526,55528,55530,55532,55534],{"class":400,"line":17013},[398,55527,55495],{"class":408},[398,55529,41],{"class":51493},[398,55531,55507],{"class":408},[398,55533,41],{"class":51493},[398,55535,51500],{"class":408},[398,55537,55538,55540,55542,55544,55546],{"class":400,"line":17035},[398,55539,55495],{"class":408},[398,55541,41],{"class":51493},[398,55543,55507],{"class":408},[398,55545,41],{"class":51493},[398,55547,51500],{"class":408},[398,55549,55550,55552,55554,55556,55558],{"class":400,"line":17040},[398,55551,55495],{"class":408},[398,55553,41],{"class":51493},[398,55555,55507],{"class":408},[398,55557,41],{"class":51493},[398,55559,51500],{"class":408},[398,55561,55562,55564,55566,55568,55570],{"class":400,"line":17046},[398,55563,55495],{"class":408},[398,55565,41],{"class":51493},[398,55567,55507],{"class":408},[398,55569,41],{"class":51493},[398,55571,51500],{"class":408},[398,55573,55574,55576,55578,55580,55582],{"class":400,"line":17060},[398,55575,55495],{"class":408},[398,55577,41],{"class":51493},[398,55579,55507],{"class":408},[398,55581,41],{"class":51493},[398,55583,51500],{"class":408},[398,55585,55586,55588,55590,55592,55594],{"class":400,"line":17073},[398,55587,55495],{"class":408},[398,55589,41],{"class":51493},[398,55591,55507],{"class":408},[398,55593,41],{"class":51493},[398,55595,51500],{"class":408},[398,55597,55598,55601,55603],{"class":400,"line":17078},[398,55599,55600],{"class":408},"      \u003C\u002F",[398,55602,67],{"class":51493},[398,55604,51500],{"class":408},[398,55606,55607,55609,55611],{"class":400,"line":17092},[398,55608,51969],{"class":408},[398,55610,51804],{"class":51493},[398,55612,51500],{"class":408},[398,55614,55615,55617,55619],{"class":400,"line":17097},[398,55616,52610],{"class":408},[398,55618,51804],{"class":51493},[398,55620,51500],{"class":408},[398,55622,55623,55625,55627],{"class":400,"line":17103},[398,55624,52337],{"class":408},[398,55626,52006],{"class":51493},[398,55628,51500],{"class":408},[398,55630,55631,55633,55636,55638],{"class":400,"line":17108},[398,55632,11498],{"class":404},[398,55634,55635],{"class":457}," arrImage",[398,55637,13841],{"class":404},[398,55639,55640],{"class":408}," [\n",[398,55642,55643,55646,55649,55652,55655,55658,55661],{"class":400,"line":17122},[398,55644,55645],{"class":408},"      { url: ",[398,55647,55648],{"class":513},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[398,55650,55651],{"class":408},", title: ",[398,55653,55654],{"class":513},"'对人类来说会不会太超前了?'",[398,55656,55657],{"class":408},", color: ",[398,55659,55660],{"class":513},"'rgba(100,67,68)'",[398,55662,55663],{"class":408}," },\n",[398,55665,55666,55668,55671,55673,55676,55678,55681],{"class":400,"line":17127},[398,55667,55645],{"class":408},[398,55669,55670],{"class":513},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[398,55672,55651],{"class":408},[398,55674,55675],{"class":513},"'开启剑与雪的黑暗传说!'",[398,55677,55657],{"class":408},[398,55679,55680],{"class":513},"'rgba(43,35,26)'",[398,55682,55663],{"class":408},[398,55684,55685,55687,55690,55692,55695,55697,55700],{"class":400,"line":17132},[398,55686,55645],{"class":408},[398,55688,55689],{"class":513},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[398,55691,55651],{"class":408},[398,55693,55694],{"class":513},"'真正的jo厨出现了!'",[398,55696,55657],{"class":408},[398,55698,55699],{"class":513},"'rgba(36,31,33)'",[398,55701,55663],{"class":408},[398,55703,55704,55706,55709,55711,55714,55716,55719],{"class":400,"line":17146},[398,55705,55645],{"class":408},[398,55707,55708],{"class":513},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[398,55710,55651],{"class":408},[398,55712,55713],{"class":513},"'李玉刚:让世界通过b站看到东方大国文化'",[398,55715,55657],{"class":408},[398,55717,55718],{"class":513},"'rgba(139,98,66)'",[398,55720,55663],{"class":408},[398,55722,55723,55725,55728,55730,55733,55735,55738],{"class":400,"line":17158},[398,55724,55645],{"class":408},[398,55726,55727],{"class":513},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[398,55729,55651],{"class":408},[398,55731,55732],{"class":513},"'快来分享你的寒假日常吧'",[398,55734,55657],{"class":408},[398,55736,55737],{"class":513},"'rgba(67,90,92)'",[398,55739,55663],{"class":408},[398,55741,55742,55744,55747,55749,55752,55754,55757],{"class":400,"line":17163},[398,55743,55645],{"class":408},[398,55745,55746],{"class":513},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[398,55748,55651],{"class":408},[398,55750,55751],{"class":513},"'哔哩哔哩小年YEAR'",[398,55753,55657],{"class":408},[398,55755,55756],{"class":513},"'rgba(166,131,143)'",[398,55758,55663],{"class":408},[398,55760,55761,55763,55766,55768,55771,55773,55776],{"class":400,"line":17176},[398,55762,55645],{"class":408},[398,55764,55765],{"class":513},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[398,55767,55651],{"class":408},[398,55769,55770],{"class":513},"'一站式解决你的电脑配置问题'",[398,55772,55657],{"class":408},[398,55774,55775],{"class":513},"'rgba(53,29,25)'",[398,55777,55663],{"class":408},[398,55779,55780,55782,55785,55787,55790,55792,55795],{"class":400,"line":17181},[398,55781,55645],{"class":408},[398,55783,55784],{"class":513},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[398,55786,55651],{"class":408},[398,55788,55789],{"class":513},"'谁不想和小猫咪贴贴呢?'",[398,55791,55657],{"class":408},[398,55793,55794],{"class":513},"'rgba(99,72,114)'",[398,55796,55797],{"class":408}," }\n",[398,55799,55800],{"class":400,"line":17186},[398,55801,53302],{"class":408},[398,55803,55804,55806,55809,55811,55813,55815,55817,55820],{"class":400,"line":17191},[398,55805,11498],{"class":404},[398,55807,55808],{"class":457}," img",[398,55810,13841],{"class":404},[398,55812,54589],{"class":408},[398,55814,54592],{"class":2239},[398,55816,409],{"class":408},[398,55818,55819],{"class":513},"'.slider-wrapper img'",[398,55821,415],{"class":408},[398,55823,55824,55826,55828,55830,55832,55834,55836,55839],{"class":400,"line":17204},[398,55825,11498],{"class":404},[398,55827,7102],{"class":457},[398,55829,13841],{"class":404},[398,55831,54589],{"class":408},[398,55833,54592],{"class":2239},[398,55835,409],{"class":408},[398,55837,55838],{"class":513},"'.slider-footer p'",[398,55840,415],{"class":408},[398,55842,55843,55845,55848,55850,55852,55854,55856,55859],{"class":400,"line":17209},[398,55844,11498],{"class":404},[398,55846,55847],{"class":457}," color",[398,55849,13841],{"class":404},[398,55851,54589],{"class":408},[398,55853,54592],{"class":2239},[398,55855,409],{"class":408},[398,55857,55858],{"class":513},"'.slider-footer'",[398,55860,415],{"class":408},[398,55862,55863,55865,55868,55870,55872,55875,55877,55880],{"class":400,"line":32826},[398,55864,11498],{"class":404},[398,55866,55867],{"class":457}," lis",[398,55869,13841],{"class":404},[398,55871,54589],{"class":408},[398,55873,55874],{"class":2239},"querySelectorAll",[398,55876,409],{"class":408},[398,55878,55879],{"class":513},"'.slider-footer ul li'",[398,55881,415],{"class":408},[398,55883,55884,55886,55888,55890],{"class":400,"line":32832},[398,55885,52412],{"class":404},[398,55887,9715],{"class":408},[398,55889,454],{"class":404},[398,55891,55892],{"class":457}," 1\n",[398,55894,55895,55897,55900,55902,55904,55906,55908],{"class":400,"line":32838},[398,55896,52412],{"class":404},[398,55898,55899],{"class":408}," timer ",[398,55901,454],{"class":404},[398,55903,54637],{"class":2239},[398,55905,409],{"class":408},[398,55907,54642],{"class":404},[398,55909,54645],{"class":408},[398,55911,55912,55915,55917],{"class":400,"line":32844},[398,55913,55914],{"class":408},"      img.src ",[398,55916,454],{"class":404},[398,55918,55919],{"class":408}," arrImage[i].url\n",[398,55921,55922,55925,55927],{"class":400,"line":32850},[398,55923,55924],{"class":408},"      p.innerHTML ",[398,55926,454],{"class":404},[398,55928,55929],{"class":408}," arrImage[i].title\n",[398,55931,55932,55935,55937],{"class":400,"line":32861},[398,55933,55934],{"class":408},"      color.style.backgroundColor ",[398,55936,454],{"class":404},[398,55938,55939],{"class":408}," arrImage[i].color\n",[398,55941,55942],{"class":400,"line":32867},[398,55943,55944],{"class":467},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[398,55946,55947],{"class":400,"line":32887},[398,55948,55949],{"class":467},"      \u002F\u002F li.classList.add('activate')\n",[398,55951,55952],{"class":400,"line":32893},[398,55953,55954],{"class":467},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[398,55956,55957],{"class":400,"line":32904},[398,55958,55959],{"class":467},"      \u002F\u002F lis[i].classList.remove('activate')\n",[398,55961,55962,55965,55967,55969,55972,55975,55978,55980,55983],{"class":400,"line":32910},[398,55963,55964],{"class":408},"      document.",[398,55966,54592],{"class":2239},[398,55968,409],{"class":408},[398,55970,55971],{"class":513},"'.activate'",[398,55973,55974],{"class":408},")?.classList.",[398,55976,55977],{"class":2239},"toggle",[398,55979,409],{"class":408},[398,55981,55982],{"class":513},"'activate'",[398,55984,415],{"class":408},[398,55986,55987,55990,55992,55994,55996],{"class":400,"line":32916},[398,55988,55989],{"class":408},"      lis[i].classList.",[398,55991,5611],{"class":2239},[398,55993,409],{"class":408},[398,55995,55982],{"class":513},[398,55997,415],{"class":408},[398,55999,56000],{"class":400,"line":32922},[398,56001,2676],{"emptyLinePlaceholder":328},[398,56003,56004,56007,56009,56011,56013,56015,56017,56019,56022],{"class":400,"line":32928},[398,56005,56006],{"class":408},"      i ",[398,56008,454],{"class":404},[398,56010,54676],{"class":408},[398,56012,883],{"class":404},[398,56014,25396],{"class":457},[398,56016,13991],{"class":408},[398,56018,730],{"class":404},[398,56020,56021],{"class":408}," arrImage.",[398,56023,56024],{"class":457},"length\n",[398,56026,56027],{"class":400,"line":32934},[398,56028,2676],{"emptyLinePlaceholder":328},[398,56030,56031,56033,56035],{"class":400,"line":32940},[398,56032,54728],{"class":408},[398,56034,6687],{"class":457},[398,56036,415],{"class":408},[398,56038,56039,56041,56043],{"class":400,"line":32946},[398,56040,52610],{"class":408},[398,56042,52006],{"class":51493},[398,56044,51500],{"class":408},[398,56046,56047,56049,56051],{"class":400,"line":32966},[398,56048,51978],{"class":408},[398,56050,51993],{"class":51493},[398,56052,51500],{"class":408},[398,56054,56055],{"class":400,"line":32972},[398,56056,2676],{"emptyLinePlaceholder":328},[398,56058,56059,56061,56063],{"class":400,"line":32988},[398,56060,51978],{"class":408},[398,56062,50828],{"class":51493},[398,56064,51500],{"class":408},[19,56066,56067],{},[1738,56068],{"alt":316,"src":56069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,56071,56072],{},"?.就是短路保护,确保输出正常进行",[19,56074,56075],{},"不要忘记取余%,有时候可以用",[19,56077,56078],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[38,56080,56081],{"start":317},[41,56082,56083],{},"法2",[389,56085,56087],{"className":50826,"code":56086,"language":50828,"meta":316,"style":316},"\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",[395,56088,56089,56099,56113,56117,56125,56139,56159,56171,56179,56185,56195,56205,56209,56213,56219,56229,56233,56237,56243,56253,56265,56277,56291,56295,56299,56305,56315,56325,56335,56347,56359,56369,56373,56377,56385,56395,56407,56419,56431,56435,56439,56445,56455,56467,56479,56489,56499,56509,56521,56533,56537,56541,56549,56561,56573,56599,56611,56615,56619,56625,56635,56639,56647,56655,56659,56667,56681,56695,56715,56723,56737,56749,56757,56775,56787,56799,56811,56823,56835,56847,56859,56867,56875,56883,56891,56902,56918,56934,56950,56966,56982,56998,57014,57030,57034,57039,57057,57075,57085,57090,57095,57106,57112,57127,57136,57140,57145,57154,57159,57168,57173,57178,57183,57206,57236,57240,57248,57252,57260,57268,57272],{"__ignoreMap":316},[398,56090,56091,56093,56095,56097],{"class":400,"line":401},[398,56092,51490],{"class":408},[398,56094,51494],{"class":51493},[398,56096,51497],{"class":2239},[398,56098,51500],{"class":408},[398,56100,56101,56103,56105,56107,56109,56111],{"class":400,"line":317},[398,56102,1312],{"class":408},[398,56104,50828],{"class":51493},[398,56106,51509],{"class":2239},[398,56108,454],{"class":408},[398,56110,51514],{"class":513},[398,56112,51500],{"class":408},[398,56114,56115],{"class":400,"line":320},[398,56116,2676],{"emptyLinePlaceholder":328},[398,56118,56119,56121,56123],{"class":400,"line":1470},[398,56120,1312],{"class":408},[398,56122,51527],{"class":51493},[398,56124,51500],{"class":408},[398,56126,56127,56129,56131,56133,56135,56137],{"class":400,"line":1476},[398,56128,52337],{"class":408},[398,56130,51537],{"class":51493},[398,56132,51540],{"class":2239},[398,56134,454],{"class":408},[398,56136,51545],{"class":513},[398,56138,51500],{"class":408},[398,56140,56141,56143,56145,56147,56149,56151,56153,56155,56157],{"class":400,"line":1490},[398,56142,52337],{"class":408},[398,56144,51537],{"class":51493},[398,56146,15197],{"class":2239},[398,56148,454],{"class":408},[398,56150,51584],{"class":513},[398,56152,51564],{"class":2239},[398,56154,454],{"class":408},[398,56156,51591],{"class":513},[398,56158,51500],{"class":408},[398,56160,56161,56163,56165,56167,56169],{"class":400,"line":1496},[398,56162,52337],{"class":408},[398,56164,51600],{"class":51493},[398,56166,51603],{"class":408},[398,56168,51600],{"class":51493},[398,56170,51500],{"class":408},[398,56172,56173,56175,56177],{"class":400,"line":1587},[398,56174,52337],{"class":408},[398,56176,5403],{"class":51493},[398,56178,51500],{"class":408},[398,56180,56181,56183],{"class":400,"line":1593},[398,56182,6680],{"class":51493},[398,56184,15849],{"class":408},[398,56186,56187,56189,56191,56193],{"class":400,"line":1605},[398,56188,54888],{"class":457},[398,56190,51630],{"class":408},[398,56192,593],{"class":457},[398,56194,1566],{"class":408},[398,56196,56197,56199,56201,56203],{"class":400,"line":1888},[398,56198,54899],{"class":457},[398,56200,51630],{"class":408},[398,56202,593],{"class":457},[398,56204,1566],{"class":408},[398,56206,56207],{"class":400,"line":1893},[398,56208,2463],{"class":408},[398,56210,56211],{"class":400,"line":1899},[398,56212,2676],{"emptyLinePlaceholder":328},[398,56214,56215,56217],{"class":400,"line":1904},[398,56216,54918],{"class":51493},[398,56218,15849],{"class":408},[398,56220,56221,56223,56225,56227],{"class":400,"line":1918},[398,56222,54925],{"class":457},[398,56224,51630],{"class":408},[398,56226,54930],{"class":457},[398,56228,1566],{"class":408},[398,56230,56231],{"class":400,"line":1923},[398,56232,2463],{"class":408},[398,56234,56235],{"class":400,"line":1929},[398,56236,2676],{"emptyLinePlaceholder":328},[398,56238,56239,56241],{"class":400,"line":1950},[398,56240,54945],{"class":2239},[398,56242,15849],{"class":408},[398,56244,56245,56247,56249,56251],{"class":400,"line":1955},[398,56246,54952],{"class":457},[398,56248,51630],{"class":408},[398,56250,54957],{"class":457},[398,56252,1566],{"class":408},[398,56254,56255,56257,56259,56261,56263],{"class":400,"line":1969},[398,56256,54964],{"class":457},[398,56258,51630],{"class":408},[398,56260,54969],{"class":457},[398,56262,51685],{"class":404},[398,56264,1566],{"class":408},[398,56266,56267,56269,56271,56273,56275],{"class":400,"line":1974},[398,56268,54978],{"class":457},[398,56270,51630],{"class":408},[398,56272,1815],{"class":457},[398,56274,51685],{"class":404},[398,56276,1566],{"class":408},[398,56278,56279,56281,56283,56285,56287,56289],{"class":400,"line":2003},[398,56280,54899],{"class":457},[398,56282,51630],{"class":408},[398,56284,713],{"class":457},[398,56286,51685],{"class":404},[398,56288,51749],{"class":457},[398,56290,1566],{"class":408},[398,56292,56293],{"class":400,"line":2008},[398,56294,2463],{"class":408},[398,56296,56297],{"class":400,"line":2025},[398,56298,2676],{"emptyLinePlaceholder":328},[398,56300,56301,56303],{"class":400,"line":2030},[398,56302,55013],{"class":2239},[398,56304,15849],{"class":408},[398,56306,56307,56309,56311,56313],{"class":400,"line":2035},[398,56308,54952],{"class":457},[398,56310,51630],{"class":408},[398,56312,55024],{"class":457},[398,56314,1566],{"class":408},[398,56316,56317,56319,56321,56323],{"class":400,"line":2040},[398,56318,55031],{"class":457},[398,56320,51630],{"class":408},[398,56322,593],{"class":457},[398,56324,1566],{"class":408},[398,56326,56327,56329,56331,56333],{"class":400,"line":2054},[398,56328,55042],{"class":457},[398,56330,51630],{"class":408},[398,56332,593],{"class":457},[398,56334,1566],{"class":408},[398,56336,56337,56339,56341,56343,56345],{"class":400,"line":2059},[398,56338,54964],{"class":457},[398,56340,51630],{"class":408},[398,56342,713],{"class":457},[398,56344,730],{"class":404},[398,56346,1566],{"class":408},[398,56348,56349,56351,56353,56355,56357],{"class":400,"line":2853},[398,56350,54978],{"class":457},[398,56352,51630],{"class":408},[398,56354,977],{"class":457},[398,56356,730],{"class":404},[398,56358,1566],{"class":408},[398,56360,56361,56363,56365,56367],{"class":400,"line":2867},[398,56362,55077],{"class":457},[398,56364,51630],{"class":408},[398,56366,55082],{"class":457},[398,56368,1566],{"class":408},[398,56370,56371],{"class":400,"line":2875},[398,56372,2463],{"class":408},[398,56374,56375],{"class":400,"line":2880},[398,56376,2676],{"emptyLinePlaceholder":328},[398,56378,56379,56381,56383],{"class":400,"line":2886},[398,56380,55013],{"class":2239},[398,56382,7102],{"class":51493},[398,56384,15849],{"class":408},[398,56386,56387,56389,56391,56393],{"class":400,"line":2892},[398,56388,54952],{"class":457},[398,56390,51630],{"class":408},[398,56392,55024],{"class":457},[398,56394,1566],{"class":408},[398,56396,56397,56399,56401,56403,56405],{"class":400,"line":2897},[398,56398,55115],{"class":457},[398,56400,51630],{"class":408},[398,56402,1303],{"class":457},[398,56404,51685],{"class":404},[398,56406,1566],{"class":408},[398,56408,56409,56411,56413,56415,56417],{"class":400,"line":8225},[398,56410,55031],{"class":457},[398,56412,51630],{"class":408},[398,56414,1102],{"class":457},[398,56416,51685],{"class":404},[398,56418,1566],{"class":408},[398,56420,56421,56423,56425,56427,56429],{"class":400,"line":8249},[398,56422,55140],{"class":457},[398,56424,51630],{"class":408},[398,56426,721],{"class":457},[398,56428,51685],{"class":404},[398,56430,1566],{"class":408},[398,56432,56433],{"class":400,"line":8254},[398,56434,2463],{"class":408},[398,56436,56437],{"class":400,"line":8260},[398,56438,2676],{"emptyLinePlaceholder":328},[398,56440,56441,56443],{"class":400,"line":8287},[398,56442,55161],{"class":51493},[398,56444,15849],{"class":408},[398,56446,56447,56449,56451,56453],{"class":400,"line":8292},[398,56448,54952],{"class":457},[398,56450,51630],{"class":408},[398,56452,55024],{"class":457},[398,56454,1566],{"class":408},[398,56456,56457,56459,56461,56463,56465],{"class":400,"line":8298},[398,56458,55140],{"class":457},[398,56460,51630],{"class":408},[398,56462,1183],{"class":457},[398,56464,51685],{"class":404},[398,56466,1566],{"class":408},[398,56468,56469,56471,56473,56475,56477],{"class":400,"line":8310},[398,56470,55031],{"class":457},[398,56472,51630],{"class":408},[398,56474,1102],{"class":457},[398,56476,51685],{"class":404},[398,56478,1566],{"class":408},[398,56480,56481,56483,56485,56487],{"class":400,"line":8322},[398,56482,55202],{"class":457},[398,56484,51630],{"class":408},[398,56486,51670],{"class":457},[398,56488,1566],{"class":408},[398,56490,56491,56493,56495,56497],{"class":400,"line":8334},[398,56492,55213],{"class":457},[398,56494,51630],{"class":408},[398,56496,51861],{"class":457},[398,56498,1566],{"class":408},[398,56500,56501,56503,56505,56507],{"class":400,"line":9993},[398,56502,54952],{"class":457},[398,56504,51630],{"class":408},[398,56506,55024],{"class":457},[398,56508,1566],{"class":408},[398,56510,56511,56513,56515,56517,56519],{"class":400,"line":10018},[398,56512,54964],{"class":457},[398,56514,51630],{"class":408},[398,56516,4268],{"class":457},[398,56518,51685],{"class":404},[398,56520,1566],{"class":408},[398,56522,56523,56525,56527,56529,56531],{"class":400,"line":10041},[398,56524,54978],{"class":457},[398,56526,51630],{"class":408},[398,56528,1102],{"class":457},[398,56530,51685],{"class":404},[398,56532,1566],{"class":408},[398,56534,56535],{"class":400,"line":10065},[398,56536,2463],{"class":408},[398,56538,56539],{"class":400,"line":10070},[398,56540,2676],{"emptyLinePlaceholder":328},[398,56542,56543,56545,56547],{"class":400,"line":10075},[398,56544,55161],{"class":51493},[398,56546,55268],{"class":51493},[398,56548,15849],{"class":408},[398,56550,56551,56553,56555,56557,56559],{"class":400,"line":10080},[398,56552,54964],{"class":457},[398,56554,51630],{"class":408},[398,56556,1102],{"class":457},[398,56558,51685],{"class":404},[398,56560,1566],{"class":408},[398,56562,56563,56565,56567,56569,56571],{"class":400,"line":10089},[398,56564,54978],{"class":457},[398,56566,51630],{"class":408},[398,56568,1102],{"class":457},[398,56570,51685],{"class":404},[398,56572,1566],{"class":408},[398,56574,56575,56577,56579,56581,56583,56585,56587,56589,56591,56593,56595,56597],{"class":400,"line":10094},[398,56576,55077],{"class":457},[398,56578,51630],{"class":408},[398,56580,55303],{"class":457},[398,56582,409],{"class":408},[398,56584,593],{"class":457},[398,56586,12712],{"class":408},[398,56588,593],{"class":457},[398,56590,12712],{"class":408},[398,56592,593],{"class":457},[398,56594,12712],{"class":408},[398,56596,55320],{"class":457},[398,56598,2995],{"class":408},[398,56600,56601,56603,56605,56607,56609],{"class":400,"line":10100},[398,56602,55327],{"class":457},[398,56604,51630],{"class":408},[398,56606,848],{"class":457},[398,56608,51685],{"class":404},[398,56610,1566],{"class":408},[398,56612,56613],{"class":400,"line":10121},[398,56614,2463],{"class":408},[398,56616,56617],{"class":400,"line":10127},[398,56618,2676],{"emptyLinePlaceholder":328},[398,56620,56621,56623],{"class":400,"line":10141},[398,56622,55348],{"class":2239},[398,56624,15849],{"class":408},[398,56626,56627,56629,56631,56633],{"class":400,"line":10147},[398,56628,55077],{"class":457},[398,56630,51630],{"class":408},[398,56632,55359],{"class":457},[398,56634,1566],{"class":408},[398,56636,56637],{"class":400,"line":10174},[398,56638,2463],{"class":408},[398,56640,56641,56643,56645],{"class":400,"line":10183},[398,56642,52610],{"class":408},[398,56644,5403],{"class":51493},[398,56646,51500],{"class":408},[398,56648,56649,56651,56653],{"class":400,"line":10189},[398,56650,51978],{"class":408},[398,56652,51527],{"class":51493},[398,56654,51500],{"class":408},[398,56656,56657],{"class":400,"line":10197},[398,56658,2676],{"emptyLinePlaceholder":328},[398,56660,56661,56663,56665],{"class":400,"line":10202},[398,56662,1312],{"class":408},[398,56664,51993],{"class":51493},[398,56666,51500],{"class":408},[398,56668,56669,56671,56673,56675,56677,56679],{"class":400,"line":16881},[398,56670,52337],{"class":408},[398,56672,51804],{"class":51493},[398,56674,53679],{"class":2239},[398,56676,454],{"class":408},[398,56678,53684],{"class":513},[398,56680,51500],{"class":408},[398,56682,56683,56685,56687,56689,56691,56693],{"class":400,"line":16887},[398,56684,51534],{"class":408},[398,56686,51804],{"class":51493},[398,56688,53679],{"class":2239},[398,56690,454],{"class":408},[398,56692,55420],{"class":513},[398,56694,51500],{"class":408},[398,56696,56697,56699,56701,56703,56705,56707,56709,56711,56713],{"class":400,"line":16910},[398,56698,55427],{"class":408},[398,56700,1738],{"class":51493},[398,56702,55432],{"class":2239},[398,56704,454],{"class":408},[398,56706,55437],{"class":513},[398,56708,55440],{"class":2239},[398,56710,454],{"class":408},[398,56712,7929],{"class":513},[398,56714,51500],{"class":408},[398,56716,56717,56719,56721],{"class":400,"line":16916},[398,56718,51969],{"class":408},[398,56720,51804],{"class":51493},[398,56722,51500],{"class":408},[398,56724,56725,56727,56729,56731,56733,56735],{"class":400,"line":16939},[398,56726,51534],{"class":408},[398,56728,51804],{"class":51493},[398,56730,53679],{"class":2239},[398,56732,454],{"class":408},[398,56734,55467],{"class":513},[398,56736,51500],{"class":408},[398,56738,56739,56741,56743,56745,56747],{"class":400,"line":16953},[398,56740,55427],{"class":408},[398,56742,19],{"class":51493},[398,56744,55478],{"class":408},[398,56746,19],{"class":51493},[398,56748,51500],{"class":408},[398,56750,56751,56753,56755],{"class":400,"line":16973},[398,56752,55427],{"class":408},[398,56754,67],{"class":51493},[398,56756,51500],{"class":408},[398,56758,56759,56761,56763,56765,56767,56769,56771,56773],{"class":400,"line":16979},[398,56760,55495],{"class":408},[398,56762,41],{"class":51493},[398,56764,53679],{"class":2239},[398,56766,454],{"class":408},[398,56768,55504],{"class":513},[398,56770,55507],{"class":408},[398,56772,41],{"class":51493},[398,56774,51500],{"class":408},[398,56776,56777,56779,56781,56783,56785],{"class":400,"line":16990},[398,56778,55495],{"class":408},[398,56780,41],{"class":51493},[398,56782,55507],{"class":408},[398,56784,41],{"class":51493},[398,56786,51500],{"class":408},[398,56788,56789,56791,56793,56795,56797],{"class":400,"line":17013},[398,56790,55495],{"class":408},[398,56792,41],{"class":51493},[398,56794,55507],{"class":408},[398,56796,41],{"class":51493},[398,56798,51500],{"class":408},[398,56800,56801,56803,56805,56807,56809],{"class":400,"line":17035},[398,56802,55495],{"class":408},[398,56804,41],{"class":51493},[398,56806,55507],{"class":408},[398,56808,41],{"class":51493},[398,56810,51500],{"class":408},[398,56812,56813,56815,56817,56819,56821],{"class":400,"line":17040},[398,56814,55495],{"class":408},[398,56816,41],{"class":51493},[398,56818,55507],{"class":408},[398,56820,41],{"class":51493},[398,56822,51500],{"class":408},[398,56824,56825,56827,56829,56831,56833],{"class":400,"line":17046},[398,56826,55495],{"class":408},[398,56828,41],{"class":51493},[398,56830,55507],{"class":408},[398,56832,41],{"class":51493},[398,56834,51500],{"class":408},[398,56836,56837,56839,56841,56843,56845],{"class":400,"line":17060},[398,56838,55495],{"class":408},[398,56840,41],{"class":51493},[398,56842,55507],{"class":408},[398,56844,41],{"class":51493},[398,56846,51500],{"class":408},[398,56848,56849,56851,56853,56855,56857],{"class":400,"line":17073},[398,56850,55495],{"class":408},[398,56852,41],{"class":51493},[398,56854,55507],{"class":408},[398,56856,41],{"class":51493},[398,56858,51500],{"class":408},[398,56860,56861,56863,56865],{"class":400,"line":17078},[398,56862,55600],{"class":408},[398,56864,67],{"class":51493},[398,56866,51500],{"class":408},[398,56868,56869,56871,56873],{"class":400,"line":17092},[398,56870,51969],{"class":408},[398,56872,51804],{"class":51493},[398,56874,51500],{"class":408},[398,56876,56877,56879,56881],{"class":400,"line":17097},[398,56878,52610],{"class":408},[398,56880,51804],{"class":51493},[398,56882,51500],{"class":408},[398,56884,56885,56887,56889],{"class":400,"line":17103},[398,56886,52337],{"class":408},[398,56888,52006],{"class":51493},[398,56890,51500],{"class":408},[398,56892,56893,56895,56898,56900],{"class":400,"line":17108},[398,56894,11498],{"class":404},[398,56896,56897],{"class":457}," sliderData",[398,56899,13841],{"class":404},[398,56901,55640],{"class":408},[398,56903,56904,56906,56908,56910,56912,56914,56916],{"class":400,"line":17122},[398,56905,55645],{"class":408},[398,56907,55648],{"class":513},[398,56909,55651],{"class":408},[398,56911,55654],{"class":513},[398,56913,55657],{"class":408},[398,56915,55660],{"class":513},[398,56917,55663],{"class":408},[398,56919,56920,56922,56924,56926,56928,56930,56932],{"class":400,"line":17127},[398,56921,55645],{"class":408},[398,56923,55670],{"class":513},[398,56925,55651],{"class":408},[398,56927,55675],{"class":513},[398,56929,55657],{"class":408},[398,56931,55680],{"class":513},[398,56933,55663],{"class":408},[398,56935,56936,56938,56940,56942,56944,56946,56948],{"class":400,"line":17132},[398,56937,55645],{"class":408},[398,56939,55689],{"class":513},[398,56941,55651],{"class":408},[398,56943,55694],{"class":513},[398,56945,55657],{"class":408},[398,56947,55699],{"class":513},[398,56949,55663],{"class":408},[398,56951,56952,56954,56956,56958,56960,56962,56964],{"class":400,"line":17146},[398,56953,55645],{"class":408},[398,56955,55708],{"class":513},[398,56957,55651],{"class":408},[398,56959,55713],{"class":513},[398,56961,55657],{"class":408},[398,56963,55718],{"class":513},[398,56965,55663],{"class":408},[398,56967,56968,56970,56972,56974,56976,56978,56980],{"class":400,"line":17158},[398,56969,55645],{"class":408},[398,56971,55727],{"class":513},[398,56973,55651],{"class":408},[398,56975,55732],{"class":513},[398,56977,55657],{"class":408},[398,56979,55737],{"class":513},[398,56981,55663],{"class":408},[398,56983,56984,56986,56988,56990,56992,56994,56996],{"class":400,"line":17163},[398,56985,55645],{"class":408},[398,56987,55746],{"class":513},[398,56989,55651],{"class":408},[398,56991,55751],{"class":513},[398,56993,55657],{"class":408},[398,56995,55756],{"class":513},[398,56997,55663],{"class":408},[398,56999,57000,57002,57004,57006,57008,57010,57012],{"class":400,"line":17176},[398,57001,55645],{"class":408},[398,57003,55765],{"class":513},[398,57005,55651],{"class":408},[398,57007,55770],{"class":513},[398,57009,55657],{"class":408},[398,57011,55775],{"class":513},[398,57013,55663],{"class":408},[398,57015,57016,57018,57020,57022,57024,57026,57028],{"class":400,"line":17181},[398,57017,55645],{"class":408},[398,57019,55784],{"class":513},[398,57021,55651],{"class":408},[398,57023,55789],{"class":513},[398,57025,55657],{"class":408},[398,57027,55794],{"class":513},[398,57029,55797],{"class":408},[398,57031,57032],{"class":400,"line":17186},[398,57033,53302],{"class":408},[398,57035,57036],{"class":400,"line":17191},[398,57037,57038],{"class":467},"    \u002F\u002F 1.获取元素\n",[398,57040,57041,57043,57045,57047,57049,57051,57053,57055],{"class":400,"line":17204},[398,57042,11498],{"class":404},[398,57044,55808],{"class":457},[398,57046,13841],{"class":404},[398,57048,54589],{"class":408},[398,57050,54592],{"class":2239},[398,57052,409],{"class":408},[398,57054,55819],{"class":513},[398,57056,415],{"class":408},[398,57058,57059,57061,57063,57065,57067,57069,57071,57073],{"class":400,"line":17209},[398,57060,11498],{"class":404},[398,57062,7102],{"class":457},[398,57064,13841],{"class":404},[398,57066,54589],{"class":408},[398,57068,54592],{"class":2239},[398,57070,409],{"class":408},[398,57072,55838],{"class":513},[398,57074,415],{"class":408},[398,57076,57077,57079,57081,57083],{"class":400,"line":32826},[398,57078,52412],{"class":404},[398,57080,9715],{"class":408},[398,57082,454],{"class":404},[398,57084,47526],{"class":457},[398,57086,57087],{"class":400,"line":32832},[398,57088,57089],{"class":467},"    \u002F\u002F 2.开启定时器\n",[398,57091,57092],{"class":400,"line":32838},[398,57093,57094],{"class":467},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[398,57096,57097,57100,57102,57104],{"class":400,"line":32844},[398,57098,57099],{"class":2239},"    setInterval",[398,57101,409],{"class":408},[398,57103,54642],{"class":404},[398,57105,54645],{"class":408},[398,57107,57108,57110],{"class":400,"line":32850},[398,57109,54650],{"class":408},[398,57111,2978],{"class":404},[398,57113,57114,57116,57118,57120,57123,57125],{"class":400,"line":32861},[398,57115,54673],{"class":404},[398,57117,54676],{"class":408},[398,57119,1986],{"class":404},[398,57121,57122],{"class":408}," sliderData.",[398,57124,52161],{"class":457},[398,57126,12719],{"class":408},[398,57128,57129,57132,57134],{"class":400,"line":32867},[398,57130,57131],{"class":408},"        i ",[398,57133,454],{"class":404},[398,57135,47526],{"class":457},[398,57137,57138],{"class":400,"line":32887},[398,57139,52591],{"class":408},[398,57141,57142],{"class":400,"line":32893},[398,57143,57144],{"class":467},"      \u002F\u002F 更换图片路径\n",[398,57146,57147,57149,57151],{"class":400,"line":32904},[398,57148,55914],{"class":408},[398,57150,454],{"class":404},[398,57152,57153],{"class":408}," sliderData[i].url\n",[398,57155,57156],{"class":400,"line":32910},[398,57157,57158],{"class":467},"      \u002F\u002F 把文字写到p里面\n",[398,57160,57161,57163,57165],{"class":400,"line":32916},[398,57162,55924],{"class":408},[398,57164,454],{"class":404},[398,57166,57167],{"class":408}," sliderData[i].title\n",[398,57169,57170],{"class":400,"line":32922},[398,57171,57172],{"class":467},"      \u002F\u002F 小圆点\n",[398,57174,57175],{"class":400,"line":32928},[398,57176,57177],{"class":467},"      \u002F\u002F 先删除以前的active\n",[398,57179,57180],{"class":400,"line":32934},[398,57181,57182],{"class":467},"      \u002F\u002F 只让当前li添加active\n",[398,57184,57185,57187,57189,57191,57194,57197,57200,57202,57204],{"class":400,"line":32940},[398,57186,55964],{"class":408},[398,57188,54592],{"class":2239},[398,57190,409],{"class":408},[398,57192,57193],{"class":513},"'.slider-footer .activate'",[398,57195,57196],{"class":408},").classList.",[398,57198,57199],{"class":2239},"remove",[398,57201,409],{"class":408},[398,57203,55982],{"class":513},[398,57205,415],{"class":408},[398,57207,57208,57210,57212,57214,57217,57219,57221,57223,57226,57228,57230,57232,57234],{"class":400,"line":32946},[398,57209,55964],{"class":408},[398,57211,54592],{"class":2239},[398,57213,409],{"class":408},[398,57215,57216],{"class":513},"`.slider-footer ul li:nth-child(${",[398,57218,843],{"class":408},[398,57220,45759],{"class":404},[398,57222,25396],{"class":457},[398,57224,57225],{"class":513},"})`",[398,57227,57196],{"class":408},[398,57229,5611],{"class":2239},[398,57231,409],{"class":408},[398,57233,55982],{"class":513},[398,57235,415],{"class":408},[398,57237,57238],{"class":400,"line":32966},[398,57239,2676],{"emptyLinePlaceholder":328},[398,57241,57242,57244,57246],{"class":400,"line":32972},[398,57243,54728],{"class":408},[398,57245,6687],{"class":457},[398,57247,415],{"class":408},[398,57249,57250],{"class":400,"line":32988},[398,57251,2676],{"emptyLinePlaceholder":328},[398,57253,57254,57256,57258],{"class":400,"line":32994},[398,57255,52610],{"class":408},[398,57257,52006],{"class":51493},[398,57259,51500],{"class":408},[398,57261,57262,57264,57266],{"class":400,"line":33008},[398,57263,51978],{"class":408},[398,57265,51993],{"class":51493},[398,57267,51500],{"class":408},[398,57269,57270],{"class":400,"line":33014},[398,57271,2676],{"emptyLinePlaceholder":328},[398,57273,57274,57276,57278],{"class":400,"line":33029},[398,57275,51978],{"class":408},[398,57277,50828],{"class":51493},[398,57279,51500],{"class":408},[14,57281,57283],{"id":57282},"_317-重要知识点","3.1.7 重要知识点",[19,57285,57286,57287],{},"浏览器在渲染文本时， ",[23,57288,57289],{},"没有空格或换行符就没有“断行点”",[19,57291,57292],{},[1738,57293],{"alt":316,"src":57294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,57296,57297],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,57299,57300],{},[1738,57301],{"alt":316,"src":57302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,57304,57305],{},[1738,57306],{"alt":316,"src":57307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[343,57309,57311],{"id":57310},"_32-dom事件基础","3.2 DOM事件基础",[14,57313,57315],{"id":57314},"_321-事件监听","3.2.1 事件监听",[19,57317,57318],{},[1738,57319],{"alt":316,"src":57320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,57322,57323],{},"事件监听有响应的发生",[19,57325,57326],{},[1738,57327],{"alt":316,"src":57328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,57330,57331],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,57333,57334],{},"对于有名函数,要执行的函数名后边不要加()",[14,57336,57338],{"id":57337},"_322-随机点名案例","3.2.2 随机点名案例",[389,57340,57342],{"className":50826,"code":57341,"language":50828,"meta":316,"style":316},"\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",[395,57343,57344,57354,57368,57372,57380,57394,57414,57426,57434,57440,57450,57460,57464,57468,57475,57486,57490,57494,57500,57512,57526,57536,57548,57561,57565,57569,57576,57580,57593,57605,57617,57621,57625,57629,57636,57646,57650,57654,57663,57675,57687,57702,57706,57714,57722,57726,57734,57747,57761,57774,57794,57802,57817,57837,57857,57865,57869,57877,57882,57918,57938,57943,57962,57967,57978,57983,57994,57999,58018,58033,58038,58064,58074,58083,58088,58104,58109,58114,58119,58134,58138,58142,58147,58166,58183,58191,58196,58211,58215,58219,58227,58235,58239],{"__ignoreMap":316},[398,57345,57346,57348,57350,57352],{"class":400,"line":401},[398,57347,51490],{"class":408},[398,57349,51494],{"class":51493},[398,57351,51497],{"class":2239},[398,57353,51500],{"class":408},[398,57355,57356,57358,57360,57362,57364,57366],{"class":400,"line":317},[398,57357,1312],{"class":408},[398,57359,50828],{"class":51493},[398,57361,51509],{"class":2239},[398,57363,454],{"class":408},[398,57365,51514],{"class":513},[398,57367,51500],{"class":408},[398,57369,57370],{"class":400,"line":320},[398,57371,2676],{"emptyLinePlaceholder":328},[398,57373,57374,57376,57378],{"class":400,"line":1470},[398,57375,1312],{"class":408},[398,57377,51527],{"class":51493},[398,57379,51500],{"class":408},[398,57381,57382,57384,57386,57388,57390,57392],{"class":400,"line":1476},[398,57383,52337],{"class":408},[398,57385,51537],{"class":51493},[398,57387,51540],{"class":2239},[398,57389,454],{"class":408},[398,57391,51545],{"class":513},[398,57393,51500],{"class":408},[398,57395,57396,57398,57400,57402,57404,57406,57408,57410,57412],{"class":400,"line":1490},[398,57397,52337],{"class":408},[398,57399,51537],{"class":51493},[398,57401,15197],{"class":2239},[398,57403,454],{"class":408},[398,57405,51584],{"class":513},[398,57407,51564],{"class":2239},[398,57409,454],{"class":408},[398,57411,51591],{"class":513},[398,57413,51500],{"class":408},[398,57415,57416,57418,57420,57422,57424],{"class":400,"line":1496},[398,57417,52337],{"class":408},[398,57419,51600],{"class":51493},[398,57421,51603],{"class":408},[398,57423,51600],{"class":51493},[398,57425,51500],{"class":408},[398,57427,57428,57430,57432],{"class":400,"line":1587},[398,57429,52337],{"class":408},[398,57431,5403],{"class":51493},[398,57433,51500],{"class":408},[398,57435,57436,57438],{"class":400,"line":1593},[398,57437,6680],{"class":51493},[398,57439,15849],{"class":408},[398,57441,57442,57444,57446,57448],{"class":400,"line":1605},[398,57443,54899],{"class":457},[398,57445,51630],{"class":408},[398,57447,593],{"class":457},[398,57449,1566],{"class":408},[398,57451,57452,57454,57456,57458],{"class":400,"line":1888},[398,57453,54888],{"class":457},[398,57455,51630],{"class":408},[398,57457,593],{"class":457},[398,57459,1566],{"class":408},[398,57461,57462],{"class":400,"line":1893},[398,57463,2463],{"class":408},[398,57465,57466],{"class":400,"line":1899},[398,57467,2676],{"emptyLinePlaceholder":328},[398,57469,57470,57473],{"class":400,"line":1904},[398,57471,57472],{"class":51493},"    h2",[398,57474,15849],{"class":408},[398,57476,57477,57480,57482,57484],{"class":400,"line":1918},[398,57478,57479],{"class":457},"      text-align",[398,57481,51630],{"class":408},[398,57483,51785],{"class":457},[398,57485,1566],{"class":408},[398,57487,57488],{"class":400,"line":1923},[398,57489,2463],{"class":408},[398,57491,57492],{"class":400,"line":1929},[398,57493,2676],{"emptyLinePlaceholder":328},[398,57495,57496,57498],{"class":400,"line":1950},[398,57497,54945],{"class":2239},[398,57499,15849],{"class":408},[398,57501,57502,57504,57506,57508,57510],{"class":400,"line":1955},[398,57503,54964],{"class":457},[398,57505,51630],{"class":408},[398,57507,1815],{"class":457},[398,57509,51685],{"class":404},[398,57511,1566],{"class":408},[398,57513,57514,57516,57518,57520,57522,57524],{"class":400,"line":1969},[398,57515,54899],{"class":457},[398,57517,51630],{"class":408},[398,57519,1058],{"class":457},[398,57521,51685],{"class":404},[398,57523,51749],{"class":457},[398,57525,1566],{"class":408},[398,57527,57528,57530,57532,57534],{"class":400,"line":1974},[398,57529,55202],{"class":457},[398,57531,51630],{"class":408},[398,57533,51670],{"class":457},[398,57535,1566],{"class":408},[398,57537,57538,57540,57542,57544,57546],{"class":400,"line":2003},[398,57539,55115],{"class":457},[398,57541,51630],{"class":408},[398,57543,1227],{"class":457},[398,57545,51685],{"class":404},[398,57547,1566],{"class":408},[398,57549,57550,57553,57555,57557,57559],{"class":400,"line":2008},[398,57551,57552],{"class":457},"      line-height",[398,57554,51630],{"class":408},[398,57556,803],{"class":457},[398,57558,51685],{"class":404},[398,57560,1566],{"class":408},[398,57562,57563],{"class":400,"line":2025},[398,57564,2463],{"class":408},[398,57566,57567],{"class":400,"line":2030},[398,57568,2676],{"emptyLinePlaceholder":328},[398,57570,57571,57574],{"class":400,"line":2035},[398,57572,57573],{"class":2239},"    .qs",[398,57575,15849],{"class":408},[398,57577,57578],{"class":400,"line":2040},[398,57579,2676],{"emptyLinePlaceholder":328},[398,57581,57582,57584,57586,57589,57591],{"class":400,"line":2054},[398,57583,54964],{"class":457},[398,57585,51630],{"class":408},[398,57587,57588],{"class":457},"450",[398,57590,51685],{"class":404},[398,57592,1566],{"class":408},[398,57594,57595,57597,57599,57601,57603],{"class":400,"line":2059},[398,57596,54978],{"class":457},[398,57598,51630],{"class":408},[398,57600,803],{"class":457},[398,57602,51685],{"class":404},[398,57604,1566],{"class":408},[398,57606,57607,57610,57612,57615],{"class":400,"line":2853},[398,57608,57609],{"class":457},"      color",[398,57611,51630],{"class":408},[398,57613,57614],{"class":457},"red",[398,57616,1566],{"class":408},[398,57618,57619],{"class":400,"line":2867},[398,57620,2676],{"emptyLinePlaceholder":328},[398,57622,57623],{"class":400,"line":2875},[398,57624,2463],{"class":408},[398,57626,57627],{"class":400,"line":2880},[398,57628,2676],{"emptyLinePlaceholder":328},[398,57630,57631,57634],{"class":400,"line":2886},[398,57632,57633],{"class":2239},"    .btns",[398,57635,15849],{"class":408},[398,57637,57638,57640,57642,57644],{"class":400,"line":2892},[398,57639,57479],{"class":457},[398,57641,51630],{"class":408},[398,57643,51785],{"class":457},[398,57645,1566],{"class":408},[398,57647,57648],{"class":400,"line":2897},[398,57649,2463],{"class":408},[398,57651,57652],{"class":400,"line":8225},[398,57653,2676],{"emptyLinePlaceholder":328},[398,57655,57656,57658,57661],{"class":400,"line":8249},[398,57657,57633],{"class":2239},[398,57659,57660],{"class":51493}," button",[398,57662,15849],{"class":408},[398,57664,57665,57667,57669,57671,57673],{"class":400,"line":8254},[398,57666,54964],{"class":457},[398,57668,51630],{"class":408},[398,57670,1219],{"class":457},[398,57672,51685],{"class":404},[398,57674,1566],{"class":408},[398,57676,57677,57679,57681,57683,57685],{"class":400,"line":8260},[398,57678,54978],{"class":457},[398,57680,51630],{"class":408},[398,57682,675],{"class":457},[398,57684,51685],{"class":404},[398,57686,1566],{"class":408},[398,57688,57689,57691,57693,57695,57698,57700],{"class":400,"line":8287},[398,57690,54899],{"class":457},[398,57692,51630],{"class":408},[398,57694,593],{"class":457},[398,57696,57697],{"class":457}," 50",[398,57699,51685],{"class":404},[398,57701,1566],{"class":408},[398,57703,57704],{"class":400,"line":8292},[398,57705,2463],{"class":408},[398,57707,57708,57710,57712],{"class":400,"line":8298},[398,57709,52610],{"class":408},[398,57711,5403],{"class":51493},[398,57713,51500],{"class":408},[398,57715,57716,57718,57720],{"class":400,"line":8310},[398,57717,51978],{"class":408},[398,57719,51527],{"class":51493},[398,57721,51500],{"class":408},[398,57723,57724],{"class":400,"line":8322},[398,57725,2676],{"emptyLinePlaceholder":328},[398,57727,57728,57730,57732],{"class":400,"line":8334},[398,57729,1312],{"class":408},[398,57731,51993],{"class":51493},[398,57733,51500],{"class":408},[398,57735,57736,57738,57740,57743,57745],{"class":400,"line":9993},[398,57737,52337],{"class":408},[398,57739,343],{"class":51493},[398,57741,57742],{"class":408},">随机点名\u003C\u002F",[398,57744,343],{"class":51493},[398,57746,51500],{"class":408},[398,57748,57749,57751,57753,57755,57757,57759],{"class":400,"line":10018},[398,57750,52337],{"class":408},[398,57752,51804],{"class":51493},[398,57754,53679],{"class":2239},[398,57756,454],{"class":408},[398,57758,53684],{"class":513},[398,57760,51500],{"class":408},[398,57762,57763,57765,57767,57770,57772],{"class":400,"line":10041},[398,57764,51534],{"class":408},[398,57766,398],{"class":51493},[398,57768,57769],{"class":408},">名字是：\u003C\u002F",[398,57771,398],{"class":51493},[398,57773,51500],{"class":408},[398,57775,57776,57778,57780,57782,57784,57787,57790,57792],{"class":400,"line":10065},[398,57777,51534],{"class":408},[398,57779,51804],{"class":51493},[398,57781,53679],{"class":2239},[398,57783,454],{"class":408},[398,57785,57786],{"class":513},"\"qs\"",[398,57788,57789],{"class":408},">这里显示姓名\u003C\u002F",[398,57791,51804],{"class":51493},[398,57793,51500],{"class":408},[398,57795,57796,57798,57800],{"class":400,"line":10070},[398,57797,52610],{"class":408},[398,57799,51804],{"class":51493},[398,57801,51500],{"class":408},[398,57803,57804,57806,57808,57810,57812,57815],{"class":400,"line":10075},[398,57805,52337],{"class":408},[398,57807,51804],{"class":51493},[398,57809,53679],{"class":2239},[398,57811,454],{"class":408},[398,57813,57814],{"class":513},"\"btns\"",[398,57816,51500],{"class":408},[398,57818,57819,57821,57823,57825,57827,57830,57833,57835],{"class":400,"line":10080},[398,57820,51534],{"class":408},[398,57822,54080],{"class":51493},[398,57824,53679],{"class":2239},[398,57826,454],{"class":408},[398,57828,57829],{"class":513},"\"start\"",[398,57831,57832],{"class":408},">开始\u003C\u002F",[398,57834,54080],{"class":51493},[398,57836,51500],{"class":408},[398,57838,57839,57841,57843,57845,57847,57850,57853,57855],{"class":400,"line":10089},[398,57840,51534],{"class":408},[398,57842,54080],{"class":51493},[398,57844,53679],{"class":2239},[398,57846,454],{"class":408},[398,57848,57849],{"class":513},"\"end\"",[398,57851,57852],{"class":408},">结束\u003C\u002F",[398,57854,54080],{"class":51493},[398,57856,51500],{"class":408},[398,57858,57859,57861,57863],{"class":400,"line":10094},[398,57860,52610],{"class":408},[398,57862,51804],{"class":51493},[398,57864,51500],{"class":408},[398,57866,57867],{"class":400,"line":10100},[398,57868,2676],{"emptyLinePlaceholder":328},[398,57870,57871,57873,57875],{"class":400,"line":10121},[398,57872,52337],{"class":408},[398,57874,52006],{"class":51493},[398,57876,51500],{"class":408},[398,57878,57879],{"class":400,"line":10127},[398,57880,57881],{"class":467},"    \u002F\u002F 数据数组\n",[398,57883,57884,57886,57889,57891,57893,57896,57898,57901,57903,57906,57908,57911,57913,57916],{"class":400,"line":10141},[398,57885,11498],{"class":404},[398,57887,57888],{"class":457}," arr",[398,57890,13841],{"class":404},[398,57892,52419],{"class":408},[398,57894,57895],{"class":513},"'马超'",[398,57897,12712],{"class":408},[398,57899,57900],{"class":513},"'黄忠'",[398,57902,12712],{"class":408},[398,57904,57905],{"class":513},"'赵云'",[398,57907,12712],{"class":408},[398,57909,57910],{"class":513},"'关羽'",[398,57912,12712],{"class":408},[398,57914,57915],{"class":513},"'张飞'",[398,57917,33439],{"class":408},[398,57919,57920,57922,57925,57927,57929,57931,57933,57936],{"class":400,"line":10147},[398,57921,11498],{"class":404},[398,57923,57924],{"class":457}," qs",[398,57926,13841],{"class":404},[398,57928,54589],{"class":408},[398,57930,54592],{"class":2239},[398,57932,409],{"class":408},[398,57934,57935],{"class":513},"'.qs'",[398,57937,415],{"class":408},[398,57939,57940],{"class":400,"line":10174},[398,57941,57942],{"class":467},"    \u002F\u002F 1.业务1.开始按钮模块\n",[398,57944,57945,57947,57949,57951,57953,57955,57957,57960],{"class":400,"line":10183},[398,57946,11498],{"class":404},[398,57948,4460],{"class":457},[398,57950,13841],{"class":404},[398,57952,54589],{"class":408},[398,57954,54592],{"class":2239},[398,57956,409],{"class":408},[398,57958,57959],{"class":513},"'.start'",[398,57961,415],{"class":408},[398,57963,57964],{"class":400,"line":10189},[398,57965,57966],{"class":467},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[398,57968,57969,57971,57974,57976],{"class":400,"line":10197},[398,57970,52412],{"class":404},[398,57972,57973],{"class":408}," timerId ",[398,57975,454],{"class":404},[398,57977,47526],{"class":457},[398,57979,57980],{"class":400,"line":10202},[398,57981,57982],{"class":467},"    \u002F\u002F 随机号要全局变量\n",[398,57984,57985,57987,57990,57992],{"class":400,"line":16881},[398,57986,52412],{"class":404},[398,57988,57989],{"class":408}," random ",[398,57991,454],{"class":404},[398,57993,47526],{"class":457},[398,57995,57996],{"class":400,"line":16887},[398,57997,57998],{"class":467},"    \u002F\u002F 1.1 添加点击事件\n",[398,58000,58001,58004,58007,58009,58012,58014,58016],{"class":400,"line":16910},[398,58002,58003],{"class":408},"    start.",[398,58005,58006],{"class":2239},"addEventListener",[398,58008,409],{"class":408},[398,58010,58011],{"class":513},"'click'",[398,58013,12712],{"class":408},[398,58015,54642],{"class":404},[398,58017,54645],{"class":408},[398,58019,58020,58023,58025,58027,58029,58031],{"class":400,"line":16916},[398,58021,58022],{"class":408},"      timerId ",[398,58024,454],{"class":404},[398,58026,54637],{"class":2239},[398,58028,409],{"class":408},[398,58030,54642],{"class":404},[398,58032,54645],{"class":408},[398,58034,58035],{"class":400,"line":16939},[398,58036,58037],{"class":467},"        \u002F\u002F 随机数\n",[398,58039,58040,58043,58045,58048,58051,58054,58056,58058,58060,58062],{"class":400,"line":16953},[398,58041,58042],{"class":408},"        random ",[398,58044,454],{"class":404},[398,58046,58047],{"class":2239}," parseInt",[398,58049,58050],{"class":408},"(Math.",[398,58052,58053],{"class":2239},"random",[398,58055,13327],{"class":408},[398,58057,857],{"class":404},[398,58059,52158],{"class":408},[398,58061,52161],{"class":457},[398,58063,415],{"class":408},[398,58065,58066,58069,58071],{"class":400,"line":16973},[398,58067,58068],{"class":408},"        qs.innerHTML ",[398,58070,454],{"class":404},[398,58072,58073],{"class":408}," arr[random]\n",[398,58075,58076,58079,58081],{"class":400,"line":16979},[398,58077,58078],{"class":408},"      }, ",[398,58080,675],{"class":457},[398,58082,415],{"class":408},[398,58084,58085],{"class":400,"line":16990},[398,58086,58087],{"class":467},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[398,58089,58090,58092,58095,58097,58100,58102],{"class":400,"line":17013},[398,58091,54673],{"class":404},[398,58093,58094],{"class":408}," (arr.",[398,58096,52161],{"class":457},[398,58098,58099],{"class":404}," ===",[398,58101,25396],{"class":457},[398,58103,12719],{"class":408},[398,58105,58106],{"class":400,"line":17035},[398,58107,58108],{"class":467},"        \u002F\u002F start.disabled = true\n",[398,58110,58111],{"class":400,"line":17040},[398,58112,58113],{"class":467},"        \u002F\u002F end.disabled = true\n",[398,58115,58116],{"class":400,"line":17046},[398,58117,58118],{"class":467},"        \u002F\u002F 可以合起来写\n",[398,58120,58121,58124,58126,58129,58131],{"class":400,"line":17060},[398,58122,58123],{"class":408},"        start.disabled ",[398,58125,454],{"class":404},[398,58127,58128],{"class":408}," end.disabled ",[398,58130,454],{"class":404},[398,58132,58133],{"class":457}," true\n",[398,58135,58136],{"class":400,"line":17073},[398,58137,52591],{"class":408},[398,58139,58140],{"class":400,"line":17078},[398,58141,33654],{"class":408},[398,58143,58144],{"class":400,"line":17092},[398,58145,58146],{"class":467},"    \u002F\u002F 1.2 关闭按钮模块\n",[398,58148,58149,58151,58153,58155,58157,58159,58161,58164],{"class":400,"line":17097},[398,58150,11498],{"class":404},[398,58152,4476],{"class":457},[398,58154,13841],{"class":404},[398,58156,54589],{"class":408},[398,58158,54592],{"class":2239},[398,58160,409],{"class":408},[398,58162,58163],{"class":513},"'.end'",[398,58165,415],{"class":408},[398,58167,58168,58171,58173,58175,58177,58179,58181],{"class":400,"line":17103},[398,58169,58170],{"class":408},"    end.",[398,58172,58006],{"class":2239},[398,58174,409],{"class":408},[398,58176,58011],{"class":513},[398,58178,12712],{"class":408},[398,58180,54642],{"class":404},[398,58182,54645],{"class":408},[398,58184,58185,58188],{"class":400,"line":17108},[398,58186,58187],{"class":2239},"      clearInterval",[398,58189,58190],{"class":408},"(timerId)\n",[398,58192,58193],{"class":400,"line":17122},[398,58194,58195],{"class":467},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[398,58197,58198,58201,58204,58207,58209],{"class":400,"line":17127},[398,58199,58200],{"class":408},"      arr.",[398,58202,58203],{"class":2239},"splice",[398,58205,58206],{"class":408},"(random, ",[398,58208,619],{"class":457},[398,58210,415],{"class":408},[398,58212,58213],{"class":400,"line":17132},[398,58214,33654],{"class":408},[398,58216,58217],{"class":400,"line":17146},[398,58218,2676],{"emptyLinePlaceholder":328},[398,58220,58221,58223,58225],{"class":400,"line":17158},[398,58222,52610],{"class":408},[398,58224,52006],{"class":51493},[398,58226,51500],{"class":408},[398,58228,58229,58231,58233],{"class":400,"line":17163},[398,58230,51978],{"class":408},[398,58232,51993],{"class":51493},[398,58234,51500],{"class":408},[398,58236,58237],{"class":400,"line":17176},[398,58238,2676],{"emptyLinePlaceholder":328},[398,58240,58241,58243,58245],{"class":400,"line":17181},[398,58242,51978],{"class":408},[398,58244,50828],{"class":51493},[398,58246,51500],{"class":408},[19,58248,58249],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[14,58251,58253],{"id":58252},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[389,58255,58257],{"className":50826,"code":58256,"language":50828,"meta":316,"style":316},"\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",[395,58258,58259,58269,58283,58287,58295,58309,58329,58341,58349,58353,58361,58373,58381,58400,58417,58433,58443,58447,58455,58463,58467],{"__ignoreMap":316},[398,58260,58261,58263,58265,58267],{"class":400,"line":401},[398,58262,51490],{"class":408},[398,58264,51494],{"class":51493},[398,58266,51497],{"class":2239},[398,58268,51500],{"class":408},[398,58270,58271,58273,58275,58277,58279,58281],{"class":400,"line":317},[398,58272,1312],{"class":408},[398,58274,50828],{"class":51493},[398,58276,51509],{"class":2239},[398,58278,454],{"class":408},[398,58280,51514],{"class":513},[398,58282,51500],{"class":408},[398,58284,58285],{"class":400,"line":320},[398,58286,2676],{"emptyLinePlaceholder":328},[398,58288,58289,58291,58293],{"class":400,"line":1470},[398,58290,1312],{"class":408},[398,58292,51527],{"class":51493},[398,58294,51500],{"class":408},[398,58296,58297,58299,58301,58303,58305,58307],{"class":400,"line":1476},[398,58298,52337],{"class":408},[398,58300,51537],{"class":51493},[398,58302,51540],{"class":2239},[398,58304,454],{"class":408},[398,58306,51545],{"class":513},[398,58308,51500],{"class":408},[398,58310,58311,58313,58315,58317,58319,58321,58323,58325,58327],{"class":400,"line":1490},[398,58312,52337],{"class":408},[398,58314,51537],{"class":51493},[398,58316,15197],{"class":2239},[398,58318,454],{"class":408},[398,58320,51584],{"class":513},[398,58322,51564],{"class":2239},[398,58324,454],{"class":408},[398,58326,51591],{"class":513},[398,58328,51500],{"class":408},[398,58330,58331,58333,58335,58337,58339],{"class":400,"line":1496},[398,58332,52337],{"class":408},[398,58334,51600],{"class":51493},[398,58336,51603],{"class":408},[398,58338,51600],{"class":51493},[398,58340,51500],{"class":408},[398,58342,58343,58345,58347],{"class":400,"line":1587},[398,58344,51978],{"class":408},[398,58346,51527],{"class":51493},[398,58348,51500],{"class":408},[398,58350,58351],{"class":400,"line":1593},[398,58352,2676],{"emptyLinePlaceholder":328},[398,58354,58355,58357,58359],{"class":400,"line":1605},[398,58356,1312],{"class":408},[398,58358,51993],{"class":51493},[398,58360,51500],{"class":408},[398,58362,58363,58365,58367,58369,58371],{"class":400,"line":1888},[398,58364,52337],{"class":408},[398,58366,54080],{"class":51493},[398,58368,54086],{"class":408},[398,58370,54080],{"class":51493},[398,58372,51500],{"class":408},[398,58374,58375,58377,58379],{"class":400,"line":1893},[398,58376,52337],{"class":408},[398,58378,52006],{"class":51493},[398,58380,51500],{"class":408},[398,58382,58383,58385,58387,58389,58391,58393,58395,58398],{"class":400,"line":1899},[398,58384,11498],{"class":404},[398,58386,54584],{"class":457},[398,58388,13841],{"class":404},[398,58390,54589],{"class":408},[398,58392,54592],{"class":2239},[398,58394,409],{"class":408},[398,58396,58397],{"class":513},"'button'",[398,58399,415],{"class":408},[398,58401,58402,58405,58407,58409,58411,58413,58415],{"class":400,"line":1904},[398,58403,58404],{"class":408},"    btn.",[398,58406,58006],{"class":2239},[398,58408,409],{"class":408},[398,58410,58011],{"class":513},[398,58412,12712],{"class":408},[398,58414,54642],{"class":404},[398,58416,54645],{"class":408},[398,58418,58419,58422,58424,58426,58429,58431],{"class":400,"line":1918},[398,58420,58421],{"class":404},"      const",[398,58423,2516],{"class":457},[398,58425,13841],{"class":404},[398,58427,58428],{"class":408}," Math.",[398,58430,58053],{"class":2239},[398,58432,2252],{"class":408},[398,58434,58435,58438,58441],{"class":400,"line":1923},[398,58436,58437],{"class":408},"      console.",[398,58439,58440],{"class":2239},"log",[398,58442,422],{"class":408},[398,58444,58445],{"class":400,"line":1929},[398,58446,33654],{"class":408},[398,58448,58449,58451,58453],{"class":400,"line":1950},[398,58450,52610],{"class":408},[398,58452,52006],{"class":51493},[398,58454,51500],{"class":408},[398,58456,58457,58459,58461],{"class":400,"line":1955},[398,58458,51978],{"class":408},[398,58460,51993],{"class":51493},[398,58462,51500],{"class":408},[398,58464,58465],{"class":400,"line":1969},[398,58466,2676],{"emptyLinePlaceholder":328},[398,58468,58469,58471,58473],{"class":400,"line":1974},[398,58470,51978],{"class":408},[398,58472,50828],{"class":51493},[398,58474,51500],{"class":408},[19,58476,58477],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,58479,58480],{},"常量不可以重新赋值",[19,58482,58483],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[389,58485,58487],{"className":50826,"code":58486,"language":50828,"meta":316,"style":316},"\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",[395,58488,58489,58499,58513,58517,58525,58539,58559,58571,58579,58583,58591,58603,58611,58622,58640,58656,58670,58678,58682,58690,58698,58702],{"__ignoreMap":316},[398,58490,58491,58493,58495,58497],{"class":400,"line":401},[398,58492,51490],{"class":408},[398,58494,51494],{"class":51493},[398,58496,51497],{"class":2239},[398,58498,51500],{"class":408},[398,58500,58501,58503,58505,58507,58509,58511],{"class":400,"line":317},[398,58502,1312],{"class":408},[398,58504,50828],{"class":51493},[398,58506,51509],{"class":2239},[398,58508,454],{"class":408},[398,58510,51514],{"class":513},[398,58512,51500],{"class":408},[398,58514,58515],{"class":400,"line":320},[398,58516,2676],{"emptyLinePlaceholder":328},[398,58518,58519,58521,58523],{"class":400,"line":1470},[398,58520,1312],{"class":408},[398,58522,51527],{"class":51493},[398,58524,51500],{"class":408},[398,58526,58527,58529,58531,58533,58535,58537],{"class":400,"line":1476},[398,58528,52337],{"class":408},[398,58530,51537],{"class":51493},[398,58532,51540],{"class":2239},[398,58534,454],{"class":408},[398,58536,51545],{"class":513},[398,58538,51500],{"class":408},[398,58540,58541,58543,58545,58547,58549,58551,58553,58555,58557],{"class":400,"line":1490},[398,58542,52337],{"class":408},[398,58544,51537],{"class":51493},[398,58546,15197],{"class":2239},[398,58548,454],{"class":408},[398,58550,51584],{"class":513},[398,58552,51564],{"class":2239},[398,58554,454],{"class":408},[398,58556,51591],{"class":513},[398,58558,51500],{"class":408},[398,58560,58561,58563,58565,58567,58569],{"class":400,"line":1496},[398,58562,52337],{"class":408},[398,58564,51600],{"class":51493},[398,58566,51603],{"class":408},[398,58568,51600],{"class":51493},[398,58570,51500],{"class":408},[398,58572,58573,58575,58577],{"class":400,"line":1587},[398,58574,51978],{"class":408},[398,58576,51527],{"class":51493},[398,58578,51500],{"class":408},[398,58580,58581],{"class":400,"line":1593},[398,58582,2676],{"emptyLinePlaceholder":328},[398,58584,58585,58587,58589],{"class":400,"line":1605},[398,58586,1312],{"class":408},[398,58588,51993],{"class":51493},[398,58590,51500],{"class":408},[398,58592,58593,58595,58597,58599,58601],{"class":400,"line":1888},[398,58594,52337],{"class":408},[398,58596,54080],{"class":51493},[398,58598,54086],{"class":408},[398,58600,54080],{"class":51493},[398,58602,51500],{"class":408},[398,58604,58605,58607,58609],{"class":400,"line":1893},[398,58606,52337],{"class":408},[398,58608,52006],{"class":51493},[398,58610,51500],{"class":408},[398,58612,58613,58615,58617,58619],{"class":400,"line":1899},[398,58614,11498],{"class":404},[398,58616,2516],{"class":457},[398,58618,13841],{"class":404},[398,58620,58621],{"class":457}," 10\n",[398,58623,58624,58626,58628,58630,58632,58634,58636,58638],{"class":400,"line":1904},[398,58625,11498],{"class":404},[398,58627,54584],{"class":457},[398,58629,13841],{"class":404},[398,58631,54589],{"class":408},[398,58633,54592],{"class":2239},[398,58635,409],{"class":408},[398,58637,58397],{"class":513},[398,58639,415],{"class":408},[398,58641,58642,58644,58646,58648,58650,58652,58654],{"class":400,"line":1918},[398,58643,58404],{"class":408},[398,58645,58006],{"class":2239},[398,58647,409],{"class":408},[398,58649,58011],{"class":513},[398,58651,12712],{"class":408},[398,58653,54642],{"class":404},[398,58655,54645],{"class":408},[398,58657,58658,58660,58662,58664,58666,58668],{"class":400,"line":1923},[398,58659,58421],{"class":404},[398,58661,2516],{"class":457},[398,58663,13841],{"class":404},[398,58665,58428],{"class":408},[398,58667,58053],{"class":2239},[398,58669,2252],{"class":408},[398,58671,58672,58674,58676],{"class":400,"line":1929},[398,58673,58437],{"class":408},[398,58675,58440],{"class":2239},[398,58677,422],{"class":408},[398,58679,58680],{"class":400,"line":1950},[398,58681,33654],{"class":408},[398,58683,58684,58686,58688],{"class":400,"line":1955},[398,58685,52610],{"class":408},[398,58687,52006],{"class":51493},[398,58689,51500],{"class":408},[398,58691,58692,58694,58696],{"class":400,"line":1969},[398,58693,51978],{"class":408},[398,58695,51993],{"class":51493},[398,58697,51500],{"class":408},[398,58699,58700],{"class":400,"line":1974},[398,58701,2676],{"emptyLinePlaceholder":328},[398,58703,58704,58706,58708],{"class":400,"line":2003},[398,58705,51978],{"class":408},[398,58707,50828],{"class":51493},[398,58709,51500],{"class":408},[19,58711,58712],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[389,58714,58716],{"className":50826,"code":58715,"language":50828,"meta":316,"style":316},"\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",[395,58717,58718,58728,58742,58746,58754,58768,58788,58800,58808,58812,58820,58832,58840,58850,58868,58884,58897,58905,58909,58917,58925,58929],{"__ignoreMap":316},[398,58719,58720,58722,58724,58726],{"class":400,"line":401},[398,58721,51490],{"class":408},[398,58723,51494],{"class":51493},[398,58725,51497],{"class":2239},[398,58727,51500],{"class":408},[398,58729,58730,58732,58734,58736,58738,58740],{"class":400,"line":317},[398,58731,1312],{"class":408},[398,58733,50828],{"class":51493},[398,58735,51509],{"class":2239},[398,58737,454],{"class":408},[398,58739,51514],{"class":513},[398,58741,51500],{"class":408},[398,58743,58744],{"class":400,"line":320},[398,58745,2676],{"emptyLinePlaceholder":328},[398,58747,58748,58750,58752],{"class":400,"line":1470},[398,58749,1312],{"class":408},[398,58751,51527],{"class":51493},[398,58753,51500],{"class":408},[398,58755,58756,58758,58760,58762,58764,58766],{"class":400,"line":1476},[398,58757,52337],{"class":408},[398,58759,51537],{"class":51493},[398,58761,51540],{"class":2239},[398,58763,454],{"class":408},[398,58765,51545],{"class":513},[398,58767,51500],{"class":408},[398,58769,58770,58772,58774,58776,58778,58780,58782,58784,58786],{"class":400,"line":1490},[398,58771,52337],{"class":408},[398,58773,51537],{"class":51493},[398,58775,15197],{"class":2239},[398,58777,454],{"class":408},[398,58779,51584],{"class":513},[398,58781,51564],{"class":2239},[398,58783,454],{"class":408},[398,58785,51591],{"class":513},[398,58787,51500],{"class":408},[398,58789,58790,58792,58794,58796,58798],{"class":400,"line":1496},[398,58791,52337],{"class":408},[398,58793,51600],{"class":51493},[398,58795,51603],{"class":408},[398,58797,51600],{"class":51493},[398,58799,51500],{"class":408},[398,58801,58802,58804,58806],{"class":400,"line":1587},[398,58803,51978],{"class":408},[398,58805,51527],{"class":51493},[398,58807,51500],{"class":408},[398,58809,58810],{"class":400,"line":1593},[398,58811,2676],{"emptyLinePlaceholder":328},[398,58813,58814,58816,58818],{"class":400,"line":1605},[398,58815,1312],{"class":408},[398,58817,51993],{"class":51493},[398,58819,51500],{"class":408},[398,58821,58822,58824,58826,58828,58830],{"class":400,"line":1888},[398,58823,52337],{"class":408},[398,58825,54080],{"class":51493},[398,58827,54086],{"class":408},[398,58829,54080],{"class":51493},[398,58831,51500],{"class":408},[398,58833,58834,58836,58838],{"class":400,"line":1893},[398,58835,52337],{"class":408},[398,58837,52006],{"class":51493},[398,58839,51500],{"class":408},[398,58841,58842,58844,58846,58848],{"class":400,"line":1899},[398,58843,11498],{"class":404},[398,58845,2516],{"class":457},[398,58847,13841],{"class":404},[398,58849,58621],{"class":457},[398,58851,58852,58854,58856,58858,58860,58862,58864,58866],{"class":400,"line":1904},[398,58853,11498],{"class":404},[398,58855,54584],{"class":457},[398,58857,13841],{"class":404},[398,58859,54589],{"class":408},[398,58861,54592],{"class":2239},[398,58863,409],{"class":408},[398,58865,58397],{"class":513},[398,58867,415],{"class":408},[398,58869,58870,58872,58874,58876,58878,58880,58882],{"class":400,"line":1918},[398,58871,58404],{"class":408},[398,58873,58006],{"class":2239},[398,58875,409],{"class":408},[398,58877,58011],{"class":513},[398,58879,12712],{"class":408},[398,58881,54642],{"class":404},[398,58883,54645],{"class":408},[398,58885,58886,58889,58891,58893,58895],{"class":400,"line":1923},[398,58887,58888],{"class":408},"      num ",[398,58890,454],{"class":404},[398,58892,58428],{"class":408},[398,58894,58053],{"class":2239},[398,58896,2252],{"class":408},[398,58898,58899,58901,58903],{"class":400,"line":1929},[398,58900,58437],{"class":408},[398,58902,58440],{"class":2239},[398,58904,422],{"class":408},[398,58906,58907],{"class":400,"line":1950},[398,58908,33654],{"class":408},[398,58910,58911,58913,58915],{"class":400,"line":1955},[398,58912,52610],{"class":408},[398,58914,52006],{"class":51493},[398,58916,51500],{"class":408},[398,58918,58919,58921,58923],{"class":400,"line":1969},[398,58920,51978],{"class":408},[398,58922,51993],{"class":51493},[398,58924,51500],{"class":408},[398,58926,58927],{"class":400,"line":1974},[398,58928,2676],{"emptyLinePlaceholder":328},[398,58930,58931,58933,58935],{"class":400,"line":2003},[398,58932,51978],{"class":408},[398,58934,50828],{"class":51493},[398,58936,51500],{"class":408},[19,58938,58939],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[14,58941,58943],{"id":58942},"_324-事件监听版本","3.2.4 事件监听版本",[19,58945,58946],{},[1738,58947],{"alt":316,"src":58948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,58950,58951],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,58953,58954],{},"这种方式会覆盖前边的事件监听:",[389,58956,58958],{"className":50826,"code":58957,"language":50828,"meta":316,"style":316},"\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",[395,58959,58960,58970,58984,58988,58996,59010,59030,59042,59050,59054,59062,59074,59082,59100,59114,59125,59129,59141,59151,59155,59163,59171,59175],{"__ignoreMap":316},[398,58961,58962,58964,58966,58968],{"class":400,"line":401},[398,58963,51490],{"class":408},[398,58965,51494],{"class":51493},[398,58967,51497],{"class":2239},[398,58969,51500],{"class":408},[398,58971,58972,58974,58976,58978,58980,58982],{"class":400,"line":317},[398,58973,1312],{"class":408},[398,58975,50828],{"class":51493},[398,58977,51509],{"class":2239},[398,58979,454],{"class":408},[398,58981,51514],{"class":513},[398,58983,51500],{"class":408},[398,58985,58986],{"class":400,"line":320},[398,58987,2676],{"emptyLinePlaceholder":328},[398,58989,58990,58992,58994],{"class":400,"line":1470},[398,58991,1312],{"class":408},[398,58993,51527],{"class":51493},[398,58995,51500],{"class":408},[398,58997,58998,59000,59002,59004,59006,59008],{"class":400,"line":1476},[398,58999,52337],{"class":408},[398,59001,51537],{"class":51493},[398,59003,51540],{"class":2239},[398,59005,454],{"class":408},[398,59007,51545],{"class":513},[398,59009,51500],{"class":408},[398,59011,59012,59014,59016,59018,59020,59022,59024,59026,59028],{"class":400,"line":1490},[398,59013,52337],{"class":408},[398,59015,51537],{"class":51493},[398,59017,15197],{"class":2239},[398,59019,454],{"class":408},[398,59021,51584],{"class":513},[398,59023,51564],{"class":2239},[398,59025,454],{"class":408},[398,59027,51591],{"class":513},[398,59029,51500],{"class":408},[398,59031,59032,59034,59036,59038,59040],{"class":400,"line":1496},[398,59033,52337],{"class":408},[398,59035,51600],{"class":51493},[398,59037,51603],{"class":408},[398,59039,51600],{"class":51493},[398,59041,51500],{"class":408},[398,59043,59044,59046,59048],{"class":400,"line":1587},[398,59045,51978],{"class":408},[398,59047,51527],{"class":51493},[398,59049,51500],{"class":408},[398,59051,59052],{"class":400,"line":1593},[398,59053,2676],{"emptyLinePlaceholder":328},[398,59055,59056,59058,59060],{"class":400,"line":1605},[398,59057,1312],{"class":408},[398,59059,51993],{"class":51493},[398,59061,51500],{"class":408},[398,59063,59064,59066,59068,59070,59072],{"class":400,"line":1888},[398,59065,52337],{"class":408},[398,59067,54080],{"class":51493},[398,59069,54086],{"class":408},[398,59071,54080],{"class":51493},[398,59073,51500],{"class":408},[398,59075,59076,59078,59080],{"class":400,"line":1893},[398,59077,52337],{"class":408},[398,59079,52006],{"class":51493},[398,59081,51500],{"class":408},[398,59083,59084,59086,59088,59090,59092,59094,59096,59098],{"class":400,"line":1899},[398,59085,11498],{"class":404},[398,59087,54584],{"class":457},[398,59089,13841],{"class":404},[398,59091,54589],{"class":408},[398,59093,54592],{"class":2239},[398,59095,409],{"class":408},[398,59097,58397],{"class":513},[398,59099,415],{"class":408},[398,59101,59102,59104,59107,59109,59112],{"class":400,"line":1904},[398,59103,58404],{"class":408},[398,59105,59106],{"class":2239},"onclick",[398,59108,13841],{"class":404},[398,59110,59111],{"class":404}," function",[398,59113,54645],{"class":408},[398,59115,59116,59119,59121,59123],{"class":400,"line":1918},[398,59117,59118],{"class":2239},"      alert",[398,59120,409],{"class":408},[398,59122,874],{"class":457},[398,59124,415],{"class":408},[398,59126,59127],{"class":400,"line":1923},[398,59128,2463],{"class":408},[398,59130,59131,59133,59135,59137,59139],{"class":400,"line":1929},[398,59132,58404],{"class":408},[398,59134,59106],{"class":2239},[398,59136,13841],{"class":404},[398,59138,59111],{"class":404},[398,59140,54645],{"class":408},[398,59142,59143,59145,59147,59149],{"class":400,"line":1950},[398,59144,59118],{"class":2239},[398,59146,409],{"class":408},[398,59148,1152],{"class":457},[398,59150,415],{"class":408},[398,59152,59153],{"class":400,"line":1955},[398,59154,2463],{"class":408},[398,59156,59157,59159,59161],{"class":400,"line":1969},[398,59158,52610],{"class":408},[398,59160,52006],{"class":51493},[398,59162,51500],{"class":408},[398,59164,59165,59167,59169],{"class":400,"line":1974},[398,59166,51978],{"class":408},[398,59168,51993],{"class":51493},[398,59170,51500],{"class":408},[398,59172,59173],{"class":400,"line":2003},[398,59174,2676],{"emptyLinePlaceholder":328},[398,59176,59177,59179,59181],{"class":400,"line":2008},[398,59178,51978],{"class":408},[398,59180,50828],{"class":51493},[398,59182,51500],{"class":408},[19,59184,59185],{},"只要点击就输出结果为22,前边11被覆盖了",[389,59187,59189],{"className":50826,"code":59188,"language":50828,"meta":316,"style":316},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[395,59190,59191,59196,59201,59205,59210,59215],{"__ignoreMap":316},[398,59192,59193],{"class":400,"line":401},[398,59194,59195],{"class":408},"  btn.addEventListener('click', function () {\n",[398,59197,59198],{"class":400,"line":317},[398,59199,59200],{"class":408},"      alert(11)\n",[398,59202,59203],{"class":400,"line":320},[398,59204,33654],{"class":408},[398,59206,59207],{"class":400,"line":1470},[398,59208,59209],{"class":408},"    btn.addEventListener('click', function () {\n",[398,59211,59212],{"class":400,"line":1476},[398,59213,59214],{"class":408},"      alert(22)\n",[398,59216,59217],{"class":400,"line":1490},[398,59218,33654],{"class":408},[19,59220,59221],{},"点击第一次输出11,第二次点击为22",[14,59223,59225],{"id":59224},"_325-事件类型","3.2.5 事件类型",[19,59227,59228],{},[1738,59229],{"alt":316,"src":59230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22275,59232,59234],{"id":59233},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,59236,59237],{},"补充知识:",[19,59239,59240],{},"轮播图自动播放模块,可以使用",[19,59242,59243],{},"let timerId = setInterval(function () {",[19,59245,59246],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,59248,59249],{},"用js方法模拟进行点击事件,click必须加()",[19,59251,59252],{},"next.click()",[19,59254,59255],{},"}, 1000)",[19,59257,59258],{},[1738,59259],{"alt":316,"src":59260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[389,59262,59264],{"className":53260,"code":59263,"language":53262,"meta":316,"style":316},"\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",[395,59265,59266,59270,59280,59294,59298,59306,59321,59341,59361,59374,59382,59387,59392,59396,59400,59405,59410,59415,59420,59424,59428,59433,59438,59443,59447,59451,59456,59460,59465,59470,59474,59478,59483,59488,59493,59498,59503,59507,59511,59516,59521,59526,59531,59536,59540,59544,59549,59554,59559,59564,59569,59574,59579,59584,59589,59594,59598,59602,59607,59612,59616,59620,59625,59630,59634,59639,59644,59648,59652,59657,59661,59666,59671,59675,59680,59684,59688,59693,59698,59703,59708,59713,59718,59723,59727,59731,59735,59740,59745,59750,59755,59759,59767,59775,59779,59787,59802,59816,59837,59845,59859,59872,59887,59906,59918,59930,59942,59954,59966,59978,59990,59998,60013,60037,60061,60069,60077,60085,60093,60098,60103,60108,60113,60118,60123,60128,60133,60138,60143,60147,60152,60157,60162,60167,60172,60177,60182,60187,60192,60196,60201,60206,60211,60216,60221,60226,60231,60236,60241,60246,60251,60256,60260,60264,60269,60274,60279,60283,60288,60293,60298,60303,60308,60312,60317,60321,60325,60329,60333,60337,60341,60346,60351,60356,60361,60366,60371,60376,60381,60386,60390,60394,60399,60404,60409,60414,60419,60423,60428,60433,60438,60443,60448,60453,60457,60461,60466,60470,60475,60479,60484,60489,60494,60499,60504,60509,60513,60521,60529,60533],{"__ignoreMap":316},[398,59267,59268],{"class":400,"line":401},[398,59269,2676],{"emptyLinePlaceholder":328},[398,59271,59272,59274,59276,59278],{"class":400,"line":317},[398,59273,51490],{"class":408},[398,59275,51494],{"class":404},[398,59277,51497],{"class":457},[398,59279,51500],{"class":408},[398,59281,59282,59284,59286,59288,59290,59292],{"class":400,"line":320},[398,59283,1312],{"class":408},[398,59285,50828],{"class":51493},[398,59287,51509],{"class":2239},[398,59289,454],{"class":408},[398,59291,51514],{"class":513},[398,59293,51500],{"class":408},[398,59295,59296],{"class":400,"line":1470},[398,59297,2676],{"emptyLinePlaceholder":328},[398,59299,59300,59302,59304],{"class":400,"line":1476},[398,59301,1312],{"class":408},[398,59303,51527],{"class":51493},[398,59305,51500],{"class":408},[398,59307,59308,59310,59312,59314,59316,59318],{"class":400,"line":1490},[398,59309,52337],{"class":408},[398,59311,51537],{"class":51493},[398,59313,51540],{"class":2239},[398,59315,454],{"class":408},[398,59317,51545],{"class":513},[398,59319,59320],{"class":408}," \u002F>\n",[398,59322,59323,59325,59327,59329,59331,59333,59335,59337,59339],{"class":400,"line":1496},[398,59324,52337],{"class":408},[398,59326,51537],{"class":51493},[398,59328,51556],{"class":2239},[398,59330,454],{"class":408},[398,59332,51561],{"class":513},[398,59334,51564],{"class":2239},[398,59336,454],{"class":408},[398,59338,51569],{"class":513},[398,59340,59320],{"class":408},[398,59342,59343,59345,59347,59349,59351,59353,59355,59357,59359],{"class":400,"line":1587},[398,59344,52337],{"class":408},[398,59346,51537],{"class":51493},[398,59348,15197],{"class":2239},[398,59350,454],{"class":408},[398,59352,51584],{"class":513},[398,59354,51564],{"class":2239},[398,59356,454],{"class":408},[398,59358,51591],{"class":513},[398,59360,59320],{"class":408},[398,59362,59363,59365,59367,59370,59372],{"class":400,"line":1593},[398,59364,52337],{"class":408},[398,59366,51600],{"class":51493},[398,59368,59369],{"class":408},">轮播图点击切换\u003C\u002F",[398,59371,51600],{"class":51493},[398,59373,51500],{"class":408},[398,59375,59376,59378,59380],{"class":400,"line":1605},[398,59377,52337],{"class":408},[398,59379,5403],{"class":51493},[398,59381,51500],{"class":408},[398,59383,59384],{"class":400,"line":1888},[398,59385,59386],{"class":408},"    * {\n",[398,59388,59389],{"class":400,"line":1893},[398,59390,59391],{"class":408},"      box-sizing: border-box;\n",[398,59393,59394],{"class":400,"line":1899},[398,59395,2463],{"class":408},[398,59397,59398],{"class":400,"line":1904},[398,59399,2676],{"emptyLinePlaceholder":328},[398,59401,59402],{"class":400,"line":1918},[398,59403,59404],{"class":408},"    .slider {\n",[398,59406,59407],{"class":400,"line":1923},[398,59408,59409],{"class":408},"      width: 560px;\n",[398,59411,59412],{"class":400,"line":1929},[398,59413,59414],{"class":408},"      height: 400px;\n",[398,59416,59417],{"class":400,"line":1950},[398,59418,59419],{"class":408},"      overflow: hidden;\n",[398,59421,59422],{"class":400,"line":1955},[398,59423,2463],{"class":408},[398,59425,59426],{"class":400,"line":1969},[398,59427,2676],{"emptyLinePlaceholder":328},[398,59429,59430],{"class":400,"line":1974},[398,59431,59432],{"class":408},"    .slider-wrapper {\n",[398,59434,59435],{"class":400,"line":2003},[398,59436,59437],{"class":408},"      width: 100%;\n",[398,59439,59440],{"class":400,"line":2008},[398,59441,59442],{"class":408},"      height: 320px;\n",[398,59444,59445],{"class":400,"line":2025},[398,59446,2463],{"class":408},[398,59448,59449],{"class":400,"line":2030},[398,59450,2676],{"emptyLinePlaceholder":328},[398,59452,59453],{"class":400,"line":2035},[398,59454,59455],{"class":408},"    .slider-wrapper img {\n",[398,59457,59458],{"class":400,"line":2040},[398,59459,59437],{"class":408},[398,59461,59462],{"class":400,"line":2054},[398,59463,59464],{"class":408},"      height: 100%;\n",[398,59466,59467],{"class":400,"line":2059},[398,59468,59469],{"class":408},"      display: block;\n",[398,59471,59472],{"class":400,"line":2853},[398,59473,2463],{"class":408},[398,59475,59476],{"class":400,"line":2867},[398,59477,2676],{"emptyLinePlaceholder":328},[398,59479,59480],{"class":400,"line":2875},[398,59481,59482],{"class":408},"    .slider-footer {\n",[398,59484,59485],{"class":400,"line":2880},[398,59486,59487],{"class":408},"      height: 80px;\n",[398,59489,59490],{"class":400,"line":2886},[398,59491,59492],{"class":408},"      background-color: rgb(100, 67, 68);\n",[398,59494,59495],{"class":400,"line":2892},[398,59496,59497],{"class":408},"      padding: 12px 12px 0 12px;\n",[398,59499,59500],{"class":400,"line":2897},[398,59501,59502],{"class":408},"      position: relative;\n",[398,59504,59505],{"class":400,"line":8225},[398,59506,2463],{"class":408},[398,59508,59509],{"class":400,"line":8249},[398,59510,2676],{"emptyLinePlaceholder":328},[398,59512,59513],{"class":400,"line":8254},[398,59514,59515],{"class":408},"    .slider-footer .toggle {\n",[398,59517,59518],{"class":400,"line":8260},[398,59519,59520],{"class":408},"      position: absolute;\n",[398,59522,59523],{"class":400,"line":8287},[398,59524,59525],{"class":408},"      right: 0;\n",[398,59527,59528],{"class":400,"line":8292},[398,59529,59530],{"class":408},"      top: 12px;\n",[398,59532,59533],{"class":400,"line":8298},[398,59534,59535],{"class":408},"      display: flex;\n",[398,59537,59538],{"class":400,"line":8310},[398,59539,2463],{"class":408},[398,59541,59542],{"class":400,"line":8322},[398,59543,2676],{"emptyLinePlaceholder":328},[398,59545,59546],{"class":400,"line":8334},[398,59547,59548],{"class":408},"    .slider-footer .toggle button {\n",[398,59550,59551],{"class":400,"line":9993},[398,59552,59553],{"class":408},"      margin-right: 12px;\n",[398,59555,59556],{"class":400,"line":10018},[398,59557,59558],{"class":408},"      width: 28px;\n",[398,59560,59561],{"class":400,"line":10041},[398,59562,59563],{"class":408},"      height: 28px;\n",[398,59565,59566],{"class":400,"line":10065},[398,59567,59568],{"class":408},"      appearance: none;\n",[398,59570,59571],{"class":400,"line":10070},[398,59572,59573],{"class":408},"      border: none;\n",[398,59575,59576],{"class":400,"line":10075},[398,59577,59578],{"class":408},"      background: rgba(255, 255, 255, 0.1);\n",[398,59580,59581],{"class":400,"line":10080},[398,59582,59583],{"class":408},"      color: #fff;\n",[398,59585,59586],{"class":400,"line":10089},[398,59587,59588],{"class":408},"      border-radius: 4px;\n",[398,59590,59591],{"class":400,"line":10094},[398,59592,59593],{"class":408},"      cursor: pointer;\n",[398,59595,59596],{"class":400,"line":10100},[398,59597,2463],{"class":408},[398,59599,59600],{"class":400,"line":10121},[398,59601,2676],{"emptyLinePlaceholder":328},[398,59603,59604],{"class":400,"line":10127},[398,59605,59606],{"class":408},"    .slider-footer .toggle button:hover {\n",[398,59608,59609],{"class":400,"line":10141},[398,59610,59611],{"class":408},"      background: rgba(255, 255, 255, 0.2);\n",[398,59613,59614],{"class":400,"line":10147},[398,59615,2463],{"class":408},[398,59617,59618],{"class":400,"line":10174},[398,59619,2676],{"emptyLinePlaceholder":328},[398,59621,59622],{"class":400,"line":10183},[398,59623,59624],{"class":408},"    .slider-footer p {\n",[398,59626,59627],{"class":400,"line":10189},[398,59628,59629],{"class":408},"      margin: 0;\n",[398,59631,59632],{"class":400,"line":10197},[398,59633,59583],{"class":408},[398,59635,59636],{"class":400,"line":10202},[398,59637,59638],{"class":408},"      font-size: 18px;\n",[398,59640,59641],{"class":400,"line":16881},[398,59642,59643],{"class":408},"      margin-bottom: 10px;\n",[398,59645,59646],{"class":400,"line":16887},[398,59647,2463],{"class":408},[398,59649,59650],{"class":400,"line":16910},[398,59651,2676],{"emptyLinePlaceholder":328},[398,59653,59654],{"class":400,"line":16916},[398,59655,59656],{"class":408},"    .slider-indicator {\n",[398,59658,59659],{"class":400,"line":16939},[398,59660,59629],{"class":408},[398,59662,59663],{"class":400,"line":16953},[398,59664,59665],{"class":408},"      padding: 0;\n",[398,59667,59668],{"class":400,"line":16973},[398,59669,59670],{"class":408},"      list-style: none;\n",[398,59672,59673],{"class":400,"line":16979},[398,59674,59535],{"class":408},[398,59676,59677],{"class":400,"line":16990},[398,59678,59679],{"class":408},"      align-items: center;\n",[398,59681,59682],{"class":400,"line":17013},[398,59683,2463],{"class":408},[398,59685,59686],{"class":400,"line":17035},[398,59687,2676],{"emptyLinePlaceholder":328},[398,59689,59690],{"class":400,"line":17040},[398,59691,59692],{"class":408},"    .slider-indicator li {\n",[398,59694,59695],{"class":400,"line":17046},[398,59696,59697],{"class":408},"      width: 8px;\n",[398,59699,59700],{"class":400,"line":17060},[398,59701,59702],{"class":408},"      height: 8px;\n",[398,59704,59705],{"class":400,"line":17073},[398,59706,59707],{"class":408},"      margin: 4px;\n",[398,59709,59710],{"class":400,"line":17078},[398,59711,59712],{"class":408},"      border-radius: 50%;\n",[398,59714,59715],{"class":400,"line":17092},[398,59716,59717],{"class":408},"      background: #fff;\n",[398,59719,59720],{"class":400,"line":17097},[398,59721,59722],{"class":408},"      opacity: 0.4;\n",[398,59724,59725],{"class":400,"line":17103},[398,59726,59593],{"class":408},[398,59728,59729],{"class":400,"line":17108},[398,59730,2463],{"class":408},[398,59732,59733],{"class":400,"line":17122},[398,59734,2676],{"emptyLinePlaceholder":328},[398,59736,59737],{"class":400,"line":17127},[398,59738,59739],{"class":408},"    .slider-indicator li.active {\n",[398,59741,59742],{"class":400,"line":17132},[398,59743,59744],{"class":408},"      width: 12px;\n",[398,59746,59747],{"class":400,"line":17146},[398,59748,59749],{"class":408},"      height: 12px;\n",[398,59751,59752],{"class":400,"line":17158},[398,59753,59754],{"class":408},"      opacity: 1;\n",[398,59756,59757],{"class":400,"line":17163},[398,59758,2463],{"class":408},[398,59760,59761,59763,59765],{"class":400,"line":17176},[398,59762,52610],{"class":408},[398,59764,5403],{"class":51493},[398,59766,51500],{"class":408},[398,59768,59769,59771,59773],{"class":400,"line":17181},[398,59770,51978],{"class":408},[398,59772,51527],{"class":51493},[398,59774,51500],{"class":408},[398,59776,59777],{"class":400,"line":17186},[398,59778,2676],{"emptyLinePlaceholder":328},[398,59780,59781,59783,59785],{"class":400,"line":17191},[398,59782,1312],{"class":408},[398,59784,51993],{"class":51493},[398,59786,51500],{"class":408},[398,59788,59789,59791,59793,59795,59797,59800],{"class":400,"line":17204},[398,59790,52337],{"class":408},[398,59792,51804],{"class":51493},[398,59794,53679],{"class":2239},[398,59796,454],{"class":408},[398,59798,59799],{"class":513},"\"slider\"",[398,59801,51500],{"class":408},[398,59803,59804,59806,59808,59810,59812,59814],{"class":400,"line":17209},[398,59805,51534],{"class":408},[398,59807,51804],{"class":51493},[398,59809,53679],{"class":2239},[398,59811,454],{"class":408},[398,59813,55420],{"class":513},[398,59815,51500],{"class":408},[398,59817,59818,59820,59822,59824,59826,59829,59831,59833,59835],{"class":400,"line":32826},[398,59819,55427],{"class":408},[398,59821,1738],{"class":51493},[398,59823,55432],{"class":2239},[398,59825,454],{"class":408},[398,59827,59828],{"class":513},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[398,59830,55440],{"class":2239},[398,59832,454],{"class":408},[398,59834,7929],{"class":513},[398,59836,59320],{"class":408},[398,59838,59839,59841,59843],{"class":400,"line":32832},[398,59840,51969],{"class":408},[398,59842,51804],{"class":51493},[398,59844,51500],{"class":408},[398,59846,59847,59849,59851,59853,59855,59857],{"class":400,"line":32838},[398,59848,51534],{"class":408},[398,59850,51804],{"class":51493},[398,59852,53679],{"class":2239},[398,59854,454],{"class":408},[398,59856,55467],{"class":513},[398,59858,51500],{"class":408},[398,59860,59861,59863,59865,59868,59870],{"class":400,"line":32844},[398,59862,55427],{"class":408},[398,59864,19],{"class":51493},[398,59866,59867],{"class":408},">对人类来说会不会太超前了？\u003C\u002F",[398,59869,19],{"class":51493},[398,59871,51500],{"class":408},[398,59873,59874,59876,59878,59880,59882,59885],{"class":400,"line":32850},[398,59875,55427],{"class":408},[398,59877,67],{"class":51493},[398,59879,53679],{"class":2239},[398,59881,454],{"class":408},[398,59883,59884],{"class":513},"\"slider-indicator\"",[398,59886,51500],{"class":408},[398,59888,59889,59891,59893,59895,59897,59900,59902,59904],{"class":400,"line":32861},[398,59890,55495],{"class":408},[398,59892,41],{"class":51493},[398,59894,53679],{"class":2239},[398,59896,454],{"class":408},[398,59898,59899],{"class":513},"\"active\"",[398,59901,55507],{"class":408},[398,59903,41],{"class":51493},[398,59905,51500],{"class":408},[398,59907,59908,59910,59912,59914,59916],{"class":400,"line":32867},[398,59909,55495],{"class":408},[398,59911,41],{"class":51493},[398,59913,55507],{"class":408},[398,59915,41],{"class":51493},[398,59917,51500],{"class":408},[398,59919,59920,59922,59924,59926,59928],{"class":400,"line":32887},[398,59921,55495],{"class":408},[398,59923,41],{"class":51493},[398,59925,55507],{"class":408},[398,59927,41],{"class":51493},[398,59929,51500],{"class":408},[398,59931,59932,59934,59936,59938,59940],{"class":400,"line":32893},[398,59933,55495],{"class":408},[398,59935,41],{"class":51493},[398,59937,55507],{"class":408},[398,59939,41],{"class":51493},[398,59941,51500],{"class":408},[398,59943,59944,59946,59948,59950,59952],{"class":400,"line":32904},[398,59945,55495],{"class":408},[398,59947,41],{"class":51493},[398,59949,55507],{"class":408},[398,59951,41],{"class":51493},[398,59953,51500],{"class":408},[398,59955,59956,59958,59960,59962,59964],{"class":400,"line":32910},[398,59957,55495],{"class":408},[398,59959,41],{"class":51493},[398,59961,55507],{"class":408},[398,59963,41],{"class":51493},[398,59965,51500],{"class":408},[398,59967,59968,59970,59972,59974,59976],{"class":400,"line":32916},[398,59969,55495],{"class":408},[398,59971,41],{"class":51493},[398,59973,55507],{"class":408},[398,59975,41],{"class":51493},[398,59977,51500],{"class":408},[398,59979,59980,59982,59984,59986,59988],{"class":400,"line":32922},[398,59981,55495],{"class":408},[398,59983,41],{"class":51493},[398,59985,55507],{"class":408},[398,59987,41],{"class":51493},[398,59989,51500],{"class":408},[398,59991,59992,59994,59996],{"class":400,"line":32928},[398,59993,55600],{"class":408},[398,59995,67],{"class":51493},[398,59997,51500],{"class":408},[398,59999,60000,60002,60004,60006,60008,60011],{"class":400,"line":32934},[398,60001,55427],{"class":408},[398,60003,51804],{"class":51493},[398,60005,53679],{"class":2239},[398,60007,454],{"class":408},[398,60009,60010],{"class":513},"\"toggle\"",[398,60012,51500],{"class":408},[398,60014,60015,60017,60019,60021,60023,60026,60028,60031,60033,60035],{"class":400,"line":32940},[398,60016,55495],{"class":408},[398,60018,54080],{"class":51493},[398,60020,53679],{"class":2239},[398,60022,454],{"class":408},[398,60024,60025],{"class":513},"\"prev\"",[398,60027,1362],{"class":408},[398,60029,60030],{"class":457},"&lt;",[398,60032,51978],{"class":408},[398,60034,54080],{"class":51493},[398,60036,51500],{"class":408},[398,60038,60039,60041,60043,60045,60047,60050,60052,60055,60057,60059],{"class":400,"line":32946},[398,60040,55495],{"class":408},[398,60042,54080],{"class":51493},[398,60044,53679],{"class":2239},[398,60046,454],{"class":408},[398,60048,60049],{"class":513},"\"next\"",[398,60051,1362],{"class":408},[398,60053,60054],{"class":457},"&gt;",[398,60056,51978],{"class":408},[398,60058,54080],{"class":51493},[398,60060,51500],{"class":408},[398,60062,60063,60065,60067],{"class":400,"line":32966},[398,60064,55600],{"class":408},[398,60066,51804],{"class":51493},[398,60068,51500],{"class":408},[398,60070,60071,60073,60075],{"class":400,"line":32972},[398,60072,51969],{"class":408},[398,60074,51804],{"class":51493},[398,60076,51500],{"class":408},[398,60078,60079,60081,60083],{"class":400,"line":32988},[398,60080,52610],{"class":408},[398,60082,51804],{"class":51493},[398,60084,51500],{"class":408},[398,60086,60087,60089,60091],{"class":400,"line":32994},[398,60088,52337],{"class":408},[398,60090,52006],{"class":51493},[398,60092,51500],{"class":408},[398,60094,60095],{"class":400,"line":33008},[398,60096,60097],{"class":408},"    \u002F\u002F 1. 初始数据\n",[398,60099,60100],{"class":400,"line":33014},[398,60101,60102],{"class":408},"    const data = [\n",[398,60104,60105],{"class":400,"line":33029},[398,60106,60107],{"class":408},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[398,60109,60110],{"class":400,"line":33035},[398,60111,60112],{"class":408},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[398,60114,60115],{"class":400,"line":33044},[398,60116,60117],{"class":408},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[398,60119,60120],{"class":400,"line":33050},[398,60121,60122],{"class":408},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[398,60124,60125],{"class":400,"line":33059},[398,60126,60127],{"class":408},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[398,60129,60130],{"class":400,"line":33065},[398,60131,60132],{"class":408},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[398,60134,60135],{"class":400,"line":33071},[398,60136,60137],{"class":408},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[398,60139,60140],{"class":400,"line":33080},[398,60141,60142],{"class":408},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[398,60144,60145],{"class":400,"line":33086},[398,60146,53302],{"class":408},[398,60148,60149],{"class":400,"line":33097},[398,60150,60151],{"class":408},"    \u002F\u002F 获取元素\n",[398,60153,60154],{"class":400,"line":33103},[398,60155,60156],{"class":408},"    const img = document.querySelector('.slider-wrapper img')\n",[398,60158,60159],{"class":400,"line":33122},[398,60160,60161],{"class":408},"    const p = document.querySelector('.slider-footer p')\n",[398,60163,60164],{"class":400,"line":33128},[398,60165,60166],{"class":408},"    const footer = document.querySelector('.slider-footer')\n",[398,60168,60169],{"class":400,"line":33139},[398,60170,60171],{"class":408},"    \u002F\u002F 1. 右按钮业务\n",[398,60173,60174],{"class":400,"line":33145},[398,60175,60176],{"class":408},"    \u002F\u002F 1.1 获取右侧按钮 \n",[398,60178,60179],{"class":400,"line":33165},[398,60180,60181],{"class":408},"    const next = document.querySelector('.next')\n",[398,60183,60184],{"class":400,"line":33181},[398,60185,60186],{"class":408},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[398,60188,60189],{"class":400,"line":33187},[398,60190,60191],{"class":408},"    \u002F\u002F 1.2 注册点击事件\n",[398,60193,60194],{"class":400,"line":33201},[398,60195,2676],{"emptyLinePlaceholder":328},[398,60197,60198],{"class":400,"line":33207},[398,60199,60200],{"class":408},"    next.addEventListener('click', function () {\n",[398,60202,60203],{"class":400,"line":33213},[398,60204,60205],{"class":408},"      \u002F\u002F console.log(11)\n",[398,60207,60208],{"class":400,"line":33224},[398,60209,60210],{"class":408},"      i++\n",[398,60212,60213],{"class":400,"line":33230},[398,60214,60215],{"class":408},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[398,60217,60218],{"class":400,"line":33236},[398,60219,60220],{"class":408},"      \u002F\u002F if (i >= 8) {\n",[398,60222,60223],{"class":400,"line":33246},[398,60224,60225],{"class":408},"      \u002F\u002F   i = 0\n",[398,60227,60228],{"class":400,"line":33252},[398,60229,60230],{"class":408},"      \u002F\u002F }\n",[398,60232,60233],{"class":400,"line":33263},[398,60234,60235],{"class":408},"      i = i >= data.length ? 0 : i\n",[398,60237,60238],{"class":400,"line":33269},[398,60239,60240],{"class":408},"      \u002F\u002F 1.3 得到对应的对象\n",[398,60242,60243],{"class":400,"line":33279},[398,60244,60245],{"class":408},"      \u002F\u002F console.log(data[i])\n",[398,60247,60248],{"class":400,"line":33284},[398,60249,60250],{"class":408},"      \u002F\u002F 调用函数\n",[398,60252,60253],{"class":400,"line":33290},[398,60254,60255],{"class":408},"      toggle()\n",[398,60257,60258],{"class":400,"line":33339},[398,60259,33654],{"class":408},[398,60261,60262],{"class":400,"line":33386},[398,60263,2676],{"emptyLinePlaceholder":328},[398,60265,60266],{"class":400,"line":33391},[398,60267,60268],{"class":408},"    \u002F\u002F 2. 左侧按钮业务\n",[398,60270,60271],{"class":400,"line":33397},[398,60272,60273],{"class":408},"    \u002F\u002F 2.1 获取左侧按钮 \n",[398,60275,60276],{"class":400,"line":33416},[398,60277,60278],{"class":408},"    const prev = document.querySelector('.prev')\n",[398,60280,60281],{"class":400,"line":33422},[398,60282,60191],{"class":408},[398,60284,60285],{"class":400,"line":33442},[398,60286,60287],{"class":408},"    prev.addEventListener('click', function () {\n",[398,60289,60290],{"class":400,"line":33448},[398,60291,60292],{"class":408},"      i--\n",[398,60294,60295],{"class":400,"line":33454},[398,60296,60297],{"class":408},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[398,60299,60300],{"class":400,"line":33464},[398,60301,60302],{"class":408},"      \u002F\u002F if (i \u003C 0) {\n",[398,60304,60305],{"class":400,"line":33469},[398,60306,60307],{"class":408},"      \u002F\u002F   i = 7\n",[398,60309,60310],{"class":400,"line":33475},[398,60311,60230],{"class":408},[398,60313,60314],{"class":400,"line":33491},[398,60315,60316],{"class":408},"      i = i \u003C 0 ? data.length - 1 : i\n",[398,60318,60319],{"class":400,"line":33536},[398,60320,60240],{"class":408},[398,60322,60323],{"class":400,"line":33542},[398,60324,60245],{"class":408},[398,60326,60327],{"class":400,"line":33548},[398,60328,60250],{"class":408},[398,60330,60331],{"class":400,"line":33554},[398,60332,60255],{"class":408},[398,60334,60335],{"class":400,"line":33565},[398,60336,33654],{"class":408},[398,60338,60339],{"class":400,"line":33571},[398,60340,2676],{"emptyLinePlaceholder":328},[398,60342,60343],{"class":400,"line":33577},[398,60344,60345],{"class":408},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[398,60347,60348],{"class":400,"line":33583},[398,60349,60350],{"class":408},"    function toggle() {\n",[398,60352,60353],{"class":400,"line":33601},[398,60354,60355],{"class":408},"      \u002F\u002F 1.4 渲染对应的数据\n",[398,60357,60358],{"class":400,"line":33615},[398,60359,60360],{"class":408},"      img.src = data[i].url\n",[398,60362,60363],{"class":400,"line":33624},[398,60364,60365],{"class":408},"      p.innerHTML = data[i].title\n",[398,60367,60368],{"class":400,"line":33633},[398,60369,60370],{"class":408},"      footer.style.backgroundColor = data[i].color\n",[398,60372,60373],{"class":400,"line":33642},[398,60374,60375],{"class":408},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[398,60377,60378],{"class":400,"line":33651},[398,60379,60380],{"class":408},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[398,60382,60383],{"class":400,"line":33657},[398,60384,60385],{"class":408},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[398,60387,60388],{"class":400,"line":33663},[398,60389,2463],{"class":408},[398,60391,60392],{"class":400,"line":33671},[398,60393,2676],{"emptyLinePlaceholder":328},[398,60395,60396],{"class":400,"line":33676},[398,60397,60398],{"class":408},"    \u002F\u002F 3. 自动播放模块\n",[398,60400,60401],{"class":400,"line":33682},[398,60402,60403],{"class":408},"    let timerId = setInterval(function () {\n",[398,60405,60406],{"class":400,"line":33693},[398,60407,60408],{"class":408},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[398,60410,60411],{"class":400,"line":33699},[398,60412,60413],{"class":408},"      next.click()\n",[398,60415,60416],{"class":400,"line":33719},[398,60417,60418],{"class":408},"    }, 1000)\n",[398,60420,60421],{"class":400,"line":33725},[398,60422,2676],{"emptyLinePlaceholder":328},[398,60424,60425],{"class":400,"line":33731},[398,60426,60427],{"class":408},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[398,60429,60430],{"class":400,"line":33737},[398,60431,60432],{"class":408},"    const slider = document.querySelector('.slider')\n",[398,60434,60435],{"class":400,"line":33754},[398,60436,60437],{"class":408},"    \u002F\u002F 注册事件\n",[398,60439,60440],{"class":400,"line":33760},[398,60441,60442],{"class":408},"    slider.addEventListener('mouseenter', function () {\n",[398,60444,60445],{"class":400,"line":33766},[398,60446,60447],{"class":408},"      \u002F\u002F 停止定时器\n",[398,60449,60450],{"class":400,"line":33772},[398,60451,60452],{"class":408},"      clearInterval(timerId)\n",[398,60454,60455],{"class":400,"line":33778},[398,60456,33654],{"class":408},[398,60458,60459],{"class":400,"line":33784},[398,60460,2676],{"emptyLinePlaceholder":328},[398,60462,60463],{"class":400,"line":33811},[398,60464,60465],{"class":408},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[398,60467,60468],{"class":400,"line":33835},[398,60469,60437],{"class":408},[398,60471,60472],{"class":400,"line":33841},[398,60473,60474],{"class":408},"    slider.addEventListener('mouseleave', function () {\n",[398,60476,60477],{"class":400,"line":33847},[398,60478,60447],{"class":408},[398,60480,60481],{"class":400,"line":33853},[398,60482,60483],{"class":408},"      if (timerId) clearInterval(timerId)\n",[398,60485,60486],{"class":400,"line":33864},[398,60487,60488],{"class":408},"      \u002F\u002F 开启定时器\n",[398,60490,60491],{"class":400,"line":33875},[398,60492,60493],{"class":408},"      timerId = setInterval(function () {\n",[398,60495,60496],{"class":400,"line":33881},[398,60497,60498],{"class":408},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[398,60500,60501],{"class":400,"line":33898},[398,60502,60503],{"class":408},"        next.click()\n",[398,60505,60506],{"class":400,"line":33921},[398,60507,60508],{"class":408},"      }, 1000)\n",[398,60510,60511],{"class":400,"line":33944},[398,60512,33654],{"class":408},[398,60514,60515,60517,60519],{"class":400,"line":33950},[398,60516,52610],{"class":408},[398,60518,52006],{"class":51493},[398,60520,51500],{"class":408},[398,60522,60523,60525,60527],{"class":400,"line":33955},[398,60524,51978],{"class":408},[398,60526,51993],{"class":51493},[398,60528,51500],{"class":408},[398,60530,60531],{"class":400,"line":33964},[398,60532,2676],{"emptyLinePlaceholder":328},[398,60534,60535,60537,60539],{"class":400,"line":33974},[398,60536,51978],{"class":408},[398,60538,50828],{"class":51493},[398,60540,51500],{"class":408},[22275,60542,60544],{"id":60543},"_3252-焦点事件","3.2.5.2 焦点事件",[19,60546,60547],{},"小米搜索框案例：",[389,60549,60551],{"className":50826,"code":60550,"language":50828,"meta":316,"style":316},"\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",[395,60552,60553,60563,60577,60581,60589,60603,60623,60643,60655,60663,60669,60679,60689,60701,60705,60709,60716,60720,60731,60735,60739,60746,60757,60770,60784,60788,60792,60801,60813,60825,60839,60852,60865,60883,60894,60898,60902,60911,60928,60932,60936,60943,60953,60963,60974,60987,60999,61015,61026,61038,61042,61046,61054,61065,61082,61094,61106,61117,61121,61125,61136,61147,61151,61159,61163,61171,61175,61183,61198,61221,61236,61267,61294,61321,61348,61375,61402,61429,61438,61446,61454,61459,61479,61499,61504,61509,61527,61532,61542,61547,61561,61566,61571,61588,61597,61609,61613,61621,61629,61633],{"__ignoreMap":316},[398,60554,60555,60557,60559,60561],{"class":400,"line":401},[398,60556,51490],{"class":408},[398,60558,51494],{"class":51493},[398,60560,51497],{"class":2239},[398,60562,51500],{"class":408},[398,60564,60565,60567,60569,60571,60573,60575],{"class":400,"line":317},[398,60566,1312],{"class":408},[398,60568,50828],{"class":51493},[398,60570,51509],{"class":2239},[398,60572,454],{"class":408},[398,60574,51514],{"class":513},[398,60576,51500],{"class":408},[398,60578,60579],{"class":400,"line":320},[398,60580,2676],{"emptyLinePlaceholder":328},[398,60582,60583,60585,60587],{"class":400,"line":1470},[398,60584,1312],{"class":408},[398,60586,51527],{"class":51493},[398,60588,51500],{"class":408},[398,60590,60591,60593,60595,60597,60599,60601],{"class":400,"line":1476},[398,60592,51534],{"class":408},[398,60594,51537],{"class":51493},[398,60596,51540],{"class":2239},[398,60598,454],{"class":408},[398,60600,51545],{"class":513},[398,60602,51500],{"class":408},[398,60604,60605,60607,60609,60611,60613,60615,60617,60619,60621],{"class":400,"line":1490},[398,60606,51534],{"class":408},[398,60608,51537],{"class":51493},[398,60610,51556],{"class":2239},[398,60612,454],{"class":408},[398,60614,51561],{"class":513},[398,60616,51564],{"class":2239},[398,60618,454],{"class":408},[398,60620,51569],{"class":513},[398,60622,51500],{"class":408},[398,60624,60625,60627,60629,60631,60633,60635,60637,60639,60641],{"class":400,"line":1496},[398,60626,51534],{"class":408},[398,60628,51537],{"class":51493},[398,60630,15197],{"class":2239},[398,60632,454],{"class":408},[398,60634,51584],{"class":513},[398,60636,51564],{"class":2239},[398,60638,454],{"class":408},[398,60640,51591],{"class":513},[398,60642,51500],{"class":408},[398,60644,60645,60647,60649,60651,60653],{"class":400,"line":1587},[398,60646,51534],{"class":408},[398,60648,51600],{"class":51493},[398,60650,51603],{"class":408},[398,60652,51600],{"class":51493},[398,60654,51500],{"class":408},[398,60656,60657,60659,60661],{"class":400,"line":1593},[398,60658,51534],{"class":408},[398,60660,5403],{"class":51493},[398,60662,51500],{"class":408},[398,60664,60665,60667],{"class":400,"line":1605},[398,60666,51620],{"class":51493},[398,60668,15849],{"class":408},[398,60670,60671,60673,60675,60677],{"class":400,"line":1888},[398,60672,51627],{"class":457},[398,60674,51630],{"class":408},[398,60676,593],{"class":457},[398,60678,1566],{"class":408},[398,60680,60681,60683,60685,60687],{"class":400,"line":1893},[398,60682,51639],{"class":457},[398,60684,51630],{"class":408},[398,60686,593],{"class":457},[398,60688,1566],{"class":408},[398,60690,60691,60694,60696,60699],{"class":400,"line":1899},[398,60692,60693],{"class":457},"            box-sizing",[398,60695,51630],{"class":408},[398,60697,60698],{"class":457},"border-box",[398,60700,1566],{"class":408},[398,60702,60703],{"class":400,"line":1904},[398,60704,2805],{"class":408},[398,60706,60707],{"class":400,"line":1918},[398,60708,2676],{"emptyLinePlaceholder":328},[398,60710,60711,60714],{"class":400,"line":1923},[398,60712,60713],{"class":51493},"        ul",[398,60715,15849],{"class":408},[398,60717,60718],{"class":400,"line":1929},[398,60719,2676],{"emptyLinePlaceholder":328},[398,60721,60722,60725,60727,60729],{"class":400,"line":1950},[398,60723,60724],{"class":457},"            list-style",[398,60726,51630],{"class":408},[398,60728,54930],{"class":457},[398,60730,1566],{"class":408},[398,60732,60733],{"class":400,"line":1955},[398,60734,2805],{"class":408},[398,60736,60737],{"class":400,"line":1969},[398,60738,2676],{"emptyLinePlaceholder":328},[398,60740,60741,60744],{"class":400,"line":1974},[398,60742,60743],{"class":2239},"        .mi",[398,60745,15849],{"class":408},[398,60747,60748,60751,60753,60755],{"class":400,"line":2003},[398,60749,60750],{"class":457},"            position",[398,60752,51630],{"class":408},[398,60754,54957],{"class":457},[398,60756,1566],{"class":408},[398,60758,60759,60761,60763,60766,60768],{"class":400,"line":2008},[398,60760,51677],{"class":457},[398,60762,51630],{"class":408},[398,60764,60765],{"class":457},"223",[398,60767,51685],{"class":404},[398,60769,1566],{"class":408},[398,60771,60772,60774,60776,60778,60780,60782],{"class":400,"line":2025},[398,60773,51627],{"class":457},[398,60775,51630],{"class":408},[398,60777,713],{"class":457},[398,60779,51685],{"class":404},[398,60781,51749],{"class":457},[398,60783,1566],{"class":408},[398,60785,60786],{"class":400,"line":2030},[398,60787,2805],{"class":408},[398,60789,60790],{"class":400,"line":2035},[398,60791,2676],{"emptyLinePlaceholder":328},[398,60793,60794,60796,60799],{"class":400,"line":2040},[398,60795,60743],{"class":2239},[398,60797,60798],{"class":51493}," input",[398,60800,15849],{"class":408},[398,60802,60803,60805,60807,60809,60811],{"class":400,"line":2054},[398,60804,51677],{"class":457},[398,60806,51630],{"class":408},[398,60808,60765],{"class":457},[398,60810,51685],{"class":404},[398,60812,1566],{"class":408},[398,60814,60815,60817,60819,60821,60823],{"class":400,"line":2059},[398,60816,51692],{"class":457},[398,60818,51630],{"class":408},[398,60820,1009],{"class":457},[398,60822,51685],{"class":404},[398,60824,1566],{"class":408},[398,60826,60827,60829,60831,60833,60835,60837],{"class":400,"line":2853},[398,60828,51639],{"class":457},[398,60830,51630],{"class":408},[398,60832,593],{"class":457},[398,60834,2314],{"class":457},[398,60836,51685],{"class":404},[398,60838,1566],{"class":408},[398,60840,60841,60844,60846,60848,60850],{"class":400,"line":2867},[398,60842,60843],{"class":457},"            font-size",[398,60845,51630],{"class":408},[398,60847,951],{"class":457},[398,60849,51685],{"class":404},[398,60851,1566],{"class":408},[398,60853,60854,60857,60859,60861,60863],{"class":400,"line":2875},[398,60855,60856],{"class":457},"            line-height",[398,60858,51630],{"class":408},[398,60860,1009],{"class":457},[398,60862,51685],{"class":404},[398,60864,1566],{"class":408},[398,60866,60867,60870,60872,60874,60876,60878,60881],{"class":400,"line":2880},[398,60868,60869],{"class":457},"            border",[398,60871,51630],{"class":408},[398,60873,619],{"class":457},[398,60875,51685],{"class":404},[398,60877,51714],{"class":457},[398,60879,60880],{"class":457}," #e0e0e0",[398,60882,1566],{"class":408},[398,60884,60885,60888,60890,60892],{"class":400,"line":2886},[398,60886,60887],{"class":457},"            outline",[398,60889,51630],{"class":408},[398,60891,54930],{"class":457},[398,60893,1566],{"class":408},[398,60895,60896],{"class":400,"line":2892},[398,60897,2805],{"class":408},[398,60899,60900],{"class":400,"line":2897},[398,60901,2676],{"emptyLinePlaceholder":328},[398,60903,60904,60906,60909],{"class":400,"line":8225},[398,60905,60743],{"class":2239},[398,60907,60908],{"class":2239}," .search",[398,60910,15849],{"class":408},[398,60912,60913,60915,60917,60919,60921,60923,60926],{"class":400,"line":8249},[398,60914,60869],{"class":457},[398,60916,51630],{"class":408},[398,60918,619],{"class":457},[398,60920,51685],{"class":404},[398,60922,51714],{"class":457},[398,60924,60925],{"class":457}," #ff6700",[398,60927,1566],{"class":408},[398,60929,60930],{"class":400,"line":8254},[398,60931,2805],{"class":408},[398,60933,60934],{"class":400,"line":8260},[398,60935,2676],{"emptyLinePlaceholder":328},[398,60937,60938,60941],{"class":400,"line":8287},[398,60939,60940],{"class":2239},"        .result-list",[398,60942,15849],{"class":408},[398,60944,60945,60947,60949,60951],{"class":400,"line":8292},[398,60946,51665],{"class":457},[398,60948,51630],{"class":408},[398,60950,54930],{"class":457},[398,60952,1566],{"class":408},[398,60954,60955,60957,60959,60961],{"class":400,"line":8298},[398,60956,60750],{"class":457},[398,60958,51630],{"class":408},[398,60960,55024],{"class":457},[398,60962,1566],{"class":408},[398,60964,60965,60968,60970,60972],{"class":400,"line":8310},[398,60966,60967],{"class":457},"            left",[398,60969,51630],{"class":408},[398,60971,593],{"class":457},[398,60973,1566],{"class":408},[398,60975,60976,60979,60981,60983,60985],{"class":400,"line":8322},[398,60977,60978],{"class":457},"            top",[398,60980,51630],{"class":408},[398,60982,1009],{"class":457},[398,60984,51685],{"class":404},[398,60986,1566],{"class":408},[398,60988,60989,60991,60993,60995,60997],{"class":400,"line":8334},[398,60990,51677],{"class":457},[398,60992,51630],{"class":408},[398,60994,60765],{"class":457},[398,60996,51685],{"class":404},[398,60998,1566],{"class":408},[398,61000,61001,61003,61005,61007,61009,61011,61013],{"class":400,"line":9993},[398,61002,60869],{"class":457},[398,61004,51630],{"class":408},[398,61006,619],{"class":457},[398,61008,51685],{"class":404},[398,61010,51714],{"class":457},[398,61012,60925],{"class":457},[398,61014,1566],{"class":408},[398,61016,61017,61020,61022,61024],{"class":400,"line":10018},[398,61018,61019],{"class":457},"            border-top",[398,61021,51630],{"class":408},[398,61023,593],{"class":457},[398,61025,1566],{"class":408},[398,61027,61028,61031,61033,61036],{"class":400,"line":10041},[398,61029,61030],{"class":457},"            background",[398,61032,51630],{"class":408},[398,61034,61035],{"class":457},"#fff",[398,61037,1566],{"class":408},[398,61039,61040],{"class":400,"line":10065},[398,61041,2805],{"class":408},[398,61043,61044],{"class":400,"line":10070},[398,61045,2676],{"emptyLinePlaceholder":328},[398,61047,61048,61050,61052],{"class":400,"line":10075},[398,61049,60940],{"class":2239},[398,61051,1674],{"class":51493},[398,61053,15849],{"class":408},[398,61055,61056,61058,61060,61063],{"class":400,"line":10080},[398,61057,51665],{"class":457},[398,61059,51630],{"class":408},[398,61061,61062],{"class":457},"block",[398,61064,1566],{"class":408},[398,61066,61067,61069,61071,61073,61075,61078,61080],{"class":400,"line":10089},[398,61068,51639],{"class":457},[398,61070,51630],{"class":408},[398,61072,746],{"class":457},[398,61074,51685],{"class":404},[398,61076,61077],{"class":457}," 15",[398,61079,51685],{"class":404},[398,61081,1566],{"class":408},[398,61083,61084,61086,61088,61090,61092],{"class":400,"line":10094},[398,61085,60843],{"class":457},[398,61087,51630],{"class":408},[398,61089,900],{"class":457},[398,61091,51685],{"class":404},[398,61093,1566],{"class":408},[398,61095,61096,61099,61101,61104],{"class":400,"line":10100},[398,61097,61098],{"class":457},"            color",[398,61100,51630],{"class":408},[398,61102,61103],{"class":457},"#424242",[398,61105,1566],{"class":408},[398,61107,61108,61111,61113,61115],{"class":400,"line":10121},[398,61109,61110],{"class":457},"            text-decoration",[398,61112,51630],{"class":408},[398,61114,54930],{"class":457},[398,61116,1566],{"class":408},[398,61118,61119],{"class":400,"line":10127},[398,61120,2805],{"class":408},[398,61122,61123],{"class":400,"line":10141},[398,61124,2676],{"emptyLinePlaceholder":328},[398,61126,61127,61129,61131,61134],{"class":400,"line":10147},[398,61128,60940],{"class":2239},[398,61130,1674],{"class":51493},[398,61132,61133],{"class":2239},":hover",[398,61135,15849],{"class":408},[398,61137,61138,61140,61142,61145],{"class":400,"line":10174},[398,61139,51833],{"class":457},[398,61141,51630],{"class":408},[398,61143,61144],{"class":457},"#eee",[398,61146,1566],{"class":408},[398,61148,61149],{"class":400,"line":10183},[398,61150,2805],{"class":408},[398,61152,61153,61155,61157],{"class":400,"line":10189},[398,61154,51969],{"class":408},[398,61156,5403],{"class":51493},[398,61158,51500],{"class":408},[398,61160,61161],{"class":400,"line":10197},[398,61162,2676],{"emptyLinePlaceholder":328},[398,61164,61165,61167,61169],{"class":400,"line":10202},[398,61166,51978],{"class":408},[398,61168,51527],{"class":51493},[398,61170,51500],{"class":408},[398,61172,61173],{"class":400,"line":16881},[398,61174,2676],{"emptyLinePlaceholder":328},[398,61176,61177,61179,61181],{"class":400,"line":16887},[398,61178,1312],{"class":408},[398,61180,51993],{"class":51493},[398,61182,51500],{"class":408},[398,61184,61185,61187,61189,61191,61193,61196],{"class":400,"line":16910},[398,61186,51534],{"class":408},[398,61188,51804],{"class":51493},[398,61190,53679],{"class":2239},[398,61192,454],{"class":408},[398,61194,61195],{"class":513},"\"mi\"",[398,61197,51500],{"class":408},[398,61199,61200,61202,61204,61206,61208,61211,61214,61216,61219],{"class":400,"line":16916},[398,61201,55495],{"class":408},[398,61203,54014],{"class":51493},[398,61205,54017],{"class":2239},[398,61207,454],{"class":408},[398,61209,61210],{"class":513},"\"search\"",[398,61212,61213],{"class":2239}," placeholder",[398,61215,454],{"class":408},[398,61217,61218],{"class":513},"\"小米笔记本\"",[398,61220,51500],{"class":408},[398,61222,61223,61225,61227,61229,61231,61234],{"class":400,"line":16939},[398,61224,55495],{"class":408},[398,61226,67],{"class":51493},[398,61228,53679],{"class":2239},[398,61230,454],{"class":408},[398,61232,61233],{"class":513},"\"result-list\"",[398,61235,51500],{"class":408},[398,61237,61238,61241,61243,61246,61248,61251,61253,61256,61259,61261,61263,61265],{"class":400,"line":16953},[398,61239,61240],{"class":408},"            \u003C",[398,61242,41],{"class":51493},[398,61244,61245],{"class":408},">\u003C",[398,61247,640],{"class":51493},[398,61249,61250],{"class":2239}," href",[398,61252,454],{"class":408},[398,61254,61255],{"class":513},"\"#\"",[398,61257,61258],{"class":408},">全部商品\u003C\u002F",[398,61260,640],{"class":51493},[398,61262,55507],{"class":408},[398,61264,41],{"class":51493},[398,61266,51500],{"class":408},[398,61268,61269,61271,61273,61275,61277,61279,61281,61283,61286,61288,61290,61292],{"class":400,"line":16973},[398,61270,61240],{"class":408},[398,61272,41],{"class":51493},[398,61274,61245],{"class":408},[398,61276,640],{"class":51493},[398,61278,61250],{"class":2239},[398,61280,454],{"class":408},[398,61282,61255],{"class":513},[398,61284,61285],{"class":408},">小米11\u003C\u002F",[398,61287,640],{"class":51493},[398,61289,55507],{"class":408},[398,61291,41],{"class":51493},[398,61293,51500],{"class":408},[398,61295,61296,61298,61300,61302,61304,61306,61308,61310,61313,61315,61317,61319],{"class":400,"line":16979},[398,61297,61240],{"class":408},[398,61299,41],{"class":51493},[398,61301,61245],{"class":408},[398,61303,640],{"class":51493},[398,61305,61250],{"class":2239},[398,61307,454],{"class":408},[398,61309,61255],{"class":513},[398,61311,61312],{"class":408},">小米10S\u003C\u002F",[398,61314,640],{"class":51493},[398,61316,55507],{"class":408},[398,61318,41],{"class":51493},[398,61320,51500],{"class":408},[398,61322,61323,61325,61327,61329,61331,61333,61335,61337,61340,61342,61344,61346],{"class":400,"line":16990},[398,61324,61240],{"class":408},[398,61326,41],{"class":51493},[398,61328,61245],{"class":408},[398,61330,640],{"class":51493},[398,61332,61250],{"class":2239},[398,61334,454],{"class":408},[398,61336,61255],{"class":513},[398,61338,61339],{"class":408},">小米笔记本\u003C\u002F",[398,61341,640],{"class":51493},[398,61343,55507],{"class":408},[398,61345,41],{"class":51493},[398,61347,51500],{"class":408},[398,61349,61350,61352,61354,61356,61358,61360,61362,61364,61367,61369,61371,61373],{"class":400,"line":17013},[398,61351,61240],{"class":408},[398,61353,41],{"class":51493},[398,61355,61245],{"class":408},[398,61357,640],{"class":51493},[398,61359,61250],{"class":2239},[398,61361,454],{"class":408},[398,61363,61255],{"class":513},[398,61365,61366],{"class":408},">小米手机\u003C\u002F",[398,61368,640],{"class":51493},[398,61370,55507],{"class":408},[398,61372,41],{"class":51493},[398,61374,51500],{"class":408},[398,61376,61377,61379,61381,61383,61385,61387,61389,61391,61394,61396,61398,61400],{"class":400,"line":17035},[398,61378,61240],{"class":408},[398,61380,41],{"class":51493},[398,61382,61245],{"class":408},[398,61384,640],{"class":51493},[398,61386,61250],{"class":2239},[398,61388,454],{"class":408},[398,61390,61255],{"class":513},[398,61392,61393],{"class":408},">黑鲨4\u003C\u002F",[398,61395,640],{"class":51493},[398,61397,55507],{"class":408},[398,61399,41],{"class":51493},[398,61401,51500],{"class":408},[398,61403,61404,61406,61408,61410,61412,61414,61416,61418,61421,61423,61425,61427],{"class":400,"line":17040},[398,61405,61240],{"class":408},[398,61407,41],{"class":51493},[398,61409,61245],{"class":408},[398,61411,640],{"class":51493},[398,61413,61250],{"class":2239},[398,61415,454],{"class":408},[398,61417,61255],{"class":513},[398,61419,61420],{"class":408},">空调\u003C\u002F",[398,61422,640],{"class":51493},[398,61424,55507],{"class":408},[398,61426,41],{"class":51493},[398,61428,51500],{"class":408},[398,61430,61431,61434,61436],{"class":400,"line":17046},[398,61432,61433],{"class":408},"        \u003C\u002F",[398,61435,67],{"class":51493},[398,61437,51500],{"class":408},[398,61439,61440,61442,61444],{"class":400,"line":17060},[398,61441,51969],{"class":408},[398,61443,51804],{"class":51493},[398,61445,51500],{"class":408},[398,61447,61448,61450,61452],{"class":400,"line":17073},[398,61449,51534],{"class":408},[398,61451,52006],{"class":51493},[398,61453,51500],{"class":408},[398,61455,61456],{"class":400,"line":17078},[398,61457,61458],{"class":467},"        \u002F\u002F 1. 获取元素\n",[398,61460,61461,61464,61466,61468,61470,61472,61474,61477],{"class":400,"line":17092},[398,61462,61463],{"class":404},"        const",[398,61465,60798],{"class":457},[398,61467,13841],{"class":404},[398,61469,54589],{"class":408},[398,61471,54592],{"class":2239},[398,61473,409],{"class":408},[398,61475,61476],{"class":513},"'[type=search]'",[398,61478,415],{"class":408},[398,61480,61481,61483,61486,61488,61490,61492,61494,61497],{"class":400,"line":17097},[398,61482,61463],{"class":404},[398,61484,61485],{"class":457}," ul",[398,61487,13841],{"class":404},[398,61489,54589],{"class":408},[398,61491,54592],{"class":2239},[398,61493,409],{"class":408},[398,61495,61496],{"class":513},"'.result-list'",[398,61498,415],{"class":408},[398,61500,61501],{"class":400,"line":17103},[398,61502,61503],{"class":467},"        \u002F\u002F console.log(input)\n",[398,61505,61506],{"class":400,"line":17108},[398,61507,61508],{"class":467},"        \u002F\u002F 2. 监听事件 获得焦点\n",[398,61510,61511,61514,61516,61518,61521,61523,61525],{"class":400,"line":17122},[398,61512,61513],{"class":408},"        input.",[398,61515,58006],{"class":2239},[398,61517,409],{"class":408},[398,61519,61520],{"class":513},"'focus'",[398,61522,12712],{"class":408},[398,61524,54642],{"class":404},[398,61526,54645],{"class":408},[398,61528,61529],{"class":400,"line":17127},[398,61530,61531],{"class":467},"            \u002F\u002F ul显示\n",[398,61533,61534,61537,61539],{"class":400,"line":17132},[398,61535,61536],{"class":408},"            ul.style.display ",[398,61538,454],{"class":404},[398,61540,61541],{"class":513}," 'block'\n",[398,61543,61544],{"class":400,"line":17146},[398,61545,61546],{"class":467},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[398,61548,61549,61552,61554,61556,61559],{"class":400,"line":17158},[398,61550,61551],{"class":408},"            input.classList.",[398,61553,5611],{"class":2239},[398,61555,409],{"class":408},[398,61557,61558],{"class":513},"'search'",[398,61560,415],{"class":408},[398,61562,61563],{"class":400,"line":17163},[398,61564,61565],{"class":408},"        })\n",[398,61567,61568],{"class":400,"line":17176},[398,61569,61570],{"class":467},"        \u002F\u002F 3. 监听事件 失去焦点\n",[398,61572,61573,61575,61577,61579,61582,61584,61586],{"class":400,"line":17181},[398,61574,61513],{"class":408},[398,61576,58006],{"class":2239},[398,61578,409],{"class":408},[398,61580,61581],{"class":513},"'blur'",[398,61583,12712],{"class":408},[398,61585,54642],{"class":404},[398,61587,54645],{"class":408},[398,61589,61590,61592,61594],{"class":400,"line":17186},[398,61591,61536],{"class":408},[398,61593,454],{"class":404},[398,61595,61596],{"class":513}," 'none'\n",[398,61598,61599,61601,61603,61605,61607],{"class":400,"line":17191},[398,61600,61551],{"class":408},[398,61602,57199],{"class":2239},[398,61604,409],{"class":408},[398,61606,61558],{"class":513},[398,61608,415],{"class":408},[398,61610,61611],{"class":400,"line":17204},[398,61612,61565],{"class":408},[398,61614,61615,61617,61619],{"class":400,"line":17209},[398,61616,51969],{"class":408},[398,61618,52006],{"class":51493},[398,61620,51500],{"class":408},[398,61622,61623,61625,61627],{"class":400,"line":32826},[398,61624,51978],{"class":408},[398,61626,51993],{"class":51493},[398,61628,51500],{"class":408},[398,61630,61631],{"class":400,"line":32832},[398,61632,2676],{"emptyLinePlaceholder":328},[398,61634,61635,61637,61639],{"class":400,"line":32838},[398,61636,51978],{"class":408},[398,61638,50828],{"class":51493},[398,61640,51500],{"class":408},[22275,61642,61644],{"id":61643},"_3253-键盘事件","3.2.5.3 键盘事件",[19,61646,61647],{},"评论字数统计案例",[19,61649,61650],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,61652,61653],{},"牢记focus伪类选择器",[51537,61655],{"charSet":61656},"UTF-8",[51537,61658],{"name":61659,"content":61660},"viewport","width=device-width, initial-scale=1.0",[51600,61662,61663],{},"Document",[5403,61665,61666],{},"\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",[54014,61668],{"type":5464},[67,61670,61671,61674],{},[41,61672,61673],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[41,61675,61676],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[389,61678,61680],{"className":50826,"code":61679,"language":50828,"meta":316,"style":316},"\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",[395,61681,61682,61692,61706,61710,61718,61732,61752,61772,61785,61793,61800,61813,61827,61837,61847,61851,61855,61862,61874,61886,61898,61910,61939,61952,61956,61960,61969,61980,61992,62003,62014,62026,62037,62049,62065,62077,62081,62085,62096,62107,62117,62129,62133,62137,62145,62156,62166,62177,62189,62202,62214,62226,62230,62234,62243,62255,62266,62279,62290,62304,62308,62312,62319,62331,62343,62353,62357,62361,62370,62382,62392,62396,62400,62411,62421,62440,62453,62457,62461,62471,62481,62485,62489,62500,62511,62523,62535,62539,62543,62554,62565,62579,62583,62587,62598,62608,62620,62624,62632,62640,62644,62652,62667,62686,62726,62739,62747,62761,62781,62789,62804,62827,62845,62860,62880,62900,62920,62928,62936,62944,62952,62972,62992,62997,63014,63023,63027,63032,63048,63056,63060,63065,63082,63087,63112,63116,63120,63125,63130,63138,63146,63150],{"__ignoreMap":316},[398,61683,61684,61686,61688,61690],{"class":400,"line":401},[398,61685,51490],{"class":408},[398,61687,51494],{"class":51493},[398,61689,51497],{"class":2239},[398,61691,51500],{"class":408},[398,61693,61694,61696,61698,61700,61702,61704],{"class":400,"line":317},[398,61695,1312],{"class":408},[398,61697,50828],{"class":51493},[398,61699,51509],{"class":2239},[398,61701,454],{"class":408},[398,61703,51514],{"class":513},[398,61705,51500],{"class":408},[398,61707,61708],{"class":400,"line":320},[398,61709,2676],{"emptyLinePlaceholder":328},[398,61711,61712,61714,61716],{"class":400,"line":1470},[398,61713,1312],{"class":408},[398,61715,51527],{"class":51493},[398,61717,51500],{"class":408},[398,61719,61720,61722,61724,61726,61728,61730],{"class":400,"line":1476},[398,61721,52337],{"class":408},[398,61723,51537],{"class":51493},[398,61725,51540],{"class":2239},[398,61727,454],{"class":408},[398,61729,51545],{"class":513},[398,61731,51500],{"class":408},[398,61733,61734,61736,61738,61740,61742,61744,61746,61748,61750],{"class":400,"line":1490},[398,61735,52337],{"class":408},[398,61737,51537],{"class":51493},[398,61739,51556],{"class":2239},[398,61741,454],{"class":408},[398,61743,51561],{"class":513},[398,61745,51564],{"class":2239},[398,61747,454],{"class":408},[398,61749,51569],{"class":513},[398,61751,51500],{"class":408},[398,61753,61754,61756,61758,61760,61762,61764,61766,61768,61770],{"class":400,"line":1496},[398,61755,52337],{"class":408},[398,61757,51537],{"class":51493},[398,61759,15197],{"class":2239},[398,61761,454],{"class":408},[398,61763,51584],{"class":513},[398,61765,51564],{"class":2239},[398,61767,454],{"class":408},[398,61769,51591],{"class":513},[398,61771,51500],{"class":408},[398,61773,61774,61776,61778,61781,61783],{"class":400,"line":1587},[398,61775,52337],{"class":408},[398,61777,51600],{"class":51493},[398,61779,61780],{"class":408},">评论回车发布\u003C\u002F",[398,61782,51600],{"class":51493},[398,61784,51500],{"class":408},[398,61786,61787,61789,61791],{"class":400,"line":1593},[398,61788,52337],{"class":408},[398,61790,5403],{"class":51493},[398,61792,51500],{"class":408},[398,61794,61795,61798],{"class":400,"line":1605},[398,61796,61797],{"class":2239},"    .wrapper",[398,61799,15849],{"class":408},[398,61801,61802,61805,61807,61809,61811],{"class":400,"line":1888},[398,61803,61804],{"class":457},"      min-width",[398,61806,51630],{"class":408},[398,61808,4263],{"class":457},[398,61810,51685],{"class":404},[398,61812,1566],{"class":408},[398,61814,61815,61818,61820,61823,61825],{"class":400,"line":1893},[398,61816,61817],{"class":457},"      max-width",[398,61819,51630],{"class":408},[398,61821,61822],{"class":457},"800",[398,61824,51685],{"class":404},[398,61826,1566],{"class":408},[398,61828,61829,61831,61833,61835],{"class":400,"line":1899},[398,61830,55202],{"class":457},[398,61832,51630],{"class":408},[398,61834,51670],{"class":457},[398,61836,1566],{"class":408},[398,61838,61839,61841,61843,61845],{"class":400,"line":1904},[398,61840,55213],{"class":457},[398,61842,51630],{"class":408},[398,61844,51773],{"class":457},[398,61846,1566],{"class":408},[398,61848,61849],{"class":400,"line":1918},[398,61850,2463],{"class":408},[398,61852,61853],{"class":400,"line":1923},[398,61854,2676],{"emptyLinePlaceholder":328},[398,61856,61857,61860],{"class":400,"line":1929},[398,61858,61859],{"class":2239},"    .avatar",[398,61861,15849],{"class":408},[398,61863,61864,61866,61868,61870,61872],{"class":400,"line":1950},[398,61865,54964],{"class":457},[398,61867,51630],{"class":408},[398,61869,1009],{"class":457},[398,61871,51685],{"class":404},[398,61873,1566],{"class":408},[398,61875,61876,61878,61880,61882,61884],{"class":400,"line":1955},[398,61877,54978],{"class":457},[398,61879,51630],{"class":408},[398,61881,1009],{"class":457},[398,61883,51685],{"class":404},[398,61885,1566],{"class":408},[398,61887,61888,61890,61892,61894,61896],{"class":400,"line":1969},[398,61889,55327],{"class":457},[398,61891,51630],{"class":408},[398,61893,1058],{"class":457},[398,61895,730],{"class":404},[398,61897,1566],{"class":408},[398,61899,61900,61903,61905,61908],{"class":400,"line":1974},[398,61901,61902],{"class":457},"      overflow",[398,61904,51630],{"class":408},[398,61906,61907],{"class":457},"hidden",[398,61909,1566],{"class":408},[398,61911,61912,61915,61917,61920,61922,61925,61927,61930,61932,61934,61937],{"class":400,"line":2003},[398,61913,61914],{"class":457},"      background",[398,61916,51630],{"class":408},[398,61918,61919],{"class":457},"url",[398,61921,409],{"class":408},[398,61923,61924],{"class":5493},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[398,61926,13991],{"class":408},[398,61928,61929],{"class":457},"no-repeat",[398,61931,17421],{"class":457},[398,61933,25256],{"class":408},[398,61935,61936],{"class":457},"cover",[398,61938,1566],{"class":408},[398,61940,61941,61944,61946,61948,61950],{"class":400,"line":2008},[398,61942,61943],{"class":457},"      margin-right",[398,61945,51630],{"class":408},[398,61947,1102],{"class":457},[398,61949,51685],{"class":404},[398,61951,1566],{"class":408},[398,61953,61954],{"class":400,"line":2025},[398,61955,2463],{"class":408},[398,61957,61958],{"class":400,"line":2030},[398,61959,2676],{"emptyLinePlaceholder":328},[398,61961,61962,61964,61967],{"class":400,"line":2035},[398,61963,61797],{"class":2239},[398,61965,61966],{"class":51493}," textarea",[398,61968,15849],{"class":408},[398,61970,61971,61974,61976,61978],{"class":400,"line":2040},[398,61972,61973],{"class":457},"      outline",[398,61975,51630],{"class":408},[398,61977,54930],{"class":457},[398,61979,1566],{"class":408},[398,61981,61982,61985,61987,61990],{"class":400,"line":2054},[398,61983,61984],{"class":457},"      border-color",[398,61986,51630],{"class":408},[398,61988,61989],{"class":457},"transparent",[398,61991,1566],{"class":408},[398,61993,61994,61997,61999,62001],{"class":400,"line":2059},[398,61995,61996],{"class":457},"      resize",[398,61998,51630],{"class":408},[398,62000,54930],{"class":457},[398,62002,1566],{"class":408},[398,62004,62005,62007,62009,62012],{"class":400,"line":2853},[398,62006,61914],{"class":457},[398,62008,51630],{"class":408},[398,62010,62011],{"class":457},"#f5f5f5",[398,62013,1566],{"class":408},[398,62015,62016,62018,62020,62022,62024],{"class":400,"line":2867},[398,62017,55327],{"class":457},[398,62019,51630],{"class":408},[398,62021,695],{"class":457},[398,62023,51685],{"class":404},[398,62025,1566],{"class":408},[398,62027,62028,62031,62033,62035],{"class":400,"line":2875},[398,62029,62030],{"class":457},"      flex",[398,62032,51630],{"class":408},[398,62034,619],{"class":457},[398,62036,1566],{"class":408},[398,62038,62039,62041,62043,62045,62047],{"class":400,"line":2880},[398,62040,54888],{"class":457},[398,62042,51630],{"class":408},[398,62044,848],{"class":457},[398,62046,51685],{"class":404},[398,62048,1566],{"class":408},[398,62050,62051,62054,62056,62058,62061,62063],{"class":400,"line":2886},[398,62052,62053],{"class":457},"      transition",[398,62055,51630],{"class":408},[398,62057,28314],{"class":457},[398,62059,62060],{"class":457}," 0.5",[398,62062,1097],{"class":404},[398,62064,1566],{"class":408},[398,62066,62067,62069,62071,62073,62075],{"class":400,"line":2892},[398,62068,54978],{"class":457},[398,62070,51630],{"class":408},[398,62072,1353],{"class":457},[398,62074,51685],{"class":404},[398,62076,1566],{"class":408},[398,62078,62079],{"class":400,"line":2897},[398,62080,2463],{"class":408},[398,62082,62083],{"class":400,"line":8225},[398,62084,2676],{"emptyLinePlaceholder":328},[398,62086,62087,62089,62091,62094],{"class":400,"line":8249},[398,62088,61797],{"class":2239},[398,62090,61966],{"class":51493},[398,62092,62093],{"class":2239},":focus",[398,62095,15849],{"class":408},[398,62097,62098,62100,62102,62105],{"class":400,"line":8254},[398,62099,61984],{"class":457},[398,62101,51630],{"class":408},[398,62103,62104],{"class":457},"#e4e4e4",[398,62106,1566],{"class":408},[398,62108,62109,62111,62113,62115],{"class":400,"line":8260},[398,62110,61914],{"class":457},[398,62112,51630],{"class":408},[398,62114,61035],{"class":457},[398,62116,1566],{"class":408},[398,62118,62119,62121,62123,62125,62127],{"class":400,"line":8287},[398,62120,54978],{"class":457},[398,62122,51630],{"class":408},[398,62124,1058],{"class":457},[398,62126,51685],{"class":404},[398,62128,1566],{"class":408},[398,62130,62131],{"class":400,"line":8292},[398,62132,2463],{"class":408},[398,62134,62135],{"class":400,"line":8298},[398,62136,2676],{"emptyLinePlaceholder":328},[398,62138,62139,62141,62143],{"class":400,"line":8310},[398,62140,61797],{"class":2239},[398,62142,57660],{"class":51493},[398,62144,15849],{"class":408},[398,62146,62147,62149,62151,62154],{"class":400,"line":8322},[398,62148,61914],{"class":457},[398,62150,51630],{"class":408},[398,62152,62153],{"class":457},"#00aeec",[398,62155,1566],{"class":408},[398,62157,62158,62160,62162,62164],{"class":400,"line":8334},[398,62159,57609],{"class":457},[398,62161,51630],{"class":408},[398,62163,61035],{"class":457},[398,62165,1566],{"class":408},[398,62167,62168,62171,62173,62175],{"class":400,"line":9993},[398,62169,62170],{"class":457},"      border",[398,62172,51630],{"class":408},[398,62174,54930],{"class":457},[398,62176,1566],{"class":408},[398,62178,62179,62181,62183,62185,62187],{"class":400,"line":10018},[398,62180,55327],{"class":457},[398,62182,51630],{"class":408},[398,62184,695],{"class":457},[398,62186,51685],{"class":404},[398,62188,1566],{"class":408},[398,62190,62191,62194,62196,62198,62200],{"class":400,"line":10041},[398,62192,62193],{"class":457},"      margin-left",[398,62195,51630],{"class":408},[398,62197,848],{"class":457},[398,62199,51685],{"class":404},[398,62201,1566],{"class":408},[398,62203,62204,62206,62208,62210,62212],{"class":400,"line":10065},[398,62205,54964],{"class":457},[398,62207,51630],{"class":408},[398,62209,758],{"class":457},[398,62211,51685],{"class":404},[398,62213,1566],{"class":408},[398,62215,62216,62219,62221,62224],{"class":400,"line":10070},[398,62217,62218],{"class":457},"      cursor",[398,62220,51630],{"class":408},[398,62222,62223],{"class":457},"pointer",[398,62225,1566],{"class":408},[398,62227,62228],{"class":400,"line":10075},[398,62229,2463],{"class":408},[398,62231,62232],{"class":400,"line":10080},[398,62233,2676],{"emptyLinePlaceholder":328},[398,62235,62236,62238,62241],{"class":400,"line":10089},[398,62237,61797],{"class":2239},[398,62239,62240],{"class":2239}," .total",[398,62242,15849],{"class":408},[398,62244,62245,62247,62249,62251,62253],{"class":400,"line":10094},[398,62246,61943],{"class":457},[398,62248,51630],{"class":408},[398,62250,1014],{"class":457},[398,62252,51685],{"class":404},[398,62254,1566],{"class":408},[398,62256,62257,62259,62261,62264],{"class":400,"line":10100},[398,62258,57609],{"class":457},[398,62260,51630],{"class":408},[398,62262,62263],{"class":457},"#999",[398,62265,1566],{"class":408},[398,62267,62268,62271,62273,62275,62277],{"class":400,"line":10121},[398,62269,62270],{"class":457},"      margin-top",[398,62272,51630],{"class":408},[398,62274,721],{"class":457},[398,62276,51685],{"class":404},[398,62278,1566],{"class":408},[398,62280,62281,62284,62286,62288],{"class":400,"line":10127},[398,62282,62283],{"class":457},"      opacity",[398,62285,51630],{"class":408},[398,62287,593],{"class":457},[398,62289,1566],{"class":408},[398,62291,62292,62294,62296,62298,62300,62302],{"class":400,"line":10141},[398,62293,62053],{"class":457},[398,62295,51630],{"class":408},[398,62297,28314],{"class":457},[398,62299,62060],{"class":457},[398,62301,1097],{"class":404},[398,62303,1566],{"class":408},[398,62305,62306],{"class":400,"line":10147},[398,62307,2463],{"class":408},[398,62309,62310],{"class":400,"line":10174},[398,62311,2676],{"emptyLinePlaceholder":328},[398,62313,62314,62317],{"class":400,"line":10183},[398,62315,62316],{"class":2239},"    .list",[398,62318,15849],{"class":408},[398,62320,62321,62323,62325,62327,62329],{"class":400,"line":10189},[398,62322,61804],{"class":457},[398,62324,51630],{"class":408},[398,62326,4263],{"class":457},[398,62328,51685],{"class":404},[398,62330,1566],{"class":408},[398,62332,62333,62335,62337,62339,62341],{"class":400,"line":10197},[398,62334,61817],{"class":457},[398,62336,51630],{"class":408},[398,62338,61822],{"class":457},[398,62340,51685],{"class":404},[398,62342,1566],{"class":408},[398,62344,62345,62347,62349,62351],{"class":400,"line":10202},[398,62346,55202],{"class":457},[398,62348,51630],{"class":408},[398,62350,51670],{"class":457},[398,62352,1566],{"class":408},[398,62354,62355],{"class":400,"line":16881},[398,62356,2463],{"class":408},[398,62358,62359],{"class":400,"line":16887},[398,62360,2676],{"emptyLinePlaceholder":328},[398,62362,62363,62365,62368],{"class":400,"line":16910},[398,62364,62316],{"class":2239},[398,62366,62367],{"class":2239}," .item",[398,62369,15849],{"class":408},[398,62371,62372,62374,62376,62378,62380],{"class":400,"line":16916},[398,62373,54964],{"class":457},[398,62375,51630],{"class":408},[398,62377,713],{"class":457},[398,62379,730],{"class":404},[398,62381,1566],{"class":408},[398,62383,62384,62386,62388,62390],{"class":400,"line":16939},[398,62385,55202],{"class":457},[398,62387,51630],{"class":408},[398,62389,51670],{"class":457},[398,62391,1566],{"class":408},[398,62393,62394],{"class":400,"line":16953},[398,62395,2463],{"class":408},[398,62397,62398],{"class":400,"line":16973},[398,62399,2676],{"emptyLinePlaceholder":328},[398,62401,62402,62404,62406,62409],{"class":400,"line":16979},[398,62403,62316],{"class":2239},[398,62405,62367],{"class":2239},[398,62407,62408],{"class":2239}," .info",[398,62410,15849],{"class":408},[398,62412,62413,62415,62417,62419],{"class":400,"line":16990},[398,62414,62030],{"class":457},[398,62416,51630],{"class":408},[398,62418,619],{"class":457},[398,62420,1566],{"class":408},[398,62422,62423,62426,62428,62430,62432,62435,62438],{"class":400,"line":17013},[398,62424,62425],{"class":457},"      border-bottom",[398,62427,51630],{"class":408},[398,62429,619],{"class":457},[398,62431,51685],{"class":404},[398,62433,62434],{"class":457}," dashed",[398,62436,62437],{"class":457}," #e4e4e4",[398,62439,1566],{"class":408},[398,62441,62442,62445,62447,62449,62451],{"class":400,"line":17035},[398,62443,62444],{"class":457},"      padding-bottom",[398,62446,51630],{"class":408},[398,62448,848],{"class":457},[398,62450,51685],{"class":404},[398,62452,1566],{"class":408},[398,62454,62455],{"class":400,"line":17040},[398,62456,2463],{"class":408},[398,62458,62459],{"class":400,"line":17046},[398,62460,2676],{"emptyLinePlaceholder":328},[398,62462,62463,62465,62467,62469],{"class":400,"line":17060},[398,62464,62316],{"class":2239},[398,62466,62367],{"class":2239},[398,62468,7102],{"class":51493},[398,62470,15849],{"class":408},[398,62472,62473,62475,62477,62479],{"class":400,"line":17073},[398,62474,54899],{"class":457},[398,62476,51630],{"class":408},[398,62478,593],{"class":457},[398,62480,1566],{"class":408},[398,62482,62483],{"class":400,"line":17078},[398,62484,2463],{"class":408},[398,62486,62487],{"class":400,"line":17092},[398,62488,2676],{"emptyLinePlaceholder":328},[398,62490,62491,62493,62495,62498],{"class":400,"line":17097},[398,62492,62316],{"class":2239},[398,62494,62367],{"class":2239},[398,62496,62497],{"class":2239}," .name",[398,62499,15849],{"class":408},[398,62501,62502,62504,62506,62509],{"class":400,"line":17103},[398,62503,57609],{"class":457},[398,62505,51630],{"class":408},[398,62507,62508],{"class":457},"#FB7299",[398,62510,1566],{"class":408},[398,62512,62513,62515,62517,62519,62521],{"class":400,"line":17108},[398,62514,55115],{"class":457},[398,62516,51630],{"class":408},[398,62518,951],{"class":457},[398,62520,51685],{"class":404},[398,62522,1566],{"class":408},[398,62524,62525,62528,62530,62533],{"class":400,"line":17122},[398,62526,62527],{"class":457},"      font-weight",[398,62529,51630],{"class":408},[398,62531,62532],{"class":457},"bold",[398,62534,1566],{"class":408},[398,62536,62537],{"class":400,"line":17127},[398,62538,2463],{"class":408},[398,62540,62541],{"class":400,"line":17132},[398,62542,2676],{"emptyLinePlaceholder":328},[398,62544,62545,62547,62549,62552],{"class":400,"line":17146},[398,62546,62316],{"class":2239},[398,62548,62367],{"class":2239},[398,62550,62551],{"class":2239}," .text",[398,62553,15849],{"class":408},[398,62555,62556,62558,62560,62563],{"class":400,"line":17158},[398,62557,57609],{"class":457},[398,62559,51630],{"class":408},[398,62561,62562],{"class":457},"#333",[398,62564,1566],{"class":408},[398,62566,62567,62569,62571,62573,62575,62577],{"class":400,"line":17163},[398,62568,54888],{"class":457},[398,62570,51630],{"class":408},[398,62572,848],{"class":457},[398,62574,51685],{"class":404},[398,62576,4369],{"class":457},[398,62578,1566],{"class":408},[398,62580,62581],{"class":400,"line":17176},[398,62582,2463],{"class":408},[398,62584,62585],{"class":400,"line":17181},[398,62586,2676],{"emptyLinePlaceholder":328},[398,62588,62589,62591,62593,62596],{"class":400,"line":17186},[398,62590,62316],{"class":2239},[398,62592,62367],{"class":2239},[398,62594,62595],{"class":2239}," .time",[398,62597,15849],{"class":408},[398,62599,62600,62602,62604,62606],{"class":400,"line":17191},[398,62601,57609],{"class":457},[398,62603,51630],{"class":408},[398,62605,62263],{"class":457},[398,62607,1566],{"class":408},[398,62609,62610,62612,62614,62616,62618],{"class":400,"line":17204},[398,62611,55115],{"class":457},[398,62613,51630],{"class":408},[398,62615,900],{"class":457},[398,62617,51685],{"class":404},[398,62619,1566],{"class":408},[398,62621,62622],{"class":400,"line":17209},[398,62623,2463],{"class":408},[398,62625,62626,62628,62630],{"class":400,"line":32826},[398,62627,52610],{"class":408},[398,62629,5403],{"class":51493},[398,62631,51500],{"class":408},[398,62633,62634,62636,62638],{"class":400,"line":32832},[398,62635,51978],{"class":408},[398,62637,51527],{"class":51493},[398,62639,51500],{"class":408},[398,62641,62642],{"class":400,"line":32838},[398,62643,2676],{"emptyLinePlaceholder":328},[398,62645,62646,62648,62650],{"class":400,"line":32844},[398,62647,1312],{"class":408},[398,62649,51993],{"class":51493},[398,62651,51500],{"class":408},[398,62653,62654,62656,62658,62660,62662,62665],{"class":400,"line":32850},[398,62655,52337],{"class":408},[398,62657,51804],{"class":51493},[398,62659,53679],{"class":2239},[398,62661,454],{"class":408},[398,62663,62664],{"class":513},"\"wrapper\"",[398,62666,51500],{"class":408},[398,62668,62669,62671,62673,62675,62677,62680,62682,62684],{"class":400,"line":32861},[398,62670,51534],{"class":408},[398,62672,843],{"class":51493},[398,62674,53679],{"class":2239},[398,62676,454],{"class":408},[398,62678,62679],{"class":513},"\"avatar\"",[398,62681,55507],{"class":408},[398,62683,843],{"class":51493},[398,62685,51500],{"class":408},[398,62687,62688,62690,62692,62694,62696,62699,62701,62703,62706,62708,62710,62712,62715,62717,62720,62722,62724],{"class":400,"line":32867},[398,62689,51534],{"class":408},[398,62691,54481],{"class":51493},[398,62693,15236],{"class":2239},[398,62695,454],{"class":408},[398,62697,62698],{"class":513},"\"tx\"",[398,62700,61213],{"class":2239},[398,62702,454],{"class":408},[398,62704,62705],{"class":513},"\"发一条友善的评论\"",[398,62707,54504],{"class":2239},[398,62709,454],{"class":408},[398,62711,3977],{"class":513},[398,62713,62714],{"class":2239}," maxlength",[398,62716,454],{"class":408},[398,62718,62719],{"class":513},"\"200\"",[398,62721,55507],{"class":408},[398,62723,54481],{"class":51493},[398,62725,51500],{"class":408},[398,62727,62728,62730,62732,62735,62737],{"class":400,"line":32887},[398,62729,51534],{"class":408},[398,62731,54080],{"class":51493},[398,62733,62734],{"class":408},">发布\u003C\u002F",[398,62736,54080],{"class":51493},[398,62738,51500],{"class":408},[398,62740,62741,62743,62745],{"class":400,"line":32893},[398,62742,52610],{"class":408},[398,62744,51804],{"class":51493},[398,62746,51500],{"class":408},[398,62748,62749,62751,62753,62755,62757,62759],{"class":400,"line":32904},[398,62750,52337],{"class":408},[398,62752,51804],{"class":51493},[398,62754,53679],{"class":2239},[398,62756,454],{"class":408},[398,62758,62664],{"class":513},[398,62760,51500],{"class":408},[398,62762,62763,62765,62767,62769,62771,62774,62777,62779],{"class":400,"line":32910},[398,62764,51534],{"class":408},[398,62766,398],{"class":51493},[398,62768,53679],{"class":2239},[398,62770,454],{"class":408},[398,62772,62773],{"class":513},"\"total\"",[398,62775,62776],{"class":408},">0\u002F200字\u003C\u002F",[398,62778,398],{"class":51493},[398,62780,51500],{"class":408},[398,62782,62783,62785,62787],{"class":400,"line":32916},[398,62784,52610],{"class":408},[398,62786,51804],{"class":51493},[398,62788,51500],{"class":408},[398,62790,62791,62793,62795,62797,62799,62802],{"class":400,"line":32922},[398,62792,52337],{"class":408},[398,62794,51804],{"class":51493},[398,62796,53679],{"class":2239},[398,62798,454],{"class":408},[398,62800,62801],{"class":513},"\"list\"",[398,62803,51500],{"class":408},[398,62805,62806,62808,62810,62812,62814,62817,62820,62822,62825],{"class":400,"line":32928},[398,62807,51534],{"class":408},[398,62809,51804],{"class":51493},[398,62811,53679],{"class":2239},[398,62813,454],{"class":408},[398,62815,62816],{"class":513},"\"item\"",[398,62818,62819],{"class":2239}," style",[398,62821,454],{"class":408},[398,62823,62824],{"class":513},"\"display: none;\"",[398,62826,51500],{"class":408},[398,62828,62829,62831,62833,62835,62837,62839,62841,62843],{"class":400,"line":32934},[398,62830,55427],{"class":408},[398,62832,843],{"class":51493},[398,62834,53679],{"class":2239},[398,62836,454],{"class":408},[398,62838,62679],{"class":513},[398,62840,55507],{"class":408},[398,62842,843],{"class":51493},[398,62844,51500],{"class":408},[398,62846,62847,62849,62851,62853,62855,62858],{"class":400,"line":32940},[398,62848,55427],{"class":408},[398,62850,51804],{"class":51493},[398,62852,53679],{"class":2239},[398,62854,454],{"class":408},[398,62856,62857],{"class":513},"\"info\"",[398,62859,51500],{"class":408},[398,62861,62862,62864,62866,62868,62870,62873,62876,62878],{"class":400,"line":32946},[398,62863,55495],{"class":408},[398,62865,19],{"class":51493},[398,62867,53679],{"class":2239},[398,62869,454],{"class":408},[398,62871,62872],{"class":513},"\"name\"",[398,62874,62875],{"class":408},">清风徐来\u003C\u002F",[398,62877,19],{"class":51493},[398,62879,51500],{"class":408},[398,62881,62882,62884,62886,62888,62890,62893,62896,62898],{"class":400,"line":32966},[398,62883,55495],{"class":408},[398,62885,19],{"class":51493},[398,62887,53679],{"class":2239},[398,62889,454],{"class":408},[398,62891,62892],{"class":513},"\"text\"",[398,62894,62895],{"class":408},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[398,62897,19],{"class":51493},[398,62899,51500],{"class":408},[398,62901,62902,62904,62906,62908,62910,62913,62916,62918],{"class":400,"line":32972},[398,62903,55495],{"class":408},[398,62905,19],{"class":51493},[398,62907,53679],{"class":2239},[398,62909,454],{"class":408},[398,62911,62912],{"class":513},"\"time\"",[398,62914,62915],{"class":408},">2022-10-10 20:29:21\u003C\u002F",[398,62917,19],{"class":51493},[398,62919,51500],{"class":408},[398,62921,62922,62924,62926],{"class":400,"line":32988},[398,62923,55600],{"class":408},[398,62925,51804],{"class":51493},[398,62927,51500],{"class":408},[398,62929,62930,62932,62934],{"class":400,"line":32994},[398,62931,51969],{"class":408},[398,62933,51804],{"class":51493},[398,62935,51500],{"class":408},[398,62937,62938,62940,62942],{"class":400,"line":33008},[398,62939,52610],{"class":408},[398,62941,51804],{"class":51493},[398,62943,51500],{"class":408},[398,62945,62946,62948,62950],{"class":400,"line":33014},[398,62947,52337],{"class":408},[398,62949,52006],{"class":51493},[398,62951,51500],{"class":408},[398,62953,62954,62956,62959,62961,62963,62965,62967,62970],{"class":400,"line":33029},[398,62955,11498],{"class":404},[398,62957,62958],{"class":457}," tx",[398,62960,13841],{"class":404},[398,62962,54589],{"class":408},[398,62964,54592],{"class":2239},[398,62966,409],{"class":408},[398,62968,62969],{"class":513},"'#tx'",[398,62971,415],{"class":408},[398,62973,62974,62976,62979,62981,62983,62985,62987,62990],{"class":400,"line":33035},[398,62975,11498],{"class":404},[398,62977,62978],{"class":457}," total",[398,62980,13841],{"class":404},[398,62982,54589],{"class":408},[398,62984,54592],{"class":2239},[398,62986,409],{"class":408},[398,62988,62989],{"class":513},"'.total'",[398,62991,415],{"class":408},[398,62993,62994],{"class":400,"line":33044},[398,62995,62996],{"class":467},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[398,62998,62999,63002,63004,63006,63008,63010,63012],{"class":400,"line":33050},[398,63000,63001],{"class":408},"    tx.",[398,63003,58006],{"class":2239},[398,63005,409],{"class":408},[398,63007,61520],{"class":513},[398,63009,12712],{"class":408},[398,63011,54642],{"class":404},[398,63013,54645],{"class":408},[398,63015,63016,63019,63021],{"class":400,"line":33059},[398,63017,63018],{"class":408},"      total.style.opacity ",[398,63020,454],{"class":404},[398,63022,55892],{"class":457},[398,63024,63025],{"class":400,"line":33065},[398,63026,33654],{"class":408},[398,63028,63029],{"class":400,"line":33071},[398,63030,63031],{"class":467},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[398,63033,63034,63036,63038,63040,63042,63044,63046],{"class":400,"line":33080},[398,63035,63001],{"class":408},[398,63037,58006],{"class":2239},[398,63039,409],{"class":408},[398,63041,61581],{"class":513},[398,63043,12712],{"class":408},[398,63045,54642],{"class":404},[398,63047,54645],{"class":408},[398,63049,63050,63052,63054],{"class":400,"line":33086},[398,63051,63018],{"class":408},[398,63053,454],{"class":404},[398,63055,47526],{"class":457},[398,63057,63058],{"class":400,"line":33097},[398,63059,33654],{"class":408},[398,63061,63062],{"class":400,"line":33103},[398,63063,63064],{"class":467},"    \u002F\u002F 3. 检测用户输入\n",[398,63066,63067,63069,63071,63073,63076,63078,63080],{"class":400,"line":33122},[398,63068,63001],{"class":408},[398,63070,58006],{"class":2239},[398,63072,409],{"class":408},[398,63074,63075],{"class":513},"'input'",[398,63077,12712],{"class":408},[398,63079,54642],{"class":404},[398,63081,54645],{"class":408},[398,63083,63084],{"class":400,"line":33128},[398,63085,63086],{"class":467},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[398,63088,63089,63092,63094,63097,63100,63102,63105,63107,63109],{"class":400,"line":33139},[398,63090,63091],{"class":408},"      total.innerHTML ",[398,63093,454],{"class":404},[398,63095,63096],{"class":513}," `${",[398,63098,63099],{"class":408},"tx",[398,63101,960],{"class":513},[398,63103,63104],{"class":408},"value",[398,63106,960],{"class":513},[398,63108,52161],{"class":457},[398,63110,63111],{"class":513},"}\u002F200字`\n",[398,63113,63114],{"class":400,"line":33145},[398,63115,33654],{"class":408},[398,63117,63118],{"class":400,"line":33165},[398,63119,2676],{"emptyLinePlaceholder":328},[398,63121,63122],{"class":400,"line":33181},[398,63123,63124],{"class":467},"    \u002F\u002F const str = 'andy'\n",[398,63126,63127],{"class":400,"line":33187},[398,63128,63129],{"class":467},"    \u002F\u002F console.log(str.length)\n",[398,63131,63132,63134,63136],{"class":400,"line":33201},[398,63133,52610],{"class":408},[398,63135,52006],{"class":51493},[398,63137,51500],{"class":408},[398,63139,63140,63142,63144],{"class":400,"line":33207},[398,63141,51978],{"class":408},[398,63143,51993],{"class":51493},[398,63145,51500],{"class":408},[398,63147,63148],{"class":400,"line":33213},[398,63149,2676],{"emptyLinePlaceholder":328},[398,63151,63152,63154,63156],{"class":400,"line":33224},[398,63153,51978],{"class":408},[398,63155,50828],{"class":51493},[398,63157,51500],{"class":408},[22275,63159,63161],{"id":63160},"_3254-change事件","3.2.5.4 change事件",[19,63163,63164],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,63166,63167],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,63169,63170],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[389,63172,63174],{"className":50826,"code":63173,"language":50828,"meta":316,"style":316},"\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",[395,63175,63176,63186,63200,63204,63212,63226,63246,63258,63266,63270,63278,63292,63300,63318,63336,63348,63352,63360,63368,63372],{"__ignoreMap":316},[398,63177,63178,63180,63182,63184],{"class":400,"line":401},[398,63179,51490],{"class":408},[398,63181,51494],{"class":51493},[398,63183,51497],{"class":2239},[398,63185,51500],{"class":408},[398,63187,63188,63190,63192,63194,63196,63198],{"class":400,"line":317},[398,63189,1312],{"class":408},[398,63191,50828],{"class":51493},[398,63193,51509],{"class":2239},[398,63195,454],{"class":408},[398,63197,51514],{"class":513},[398,63199,51500],{"class":408},[398,63201,63202],{"class":400,"line":320},[398,63203,2676],{"emptyLinePlaceholder":328},[398,63205,63206,63208,63210],{"class":400,"line":1470},[398,63207,1312],{"class":408},[398,63209,51527],{"class":51493},[398,63211,51500],{"class":408},[398,63213,63214,63216,63218,63220,63222,63224],{"class":400,"line":1476},[398,63215,52337],{"class":408},[398,63217,51537],{"class":51493},[398,63219,51540],{"class":2239},[398,63221,454],{"class":408},[398,63223,51545],{"class":513},[398,63225,51500],{"class":408},[398,63227,63228,63230,63232,63234,63236,63238,63240,63242,63244],{"class":400,"line":1490},[398,63229,52337],{"class":408},[398,63231,51537],{"class":51493},[398,63233,15197],{"class":2239},[398,63235,454],{"class":408},[398,63237,51584],{"class":513},[398,63239,51564],{"class":2239},[398,63241,454],{"class":408},[398,63243,51591],{"class":513},[398,63245,51500],{"class":408},[398,63247,63248,63250,63252,63254,63256],{"class":400,"line":1496},[398,63249,52337],{"class":408},[398,63251,51600],{"class":51493},[398,63253,51603],{"class":408},[398,63255,51600],{"class":51493},[398,63257,51500],{"class":408},[398,63259,63260,63262,63264],{"class":400,"line":1587},[398,63261,51978],{"class":408},[398,63263,51527],{"class":51493},[398,63265,51500],{"class":408},[398,63267,63268],{"class":400,"line":1593},[398,63269,2676],{"emptyLinePlaceholder":328},[398,63271,63272,63274,63276],{"class":400,"line":1605},[398,63273,1312],{"class":408},[398,63275,51993],{"class":51493},[398,63277,51500],{"class":408},[398,63279,63280,63282,63284,63286,63288,63290],{"class":400,"line":1888},[398,63281,52337],{"class":408},[398,63283,54014],{"class":51493},[398,63285,54017],{"class":2239},[398,63287,454],{"class":408},[398,63289,62892],{"class":513},[398,63291,51500],{"class":408},[398,63293,63294,63296,63298],{"class":400,"line":1893},[398,63295,52337],{"class":408},[398,63297,52006],{"class":51493},[398,63299,51500],{"class":408},[398,63301,63302,63304,63306,63308,63310,63312,63314,63316],{"class":400,"line":1899},[398,63303,11498],{"class":404},[398,63305,60798],{"class":457},[398,63307,13841],{"class":404},[398,63309,54589],{"class":408},[398,63311,54592],{"class":2239},[398,63313,409],{"class":408},[398,63315,63075],{"class":513},[398,63317,415],{"class":408},[398,63319,63320,63323,63325,63327,63330,63332,63334],{"class":400,"line":1904},[398,63321,63322],{"class":408},"    input.",[398,63324,58006],{"class":2239},[398,63326,409],{"class":408},[398,63328,63329],{"class":513},"'change'",[398,63331,12712],{"class":408},[398,63333,54642],{"class":404},[398,63335,54645],{"class":408},[398,63337,63338,63340,63342,63344,63346],{"class":400,"line":1918},[398,63339,58437],{"class":408},[398,63341,58440],{"class":2239},[398,63343,409],{"class":408},[398,63345,995],{"class":457},[398,63347,415],{"class":408},[398,63349,63350],{"class":400,"line":1923},[398,63351,33654],{"class":408},[398,63353,63354,63356,63358],{"class":400,"line":1929},[398,63355,52610],{"class":408},[398,63357,52006],{"class":51493},[398,63359,51500],{"class":408},[398,63361,63362,63364,63366],{"class":400,"line":1950},[398,63363,51978],{"class":408},[398,63365,51993],{"class":51493},[398,63367,51500],{"class":408},[398,63369,63370],{"class":400,"line":1955},[398,63371,2676],{"emptyLinePlaceholder":328},[398,63373,63374,63376,63378],{"class":400,"line":1969},[398,63375,51978],{"class":408},[398,63377,50828],{"class":51493},[398,63379,51500],{"class":408},[19,63381,63382],{},"总结：内容发生改变才回去触发",[14,63384,63386],{"id":63385},"_326-事件对象","3.2.6 事件对象",[22275,63388,63390],{"id":63389},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,63392,63393],{},[1738,63394],{"alt":316,"src":63395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,63397,63398],{},[1738,63399],{"alt":316,"src":63400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,63402,63403],{},"点击一次，就输出了事件对象，它是个对象",[19,63405,63406],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,63408,63409],{},[1738,63410],{"alt":316,"src":63411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22275,63413,63415],{"id":63414},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,63417,63418],{},[1738,63419],{"alt":316,"src":63420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,63422,63423],{},"实现按特殊字符才是实现打印输出效果：",[389,63425,63427],{"className":53260,"code":63426,"language":53262,"meta":316,"style":316},"\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",[395,63428,63429,63437,63442,63456,63464,63469,63474,63479,63484,63489,63494,63499,63504,63509,63513,63517,63525],{"__ignoreMap":316},[398,63430,63431,63433,63435],{"class":400,"line":401},[398,63432,1312],{"class":408},[398,63434,51993],{"class":51493},[398,63436,51500],{"class":408},[398,63438,63439],{"class":400,"line":317},[398,63440,63441],{"class":467},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[398,63443,63444,63446,63448,63450,63452,63454],{"class":400,"line":320},[398,63445,52337],{"class":408},[398,63447,54014],{"class":51493},[398,63449,54017],{"class":2239},[398,63451,454],{"class":408},[398,63453,62892],{"class":513},[398,63455,51500],{"class":408},[398,63457,63458,63460,63462],{"class":400,"line":1470},[398,63459,52337],{"class":408},[398,63461,52006],{"class":51493},[398,63463,51500],{"class":408},[398,63465,63466],{"class":400,"line":1476},[398,63467,63468],{"class":408},"    \u002F\u002F const btn = document.querySelector('button')\n",[398,63470,63471],{"class":400,"line":1490},[398,63472,63473],{"class":408},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[398,63475,63476],{"class":400,"line":1496},[398,63477,63478],{"class":408},"    \u002F\u002F   console.log(e);\n",[398,63480,63481],{"class":400,"line":1587},[398,63482,63483],{"class":408},"    \u002F\u002F })\n",[398,63485,63486],{"class":400,"line":1593},[398,63487,63488],{"class":408},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[398,63490,63491],{"class":400,"line":1605},[398,63492,63493],{"class":408},"    const input = document.querySelector('input')\n",[398,63495,63496],{"class":400,"line":1888},[398,63497,63498],{"class":408},"    input.addEventListener('keyup', function (e) {\n",[398,63500,63501],{"class":400,"line":1893},[398,63502,63503],{"class":408},"      if (e.key === 'Enter') {\n",[398,63505,63506],{"class":400,"line":1899},[398,63507,63508],{"class":408},"        console.log('我按下了回车键')\n",[398,63510,63511],{"class":400,"line":1904},[398,63512,52591],{"class":408},[398,63514,63515],{"class":400,"line":1918},[398,63516,33654],{"class":408},[398,63518,63519,63521,63523],{"class":400,"line":1923},[398,63520,52610],{"class":408},[398,63522,52006],{"class":51493},[398,63524,51500],{"class":408},[398,63526,63527,63529,63531],{"class":400,"line":1929},[398,63528,51978],{"class":408},[398,63530,51993],{"class":51493},[398,63532,51500],{"class":408},[22275,63534,63536],{"id":63535},"_3263-trim方法","3.2.6.3 trim方法",[19,63538,63539],{},[1738,63540],{"alt":316,"src":63541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,63543,63544],{},[1738,63545],{"alt":316,"src":63546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,63548,63549],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,63551,63552],{},"str.trim()",[14,63554,63556],{"id":63555},"_327-环境对象","3.2.7 环境对象",[19,63558,63559],{},[1738,63560],{"alt":316,"src":63561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,63563,63564],{},[1738,63565],{"alt":316,"src":63566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,63568,63569],{},[1738,63570],{"alt":316,"src":63571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,63573,63574],{},"实际函数调用是window.fn()",[19,63576,63577],{},"普通函数里面this指向的是window",[67,63579,63580,63583,63586],{},[41,63581,63582],{},"在普通函数下，this指向的是window",[41,63584,63585],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[41,63587,63588],{},"箭头函数没有this",[19,63590,63591],{},"粗略记法就是：谁调用，this就指向谁",[19,63593,63594],{},[1738,63595],{"alt":316,"src":63596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,63598,63599],{},[1738,63600],{"alt":316,"src":63601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,63603,63604],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,63606,63607],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[389,63609,63611],{"className":53260,"code":63610,"language":53262,"meta":316,"style":316},"\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",[395,63612,63613,63621,63633,63641,63646,63651,63656,63661,63665,63673],{"__ignoreMap":316},[398,63614,63615,63617,63619],{"class":400,"line":401},[398,63616,1312],{"class":408},[398,63618,51993],{"class":51493},[398,63620,51500],{"class":408},[398,63622,63623,63625,63627,63629,63631],{"class":400,"line":317},[398,63624,52337],{"class":408},[398,63626,54080],{"class":51493},[398,63628,54086],{"class":408},[398,63630,54080],{"class":51493},[398,63632,51500],{"class":408},[398,63634,63635,63637,63639],{"class":400,"line":320},[398,63636,52337],{"class":408},[398,63638,52006],{"class":51493},[398,63640,51500],{"class":408},[398,63642,63643],{"class":400,"line":1470},[398,63644,63645],{"class":408},"    const button = document.querySelector('button')\n",[398,63647,63648],{"class":400,"line":1476},[398,63649,63650],{"class":408},"    button.addEventListener('click', function () {\n",[398,63652,63653],{"class":400,"line":1490},[398,63654,63655],{"class":408},"      \u002F\u002F console.log(this);\n",[398,63657,63658],{"class":400,"line":1496},[398,63659,63660],{"class":408},"      this.style.color = 'pink'\n",[398,63662,63663],{"class":400,"line":1587},[398,63664,33654],{"class":408},[398,63666,63667,63669,63671],{"class":400,"line":1593},[398,63668,52610],{"class":408},[398,63670,52006],{"class":51493},[398,63672,51500],{"class":408},[398,63674,63675,63677,63679],{"class":400,"line":1605},[398,63676,51978],{"class":408},[398,63678,51993],{"class":51493},[398,63680,51500],{"class":408},[14,63682,63684],{"id":63683},"_328-回调函数","3.2.8 回调函数",[19,63686,63687],{},[1738,63688],{"alt":316,"src":63689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,63691,63692],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,63694,11609],{},[67,63696,63697,63700,63703],{},[41,63698,63699],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[41,63701,63702],{},"回调函数本质还是函数，只不过把它当成参数使用",[41,63704,63705],{},"使用匿名函数做为回调函数比较常见",[14,63707,63709],{"id":63708},"_329-tab栏切换","3.2.9 tab栏切换",[19,63711,63712],{},[1738,63713],{"alt":316,"src":63714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[389,63716,63718],{"className":50826,"code":63717,"language":50828,"meta":316,"style":316},"\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",[395,63719,63720,63730,63744,63748,63756,63770,63790,63810,63823,63831,63837,63847,63857,63861,63865,63872,63885,63898,63910,63926,63930,63934,63941,63953,63965,63977,63987,63997,64001,64005,64014,64026,64037,64049,64053,64057,64065,64075,64085,64095,64099,64103,64113,64127,64139,64143,64147,64159,64170,64187,64197,64201,64205,64220,64231,64241,64245,64249,64256,64271,64275,64279,64287,64297,64301,64305,64314,64324,64328,64336,64344,64348,64356,64371,64386,64399,64407,64441,64468,64495,64522,64549,64557,64565,64580,64617,64652,64687,64722,64757,64765,64773,64781,64786,64791,64811,64816,64845,64850,64855,64873,64878,64883,64888,64910,64915,64931,64935,64940,64945,64966,64971,65000,65004,65009,65013,65021,65029,65033],{"__ignoreMap":316},[398,63721,63722,63724,63726,63728],{"class":400,"line":401},[398,63723,51490],{"class":408},[398,63725,51494],{"class":51493},[398,63727,51497],{"class":2239},[398,63729,51500],{"class":408},[398,63731,63732,63734,63736,63738,63740,63742],{"class":400,"line":317},[398,63733,1312],{"class":408},[398,63735,50828],{"class":51493},[398,63737,51509],{"class":2239},[398,63739,454],{"class":408},[398,63741,51514],{"class":513},[398,63743,51500],{"class":408},[398,63745,63746],{"class":400,"line":320},[398,63747,2676],{"emptyLinePlaceholder":328},[398,63749,63750,63752,63754],{"class":400,"line":1470},[398,63751,1312],{"class":408},[398,63753,51527],{"class":51493},[398,63755,51500],{"class":408},[398,63757,63758,63760,63762,63764,63766,63768],{"class":400,"line":1476},[398,63759,52337],{"class":408},[398,63761,51537],{"class":51493},[398,63763,51540],{"class":2239},[398,63765,454],{"class":408},[398,63767,51545],{"class":513},[398,63769,59320],{"class":408},[398,63771,63772,63774,63776,63778,63780,63782,63784,63786,63788],{"class":400,"line":1490},[398,63773,52337],{"class":408},[398,63775,51537],{"class":51493},[398,63777,51556],{"class":2239},[398,63779,454],{"class":408},[398,63781,51561],{"class":513},[398,63783,51564],{"class":2239},[398,63785,454],{"class":408},[398,63787,51569],{"class":513},[398,63789,59320],{"class":408},[398,63791,63792,63794,63796,63798,63800,63802,63804,63806,63808],{"class":400,"line":1496},[398,63793,52337],{"class":408},[398,63795,51537],{"class":51493},[398,63797,15197],{"class":2239},[398,63799,454],{"class":408},[398,63801,51584],{"class":513},[398,63803,51564],{"class":2239},[398,63805,454],{"class":408},[398,63807,51591],{"class":513},[398,63809,59320],{"class":408},[398,63811,63812,63814,63816,63819,63821],{"class":400,"line":1587},[398,63813,52337],{"class":408},[398,63815,51600],{"class":51493},[398,63817,63818],{"class":408},">tab栏切换\u003C\u002F",[398,63820,51600],{"class":51493},[398,63822,51500],{"class":408},[398,63824,63825,63827,63829],{"class":400,"line":1593},[398,63826,52337],{"class":408},[398,63828,5403],{"class":51493},[398,63830,51500],{"class":408},[398,63832,63833,63835],{"class":400,"line":1605},[398,63834,6680],{"class":51493},[398,63836,15849],{"class":408},[398,63838,63839,63841,63843,63845],{"class":400,"line":1888},[398,63840,54899],{"class":457},[398,63842,51630],{"class":408},[398,63844,593],{"class":457},[398,63846,1566],{"class":408},[398,63848,63849,63851,63853,63855],{"class":400,"line":1893},[398,63850,54888],{"class":457},[398,63852,51630],{"class":408},[398,63854,593],{"class":457},[398,63856,1566],{"class":408},[398,63858,63859],{"class":400,"line":1899},[398,63860,2463],{"class":408},[398,63862,63863],{"class":400,"line":1904},[398,63864,2676],{"emptyLinePlaceholder":328},[398,63866,63867,63870],{"class":400,"line":1918},[398,63868,63869],{"class":2239},"    .tab",[398,63871,15849],{"class":408},[398,63873,63874,63876,63878,63881,63883],{"class":400,"line":1923},[398,63875,54964],{"class":457},[398,63877,51630],{"class":408},[398,63879,63880],{"class":457},"590",[398,63882,51685],{"class":404},[398,63884,1566],{"class":408},[398,63886,63887,63889,63891,63894,63896],{"class":400,"line":1929},[398,63888,54978],{"class":457},[398,63890,51630],{"class":408},[398,63892,63893],{"class":457},"340",[398,63895,51685],{"class":404},[398,63897,1566],{"class":408},[398,63899,63900,63902,63904,63906,63908],{"class":400,"line":1950},[398,63901,54899],{"class":457},[398,63903,51630],{"class":408},[398,63905,1102],{"class":457},[398,63907,51685],{"class":404},[398,63909,1566],{"class":408},[398,63911,63912,63914,63916,63918,63920,63922,63924],{"class":400,"line":1955},[398,63913,62170],{"class":457},[398,63915,51630],{"class":408},[398,63917,619],{"class":457},[398,63919,51685],{"class":404},[398,63921,51714],{"class":457},[398,63923,62437],{"class":457},[398,63925,1566],{"class":408},[398,63927,63928],{"class":400,"line":1969},[398,63929,2463],{"class":408},[398,63931,63932],{"class":400,"line":1974},[398,63933,2676],{"emptyLinePlaceholder":328},[398,63935,63936,63939],{"class":400,"line":2003},[398,63937,63938],{"class":2239},"    .tab-nav",[398,63940,15849],{"class":408},[398,63942,63943,63945,63947,63949,63951],{"class":400,"line":2008},[398,63944,54964],{"class":457},[398,63946,51630],{"class":408},[398,63948,713],{"class":457},[398,63950,730],{"class":404},[398,63952,1566],{"class":408},[398,63954,63955,63957,63959,63961,63963],{"class":400,"line":2025},[398,63956,54978],{"class":457},[398,63958,51630],{"class":408},[398,63960,1309],{"class":457},[398,63962,51685],{"class":404},[398,63964,1566],{"class":408},[398,63966,63967,63969,63971,63973,63975],{"class":400,"line":2030},[398,63968,57552],{"class":457},[398,63970,51630],{"class":408},[398,63972,1309],{"class":457},[398,63974,51685],{"class":404},[398,63976,1566],{"class":408},[398,63978,63979,63981,63983,63985],{"class":400,"line":2035},[398,63980,55202],{"class":457},[398,63982,51630],{"class":408},[398,63984,51670],{"class":457},[398,63986,1566],{"class":408},[398,63988,63989,63991,63993,63995],{"class":400,"line":2040},[398,63990,55213],{"class":457},[398,63992,51630],{"class":408},[398,63994,51861],{"class":457},[398,63996,1566],{"class":408},[398,63998,63999],{"class":400,"line":2054},[398,64000,2463],{"class":408},[398,64002,64003],{"class":400,"line":2059},[398,64004,2676],{"emptyLinePlaceholder":328},[398,64006,64007,64009,64012],{"class":400,"line":2853},[398,64008,63938],{"class":2239},[398,64010,64011],{"class":51493}," h3",[398,64013,15849],{"class":408},[398,64015,64016,64018,64020,64022,64024],{"class":400,"line":2867},[398,64017,55115],{"class":457},[398,64019,51630],{"class":408},[398,64021,1202],{"class":457},[398,64023,51685],{"class":404},[398,64025,1566],{"class":408},[398,64027,64028,64030,64032,64035],{"class":400,"line":2875},[398,64029,62527],{"class":457},[398,64031,51630],{"class":408},[398,64033,64034],{"class":457},"normal",[398,64036,1566],{"class":408},[398,64038,64039,64041,64043,64045,64047],{"class":400,"line":2880},[398,64040,62193],{"class":457},[398,64042,51630],{"class":408},[398,64044,1102],{"class":457},[398,64046,51685],{"class":404},[398,64048,1566],{"class":408},[398,64050,64051],{"class":400,"line":2886},[398,64052,2463],{"class":408},[398,64054,64055],{"class":400,"line":2892},[398,64056,2676],{"emptyLinePlaceholder":328},[398,64058,64059,64061,64063],{"class":400,"line":2897},[398,64060,63938],{"class":2239},[398,64062,61485],{"class":51493},[398,64064,15849],{"class":408},[398,64066,64067,64069,64071,64073],{"class":400,"line":8225},[398,64068,54925],{"class":457},[398,64070,51630],{"class":408},[398,64072,54930],{"class":457},[398,64074,1566],{"class":408},[398,64076,64077,64079,64081,64083],{"class":400,"line":8249},[398,64078,55202],{"class":457},[398,64080,51630],{"class":408},[398,64082,51670],{"class":457},[398,64084,1566],{"class":408},[398,64086,64087,64089,64091,64093],{"class":400,"line":8254},[398,64088,55213],{"class":457},[398,64090,51630],{"class":408},[398,64092,51773],{"class":457},[398,64094,1566],{"class":408},[398,64096,64097],{"class":400,"line":8260},[398,64098,2463],{"class":408},[398,64100,64101],{"class":400,"line":8287},[398,64102,2676],{"emptyLinePlaceholder":328},[398,64104,64105,64107,64109,64111],{"class":400,"line":8292},[398,64106,63938],{"class":2239},[398,64108,61485],{"class":51493},[398,64110,55268],{"class":51493},[398,64112,15849],{"class":408},[398,64114,64115,64117,64119,64121,64123,64125],{"class":400,"line":8298},[398,64116,54899],{"class":457},[398,64118,51630],{"class":408},[398,64120,593],{"class":457},[398,64122,9227],{"class":457},[398,64124,51685],{"class":404},[398,64126,1566],{"class":408},[398,64128,64129,64131,64133,64135,64137],{"class":400,"line":8310},[398,64130,55115],{"class":457},[398,64132,51630],{"class":408},[398,64134,951],{"class":457},[398,64136,51685],{"class":404},[398,64138,1566],{"class":408},[398,64140,64141],{"class":400,"line":8322},[398,64142,2463],{"class":408},[398,64144,64145],{"class":400,"line":8334},[398,64146,2676],{"emptyLinePlaceholder":328},[398,64148,64149,64151,64153,64155,64157],{"class":400,"line":9993},[398,64150,63938],{"class":2239},[398,64152,61485],{"class":51493},[398,64154,55268],{"class":51493},[398,64156,1674],{"class":51493},[398,64158,15849],{"class":408},[398,64160,64161,64164,64166,64168],{"class":400,"line":10018},[398,64162,64163],{"class":457},"      text-decoration",[398,64165,51630],{"class":408},[398,64167,54930],{"class":457},[398,64169,1566],{"class":408},[398,64171,64172,64174,64176,64178,64180,64182,64185],{"class":400,"line":10041},[398,64173,62425],{"class":457},[398,64175,51630],{"class":408},[398,64177,486],{"class":457},[398,64179,51685],{"class":404},[398,64181,51714],{"class":457},[398,64183,64184],{"class":457}," transparent",[398,64186,1566],{"class":408},[398,64188,64189,64191,64193,64195],{"class":400,"line":10065},[398,64190,57609],{"class":457},[398,64192,51630],{"class":408},[398,64194,62562],{"class":457},[398,64196,1566],{"class":408},[398,64198,64199],{"class":400,"line":10070},[398,64200,2463],{"class":408},[398,64202,64203],{"class":400,"line":10075},[398,64204,2676],{"emptyLinePlaceholder":328},[398,64206,64207,64209,64211,64213,64215,64218],{"class":400,"line":10080},[398,64208,63938],{"class":2239},[398,64210,61485],{"class":51493},[398,64212,55268],{"class":51493},[398,64214,1674],{"class":51493},[398,64216,64217],{"class":2239},".active",[398,64219,15849],{"class":408},[398,64221,64222,64224,64226,64229],{"class":400,"line":10089},[398,64223,61984],{"class":457},[398,64225,51630],{"class":408},[398,64227,64228],{"class":457},"#e1251b",[398,64230,1566],{"class":408},[398,64232,64233,64235,64237,64239],{"class":400,"line":10094},[398,64234,57609],{"class":457},[398,64236,51630],{"class":408},[398,64238,64228],{"class":457},[398,64240,1566],{"class":408},[398,64242,64243],{"class":400,"line":10100},[398,64244,2463],{"class":408},[398,64246,64247],{"class":400,"line":10121},[398,64248,2676],{"emptyLinePlaceholder":328},[398,64250,64251,64254],{"class":400,"line":10127},[398,64252,64253],{"class":2239},"    .tab-content",[398,64255,15849],{"class":408},[398,64257,64258,64260,64262,64264,64267,64269],{"class":400,"line":10141},[398,64259,54888],{"class":457},[398,64261,51630],{"class":408},[398,64263,593],{"class":457},[398,64265,64266],{"class":457}," 16",[398,64268,51685],{"class":404},[398,64270,1566],{"class":408},[398,64272,64273],{"class":400,"line":10147},[398,64274,2463],{"class":408},[398,64276,64277],{"class":400,"line":10174},[398,64278,2676],{"emptyLinePlaceholder":328},[398,64280,64281,64283,64285],{"class":400,"line":10183},[398,64282,64253],{"class":2239},[398,64284,62367],{"class":2239},[398,64286,15849],{"class":408},[398,64288,64289,64291,64293,64295],{"class":400,"line":10189},[398,64290,55202],{"class":457},[398,64292,51630],{"class":408},[398,64294,54930],{"class":457},[398,64296,1566],{"class":408},[398,64298,64299],{"class":400,"line":10197},[398,64300,2463],{"class":408},[398,64302,64303],{"class":400,"line":10202},[398,64304,2676],{"emptyLinePlaceholder":328},[398,64306,64307,64309,64312],{"class":400,"line":16881},[398,64308,64253],{"class":2239},[398,64310,64311],{"class":2239}," .item.active",[398,64313,15849],{"class":408},[398,64315,64316,64318,64320,64322],{"class":400,"line":16887},[398,64317,55202],{"class":457},[398,64319,51630],{"class":408},[398,64321,61062],{"class":457},[398,64323,1566],{"class":408},[398,64325,64326],{"class":400,"line":16910},[398,64327,2463],{"class":408},[398,64329,64330,64332,64334],{"class":400,"line":16916},[398,64331,52610],{"class":408},[398,64333,5403],{"class":51493},[398,64335,51500],{"class":408},[398,64337,64338,64340,64342],{"class":400,"line":16939},[398,64339,51978],{"class":408},[398,64341,51527],{"class":51493},[398,64343,51500],{"class":408},[398,64345,64346],{"class":400,"line":16953},[398,64347,2676],{"emptyLinePlaceholder":328},[398,64349,64350,64352,64354],{"class":400,"line":16973},[398,64351,1312],{"class":408},[398,64353,51993],{"class":51493},[398,64355,51500],{"class":408},[398,64357,64358,64360,64362,64364,64366,64369],{"class":400,"line":16979},[398,64359,52337],{"class":408},[398,64361,51804],{"class":51493},[398,64363,53679],{"class":2239},[398,64365,454],{"class":408},[398,64367,64368],{"class":513},"\"tab\"",[398,64370,51500],{"class":408},[398,64372,64373,64375,64377,64379,64381,64384],{"class":400,"line":16990},[398,64374,51534],{"class":408},[398,64376,51804],{"class":51493},[398,64378,53679],{"class":2239},[398,64380,454],{"class":408},[398,64382,64383],{"class":513},"\"tab-nav\"",[398,64385,51500],{"class":408},[398,64387,64388,64390,64392,64395,64397],{"class":400,"line":17013},[398,64389,55427],{"class":408},[398,64391,14],{"class":51493},[398,64393,64394],{"class":408},">每日特价\u003C\u002F",[398,64396,14],{"class":51493},[398,64398,51500],{"class":408},[398,64400,64401,64403,64405],{"class":400,"line":17035},[398,64402,55427],{"class":408},[398,64404,67],{"class":51493},[398,64406,51500],{"class":408},[398,64408,64409,64411,64413,64415,64417,64419,64421,64423,64425,64427,64430,64433,64435,64437,64439],{"class":400,"line":17040},[398,64410,55495],{"class":408},[398,64412,41],{"class":51493},[398,64414,61245],{"class":408},[398,64416,640],{"class":51493},[398,64418,53679],{"class":2239},[398,64420,454],{"class":408},[398,64422,59899],{"class":513},[398,64424,61250],{"class":2239},[398,64426,454],{"class":408},[398,64428,64429],{"class":513},"\"javascript:;\"",[398,64431,64432],{"class":408},">精选\u003C\u002F",[398,64434,640],{"class":51493},[398,64436,55507],{"class":408},[398,64438,41],{"class":51493},[398,64440,51500],{"class":408},[398,64442,64443,64445,64447,64449,64451,64453,64455,64457,64460,64462,64464,64466],{"class":400,"line":17046},[398,64444,55495],{"class":408},[398,64446,41],{"class":51493},[398,64448,61245],{"class":408},[398,64450,640],{"class":51493},[398,64452,61250],{"class":2239},[398,64454,454],{"class":408},[398,64456,64429],{"class":513},[398,64458,64459],{"class":408},">美食\u003C\u002F",[398,64461,640],{"class":51493},[398,64463,55507],{"class":408},[398,64465,41],{"class":51493},[398,64467,51500],{"class":408},[398,64469,64470,64472,64474,64476,64478,64480,64482,64484,64487,64489,64491,64493],{"class":400,"line":17060},[398,64471,55495],{"class":408},[398,64473,41],{"class":51493},[398,64475,61245],{"class":408},[398,64477,640],{"class":51493},[398,64479,61250],{"class":2239},[398,64481,454],{"class":408},[398,64483,64429],{"class":513},[398,64485,64486],{"class":408},">百货\u003C\u002F",[398,64488,640],{"class":51493},[398,64490,55507],{"class":408},[398,64492,41],{"class":51493},[398,64494,51500],{"class":408},[398,64496,64497,64499,64501,64503,64505,64507,64509,64511,64514,64516,64518,64520],{"class":400,"line":17073},[398,64498,55495],{"class":408},[398,64500,41],{"class":51493},[398,64502,61245],{"class":408},[398,64504,640],{"class":51493},[398,64506,61250],{"class":2239},[398,64508,454],{"class":408},[398,64510,64429],{"class":513},[398,64512,64513],{"class":408},">个护\u003C\u002F",[398,64515,640],{"class":51493},[398,64517,55507],{"class":408},[398,64519,41],{"class":51493},[398,64521,51500],{"class":408},[398,64523,64524,64526,64528,64530,64532,64534,64536,64538,64541,64543,64545,64547],{"class":400,"line":17078},[398,64525,55495],{"class":408},[398,64527,41],{"class":51493},[398,64529,61245],{"class":408},[398,64531,640],{"class":51493},[398,64533,61250],{"class":2239},[398,64535,454],{"class":408},[398,64537,64429],{"class":513},[398,64539,64540],{"class":408},">预告\u003C\u002F",[398,64542,640],{"class":51493},[398,64544,55507],{"class":408},[398,64546,41],{"class":51493},[398,64548,51500],{"class":408},[398,64550,64551,64553,64555],{"class":400,"line":17092},[398,64552,55600],{"class":408},[398,64554,67],{"class":51493},[398,64556,51500],{"class":408},[398,64558,64559,64561,64563],{"class":400,"line":17097},[398,64560,51969],{"class":408},[398,64562,51804],{"class":51493},[398,64564,51500],{"class":408},[398,64566,64567,64569,64571,64573,64575,64578],{"class":400,"line":17103},[398,64568,51534],{"class":408},[398,64570,51804],{"class":51493},[398,64572,53679],{"class":2239},[398,64574,454],{"class":408},[398,64576,64577],{"class":513},"\"tab-content\"",[398,64579,51500],{"class":408},[398,64581,64582,64584,64586,64588,64590,64593,64595,64597,64599,64601,64604,64606,64608,64610,64613,64615],{"class":400,"line":17108},[398,64583,55427],{"class":408},[398,64585,51804],{"class":51493},[398,64587,53679],{"class":2239},[398,64589,454],{"class":408},[398,64591,64592],{"class":513},"\"item active\"",[398,64594,61245],{"class":408},[398,64596,1738],{"class":51493},[398,64598,55432],{"class":2239},[398,64600,454],{"class":408},[398,64602,64603],{"class":513},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[398,64605,55440],{"class":2239},[398,64607,454],{"class":408},[398,64609,7929],{"class":513},[398,64611,64612],{"class":408}," \u002F>\u003C\u002F",[398,64614,51804],{"class":51493},[398,64616,51500],{"class":408},[398,64618,64619,64621,64623,64625,64627,64629,64631,64633,64635,64637,64640,64642,64644,64646,64648,64650],{"class":400,"line":17122},[398,64620,55427],{"class":408},[398,64622,51804],{"class":51493},[398,64624,53679],{"class":2239},[398,64626,454],{"class":408},[398,64628,62816],{"class":513},[398,64630,61245],{"class":408},[398,64632,1738],{"class":51493},[398,64634,55432],{"class":2239},[398,64636,454],{"class":408},[398,64638,64639],{"class":513},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[398,64641,55440],{"class":2239},[398,64643,454],{"class":408},[398,64645,7929],{"class":513},[398,64647,64612],{"class":408},[398,64649,51804],{"class":51493},[398,64651,51500],{"class":408},[398,64653,64654,64656,64658,64660,64662,64664,64666,64668,64670,64672,64675,64677,64679,64681,64683,64685],{"class":400,"line":17127},[398,64655,55427],{"class":408},[398,64657,51804],{"class":51493},[398,64659,53679],{"class":2239},[398,64661,454],{"class":408},[398,64663,62816],{"class":513},[398,64665,61245],{"class":408},[398,64667,1738],{"class":51493},[398,64669,55432],{"class":2239},[398,64671,454],{"class":408},[398,64673,64674],{"class":513},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[398,64676,55440],{"class":2239},[398,64678,454],{"class":408},[398,64680,7929],{"class":513},[398,64682,64612],{"class":408},[398,64684,51804],{"class":51493},[398,64686,51500],{"class":408},[398,64688,64689,64691,64693,64695,64697,64699,64701,64703,64705,64707,64710,64712,64714,64716,64718,64720],{"class":400,"line":17132},[398,64690,55427],{"class":408},[398,64692,51804],{"class":51493},[398,64694,53679],{"class":2239},[398,64696,454],{"class":408},[398,64698,62816],{"class":513},[398,64700,61245],{"class":408},[398,64702,1738],{"class":51493},[398,64704,55432],{"class":2239},[398,64706,454],{"class":408},[398,64708,64709],{"class":513},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[398,64711,55440],{"class":2239},[398,64713,454],{"class":408},[398,64715,7929],{"class":513},[398,64717,64612],{"class":408},[398,64719,51804],{"class":51493},[398,64721,51500],{"class":408},[398,64723,64724,64726,64728,64730,64732,64734,64736,64738,64740,64742,64745,64747,64749,64751,64753,64755],{"class":400,"line":17146},[398,64725,55427],{"class":408},[398,64727,51804],{"class":51493},[398,64729,53679],{"class":2239},[398,64731,454],{"class":408},[398,64733,62816],{"class":513},[398,64735,61245],{"class":408},[398,64737,1738],{"class":51493},[398,64739,55432],{"class":2239},[398,64741,454],{"class":408},[398,64743,64744],{"class":513},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[398,64746,55440],{"class":2239},[398,64748,454],{"class":408},[398,64750,7929],{"class":513},[398,64752,64612],{"class":408},[398,64754,51804],{"class":51493},[398,64756,51500],{"class":408},[398,64758,64759,64761,64763],{"class":400,"line":17158},[398,64760,51969],{"class":408},[398,64762,51804],{"class":51493},[398,64764,51500],{"class":408},[398,64766,64767,64769,64771],{"class":400,"line":17163},[398,64768,52610],{"class":408},[398,64770,51804],{"class":51493},[398,64772,51500],{"class":408},[398,64774,64775,64777,64779],{"class":400,"line":17176},[398,64776,52337],{"class":408},[398,64778,52006],{"class":51493},[398,64780,51500],{"class":408},[398,64782,64783],{"class":400,"line":17181},[398,64784,64785],{"class":467},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[398,64787,64788],{"class":400,"line":17186},[398,64789,64790],{"class":467},"    \u002F\u002F 1.1 获取 a 元素 \n",[398,64792,64793,64795,64798,64800,64802,64804,64806,64809],{"class":400,"line":17191},[398,64794,11498],{"class":404},[398,64796,64797],{"class":457}," as",[398,64799,13841],{"class":404},[398,64801,54589],{"class":408},[398,64803,55874],{"class":2239},[398,64805,409],{"class":408},[398,64807,64808],{"class":513},"'.tab-nav a'",[398,64810,415],{"class":408},[398,64812,64813],{"class":400,"line":17204},[398,64814,64815],{"class":467},"    \u002F\u002F console.log(as) \n",[398,64817,64818,64820,64822,64824,64826,64828,64830,64832,64834,64837,64839,64841,64843],{"class":400,"line":17209},[398,64819,3477],{"class":404},[398,64821,1934],{"class":408},[398,64823,52040],{"class":404},[398,64825,9715],{"class":408},[398,64827,454],{"class":404},[398,64829,4369],{"class":457},[398,64831,9722],{"class":408},[398,64833,1312],{"class":404},[398,64835,64836],{"class":408}," as.",[398,64838,52161],{"class":457},[398,64840,3490],{"class":408},[398,64842,2568],{"class":404},[398,64844,12719],{"class":408},[398,64846,64847],{"class":400,"line":32826},[398,64848,64849],{"class":467},"      \u002F\u002F console.log(as[i])\n",[398,64851,64852],{"class":400,"line":32832},[398,64853,64854],{"class":467},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[398,64856,64857,64860,64862,64864,64867,64869,64871],{"class":400,"line":32838},[398,64858,64859],{"class":408},"      as[i].",[398,64861,58006],{"class":2239},[398,64863,409],{"class":408},[398,64865,64866],{"class":513},"'mouseenter'",[398,64868,12712],{"class":408},[398,64870,54642],{"class":404},[398,64872,54645],{"class":408},[398,64874,64875],{"class":400,"line":32844},[398,64876,64877],{"class":467},"        \u002F\u002F console.log('鼠标经过')\n",[398,64879,64880],{"class":400,"line":32850},[398,64881,64882],{"class":467},"        \u002F\u002F 排他思想  \n",[398,64884,64885],{"class":400,"line":32861},[398,64886,64887],{"class":467},"        \u002F\u002F 干掉别人 移除类active\n",[398,64889,64890,64892,64894,64896,64899,64901,64903,64905,64908],{"class":400,"line":32867},[398,64891,52118],{"class":408},[398,64893,54592],{"class":2239},[398,64895,409],{"class":408},[398,64897,64898],{"class":513},"'.tab-nav .active'",[398,64900,57196],{"class":408},[398,64902,57199],{"class":2239},[398,64904,409],{"class":408},[398,64906,64907],{"class":513},"'active'",[398,64909,415],{"class":408},[398,64911,64912],{"class":400,"line":32887},[398,64913,64914],{"class":467},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[398,64916,64917,64920,64923,64925,64927,64929],{"class":400,"line":32893},[398,64918,64919],{"class":457},"        this",[398,64921,64922],{"class":408},".classList.",[398,64924,5611],{"class":2239},[398,64926,409],{"class":408},[398,64928,64907],{"class":513},[398,64930,415],{"class":408},[398,64932,64933],{"class":400,"line":32904},[398,64934,2676],{"emptyLinePlaceholder":328},[398,64936,64937],{"class":400,"line":32910},[398,64938,64939],{"class":467},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[398,64941,64942],{"class":400,"line":32916},[398,64943,64944],{"class":467},"        \u002F\u002F 干掉别人\n",[398,64946,64947,64949,64951,64953,64956,64958,64960,64962,64964],{"class":400,"line":32922},[398,64948,52118],{"class":408},[398,64950,54592],{"class":2239},[398,64952,409],{"class":408},[398,64954,64955],{"class":513},"'.tab-content .active'",[398,64957,57196],{"class":408},[398,64959,57199],{"class":2239},[398,64961,409],{"class":408},[398,64963,64907],{"class":513},[398,64965,415],{"class":408},[398,64967,64968],{"class":400,"line":32928},[398,64969,64970],{"class":467},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[398,64972,64973,64975,64977,64979,64982,64984,64986,64988,64990,64992,64994,64996,64998],{"class":400,"line":32934},[398,64974,52118],{"class":408},[398,64976,54592],{"class":2239},[398,64978,409],{"class":408},[398,64980,64981],{"class":513},"`.tab-content .item:nth-child(${",[398,64983,843],{"class":408},[398,64985,45759],{"class":404},[398,64987,25396],{"class":457},[398,64989,57225],{"class":513},[398,64991,57196],{"class":408},[398,64993,5611],{"class":2239},[398,64995,409],{"class":408},[398,64997,64907],{"class":513},[398,64999,415],{"class":408},[398,65001,65002],{"class":400,"line":32940},[398,65003,2676],{"emptyLinePlaceholder":328},[398,65005,65006],{"class":400,"line":32946},[398,65007,65008],{"class":408},"      })\n",[398,65010,65011],{"class":400,"line":32966},[398,65012,2463],{"class":408},[398,65014,65015,65017,65019],{"class":400,"line":32972},[398,65016,52610],{"class":408},[398,65018,52006],{"class":51493},[398,65020,51500],{"class":408},[398,65022,65023,65025,65027],{"class":400,"line":32988},[398,65024,51978],{"class":408},[398,65026,51993],{"class":51493},[398,65028,51500],{"class":408},[398,65030,65031],{"class":400,"line":32994},[398,65032,2676],{"emptyLinePlaceholder":328},[398,65034,65035,65037,65039],{"class":400,"line":33008},[398,65036,51978],{"class":408},[398,65038,50828],{"class":51493},[398,65040,51500],{"class":408},[19,65042,65043],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,65045,65046],{},"在监听事件中，this指向的就是他的调用者",[19,65048,65049],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,65051,53913],{},[19,65053,65054],{},"(function () {",[19,65056,65057],{},"const list = document.querySelector('.xtx-elevator-list')",[19,65059,65060],{},"list.addEventListener('click', function (e) {",[19,65062,65063],{},"if (e.target.tagName === 'A') {",[19,65065,65066],{},"\u002F\u002F 排他思想",[19,65068,65069],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,65071,65072],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,65074,65075],{},"\u002F\u002F console.log(old);",[19,65077,65078],{},"\u002F\u002F 判断",[19,65080,65081],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,65083,65084],{},"if (old) old.classList.remove('active')",[19,65086,65087],{},"e.target.classList.add('active')",[19,65089,1348],{},[19,65091,52657],{},[19,65093,65094],{},"})();",[14,65096,65098],{"id":65097},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[389,65100,65102],{"className":50826,"code":65101,"language":50828,"meta":316,"style":316},"\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",[395,65103,65104,65114,65118,65126,65130,65144,65158,65170,65178,65184,65194,65204,65208,65212,65219,65231,65242,65259,65272,65286,65296,65300,65304,65311,65322,65340,65350,65362,65366,65370,65377,65394,65405,65417,65421,65425,65432,65444,65448,65456,65464,65468,65476,65484,65492,65507,65551,65559,65572,65585,65598,65606,65614,65622,65650,65658,65670,65683,65696,65704,65712,65720,65746,65754,65767,65779,65792,65800,65808,65816,65842,65850,65863,65875,65888,65896,65904,65912,65917,65937,65942,65962,65967,65984,65989,65997,66002,66031,66044,66048,66052,66057,66061,66089,66094,66111,66116,66121,66126,66131,66157,66161,66165,66173,66181,66185],{"__ignoreMap":316},[398,65105,65106,65108,65110,65112],{"class":400,"line":401},[398,65107,51490],{"class":408},[398,65109,51494],{"class":51493},[398,65111,51497],{"class":2239},[398,65113,51500],{"class":408},[398,65115,65116],{"class":400,"line":317},[398,65117,2676],{"emptyLinePlaceholder":328},[398,65119,65120,65122,65124],{"class":400,"line":320},[398,65121,1312],{"class":408},[398,65123,50828],{"class":51493},[398,65125,51500],{"class":408},[398,65127,65128],{"class":400,"line":1470},[398,65129,2676],{"emptyLinePlaceholder":328},[398,65131,65132,65134,65136,65138,65140,65142],{"class":400,"line":1476},[398,65133,1312],{"class":408},[398,65135,51527],{"class":51493},[398,65137,51509],{"class":2239},[398,65139,454],{"class":408},[398,65141,51514],{"class":513},[398,65143,51500],{"class":408},[398,65145,65146,65148,65150,65152,65154,65156],{"class":400,"line":1490},[398,65147,52337],{"class":408},[398,65149,51537],{"class":51493},[398,65151,51540],{"class":2239},[398,65153,454],{"class":408},[398,65155,51545],{"class":513},[398,65157,51500],{"class":408},[398,65159,65160,65162,65164,65166,65168],{"class":400,"line":1496},[398,65161,52337],{"class":408},[398,65163,51600],{"class":51493},[398,65165,55507],{"class":408},[398,65167,51600],{"class":51493},[398,65169,51500],{"class":408},[398,65171,65172,65174,65176],{"class":400,"line":1587},[398,65173,52337],{"class":408},[398,65175,5403],{"class":51493},[398,65177,51500],{"class":408},[398,65179,65180,65182],{"class":400,"line":1593},[398,65181,6680],{"class":51493},[398,65183,15849],{"class":408},[398,65185,65186,65188,65190,65192],{"class":400,"line":1605},[398,65187,54899],{"class":457},[398,65189,51630],{"class":408},[398,65191,593],{"class":457},[398,65193,1566],{"class":408},[398,65195,65196,65198,65200,65202],{"class":400,"line":1888},[398,65197,54888],{"class":457},[398,65199,51630],{"class":408},[398,65201,593],{"class":457},[398,65203,1566],{"class":408},[398,65205,65206],{"class":400,"line":1893},[398,65207,2463],{"class":408},[398,65209,65210],{"class":400,"line":1899},[398,65211,2676],{"emptyLinePlaceholder":328},[398,65213,65214,65217],{"class":400,"line":1904},[398,65215,65216],{"class":51493},"    table",[398,65218,15849],{"class":408},[398,65220,65221,65224,65226,65229],{"class":400,"line":1918},[398,65222,65223],{"class":457},"      border-collapse",[398,65225,51630],{"class":408},[398,65227,65228],{"class":457},"collapse",[398,65230,1566],{"class":408},[398,65232,65233,65236,65238,65240],{"class":400,"line":1923},[398,65234,65235],{"class":457},"      border-spacing",[398,65237,51630],{"class":408},[398,65239,593],{"class":457},[398,65241,1566],{"class":408},[398,65243,65244,65246,65248,65250,65252,65254,65257],{"class":400,"line":1929},[398,65245,62170],{"class":457},[398,65247,51630],{"class":408},[398,65249,619],{"class":457},[398,65251,51685],{"class":404},[398,65253,51714],{"class":457},[398,65255,65256],{"class":457}," #c0c0c0",[398,65258,1566],{"class":408},[398,65260,65261,65263,65265,65268,65270],{"class":400,"line":1950},[398,65262,54964],{"class":457},[398,65264,51630],{"class":408},[398,65266,65267],{"class":457},"500",[398,65269,51685],{"class":404},[398,65271,1566],{"class":408},[398,65273,65274,65276,65278,65280,65282,65284],{"class":400,"line":1955},[398,65275,54899],{"class":457},[398,65277,51630],{"class":408},[398,65279,713],{"class":457},[398,65281,51685],{"class":404},[398,65283,51749],{"class":457},[398,65285,1566],{"class":408},[398,65287,65288,65290,65292,65294],{"class":400,"line":1969},[398,65289,57479],{"class":457},[398,65291,51630],{"class":408},[398,65293,51785],{"class":457},[398,65295,1566],{"class":408},[398,65297,65298],{"class":400,"line":1974},[398,65299,2463],{"class":408},[398,65301,65302],{"class":400,"line":2003},[398,65303,2676],{"emptyLinePlaceholder":328},[398,65305,65306,65309],{"class":400,"line":2008},[398,65307,65308],{"class":51493},"    th",[398,65310,15849],{"class":408},[398,65312,65313,65315,65317,65320],{"class":400,"line":2025},[398,65314,55077],{"class":457},[398,65316,51630],{"class":408},[398,65318,65319],{"class":457},"#09c",[398,65321,1566],{"class":408},[398,65323,65324,65327,65329,65331,65333,65335,65338],{"class":400,"line":2030},[398,65325,65326],{"class":457},"      font",[398,65328,51630],{"class":408},[398,65330,62532],{"class":457},[398,65332,64266],{"class":457},[398,65334,51685],{"class":404},[398,65336,65337],{"class":513}," \"微软雅黑\"",[398,65339,1566],{"class":408},[398,65341,65342,65344,65346,65348],{"class":400,"line":2035},[398,65343,57609],{"class":457},[398,65345,51630],{"class":408},[398,65347,61035],{"class":457},[398,65349,1566],{"class":408},[398,65351,65352,65354,65356,65358,65360],{"class":400,"line":2040},[398,65353,54978],{"class":457},[398,65355,51630],{"class":408},[398,65357,1202],{"class":457},[398,65359,51685],{"class":404},[398,65361,1566],{"class":408},[398,65363,65364],{"class":400,"line":2054},[398,65365,2463],{"class":408},[398,65367,65368],{"class":400,"line":2059},[398,65369,2676],{"emptyLinePlaceholder":328},[398,65371,65372,65375],{"class":400,"line":2853},[398,65373,65374],{"class":51493},"    td",[398,65376,15849],{"class":408},[398,65378,65379,65381,65383,65385,65387,65389,65392],{"class":400,"line":2867},[398,65380,62170],{"class":457},[398,65382,51630],{"class":408},[398,65384,619],{"class":457},[398,65386,51685],{"class":404},[398,65388,51714],{"class":457},[398,65390,65391],{"class":457}," #d0d0d0",[398,65393,1566],{"class":408},[398,65395,65396,65398,65400,65403],{"class":400,"line":2875},[398,65397,57609],{"class":457},[398,65399,51630],{"class":408},[398,65401,65402],{"class":457},"#404060",[398,65404,1566],{"class":408},[398,65406,65407,65409,65411,65413,65415],{"class":400,"line":2880},[398,65408,54888],{"class":457},[398,65410,51630],{"class":408},[398,65412,848],{"class":457},[398,65414,51685],{"class":404},[398,65416,1566],{"class":408},[398,65418,65419],{"class":400,"line":2886},[398,65420,2463],{"class":408},[398,65422,65423],{"class":400,"line":2892},[398,65424,2676],{"emptyLinePlaceholder":328},[398,65426,65427,65430],{"class":400,"line":2897},[398,65428,65429],{"class":2239},"    .allCheck",[398,65431,15849],{"class":408},[398,65433,65434,65436,65438,65440,65442],{"class":400,"line":8225},[398,65435,54964],{"class":457},[398,65437,51630],{"class":408},[398,65439,1014],{"class":457},[398,65441,51685],{"class":404},[398,65443,1566],{"class":408},[398,65445,65446],{"class":400,"line":8249},[398,65447,2463],{"class":408},[398,65449,65450,65452,65454],{"class":400,"line":8254},[398,65451,52610],{"class":408},[398,65453,5403],{"class":51493},[398,65455,51500],{"class":408},[398,65457,65458,65460,65462],{"class":400,"line":8260},[398,65459,51978],{"class":408},[398,65461,51527],{"class":51493},[398,65463,51500],{"class":408},[398,65465,65466],{"class":400,"line":8287},[398,65467,2676],{"emptyLinePlaceholder":328},[398,65469,65470,65472,65474],{"class":400,"line":8292},[398,65471,1312],{"class":408},[398,65473,51993],{"class":51493},[398,65475,51500],{"class":408},[398,65477,65478,65480,65482],{"class":400,"line":8298},[398,65479,52337],{"class":408},[398,65481,84],{"class":51493},[398,65483,51500],{"class":408},[398,65485,65486,65488,65490],{"class":400,"line":8310},[398,65487,51534],{"class":408},[398,65489,90],{"class":51493},[398,65491,51500],{"class":408},[398,65493,65494,65496,65498,65500,65502,65505],{"class":400,"line":8322},[398,65495,55427],{"class":408},[398,65497,93],{"class":51493},[398,65499,53679],{"class":2239},[398,65501,454],{"class":408},[398,65503,65504],{"class":513},"\"allCheck\"",[398,65506,51500],{"class":408},[398,65508,65509,65511,65513,65515,65517,65519,65521,65523,65525,65527,65529,65532,65535,65537,65539,65541,65544,65547,65549],{"class":400,"line":8334},[398,65510,55495],{"class":408},[398,65512,54014],{"class":51493},[398,65514,54017],{"class":2239},[398,65516,454],{"class":408},[398,65518,54022],{"class":513},[398,65520,15197],{"class":2239},[398,65522,454],{"class":408},[398,65524,7929],{"class":513},[398,65526,15236],{"class":2239},[398,65528,454],{"class":408},[398,65530,65531],{"class":513},"\"checkAll\"",[398,65533,65534],{"class":408},"> \u003C",[398,65536,398],{"class":51493},[398,65538,53679],{"class":2239},[398,65540,454],{"class":408},[398,65542,65543],{"class":513},"\"all\"",[398,65545,65546],{"class":408},">全选\u003C\u002F",[398,65548,398],{"class":51493},[398,65550,51500],{"class":408},[398,65552,65553,65555,65557],{"class":400,"line":9993},[398,65554,55600],{"class":408},[398,65556,93],{"class":51493},[398,65558,51500],{"class":408},[398,65560,65561,65563,65565,65568,65570],{"class":400,"line":10018},[398,65562,55427],{"class":408},[398,65564,93],{"class":51493},[398,65566,65567],{"class":408},">商品\u003C\u002F",[398,65569,93],{"class":51493},[398,65571,51500],{"class":408},[398,65573,65574,65576,65578,65581,65583],{"class":400,"line":10041},[398,65575,55427],{"class":408},[398,65577,93],{"class":51493},[398,65579,65580],{"class":408},">商家\u003C\u002F",[398,65582,93],{"class":51493},[398,65584,51500],{"class":408},[398,65586,65587,65589,65591,65594,65596],{"class":400,"line":10065},[398,65588,55427],{"class":408},[398,65590,93],{"class":51493},[398,65592,65593],{"class":408},">价格\u003C\u002F",[398,65595,93],{"class":51493},[398,65597,51500],{"class":408},[398,65599,65600,65602,65604],{"class":400,"line":10070},[398,65601,51969],{"class":408},[398,65603,90],{"class":51493},[398,65605,51500],{"class":408},[398,65607,65608,65610,65612],{"class":400,"line":10075},[398,65609,51534],{"class":408},[398,65611,90],{"class":51493},[398,65613,51500],{"class":408},[398,65615,65616,65618,65620],{"class":400,"line":10080},[398,65617,55427],{"class":408},[398,65619,106],{"class":51493},[398,65621,51500],{"class":408},[398,65623,65624,65626,65628,65630,65632,65634,65636,65638,65641,65643,65645,65648],{"class":400,"line":10089},[398,65625,55495],{"class":408},[398,65627,54014],{"class":51493},[398,65629,54017],{"class":2239},[398,65631,454],{"class":408},[398,65633,54022],{"class":513},[398,65635,15197],{"class":2239},[398,65637,454],{"class":408},[398,65639,65640],{"class":513},"\"check\"",[398,65642,53679],{"class":2239},[398,65644,454],{"class":408},[398,65646,65647],{"class":513},"\"ck\"",[398,65649,51500],{"class":408},[398,65651,65652,65654,65656],{"class":400,"line":10094},[398,65653,55600],{"class":408},[398,65655,106],{"class":51493},[398,65657,51500],{"class":408},[398,65659,65660,65662,65664,65666,65668],{"class":400,"line":10100},[398,65661,55427],{"class":408},[398,65663,106],{"class":51493},[398,65665,61366],{"class":408},[398,65667,106],{"class":51493},[398,65669,51500],{"class":408},[398,65671,65672,65674,65676,65679,65681],{"class":400,"line":10121},[398,65673,55427],{"class":408},[398,65675,106],{"class":51493},[398,65677,65678],{"class":408},">小米\u003C\u002F",[398,65680,106],{"class":51493},[398,65682,51500],{"class":408},[398,65684,65685,65687,65689,65692,65694],{"class":400,"line":10127},[398,65686,55427],{"class":408},[398,65688,106],{"class":51493},[398,65690,65691],{"class":408},">￥1999\u003C\u002F",[398,65693,106],{"class":51493},[398,65695,51500],{"class":408},[398,65697,65698,65700,65702],{"class":400,"line":10141},[398,65699,51969],{"class":408},[398,65701,90],{"class":51493},[398,65703,51500],{"class":408},[398,65705,65706,65708,65710],{"class":400,"line":10147},[398,65707,51534],{"class":408},[398,65709,90],{"class":51493},[398,65711,51500],{"class":408},[398,65713,65714,65716,65718],{"class":400,"line":10174},[398,65715,55427],{"class":408},[398,65717,106],{"class":51493},[398,65719,51500],{"class":408},[398,65721,65722,65724,65726,65728,65730,65732,65734,65736,65738,65740,65742,65744],{"class":400,"line":10183},[398,65723,55495],{"class":408},[398,65725,54014],{"class":51493},[398,65727,54017],{"class":2239},[398,65729,454],{"class":408},[398,65731,54022],{"class":513},[398,65733,15197],{"class":2239},[398,65735,454],{"class":408},[398,65737,65640],{"class":513},[398,65739,53679],{"class":2239},[398,65741,454],{"class":408},[398,65743,65647],{"class":513},[398,65745,51500],{"class":408},[398,65747,65748,65750,65752],{"class":400,"line":10189},[398,65749,55600],{"class":408},[398,65751,106],{"class":51493},[398,65753,51500],{"class":408},[398,65755,65756,65758,65760,65763,65765],{"class":400,"line":10197},[398,65757,55427],{"class":408},[398,65759,106],{"class":51493},[398,65761,65762],{"class":408},">小米净水器\u003C\u002F",[398,65764,106],{"class":51493},[398,65766,51500],{"class":408},[398,65768,65769,65771,65773,65775,65777],{"class":400,"line":10202},[398,65770,55427],{"class":408},[398,65772,106],{"class":51493},[398,65774,65678],{"class":408},[398,65776,106],{"class":51493},[398,65778,51500],{"class":408},[398,65780,65781,65783,65785,65788,65790],{"class":400,"line":16881},[398,65782,55427],{"class":408},[398,65784,106],{"class":51493},[398,65786,65787],{"class":408},">￥4999\u003C\u002F",[398,65789,106],{"class":51493},[398,65791,51500],{"class":408},[398,65793,65794,65796,65798],{"class":400,"line":16887},[398,65795,51969],{"class":408},[398,65797,90],{"class":51493},[398,65799,51500],{"class":408},[398,65801,65802,65804,65806],{"class":400,"line":16910},[398,65803,51534],{"class":408},[398,65805,90],{"class":51493},[398,65807,51500],{"class":408},[398,65809,65810,65812,65814],{"class":400,"line":16916},[398,65811,55427],{"class":408},[398,65813,106],{"class":51493},[398,65815,51500],{"class":408},[398,65817,65818,65820,65822,65824,65826,65828,65830,65832,65834,65836,65838,65840],{"class":400,"line":16939},[398,65819,55495],{"class":408},[398,65821,54014],{"class":51493},[398,65823,54017],{"class":2239},[398,65825,454],{"class":408},[398,65827,54022],{"class":513},[398,65829,15197],{"class":2239},[398,65831,454],{"class":408},[398,65833,65640],{"class":513},[398,65835,53679],{"class":2239},[398,65837,454],{"class":408},[398,65839,65647],{"class":513},[398,65841,51500],{"class":408},[398,65843,65844,65846,65848],{"class":400,"line":16953},[398,65845,55600],{"class":408},[398,65847,106],{"class":51493},[398,65849,51500],{"class":408},[398,65851,65852,65854,65856,65859,65861],{"class":400,"line":16973},[398,65853,55427],{"class":408},[398,65855,106],{"class":51493},[398,65857,65858],{"class":408},">小米电视\u003C\u002F",[398,65860,106],{"class":51493},[398,65862,51500],{"class":408},[398,65864,65865,65867,65869,65871,65873],{"class":400,"line":16979},[398,65866,55427],{"class":408},[398,65868,106],{"class":51493},[398,65870,65678],{"class":408},[398,65872,106],{"class":51493},[398,65874,51500],{"class":408},[398,65876,65877,65879,65881,65884,65886],{"class":400,"line":16990},[398,65878,55427],{"class":408},[398,65880,106],{"class":51493},[398,65882,65883],{"class":408},">￥5999\u003C\u002F",[398,65885,106],{"class":51493},[398,65887,51500],{"class":408},[398,65889,65890,65892,65894],{"class":400,"line":17013},[398,65891,51969],{"class":408},[398,65893,90],{"class":51493},[398,65895,51500],{"class":408},[398,65897,65898,65900,65902],{"class":400,"line":17035},[398,65899,52610],{"class":408},[398,65901,84],{"class":51493},[398,65903,51500],{"class":408},[398,65905,65906,65908,65910],{"class":400,"line":17040},[398,65907,52337],{"class":408},[398,65909,52006],{"class":51493},[398,65911,51500],{"class":408},[398,65913,65914],{"class":400,"line":17046},[398,65915,65916],{"class":467},"    \u002F\u002F 1. 获取大复选框\n",[398,65918,65919,65921,65924,65926,65928,65930,65932,65935],{"class":400,"line":17060},[398,65920,11498],{"class":404},[398,65922,65923],{"class":457}," checkAll",[398,65925,13841],{"class":404},[398,65927,54589],{"class":408},[398,65929,54592],{"class":2239},[398,65931,409],{"class":408},[398,65933,65934],{"class":513},"'#checkAll'",[398,65936,415],{"class":408},[398,65938,65939],{"class":400,"line":17073},[398,65940,65941],{"class":467},"    \u002F\u002F 2. 获取所有的小复选框\n",[398,65943,65944,65946,65949,65951,65953,65955,65957,65960],{"class":400,"line":17078},[398,65945,11498],{"class":404},[398,65947,65948],{"class":457}," cks",[398,65950,13841],{"class":404},[398,65952,54589],{"class":408},[398,65954,55874],{"class":2239},[398,65956,409],{"class":408},[398,65958,65959],{"class":513},"'.ck'",[398,65961,415],{"class":408},[398,65963,65964],{"class":400,"line":17092},[398,65965,65966],{"class":467},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[398,65968,65969,65972,65974,65976,65978,65980,65982],{"class":400,"line":17097},[398,65970,65971],{"class":408},"    checkAll.",[398,65973,58006],{"class":2239},[398,65975,409],{"class":408},[398,65977,58011],{"class":513},[398,65979,12712],{"class":408},[398,65981,54642],{"class":404},[398,65983,54645],{"class":408},[398,65985,65986],{"class":400,"line":17103},[398,65987,65988],{"class":467},"      \u002F\u002F 得到当前大复选框的选中状态\n",[398,65990,65991,65994],{"class":400,"line":17108},[398,65992,65993],{"class":467},"      \u002F\u002F console.log(checkAll.checked)",[398,65995,65996],{"class":467},"  \u002F\u002F 得到 是 true 或者是 false\n",[398,65998,65999],{"class":400,"line":17122},[398,66000,66001],{"class":467},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[398,66003,66004,66006,66008,66010,66012,66014,66016,66018,66020,66023,66025,66027,66029],{"class":400,"line":17127},[398,66005,52477],{"class":404},[398,66007,1934],{"class":408},[398,66009,52040],{"class":404},[398,66011,9715],{"class":408},[398,66013,454],{"class":404},[398,66015,4369],{"class":457},[398,66017,9722],{"class":408},[398,66019,1312],{"class":404},[398,66021,66022],{"class":408}," cks.",[398,66024,52161],{"class":457},[398,66026,3490],{"class":408},[398,66028,2568],{"class":404},[398,66030,12719],{"class":408},[398,66032,66033,66036,66038,66041],{"class":400,"line":17132},[398,66034,66035],{"class":408},"        cks[i].checked ",[398,66037,454],{"class":404},[398,66039,66040],{"class":457}," this",[398,66042,66043],{"class":408},".checked\n",[398,66045,66046],{"class":400,"line":17146},[398,66047,52591],{"class":408},[398,66049,66050],{"class":400,"line":17158},[398,66051,33654],{"class":408},[398,66053,66054],{"class":400,"line":17163},[398,66055,66056],{"class":467},"    \u002F\u002F 5. 小复选框控制大复选框\n",[398,66058,66059],{"class":400,"line":17176},[398,66060,2676],{"emptyLinePlaceholder":328},[398,66062,66063,66065,66067,66069,66071,66073,66075,66077,66079,66081,66083,66085,66087],{"class":400,"line":17181},[398,66064,3477],{"class":404},[398,66066,1934],{"class":408},[398,66068,52040],{"class":404},[398,66070,9715],{"class":408},[398,66072,454],{"class":404},[398,66074,4369],{"class":457},[398,66076,9722],{"class":408},[398,66078,1312],{"class":404},[398,66080,66022],{"class":408},[398,66082,52161],{"class":457},[398,66084,3490],{"class":408},[398,66086,2568],{"class":404},[398,66088,12719],{"class":408},[398,66090,66091],{"class":400,"line":17186},[398,66092,66093],{"class":467},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[398,66095,66096,66099,66101,66103,66105,66107,66109],{"class":400,"line":17191},[398,66097,66098],{"class":408},"      cks[i].",[398,66100,58006],{"class":2239},[398,66102,409],{"class":408},[398,66104,58011],{"class":513},[398,66106,12712],{"class":408},[398,66108,54642],{"class":404},[398,66110,54645],{"class":408},[398,66112,66113],{"class":400,"line":17204},[398,66114,66115],{"class":467},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[398,66117,66118],{"class":400,"line":17209},[398,66119,66120],{"class":467},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[398,66122,66123],{"class":400,"line":32826},[398,66124,66125],{"class":467},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[398,66127,66128],{"class":400,"line":32832},[398,66129,66130],{"class":467},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[398,66132,66133,66136,66138,66140,66142,66144,66147,66149,66151,66153,66155],{"class":400,"line":32838},[398,66134,66135],{"class":408},"        checkAll.checked ",[398,66137,454],{"class":404},[398,66139,54589],{"class":408},[398,66141,55874],{"class":2239},[398,66143,409],{"class":408},[398,66145,66146],{"class":513},"'.ck:checked'",[398,66148,31019],{"class":408},[398,66150,52161],{"class":457},[398,66152,58099],{"class":404},[398,66154,66022],{"class":408},[398,66156,56024],{"class":457},[398,66158,66159],{"class":400,"line":32844},[398,66160,65008],{"class":408},[398,66162,66163],{"class":400,"line":32850},[398,66164,2463],{"class":408},[398,66166,66167,66169,66171],{"class":400,"line":32861},[398,66168,52610],{"class":408},[398,66170,52006],{"class":51493},[398,66172,51500],{"class":408},[398,66174,66175,66177,66179],{"class":400,"line":32867},[398,66176,51978],{"class":408},[398,66178,51993],{"class":51493},[398,66180,51500],{"class":408},[398,66182,66183],{"class":400,"line":32887},[398,66184,2676],{"emptyLinePlaceholder":328},[398,66186,66187,66189,66191],{"class":400,"line":32893},[398,66188,51978],{"class":408},[398,66190,50828],{"class":51493},[398,66192,51500],{"class":408},[19,66194,66195],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,66197,66198],{},"用好之间比较得到的布尔值！！！",[19,66200,66201,66202,66205,66206,1934,66209,986,66211,66214],{},"在 JS 里访问的时候，",[395,66203,66204],{},"checkbox.checked"," 是一个 ",[23,66207,66208],{},"布尔值",[395,66210,1638],{},[395,66212,66213],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,66216,66217,66218,66221,66222],{},"HTML 的 ",[395,66219,66220],{},"checked=\"checked\""," 只是 ",[23,66223,66224,66225,66228],{},"初始值；JS 的 ",[395,66226,66227],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,66230,66231],{},"：checked是一个伪类选择器",[19,66233,66234],{},[1738,66235],{"alt":316,"src":66236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,66238,66239,66242],{},[66240,66241],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,66244,66245],{},[1738,66246],{"alt":316,"src":66247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[343,66249,66251],{"id":66250},"_33-dom事件进阶","3.3 DOM事件进阶",[14,66253,66255],{"id":66254},"_331-事件流","3.3.1 事件流",[19,66257,66258],{},[1738,66259],{"alt":316,"src":66260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22275,66262,66264],{"id":66263},"_3311-事件捕获","3.3.1.1 事件捕获",[19,66266,66267],{},[1738,66268],{"alt":316,"src":66269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[389,66271,66273],{"className":50826,"code":66272,"language":50828,"meta":316,"style":316},"\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",[395,66274,66275,66285,66299,66303,66311,66325,66345,66357,66365,66372,66384,66396,66406,66410,66414,66421,66433,66445,66455,66459,66467,66475,66479,66487,66502,66521,66529,66537,66557,66577,66593,66604,66612,66629,66640,66648,66665,66676,66684,66692,66700,66704],{"__ignoreMap":316},[398,66276,66277,66279,66281,66283],{"class":400,"line":401},[398,66278,51490],{"class":408},[398,66280,51494],{"class":51493},[398,66282,51497],{"class":2239},[398,66284,51500],{"class":408},[398,66286,66287,66289,66291,66293,66295,66297],{"class":400,"line":317},[398,66288,1312],{"class":408},[398,66290,50828],{"class":51493},[398,66292,51509],{"class":2239},[398,66294,454],{"class":408},[398,66296,51514],{"class":513},[398,66298,51500],{"class":408},[398,66300,66301],{"class":400,"line":320},[398,66302,2676],{"emptyLinePlaceholder":328},[398,66304,66305,66307,66309],{"class":400,"line":1470},[398,66306,1312],{"class":408},[398,66308,51527],{"class":51493},[398,66310,51500],{"class":408},[398,66312,66313,66315,66317,66319,66321,66323],{"class":400,"line":1476},[398,66314,52337],{"class":408},[398,66316,51537],{"class":51493},[398,66318,51540],{"class":2239},[398,66320,454],{"class":408},[398,66322,51545],{"class":513},[398,66324,51500],{"class":408},[398,66326,66327,66329,66331,66333,66335,66337,66339,66341,66343],{"class":400,"line":1490},[398,66328,52337],{"class":408},[398,66330,51537],{"class":51493},[398,66332,15197],{"class":2239},[398,66334,454],{"class":408},[398,66336,51584],{"class":513},[398,66338,51564],{"class":2239},[398,66340,454],{"class":408},[398,66342,51591],{"class":513},[398,66344,51500],{"class":408},[398,66346,66347,66349,66351,66353,66355],{"class":400,"line":1496},[398,66348,52337],{"class":408},[398,66350,51600],{"class":51493},[398,66352,51603],{"class":408},[398,66354,51600],{"class":51493},[398,66356,51500],{"class":408},[398,66358,66359,66361,66363],{"class":400,"line":1587},[398,66360,52337],{"class":408},[398,66362,5403],{"class":51493},[398,66364,51500],{"class":408},[398,66366,66367,66370],{"class":400,"line":1593},[398,66368,66369],{"class":2239},"    .father",[398,66371,15849],{"class":408},[398,66373,66374,66376,66378,66380,66382],{"class":400,"line":1605},[398,66375,54964],{"class":457},[398,66377,51630],{"class":408},[398,66379,65267],{"class":457},[398,66381,51685],{"class":404},[398,66383,1566],{"class":408},[398,66385,66386,66388,66390,66392,66394],{"class":400,"line":1888},[398,66387,54978],{"class":457},[398,66389,51630],{"class":408},[398,66391,65267],{"class":457},[398,66393,51685],{"class":404},[398,66395,1566],{"class":408},[398,66397,66398,66400,66402,66404],{"class":400,"line":1893},[398,66399,55077],{"class":457},[398,66401,51630],{"class":408},[398,66403,51838],{"class":457},[398,66405,1566],{"class":408},[398,66407,66408],{"class":400,"line":1899},[398,66409,2463],{"class":408},[398,66411,66412],{"class":400,"line":1904},[398,66413,2676],{"emptyLinePlaceholder":328},[398,66415,66416,66419],{"class":400,"line":1918},[398,66417,66418],{"class":2239},"    .son",[398,66420,15849],{"class":408},[398,66422,66423,66425,66427,66429,66431],{"class":400,"line":1923},[398,66424,54964],{"class":457},[398,66426,51630],{"class":408},[398,66428,1998],{"class":457},[398,66430,51685],{"class":404},[398,66432,1566],{"class":408},[398,66434,66435,66437,66439,66441,66443],{"class":400,"line":1929},[398,66436,54978],{"class":457},[398,66438,51630],{"class":408},[398,66440,1998],{"class":457},[398,66442,51685],{"class":404},[398,66444,1566],{"class":408},[398,66446,66447,66449,66451,66453],{"class":400,"line":1950},[398,66448,55077],{"class":457},[398,66450,51630],{"class":408},[398,66452,55082],{"class":457},[398,66454,1566],{"class":408},[398,66456,66457],{"class":400,"line":1955},[398,66458,2463],{"class":408},[398,66460,66461,66463,66465],{"class":400,"line":1969},[398,66462,52610],{"class":408},[398,66464,5403],{"class":51493},[398,66466,51500],{"class":408},[398,66468,66469,66471,66473],{"class":400,"line":1974},[398,66470,51978],{"class":408},[398,66472,51527],{"class":51493},[398,66474,51500],{"class":408},[398,66476,66477],{"class":400,"line":2003},[398,66478,2676],{"emptyLinePlaceholder":328},[398,66480,66481,66483,66485],{"class":400,"line":2008},[398,66482,1312],{"class":408},[398,66484,51993],{"class":51493},[398,66486,51500],{"class":408},[398,66488,66489,66491,66493,66495,66497,66500],{"class":400,"line":2025},[398,66490,52337],{"class":408},[398,66492,51804],{"class":51493},[398,66494,53679],{"class":2239},[398,66496,454],{"class":408},[398,66498,66499],{"class":513},"\"father\"",[398,66501,51500],{"class":408},[398,66503,66504,66506,66508,66510,66512,66515,66517,66519],{"class":400,"line":2030},[398,66505,51534],{"class":408},[398,66507,51804],{"class":51493},[398,66509,53679],{"class":2239},[398,66511,454],{"class":408},[398,66513,66514],{"class":513},"\"son\"",[398,66516,55507],{"class":408},[398,66518,51804],{"class":51493},[398,66520,51500],{"class":408},[398,66522,66523,66525,66527],{"class":400,"line":2035},[398,66524,52610],{"class":408},[398,66526,51804],{"class":51493},[398,66528,51500],{"class":408},[398,66530,66531,66533,66535],{"class":400,"line":2040},[398,66532,52337],{"class":408},[398,66534,52006],{"class":51493},[398,66536,51500],{"class":408},[398,66538,66539,66541,66544,66546,66548,66550,66552,66555],{"class":400,"line":2054},[398,66540,11498],{"class":404},[398,66542,66543],{"class":457}," fa",[398,66545,13841],{"class":404},[398,66547,54589],{"class":408},[398,66549,54592],{"class":2239},[398,66551,409],{"class":408},[398,66553,66554],{"class":513},"'.father'",[398,66556,415],{"class":408},[398,66558,66559,66561,66564,66566,66568,66570,66572,66575],{"class":400,"line":2059},[398,66560,11498],{"class":404},[398,66562,66563],{"class":457}," son",[398,66565,13841],{"class":404},[398,66567,54589],{"class":408},[398,66569,54592],{"class":2239},[398,66571,409],{"class":408},[398,66573,66574],{"class":513},"'.son'",[398,66576,415],{"class":408},[398,66578,66579,66581,66583,66585,66587,66589,66591],{"class":400,"line":2853},[398,66580,52600],{"class":408},[398,66582,58006],{"class":2239},[398,66584,409],{"class":408},[398,66586,58011],{"class":513},[398,66588,12712],{"class":408},[398,66590,54642],{"class":404},[398,66592,54645],{"class":408},[398,66594,66595,66597,66599,66602],{"class":400,"line":2867},[398,66596,59118],{"class":2239},[398,66598,409],{"class":408},[398,66600,66601],{"class":513},"'woshiu1'",[398,66603,415],{"class":408},[398,66605,66606,66608,66610],{"class":400,"line":2875},[398,66607,54728],{"class":408},[398,66609,1638],{"class":457},[398,66611,415],{"class":408},[398,66613,66614,66617,66619,66621,66623,66625,66627],{"class":400,"line":2880},[398,66615,66616],{"class":408},"    fa.",[398,66618,58006],{"class":2239},[398,66620,409],{"class":408},[398,66622,58011],{"class":513},[398,66624,12712],{"class":408},[398,66626,54642],{"class":404},[398,66628,54645],{"class":408},[398,66630,66631,66633,66635,66638],{"class":400,"line":2886},[398,66632,59118],{"class":2239},[398,66634,409],{"class":408},[398,66636,66637],{"class":513},"'1'",[398,66639,415],{"class":408},[398,66641,66642,66644,66646],{"class":400,"line":2892},[398,66643,54728],{"class":408},[398,66645,1638],{"class":457},[398,66647,415],{"class":408},[398,66649,66650,66653,66655,66657,66659,66661,66663],{"class":400,"line":2897},[398,66651,66652],{"class":408},"    son.",[398,66654,58006],{"class":2239},[398,66656,409],{"class":408},[398,66658,58011],{"class":513},[398,66660,12712],{"class":408},[398,66662,54642],{"class":404},[398,66664,54645],{"class":408},[398,66666,66667,66669,66671,66674],{"class":400,"line":8225},[398,66668,59118],{"class":2239},[398,66670,409],{"class":408},[398,66672,66673],{"class":513},"'2'",[398,66675,415],{"class":408},[398,66677,66678,66680,66682],{"class":400,"line":8249},[398,66679,54728],{"class":408},[398,66681,1638],{"class":457},[398,66683,415],{"class":408},[398,66685,66686,66688,66690],{"class":400,"line":8254},[398,66687,52610],{"class":408},[398,66689,52006],{"class":51493},[398,66691,51500],{"class":408},[398,66693,66694,66696,66698],{"class":400,"line":8260},[398,66695,51978],{"class":408},[398,66697,51993],{"class":51493},[398,66699,51500],{"class":408},[398,66701,66702],{"class":400,"line":8287},[398,66703,2676],{"emptyLinePlaceholder":328},[398,66705,66706,66708,66710],{"class":400,"line":8292},[398,66707,51978],{"class":408},[398,66709,50828],{"class":51493},[398,66711,51500],{"class":408},[19,66713,66714],{},[1738,66715],{"alt":316,"src":66716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,66718,66719],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22275,66721,66723],{"id":66722},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,66725,66726],{},[1738,66727],{"alt":316,"src":66728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,66730,66731],{},"反着来",[19,66733,66734],{},"注意是同名事件，比如都是‘click’",[22275,66736,66738],{"id":66737},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,66740,66741],{},[1738,66742],{"alt":316,"src":66743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22275,66745,66747],{"id":66746},"_3314-解绑事件","3.3.1.4 解绑事件",[19,66749,66750],{},[1738,66751],{"alt":316,"src":66752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,66754,66755],{},[1738,66756],{"alt":316,"src":66757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22275,66759,66761],{"id":66760},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[38,66763,66764],{},[41,66765,66766],{},"事件类型的区别",[19,66768,66769],{},[1738,66770],{"alt":316,"src":66771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,66773,66774],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[38,66776,66777],{"start":317},[41,66778,66779],{},"注册事件的区别",[19,66781,66782],{},[1738,66783],{"alt":316,"src":66784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22275,66786,66788],{"id":66787},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,66790,66791],{},[1738,66792],{"alt":316,"src":66793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,66795,66796],{},[1738,66797],{"alt":316,"src":66798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[389,66800,66802],{"className":53260,"code":66801,"language":53262,"meta":316,"style":316},"\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",[395,66803,66804,66812,66829,66852,66860,66865,66870,66875,66879,66887,66895],{"__ignoreMap":316},[398,66805,66806,66808,66810],{"class":400,"line":401},[398,66807,1312],{"class":408},[398,66809,51993],{"class":51493},[398,66811,51500],{"class":408},[398,66813,66814,66816,66819,66822,66824,66827],{"class":400,"line":317},[398,66815,52337],{"class":408},[398,66817,66818],{"class":51493},"form",[398,66820,66821],{"class":2239}," action",[398,66823,454],{"class":408},[398,66825,66826],{"class":513},"\"http:\u002F\u002Fwww.itcast.cn\"",[398,66828,51500],{"class":408},[398,66830,66831,66833,66835,66837,66839,66842,66845,66847,66850],{"class":400,"line":320},[398,66832,51534],{"class":408},[398,66834,54014],{"class":51493},[398,66836,54017],{"class":2239},[398,66838,454],{"class":408},[398,66840,66841],{"class":513},"\"submit\"",[398,66843,66844],{"class":2239}," value",[398,66846,454],{"class":408},[398,66848,66849],{"class":513},"\"免费注册\"",[398,66851,51500],{"class":408},[398,66853,66854,66856,66858],{"class":400,"line":1470},[398,66855,51534],{"class":408},[398,66857,52006],{"class":51493},[398,66859,51500],{"class":408},[398,66861,66862],{"class":400,"line":1476},[398,66863,66864],{"class":408},"      const form = document.querySelector('form')\n",[398,66866,66867],{"class":400,"line":1490},[398,66868,66869],{"class":408},"      form.addEventListener('submit', function (e) {\n",[398,66871,66872],{"class":400,"line":1496},[398,66873,66874],{"class":408},"        e.preventDefault()\n",[398,66876,66877],{"class":400,"line":1587},[398,66878,65008],{"class":408},[398,66880,66881,66883,66885],{"class":400,"line":1593},[398,66882,51969],{"class":408},[398,66884,52006],{"class":51493},[398,66886,51500],{"class":408},[398,66888,66889,66891,66893],{"class":400,"line":1605},[398,66890,52610],{"class":408},[398,66892,66818],{"class":51493},[398,66894,51500],{"class":408},[398,66896,66897,66899,66901],{"class":400,"line":1888},[398,66898,51978],{"class":408},[398,66900,51993],{"class":51493},[398,66902,51500],{"class":408},[19,66904,66905],{},"点击不在跳转！！！",[14,66907,66909],{"id":66908},"_332-事件委托","3.3.2 事件委托",[19,66911,66912],{},[1738,66913],{"alt":316,"src":66914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[389,66916,66918],{"className":50826,"code":66917,"language":50828,"meta":316,"style":316},"\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",[395,66919,66920,66930,66944,66948,66956,66970,66990,67002,67010,67014,67022,67030,67042,67054,67066,67078,67090,67103,67111,67119,67124,67143,67164,67169,67174,67179,67184,67193,67197,67207,67211,67216,67221,67235,67245,67249,67253,67261,67269,67273],{"__ignoreMap":316},[398,66921,66922,66924,66926,66928],{"class":400,"line":401},[398,66923,51490],{"class":408},[398,66925,51494],{"class":51493},[398,66927,51497],{"class":2239},[398,66929,51500],{"class":408},[398,66931,66932,66934,66936,66938,66940,66942],{"class":400,"line":317},[398,66933,1312],{"class":408},[398,66935,50828],{"class":51493},[398,66937,51509],{"class":2239},[398,66939,454],{"class":408},[398,66941,51514],{"class":513},[398,66943,51500],{"class":408},[398,66945,66946],{"class":400,"line":320},[398,66947,2676],{"emptyLinePlaceholder":328},[398,66949,66950,66952,66954],{"class":400,"line":1470},[398,66951,1312],{"class":408},[398,66953,51527],{"class":51493},[398,66955,51500],{"class":408},[398,66957,66958,66960,66962,66964,66966,66968],{"class":400,"line":1476},[398,66959,52337],{"class":408},[398,66961,51537],{"class":51493},[398,66963,51540],{"class":2239},[398,66965,454],{"class":408},[398,66967,51545],{"class":513},[398,66969,51500],{"class":408},[398,66971,66972,66974,66976,66978,66980,66982,66984,66986,66988],{"class":400,"line":1490},[398,66973,52337],{"class":408},[398,66975,51537],{"class":51493},[398,66977,15197],{"class":2239},[398,66979,454],{"class":408},[398,66981,51584],{"class":513},[398,66983,51564],{"class":2239},[398,66985,454],{"class":408},[398,66987,51591],{"class":513},[398,66989,51500],{"class":408},[398,66991,66992,66994,66996,66998,67000],{"class":400,"line":1496},[398,66993,52337],{"class":408},[398,66995,51600],{"class":51493},[398,66997,51603],{"class":408},[398,66999,51600],{"class":51493},[398,67001,51500],{"class":408},[398,67003,67004,67006,67008],{"class":400,"line":1587},[398,67005,51978],{"class":408},[398,67007,51527],{"class":51493},[398,67009,51500],{"class":408},[398,67011,67012],{"class":400,"line":1593},[398,67013,2676],{"emptyLinePlaceholder":328},[398,67015,67016,67018,67020],{"class":400,"line":1605},[398,67017,1312],{"class":408},[398,67019,51993],{"class":51493},[398,67021,51500],{"class":408},[398,67023,67024,67026,67028],{"class":400,"line":1888},[398,67025,52337],{"class":408},[398,67027,67],{"class":51493},[398,67029,51500],{"class":408},[398,67031,67032,67034,67036,67038,67040],{"class":400,"line":1893},[398,67033,51534],{"class":408},[398,67035,41],{"class":51493},[398,67037,54159],{"class":408},[398,67039,41],{"class":51493},[398,67041,51500],{"class":408},[398,67043,67044,67046,67048,67050,67052],{"class":400,"line":1899},[398,67045,51534],{"class":408},[398,67047,41],{"class":51493},[398,67049,54178],{"class":408},[398,67051,41],{"class":51493},[398,67053,51500],{"class":408},[398,67055,67056,67058,67060,67062,67064],{"class":400,"line":1904},[398,67057,51534],{"class":408},[398,67059,41],{"class":51493},[398,67061,54197],{"class":408},[398,67063,41],{"class":51493},[398,67065,51500],{"class":408},[398,67067,67068,67070,67072,67074,67076],{"class":400,"line":1918},[398,67069,51534],{"class":408},[398,67071,41],{"class":51493},[398,67073,54216],{"class":408},[398,67075,41],{"class":51493},[398,67077,51500],{"class":408},[398,67079,67080,67082,67084,67086,67088],{"class":400,"line":1923},[398,67081,51534],{"class":408},[398,67083,41],{"class":51493},[398,67085,54235],{"class":408},[398,67087,41],{"class":51493},[398,67089,51500],{"class":408},[398,67091,67092,67094,67096,67099,67101],{"class":400,"line":1929},[398,67093,51534],{"class":408},[398,67095,19],{"class":51493},[398,67097,67098],{"class":408},">我不需要变色\u003C\u002F",[398,67100,19],{"class":51493},[398,67102,51500],{"class":408},[398,67104,67105,67107,67109],{"class":400,"line":1950},[398,67106,52610],{"class":408},[398,67108,67],{"class":51493},[398,67110,51500],{"class":408},[398,67112,67113,67115,67117],{"class":400,"line":1955},[398,67114,52337],{"class":408},[398,67116,52006],{"class":51493},[398,67118,51500],{"class":408},[398,67120,67121],{"class":400,"line":1969},[398,67122,67123],{"class":467},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[398,67125,67126,67128,67130,67132,67134,67136,67138,67141],{"class":400,"line":1974},[398,67127,11498],{"class":404},[398,67129,61485],{"class":457},[398,67131,13841],{"class":404},[398,67133,54589],{"class":408},[398,67135,54592],{"class":2239},[398,67137,409],{"class":408},[398,67139,67140],{"class":513},"'ul'",[398,67142,415],{"class":408},[398,67144,67145,67148,67150,67152,67154,67156,67158,67160,67162],{"class":400,"line":2003},[398,67146,67147],{"class":408},"    ul.",[398,67149,58006],{"class":2239},[398,67151,409],{"class":408},[398,67153,58011],{"class":513},[398,67155,12712],{"class":408},[398,67157,54642],{"class":404},[398,67159,1934],{"class":408},[398,67161,483],{"class":5493},[398,67163,12719],{"class":408},[398,67165,67166],{"class":400,"line":2008},[398,67167,67168],{"class":467},"      \u002F\u002F alert(1)\n",[398,67170,67171],{"class":400,"line":2025},[398,67172,67173],{"class":467},"      \u002F\u002F e.target就是我们点击的对象\n",[398,67175,67176],{"class":400,"line":2030},[398,67177,67178],{"class":467},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[398,67180,67181],{"class":400,"line":2035},[398,67182,67183],{"class":467},"      \u002F\u002F e.target.style.color = 'red'\n",[398,67185,67186,67188,67190],{"class":400,"line":2040},[398,67187,58437],{"class":408},[398,67189,58440],{"class":2239},[398,67191,67192],{"class":408},"(e)\n",[398,67194,67195],{"class":400,"line":2054},[398,67196,2676],{"emptyLinePlaceholder":328},[398,67198,67199,67201,67204],{"class":400,"line":2059},[398,67200,58437],{"class":408},[398,67202,67203],{"class":2239},"dir",[398,67205,67206],{"class":408},"(e.target)\n",[398,67208,67209],{"class":400,"line":2853},[398,67210,2676],{"emptyLinePlaceholder":328},[398,67212,67213],{"class":400,"line":2867},[398,67214,67215],{"class":467},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[398,67217,67218],{"class":400,"line":2875},[398,67219,67220],{"class":467},"      \u002F\u002F 通过tagName来进行判断\n",[398,67222,67223,67225,67228,67230,67233],{"class":400,"line":2880},[398,67224,54673],{"class":404},[398,67226,67227],{"class":408}," (e.target.tagName ",[398,67229,54679],{"class":404},[398,67231,67232],{"class":513}," 'LI'",[398,67234,12719],{"class":408},[398,67236,67237,67240,67242],{"class":400,"line":2886},[398,67238,67239],{"class":408},"        e.target.style.color ",[398,67241,454],{"class":404},[398,67243,67244],{"class":513}," 'red'\n",[398,67246,67247],{"class":400,"line":2892},[398,67248,52591],{"class":408},[398,67250,67251],{"class":400,"line":2897},[398,67252,33654],{"class":408},[398,67254,67255,67257,67259],{"class":400,"line":8225},[398,67256,52610],{"class":408},[398,67258,52006],{"class":51493},[398,67260,51500],{"class":408},[398,67262,67263,67265,67267],{"class":400,"line":8249},[398,67264,51978],{"class":408},[398,67266,51993],{"class":51493},[398,67268,51500],{"class":408},[398,67270,67271],{"class":400,"line":8254},[398,67272,2676],{"emptyLinePlaceholder":328},[398,67274,67275,67277,67279],{"class":400,"line":8260},[398,67276,51978],{"class":408},[398,67278,50828],{"class":51493},[398,67280,51500],{"class":408},[19,67282,67283],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,67285,67286],{},"if(e.target.ragName==='P') {}",[19,67288,67289],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,67291,67292],{},"通过事件委托的方式实现tab栏切换改造：",[19,67294,67295],{},"一定要记住自定义属性！！！！！！",[19,67297,67298],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,67300,67301],{},"id是自定义的属性名",[19,67303,67304],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[389,67306,67308],{"className":50826,"code":67307,"language":50828,"meta":316,"style":316},"\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",[395,67309,67310,67320,67334,67338,67346,67360,67380,67400,67412,67420,67426,67436,67446,67450,67454,67460,67472,67484,67496,67512,67516,67520,67526,67538,67550,67562,67572,67582,67586,67590,67598,67610,67620,67632,67636,67640,67648,67658,67668,67678,67682,67686,67696,67710,67722,67726,67730,67742,67752,67768,67778,67782,67786,67800,67810,67820,67824,67828,67834,67848,67852,67856,67864,67874,67878,67882,67891,67901,67905,67913,67921,67925,67933,67947,67961,67973,67981,68020,68052,68084,68116,68148,68156,68164,68178,68212,68246,68280,68314,68348,68356,68364,68372,68377,68382,68401,68406,68426,68434,68439,68452,68473,68486,68490,68495,68500,68513,68533,68561,68565,68569,68573,68581,68589,68593],{"__ignoreMap":316},[398,67311,67312,67314,67316,67318],{"class":400,"line":401},[398,67313,51490],{"class":408},[398,67315,51494],{"class":51493},[398,67317,51497],{"class":2239},[398,67319,51500],{"class":408},[398,67321,67322,67324,67326,67328,67330,67332],{"class":400,"line":317},[398,67323,1312],{"class":408},[398,67325,50828],{"class":51493},[398,67327,51509],{"class":2239},[398,67329,454],{"class":408},[398,67331,51514],{"class":513},[398,67333,51500],{"class":408},[398,67335,67336],{"class":400,"line":320},[398,67337,2676],{"emptyLinePlaceholder":328},[398,67339,67340,67342,67344],{"class":400,"line":1470},[398,67341,1312],{"class":408},[398,67343,51527],{"class":51493},[398,67345,51500],{"class":408},[398,67347,67348,67350,67352,67354,67356,67358],{"class":400,"line":1476},[398,67349,52337],{"class":408},[398,67351,51537],{"class":51493},[398,67353,51540],{"class":2239},[398,67355,454],{"class":408},[398,67357,51545],{"class":513},[398,67359,59320],{"class":408},[398,67361,67362,67364,67366,67368,67370,67372,67374,67376,67378],{"class":400,"line":1490},[398,67363,52337],{"class":408},[398,67365,51537],{"class":51493},[398,67367,51556],{"class":2239},[398,67369,454],{"class":408},[398,67371,51561],{"class":513},[398,67373,51564],{"class":2239},[398,67375,454],{"class":408},[398,67377,51569],{"class":513},[398,67379,59320],{"class":408},[398,67381,67382,67384,67386,67388,67390,67392,67394,67396,67398],{"class":400,"line":1496},[398,67383,52337],{"class":408},[398,67385,51537],{"class":51493},[398,67387,15197],{"class":2239},[398,67389,454],{"class":408},[398,67391,51584],{"class":513},[398,67393,51564],{"class":2239},[398,67395,454],{"class":408},[398,67397,51591],{"class":513},[398,67399,59320],{"class":408},[398,67401,67402,67404,67406,67408,67410],{"class":400,"line":1587},[398,67403,52337],{"class":408},[398,67405,51600],{"class":51493},[398,67407,63818],{"class":408},[398,67409,51600],{"class":51493},[398,67411,51500],{"class":408},[398,67413,67414,67416,67418],{"class":400,"line":1593},[398,67415,52337],{"class":408},[398,67417,5403],{"class":51493},[398,67419,51500],{"class":408},[398,67421,67422,67424],{"class":400,"line":1605},[398,67423,6680],{"class":51493},[398,67425,15849],{"class":408},[398,67427,67428,67430,67432,67434],{"class":400,"line":1888},[398,67429,54899],{"class":457},[398,67431,51630],{"class":408},[398,67433,593],{"class":457},[398,67435,1566],{"class":408},[398,67437,67438,67440,67442,67444],{"class":400,"line":1893},[398,67439,54888],{"class":457},[398,67441,51630],{"class":408},[398,67443,593],{"class":457},[398,67445,1566],{"class":408},[398,67447,67448],{"class":400,"line":1899},[398,67449,2463],{"class":408},[398,67451,67452],{"class":400,"line":1904},[398,67453,2676],{"emptyLinePlaceholder":328},[398,67455,67456,67458],{"class":400,"line":1918},[398,67457,63869],{"class":2239},[398,67459,15849],{"class":408},[398,67461,67462,67464,67466,67468,67470],{"class":400,"line":1923},[398,67463,54964],{"class":457},[398,67465,51630],{"class":408},[398,67467,63880],{"class":457},[398,67469,51685],{"class":404},[398,67471,1566],{"class":408},[398,67473,67474,67476,67478,67480,67482],{"class":400,"line":1929},[398,67475,54978],{"class":457},[398,67477,51630],{"class":408},[398,67479,63893],{"class":457},[398,67481,51685],{"class":404},[398,67483,1566],{"class":408},[398,67485,67486,67488,67490,67492,67494],{"class":400,"line":1950},[398,67487,54899],{"class":457},[398,67489,51630],{"class":408},[398,67491,1102],{"class":457},[398,67493,51685],{"class":404},[398,67495,1566],{"class":408},[398,67497,67498,67500,67502,67504,67506,67508,67510],{"class":400,"line":1955},[398,67499,62170],{"class":457},[398,67501,51630],{"class":408},[398,67503,619],{"class":457},[398,67505,51685],{"class":404},[398,67507,51714],{"class":457},[398,67509,62437],{"class":457},[398,67511,1566],{"class":408},[398,67513,67514],{"class":400,"line":1969},[398,67515,2463],{"class":408},[398,67517,67518],{"class":400,"line":1974},[398,67519,2676],{"emptyLinePlaceholder":328},[398,67521,67522,67524],{"class":400,"line":2003},[398,67523,63938],{"class":2239},[398,67525,15849],{"class":408},[398,67527,67528,67530,67532,67534,67536],{"class":400,"line":2008},[398,67529,54964],{"class":457},[398,67531,51630],{"class":408},[398,67533,713],{"class":457},[398,67535,730],{"class":404},[398,67537,1566],{"class":408},[398,67539,67540,67542,67544,67546,67548],{"class":400,"line":2025},[398,67541,54978],{"class":457},[398,67543,51630],{"class":408},[398,67545,1309],{"class":457},[398,67547,51685],{"class":404},[398,67549,1566],{"class":408},[398,67551,67552,67554,67556,67558,67560],{"class":400,"line":2030},[398,67553,57552],{"class":457},[398,67555,51630],{"class":408},[398,67557,1309],{"class":457},[398,67559,51685],{"class":404},[398,67561,1566],{"class":408},[398,67563,67564,67566,67568,67570],{"class":400,"line":2035},[398,67565,55202],{"class":457},[398,67567,51630],{"class":408},[398,67569,51670],{"class":457},[398,67571,1566],{"class":408},[398,67573,67574,67576,67578,67580],{"class":400,"line":2040},[398,67575,55213],{"class":457},[398,67577,51630],{"class":408},[398,67579,51861],{"class":457},[398,67581,1566],{"class":408},[398,67583,67584],{"class":400,"line":2054},[398,67585,2463],{"class":408},[398,67587,67588],{"class":400,"line":2059},[398,67589,2676],{"emptyLinePlaceholder":328},[398,67591,67592,67594,67596],{"class":400,"line":2853},[398,67593,63938],{"class":2239},[398,67595,64011],{"class":51493},[398,67597,15849],{"class":408},[398,67599,67600,67602,67604,67606,67608],{"class":400,"line":2867},[398,67601,55115],{"class":457},[398,67603,51630],{"class":408},[398,67605,1202],{"class":457},[398,67607,51685],{"class":404},[398,67609,1566],{"class":408},[398,67611,67612,67614,67616,67618],{"class":400,"line":2875},[398,67613,62527],{"class":457},[398,67615,51630],{"class":408},[398,67617,64034],{"class":457},[398,67619,1566],{"class":408},[398,67621,67622,67624,67626,67628,67630],{"class":400,"line":2880},[398,67623,62193],{"class":457},[398,67625,51630],{"class":408},[398,67627,1102],{"class":457},[398,67629,51685],{"class":404},[398,67631,1566],{"class":408},[398,67633,67634],{"class":400,"line":2886},[398,67635,2463],{"class":408},[398,67637,67638],{"class":400,"line":2892},[398,67639,2676],{"emptyLinePlaceholder":328},[398,67641,67642,67644,67646],{"class":400,"line":2897},[398,67643,63938],{"class":2239},[398,67645,61485],{"class":51493},[398,67647,15849],{"class":408},[398,67649,67650,67652,67654,67656],{"class":400,"line":8225},[398,67651,54925],{"class":457},[398,67653,51630],{"class":408},[398,67655,54930],{"class":457},[398,67657,1566],{"class":408},[398,67659,67660,67662,67664,67666],{"class":400,"line":8249},[398,67661,55202],{"class":457},[398,67663,51630],{"class":408},[398,67665,51670],{"class":457},[398,67667,1566],{"class":408},[398,67669,67670,67672,67674,67676],{"class":400,"line":8254},[398,67671,55213],{"class":457},[398,67673,51630],{"class":408},[398,67675,51773],{"class":457},[398,67677,1566],{"class":408},[398,67679,67680],{"class":400,"line":8260},[398,67681,2463],{"class":408},[398,67683,67684],{"class":400,"line":8287},[398,67685,2676],{"emptyLinePlaceholder":328},[398,67687,67688,67690,67692,67694],{"class":400,"line":8292},[398,67689,63938],{"class":2239},[398,67691,61485],{"class":51493},[398,67693,55268],{"class":51493},[398,67695,15849],{"class":408},[398,67697,67698,67700,67702,67704,67706,67708],{"class":400,"line":8298},[398,67699,54899],{"class":457},[398,67701,51630],{"class":408},[398,67703,593],{"class":457},[398,67705,9227],{"class":457},[398,67707,51685],{"class":404},[398,67709,1566],{"class":408},[398,67711,67712,67714,67716,67718,67720],{"class":400,"line":8310},[398,67713,55115],{"class":457},[398,67715,51630],{"class":408},[398,67717,951],{"class":457},[398,67719,51685],{"class":404},[398,67721,1566],{"class":408},[398,67723,67724],{"class":400,"line":8322},[398,67725,2463],{"class":408},[398,67727,67728],{"class":400,"line":8334},[398,67729,2676],{"emptyLinePlaceholder":328},[398,67731,67732,67734,67736,67738,67740],{"class":400,"line":9993},[398,67733,63938],{"class":2239},[398,67735,61485],{"class":51493},[398,67737,55268],{"class":51493},[398,67739,1674],{"class":51493},[398,67741,15849],{"class":408},[398,67743,67744,67746,67748,67750],{"class":400,"line":10018},[398,67745,64163],{"class":457},[398,67747,51630],{"class":408},[398,67749,54930],{"class":457},[398,67751,1566],{"class":408},[398,67753,67754,67756,67758,67760,67762,67764,67766],{"class":400,"line":10041},[398,67755,62425],{"class":457},[398,67757,51630],{"class":408},[398,67759,486],{"class":457},[398,67761,51685],{"class":404},[398,67763,51714],{"class":457},[398,67765,64184],{"class":457},[398,67767,1566],{"class":408},[398,67769,67770,67772,67774,67776],{"class":400,"line":10065},[398,67771,57609],{"class":457},[398,67773,51630],{"class":408},[398,67775,62562],{"class":457},[398,67777,1566],{"class":408},[398,67779,67780],{"class":400,"line":10070},[398,67781,2463],{"class":408},[398,67783,67784],{"class":400,"line":10075},[398,67785,2676],{"emptyLinePlaceholder":328},[398,67787,67788,67790,67792,67794,67796,67798],{"class":400,"line":10080},[398,67789,63938],{"class":2239},[398,67791,61485],{"class":51493},[398,67793,55268],{"class":51493},[398,67795,1674],{"class":51493},[398,67797,64217],{"class":2239},[398,67799,15849],{"class":408},[398,67801,67802,67804,67806,67808],{"class":400,"line":10089},[398,67803,61984],{"class":457},[398,67805,51630],{"class":408},[398,67807,64228],{"class":457},[398,67809,1566],{"class":408},[398,67811,67812,67814,67816,67818],{"class":400,"line":10094},[398,67813,57609],{"class":457},[398,67815,51630],{"class":408},[398,67817,64228],{"class":457},[398,67819,1566],{"class":408},[398,67821,67822],{"class":400,"line":10100},[398,67823,2463],{"class":408},[398,67825,67826],{"class":400,"line":10121},[398,67827,2676],{"emptyLinePlaceholder":328},[398,67829,67830,67832],{"class":400,"line":10127},[398,67831,64253],{"class":2239},[398,67833,15849],{"class":408},[398,67835,67836,67838,67840,67842,67844,67846],{"class":400,"line":10141},[398,67837,54888],{"class":457},[398,67839,51630],{"class":408},[398,67841,593],{"class":457},[398,67843,64266],{"class":457},[398,67845,51685],{"class":404},[398,67847,1566],{"class":408},[398,67849,67850],{"class":400,"line":10147},[398,67851,2463],{"class":408},[398,67853,67854],{"class":400,"line":10174},[398,67855,2676],{"emptyLinePlaceholder":328},[398,67857,67858,67860,67862],{"class":400,"line":10183},[398,67859,64253],{"class":2239},[398,67861,62367],{"class":2239},[398,67863,15849],{"class":408},[398,67865,67866,67868,67870,67872],{"class":400,"line":10189},[398,67867,55202],{"class":457},[398,67869,51630],{"class":408},[398,67871,54930],{"class":457},[398,67873,1566],{"class":408},[398,67875,67876],{"class":400,"line":10197},[398,67877,2463],{"class":408},[398,67879,67880],{"class":400,"line":10202},[398,67881,2676],{"emptyLinePlaceholder":328},[398,67883,67884,67886,67889],{"class":400,"line":16881},[398,67885,64253],{"class":2239},[398,67887,67888],{"class":2239}," .active",[398,67890,15849],{"class":408},[398,67892,67893,67895,67897,67899],{"class":400,"line":16887},[398,67894,55202],{"class":457},[398,67896,51630],{"class":408},[398,67898,61062],{"class":457},[398,67900,1566],{"class":408},[398,67902,67903],{"class":400,"line":16910},[398,67904,2463],{"class":408},[398,67906,67907,67909,67911],{"class":400,"line":16916},[398,67908,52610],{"class":408},[398,67910,5403],{"class":51493},[398,67912,51500],{"class":408},[398,67914,67915,67917,67919],{"class":400,"line":16939},[398,67916,51978],{"class":408},[398,67918,51527],{"class":51493},[398,67920,51500],{"class":408},[398,67922,67923],{"class":400,"line":16953},[398,67924,2676],{"emptyLinePlaceholder":328},[398,67926,67927,67929,67931],{"class":400,"line":16973},[398,67928,1312],{"class":408},[398,67930,51993],{"class":51493},[398,67932,51500],{"class":408},[398,67934,67935,67937,67939,67941,67943,67945],{"class":400,"line":16979},[398,67936,52337],{"class":408},[398,67938,51804],{"class":51493},[398,67940,53679],{"class":2239},[398,67942,454],{"class":408},[398,67944,64368],{"class":513},[398,67946,51500],{"class":408},[398,67948,67949,67951,67953,67955,67957,67959],{"class":400,"line":16990},[398,67950,51534],{"class":408},[398,67952,51804],{"class":51493},[398,67954,53679],{"class":2239},[398,67956,454],{"class":408},[398,67958,64383],{"class":513},[398,67960,51500],{"class":408},[398,67962,67963,67965,67967,67969,67971],{"class":400,"line":17013},[398,67964,55427],{"class":408},[398,67966,14],{"class":51493},[398,67968,64394],{"class":408},[398,67970,14],{"class":51493},[398,67972,51500],{"class":408},[398,67974,67975,67977,67979],{"class":400,"line":17035},[398,67976,55427],{"class":408},[398,67978,67],{"class":51493},[398,67980,51500],{"class":408},[398,67982,67983,67985,67987,67989,67991,67993,67995,67997,67999,68001,68003,68005,68007,68010,68012,68014,68016,68018],{"class":400,"line":17040},[398,67984,55495],{"class":408},[398,67986,41],{"class":51493},[398,67988,61245],{"class":408},[398,67990,640],{"class":51493},[398,67992,53679],{"class":2239},[398,67994,454],{"class":408},[398,67996,59899],{"class":513},[398,67998,61250],{"class":2239},[398,68000,454],{"class":408},[398,68002,64429],{"class":513},[398,68004,54144],{"class":2239},[398,68006,454],{"class":408},[398,68008,68009],{"class":513},"\"0\"",[398,68011,64432],{"class":408},[398,68013,640],{"class":51493},[398,68015,55507],{"class":408},[398,68017,41],{"class":51493},[398,68019,51500],{"class":408},[398,68021,68022,68024,68026,68028,68030,68032,68034,68036,68038,68040,68042,68044,68046,68048,68050],{"class":400,"line":17046},[398,68023,55495],{"class":408},[398,68025,41],{"class":51493},[398,68027,61245],{"class":408},[398,68029,640],{"class":51493},[398,68031,61250],{"class":2239},[398,68033,454],{"class":408},[398,68035,64429],{"class":513},[398,68037,54144],{"class":2239},[398,68039,454],{"class":408},[398,68041,3954],{"class":513},[398,68043,64459],{"class":408},[398,68045,640],{"class":51493},[398,68047,55507],{"class":408},[398,68049,41],{"class":51493},[398,68051,51500],{"class":408},[398,68053,68054,68056,68058,68060,68062,68064,68066,68068,68070,68072,68074,68076,68078,68080,68082],{"class":400,"line":17060},[398,68055,55495],{"class":408},[398,68057,41],{"class":51493},[398,68059,61245],{"class":408},[398,68061,640],{"class":51493},[398,68063,61250],{"class":2239},[398,68065,454],{"class":408},[398,68067,64429],{"class":513},[398,68069,54144],{"class":2239},[398,68071,454],{"class":408},[398,68073,3977],{"class":513},[398,68075,64486],{"class":408},[398,68077,640],{"class":51493},[398,68079,55507],{"class":408},[398,68081,41],{"class":51493},[398,68083,51500],{"class":408},[398,68085,68086,68088,68090,68092,68094,68096,68098,68100,68102,68104,68106,68108,68110,68112,68114],{"class":400,"line":17073},[398,68087,55495],{"class":408},[398,68089,41],{"class":51493},[398,68091,61245],{"class":408},[398,68093,640],{"class":51493},[398,68095,61250],{"class":2239},[398,68097,454],{"class":408},[398,68099,64429],{"class":513},[398,68101,54144],{"class":2239},[398,68103,454],{"class":408},[398,68105,3990],{"class":513},[398,68107,64513],{"class":408},[398,68109,640],{"class":51493},[398,68111,55507],{"class":408},[398,68113,41],{"class":51493},[398,68115,51500],{"class":408},[398,68117,68118,68120,68122,68124,68126,68128,68130,68132,68134,68136,68138,68140,68142,68144,68146],{"class":400,"line":17078},[398,68119,55495],{"class":408},[398,68121,41],{"class":51493},[398,68123,61245],{"class":408},[398,68125,640],{"class":51493},[398,68127,61250],{"class":2239},[398,68129,454],{"class":408},[398,68131,64429],{"class":513},[398,68133,54144],{"class":2239},[398,68135,454],{"class":408},[398,68137,4003],{"class":513},[398,68139,64540],{"class":408},[398,68141,640],{"class":51493},[398,68143,55507],{"class":408},[398,68145,41],{"class":51493},[398,68147,51500],{"class":408},[398,68149,68150,68152,68154],{"class":400,"line":17092},[398,68151,55600],{"class":408},[398,68153,67],{"class":51493},[398,68155,51500],{"class":408},[398,68157,68158,68160,68162],{"class":400,"line":17097},[398,68159,51969],{"class":408},[398,68161,51804],{"class":51493},[398,68163,51500],{"class":408},[398,68165,68166,68168,68170,68172,68174,68176],{"class":400,"line":17103},[398,68167,51534],{"class":408},[398,68169,51804],{"class":51493},[398,68171,53679],{"class":2239},[398,68173,454],{"class":408},[398,68175,64577],{"class":513},[398,68177,51500],{"class":408},[398,68179,68180,68182,68184,68186,68188,68190,68192,68194,68196,68198,68200,68202,68204,68206,68208,68210],{"class":400,"line":17108},[398,68181,55427],{"class":408},[398,68183,51804],{"class":51493},[398,68185,53679],{"class":2239},[398,68187,454],{"class":408},[398,68189,64592],{"class":513},[398,68191,61245],{"class":408},[398,68193,1738],{"class":51493},[398,68195,55432],{"class":2239},[398,68197,454],{"class":408},[398,68199,64603],{"class":513},[398,68201,55440],{"class":2239},[398,68203,454],{"class":408},[398,68205,7929],{"class":513},[398,68207,64612],{"class":408},[398,68209,51804],{"class":51493},[398,68211,51500],{"class":408},[398,68213,68214,68216,68218,68220,68222,68224,68226,68228,68230,68232,68234,68236,68238,68240,68242,68244],{"class":400,"line":17122},[398,68215,55427],{"class":408},[398,68217,51804],{"class":51493},[398,68219,53679],{"class":2239},[398,68221,454],{"class":408},[398,68223,62816],{"class":513},[398,68225,61245],{"class":408},[398,68227,1738],{"class":51493},[398,68229,55432],{"class":2239},[398,68231,454],{"class":408},[398,68233,64639],{"class":513},[398,68235,55440],{"class":2239},[398,68237,454],{"class":408},[398,68239,7929],{"class":513},[398,68241,64612],{"class":408},[398,68243,51804],{"class":51493},[398,68245,51500],{"class":408},[398,68247,68248,68250,68252,68254,68256,68258,68260,68262,68264,68266,68268,68270,68272,68274,68276,68278],{"class":400,"line":17127},[398,68249,55427],{"class":408},[398,68251,51804],{"class":51493},[398,68253,53679],{"class":2239},[398,68255,454],{"class":408},[398,68257,62816],{"class":513},[398,68259,61245],{"class":408},[398,68261,1738],{"class":51493},[398,68263,55432],{"class":2239},[398,68265,454],{"class":408},[398,68267,64674],{"class":513},[398,68269,55440],{"class":2239},[398,68271,454],{"class":408},[398,68273,7929],{"class":513},[398,68275,64612],{"class":408},[398,68277,51804],{"class":51493},[398,68279,51500],{"class":408},[398,68281,68282,68284,68286,68288,68290,68292,68294,68296,68298,68300,68302,68304,68306,68308,68310,68312],{"class":400,"line":17132},[398,68283,55427],{"class":408},[398,68285,51804],{"class":51493},[398,68287,53679],{"class":2239},[398,68289,454],{"class":408},[398,68291,62816],{"class":513},[398,68293,61245],{"class":408},[398,68295,1738],{"class":51493},[398,68297,55432],{"class":2239},[398,68299,454],{"class":408},[398,68301,64709],{"class":513},[398,68303,55440],{"class":2239},[398,68305,454],{"class":408},[398,68307,7929],{"class":513},[398,68309,64612],{"class":408},[398,68311,51804],{"class":51493},[398,68313,51500],{"class":408},[398,68315,68316,68318,68320,68322,68324,68326,68328,68330,68332,68334,68336,68338,68340,68342,68344,68346],{"class":400,"line":17146},[398,68317,55427],{"class":408},[398,68319,51804],{"class":51493},[398,68321,53679],{"class":2239},[398,68323,454],{"class":408},[398,68325,62816],{"class":513},[398,68327,61245],{"class":408},[398,68329,1738],{"class":51493},[398,68331,55432],{"class":2239},[398,68333,454],{"class":408},[398,68335,64744],{"class":513},[398,68337,55440],{"class":2239},[398,68339,454],{"class":408},[398,68341,7929],{"class":513},[398,68343,64612],{"class":408},[398,68345,51804],{"class":51493},[398,68347,51500],{"class":408},[398,68349,68350,68352,68354],{"class":400,"line":17158},[398,68351,51969],{"class":408},[398,68353,51804],{"class":51493},[398,68355,51500],{"class":408},[398,68357,68358,68360,68362],{"class":400,"line":17163},[398,68359,52610],{"class":408},[398,68361,51804],{"class":51493},[398,68363,51500],{"class":408},[398,68365,68366,68368,68370],{"class":400,"line":17176},[398,68367,52337],{"class":408},[398,68369,52006],{"class":51493},[398,68371,51500],{"class":408},[398,68373,68374],{"class":400,"line":17181},[398,68375,68376],{"class":467},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[398,68378,68379],{"class":400,"line":17186},[398,68380,68381],{"class":467},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[398,68383,68384,68386,68388,68390,68392,68394,68396,68399],{"class":400,"line":17191},[398,68385,11498],{"class":404},[398,68387,61485],{"class":457},[398,68389,13841],{"class":404},[398,68391,54589],{"class":408},[398,68393,54592],{"class":2239},[398,68395,409],{"class":408},[398,68397,68398],{"class":513},"'.tab-nav ul'",[398,68400,415],{"class":408},[398,68402,68403],{"class":400,"line":17204},[398,68404,68405],{"class":467},"    \u002F\u002F 2.添加事件\n",[398,68407,68408,68410,68412,68414,68416,68418,68420,68422,68424],{"class":400,"line":17209},[398,68409,67147],{"class":408},[398,68411,58006],{"class":2239},[398,68413,409],{"class":408},[398,68415,58011],{"class":513},[398,68417,12712],{"class":408},[398,68419,54642],{"class":404},[398,68421,1934],{"class":408},[398,68423,483],{"class":5493},[398,68425,12719],{"class":408},[398,68427,68428,68430,68432],{"class":400,"line":32826},[398,68429,58437],{"class":408},[398,68431,67203],{"class":2239},[398,68433,67206],{"class":408},[398,68435,68436],{"class":400,"line":32832},[398,68437,68438],{"class":467},"      \u002F\u002Fe.targer是我们点击的对象\n",[398,68440,68441,68443,68445,68447,68450],{"class":400,"line":32838},[398,68442,54673],{"class":404},[398,68444,67227],{"class":408},[398,68446,54679],{"class":404},[398,68448,68449],{"class":513}," 'A'",[398,68451,12719],{"class":408},[398,68453,68454,68456,68458,68460,68463,68465,68467,68469,68471],{"class":400,"line":32844},[398,68455,52118],{"class":408},[398,68457,54592],{"class":2239},[398,68459,409],{"class":408},[398,68461,68462],{"class":513},"'.active'",[398,68464,57196],{"class":408},[398,68466,57199],{"class":2239},[398,68468,409],{"class":408},[398,68470,64907],{"class":513},[398,68472,415],{"class":408},[398,68474,68475,68478,68480,68482,68484],{"class":400,"line":32850},[398,68476,68477],{"class":408},"        e.target.classList.",[398,68479,5611],{"class":2239},[398,68481,409],{"class":408},[398,68483,64907],{"class":513},[398,68485,415],{"class":408},[398,68487,68488],{"class":400,"line":32861},[398,68489,2676],{"emptyLinePlaceholder":328},[398,68491,68492],{"class":400,"line":32867},[398,68493,68494],{"class":467},"        \u002F\u002F 下面大盒子模块\n",[398,68496,68497],{"class":400,"line":32887},[398,68498,68499],{"class":467},"        \u002F\u002F console.log(e.target.dataset.id)\n",[398,68501,68502,68504,68506,68508,68510],{"class":400,"line":32893},[398,68503,61463],{"class":404},[398,68505,3308],{"class":457},[398,68507,13841],{"class":404},[398,68509,45759],{"class":404},[398,68511,68512],{"class":408},"e.target.dataset.id\n",[398,68514,68515,68517,68519,68521,68523,68525,68527,68529,68531],{"class":400,"line":32904},[398,68516,52118],{"class":408},[398,68518,54592],{"class":2239},[398,68520,409],{"class":408},[398,68522,64955],{"class":513},[398,68524,57196],{"class":408},[398,68526,57199],{"class":2239},[398,68528,409],{"class":408},[398,68530,64907],{"class":513},[398,68532,415],{"class":408},[398,68534,68535,68537,68539,68541,68543,68545,68547,68549,68551,68553,68555,68557,68559],{"class":400,"line":32910},[398,68536,52118],{"class":408},[398,68538,54592],{"class":2239},[398,68540,409],{"class":408},[398,68542,64981],{"class":513},[398,68544,843],{"class":408},[398,68546,45759],{"class":404},[398,68548,25396],{"class":457},[398,68550,57225],{"class":513},[398,68552,57196],{"class":408},[398,68554,5611],{"class":2239},[398,68556,409],{"class":408},[398,68558,64907],{"class":513},[398,68560,415],{"class":408},[398,68562,68563],{"class":400,"line":32916},[398,68564,2676],{"emptyLinePlaceholder":328},[398,68566,68567],{"class":400,"line":32922},[398,68568,52591],{"class":408},[398,68570,68571],{"class":400,"line":32928},[398,68572,33654],{"class":408},[398,68574,68575,68577,68579],{"class":400,"line":32934},[398,68576,52610],{"class":408},[398,68578,52006],{"class":51493},[398,68580,51500],{"class":408},[398,68582,68583,68585,68587],{"class":400,"line":32940},[398,68584,51978],{"class":408},[398,68586,51993],{"class":51493},[398,68588,51500],{"class":408},[398,68590,68591],{"class":400,"line":32946},[398,68592,2676],{"emptyLinePlaceholder":328},[398,68594,68595,68597,68599],{"class":400,"line":32966},[398,68596,51978],{"class":408},[398,68598,50828],{"class":51493},[398,68600,51500],{"class":408},[14,68602,68604],{"id":68603},"_333-页面加载事件","3.3.3 页面加载事件",[38,68606,68607],{},[41,68608,68609],{},"load",[19,68611,68612],{},[1738,68613],{"alt":316,"src":68614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,68616,68617],{},"window代表整个窗口，比document还要大",[19,68619,68620],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,68622,68623],{},"img.addEventListener('load', function () {",[19,68625,68626],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,68628,52657],{},[38,68630,68631],{"start":317},[41,68632,68633],{},"DOMContentLoaded",[19,68635,68636],{},[1738,68637],{"alt":316,"src":68638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,68640,68641],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[14,68643,68645],{"id":68644},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,68647,68648],{},[1738,68649],{"alt":316,"src":68650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,68652,68653],{},[1738,68654],{"alt":316,"src":68655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,68657,68658],{},[1738,68659],{"alt":316,"src":68660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,68662,68663],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,68665,68666],{},"获得的是数字型数据，不带单位",[19,68668,68669],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,68671,68672],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,68674,68675],{},"它是通过document.documentElement来获取",[19,68677,68678],{},[1738,68679],{"alt":316,"src":68680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,68682,68683],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[14,68685,68687],{"id":68686},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,68689,68690],{},[1738,68691],{"alt":316,"src":68692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,68694,68695],{},[1738,68696],{"alt":316,"src":68697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[14,68699,68701],{"id":68700},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,68703,68704],{},[1738,68705],{"alt":316,"src":68706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,68708,68709],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,68711,68712],{},[1738,68713],{"alt":316,"src":68714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,68716,68717],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,68719,68720],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,68722,68723],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,68725,68726],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,68728,68729],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,68731,68732],{},[1738,68733],{"alt":316,"src":68734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,68736,68737],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,68739,68740],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,68742,68743],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,68745,68746],{},"e.pageX-box.getBoundingClientRect()",[14,68748,68750],{"id":68749},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,68752,68753],{},[1738,68754],{"alt":316,"src":68755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,68757,68758],{},"这个是相对于视口来说的，它是个方法，不是属性值",[14,68760,68762],{"id":68761},"_338-总结","3.3.8 总结",[19,68764,68765],{},[1738,68766],{"alt":316,"src":68767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,68769,68770],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,68772,68773],{},"修改盒子的宽高只能通过width和height来实现",[14,68775,68777],{"id":68776},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[389,68779,68781],{"className":50826,"code":68780,"language":50828,"meta":316,"style":316},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[395,68782,68783,68788,68793,68798,68803],{"__ignoreMap":316},[398,68784,68785],{"class":400,"line":401},[398,68786,68787],{"class":408},"\u002F* 页面滑动 *\u002F\n",[398,68789,68790],{"class":400,"line":317},[398,68791,68792],{"class":408},"html {\n",[398,68794,68795],{"class":400,"line":320},[398,68796,68797],{"class":408},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[398,68799,68800],{"class":400,"line":1470},[398,68801,68802],{"class":408},"  scroll-behavior: smooth;\n",[398,68804,68805],{"class":400,"line":1476},[398,68806,1841],{"class":408},[19,68808,68809],{},"默认是auto",[14,68811,68813],{"id":68812},"_3310-日期对象","3.3.10 日期对象",[22275,68815,68817],{"id":68816},"_33101-实例化","3.3.10.1 实例化",[19,68819,68820],{},[1738,68821],{"alt":316,"src":68822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22275,68824,68826],{"id":68825},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,68828,68829],{},[1738,68830],{"alt":316,"src":68831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,68833,68834],{},"月份+1",[19,68836,68837],{},"老外认为第一天为0，星期天",[19,68839,68840],{},"方法使用的时候必须要跟括号",[19,68842,68843],{},"快速获得日期",[19,68845,68846],{},"\u002F\u002F 得到年月日",[19,68848,68849],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,68851,68852],{},"\u002F\u002F 得到当地日期",[19,68854,68855],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,68857,68858],{},"\u002F\u002F 得到当地时间",[19,68860,68861],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,68863,68864],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,68866,68867],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[52006,68869,68870],{},"\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,68872,68873],{},"学会去封装函数！",[22275,68875,68877],{"id":68876},"_33103-时间戳","3.3.10.3 时间戳",[19,68879,68880],{},[1738,68881],{"alt":316,"src":68882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,68884,68885],{},[1738,68886],{"alt":316,"src":68887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,68889,68890],{},"三种方法记住一个就可以",[14,68892,68894],{"id":68893},"_3311-节点操作","3.3.11 节点操作",[22275,68896,68898],{"id":68897},"_33111-dom节点","3.3.11.1 DOM节点",[19,68900,68901],{},[1738,68902],{"alt":316,"src":68903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,68905,68906],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22275,68908,68910],{"id":68909},"_33112-查找节点","3.3.11.2 查找节点",[19,68912,68913],{},"前边的document.querySelector()是获取的元素",[19,68915,68916],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,68918,68919],{},[1738,68920],{"alt":316,"src":68921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[38,68923,68924],{},[41,68925,68926],{},"父节点",[19,68928,68929],{},[1738,68930],{"alt":316,"src":68931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[38,68933,68934],{"start":317},[41,68935,68936],{},"子节点",[19,68938,68939],{},[1738,68940],{"alt":316,"src":68941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,68943,68944],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,68946,68947],{},"children获得的是伪数组，是亲儿子",[38,68949,68950],{"start":320},[41,68951,68952],{},"兄弟节点",[19,68954,68955],{},[1738,68956],{"alt":316,"src":68957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22275,68959,68961],{"id":68960},"_33113-增加节点","3.3.11.3 增加节点",[19,68963,68964],{},[1738,68965],{"alt":316,"src":68966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,68968,68969],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,68971,68972],{},[1738,68973],{"alt":316,"src":68974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,68976,68977],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,68979,68980],{},"下面是写法的部分展示，就按照下边的格式来写",[19,68982,68983],{},"例：",[52006,68985,68986],{},"\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,68988,68989],{},[1738,68990],{"alt":316,"src":68991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,68993,68994],{},"false只克隆标签，里边的内容不会克隆过来",[389,68996,68998],{"className":50826,"code":68997,"language":50828,"meta":316,"style":316},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[395,68999,69000],{"__ignoreMap":316},[398,69001,69002],{"class":400,"line":401},[398,69003,68997],{"class":408},[22275,69005,69007],{"id":69006},"_33114-删除节点","3.3.11.4 删除节点",[19,69009,69010],{},[1738,69011],{"alt":316,"src":69012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,69014,69015],{},"父亲删儿子",[19,69017,69018],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[14,69020,69022],{"id":69021},"_3312-m端事件","3.3.12 M端事件",[19,69024,69025],{},"M端就是移动端",[19,69027,69028],{},[1738,69029],{"alt":316,"src":69030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[14,69032,69034],{"id":69033},"_3313-插件","3.3.13 插件",[19,69036,69037],{},"要熟悉官网！！！",[19,69039,69040],{},[640,69041,69042],{"href":69042,"rel":69043},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[24142],[19,69045,69046],{},[640,69047,69048],{"href":69048,"rel":69049},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[24142],[14,69051,69053],{"id":69052},"_3314-学生信息表","3.3.14 学生信息表",[38,69055,69056,69059,69062,69065,69068,69071,69074,69077],{},[41,69057,69058],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[41,69060,69061],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[41,69063,69064],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[41,69066,69067],{},"用好表单元素自带的属性，value,name等",[41,69069,69070],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[41,69072,69073],{},"不要忘记事件对象",[41,69075,69076],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[41,69078,69079],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,69081,69082],{},"结构：",[389,69084,69086],{"className":50826,"code":69085,"language":50828,"meta":316,"style":316},"\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",[395,69087,69088,69098,69112,69116,69124,69138,69158,69179,69192,69216,69224,69228,69236,69249,69270,69298,69326,69331,69353,69373,69392,69400,69428,69450,69470,69490,69510,69530,69550,69558,69578,69586,69590,69603,69611,69619,69627,69640,69653,69666,69679,69692,69705,69718,69726,69734,69742,69747,69752,69757,69762,69767,69772,69777,69782,69787,69792,69797,69802,69807,69815,69823,69831,69835,69855,69874,69894,69914,69934,69954,69958,69963,69983,69988,69998,70003,70008,70028,70050,70055,70065,70069,70073,70078,70083,70112,70126,70141,70145,70149,70153,70158,70169,70182,70187,70192,70197,70202,70207,70211,70216,70221,70230,70235,70240,70252,70257,70264,70268,70273,70283,70288,70298,70303,70331,70352,70362,70382,70400,70417,70434,70451,70468,70472,70482,70487,70492,70497,70508,70512,70516,70520,70525,70530,70551,70563,70568,70573,70578,70592,70597,70604,70608,70612,70620,70624,70632,70636],{"__ignoreMap":316},[398,69089,69090,69092,69094,69096],{"class":400,"line":401},[398,69091,51490],{"class":408},[398,69093,51494],{"class":51493},[398,69095,51497],{"class":2239},[398,69097,51500],{"class":408},[398,69099,69100,69102,69104,69106,69108,69110],{"class":400,"line":317},[398,69101,1312],{"class":408},[398,69103,50828],{"class":51493},[398,69105,51509],{"class":2239},[398,69107,454],{"class":408},[398,69109,51514],{"class":513},[398,69111,51500],{"class":408},[398,69113,69114],{"class":400,"line":320},[398,69115,2676],{"emptyLinePlaceholder":328},[398,69117,69118,69120,69122],{"class":400,"line":1470},[398,69119,1312],{"class":408},[398,69121,51527],{"class":51493},[398,69123,51500],{"class":408},[398,69125,69126,69128,69130,69132,69134,69136],{"class":400,"line":1476},[398,69127,52337],{"class":408},[398,69129,51537],{"class":51493},[398,69131,51540],{"class":2239},[398,69133,454],{"class":408},[398,69135,51545],{"class":513},[398,69137,59320],{"class":408},[398,69139,69140,69142,69144,69146,69148,69150,69152,69154,69156],{"class":400,"line":1490},[398,69141,52337],{"class":408},[398,69143,51537],{"class":51493},[398,69145,15197],{"class":2239},[398,69147,454],{"class":408},[398,69149,51584],{"class":513},[398,69151,51564],{"class":2239},[398,69153,454],{"class":408},[398,69155,51591],{"class":513},[398,69157,59320],{"class":408},[398,69159,69160,69162,69164,69166,69168,69170,69172,69174,69177],{"class":400,"line":1496},[398,69161,52337],{"class":408},[398,69163,51537],{"class":51493},[398,69165,51556],{"class":2239},[398,69167,454],{"class":408},[398,69169,51561],{"class":513},[398,69171,51564],{"class":2239},[398,69173,454],{"class":408},[398,69175,69176],{"class":513},"\"ie=edge\"",[398,69178,59320],{"class":408},[398,69180,69181,69183,69185,69188,69190],{"class":400,"line":1587},[398,69182,52337],{"class":408},[398,69184,51600],{"class":51493},[398,69186,69187],{"class":408},">学生信息管理\u003C\u002F",[398,69189,51600],{"class":51493},[398,69191,51500],{"class":408},[398,69193,69194,69196,69199,69202,69204,69207,69209,69211,69214],{"class":400,"line":1593},[398,69195,52337],{"class":408},[398,69197,69198],{"class":51493},"link",[398,69200,69201],{"class":2239}," rel",[398,69203,454],{"class":408},[398,69205,69206],{"class":513},"\"stylesheet\"",[398,69208,61250],{"class":2239},[398,69210,454],{"class":408},[398,69212,69213],{"class":513},"\"css\u002Findex.css\"",[398,69215,59320],{"class":408},[398,69217,69218,69220,69222],{"class":400,"line":1605},[398,69219,51978],{"class":408},[398,69221,51527],{"class":51493},[398,69223,51500],{"class":408},[398,69225,69226],{"class":400,"line":1888},[398,69227,2676],{"emptyLinePlaceholder":328},[398,69229,69230,69232,69234],{"class":400,"line":1893},[398,69231,1312],{"class":408},[398,69233,51993],{"class":51493},[398,69235,51500],{"class":408},[398,69237,69238,69240,69242,69245,69247],{"class":400,"line":1899},[398,69239,52337],{"class":408},[398,69241,10],{"class":51493},[398,69243,69244],{"class":408},">新增学员\u003C\u002F",[398,69246,10],{"class":51493},[398,69248,51500],{"class":408},[398,69250,69251,69253,69255,69257,69259,69261,69264,69266,69268],{"class":400,"line":1904},[398,69252,52337],{"class":408},[398,69254,66818],{"class":51493},[398,69256,53679],{"class":2239},[398,69258,454],{"class":408},[398,69260,62857],{"class":513},[398,69262,69263],{"class":2239}," autocomplete",[398,69265,454],{"class":408},[398,69267,31969],{"class":513},[398,69269,51500],{"class":408},[398,69271,69272,69275,69277,69279,69281,69283,69285,69287,69290,69292,69294,69296],{"class":400,"line":1918},[398,69273,69274],{"class":408},"    姓名：\u003C",[398,69276,54014],{"class":51493},[398,69278,54017],{"class":2239},[398,69280,454],{"class":408},[398,69282,62892],{"class":513},[398,69284,53679],{"class":2239},[398,69286,454],{"class":408},[398,69288,69289],{"class":513},"\"uname\"",[398,69291,15197],{"class":2239},[398,69293,454],{"class":408},[398,69295,69289],{"class":513},[398,69297,59320],{"class":408},[398,69299,69300,69303,69305,69307,69309,69311,69313,69315,69318,69320,69322,69324],{"class":400,"line":1923},[398,69301,69302],{"class":408},"    年龄：\u003C",[398,69304,54014],{"class":51493},[398,69306,54017],{"class":2239},[398,69308,454],{"class":408},[398,69310,62892],{"class":513},[398,69312,53679],{"class":2239},[398,69314,454],{"class":408},[398,69316,69317],{"class":513},"\"age\"",[398,69319,15197],{"class":2239},[398,69321,454],{"class":408},[398,69323,69317],{"class":513},[398,69325,59320],{"class":408},[398,69327,69328],{"class":400,"line":1929},[398,69329,69330],{"class":408},"    性别:\n",[398,69332,69333,69335,69338,69340,69342,69345,69347,69349,69351],{"class":400,"line":1950},[398,69334,51534],{"class":408},[398,69336,69337],{"class":51493},"select",[398,69339,15197],{"class":2239},[398,69341,454],{"class":408},[398,69343,69344],{"class":513},"\"gender\"",[398,69346,53679],{"class":2239},[398,69348,454],{"class":408},[398,69350,69344],{"class":513},[398,69352,51500],{"class":408},[398,69354,69355,69357,69360,69362,69364,69366,69369,69371],{"class":400,"line":1955},[398,69356,55427],{"class":408},[398,69358,69359],{"class":51493},"option",[398,69361,66844],{"class":2239},[398,69363,454],{"class":408},[398,69365,10238],{"class":513},[398,69367,69368],{"class":408},">男\u003C\u002F",[398,69370,69359],{"class":51493},[398,69372,51500],{"class":408},[398,69374,69375,69377,69379,69381,69383,69385,69388,69390],{"class":400,"line":1969},[398,69376,55427],{"class":408},[398,69378,69359],{"class":51493},[398,69380,66844],{"class":2239},[398,69382,454],{"class":408},[398,69384,10307],{"class":513},[398,69386,69387],{"class":408},">女\u003C\u002F",[398,69389,69359],{"class":51493},[398,69391,51500],{"class":408},[398,69393,69394,69396,69398],{"class":400,"line":1974},[398,69395,51969],{"class":408},[398,69397,69337],{"class":51493},[398,69399,51500],{"class":408},[398,69401,69402,69405,69407,69409,69411,69413,69415,69417,69420,69422,69424,69426],{"class":400,"line":2003},[398,69403,69404],{"class":408},"    薪资：\u003C",[398,69406,54014],{"class":51493},[398,69408,54017],{"class":2239},[398,69410,454],{"class":408},[398,69412,62892],{"class":513},[398,69414,53679],{"class":2239},[398,69416,454],{"class":408},[398,69418,69419],{"class":513},"\"salary\"",[398,69421,15197],{"class":2239},[398,69423,454],{"class":408},[398,69425,69419],{"class":513},[398,69427,59320],{"class":408},[398,69429,69430,69433,69435,69437,69439,69442,69444,69446,69448],{"class":400,"line":2008},[398,69431,69432],{"class":408},"    就业城市：\u003C",[398,69434,69337],{"class":51493},[398,69436,15197],{"class":2239},[398,69438,454],{"class":408},[398,69440,69441],{"class":513},"\"city\"",[398,69443,53679],{"class":2239},[398,69445,454],{"class":408},[398,69447,69441],{"class":513},[398,69449,51500],{"class":408},[398,69451,69452,69454,69456,69458,69460,69463,69466,69468],{"class":400,"line":2025},[398,69453,55427],{"class":408},[398,69455,69359],{"class":51493},[398,69457,66844],{"class":2239},[398,69459,454],{"class":408},[398,69461,69462],{"class":513},"\"北京\"",[398,69464,69465],{"class":408},">北京\u003C\u002F",[398,69467,69359],{"class":51493},[398,69469,51500],{"class":408},[398,69471,69472,69474,69476,69478,69480,69483,69486,69488],{"class":400,"line":2030},[398,69473,55427],{"class":408},[398,69475,69359],{"class":51493},[398,69477,66844],{"class":2239},[398,69479,454],{"class":408},[398,69481,69482],{"class":513},"\"上海\"",[398,69484,69485],{"class":408},">上海\u003C\u002F",[398,69487,69359],{"class":51493},[398,69489,51500],{"class":408},[398,69491,69492,69494,69496,69498,69500,69503,69506,69508],{"class":400,"line":2035},[398,69493,55427],{"class":408},[398,69495,69359],{"class":51493},[398,69497,66844],{"class":2239},[398,69499,454],{"class":408},[398,69501,69502],{"class":513},"\"广州\"",[398,69504,69505],{"class":408},">广州\u003C\u002F",[398,69507,69359],{"class":51493},[398,69509,51500],{"class":408},[398,69511,69512,69514,69516,69518,69520,69523,69526,69528],{"class":400,"line":2040},[398,69513,55427],{"class":408},[398,69515,69359],{"class":51493},[398,69517,66844],{"class":2239},[398,69519,454],{"class":408},[398,69521,69522],{"class":513},"\"深圳\"",[398,69524,69525],{"class":408},">深圳\u003C\u002F",[398,69527,69359],{"class":51493},[398,69529,51500],{"class":408},[398,69531,69532,69534,69536,69538,69540,69543,69546,69548],{"class":400,"line":2054},[398,69533,55427],{"class":408},[398,69535,69359],{"class":51493},[398,69537,66844],{"class":2239},[398,69539,454],{"class":408},[398,69541,69542],{"class":513},"\"曹县\"",[398,69544,69545],{"class":408},">曹县\u003C\u002F",[398,69547,69359],{"class":51493},[398,69549,51500],{"class":408},[398,69551,69552,69554,69556],{"class":400,"line":2059},[398,69553,51969],{"class":408},[398,69555,69337],{"class":51493},[398,69557,51500],{"class":408},[398,69559,69560,69562,69564,69566,69568,69571,69574,69576],{"class":400,"line":2853},[398,69561,51534],{"class":408},[398,69563,54080],{"class":51493},[398,69565,53679],{"class":2239},[398,69567,454],{"class":408},[398,69569,69570],{"class":513},"\"add\"",[398,69572,69573],{"class":408},">录入\u003C\u002F",[398,69575,54080],{"class":51493},[398,69577,51500],{"class":408},[398,69579,69580,69582,69584],{"class":400,"line":2867},[398,69581,52610],{"class":408},[398,69583,66818],{"class":51493},[398,69585,51500],{"class":408},[398,69587,69588],{"class":400,"line":2875},[398,69589,2676],{"emptyLinePlaceholder":328},[398,69591,69592,69594,69596,69599,69601],{"class":400,"line":2880},[398,69593,52337],{"class":408},[398,69595,10],{"class":51493},[398,69597,69598],{"class":408},">就业榜\u003C\u002F",[398,69600,10],{"class":51493},[398,69602,51500],{"class":408},[398,69604,69605,69607,69609],{"class":400,"line":2886},[398,69606,52337],{"class":408},[398,69608,84],{"class":51493},[398,69610,51500],{"class":408},[398,69612,69613,69615,69617],{"class":400,"line":2892},[398,69614,51534],{"class":408},[398,69616,87],{"class":51493},[398,69618,51500],{"class":408},[398,69620,69621,69623,69625],{"class":400,"line":2897},[398,69622,55427],{"class":408},[398,69624,90],{"class":51493},[398,69626,51500],{"class":408},[398,69628,69629,69631,69633,69636,69638],{"class":400,"line":8225},[398,69630,55495],{"class":408},[398,69632,93],{"class":51493},[398,69634,69635],{"class":408},">序号\u003C\u002F",[398,69637,93],{"class":51493},[398,69639,51500],{"class":408},[398,69641,69642,69644,69646,69649,69651],{"class":400,"line":8249},[398,69643,55495],{"class":408},[398,69645,93],{"class":51493},[398,69647,69648],{"class":408},">姓名\u003C\u002F",[398,69650,93],{"class":51493},[398,69652,51500],{"class":408},[398,69654,69655,69657,69659,69662,69664],{"class":400,"line":8254},[398,69656,55495],{"class":408},[398,69658,93],{"class":51493},[398,69660,69661],{"class":408},">年龄\u003C\u002F",[398,69663,93],{"class":51493},[398,69665,51500],{"class":408},[398,69667,69668,69670,69672,69675,69677],{"class":400,"line":8260},[398,69669,55495],{"class":408},[398,69671,93],{"class":51493},[398,69673,69674],{"class":408},">性别\u003C\u002F",[398,69676,93],{"class":51493},[398,69678,51500],{"class":408},[398,69680,69681,69683,69685,69688,69690],{"class":400,"line":8287},[398,69682,55495],{"class":408},[398,69684,93],{"class":51493},[398,69686,69687],{"class":408},">薪资\u003C\u002F",[398,69689,93],{"class":51493},[398,69691,51500],{"class":408},[398,69693,69694,69696,69698,69701,69703],{"class":400,"line":8292},[398,69695,55495],{"class":408},[398,69697,93],{"class":51493},[398,69699,69700],{"class":408},">就业城市\u003C\u002F",[398,69702,93],{"class":51493},[398,69704,51500],{"class":408},[398,69706,69707,69709,69711,69714,69716],{"class":400,"line":8298},[398,69708,55495],{"class":408},[398,69710,93],{"class":51493},[398,69712,69713],{"class":408},">操作\u003C\u002F",[398,69715,93],{"class":51493},[398,69717,51500],{"class":408},[398,69719,69720,69722,69724],{"class":400,"line":8310},[398,69721,55600],{"class":408},[398,69723,90],{"class":51493},[398,69725,51500],{"class":408},[398,69727,69728,69730,69732],{"class":400,"line":8322},[398,69729,51969],{"class":408},[398,69731,87],{"class":51493},[398,69733,51500],{"class":408},[398,69735,69736,69738,69740],{"class":400,"line":8334},[398,69737,51534],{"class":408},[398,69739,101],{"class":51493},[398,69741,51500],{"class":408},[398,69743,69744],{"class":400,"line":9993},[398,69745,69746],{"class":467},"      \u003C!-- \n",[398,69748,69749],{"class":400,"line":10018},[398,69750,69751],{"class":467},"        \u003Ctr>\n",[398,69753,69754],{"class":400,"line":10041},[398,69755,69756],{"class":467},"          \u003Ctd>1001\u003C\u002Ftd>\n",[398,69758,69759],{"class":400,"line":10065},[398,69760,69761],{"class":467},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[398,69763,69764],{"class":400,"line":10070},[398,69765,69766],{"class":467},"          \u003Ctd>19\u003C\u002Ftd>\n",[398,69768,69769],{"class":400,"line":10075},[398,69770,69771],{"class":467},"          \u003Ctd>男\u003C\u002Ftd>\n",[398,69773,69774],{"class":400,"line":10080},[398,69775,69776],{"class":467},"          \u003Ctd>15000\u003C\u002Ftd>\n",[398,69778,69779],{"class":400,"line":10089},[398,69780,69781],{"class":467},"          \u003Ctd>上海\u003C\u002Ftd>\n",[398,69783,69784],{"class":400,"line":10094},[398,69785,69786],{"class":467},"          \u003Ctd>\n",[398,69788,69789],{"class":400,"line":10100},[398,69790,69791],{"class":467},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[398,69793,69794],{"class":400,"line":10121},[398,69795,69796],{"class":467},"          \u003C\u002Ftd>\n",[398,69798,69799],{"class":400,"line":10127},[398,69800,69801],{"class":467},"        \u003C\u002Ftr> \n",[398,69803,69804],{"class":400,"line":10141},[398,69805,69806],{"class":467},"        -->\n",[398,69808,69809,69811,69813],{"class":400,"line":10147},[398,69810,51969],{"class":408},[398,69812,101],{"class":51493},[398,69814,51500],{"class":408},[398,69816,69817,69819,69821],{"class":400,"line":10174},[398,69818,52610],{"class":408},[398,69820,84],{"class":51493},[398,69822,51500],{"class":408},[398,69824,69825,69827,69829],{"class":400,"line":10183},[398,69826,52337],{"class":408},[398,69828,52006],{"class":51493},[398,69830,51500],{"class":408},[398,69832,69833],{"class":400,"line":10189},[398,69834,60151],{"class":467},[398,69836,69837,69839,69842,69844,69846,69848,69850,69853],{"class":400,"line":10197},[398,69838,11498],{"class":404},[398,69840,69841],{"class":457}," uname",[398,69843,13841],{"class":404},[398,69845,54589],{"class":408},[398,69847,54592],{"class":2239},[398,69849,409],{"class":408},[398,69851,69852],{"class":513},"'.uname'",[398,69854,415],{"class":408},[398,69856,69857,69859,69861,69863,69865,69867,69869,69872],{"class":400,"line":10202},[398,69858,11498],{"class":404},[398,69860,15966],{"class":457},[398,69862,13841],{"class":404},[398,69864,54589],{"class":408},[398,69866,54592],{"class":2239},[398,69868,409],{"class":408},[398,69870,69871],{"class":513},"'.age'",[398,69873,415],{"class":408},[398,69875,69876,69878,69881,69883,69885,69887,69889,69892],{"class":400,"line":16881},[398,69877,11498],{"class":404},[398,69879,69880],{"class":457}," gender",[398,69882,13841],{"class":404},[398,69884,54589],{"class":408},[398,69886,54592],{"class":2239},[398,69888,409],{"class":408},[398,69890,69891],{"class":513},"'.gender'",[398,69893,415],{"class":408},[398,69895,69896,69898,69901,69903,69905,69907,69909,69912],{"class":400,"line":16887},[398,69897,11498],{"class":404},[398,69899,69900],{"class":457}," salary",[398,69902,13841],{"class":404},[398,69904,54589],{"class":408},[398,69906,54592],{"class":2239},[398,69908,409],{"class":408},[398,69910,69911],{"class":513},"'.salary'",[398,69913,415],{"class":408},[398,69915,69916,69918,69921,69923,69925,69927,69929,69932],{"class":400,"line":16910},[398,69917,11498],{"class":404},[398,69919,69920],{"class":457}," city",[398,69922,13841],{"class":404},[398,69924,54589],{"class":408},[398,69926,54592],{"class":2239},[398,69928,409],{"class":408},[398,69930,69931],{"class":513},"'.city'",[398,69933,415],{"class":408},[398,69935,69936,69938,69941,69943,69945,69947,69949,69952],{"class":400,"line":16916},[398,69937,11498],{"class":404},[398,69939,69940],{"class":457}," tbody",[398,69942,13841],{"class":404},[398,69944,54589],{"class":408},[398,69946,54592],{"class":2239},[398,69948,409],{"class":408},[398,69950,69951],{"class":513},"'tbody'",[398,69953,415],{"class":408},[398,69955,69956],{"class":400,"line":16939},[398,69957,2676],{"emptyLinePlaceholder":328},[398,69959,69960],{"class":400,"line":16953},[398,69961,69962],{"class":467},"    \u002F\u002F 获取所有带有name属性的元素\n",[398,69964,69965,69967,69970,69972,69974,69976,69978,69981],{"class":400,"line":16973},[398,69966,11498],{"class":404},[398,69968,69969],{"class":457}," items",[398,69971,13841],{"class":404},[398,69973,54589],{"class":408},[398,69975,55874],{"class":2239},[398,69977,409],{"class":408},[398,69979,69980],{"class":513},"'[name]'",[398,69982,415],{"class":408},[398,69984,69985],{"class":400,"line":16979},[398,69986,69987],{"class":467},"    \u002F\u002F 声明一个空的数组\n",[398,69989,69990,69992,69994,69996],{"class":400,"line":16990},[398,69991,11498],{"class":404},[398,69993,57888],{"class":457},[398,69995,13841],{"class":404},[398,69997,52031],{"class":408},[398,69999,70000],{"class":400,"line":17013},[398,70001,70002],{"class":467},"    \u002F\u002F 1.录入模块\n",[398,70004,70005],{"class":400,"line":17035},[398,70006,70007],{"class":467},"    \u002F\u002F 1.1这是一个表单提交事件\n",[398,70009,70010,70012,70015,70017,70019,70021,70023,70026],{"class":400,"line":17040},[398,70011,11498],{"class":404},[398,70013,70014],{"class":457}," info",[398,70016,13841],{"class":404},[398,70018,54589],{"class":408},[398,70020,54592],{"class":2239},[398,70022,409],{"class":408},[398,70024,70025],{"class":513},"'.info'",[398,70027,415],{"class":408},[398,70029,70030,70033,70035,70037,70040,70042,70044,70046,70048],{"class":400,"line":17046},[398,70031,70032],{"class":408},"    info.",[398,70034,58006],{"class":2239},[398,70036,409],{"class":408},[398,70038,70039],{"class":513},"'submit'",[398,70041,12712],{"class":408},[398,70043,54642],{"class":404},[398,70045,1934],{"class":408},[398,70047,483],{"class":5493},[398,70049,12719],{"class":408},[398,70051,70052],{"class":400,"line":17060},[398,70053,70054],{"class":467},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[398,70056,70057,70060,70063],{"class":400,"line":17073},[398,70058,70059],{"class":408},"      e.",[398,70061,70062],{"class":2239},"preventDefault",[398,70064,2252],{"class":408},[398,70066,70067],{"class":400,"line":17078},[398,70068,60205],{"class":467},[398,70070,70071],{"class":400,"line":17092},[398,70072,2676],{"emptyLinePlaceholder":328},[398,70074,70075],{"class":400,"line":17097},[398,70076,70077],{"class":467},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[398,70079,70080],{"class":400,"line":17103},[398,70081,70082],{"class":467},"      \u002F\u002F 先遍历循环\n",[398,70084,70085,70087,70089,70091,70093,70095,70097,70099,70101,70104,70106,70108,70110],{"class":400,"line":17108},[398,70086,52477],{"class":404},[398,70088,1934],{"class":408},[398,70090,52040],{"class":404},[398,70092,9715],{"class":408},[398,70094,454],{"class":404},[398,70096,4369],{"class":457},[398,70098,9722],{"class":408},[398,70100,1312],{"class":404},[398,70102,70103],{"class":408}," items.",[398,70105,52161],{"class":457},[398,70107,3490],{"class":408},[398,70109,2568],{"class":404},[398,70111,12719],{"class":408},[398,70113,70114,70116,70119,70121,70124],{"class":400,"line":17122},[398,70115,2773],{"class":404},[398,70117,70118],{"class":408}," (items[i].value ",[398,70120,54679],{"class":404},[398,70122,70123],{"class":513}," ''",[398,70125,12719],{"class":408},[398,70127,70128,70131,70134,70136,70139],{"class":400,"line":17127},[398,70129,70130],{"class":404},"          return",[398,70132,70133],{"class":2239}," alert",[398,70135,409],{"class":408},[398,70137,70138],{"class":513},"'输入内容不能为空'",[398,70140,415],{"class":408},[398,70142,70143],{"class":400,"line":17132},[398,70144,2805],{"class":408},[398,70146,70147],{"class":400,"line":17146},[398,70148,52591],{"class":408},[398,70150,70151],{"class":400,"line":17158},[398,70152,2676],{"emptyLinePlaceholder":328},[398,70154,70155],{"class":400,"line":17163},[398,70156,70157],{"class":467},"      \u002F\u002F 创建新的对象\n",[398,70159,70160,70162,70165,70167],{"class":400,"line":17176},[398,70161,58421],{"class":404},[398,70163,70164],{"class":457}," obj",[398,70166,13841],{"class":404},[398,70168,15849],{"class":408},[398,70170,70171,70174,70176,70178,70180],{"class":400,"line":17181},[398,70172,70173],{"class":408},"        stuID: arr.",[398,70175,52161],{"class":457},[398,70177,45759],{"class":404},[398,70179,25396],{"class":457},[398,70181,31659],{"class":408},[398,70183,70184],{"class":400,"line":17186},[398,70185,70186],{"class":408},"        uname: uname.value,\n",[398,70188,70189],{"class":400,"line":17191},[398,70190,70191],{"class":408},"        age: age.value,\n",[398,70193,70194],{"class":400,"line":17204},[398,70195,70196],{"class":408},"        gender: gender.value,\n",[398,70198,70199],{"class":400,"line":17209},[398,70200,70201],{"class":408},"        salary: salary.value,\n",[398,70203,70204],{"class":400,"line":32826},[398,70205,70206],{"class":408},"        city: city.value\n",[398,70208,70209],{"class":400,"line":32832},[398,70210,52591],{"class":408},[398,70212,70213],{"class":400,"line":32838},[398,70214,70215],{"class":467},"      \u002F\u002F console.log(obj);\n",[398,70217,70218],{"class":400,"line":32844},[398,70219,70220],{"class":467},"      \u002F\u002F 追加到数组里面\n",[398,70222,70223,70225,70227],{"class":400,"line":32850},[398,70224,58200],{"class":408},[398,70226,52077],{"class":2239},[398,70228,70229],{"class":408},"(obj)\n",[398,70231,70232],{"class":400,"line":32861},[398,70233,70234],{"class":467},"      \u002F\u002F console.log(arr);\n",[398,70236,70237],{"class":400,"line":32867},[398,70238,70239],{"class":467},"      \u002F\u002F 清空表单  reset重置表单\n",[398,70241,70242,70245,70247,70250],{"class":400,"line":32887},[398,70243,70244],{"class":457},"      this",[398,70246,960],{"class":408},[398,70248,70249],{"class":2239},"reset",[398,70251,2252],{"class":408},[398,70253,70254],{"class":400,"line":32893},[398,70255,70256],{"class":467},"      \u002F\u002F 调用渲染函数\n",[398,70258,70259,70262],{"class":400,"line":32904},[398,70260,70261],{"class":2239},"      render",[398,70263,2252],{"class":408},[398,70265,70266],{"class":400,"line":32910},[398,70267,33654],{"class":408},[398,70269,70270],{"class":400,"line":32916},[398,70271,70272],{"class":467},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[398,70274,70275,70278,70281],{"class":400,"line":32922},[398,70276,70277],{"class":404},"    function",[398,70279,70280],{"class":2239}," render",[398,70282,11130],{"class":408},[398,70284,70285],{"class":400,"line":32928},[398,70286,70287],{"class":467},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[398,70289,70290,70293,70295],{"class":400,"line":32934},[398,70291,70292],{"class":408},"      tbody.innerHTML ",[398,70294,454],{"class":404},[398,70296,70297],{"class":513}," ''\n",[398,70299,70300],{"class":400,"line":32940},[398,70301,70302],{"class":467},"      \u002F\u002F 遍历数组\n",[398,70304,70305,70307,70309,70311,70313,70315,70317,70319,70321,70323,70325,70327,70329],{"class":400,"line":32946},[398,70306,52477],{"class":404},[398,70308,1934],{"class":408},[398,70310,52040],{"class":404},[398,70312,9715],{"class":408},[398,70314,454],{"class":404},[398,70316,4369],{"class":457},[398,70318,9722],{"class":408},[398,70320,1312],{"class":404},[398,70322,52158],{"class":408},[398,70324,52161],{"class":457},[398,70326,3490],{"class":408},[398,70328,2568],{"class":404},[398,70330,12719],{"class":408},[398,70332,70333,70335,70338,70340,70342,70345,70347,70350],{"class":400,"line":32966},[398,70334,61463],{"class":404},[398,70336,70337],{"class":457}," tr",[398,70339,13841],{"class":404},[398,70341,54589],{"class":408},[398,70343,70344],{"class":2239},"createElement",[398,70346,409],{"class":408},[398,70348,70349],{"class":513},"'tr'",[398,70351,415],{"class":408},[398,70353,70354,70357,70359],{"class":400,"line":32972},[398,70355,70356],{"class":408},"        tr.innerHTML ",[398,70358,454],{"class":404},[398,70360,70361],{"class":513}," `\n",[398,70363,70364,70367,70369,70371,70373,70376,70379],{"class":400,"line":32988},[398,70365,70366],{"class":513},"        \u003Ctd>${",[398,70368,4156],{"class":408},[398,70370,1292],{"class":513},[398,70372,843],{"class":408},[398,70374,70375],{"class":513},"].",[398,70377,70378],{"class":408},"stuID",[398,70380,70381],{"class":513},"}\u003C\u002Ftd>\n",[398,70383,70384,70387,70389,70391,70393,70395,70398],{"class":400,"line":32994},[398,70385,70386],{"class":513},"          \u003Ctd>${",[398,70388,4156],{"class":408},[398,70390,1292],{"class":513},[398,70392,843],{"class":408},[398,70394,70375],{"class":513},[398,70396,70397],{"class":408},"uname",[398,70399,70381],{"class":513},[398,70401,70402,70404,70406,70408,70410,70412,70415],{"class":400,"line":33008},[398,70403,70386],{"class":513},[398,70405,4156],{"class":408},[398,70407,1292],{"class":513},[398,70409,843],{"class":408},[398,70411,70375],{"class":513},[398,70413,70414],{"class":408},"age",[398,70416,70381],{"class":513},[398,70418,70419,70421,70423,70425,70427,70429,70432],{"class":400,"line":33014},[398,70420,70386],{"class":513},[398,70422,4156],{"class":408},[398,70424,1292],{"class":513},[398,70426,843],{"class":408},[398,70428,70375],{"class":513},[398,70430,70431],{"class":408},"gender",[398,70433,70381],{"class":513},[398,70435,70436,70438,70440,70442,70444,70446,70449],{"class":400,"line":33029},[398,70437,70386],{"class":513},[398,70439,4156],{"class":408},[398,70441,1292],{"class":513},[398,70443,843],{"class":408},[398,70445,70375],{"class":513},[398,70447,70448],{"class":408},"salary",[398,70450,70381],{"class":513},[398,70452,70453,70455,70457,70459,70461,70463,70466],{"class":400,"line":33035},[398,70454,70386],{"class":513},[398,70456,4156],{"class":408},[398,70458,1292],{"class":513},[398,70460,843],{"class":408},[398,70462,70375],{"class":513},[398,70464,70465],{"class":408},"city",[398,70467,70381],{"class":513},[398,70469,70470],{"class":400,"line":33044},[398,70471,69786],{"class":513},[398,70473,70474,70477,70479],{"class":400,"line":33050},[398,70475,70476],{"class":513},"            \u003Ca href=\"javascript:\" data-id=${",[398,70478,843],{"class":408},[398,70480,70481],{"class":513},"}>删除\u003C\u002Fa>\n",[398,70483,70484],{"class":400,"line":33059},[398,70485,70486],{"class":513},"          \u003C\u002Ftd> \n",[398,70488,70489],{"class":400,"line":33065},[398,70490,70491],{"class":513},"          `\n",[398,70493,70494],{"class":400,"line":33071},[398,70495,70496],{"class":467},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[398,70498,70499,70502,70505],{"class":400,"line":33080},[398,70500,70501],{"class":408},"        tbody.",[398,70503,70504],{"class":2239},"appendChild",[398,70506,70507],{"class":408},"(tr)\n",[398,70509,70510],{"class":400,"line":33086},[398,70511,52591],{"class":408},[398,70513,70514],{"class":400,"line":33097},[398,70515,2463],{"class":408},[398,70517,70518],{"class":400,"line":33103},[398,70519,2676],{"emptyLinePlaceholder":328},[398,70521,70522],{"class":400,"line":33122},[398,70523,70524],{"class":467},"    \u002F\u002F 3.删除委托\n",[398,70526,70527],{"class":400,"line":33128},[398,70528,70529],{"class":467},"    \u002F\u002F 3.1 事件委托 tbody\n",[398,70531,70532,70535,70537,70539,70541,70543,70545,70547,70549],{"class":400,"line":33139},[398,70533,70534],{"class":408},"    tbody.",[398,70536,58006],{"class":2239},[398,70538,409],{"class":408},[398,70540,58011],{"class":513},[398,70542,12712],{"class":408},[398,70544,54642],{"class":404},[398,70546,1934],{"class":408},[398,70548,483],{"class":5493},[398,70550,12719],{"class":408},[398,70552,70553,70555,70557,70559,70561],{"class":400,"line":33145},[398,70554,54673],{"class":404},[398,70556,67227],{"class":408},[398,70558,54679],{"class":404},[398,70560,68449],{"class":513},[398,70562,12719],{"class":408},[398,70564,70565],{"class":400,"line":33165},[398,70566,70567],{"class":467},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[398,70569,70570],{"class":400,"line":33181},[398,70571,70572],{"class":467},"        \u002F\u002F console.log(e.target.dataset.id);\n",[398,70574,70575],{"class":400,"line":33187},[398,70576,70577],{"class":467},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[398,70579,70580,70583,70585,70588,70590],{"class":400,"line":33201},[398,70581,70582],{"class":408},"        arr.",[398,70584,58203],{"class":2239},[398,70586,70587],{"class":408},"(e.target.dataset.id, ",[398,70589,619],{"class":457},[398,70591,415],{"class":408},[398,70593,70594],{"class":400,"line":33207},[398,70595,70596],{"class":467},"        \u002F\u002F 重新渲染一次\n",[398,70598,70599,70602],{"class":400,"line":33213},[398,70600,70601],{"class":2239},"        render",[398,70603,2252],{"class":408},[398,70605,70606],{"class":400,"line":33224},[398,70607,52591],{"class":408},[398,70609,70610],{"class":400,"line":33230},[398,70611,33654],{"class":408},[398,70613,70614,70616,70618],{"class":400,"line":33236},[398,70615,52610],{"class":408},[398,70617,52006],{"class":51493},[398,70619,51500],{"class":408},[398,70621,70622],{"class":400,"line":33246},[398,70623,2676],{"emptyLinePlaceholder":328},[398,70625,70626,70628,70630],{"class":400,"line":33252},[398,70627,51978],{"class":408},[398,70629,51993],{"class":51493},[398,70631,51500],{"class":408},[398,70633,70634],{"class":400,"line":33263},[398,70635,2676],{"emptyLinePlaceholder":328},[398,70637,70638,70640,70642],{"class":400,"line":33269},[398,70639,51978],{"class":408},[398,70641,50828],{"class":51493},[398,70643,51500],{"class":408},[19,70645,70646],{},"样式：",[389,70648,70652],{"className":70649,"code":70650,"language":70651,"meta":316,"style":316},"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",[395,70653,70654,70659,70669,70678,70682,70686,70691,70701,70706,70710,70715,70725,70730,70739,70743,70747,70752,70757,70767,70777,70782,70786,70791,70800,70810,70815,70825,70835,70839,70844,70852,70856,70861,70866,70871,70879,70888,70892,70897,70906,70910,70915,70924,70928,70933,70942,70951,70959,70963,70968,70977,70987,70996,71006,71012,71021,71031,71041,71045,71050,71059,71067,71077,71085,71094,71103,71113,71121,71125,71130,71139],{"__ignoreMap":316},[398,70655,70656],{"class":400,"line":401},[398,70657,70658],{"class":408},"* {\n",[398,70660,70661,70664,70666],{"class":400,"line":317},[398,70662,70663],{"class":51493},"  margin",[398,70665,51630],{"class":408},[398,70667,70668],{"class":513},"0;\n",[398,70670,70671,70674,70676],{"class":400,"line":320},[398,70672,70673],{"class":513},"  padding",[398,70675,51630],{"class":408},[398,70677,70668],{"class":513},[398,70679,70680],{"class":400,"line":1470},[398,70681,1841],{"class":408},[398,70683,70684],{"class":400,"line":1476},[398,70685,2676],{"emptyLinePlaceholder":328},[398,70687,70688],{"class":400,"line":1490},[398,70689,70690],{"class":513},"a {\n",[398,70692,70693,70696,70698],{"class":400,"line":1496},[398,70694,70695],{"class":51493},"  text-decoration",[398,70697,51630],{"class":408},[398,70699,70700],{"class":513},"none;\n",[398,70702,70703],{"class":400,"line":1587},[398,70704,70705],{"class":513},"  color:#721c24;\n",[398,70707,70708],{"class":400,"line":1593},[398,70709,1841],{"class":408},[398,70711,70712],{"class":400,"line":1605},[398,70713,70714],{"class":513},"h1 {\n",[398,70716,70717,70720,70722],{"class":400,"line":1888},[398,70718,70719],{"class":51493},"  text-align",[398,70721,51630],{"class":408},[398,70723,70724],{"class":513},"center;\n",[398,70726,70727],{"class":400,"line":1893},[398,70728,70729],{"class":513},"  color:#333;\n",[398,70731,70732,70734,70736],{"class":400,"line":1899},[398,70733,70663],{"class":51493},[398,70735,51630],{"class":408},[398,70737,70738],{"class":513},"20px 0;\n",[398,70740,70741],{"class":400,"line":1904},[398,70742,2950],{"class":408},[398,70744,70745],{"class":400,"line":1918},[398,70746,1841],{"class":408},[398,70748,70749],{"class":400,"line":1923},[398,70750,70751],{"class":513},"table {\n",[398,70753,70754],{"class":400,"line":1929},[398,70755,70756],{"class":513},"  margin:0 auto;\n",[398,70758,70759,70762,70764],{"class":400,"line":1950},[398,70760,70761],{"class":51493},"  width",[398,70763,51630],{"class":408},[398,70765,70766],{"class":513},"800px;\n",[398,70768,70769,70772,70774],{"class":400,"line":1955},[398,70770,70771],{"class":51493},"  border-collapse",[398,70773,51630],{"class":408},[398,70775,70776],{"class":513},"collapse;\n",[398,70778,70779],{"class":400,"line":1969},[398,70780,70781],{"class":513},"  color:#004085;\n",[398,70783,70784],{"class":400,"line":1974},[398,70785,1841],{"class":408},[398,70787,70788],{"class":400,"line":2003},[398,70789,70790],{"class":513},"th {\n",[398,70792,70793,70795,70797],{"class":400,"line":2008},[398,70794,70673],{"class":51493},[398,70796,51630],{"class":408},[398,70798,70799],{"class":513},"10px;\n",[398,70801,70802,70805,70807],{"class":400,"line":2025},[398,70803,70804],{"class":51493},"  background",[398,70806,51630],{"class":408},[398,70808,70809],{"class":467},"#cfe5ff;\n",[398,70811,70812],{"class":400,"line":2030},[398,70813,70814],{"class":408},"  \n",[398,70816,70817,70820,70822],{"class":400,"line":2035},[398,70818,70819],{"class":51493},"  font-size",[398,70821,51630],{"class":408},[398,70823,70824],{"class":513},"20px;\n",[398,70826,70827,70830,70832],{"class":400,"line":2040},[398,70828,70829],{"class":51493},"  font-weight",[398,70831,51630],{"class":408},[398,70833,70834],{"class":513},"400;\n",[398,70836,70837],{"class":400,"line":2054},[398,70838,1841],{"class":408},[398,70840,70841],{"class":400,"line":2059},[398,70842,70843],{"class":513},"td,th {\n",[398,70845,70846,70849],{"class":400,"line":2853},[398,70847,70848],{"class":513},"  border:1px solid",[398,70850,70851],{"class":467}," #b8daff;\n",[398,70853,70854],{"class":400,"line":2867},[398,70855,1841],{"class":408},[398,70857,70858],{"class":400,"line":2875},[398,70859,70860],{"class":513},"td {\n",[398,70862,70863],{"class":400,"line":2880},[398,70864,70865],{"class":513},"  padding:10px;\n",[398,70867,70868],{"class":400,"line":2886},[398,70869,70870],{"class":513},"  color:#666;\n",[398,70872,70873,70875,70877],{"class":400,"line":2892},[398,70874,70719],{"class":51493},[398,70876,51630],{"class":408},[398,70878,70724],{"class":513},[398,70880,70881,70883,70885],{"class":400,"line":2897},[398,70882,70819],{"class":51493},[398,70884,51630],{"class":408},[398,70886,70887],{"class":513},"16px;\n",[398,70889,70890],{"class":400,"line":8225},[398,70891,1841],{"class":408},[398,70893,70894],{"class":400,"line":8249},[398,70895,70896],{"class":513},"tbody tr {\n",[398,70898,70899,70901,70903],{"class":400,"line":8254},[398,70900,70804],{"class":51493},[398,70902,51630],{"class":408},[398,70904,70905],{"class":467},"#fff;\n",[398,70907,70908],{"class":400,"line":8260},[398,70909,1841],{"class":408},[398,70911,70912],{"class":400,"line":8287},[398,70913,70914],{"class":513},"tbody tr:hover {\n",[398,70916,70917,70919,70921],{"class":400,"line":8292},[398,70918,70804],{"class":51493},[398,70920,51630],{"class":408},[398,70922,70923],{"class":467},"#e1ecf8;\n",[398,70925,70926],{"class":400,"line":8298},[398,70927,1841],{"class":408},[398,70929,70930],{"class":400,"line":8310},[398,70931,70932],{"class":513},".info {\n",[398,70934,70935,70937,70939],{"class":400,"line":8322},[398,70936,70761],{"class":51493},[398,70938,51630],{"class":408},[398,70940,70941],{"class":513},"900px;\n",[398,70943,70944,70946,70948],{"class":400,"line":8334},[398,70945,70663],{"class":51493},[398,70947,51630],{"class":408},[398,70949,70950],{"class":513},"50px auto;\n",[398,70952,70953,70955,70957],{"class":400,"line":9993},[398,70954,70719],{"class":51493},[398,70956,51630],{"class":408},[398,70958,70724],{"class":513},[398,70960,70961],{"class":400,"line":10018},[398,70962,1841],{"class":408},[398,70964,70965],{"class":400,"line":10041},[398,70966,70967],{"class":513},".info  input, .info select {\n",[398,70969,70970,70972,70974],{"class":400,"line":10065},[398,70971,70761],{"class":51493},[398,70973,51630],{"class":408},[398,70975,70976],{"class":513},"80px;\n",[398,70978,70979,70982,70984],{"class":400,"line":10070},[398,70980,70981],{"class":51493},"  height",[398,70983,51630],{"class":408},[398,70985,70986],{"class":513},"27px;\n",[398,70988,70989,70992,70994],{"class":400,"line":10075},[398,70990,70991],{"class":51493},"  outline",[398,70993,51630],{"class":408},[398,70995,70700],{"class":513},[398,70997,70998,71001,71003],{"class":400,"line":10080},[398,70999,71000],{"class":51493},"  border-radius",[398,71002,51630],{"class":408},[398,71004,71005],{"class":513},"5px;\n",[398,71007,71008,71010],{"class":400,"line":10089},[398,71009,70848],{"class":513},[398,71011,70851],{"class":467},[398,71013,71014,71017,71019],{"class":400,"line":10094},[398,71015,71016],{"class":51493},"  padding-left",[398,71018,51630],{"class":408},[398,71020,71005],{"class":513},[398,71022,71023,71026,71028],{"class":400,"line":10100},[398,71024,71025],{"class":51493},"  box-sizing",[398,71027,51630],{"class":408},[398,71029,71030],{"class":513},"border-box;\n",[398,71032,71033,71036,71038],{"class":400,"line":10121},[398,71034,71035],{"class":51493},"  margin-right",[398,71037,51630],{"class":408},[398,71039,71040],{"class":513},"15px;\n",[398,71042,71043],{"class":400,"line":10127},[398,71044,1841],{"class":408},[398,71046,71047],{"class":400,"line":10141},[398,71048,71049],{"class":513},".info button {\n",[398,71051,71052,71054,71056],{"class":400,"line":10147},[398,71053,70761],{"class":51493},[398,71055,51630],{"class":408},[398,71057,71058],{"class":513},"60px;\n",[398,71060,71061,71063,71065],{"class":400,"line":10174},[398,71062,70981],{"class":51493},[398,71064,51630],{"class":408},[398,71066,70986],{"class":513},[398,71068,71069,71072,71074],{"class":400,"line":10183},[398,71070,71071],{"class":51493},"  background-color",[398,71073,51630],{"class":408},[398,71075,71076],{"class":467},"#004085;\n",[398,71078,71079,71081,71083],{"class":400,"line":10189},[398,71080,70991],{"class":51493},[398,71082,51630],{"class":408},[398,71084,70700],{"class":513},[398,71086,71087,71090,71092],{"class":400,"line":10197},[398,71088,71089],{"class":51493},"  border",[398,71091,51630],{"class":408},[398,71093,70668],{"class":513},[398,71095,71096,71099,71101],{"class":400,"line":10202},[398,71097,71098],{"class":51493},"  color",[398,71100,51630],{"class":408},[398,71102,70905],{"class":467},[398,71104,71105,71108,71110],{"class":400,"line":16881},[398,71106,71107],{"class":51493},"  cursor",[398,71109,51630],{"class":408},[398,71111,71112],{"class":513},"pointer;\n",[398,71114,71115,71117,71119],{"class":400,"line":16887},[398,71116,71000],{"class":51493},[398,71118,51630],{"class":408},[398,71120,71005],{"class":513},[398,71122,71123],{"class":400,"line":16910},[398,71124,1841],{"class":408},[398,71126,71127],{"class":400,"line":16916},[398,71128,71129],{"class":513},".info .age {\n",[398,71131,71132,71134,71136],{"class":400,"line":16939},[398,71133,70761],{"class":51493},[398,71135,51630],{"class":408},[398,71137,71138],{"class":513},"50px;\n",[398,71140,71141],{"class":400,"line":16953},[398,71142,1841],{"class":408},[19,71144,71145],{},"思路：",[19,71147,71148],{},[1738,71149],{"alt":316,"src":71150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,71152,71153],{},[1738,71154],{"alt":316,"src":71155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,71157,71158],{},[1738,71159],{"alt":316,"src":71160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[14,71162,71164],{"id":71163},"_3315-重绘回流","3.3.15 重绘回流",[19,71166,71167],{},[1738,71168],{"alt":316,"src":71169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,71171,71172],{},[1738,71173],{"alt":316,"src":71174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,71176,71177],{},[1738,71178],{"alt":316,"src":71179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[343,71181,71183],{"id":71182},"_34-bom","3.4 BOM",[19,71185,71186],{},[1738,71187],{"alt":316,"src":71188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,71190,71191],{},"平时写的document省略了window而已，实际上是window.document",[19,71193,71194],{},"函数也是这样，调用的时候实际为window.fn()",[19,71196,71197],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,71199,71200],{},"window大部分情况下可以省略",[14,71202,71204],{"id":71203},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,71206,71207],{},"只执行一次",[19,71209,71210],{},[1738,71211],{"alt":316,"src":71212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,71214,71215],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,71217,71218],{},[1738,71219],{"alt":316,"src":71220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[14,71222,71224],{"id":71223},"_342-js执行机制","3.4.2 JS执行机制",[19,71226,71227],{},[1738,71228],{"alt":316,"src":71229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,71231,71232],{},"两个的结果都是1111 3333 2222",[19,71234,71235],{},[1738,71236],{"alt":316,"src":71237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,71239,71240],{},[1738,71241],{"alt":316,"src":71242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,71244,71245],{},[1738,71246],{"alt":316,"src":71247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,71249,71250],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,71252,71253],{},"工作流程：",[19,71255,71256],{},[1738,71257],{"alt":316,"src":71258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,71260,71261],{},[1738,71262],{"alt":316,"src":71263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,71265,71266],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,71268,71269],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[14,71271,71273],{"id":71272},"_343-location对象","3.4.3 location对象",[19,71275,71276],{},"location对象属于window这个全局对象下的，可以 省略window",[19,71278,71279],{},[1738,71280],{"alt":316,"src":71281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,71283,71284],{},"href可以跳转页面",[38,71286,71287],{},[41,71288,71289],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,71291,71292],{},"search得到提交信息之后网站后边的地址",[19,71294,71295],{},[1738,71296],{"alt":316,"src":71297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,71299,71300],{},[1738,71301],{"alt":316,"src":71302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[38,71304,71305],{"start":317},[41,71306,71307],{},"hash:这个获取单页面应用#后边的地址",[19,71309,71310],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,71312,71313],{},[1738,71314],{"alt":316,"src":71315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[389,71317,71319],{"className":53260,"code":71318,"language":53262,"meta":316,"style":316},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[395,71320,71321,71341,71361],{"__ignoreMap":316},[398,71322,71323,71325,71327,71329,71331,71334,71337,71339],{"class":400,"line":401},[398,71324,52337],{"class":408},[398,71326,640],{"class":51493},[398,71328,61250],{"class":2239},[398,71330,454],{"class":408},[398,71332,71333],{"class":513},"\"#\u002Fmy\"",[398,71335,71336],{"class":408},">我的\u003C\u002F",[398,71338,640],{"class":51493},[398,71340,51500],{"class":408},[398,71342,71343,71345,71347,71349,71351,71354,71357,71359],{"class":400,"line":317},[398,71344,52337],{"class":408},[398,71346,640],{"class":51493},[398,71348,61250],{"class":2239},[398,71350,454],{"class":408},[398,71352,71353],{"class":513},"\"#\u002Ffriend\"",[398,71355,71356],{"class":408},">关注\u003C\u002F",[398,71358,640],{"class":51493},[398,71360,51500],{"class":408},[398,71362,71363,71365,71367,71369,71371,71374,71377,71379],{"class":400,"line":320},[398,71364,52337],{"class":408},[398,71366,640],{"class":51493},[398,71368,61250],{"class":2239},[398,71370,454],{"class":408},[398,71372,71373],{"class":513},"\"#\u002Fdownload\"",[398,71375,71376],{"class":408},">下载\u003C\u002F",[398,71378,640],{"class":51493},[398,71380,51500],{"class":408},[19,71382,71383],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[38,71385,71386],{"start":320},[41,71387,71388,71389,71391,71392,71394],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53909,71390],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53909,71393],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[14,71396,71398],{"id":71397},"_345-navigator对象","3.4.5 navigator对象",[19,71400,71401],{},[1738,71402],{"alt":316,"src":71403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[389,71405,71409],{"className":71406,"code":71407,"language":71408,"meta":316,"style":316},"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",[395,71410,71411,71416,71427,71439,71444,71495,71536,71541,71554,71566,71571],{"__ignoreMap":316},[398,71412,71413],{"class":400,"line":401},[398,71414,71415],{"class":467},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[398,71417,71418,71420,71422,71424],{"class":400,"line":317},[398,71419,628],{"class":404},[398,71421,409],{"class":408},[398,71423,54642],{"class":404},[398,71425,71426],{"class":408}," () { \n",[398,71428,71429,71431,71434,71436],{"class":400,"line":320},[398,71430,7069],{"class":404},[398,71432,71433],{"class":457}," userAgent",[398,71435,13841],{"class":404},[398,71437,71438],{"class":408}," navigator.userAgent \n",[398,71440,71441],{"class":400,"line":1470},[398,71442,71443],{"class":467},"\u002F\u002F 验证是否为Android或iPhone \n",[398,71445,71446,71448,71451,71453,71456,71459,71461,71463,71466,71468,71471,71475,71477,71479,71481,71484,71486,71488,71490,71492],{"class":400,"line":1476},[398,71447,7069],{"class":404},[398,71449,71450],{"class":457}," android",[398,71452,13841],{"class":404},[398,71454,71455],{"class":408}," userAgent.",[398,71457,71458],{"class":2239},"match",[398,71460,409],{"class":408},[398,71462,986],{"class":513},[398,71464,71465],{"class":48170},"(Android);",[398,71467,1388],{"class":404},[398,71469,71470],{"class":457},"[\\s",[398,71472,71474],{"class":71473},"snhLl","\\\u002F",[398,71476,1342],{"class":457},[398,71478,883],{"class":404},[398,71480,409],{"class":48170},[398,71482,71483],{"class":457},"[\\d.]",[398,71485,883],{"class":404},[398,71487,831],{"class":48170},[398,71489,1388],{"class":404},[398,71491,986],{"class":513},[398,71493,71494],{"class":408},") \n",[398,71496,71497,71499,71502,71504,71506,71508,71510,71512,71515,71518,71521,71523,71525,71528,71530,71532,71534],{"class":400,"line":1490},[398,71498,7069],{"class":404},[398,71500,71501],{"class":457}," iphone",[398,71503,13841],{"class":404},[398,71505,71455],{"class":408},[398,71507,71458],{"class":2239},[398,71509,409],{"class":408},[398,71511,986],{"class":513},[398,71513,71514],{"class":48170},"(iPhone",[398,71516,71517],{"class":457},"\\s",[398,71519,71520],{"class":48170},"OS)",[398,71522,71517],{"class":457},[398,71524,409],{"class":48170},[398,71526,71527],{"class":457},"[\\d_]",[398,71529,883],{"class":404},[398,71531,831],{"class":48170},[398,71533,986],{"class":513},[398,71535,71494],{"class":408},[398,71537,71538],{"class":400,"line":1496},[398,71539,71540],{"class":467},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[398,71542,71543,71545,71548,71551],{"class":400,"line":1587},[398,71544,1807],{"class":404},[398,71546,71547],{"class":408}," (android ",[398,71549,71550],{"class":404},"||",[398,71552,71553],{"class":408}," iphone) { \n",[398,71555,71556,71559,71561,71564],{"class":400,"line":1593},[398,71557,71558],{"class":408},"location.href ",[398,71560,454],{"class":404},[398,71562,71563],{"class":513}," 'http:\u002F\u002Fm.itcast.cn'",[398,71565,2950],{"class":408},[398,71567,71568],{"class":400,"line":1605},[398,71569,71570],{"class":408},"} \n",[398,71572,71573],{"class":400,"line":1888},[398,71574,71575],{"class":408},"})()\n",[14,71577,71579],{"id":71578},"_346-histroy对象","3.4.6 histroy对象",[19,71581,71582],{},[1738,71583],{"alt":316,"src":71584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,71586,71587],{},"浏览器地址的前进与后退!!!",[19,71589,71590],{},"history.back() 等效于 history.go(-1)",[19,71592,71593],{},"history.forward() 等效于 history.go(1)",[343,71595,71597],{"id":71596},"_35-本地存储","3.5 本地存储",[38,71599,71600,71603,71606],{},[41,71601,71602],{},"数据存储在用户浏览器中",[41,71604,71605],{},"设置、读取方便、甚至页面刷新不丢失数据",[41,71607,71608],{},"容量较大，sessionStorage和localStorage约 5M 左右",[14,71610,71612],{"id":71611},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,71614,71615],{},"只能存储字符串",[19,71617,71618],{},[1738,71619],{"alt":316,"src":71620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,71622,71623],{},[1738,71624],{"alt":316,"src":71625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,71627,71628],{},"键值对要加引号,不然就会当变量来看了",[19,71630,71631],{},"localStorage.setItem('uname', 'pink')",[19,71633,71634],{},"刷新之后信息不再丢失",[19,71636,71637],{},"操作key,value会跟着变",[19,71639,71640],{},"删除只删除键就可以,即名字",[19,71642,71631],{},[19,71644,71645],{},"改:",[19,71647,71648],{},"localStorage.setItem('uname','red')",[19,71650,71651],{},"有这个键就是改,没有这个键就是改",[19,71653,71654],{},[1738,71655],{"alt":316,"src":71656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,71658,71659],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,71661,71662],{},[1738,71663],{"alt":316,"src":71664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,71666,71667],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[14,71669,71671],{"id":71670},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,71673,71674],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,71676,71677],{},"特性:",[38,71679,71680,71683,71686,71689],{},[41,71681,71682],{},"生命周期为关闭浏览器窗口",[41,71684,71685],{},"在同一个窗口(页面)下数据可以共享",[41,71687,71688],{},"以键值对的形式存储使用",[41,71690,71691],{},"用法跟localStorage 基本相同",[14,71693,71695],{"id":71694},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,71697,71698],{},"本地只能存储字符串,无法直接存储复杂数据类型",[389,71700,71702],{"className":53260,"code":71701,"language":53262,"meta":316,"style":316},"\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",[395,71703,71704,71712,71717,71722,71727,71732,71736,71741,71746],{"__ignoreMap":316},[398,71705,71706,71708,71710],{"class":400,"line":401},[398,71707,1312],{"class":408},[398,71709,52006],{"class":51493},[398,71711,51500],{"class":408},[398,71713,71714],{"class":400,"line":317},[398,71715,71716],{"class":408},"    const obj = {\n",[398,71718,71719],{"class":400,"line":320},[398,71720,71721],{"class":408},"      uname: 'pink老师',\n",[398,71723,71724],{"class":400,"line":1470},[398,71725,71726],{"class":408},"      age: 18,\n",[398,71728,71729],{"class":400,"line":1476},[398,71730,71731],{"class":408},"      gender: '女'\n",[398,71733,71734],{"class":400,"line":1490},[398,71735,2463],{"class":408},[398,71737,71738],{"class":400,"line":1496},[398,71739,71740],{"class":408},"    \u002F\u002F 存储复杂数据类型\n",[398,71742,71743],{"class":400,"line":1587},[398,71744,71745],{"class":408},"    localStorage.setItem('obj', obj)\n",[398,71747,71748,71750,71752],{"class":400,"line":1593},[398,71749,52610],{"class":408},[398,71751,52006],{"class":51493},[398,71753,51500],{"class":408},[19,71755,71756],{},[1738,71757],{"alt":316,"src":71758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,71760,71761],{},"如果获取一下数据:",[19,71763,71764],{},"log(localStorage.getItem('obj'))",[19,71766,71767],{},[1738,71768],{"alt":316,"src":71769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,71771,71772],{},"发现直接存对象是使用不了的!!!",[22275,71774,71776],{"id":71775},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,71778,71779],{},[1738,71780],{"alt":316,"src":71781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[389,71783,71785],{"className":50826,"code":71784,"language":50828,"meta":316,"style":316},"\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",[395,71786,71787,71795,71805,71815,71824,71832,71836,71840,71866,71885,71893,71897,71902,71907],{"__ignoreMap":316},[398,71788,71789,71791,71793],{"class":400,"line":401},[398,71790,1312],{"class":408},[398,71792,52006],{"class":51493},[398,71794,51500],{"class":408},[398,71796,71797,71799,71801,71803],{"class":400,"line":317},[398,71798,11498],{"class":404},[398,71800,70164],{"class":457},[398,71802,13841],{"class":404},[398,71804,15849],{"class":408},[398,71806,71807,71810,71813],{"class":400,"line":320},[398,71808,71809],{"class":408},"      uname: ",[398,71811,71812],{"class":513},"'pink老师'",[398,71814,31659],{"class":408},[398,71816,71817,71820,71822],{"class":400,"line":1470},[398,71818,71819],{"class":408},"      age: ",[398,71821,1052],{"class":457},[398,71823,31659],{"class":408},[398,71825,71826,71829],{"class":400,"line":1476},[398,71827,71828],{"class":408},"      gender: ",[398,71830,71831],{"class":513},"'女'\n",[398,71833,71834],{"class":400,"line":1490},[398,71835,2463],{"class":408},[398,71837,71838],{"class":400,"line":1496},[398,71839,71740],{"class":467},[398,71841,71842,71845,71848,71850,71853,71855,71858,71860,71863],{"class":400,"line":1587},[398,71843,71844],{"class":408},"  localStorage.",[398,71846,71847],{"class":2239},"setItem",[398,71849,409],{"class":408},[398,71851,71852],{"class":513},"'obj'",[398,71854,12712],{"class":408},[398,71856,71857],{"class":457},"JSON",[398,71859,960],{"class":408},[398,71861,71862],{"class":2239},"stringify",[398,71864,71865],{"class":408},"(obj))\n",[398,71867,71868,71871,71873,71876,71879,71881,71883],{"class":400,"line":1593},[398,71869,71870],{"class":408},"  console.",[398,71872,58440],{"class":2239},[398,71874,71875],{"class":408},"(localStorage.",[398,71877,71878],{"class":2239},"getItem",[398,71880,409],{"class":408},[398,71882,71852],{"class":513},[398,71884,30690],{"class":408},[398,71886,71887,71889,71891],{"class":400,"line":1605},[398,71888,52610],{"class":408},[398,71890,52006],{"class":51493},[398,71892,51500],{"class":408},[398,71894,71895],{"class":400,"line":1888},[398,71896,70814],{"class":408},[398,71898,71899],{"class":400,"line":1893},[398,71900,71901],{"class":408},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[398,71903,71904],{"class":400,"line":1899},[398,71905,71906],{"class":408},"  类型是字符串的\n",[398,71908,71909],{"class":400,"line":1904},[398,71910,71911],{"class":408},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22275,71913,71915],{"id":71914},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,71917,71918],{},[1738,71919],{"alt":316,"src":71920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,71922,71923],{},[1738,71924],{"alt":316,"src":71925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[389,71927,71929],{"className":53260,"code":71928,"language":53262,"meta":316,"style":316},"  \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",[395,71930,71931,71939,71943,71947,71951,71955,71959,71964,71969,71974,71979,71984,71989,71994,71999],{"__ignoreMap":316},[398,71932,71933,71935,71937],{"class":400,"line":401},[398,71934,52337],{"class":408},[398,71936,52006],{"class":51493},[398,71938,51500],{"class":408},[398,71940,71941],{"class":400,"line":317},[398,71942,71716],{"class":408},[398,71944,71945],{"class":400,"line":320},[398,71946,71721],{"class":408},[398,71948,71949],{"class":400,"line":1470},[398,71950,71726],{"class":408},[398,71952,71953],{"class":400,"line":1476},[398,71954,71731],{"class":408},[398,71956,71957],{"class":400,"line":1490},[398,71958,2463],{"class":408},[398,71960,71961],{"class":400,"line":1496},[398,71962,71963],{"class":408},"    \u002F\u002F 1.存储复杂数据类型\n",[398,71965,71966],{"class":400,"line":1587},[398,71967,71968],{"class":408},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[398,71970,71971],{"class":400,"line":1593},[398,71972,71973],{"class":408},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[398,71975,71976],{"class":400,"line":1605},[398,71977,71978],{"class":408},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[398,71980,71981],{"class":400,"line":1888},[398,71982,71983],{"class":408},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[398,71985,71986],{"class":400,"line":1893},[398,71987,71988],{"class":408},"    \u002F\u002F 取\n",[398,71990,71991],{"class":400,"line":1899},[398,71992,71993],{"class":408},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[398,71995,71996],{"class":400,"line":1904},[398,71997,71998],{"class":408},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[398,72000,72001,72003,72005],{"class":400,"line":1918},[398,72002,52610],{"class":408},[398,72004,52006],{"class":51493},[398,72006,51500],{"class":408},[19,72008,72009],{},[1738,72010],{"alt":316,"src":72011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[14,72013,72015],{"id":72014},"_356-数组map方法","3.5.6 数组map方法",[19,72017,72018],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,72020,72021],{},[1738,72022],{"alt":316,"src":72023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,72025,72026],{},[1738,72027],{"alt":316,"src":72028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,72030,72031,72034],{},[23,72032,72033],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,72036,72037],{},"map有返回值，但是forEach没有返回值",[19,72039,72040],{},"map是个方法。用的时候要加 ()",[19,72042,72043],{},"map返回的是一个数组",[14,72045,72047],{"id":72046},"_357-数组中join方法","3.5.7 数组中join方法",[19,72049,72050],{},[1738,72051],{"alt":316,"src":72052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,72054,72055],{},"类似于python中拼接字符串一样！",[38,72057,72058,72061,72064],{},[41,72059,72060],{},"小括号为空则逗号分开",[41,72062,72063],{},"小括号为空字符串 ''，则元素之间没有分隔符",[41,72065,72066],{},"小括号用啥符号就用进行分割",[14,72068,72070],{"id":72069},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[38,72072,72073,72076,72079,72082,72085],{},[41,72074,72075],{},"记住本地时间获取快速方式：new Date().toDateString()",[41,72077,72078],{},"尽量减少DOM操作，用好map+join的渲染方式",[41,72080,72081],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[41,72083,72084],{},"return可以实现函数的结束",[41,72086,72087],{},"禁止跳转是 preventDefault() 不要忘记",[389,72089,72091],{"className":50826,"code":72090,"language":50828,"meta":316,"style":316},"\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",[395,72092,72093,72103,72117,72121,72129,72143,72163,72175,72183,72189,72199,72209,72213,72217,72223,72233,72245,72249,72253,72260,72272,72286,72296,72300,72304,72311,72318,72325,72337,72349,72359,72371,72375,72379,72386,72393,72405,72417,72427,72439,72469,72473,72477,72484,72496,72508,72532,72542,72552,72556,72560,72568,72579,72591,72603,72615,72632,72644,72656,72660,72664,72671,72683,72695,72707,72718,72736,72749,72761,72785,72796,72800,72804,72812,72822,72826,72830,72836,72848,72859,72869,72873,72877,72883,72905,72909,72913,72919,72925,72937,72947,72959,72989,73002,73019,73023,73027,73038,73060,73070,73074,73078,73091,73101,73113,73125,73137,73149,73159,73169,73179,73190,73203,73207,73215,73223,73227,73235,73248,73268,73301,73334,73367,73393,73411,73429,73437,73463,73481,73499,73517,73535,73553,73561,73569,73587,73595,73624,73632,73640,73648,73661,73673,73685,73697,73709,73721,73734,73746,73754,73762,73770,73775,73780,73784,73788,73792,73796,73800,73804,73809,73814,73819,73824,73832,73840,73848,73853,73858,73863,73868,73873,73878,73883,73888,73893,73898,73903,73908,73913,73918,73922,73927,73932,73942,73951,73955,73960,73969,73985,74027,74067,74106,74171,74179,74183,74188,74206,74214,74219,74224,74254,74260,74265,74278,74290,74302,74314,74326,74338,74350,74354,74364,74368,74373,74378,74382,74391,74395,74400,74405,74424,74429,74449,74453,74458,74462,74467,74485,74503,74521,74540,74559,74578,74583,74589,74610,74616,74625,74631,74637,74643,74670,74683,74688,74698,74704,74710,74716,74722,74727,74733,74739,74745,74751,74784,74789,74794,74799,74804,74810,74816,74822,74833,74838,74844,74851,74865,74871,74895,74900,74905,74911,74917,74938,74944,74957,74963,74969,74975,74981,74986,74992,74998,75004,75022,75036,75042,75050,75056,75078,75083,75088,75093,75098,75103,75112,75121,75126],{"__ignoreMap":316},[398,72094,72095,72097,72099,72101],{"class":400,"line":401},[398,72096,51490],{"class":408},[398,72098,51494],{"class":51493},[398,72100,51497],{"class":2239},[398,72102,51500],{"class":408},[398,72104,72105,72107,72109,72111,72113,72115],{"class":400,"line":317},[398,72106,1312],{"class":408},[398,72108,50828],{"class":51493},[398,72110,51509],{"class":2239},[398,72112,454],{"class":408},[398,72114,51514],{"class":513},[398,72116,51500],{"class":408},[398,72118,72119],{"class":400,"line":320},[398,72120,2676],{"emptyLinePlaceholder":328},[398,72122,72123,72125,72127],{"class":400,"line":1470},[398,72124,1312],{"class":408},[398,72126,51527],{"class":51493},[398,72128,51500],{"class":408},[398,72130,72131,72133,72135,72137,72139,72141],{"class":400,"line":1476},[398,72132,52337],{"class":408},[398,72134,51537],{"class":51493},[398,72136,51540],{"class":2239},[398,72138,454],{"class":408},[398,72140,51545],{"class":513},[398,72142,51500],{"class":408},[398,72144,72145,72147,72149,72151,72153,72155,72157,72159,72161],{"class":400,"line":1490},[398,72146,52337],{"class":408},[398,72148,51537],{"class":51493},[398,72150,15197],{"class":2239},[398,72152,454],{"class":408},[398,72154,51584],{"class":513},[398,72156,51564],{"class":2239},[398,72158,454],{"class":408},[398,72160,51591],{"class":513},[398,72162,51500],{"class":408},[398,72164,72165,72167,72169,72171,72173],{"class":400,"line":1496},[398,72166,52337],{"class":408},[398,72168,51600],{"class":51493},[398,72170,51603],{"class":408},[398,72172,51600],{"class":51493},[398,72174,51500],{"class":408},[398,72176,72177,72179,72181],{"class":400,"line":1587},[398,72178,52337],{"class":408},[398,72180,5403],{"class":51493},[398,72182,51500],{"class":408},[398,72184,72185,72187],{"class":400,"line":1593},[398,72186,6680],{"class":51493},[398,72188,15849],{"class":408},[398,72190,72191,72193,72195,72197],{"class":400,"line":1605},[398,72192,54888],{"class":457},[398,72194,51630],{"class":408},[398,72196,593],{"class":457},[398,72198,1566],{"class":408},[398,72200,72201,72203,72205,72207],{"class":400,"line":1888},[398,72202,54899],{"class":457},[398,72204,51630],{"class":408},[398,72206,593],{"class":457},[398,72208,1566],{"class":408},[398,72210,72211],{"class":400,"line":1893},[398,72212,2463],{"class":408},[398,72214,72215],{"class":400,"line":1899},[398,72216,2676],{"emptyLinePlaceholder":328},[398,72218,72219,72221],{"class":400,"line":1904},[398,72220,57472],{"class":51493},[398,72222,15849],{"class":408},[398,72224,72225,72227,72229,72231],{"class":400,"line":1918},[398,72226,57479],{"class":457},[398,72228,51630],{"class":408},[398,72230,51785],{"class":457},[398,72232,1566],{"class":408},[398,72234,72235,72237,72239,72241,72243],{"class":400,"line":1923},[398,72236,62270],{"class":457},[398,72238,51630],{"class":408},[398,72240,1102],{"class":457},[398,72242,51685],{"class":404},[398,72244,1566],{"class":408},[398,72246,72247],{"class":400,"line":1929},[398,72248,2463],{"class":408},[398,72250,72251],{"class":400,"line":1950},[398,72252,2676],{"emptyLinePlaceholder":328},[398,72254,72255,72258],{"class":400,"line":1955},[398,72256,72257],{"class":2239},"    .info",[398,72259,15849],{"class":408},[398,72261,72262,72264,72266,72268,72270],{"class":400,"line":1969},[398,72263,54964],{"class":457},[398,72265,51630],{"class":408},[398,72267,51682],{"class":457},[398,72269,51685],{"class":404},[398,72271,1566],{"class":408},[398,72273,72274,72276,72278,72280,72282,72284],{"class":400,"line":1974},[398,72275,54899],{"class":457},[398,72277,51630],{"class":408},[398,72279,848],{"class":457},[398,72281,51685],{"class":404},[398,72283,51749],{"class":457},[398,72285,1566],{"class":408},[398,72287,72288,72290,72292,72294],{"class":400,"line":2003},[398,72289,57479],{"class":457},[398,72291,51630],{"class":408},[398,72293,51785],{"class":457},[398,72295,1566],{"class":408},[398,72297,72298],{"class":400,"line":2008},[398,72299,2463],{"class":408},[398,72301,72302],{"class":400,"line":2025},[398,72303,2676],{"emptyLinePlaceholder":328},[398,72305,72306,72309],{"class":400,"line":2030},[398,72307,72308],{"class":2239},"    .uname",[398,72310,31659],{"class":408},[398,72312,72313,72316],{"class":400,"line":2035},[398,72314,72315],{"class":2239},"    .age",[398,72317,31659],{"class":408},[398,72319,72320,72323],{"class":400,"line":2040},[398,72321,72322],{"class":2239},"    .salary",[398,72324,15849],{"class":408},[398,72326,72327,72329,72331,72333,72335],{"class":400,"line":2054},[398,72328,54964],{"class":457},[398,72330,51630],{"class":408},[398,72332,713],{"class":457},[398,72334,51685],{"class":404},[398,72336,1566],{"class":408},[398,72338,72339,72341,72343,72345,72347],{"class":400,"line":2059},[398,72340,54978],{"class":457},[398,72342,51630],{"class":408},[398,72344,1102],{"class":457},[398,72346,51685],{"class":404},[398,72348,1566],{"class":408},[398,72350,72351,72353,72355,72357],{"class":400,"line":2853},[398,72352,61973],{"class":457},[398,72354,51630],{"class":408},[398,72356,54930],{"class":457},[398,72358,1566],{"class":408},[398,72360,72361,72363,72365,72367,72369],{"class":400,"line":2867},[398,72362,61943],{"class":457},[398,72364,51630],{"class":408},[398,72366,977],{"class":457},[398,72368,51685],{"class":404},[398,72370,1566],{"class":408},[398,72372,72373],{"class":400,"line":2875},[398,72374,2463],{"class":408},[398,72376,72377],{"class":400,"line":2880},[398,72378,2676],{"emptyLinePlaceholder":328},[398,72380,72381,72384],{"class":400,"line":2886},[398,72382,72383],{"class":2239},"    .gender",[398,72385,31659],{"class":408},[398,72387,72388,72391],{"class":400,"line":2892},[398,72389,72390],{"class":2239},"    .city",[398,72392,15849],{"class":408},[398,72394,72395,72397,72399,72401,72403],{"class":400,"line":2897},[398,72396,54964],{"class":457},[398,72398,51630],{"class":408},[398,72400,713],{"class":457},[398,72402,51685],{"class":404},[398,72404,1566],{"class":408},[398,72406,72407,72409,72411,72413,72415],{"class":400,"line":8225},[398,72408,54978],{"class":457},[398,72410,51630],{"class":408},[398,72412,1227],{"class":457},[398,72414,51685],{"class":404},[398,72416,1566],{"class":408},[398,72418,72419,72421,72423,72425],{"class":400,"line":8249},[398,72420,61973],{"class":457},[398,72422,51630],{"class":408},[398,72424,54930],{"class":457},[398,72426,1566],{"class":408},[398,72428,72429,72431,72433,72435,72437],{"class":400,"line":8254},[398,72430,61943],{"class":457},[398,72432,51630],{"class":408},[398,72434,977],{"class":457},[398,72436,51685],{"class":404},[398,72438,1566],{"class":408},[398,72440,72441,72443,72445,72447,72449,72451,72454,72456,72458,72460,72463,72465,72467],{"class":400,"line":8260},[398,72442,62170],{"class":457},[398,72444,51630],{"class":408},[398,72446,619],{"class":457},[398,72448,51685],{"class":404},[398,72450,51714],{"class":457},[398,72452,72453],{"class":457}," rgb",[398,72455,409],{"class":408},[398,72457,1998],{"class":457},[398,72459,12712],{"class":408},[398,72461,72462],{"class":457},"197",[398,72464,12712],{"class":408},[398,72466,72462],{"class":457},[398,72468,2995],{"class":408},[398,72470,72471],{"class":400,"line":8287},[398,72472,2463],{"class":408},[398,72474,72475],{"class":400,"line":8292},[398,72476,2676],{"emptyLinePlaceholder":328},[398,72478,72479,72482],{"class":400,"line":8298},[398,72480,72481],{"class":51493},"    button",[398,72483,15849],{"class":408},[398,72485,72486,72488,72490,72492,72494],{"class":400,"line":8310},[398,72487,54978],{"class":457},[398,72489,51630],{"class":408},[398,72491,1227],{"class":457},[398,72493,51685],{"class":404},[398,72495,1566],{"class":408},[398,72497,72498,72500,72502,72504,72506],{"class":400,"line":8322},[398,72499,54964],{"class":457},[398,72501,51630],{"class":408},[398,72503,886],{"class":457},[398,72505,51685],{"class":404},[398,72507,1566],{"class":408},[398,72509,72510,72512,72514,72517,72519,72521,72523,72526,72528,72530],{"class":400,"line":8334},[398,72511,55077],{"class":457},[398,72513,51630],{"class":408},[398,72515,72516],{"class":457},"rgb",[398,72518,409],{"class":408},[398,72520,1371],{"class":457},[398,72522,12712],{"class":408},[398,72524,72525],{"class":457},"187",[398,72527,12712],{"class":408},[398,72529,701],{"class":457},[398,72531,2995],{"class":408},[398,72533,72534,72536,72538,72540],{"class":400,"line":9993},[398,72535,57609],{"class":457},[398,72537,51630],{"class":408},[398,72539,61035],{"class":457},[398,72541,1566],{"class":408},[398,72543,72544,72546,72548,72550],{"class":400,"line":10018},[398,72545,62170],{"class":457},[398,72547,51630],{"class":408},[398,72549,593],{"class":457},[398,72551,1566],{"class":408},[398,72553,72554],{"class":400,"line":10041},[398,72555,2463],{"class":408},[398,72557,72558],{"class":400,"line":10065},[398,72559,2676],{"emptyLinePlaceholder":328},[398,72561,72562,72564,72566],{"class":400,"line":10070},[398,72563,72481],{"class":51493},[398,72565,51881],{"class":51493},[398,72567,15849],{"class":408},[398,72569,72570,72572,72574,72577],{"class":400,"line":10075},[398,72571,55202],{"class":457},[398,72573,51630],{"class":408},[398,72575,72576],{"class":457},"inline-block",[398,72578,1566],{"class":408},[398,72580,72581,72583,72585,72587,72589],{"class":400,"line":10080},[398,72582,54964],{"class":457},[398,72584,51630],{"class":408},[398,72586,848],{"class":457},[398,72588,51685],{"class":404},[398,72590,1566],{"class":408},[398,72592,72593,72595,72597,72599,72601],{"class":400,"line":10089},[398,72594,54978],{"class":457},[398,72596,51630],{"class":408},[398,72598,848],{"class":457},[398,72600,51685],{"class":404},[398,72602,1566],{"class":408},[398,72604,72605,72607,72609,72611,72613],{"class":400,"line":10094},[398,72606,57552],{"class":457},[398,72608,51630],{"class":408},[398,72610,874],{"class":457},[398,72612,51685],{"class":404},[398,72614,1566],{"class":408},[398,72616,72617,72619,72621,72623,72625,72627,72630],{"class":400,"line":10100},[398,72618,62170],{"class":457},[398,72620,51630],{"class":408},[398,72622,619],{"class":457},[398,72624,51685],{"class":404},[398,72626,51714],{"class":457},[398,72628,72629],{"class":457}," #fff",[398,72631,1566],{"class":408},[398,72633,72634,72636,72638,72640,72642],{"class":400,"line":10121},[398,72635,55327],{"class":457},[398,72637,51630],{"class":408},[398,72639,721],{"class":457},[398,72641,51685],{"class":404},[398,72643,1566],{"class":408},[398,72645,72646,72648,72650,72652,72654],{"class":400,"line":10127},[398,72647,61943],{"class":457},[398,72649,51630],{"class":408},[398,72651,619],{"class":457},[398,72653,51685],{"class":404},[398,72655,1566],{"class":408},[398,72657,72658],{"class":400,"line":10141},[398,72659,2463],{"class":408},[398,72661,72662],{"class":400,"line":10147},[398,72663,2676],{"emptyLinePlaceholder":328},[398,72665,72666,72669],{"class":400,"line":10174},[398,72667,72668],{"class":2239},"    .total",[398,72670,15849],{"class":408},[398,72672,72673,72675,72677,72679,72681],{"class":400,"line":10183},[398,72674,54964],{"class":457},[398,72676,51630],{"class":408},[398,72678,61822],{"class":457},[398,72680,51685],{"class":404},[398,72682,1566],{"class":408},[398,72684,72685,72687,72689,72691,72693],{"class":400,"line":10189},[398,72686,54978],{"class":457},[398,72688,51630],{"class":408},[398,72690,803],{"class":457},[398,72692,51685],{"class":404},[398,72694,1566],{"class":408},[398,72696,72697,72699,72701,72703,72705],{"class":400,"line":10197},[398,72698,57552],{"class":457},[398,72700,51630],{"class":408},[398,72702,803],{"class":457},[398,72704,51685],{"class":404},[398,72706,1566],{"class":408},[398,72708,72709,72711,72713,72716],{"class":400,"line":10202},[398,72710,57479],{"class":457},[398,72712,51630],{"class":408},[398,72714,72715],{"class":457},"right",[398,72717,1566],{"class":408},[398,72719,72720,72722,72724,72726,72728,72730,72732,72734],{"class":400,"line":16881},[398,72721,54899],{"class":457},[398,72723,51630],{"class":408},[398,72725,803],{"class":457},[398,72727,51685],{"class":404},[398,72729,51749],{"class":457},[398,72731,2314],{"class":457},[398,72733,51685],{"class":404},[398,72735,1566],{"class":408},[398,72737,72738,72741,72743,72745,72747],{"class":400,"line":16887},[398,72739,72740],{"class":457},"      padding-right",[398,72742,51630],{"class":408},[398,72744,848],{"class":457},[398,72746,51685],{"class":404},[398,72748,1566],{"class":408},[398,72750,72751,72753,72755,72757,72759],{"class":400,"line":16910},[398,72752,55115],{"class":457},[398,72754,51630],{"class":408},[398,72756,925],{"class":457},[398,72758,51685],{"class":404},[398,72760,1566],{"class":408},[398,72762,72763,72765,72767,72769,72771,72774,72776,72779,72781,72783],{"class":400,"line":16916},[398,72764,55077],{"class":457},[398,72766,51630],{"class":408},[398,72768,72516],{"class":457},[398,72770,409],{"class":408},[398,72772,72773],{"class":457},"237",[398,72775,12712],{"class":408},[398,72777,72778],{"class":457},"235",[398,72780,12712],{"class":408},[398,72782,72778],{"class":457},[398,72784,2995],{"class":408},[398,72786,72787,72790,72792,72794],{"class":400,"line":16939},[398,72788,72789],{"class":457},"      box-sizing",[398,72791,51630],{"class":408},[398,72793,60698],{"class":457},[398,72795,1566],{"class":408},[398,72797,72798],{"class":400,"line":16953},[398,72799,2463],{"class":408},[398,72801,72802],{"class":400,"line":16973},[398,72803,2676],{"emptyLinePlaceholder":328},[398,72805,72806,72808,72810],{"class":400,"line":16979},[398,72807,72668],{"class":2239},[398,72809,51881],{"class":51493},[398,72811,15849],{"class":408},[398,72813,72814,72816,72818,72820],{"class":400,"line":16990},[398,72815,57609],{"class":457},[398,72817,51630],{"class":408},[398,72819,57614],{"class":457},[398,72821,1566],{"class":408},[398,72823,72824],{"class":400,"line":17013},[398,72825,2463],{"class":408},[398,72827,72828],{"class":400,"line":17035},[398,72829,2676],{"emptyLinePlaceholder":328},[398,72831,72832,72834],{"class":400,"line":17040},[398,72833,65216],{"class":51493},[398,72835,15849],{"class":408},[398,72837,72838,72840,72842,72844,72846],{"class":400,"line":17046},[398,72839,54964],{"class":457},[398,72841,51630],{"class":408},[398,72843,61822],{"class":457},[398,72845,51685],{"class":404},[398,72847,1566],{"class":408},[398,72849,72850,72852,72854,72857],{"class":400,"line":17060},[398,72851,54899],{"class":457},[398,72853,51630],{"class":408},[398,72855,72856],{"class":457},"auto",[398,72858,1566],{"class":408},[398,72860,72861,72863,72865,72867],{"class":400,"line":17073},[398,72862,65223],{"class":457},[398,72864,51630],{"class":408},[398,72866,65228],{"class":457},[398,72868,1566],{"class":408},[398,72870,72871],{"class":400,"line":17078},[398,72872,2463],{"class":408},[398,72874,72875],{"class":400,"line":17092},[398,72876,2676],{"emptyLinePlaceholder":328},[398,72878,72879,72881],{"class":400,"line":17097},[398,72880,65308],{"class":51493},[398,72882,15849],{"class":408},[398,72884,72885,72887,72889,72891,72893,72895,72897,72899,72901,72903],{"class":400,"line":17103},[398,72886,55077],{"class":457},[398,72888,51630],{"class":408},[398,72890,72516],{"class":457},[398,72892,409],{"class":408},[398,72894,72773],{"class":457},[398,72896,12712],{"class":408},[398,72898,72778],{"class":457},[398,72900,12712],{"class":408},[398,72902,72778],{"class":457},[398,72904,2995],{"class":408},[398,72906,72907],{"class":400,"line":17108},[398,72908,2463],{"class":408},[398,72910,72911],{"class":400,"line":17122},[398,72912,2676],{"emptyLinePlaceholder":328},[398,72914,72915,72917],{"class":400,"line":17127},[398,72916,65308],{"class":51493},[398,72918,31659],{"class":408},[398,72920,72921,72923],{"class":400,"line":17132},[398,72922,65374],{"class":51493},[398,72924,15849],{"class":408},[398,72926,72927,72929,72931,72933,72935],{"class":400,"line":17146},[398,72928,54978],{"class":457},[398,72930,51630],{"class":408},[398,72932,675],{"class":457},[398,72934,51685],{"class":404},[398,72936,1566],{"class":408},[398,72938,72939,72941,72943,72945],{"class":400,"line":17158},[398,72940,57479],{"class":457},[398,72942,51630],{"class":408},[398,72944,95],{"class":457},[398,72946,1566],{"class":408},[398,72948,72949,72951,72953,72955,72957],{"class":400,"line":17163},[398,72950,55115],{"class":457},[398,72952,51630],{"class":408},[398,72954,951],{"class":457},[398,72956,51685],{"class":404},[398,72958,1566],{"class":408},[398,72960,72961,72963,72965,72967,72969,72971,72973,72975,72978,72980,72983,72985,72987],{"class":400,"line":17176},[398,72962,62170],{"class":457},[398,72964,51630],{"class":408},[398,72966,619],{"class":457},[398,72968,51685],{"class":404},[398,72970,51714],{"class":457},[398,72972,72453],{"class":457},[398,72974,409],{"class":408},[398,72976,72977],{"class":457},"228",[398,72979,12712],{"class":408},[398,72981,72982],{"class":457},"225",[398,72984,12712],{"class":408},[398,72986,72982],{"class":457},[398,72988,2995],{"class":408},[398,72990,72991,72994,72996,72998,73000],{"class":400,"line":17181},[398,72992,72993],{"class":457},"      padding-left",[398,72995,51630],{"class":408},[398,72997,721],{"class":457},[398,72999,51685],{"class":404},[398,73001,1566],{"class":408},[398,73003,73004,73006,73008,73010,73013,73015,73017],{"class":400,"line":17186},[398,73005,62053],{"class":457},[398,73007,51630],{"class":408},[398,73009,28314],{"class":457},[398,73011,73012],{"class":457}," linear",[398,73014,62060],{"class":457},[398,73016,1097],{"class":404},[398,73018,1566],{"class":408},[398,73020,73021],{"class":400,"line":17191},[398,73022,2463],{"class":408},[398,73024,73025],{"class":400,"line":17204},[398,73026,2676],{"emptyLinePlaceholder":328},[398,73028,73029,73032,73034,73036],{"class":400,"line":17209},[398,73030,73031],{"class":51493},"    tbody",[398,73033,70337],{"class":51493},[398,73035,61133],{"class":2239},[398,73037,15849],{"class":408},[398,73039,73040,73042,73044,73046,73048,73050,73052,73054,73056,73058],{"class":400,"line":32826},[398,73041,55077],{"class":457},[398,73043,51630],{"class":408},[398,73045,72516],{"class":457},[398,73047,409],{"class":408},[398,73049,72773],{"class":457},[398,73051,12712],{"class":408},[398,73053,72778],{"class":457},[398,73055,12712],{"class":408},[398,73057,72778],{"class":457},[398,73059,2995],{"class":408},[398,73061,73062,73064,73066,73068],{"class":400,"line":32832},[398,73063,62218],{"class":457},[398,73065,51630],{"class":408},[398,73067,62223],{"class":457},[398,73069,1566],{"class":408},[398,73071,73072],{"class":400,"line":32838},[398,73073,2463],{"class":408},[398,73075,73076],{"class":400,"line":32844},[398,73077,2676],{"emptyLinePlaceholder":328},[398,73079,73080,73082,73084,73087,73089],{"class":400,"line":32850},[398,73081,73031],{"class":51493},[398,73083,70337],{"class":51493},[398,73085,73086],{"class":51493}," td",[398,73088,1674],{"class":51493},[398,73090,15849],{"class":408},[398,73092,73093,73095,73097,73099],{"class":400,"line":32861},[398,73094,55202],{"class":457},[398,73096,51630],{"class":408},[398,73098,61062],{"class":457},[398,73100,1566],{"class":408},[398,73102,73103,73105,73107,73109,73111],{"class":400,"line":32867},[398,73104,54964],{"class":457},[398,73106,51630],{"class":408},[398,73108,1309],{"class":457},[398,73110,51685],{"class":404},[398,73112,1566],{"class":408},[398,73114,73115,73117,73119,73121,73123],{"class":400,"line":32887},[398,73116,54978],{"class":457},[398,73118,51630],{"class":408},[398,73120,1227],{"class":457},[398,73122,51685],{"class":404},[398,73124,1566],{"class":408},[398,73126,73127,73129,73131,73133,73135],{"class":400,"line":32893},[398,73128,57552],{"class":457},[398,73130,51630],{"class":408},[398,73132,1227],{"class":457},[398,73134,51685],{"class":404},[398,73136,1566],{"class":408},[398,73138,73139,73141,73143,73145,73147],{"class":400,"line":32904},[398,73140,62270],{"class":457},[398,73142,51630],{"class":408},[398,73144,486],{"class":457},[398,73146,51685],{"class":404},[398,73148,1566],{"class":408},[398,73150,73151,73153,73155,73157],{"class":400,"line":32910},[398,73152,57609],{"class":457},[398,73154,51630],{"class":408},[398,73156,61035],{"class":457},[398,73158,1566],{"class":408},[398,73160,73161,73163,73165,73167],{"class":400,"line":32916},[398,73162,57479],{"class":457},[398,73164,51630],{"class":408},[398,73166,51785],{"class":457},[398,73168,1566],{"class":408},[398,73170,73171,73173,73175,73177],{"class":400,"line":32922},[398,73172,64163],{"class":457},[398,73174,51630],{"class":408},[398,73176,54930],{"class":457},[398,73178,1566],{"class":408},[398,73180,73181,73183,73185,73188],{"class":400,"line":32928},[398,73182,55077],{"class":457},[398,73184,51630],{"class":408},[398,73186,73187],{"class":457},"orange",[398,73189,1566],{"class":408},[398,73191,73192,73194,73196,73199,73201],{"class":400,"line":32934},[398,73193,55327],{"class":457},[398,73195,51630],{"class":408},[398,73197,73198],{"class":457},"12.5",[398,73200,51685],{"class":404},[398,73202,1566],{"class":408},[398,73204,73205],{"class":400,"line":32940},[398,73206,2463],{"class":408},[398,73208,73209,73211,73213],{"class":400,"line":32946},[398,73210,52610],{"class":408},[398,73212,5403],{"class":51493},[398,73214,51500],{"class":408},[398,73216,73217,73219,73221],{"class":400,"line":32966},[398,73218,51978],{"class":408},[398,73220,51527],{"class":51493},[398,73222,51500],{"class":408},[398,73224,73225],{"class":400,"line":32972},[398,73226,2676],{"emptyLinePlaceholder":328},[398,73228,73229,73231,73233],{"class":400,"line":32988},[398,73230,1312],{"class":408},[398,73232,51993],{"class":51493},[398,73234,51500],{"class":408},[398,73236,73237,73239,73241,73244,73246],{"class":400,"line":32994},[398,73238,52337],{"class":408},[398,73240,343],{"class":51493},[398,73242,73243],{"class":408},">学生就业统计表\u003C\u002F",[398,73245,343],{"class":51493},[398,73247,51500],{"class":408},[398,73249,73250,73252,73254,73256,73258,73260,73262,73264,73266],{"class":400,"line":33008},[398,73251,52337],{"class":408},[398,73253,66818],{"class":51493},[398,73255,53679],{"class":2239},[398,73257,454],{"class":408},[398,73259,62857],{"class":513},[398,73261,69263],{"class":2239},[398,73263,454],{"class":408},[398,73265,31969],{"class":513},[398,73267,51500],{"class":408},[398,73269,73270,73272,73274,73276,73278,73280,73282,73284,73286,73288,73290,73293,73295,73297,73299],{"class":400,"line":33014},[398,73271,51534],{"class":408},[398,73273,54014],{"class":51493},[398,73275,54017],{"class":2239},[398,73277,454],{"class":408},[398,73279,62892],{"class":513},[398,73281,15197],{"class":2239},[398,73283,454],{"class":408},[398,73285,69289],{"class":513},[398,73287,61213],{"class":2239},[398,73289,454],{"class":408},[398,73291,73292],{"class":513},"\"姓名\"",[398,73294,53679],{"class":2239},[398,73296,454],{"class":408},[398,73298,69289],{"class":513},[398,73300,51500],{"class":408},[398,73302,73303,73305,73307,73309,73311,73313,73315,73317,73319,73321,73323,73326,73328,73330,73332],{"class":400,"line":33029},[398,73304,51534],{"class":408},[398,73306,54014],{"class":51493},[398,73308,54017],{"class":2239},[398,73310,454],{"class":408},[398,73312,62892],{"class":513},[398,73314,15197],{"class":2239},[398,73316,454],{"class":408},[398,73318,69317],{"class":513},[398,73320,61213],{"class":2239},[398,73322,454],{"class":408},[398,73324,73325],{"class":513},"\"年龄\"",[398,73327,53679],{"class":2239},[398,73329,454],{"class":408},[398,73331,69317],{"class":513},[398,73333,51500],{"class":408},[398,73335,73336,73338,73340,73342,73344,73346,73348,73350,73352,73354,73356,73359,73361,73363,73365],{"class":400,"line":33035},[398,73337,51534],{"class":408},[398,73339,54014],{"class":51493},[398,73341,54017],{"class":2239},[398,73343,454],{"class":408},[398,73345,62892],{"class":513},[398,73347,15197],{"class":2239},[398,73349,454],{"class":408},[398,73351,69419],{"class":513},[398,73353,61213],{"class":2239},[398,73355,454],{"class":408},[398,73357,73358],{"class":513},"\"薪资\"",[398,73360,53679],{"class":2239},[398,73362,454],{"class":408},[398,73364,69419],{"class":513},[398,73366,51500],{"class":408},[398,73368,73369,73371,73373,73375,73377,73379,73381,73383,73385,73387,73389,73391],{"class":400,"line":33044},[398,73370,51534],{"class":408},[398,73372,69337],{"class":51493},[398,73374,15197],{"class":2239},[398,73376,454],{"class":408},[398,73378,69344],{"class":513},[398,73380,15236],{"class":2239},[398,73382,454],{"class":408},[398,73384,7929],{"class":513},[398,73386,53679],{"class":2239},[398,73388,454],{"class":408},[398,73390,69344],{"class":513},[398,73392,51500],{"class":408},[398,73394,73395,73397,73399,73401,73403,73405,73407,73409],{"class":400,"line":33050},[398,73396,55427],{"class":408},[398,73398,69359],{"class":51493},[398,73400,66844],{"class":2239},[398,73402,454],{"class":408},[398,73404,10238],{"class":513},[398,73406,69368],{"class":408},[398,73408,69359],{"class":51493},[398,73410,51500],{"class":408},[398,73412,73413,73415,73417,73419,73421,73423,73425,73427],{"class":400,"line":33059},[398,73414,55427],{"class":408},[398,73416,69359],{"class":51493},[398,73418,66844],{"class":2239},[398,73420,454],{"class":408},[398,73422,10307],{"class":513},[398,73424,69387],{"class":408},[398,73426,69359],{"class":51493},[398,73428,51500],{"class":408},[398,73430,73431,73433,73435],{"class":400,"line":33065},[398,73432,51969],{"class":408},[398,73434,69337],{"class":51493},[398,73436,51500],{"class":408},[398,73438,73439,73441,73443,73445,73447,73449,73451,73453,73455,73457,73459,73461],{"class":400,"line":33071},[398,73440,51534],{"class":408},[398,73442,69337],{"class":51493},[398,73444,15197],{"class":2239},[398,73446,454],{"class":408},[398,73448,69441],{"class":513},[398,73450,15236],{"class":2239},[398,73452,454],{"class":408},[398,73454,7929],{"class":513},[398,73456,53679],{"class":2239},[398,73458,454],{"class":408},[398,73460,69441],{"class":513},[398,73462,51500],{"class":408},[398,73464,73465,73467,73469,73471,73473,73475,73477,73479],{"class":400,"line":33080},[398,73466,55427],{"class":408},[398,73468,69359],{"class":51493},[398,73470,66844],{"class":2239},[398,73472,454],{"class":408},[398,73474,69462],{"class":513},[398,73476,69465],{"class":408},[398,73478,69359],{"class":51493},[398,73480,51500],{"class":408},[398,73482,73483,73485,73487,73489,73491,73493,73495,73497],{"class":400,"line":33086},[398,73484,55427],{"class":408},[398,73486,69359],{"class":51493},[398,73488,66844],{"class":2239},[398,73490,454],{"class":408},[398,73492,69482],{"class":513},[398,73494,69485],{"class":408},[398,73496,69359],{"class":51493},[398,73498,51500],{"class":408},[398,73500,73501,73503,73505,73507,73509,73511,73513,73515],{"class":400,"line":33097},[398,73502,55427],{"class":408},[398,73504,69359],{"class":51493},[398,73506,66844],{"class":2239},[398,73508,454],{"class":408},[398,73510,69502],{"class":513},[398,73512,69505],{"class":408},[398,73514,69359],{"class":51493},[398,73516,51500],{"class":408},[398,73518,73519,73521,73523,73525,73527,73529,73531,73533],{"class":400,"line":33103},[398,73520,55427],{"class":408},[398,73522,69359],{"class":51493},[398,73524,66844],{"class":2239},[398,73526,454],{"class":408},[398,73528,69522],{"class":513},[398,73530,69525],{"class":408},[398,73532,69359],{"class":51493},[398,73534,51500],{"class":408},[398,73536,73537,73539,73541,73543,73545,73547,73549,73551],{"class":400,"line":33122},[398,73538,55427],{"class":408},[398,73540,69359],{"class":51493},[398,73542,66844],{"class":2239},[398,73544,454],{"class":408},[398,73546,69542],{"class":513},[398,73548,69545],{"class":408},[398,73550,69359],{"class":51493},[398,73552,51500],{"class":408},[398,73554,73555,73557,73559],{"class":400,"line":33128},[398,73556,51969],{"class":408},[398,73558,69337],{"class":51493},[398,73560,51500],{"class":408},[398,73562,73563,73565,73567],{"class":400,"line":33139},[398,73564,51534],{"class":408},[398,73566,54080],{"class":51493},[398,73568,51500],{"class":408},[398,73570,73571,73573,73575,73578,73580,73583,73585],{"class":400,"line":33145},[398,73572,55427],{"class":408},[398,73574,398],{"class":51493},[398,73576,73577],{"class":408},">+\u003C\u002F",[398,73579,398],{"class":51493},[398,73581,73582],{"class":408},">添加\u003C\u002F",[398,73584,54080],{"class":51493},[398,73586,51500],{"class":408},[398,73588,73589,73591,73593],{"class":400,"line":33165},[398,73590,52610],{"class":408},[398,73592,66818],{"class":51493},[398,73594,51500],{"class":408},[398,73596,73597,73599,73601,73603,73605,73607,73610,73612,73615,73617,73620,73622],{"class":400,"line":33181},[398,73598,52337],{"class":408},[398,73600,51804],{"class":51493},[398,73602,53679],{"class":2239},[398,73604,454],{"class":408},[398,73606,62773],{"class":513},[398,73608,73609],{"class":408},">共有数据 \u003C",[398,73611,398],{"class":51493},[398,73613,73614],{"class":408},">0\u003C\u002F",[398,73616,398],{"class":51493},[398,73618,73619],{"class":408},"> 条\u003C\u002F",[398,73621,51804],{"class":51493},[398,73623,51500],{"class":408},[398,73625,73626,73628,73630],{"class":400,"line":33187},[398,73627,52337],{"class":408},[398,73629,84],{"class":51493},[398,73631,51500],{"class":408},[398,73633,73634,73636,73638],{"class":400,"line":33201},[398,73635,51534],{"class":408},[398,73637,87],{"class":51493},[398,73639,51500],{"class":408},[398,73641,73642,73644,73646],{"class":400,"line":33207},[398,73643,55427],{"class":408},[398,73645,90],{"class":51493},[398,73647,51500],{"class":408},[398,73649,73650,73652,73654,73657,73659],{"class":400,"line":33213},[398,73651,55495],{"class":408},[398,73653,93],{"class":51493},[398,73655,73656],{"class":408},">ID\u003C\u002F",[398,73658,93],{"class":51493},[398,73660,51500],{"class":408},[398,73662,73663,73665,73667,73669,73671],{"class":400,"line":33224},[398,73664,55495],{"class":408},[398,73666,93],{"class":51493},[398,73668,69648],{"class":408},[398,73670,93],{"class":51493},[398,73672,51500],{"class":408},[398,73674,73675,73677,73679,73681,73683],{"class":400,"line":33230},[398,73676,55495],{"class":408},[398,73678,93],{"class":51493},[398,73680,69661],{"class":408},[398,73682,93],{"class":51493},[398,73684,51500],{"class":408},[398,73686,73687,73689,73691,73693,73695],{"class":400,"line":33236},[398,73688,55495],{"class":408},[398,73690,93],{"class":51493},[398,73692,69674],{"class":408},[398,73694,93],{"class":51493},[398,73696,51500],{"class":408},[398,73698,73699,73701,73703,73705,73707],{"class":400,"line":33246},[398,73700,55495],{"class":408},[398,73702,93],{"class":51493},[398,73704,69687],{"class":408},[398,73706,93],{"class":51493},[398,73708,51500],{"class":408},[398,73710,73711,73713,73715,73717,73719],{"class":400,"line":33252},[398,73712,55495],{"class":408},[398,73714,93],{"class":51493},[398,73716,69700],{"class":408},[398,73718,93],{"class":51493},[398,73720,51500],{"class":408},[398,73722,73723,73725,73727,73730,73732],{"class":400,"line":33263},[398,73724,55495],{"class":408},[398,73726,93],{"class":51493},[398,73728,73729],{"class":408},">录入时间\u003C\u002F",[398,73731,93],{"class":51493},[398,73733,51500],{"class":408},[398,73735,73736,73738,73740,73742,73744],{"class":400,"line":33269},[398,73737,55495],{"class":408},[398,73739,93],{"class":51493},[398,73741,69713],{"class":408},[398,73743,93],{"class":51493},[398,73745,51500],{"class":408},[398,73747,73748,73750,73752],{"class":400,"line":33279},[398,73749,55600],{"class":408},[398,73751,90],{"class":51493},[398,73753,51500],{"class":408},[398,73755,73756,73758,73760],{"class":400,"line":33284},[398,73757,51969],{"class":408},[398,73759,87],{"class":51493},[398,73761,51500],{"class":408},[398,73763,73764,73766,73768],{"class":400,"line":33290},[398,73765,51534],{"class":408},[398,73767,101],{"class":51493},[398,73769,51500],{"class":408},[398,73771,73772],{"class":400,"line":33339},[398,73773,73774],{"class":467},"      \u003C!-- \u003Ctr>\n",[398,73776,73777],{"class":400,"line":33386},[398,73778,73779],{"class":467},"        \u003Ctd>1\u003C\u002Ftd>\n",[398,73781,73782],{"class":400,"line":33391},[398,73783,73779],{"class":467},[398,73785,73786],{"class":400,"line":33397},[398,73787,73779],{"class":467},[398,73789,73790],{"class":400,"line":33416},[398,73791,73779],{"class":467},[398,73793,73794],{"class":400,"line":33422},[398,73795,73779],{"class":467},[398,73797,73798],{"class":400,"line":33442},[398,73799,73779],{"class":467},[398,73801,73802],{"class":400,"line":33448},[398,73803,73779],{"class":467},[398,73805,73806],{"class":400,"line":33454},[398,73807,73808],{"class":467},"        \u003Ctd>\n",[398,73810,73811],{"class":400,"line":33464},[398,73812,73813],{"class":467},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[398,73815,73816],{"class":400,"line":33469},[398,73817,73818],{"class":467},"        \u003C\u002Ftd>\n",[398,73820,73821],{"class":400,"line":33475},[398,73822,73823],{"class":467},"      \u003C\u002Ftr> -->\n",[398,73825,73826,73828,73830],{"class":400,"line":33491},[398,73827,51969],{"class":408},[398,73829,101],{"class":51493},[398,73831,51500],{"class":408},[398,73833,73834,73836,73838],{"class":400,"line":33536},[398,73835,52610],{"class":408},[398,73837,84],{"class":51493},[398,73839,51500],{"class":408},[398,73841,73842,73844,73846],{"class":400,"line":33542},[398,73843,52337],{"class":408},[398,73845,52006],{"class":51493},[398,73847,51500],{"class":408},[398,73849,73850],{"class":400,"line":33548},[398,73851,73852],{"class":467},"    \u002F\u002F const initData = [{\n",[398,73854,73855],{"class":400,"line":33554},[398,73856,73857],{"class":467},"    \u002F\u002F   unameId: 1,\n",[398,73859,73860],{"class":400,"line":33565},[398,73861,73862],{"class":467},"    \u002F\u002F   uname: '华晨宇',\n",[398,73864,73865],{"class":400,"line":33571},[398,73866,73867],{"class":467},"    \u002F\u002F   age: 22,\n",[398,73869,73870],{"class":400,"line":33577},[398,73871,73872],{"class":467},"    \u002F\u002F   salary: 12000,\n",[398,73874,73875],{"class":400,"line":33583},[398,73876,73877],{"class":467},"    \u002F\u002F   gender: '男',\n",[398,73879,73880],{"class":400,"line":33601},[398,73881,73882],{"class":467},"    \u002F\u002F   city: '北京',\n",[398,73884,73885],{"class":400,"line":33615},[398,73886,73887],{"class":467},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[398,73889,73890],{"class":400,"line":33624},[398,73891,73892],{"class":467},"    \u002F\u002F }]\n",[398,73894,73895],{"class":400,"line":33633},[398,73896,73897],{"class":467},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[398,73899,73900],{"class":400,"line":33642},[398,73901,73902],{"class":467},"    \u002F\u002F 1.渲染业务\n",[398,73904,73905],{"class":400,"line":33651},[398,73906,73907],{"class":467},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[398,73909,73910],{"class":400,"line":33657},[398,73911,73912],{"class":467},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[398,73914,73915],{"class":400,"line":33663},[398,73916,73917],{"class":467},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[398,73919,73920],{"class":400,"line":33671},[398,73921,2676],{"emptyLinePlaceholder":328},[398,73923,73924],{"class":400,"line":33676},[398,73925,73926],{"class":467},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[398,73928,73929],{"class":400,"line":33682},[398,73930,73931],{"class":467},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[398,73933,73934,73936,73938,73940],{"class":400,"line":33693},[398,73935,11498],{"class":404},[398,73937,57888],{"class":457},[398,73939,13841],{"class":404},[398,73941,52031],{"class":408},[398,73943,73944,73947,73949],{"class":400,"line":33699},[398,73945,73946],{"class":408},"    console.",[398,73948,58440],{"class":2239},[398,73950,52605],{"class":408},[398,73952,73953],{"class":400,"line":33719},[398,73954,2676],{"emptyLinePlaceholder":328},[398,73956,73957],{"class":400,"line":33725},[398,73958,73959],{"class":467},"    \u002F\u002F 时间函数\n",[398,73961,73962,73964,73967],{"class":400,"line":33731},[398,73963,70277],{"class":404},[398,73965,73966],{"class":2239}," getTime",[398,73968,11130],{"class":408},[398,73970,73971,73973,73976,73978,73980,73983],{"class":400,"line":33737},[398,73972,58421],{"class":404},[398,73974,73975],{"class":457}," date",[398,73977,13841],{"class":404},[398,73979,11855],{"class":404},[398,73981,73982],{"class":2239}," Date",[398,73984,2252],{"class":408},[398,73986,73987,73989,73991,73993,73996,73999,74001,74003,74005,74008,74011,74013,74015,74017,74019,74021,74023,74025],{"class":400,"line":33754},[398,73988,58421],{"class":404},[398,73990,16368],{"class":457},[398,73992,13841],{"class":404},[398,73994,73995],{"class":408}," date.",[398,73997,73998],{"class":2239},"getHours",[398,74000,13327],{"class":408},[398,74002,1312],{"class":404},[398,74004,2314],{"class":457},[398,74006,74007],{"class":404}," ?",[398,74009,74010],{"class":513}," '0'",[398,74012,45759],{"class":404},[398,74014,73995],{"class":408},[398,74016,73998],{"class":2239},[398,74018,13327],{"class":408},[398,74020,1261],{"class":404},[398,74022,73995],{"class":408},[398,74024,73998],{"class":2239},[398,74026,2252],{"class":408},[398,74028,74029,74031,74034,74036,74038,74041,74043,74045,74047,74049,74051,74053,74055,74057,74059,74061,74063,74065],{"class":400,"line":33760},[398,74030,58421],{"class":404},[398,74032,74033],{"class":457}," m",[398,74035,13841],{"class":404},[398,74037,73995],{"class":408},[398,74039,74040],{"class":2239},"getMinutes",[398,74042,13327],{"class":408},[398,74044,1312],{"class":404},[398,74046,2314],{"class":457},[398,74048,74007],{"class":404},[398,74050,74010],{"class":513},[398,74052,45759],{"class":404},[398,74054,73995],{"class":408},[398,74056,74040],{"class":2239},[398,74058,13327],{"class":408},[398,74060,1261],{"class":404},[398,74062,73995],{"class":408},[398,74064,74040],{"class":2239},[398,74066,2252],{"class":408},[398,74068,74069,74071,74073,74075,74077,74080,74082,74084,74086,74088,74090,74092,74094,74096,74098,74100,74102,74104],{"class":400,"line":33766},[398,74070,58421],{"class":404},[398,74072,8705],{"class":457},[398,74074,13841],{"class":404},[398,74076,73995],{"class":408},[398,74078,74079],{"class":2239},"getSeconds",[398,74081,13327],{"class":408},[398,74083,1312],{"class":404},[398,74085,2314],{"class":457},[398,74087,74007],{"class":404},[398,74089,74010],{"class":513},[398,74091,45759],{"class":404},[398,74093,73995],{"class":408},[398,74095,74079],{"class":2239},[398,74097,13327],{"class":408},[398,74099,1261],{"class":404},[398,74101,73995],{"class":408},[398,74103,74079],{"class":2239},[398,74105,2252],{"class":408},[398,74107,74108,74110,74113,74115,74117,74120,74122,74125,74127,74130,74132,74134,74137,74139,74141,74143,74145,74147,74149,74152,74154,74157,74159,74162,74164,74166,74168],{"class":400,"line":33772},[398,74109,58421],{"class":404},[398,74111,74112],{"class":457}," str",[398,74114,13841],{"class":404},[398,74116,63096],{"class":513},[398,74118,74119],{"class":408},"date",[398,74121,960],{"class":513},[398,74123,74124],{"class":2239},"getFullYear",[398,74126,2703],{"class":513},[398,74128,74129],{"class":513},"}\u002F${",[398,74131,74119],{"class":408},[398,74133,960],{"class":513},[398,74135,74136],{"class":2239},"getMonth",[398,74138,13327],{"class":513},[398,74140,883],{"class":404},[398,74142,25396],{"class":457},[398,74144,74129],{"class":513},[398,74146,74119],{"class":408},[398,74148,960],{"class":513},[398,74150,74151],{"class":2239},"getDate",[398,74153,2703],{"class":513},[398,74155,74156],{"class":513},"} ${",[398,74158,817],{"class":408},[398,74160,74161],{"class":513},"}:${",[398,74163,946],{"class":408},[398,74165,74161],{"class":513},[398,74167,1097],{"class":408},[398,74169,74170],{"class":513},"}`\n",[398,74172,74173,74176],{"class":400,"line":33778},[398,74174,74175],{"class":404},"      return",[398,74177,74178],{"class":408}," str\n",[398,74180,74181],{"class":400,"line":33784},[398,74182,2463],{"class":408},[398,74184,74185],{"class":400,"line":33811},[398,74186,74187],{"class":467},"    \u002F\u002F 渲染函数\n",[398,74189,74190,74192,74194,74196,74198,74200,74202,74204],{"class":400,"line":33835},[398,74191,11498],{"class":404},[398,74193,69940],{"class":457},[398,74195,13841],{"class":404},[398,74197,54589],{"class":408},[398,74199,54592],{"class":2239},[398,74201,409],{"class":408},[398,74203,69951],{"class":513},[398,74205,415],{"class":408},[398,74207,74208,74210,74212],{"class":400,"line":33841},[398,74209,70277],{"class":404},[398,74211,70280],{"class":2239},[398,74213,11130],{"class":408},[398,74215,74216],{"class":400,"line":33847},[398,74217,74218],{"class":467},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[398,74220,74221],{"class":400,"line":33853},[398,74222,74223],{"class":467},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[398,74225,74226,74228,74231,74233,74235,74238,74240,74242,74244,74247,74249,74252],{"class":400,"line":33864},[398,74227,58421],{"class":404},[398,74229,74230],{"class":457}," trArr",[398,74232,13841],{"class":404},[398,74234,52158],{"class":408},[398,74236,74237],{"class":2239},"map",[398,74239,409],{"class":408},[398,74241,54642],{"class":404},[398,74243,1934],{"class":408},[398,74245,74246],{"class":5493},"ele",[398,74248,12712],{"class":408},[398,74250,74251],{"class":5493},"index",[398,74253,12719],{"class":408},[398,74255,74256,74258],{"class":400,"line":33875},[398,74257,15029],{"class":404},[398,74259,70361],{"class":513},[398,74261,74262],{"class":400,"line":33881},[398,74263,74264],{"class":513},"      \u003Ctr>\n",[398,74266,74267,74269,74271,74273,74276],{"class":400,"line":33898},[398,74268,70366],{"class":513},[398,74270,74246],{"class":408},[398,74272,960],{"class":513},[398,74274,74275],{"class":408},"unameId",[398,74277,70381],{"class":513},[398,74279,74280,74282,74284,74286,74288],{"class":400,"line":33921},[398,74281,70366],{"class":513},[398,74283,74246],{"class":408},[398,74285,960],{"class":513},[398,74287,70397],{"class":408},[398,74289,70381],{"class":513},[398,74291,74292,74294,74296,74298,74300],{"class":400,"line":33944},[398,74293,70366],{"class":513},[398,74295,74246],{"class":408},[398,74297,960],{"class":513},[398,74299,70414],{"class":408},[398,74301,70381],{"class":513},[398,74303,74304,74306,74308,74310,74312],{"class":400,"line":33950},[398,74305,70366],{"class":513},[398,74307,74246],{"class":408},[398,74309,960],{"class":513},[398,74311,70431],{"class":408},[398,74313,70381],{"class":513},[398,74315,74316,74318,74320,74322,74324],{"class":400,"line":33955},[398,74317,70366],{"class":513},[398,74319,74246],{"class":408},[398,74321,960],{"class":513},[398,74323,70448],{"class":408},[398,74325,70381],{"class":513},[398,74327,74328,74330,74332,74334,74336],{"class":400,"line":33964},[398,74329,70366],{"class":513},[398,74331,74246],{"class":408},[398,74333,960],{"class":513},[398,74335,70465],{"class":408},[398,74337,70381],{"class":513},[398,74339,74340,74342,74344,74346,74348],{"class":400,"line":33974},[398,74341,70366],{"class":513},[398,74343,74246],{"class":408},[398,74345,960],{"class":513},[398,74347,2663],{"class":408},[398,74349,70381],{"class":513},[398,74351,74352],{"class":400,"line":33980},[398,74353,73808],{"class":513},[398,74355,74356,74359,74361],{"class":400,"line":33985},[398,74357,74358],{"class":513},"          \u003Ca href=\"#\" data-id=\"${",[398,74360,74251],{"class":408},[398,74362,74363],{"class":513},"}\">删除\u003C\u002Fa>\n",[398,74365,74366],{"class":400,"line":33991},[398,74367,73818],{"class":513},[398,74369,74370],{"class":400,"line":34004},[398,74371,74372],{"class":513},"      \u003C\u002Ftr>\n",[398,74374,74375],{"class":400,"line":34010},[398,74376,74377],{"class":513},"  `\n",[398,74379,74380],{"class":400,"line":34021},[398,74381,65008],{"class":408},[398,74383,74384,74386,74388],{"class":400,"line":34032},[398,74385,58437],{"class":408},[398,74387,58440],{"class":2239},[398,74389,74390],{"class":408},"(trArr)\n",[398,74392,74393],{"class":400,"line":34051},[398,74394,2676],{"emptyLinePlaceholder":328},[398,74396,74397],{"class":400,"line":49711},[398,74398,74399],{"class":467},"      \u002F\u002F (2) 把数组转换为字符串join\n",[398,74401,74402],{"class":400,"line":49716},[398,74403,74404],{"class":467},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[398,74406,74407,74409,74411,74414,74417,74419,74422],{"class":400,"line":49725},[398,74408,70292],{"class":408},[398,74410,454],{"class":404},[398,74412,74413],{"class":408}," trArr.",[398,74415,74416],{"class":2239},"join",[398,74418,409],{"class":408},[398,74420,74421],{"class":513},"''",[398,74423,415],{"class":408},[398,74425,74426],{"class":400,"line":49734},[398,74427,74428],{"class":467},"      \u002F\u002F 显示共有几条\n",[398,74430,74431,74433,74435,74437,74440,74443,74445,74447],{"class":400,"line":49739},[398,74432,55964],{"class":408},[398,74434,54592],{"class":2239},[398,74436,409],{"class":408},[398,74438,74439],{"class":513},"'.total span'",[398,74441,74442],{"class":408},").innerHTML ",[398,74444,454],{"class":404},[398,74446,52158],{"class":408},[398,74448,56024],{"class":457},[398,74450,74451],{"class":400,"line":49744},[398,74452,2463],{"class":408},[398,74454,74455],{"class":400,"line":49749},[398,74456,74457],{"class":467},"    \u002F\u002F render()\n",[398,74459,74460],{"class":400,"line":49762},[398,74461,2676],{"emptyLinePlaceholder":328},[398,74463,74464],{"class":400,"line":49767},[398,74465,74466],{"class":467},"    \u002F\u002F 获取DOM对象\n",[398,74468,74469,74471,74473,74475,74477,74479,74481,74483],{"class":400,"line":49776},[398,74470,11498],{"class":404},[398,74472,70014],{"class":457},[398,74474,13841],{"class":404},[398,74476,54589],{"class":408},[398,74478,54592],{"class":2239},[398,74480,409],{"class":408},[398,74482,70025],{"class":513},[398,74484,415],{"class":408},[398,74486,74487,74489,74491,74493,74495,74497,74499,74501],{"class":400,"line":49785},[398,74488,11498],{"class":404},[398,74490,69841],{"class":457},[398,74492,13841],{"class":404},[398,74494,54589],{"class":408},[398,74496,54592],{"class":2239},[398,74498,409],{"class":408},[398,74500,69852],{"class":513},[398,74502,415],{"class":408},[398,74504,74505,74507,74509,74511,74513,74515,74517,74519],{"class":400,"line":49802},[398,74506,11498],{"class":404},[398,74508,15966],{"class":457},[398,74510,13841],{"class":404},[398,74512,54589],{"class":408},[398,74514,54592],{"class":2239},[398,74516,409],{"class":408},[398,74518,69871],{"class":513},[398,74520,415],{"class":408},[398,74522,74524,74526,74528,74530,74532,74534,74536,74538],{"class":400,"line":74523},231,[398,74525,11498],{"class":404},[398,74527,69900],{"class":457},[398,74529,13841],{"class":404},[398,74531,54589],{"class":408},[398,74533,54592],{"class":2239},[398,74535,409],{"class":408},[398,74537,69911],{"class":513},[398,74539,415],{"class":408},[398,74541,74543,74545,74547,74549,74551,74553,74555,74557],{"class":400,"line":74542},232,[398,74544,11498],{"class":404},[398,74546,69880],{"class":457},[398,74548,13841],{"class":404},[398,74550,54589],{"class":408},[398,74552,54592],{"class":2239},[398,74554,409],{"class":408},[398,74556,69891],{"class":513},[398,74558,415],{"class":408},[398,74560,74562,74564,74566,74568,74570,74572,74574,74576],{"class":400,"line":74561},233,[398,74563,11498],{"class":404},[398,74565,69920],{"class":457},[398,74567,13841],{"class":404},[398,74569,54589],{"class":408},[398,74571,54592],{"class":2239},[398,74573,409],{"class":408},[398,74575,69931],{"class":513},[398,74577,415],{"class":408},[398,74579,74581],{"class":400,"line":74580},234,[398,74582,2676],{"emptyLinePlaceholder":328},[398,74584,74586],{"class":400,"line":74585},235,[398,74587,74588],{"class":467},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[398,74590,74592,74594,74596,74598,74600,74602,74604,74606,74608],{"class":400,"line":74591},236,[398,74593,70032],{"class":408},[398,74595,58006],{"class":2239},[398,74597,409],{"class":408},[398,74599,70039],{"class":513},[398,74601,12712],{"class":408},[398,74603,54642],{"class":404},[398,74605,1934],{"class":408},[398,74607,483],{"class":5493},[398,74609,12719],{"class":408},[398,74611,74613],{"class":400,"line":74612},237,[398,74614,74615],{"class":467},"      \u002F\u002F 禁止浏览器跳转\n",[398,74617,74619,74621,74623],{"class":400,"line":74618},238,[398,74620,70059],{"class":408},[398,74622,70062],{"class":2239},[398,74624,2252],{"class":408},[398,74626,74628],{"class":400,"line":74627},239,[398,74629,74630],{"class":467},"      \u002F\u002F 非空判断\n",[398,74632,74634],{"class":400,"line":74633},240,[398,74635,74636],{"class":467},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[398,74638,74640],{"class":400,"line":74639},241,[398,74641,74642],{"class":467},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[398,74644,74646,74648,74650,74652,74655,74657,74660,74663,74665,74667],{"class":400,"line":74645},242,[398,74647,54673],{"class":404},[398,74649,1934],{"class":408},[398,74651,628],{"class":404},[398,74653,74654],{"class":408},"uname.value ",[398,74656,71550],{"class":404},[398,74658,74659],{"class":404}," !",[398,74661,74662],{"class":408},"age.value ",[398,74664,71550],{"class":404},[398,74666,74659],{"class":404},[398,74668,74669],{"class":408},"salary.value) {\n",[398,74671,74673,74675,74677,74679,74681],{"class":400,"line":74672},243,[398,74674,15029],{"class":404},[398,74676,70133],{"class":2239},[398,74678,409],{"class":408},[398,74680,70138],{"class":513},[398,74682,415],{"class":408},[398,74684,74686],{"class":400,"line":74685},244,[398,74687,52591],{"class":408},[398,74689,74691,74693,74695],{"class":400,"line":74690},245,[398,74692,58200],{"class":408},[398,74694,52077],{"class":2239},[398,74696,74697],{"class":408},"({\n",[398,74699,74701],{"class":400,"line":74700},246,[398,74702,74703],{"class":467},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[398,74705,74707],{"class":400,"line":74706},247,[398,74708,74709],{"class":467},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[398,74711,74713],{"class":400,"line":74712},248,[398,74714,74715],{"class":467},"        \u002F\u002F 对象的序号应为数组长度+1\n",[398,74717,74719],{"class":400,"line":74718},249,[398,74720,74721],{"class":467},"        \u002F\u002F unameId: arr.length + 1,\n",[398,74723,74725],{"class":400,"line":74724},250,[398,74726,2676],{"emptyLinePlaceholder":328},[398,74728,74730],{"class":400,"line":74729},251,[398,74731,74732],{"class":467},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[398,74734,74736],{"class":400,"line":74735},252,[398,74737,74738],{"class":467},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[398,74740,74742],{"class":400,"line":74741},253,[398,74743,74744],{"class":467},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[398,74746,74748],{"class":400,"line":74747},254,[398,74749,74750],{"class":467},"        \u002F\u002F 0当假看\n",[398,74752,74754,74757,74759,74761,74764,74766,74768,74770,74773,74775,74777,74780,74782],{"class":400,"line":74753},255,[398,74755,74756],{"class":408},"        unameId: arr.",[398,74758,52161],{"class":457},[398,74760,74007],{"class":404},[398,74762,74763],{"class":408}," arr[arr.",[398,74765,52161],{"class":457},[398,74767,52464],{"class":404},[398,74769,25396],{"class":457},[398,74771,74772],{"class":408},"].unameId ",[398,74774,883],{"class":404},[398,74776,25396],{"class":457},[398,74778,74779],{"class":404}," :",[398,74781,25396],{"class":457},[398,74783,31659],{"class":408},[398,74785,74787],{"class":400,"line":74786},256,[398,74788,70186],{"class":408},[398,74790,74792],{"class":400,"line":74791},257,[398,74793,70191],{"class":408},[398,74795,74797],{"class":400,"line":74796},258,[398,74798,70201],{"class":408},[398,74800,74802],{"class":400,"line":74801},259,[398,74803,70196],{"class":408},[398,74805,74807],{"class":400,"line":74806},260,[398,74808,74809],{"class":408},"        city: city.value,\n",[398,74811,74813],{"class":400,"line":74812},261,[398,74814,74815],{"class":467},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[398,74817,74819],{"class":400,"line":74818},262,[398,74820,74821],{"class":467},"        \u002F\u002F time: new Date().toDateString()\n",[398,74823,74825,74828,74831],{"class":400,"line":74824},263,[398,74826,74827],{"class":408},"        time: ",[398,74829,74830],{"class":2239},"getTime",[398,74832,2252],{"class":408},[398,74834,74836],{"class":400,"line":74835},264,[398,74837,65008],{"class":408},[398,74839,74841],{"class":400,"line":74840},265,[398,74842,74843],{"class":467},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[398,74845,74847,74849],{"class":400,"line":74846},266,[398,74848,70261],{"class":2239},[398,74850,2252],{"class":408},[398,74852,74854,74856,74858,74860,74862],{"class":400,"line":74853},267,[398,74855,70244],{"class":457},[398,74857,960],{"class":408},[398,74859,70249],{"class":2239},[398,74861,13327],{"class":408},[398,74863,74864],{"class":467},"\u002F\u002F重置表单\n",[398,74866,74868],{"class":400,"line":74867},268,[398,74869,74870],{"class":467},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[398,74872,74874,74877,74879,74881,74884,74886,74888,74890,74892],{"class":400,"line":74873},269,[398,74875,74876],{"class":408},"      localStorage.",[398,74878,71847],{"class":2239},[398,74880,409],{"class":408},[398,74882,74883],{"class":513},"'data'",[398,74885,12712],{"class":408},[398,74887,71857],{"class":457},[398,74889,960],{"class":408},[398,74891,71862],{"class":2239},[398,74893,74894],{"class":408},"(arr))\n",[398,74896,74898],{"class":400,"line":74897},270,[398,74899,33654],{"class":408},[398,74901,74903],{"class":400,"line":74902},271,[398,74904,2676],{"emptyLinePlaceholder":328},[398,74906,74908],{"class":400,"line":74907},272,[398,74909,74910],{"class":467},"    \u002F\u002F 3.删除业务\n",[398,74912,74914],{"class":400,"line":74913},273,[398,74915,74916],{"class":467},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[398,74918,74920,74922,74924,74926,74928,74930,74932,74934,74936],{"class":400,"line":74919},274,[398,74921,70534],{"class":408},[398,74923,58006],{"class":2239},[398,74925,409],{"class":408},[398,74927,58011],{"class":513},[398,74929,12712],{"class":408},[398,74931,54642],{"class":404},[398,74933,1934],{"class":408},[398,74935,483],{"class":5493},[398,74937,12719],{"class":408},[398,74939,74941],{"class":400,"line":74940},275,[398,74942,74943],{"class":467},"      \u002F\u002F 判断是否点击的是删除按钮\n",[398,74945,74947,74949,74951,74953,74955],{"class":400,"line":74946},276,[398,74948,54673],{"class":404},[398,74950,67227],{"class":408},[398,74952,54679],{"class":404},[398,74954,68449],{"class":513},[398,74956,12719],{"class":408},[398,74958,74960],{"class":400,"line":74959},277,[398,74961,74962],{"class":467},"        \u002F\u002F alert(1)\n",[398,74964,74966],{"class":400,"line":74965},278,[398,74967,74968],{"class":467},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[398,74970,74972],{"class":400,"line":74971},279,[398,74973,74974],{"class":467},"        \u002F\u002F console.log(e.target)\n",[398,74976,74978],{"class":400,"line":74977},280,[398,74979,74980],{"class":467},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[398,74982,74984],{"class":400,"line":74983},281,[398,74985,2676],{"emptyLinePlaceholder":328},[398,74987,74989],{"class":400,"line":74988},282,[398,74990,74991],{"class":467},"        \u002F\u002F 确认框，确然是否真的要删除\n",[398,74993,74995],{"class":400,"line":74994},283,[398,74996,74997],{"class":467},"        \u002F\u002F confirm()为确认框\n",[398,74999,75001],{"class":400,"line":75000},284,[398,75002,75003],{"class":467},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[398,75005,75007,75009,75011,75014,75016,75019],{"class":400,"line":75006},285,[398,75008,2773],{"class":404},[398,75010,1934],{"class":408},[398,75012,75013],{"class":2239},"confirm",[398,75015,409],{"class":408},[398,75017,75018],{"class":513},"'您确定要删除这条数据吗？'",[398,75020,75021],{"class":408},")) {\n",[398,75023,75025,75028,75030,75032,75034],{"class":400,"line":75024},286,[398,75026,75027],{"class":408},"          arr.",[398,75029,58203],{"class":2239},[398,75031,70587],{"class":408},[398,75033,619],{"class":457},[398,75035,415],{"class":408},[398,75037,75039],{"class":400,"line":75038},287,[398,75040,75041],{"class":467},"          \u002F\u002F 3.4 重新渲染页面\n",[398,75043,75045,75048],{"class":400,"line":75044},288,[398,75046,75047],{"class":2239},"          render",[398,75049,2252],{"class":408},[398,75051,75053],{"class":400,"line":75052},289,[398,75054,75055],{"class":467},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[398,75057,75059,75062,75064,75066,75068,75070,75072,75074,75076],{"class":400,"line":75058},290,[398,75060,75061],{"class":408},"          localStorage.",[398,75063,71847],{"class":2239},[398,75065,409],{"class":408},[398,75067,74883],{"class":513},[398,75069,12712],{"class":408},[398,75071,71857],{"class":457},[398,75073,960],{"class":408},[398,75075,71862],{"class":2239},[398,75077,74894],{"class":408},[398,75079,75081],{"class":400,"line":75080},291,[398,75082,2805],{"class":408},[398,75084,75086],{"class":400,"line":75085},292,[398,75087,52591],{"class":408},[398,75089,75091],{"class":400,"line":75090},293,[398,75092,2676],{"emptyLinePlaceholder":328},[398,75094,75096],{"class":400,"line":75095},294,[398,75097,33654],{"class":408},[398,75099,75101],{"class":400,"line":75100},295,[398,75102,2676],{"emptyLinePlaceholder":328},[398,75104,75106,75108,75110],{"class":400,"line":75105},296,[398,75107,52610],{"class":408},[398,75109,52006],{"class":51493},[398,75111,51500],{"class":408},[398,75113,75115,75117,75119],{"class":400,"line":75114},297,[398,75116,51978],{"class":408},[398,75118,51993],{"class":51493},[398,75120,51500],{"class":408},[398,75122,75124],{"class":400,"line":75123},298,[398,75125,2676],{"emptyLinePlaceholder":328},[398,75127,75129,75131,75133],{"class":400,"line":75128},299,[398,75130,51978],{"class":408},[398,75132,50828],{"class":51493},[398,75134,51500],{"class":408},[343,75136,75138],{"id":75137},"_36-正则表达式","3.6 正则表达式",[19,75140,75141],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,75143,75144],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,75146,75147],{},"正则表达式的作用：",[67,75149,75150,75157,75163],{},[41,75151,75152,75153,75156],{},"表单验证（ ",[23,75154,75155],{},"匹配"," ）",[41,75158,75159,75160,75156],{},"过滤敏感词（ ",[23,75161,75162],{},"替换",[41,75164,75165,75166,75156],{},"字符串中提取我们想要的部分（ ",[23,75167,75168],{},"提取",[14,75170,75172],{"id":75171},"_361-语法","3.6.1 语法",[19,75174,75175],{},"正则表达式使用步骤：",[38,75177,75178,75181],{},[41,75179,75180],{},"定义规则",[41,75182,75183],{},"查找是否匹配",[19,75185,75186],{},"正则表达式里边不需要写引号",[19,75188,75189],{},[1738,75190],{"alt":316,"src":75191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,75193,75194],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,75196,75197],{},"reg.test(str)",[19,75199,75200],{},[1738,75201],{"alt":316,"src":75202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,75204,75205],{},[1738,75206],{"alt":316,"src":75207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[14,75209,75211],{"id":75210},"_362-元字符","3.6.2 元字符",[38,75213,75214,75217,75220,75223,75230],{},[41,75215,75216],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[41,75218,75219],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[41,75221,75222],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[41,75224,75225,75226],{},"正则验证工具：",[640,75227,75228],{"href":75228,"rel":75229},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[24142],[41,75231,75232],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22275,75234,75236],{"id":75235},"_3621-边界符","3.6.2.1 边界符",[19,75238,75239],{},[1738,75240],{"alt":316,"src":75241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,75243,75244],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,75246,75247],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,75249,75250],{},"只匹配一次",[19,75252,75253],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22275,75255,75257],{"id":75256},"_3622-量词","3.6.2.2 量词",[19,75259,75260],{},[1738,75261],{"alt":316,"src":75262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,75264,75265],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22275,75267,75269],{"id":75268},"_3623-元字符","3.6.2.3 元字符",[19,75271,75272],{},[1738,75273],{"alt":316,"src":75274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,75276,75277],{},"匹配的是a或b或c []只选一个",[19,75279,75280],{},[1738,75281],{"alt":316,"src":75282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,75284,75285],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,75287,75288],{},[1738,75289],{"alt":316,"src":75290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,75292,75293],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,75295,75296],{},[1738,75297],{"alt":316,"src":75298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[389,75300,75302],{"className":50826,"code":75301,"language":50828,"meta":316,"style":316},"\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",[395,75303,75304,75314,75328,75332,75340,75354,75374,75386,75394,75398,75406,75414,75419,75450,75477,75505,75509,75514,75542,75573,75578,75583,75614,75646,75678,75682,75687,75718,75748,75778,75782,75787,75818,75849,75879,75909,75913,75918,75951,75955,75960,75991,76022,76026,76031,76062,76092,76123,76127,76132,76164,76195,76226,76253,76284,76316,76349,76380,76411,76443,76474,76482,76490,76494],{"__ignoreMap":316},[398,75305,75306,75308,75310,75312],{"class":400,"line":401},[398,75307,51490],{"class":408},[398,75309,51494],{"class":51493},[398,75311,51497],{"class":2239},[398,75313,51500],{"class":408},[398,75315,75316,75318,75320,75322,75324,75326],{"class":400,"line":317},[398,75317,1312],{"class":408},[398,75319,50828],{"class":51493},[398,75321,51509],{"class":2239},[398,75323,454],{"class":408},[398,75325,51514],{"class":513},[398,75327,51500],{"class":408},[398,75329,75330],{"class":400,"line":320},[398,75331,2676],{"emptyLinePlaceholder":328},[398,75333,75334,75336,75338],{"class":400,"line":1470},[398,75335,1312],{"class":408},[398,75337,51527],{"class":51493},[398,75339,51500],{"class":408},[398,75341,75342,75344,75346,75348,75350,75352],{"class":400,"line":1476},[398,75343,52337],{"class":408},[398,75345,51537],{"class":51493},[398,75347,51540],{"class":2239},[398,75349,454],{"class":408},[398,75351,51545],{"class":513},[398,75353,51500],{"class":408},[398,75355,75356,75358,75360,75362,75364,75366,75368,75370,75372],{"class":400,"line":1490},[398,75357,52337],{"class":408},[398,75359,51537],{"class":51493},[398,75361,15197],{"class":2239},[398,75363,454],{"class":408},[398,75365,51584],{"class":513},[398,75367,51564],{"class":2239},[398,75369,454],{"class":408},[398,75371,51591],{"class":513},[398,75373,51500],{"class":408},[398,75375,75376,75378,75380,75382,75384],{"class":400,"line":1496},[398,75377,52337],{"class":408},[398,75379,51600],{"class":51493},[398,75381,51603],{"class":408},[398,75383,51600],{"class":51493},[398,75385,51500],{"class":408},[398,75387,75388,75390,75392],{"class":400,"line":1587},[398,75389,51978],{"class":408},[398,75391,51527],{"class":51493},[398,75393,51500],{"class":408},[398,75395,75396],{"class":400,"line":1593},[398,75397,2676],{"emptyLinePlaceholder":328},[398,75399,75400,75402,75404],{"class":400,"line":1605},[398,75401,1312],{"class":408},[398,75403,51993],{"class":51493},[398,75405,51500],{"class":408},[398,75407,75408,75410,75412],{"class":400,"line":1888},[398,75409,52337],{"class":408},[398,75411,52006],{"class":51493},[398,75413,51500],{"class":408},[398,75415,75416],{"class":400,"line":1893},[398,75417,75418],{"class":467},"    \u002F\u002F 元字符中\n",[398,75420,75421,75423,75425,75427,75429,75432,75434,75436,75439,75441,75444,75447],{"class":400,"line":1899},[398,75422,73946],{"class":408},[398,75424,58440],{"class":2239},[398,75426,409],{"class":408},[398,75428,986],{"class":513},[398,75430,75431],{"class":48170},"哈",[398,75433,986],{"class":513},[398,75435,960],{"class":408},[398,75437,75438],{"class":2239},"test",[398,75440,409],{"class":408},[398,75442,75443],{"class":513},"'哈'",[398,75445,75446],{"class":408},"))  ",[398,75448,75449],{"class":467},"\u002F\u002Ftrue\n",[398,75451,75452,75454,75456,75458,75460,75462,75464,75466,75468,75470,75473,75475],{"class":400,"line":1904},[398,75453,73946],{"class":408},[398,75455,58440],{"class":2239},[398,75457,409],{"class":408},[398,75459,986],{"class":513},[398,75461,75431],{"class":48170},[398,75463,986],{"class":513},[398,75465,960],{"class":408},[398,75467,75438],{"class":2239},[398,75469,409],{"class":408},[398,75471,75472],{"class":513},"'哈哈'",[398,75474,75446],{"class":408},[398,75476,75449],{"class":467},[398,75478,75479,75481,75483,75485,75487,75489,75491,75493,75495,75497,75500,75503],{"class":400,"line":1918},[398,75480,73946],{"class":408},[398,75482,58440],{"class":2239},[398,75484,409],{"class":408},[398,75486,986],{"class":513},[398,75488,75431],{"class":48170},[398,75490,986],{"class":513},[398,75492,960],{"class":408},[398,75494,75438],{"class":2239},[398,75496,409],{"class":408},[398,75498,75499],{"class":513},"'二哈'",[398,75501,75502],{"class":408},"))   ",[398,75504,75449],{"class":467},[398,75506,75507],{"class":400,"line":1923},[398,75508,2676],{"emptyLinePlaceholder":328},[398,75510,75511],{"class":400,"line":1929},[398,75512,75513],{"class":467},"    \u002F\u002F 1.边界符\n",[398,75515,75516,75518,75520,75522,75524,75526,75528,75530,75532,75534,75536,75538,75540],{"class":400,"line":1950},[398,75517,73946],{"class":408},[398,75519,58440],{"class":2239},[398,75521,409],{"class":408},[398,75523,986],{"class":513},[398,75525,1368],{"class":404},[398,75527,75431],{"class":48170},[398,75529,986],{"class":513},[398,75531,960],{"class":408},[398,75533,75438],{"class":2239},[398,75535,409],{"class":408},[398,75537,75443],{"class":513},[398,75539,75446],{"class":408},[398,75541,75449],{"class":467},[398,75543,75544,75546,75548,75550,75552,75554,75556,75558,75560,75562,75564,75566,75568,75570],{"class":400,"line":1955},[398,75545,73946],{"class":408},[398,75547,58440],{"class":2239},[398,75549,409],{"class":408},[398,75551,986],{"class":513},[398,75553,1368],{"class":404},[398,75555,75431],{"class":48170},[398,75557,704],{"class":404},[398,75559,986],{"class":513},[398,75561,960],{"class":408},[398,75563,75438],{"class":2239},[398,75565,409],{"class":408},[398,75567,75472],{"class":513},[398,75569,75446],{"class":408},[398,75571,75572],{"class":467},"\u002F\u002Ffalse\n",[398,75574,75575],{"class":400,"line":1969},[398,75576,75577],{"class":467},"    \u002F\u002F 2.量词\n",[398,75579,75580],{"class":400,"line":1974},[398,75581,75582],{"class":467},"    \u002F\u002F 量词 * 类似于 >= 0\n",[398,75584,75585,75587,75589,75591,75593,75595,75597,75600,75602,75604,75606,75608,75610,75612],{"class":400,"line":2003},[398,75586,73946],{"class":408},[398,75588,58440],{"class":2239},[398,75590,409],{"class":408},[398,75592,986],{"class":513},[398,75594,1368],{"class":404},[398,75596,75431],{"class":48170},[398,75598,75599],{"class":404},"*$",[398,75601,986],{"class":513},[398,75603,960],{"class":408},[398,75605,75438],{"class":2239},[398,75607,409],{"class":408},[398,75609,75472],{"class":513},[398,75611,75446],{"class":408},[398,75613,75449],{"class":467},[398,75615,75616,75618,75620,75622,75624,75626,75628,75630,75632,75634,75636,75638,75641,75643],{"class":400,"line":2008},[398,75617,73946],{"class":408},[398,75619,58440],{"class":2239},[398,75621,409],{"class":408},[398,75623,986],{"class":513},[398,75625,1368],{"class":404},[398,75627,75431],{"class":48170},[398,75629,75599],{"class":404},[398,75631,986],{"class":513},[398,75633,960],{"class":408},[398,75635,75438],{"class":2239},[398,75637,409],{"class":408},[398,75639,75640],{"class":513},"'二哈好傻'",[398,75642,75446],{"class":408},[398,75644,75645],{"class":467},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[398,75647,75648,75650,75652,75654,75656,75658,75660,75662,75664,75666,75668,75670,75673,75675],{"class":400,"line":2025},[398,75649,73946],{"class":408},[398,75651,58440],{"class":2239},[398,75653,409],{"class":408},[398,75655,986],{"class":513},[398,75657,1368],{"class":404},[398,75659,75431],{"class":48170},[398,75661,75599],{"class":404},[398,75663,986],{"class":513},[398,75665,960],{"class":408},[398,75667,75438],{"class":2239},[398,75669,409],{"class":408},[398,75671,75672],{"class":513},"'哈好哈'",[398,75674,75502],{"class":408},[398,75676,75677],{"class":467},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[398,75679,75680],{"class":400,"line":2030},[398,75681,2676],{"emptyLinePlaceholder":328},[398,75683,75684],{"class":400,"line":2035},[398,75685,75686],{"class":467},"    \u002F\u002F +类似于>=1\n",[398,75688,75689,75691,75693,75695,75697,75699,75701,75704,75706,75708,75710,75712,75714,75716],{"class":400,"line":2040},[398,75690,73946],{"class":408},[398,75692,58440],{"class":2239},[398,75694,409],{"class":408},[398,75696,986],{"class":513},[398,75698,1368],{"class":404},[398,75700,75431],{"class":48170},[398,75702,75703],{"class":404},"+$",[398,75705,986],{"class":513},[398,75707,960],{"class":408},[398,75709,75438],{"class":2239},[398,75711,409],{"class":408},[398,75713,75472],{"class":513},[398,75715,75446],{"class":408},[398,75717,75449],{"class":467},[398,75719,75720,75722,75724,75726,75728,75730,75732,75734,75736,75738,75740,75742,75744,75746],{"class":400,"line":2054},[398,75721,73946],{"class":408},[398,75723,58440],{"class":2239},[398,75725,409],{"class":408},[398,75727,986],{"class":513},[398,75729,1368],{"class":404},[398,75731,75431],{"class":48170},[398,75733,75703],{"class":404},[398,75735,986],{"class":513},[398,75737,960],{"class":408},[398,75739,75438],{"class":2239},[398,75741,409],{"class":408},[398,75743,75640],{"class":513},[398,75745,75446],{"class":408},[398,75747,75645],{"class":467},[398,75749,75750,75752,75754,75756,75758,75760,75762,75764,75766,75768,75770,75772,75774,75776],{"class":400,"line":2059},[398,75751,73946],{"class":408},[398,75753,58440],{"class":2239},[398,75755,409],{"class":408},[398,75757,986],{"class":513},[398,75759,1368],{"class":404},[398,75761,75431],{"class":48170},[398,75763,75703],{"class":404},[398,75765,986],{"class":513},[398,75767,960],{"class":408},[398,75769,75438],{"class":2239},[398,75771,409],{"class":408},[398,75773,75672],{"class":513},[398,75775,75502],{"class":408},[398,75777,75572],{"class":467},[398,75779,75780],{"class":400,"line":2853},[398,75781,2676],{"emptyLinePlaceholder":328},[398,75783,75784],{"class":400,"line":2867},[398,75785,75786],{"class":467},"    \u002F\u002F ?类似于0次或一次\n",[398,75788,75789,75791,75793,75795,75797,75799,75802,75804,75806,75808,75810,75812,75814,75816],{"class":400,"line":2875},[398,75790,73946],{"class":408},[398,75792,58440],{"class":2239},[398,75794,409],{"class":408},[398,75796,986],{"class":513},[398,75798,1368],{"class":404},[398,75800,75801],{"class":48170},"哈？",[398,75803,704],{"class":404},[398,75805,986],{"class":513},[398,75807,960],{"class":408},[398,75809,75438],{"class":2239},[398,75811,409],{"class":408},[398,75813,74421],{"class":513},[398,75815,75502],{"class":408},[398,75817,75449],{"class":467},[398,75819,75820,75822,75824,75826,75828,75830,75832,75835,75837,75839,75841,75843,75845,75847],{"class":400,"line":2880},[398,75821,73946],{"class":408},[398,75823,58440],{"class":2239},[398,75825,409],{"class":408},[398,75827,986],{"class":513},[398,75829,1368],{"class":404},[398,75831,75431],{"class":48170},[398,75833,75834],{"class":404},"?$",[398,75836,986],{"class":513},[398,75838,960],{"class":408},[398,75840,75438],{"class":2239},[398,75842,409],{"class":408},[398,75844,75472],{"class":513},[398,75846,75446],{"class":408},[398,75848,75572],{"class":467},[398,75850,75851,75853,75855,75857,75859,75861,75863,75865,75867,75869,75871,75873,75875,75877],{"class":400,"line":2886},[398,75852,73946],{"class":408},[398,75854,58440],{"class":2239},[398,75856,409],{"class":408},[398,75858,986],{"class":513},[398,75860,1368],{"class":404},[398,75862,75431],{"class":48170},[398,75864,75834],{"class":404},[398,75866,986],{"class":513},[398,75868,960],{"class":408},[398,75870,75438],{"class":2239},[398,75872,409],{"class":408},[398,75874,75640],{"class":513},[398,75876,75446],{"class":408},[398,75878,75645],{"class":467},[398,75880,75881,75883,75885,75887,75889,75891,75893,75895,75897,75899,75901,75903,75905,75907],{"class":400,"line":2892},[398,75882,73946],{"class":408},[398,75884,58440],{"class":2239},[398,75886,409],{"class":408},[398,75888,986],{"class":513},[398,75890,1368],{"class":404},[398,75892,75431],{"class":48170},[398,75894,75834],{"class":404},[398,75896,986],{"class":513},[398,75898,960],{"class":408},[398,75900,75438],{"class":2239},[398,75902,409],{"class":408},[398,75904,75672],{"class":513},[398,75906,75446],{"class":408},[398,75908,75572],{"class":467},[398,75910,75911],{"class":400,"line":2897},[398,75912,2676],{"emptyLinePlaceholder":328},[398,75914,75915],{"class":400,"line":8225},[398,75916,75917],{"class":467},"    \u002F\u002F {n}写几，就必须出现几次\n",[398,75919,75920,75922,75924,75926,75928,75930,75932,75935,75937,75939,75941,75943,75946,75949],{"class":400,"line":8249},[398,75921,73946],{"class":408},[398,75923,58440],{"class":2239},[398,75925,409],{"class":408},[398,75927,986],{"class":513},[398,75929,1368],{"class":404},[398,75931,75431],{"class":48170},[398,75933,75934],{"class":404},"{4}$",[398,75936,986],{"class":513},[398,75938,960],{"class":408},[398,75940,75438],{"class":2239},[398,75942,409],{"class":408},[398,75944,75945],{"class":513},"'哈哈哈哈'",[398,75947,75948],{"class":408},")) ",[398,75950,75449],{"class":467},[398,75952,75953],{"class":400,"line":8254},[398,75954,2676],{"emptyLinePlaceholder":328},[398,75956,75957],{"class":400,"line":8260},[398,75958,75959],{"class":467},"    \u002F\u002F {n,}大于等于n次\n",[398,75961,75962,75964,75966,75968,75970,75972,75974,75977,75979,75981,75983,75985,75987,75989],{"class":400,"line":8287},[398,75963,73946],{"class":408},[398,75965,58440],{"class":2239},[398,75967,409],{"class":408},[398,75969,986],{"class":513},[398,75971,1368],{"class":404},[398,75973,75431],{"class":48170},[398,75975,75976],{"class":404},"{4,}$",[398,75978,986],{"class":513},[398,75980,960],{"class":408},[398,75982,75438],{"class":2239},[398,75984,409],{"class":408},[398,75986,75945],{"class":513},[398,75988,75948],{"class":408},[398,75990,75449],{"class":467},[398,75992,75993,75995,75997,75999,76001,76003,76005,76007,76009,76011,76013,76015,76018,76020],{"class":400,"line":8292},[398,75994,73946],{"class":408},[398,75996,58440],{"class":2239},[398,75998,409],{"class":408},[398,76000,986],{"class":513},[398,76002,1368],{"class":404},[398,76004,75431],{"class":48170},[398,76006,75976],{"class":404},[398,76008,986],{"class":513},[398,76010,960],{"class":408},[398,76012,75438],{"class":2239},[398,76014,409],{"class":408},[398,76016,76017],{"class":513},"'哈哈哈哈哈'",[398,76019,75948],{"class":408},[398,76021,75449],{"class":467},[398,76023,76024],{"class":400,"line":8298},[398,76025,2676],{"emptyLinePlaceholder":328},[398,76027,76028],{"class":400,"line":8310},[398,76029,76030],{"class":467},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[398,76032,76033,76035,76037,76039,76041,76043,76045,76048,76050,76052,76054,76056,76058,76060],{"class":400,"line":8322},[398,76034,73946],{"class":408},[398,76036,58440],{"class":2239},[398,76038,409],{"class":408},[398,76040,986],{"class":513},[398,76042,1368],{"class":404},[398,76044,75431],{"class":48170},[398,76046,76047],{"class":404},"{4,6}$",[398,76049,986],{"class":513},[398,76051,960],{"class":408},[398,76053,75438],{"class":2239},[398,76055,409],{"class":408},[398,76057,75945],{"class":513},[398,76059,75948],{"class":408},[398,76061,75449],{"class":467},[398,76063,76064,76066,76068,76070,76072,76074,76076,76078,76080,76082,76084,76086,76088,76090],{"class":400,"line":8334},[398,76065,73946],{"class":408},[398,76067,58440],{"class":2239},[398,76069,409],{"class":408},[398,76071,986],{"class":513},[398,76073,1368],{"class":404},[398,76075,75431],{"class":48170},[398,76077,76047],{"class":404},[398,76079,986],{"class":513},[398,76081,960],{"class":408},[398,76083,75438],{"class":2239},[398,76085,409],{"class":408},[398,76087,76017],{"class":513},[398,76089,75948],{"class":408},[398,76091,75449],{"class":467},[398,76093,76094,76096,76098,76100,76102,76104,76106,76108,76110,76112,76114,76116,76119,76121],{"class":400,"line":9993},[398,76095,73946],{"class":408},[398,76097,58440],{"class":2239},[398,76099,409],{"class":408},[398,76101,986],{"class":513},[398,76103,1368],{"class":404},[398,76105,75431],{"class":48170},[398,76107,76047],{"class":404},[398,76109,986],{"class":513},[398,76111,960],{"class":408},[398,76113,75438],{"class":2239},[398,76115,409],{"class":408},[398,76117,76118],{"class":513},"'哈哈哈哈哈哈哈'",[398,76120,75948],{"class":408},[398,76122,75572],{"class":467},[398,76124,76125],{"class":400,"line":10018},[398,76126,2676],{"emptyLinePlaceholder":328},[398,76128,76129],{"class":400,"line":10041},[398,76130,76131],{"class":467},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[398,76133,76134,76136,76138,76140,76142,76144,76147,76149,76151,76153,76155,76157,76160,76162],{"class":400,"line":10065},[398,76135,73946],{"class":408},[398,76137,58440],{"class":2239},[398,76139,409],{"class":408},[398,76141,986],{"class":513},[398,76143,1368],{"class":404},[398,76145,76146],{"class":457},"[abc]",[398,76148,704],{"class":404},[398,76150,986],{"class":513},[398,76152,960],{"class":408},[398,76154,75438],{"class":2239},[398,76156,409],{"class":408},[398,76158,76159],{"class":513},"'a'",[398,76161,75446],{"class":408},[398,76163,75449],{"class":467},[398,76165,76166,76168,76170,76172,76174,76176,76178,76180,76182,76184,76186,76188,76191,76193],{"class":400,"line":10070},[398,76167,73946],{"class":408},[398,76169,58440],{"class":2239},[398,76171,409],{"class":408},[398,76173,986],{"class":513},[398,76175,1368],{"class":404},[398,76177,76146],{"class":457},[398,76179,704],{"class":404},[398,76181,986],{"class":513},[398,76183,960],{"class":408},[398,76185,75438],{"class":2239},[398,76187,409],{"class":408},[398,76189,76190],{"class":513},"'b'",[398,76192,75446],{"class":408},[398,76194,75449],{"class":467},[398,76196,76197,76199,76201,76203,76205,76207,76209,76211,76213,76215,76217,76219,76222,76224],{"class":400,"line":10075},[398,76198,73946],{"class":408},[398,76200,58440],{"class":2239},[398,76202,409],{"class":408},[398,76204,986],{"class":513},[398,76206,1368],{"class":404},[398,76208,76146],{"class":457},[398,76210,704],{"class":404},[398,76212,986],{"class":513},[398,76214,960],{"class":408},[398,76216,75438],{"class":2239},[398,76218,409],{"class":408},[398,76220,76221],{"class":513},"'c'",[398,76223,75446],{"class":408},[398,76225,75449],{"class":467},[398,76227,76228,76230,76232,76234,76236,76238,76240,76242,76244,76246,76249,76251],{"class":400,"line":10080},[398,76229,73946],{"class":408},[398,76231,58440],{"class":2239},[398,76233,409],{"class":408},[398,76235,986],{"class":513},[398,76237,76146],{"class":457},[398,76239,986],{"class":513},[398,76241,960],{"class":408},[398,76243,75438],{"class":2239},[398,76245,409],{"class":408},[398,76247,76248],{"class":513},"'ab'",[398,76250,75446],{"class":408},[398,76252,75449],{"class":467},[398,76254,76255,76257,76259,76261,76263,76265,76267,76269,76271,76273,76275,76277,76279,76281],{"class":400,"line":10089},[398,76256,73946],{"class":408},[398,76258,58440],{"class":2239},[398,76260,409],{"class":408},[398,76262,986],{"class":513},[398,76264,1368],{"class":404},[398,76266,76146],{"class":457},[398,76268,704],{"class":404},[398,76270,986],{"class":513},[398,76272,960],{"class":408},[398,76274,75438],{"class":2239},[398,76276,409],{"class":408},[398,76278,76248],{"class":513},[398,76280,75446],{"class":408},[398,76282,76283],{"class":467},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[398,76285,76286,76288,76290,76292,76294,76296,76298,76301,76303,76305,76307,76309,76311,76313],{"class":400,"line":10094},[398,76287,73946],{"class":408},[398,76289,58440],{"class":2239},[398,76291,409],{"class":408},[398,76293,986],{"class":513},[398,76295,1368],{"class":404},[398,76297,76146],{"class":457},[398,76299,76300],{"class":404},"{2}$",[398,76302,986],{"class":513},[398,76304,960],{"class":408},[398,76306,75438],{"class":2239},[398,76308,409],{"class":408},[398,76310,76248],{"class":513},[398,76312,75446],{"class":408},[398,76314,76315],{"class":467},"\u002F\u002Ftrue   可以选两个\n",[398,76317,76318,76320,76322,76324,76326,76328,76331,76333,76335,76337,76339,76341,76344,76346],{"class":400,"line":10100},[398,76319,73946],{"class":408},[398,76321,58440],{"class":2239},[398,76323,409],{"class":408},[398,76325,986],{"class":513},[398,76327,1368],{"class":404},[398,76329,76330],{"class":457},"[a-z]",[398,76332,704],{"class":404},[398,76334,986],{"class":513},[398,76336,960],{"class":408},[398,76338,75438],{"class":2239},[398,76340,409],{"class":408},[398,76342,76343],{"class":513},"'p'",[398,76345,75502],{"class":408},[398,76347,76348],{"class":467},"\u002F\u002Ftrue   依然只能选一个\n",[398,76350,76351,76353,76355,76357,76359,76361,76364,76366,76368,76370,76372,76374,76376,76378],{"class":400,"line":10121},[398,76352,73946],{"class":408},[398,76354,58440],{"class":2239},[398,76356,409],{"class":408},[398,76358,986],{"class":513},[398,76360,1368],{"class":404},[398,76362,76363],{"class":457},"[A-Z]",[398,76365,704],{"class":404},[398,76367,986],{"class":513},[398,76369,960],{"class":408},[398,76371,75438],{"class":2239},[398,76373,409],{"class":408},[398,76375,76343],{"class":513},[398,76377,75502],{"class":408},[398,76379,75572],{"class":467},[398,76381,76382,76384,76386,76388,76390,76392,76394,76396,76398,76400,76402,76404,76407,76409],{"class":400,"line":10127},[398,76383,73946],{"class":408},[398,76385,58440],{"class":2239},[398,76387,409],{"class":408},[398,76389,986],{"class":513},[398,76391,1368],{"class":404},[398,76393,76363],{"class":457},[398,76395,704],{"class":404},[398,76397,986],{"class":513},[398,76399,960],{"class":408},[398,76401,75438],{"class":2239},[398,76403,409],{"class":408},[398,76405,76406],{"class":513},"'P'",[398,76408,75502],{"class":408},[398,76410,75449],{"class":467},[398,76412,76413,76415,76417,76419,76421,76423,76426,76428,76430,76432,76434,76436,76439,76441],{"class":400,"line":10141},[398,76414,73946],{"class":408},[398,76416,58440],{"class":2239},[398,76418,409],{"class":408},[398,76420,986],{"class":513},[398,76422,1368],{"class":404},[398,76424,76425],{"class":457},"[0-9]",[398,76427,704],{"class":404},[398,76429,986],{"class":513},[398,76431,960],{"class":408},[398,76433,75438],{"class":2239},[398,76435,409],{"class":408},[398,76437,76438],{"class":513},"'0'",[398,76440,75502],{"class":408},[398,76442,75449],{"class":467},[398,76444,76445,76447,76449,76451,76453,76455,76458,76460,76462,76464,76466,76468,76470,76472],{"class":400,"line":10147},[398,76446,73946],{"class":408},[398,76448,58440],{"class":2239},[398,76450,409],{"class":408},[398,76452,986],{"class":513},[398,76454,1368],{"class":404},[398,76456,76457],{"class":457},"[a-zA-Z0-9]",[398,76459,704],{"class":404},[398,76461,986],{"class":513},[398,76463,960],{"class":408},[398,76465,75438],{"class":2239},[398,76467,409],{"class":408},[398,76469,76343],{"class":513},[398,76471,75446],{"class":408},[398,76473,75449],{"class":467},[398,76475,76476,76478,76480],{"class":400,"line":10174},[398,76477,52610],{"class":408},[398,76479,52006],{"class":51493},[398,76481,51500],{"class":408},[398,76483,76484,76486,76488],{"class":400,"line":10183},[398,76485,51978],{"class":408},[398,76487,51993],{"class":51493},[398,76489,51500],{"class":408},[398,76491,76492],{"class":400,"line":10189},[398,76493,2676],{"emptyLinePlaceholder":328},[398,76495,76496,76498,76500],{"class":400,"line":10197},[398,76497,51978],{"class":408},[398,76499,50828],{"class":51493},[398,76501,51500],{"class":408},[22275,76503,76505],{"id":76504},"_3624-修饰符","3.6.2.4 修饰符",[19,76507,76508],{},[1738,76509],{"alt":316,"src":76510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,76512,76513],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,76515,76516],{},[1738,76517],{"alt":316,"src":76518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[389,76520,76522],{"className":50826,"code":76521,"language":50828,"meta":316,"style":316},"\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",[395,76523,76524,76534,76548,76556,76570,76590,76602,76610,76618,76626,76658,76689,76694,76726,76737,76770,76779,76787,76795],{"__ignoreMap":316},[398,76525,76526,76528,76530,76532],{"class":400,"line":401},[398,76527,51490],{"class":408},[398,76529,51494],{"class":51493},[398,76531,51497],{"class":2239},[398,76533,51500],{"class":408},[398,76535,76536,76538,76540,76542,76544,76546],{"class":400,"line":317},[398,76537,1312],{"class":408},[398,76539,50828],{"class":51493},[398,76541,51509],{"class":2239},[398,76543,454],{"class":408},[398,76545,51514],{"class":513},[398,76547,51500],{"class":408},[398,76549,76550,76552,76554],{"class":400,"line":320},[398,76551,1312],{"class":408},[398,76553,51527],{"class":51493},[398,76555,51500],{"class":408},[398,76557,76558,76560,76562,76564,76566,76568],{"class":400,"line":1470},[398,76559,52337],{"class":408},[398,76561,51537],{"class":51493},[398,76563,51540],{"class":2239},[398,76565,454],{"class":408},[398,76567,51545],{"class":513},[398,76569,51500],{"class":408},[398,76571,76572,76574,76576,76578,76580,76582,76584,76586,76588],{"class":400,"line":1476},[398,76573,52337],{"class":408},[398,76575,51537],{"class":51493},[398,76577,15197],{"class":2239},[398,76579,454],{"class":408},[398,76581,51584],{"class":513},[398,76583,51564],{"class":2239},[398,76585,454],{"class":408},[398,76587,51591],{"class":513},[398,76589,51500],{"class":408},[398,76591,76592,76594,76596,76598,76600],{"class":400,"line":1490},[398,76593,52337],{"class":408},[398,76595,51600],{"class":51493},[398,76597,51603],{"class":408},[398,76599,51600],{"class":51493},[398,76601,51500],{"class":408},[398,76603,76604,76606,76608],{"class":400,"line":1496},[398,76605,51978],{"class":408},[398,76607,51527],{"class":51493},[398,76609,51500],{"class":408},[398,76611,76612,76614,76616],{"class":400,"line":1587},[398,76613,1312],{"class":408},[398,76615,51993],{"class":51493},[398,76617,51500],{"class":408},[398,76619,76620,76622,76624],{"class":400,"line":1593},[398,76621,52337],{"class":408},[398,76623,52006],{"class":51493},[398,76625,51500],{"class":408},[398,76627,76628,76630,76632,76634,76636,76638,76641,76643,76645,76647,76649,76651,76654,76656],{"class":400,"line":1605},[398,76629,73946],{"class":408},[398,76631,58440],{"class":2239},[398,76633,409],{"class":408},[398,76635,986],{"class":513},[398,76637,1368],{"class":404},[398,76639,76640],{"class":48170},"java",[398,76642,704],{"class":404},[398,76644,986],{"class":513},[398,76646,960],{"class":408},[398,76648,75438],{"class":2239},[398,76650,409],{"class":408},[398,76652,76653],{"class":513},"'java'",[398,76655,75948],{"class":408},[398,76657,75449],{"class":467},[398,76659,76660,76662,76664,76666,76668,76670,76672,76674,76676,76678,76680,76682,76685,76687],{"class":400,"line":1888},[398,76661,73946],{"class":408},[398,76663,58440],{"class":2239},[398,76665,409],{"class":408},[398,76667,986],{"class":513},[398,76669,1368],{"class":404},[398,76671,76640],{"class":48170},[398,76673,704],{"class":404},[398,76675,986],{"class":513},[398,76677,960],{"class":408},[398,76679,75438],{"class":2239},[398,76681,409],{"class":408},[398,76683,76684],{"class":513},"'Java'",[398,76686,75948],{"class":408},[398,76688,75572],{"class":467},[398,76690,76691],{"class":400,"line":1893},[398,76692,76693],{"class":467},"    \u002F\u002F 不区分大小写、\n",[398,76695,76696,76698,76700,76702,76704,76706,76708,76710,76712,76714,76716,76718,76720,76722,76724],{"class":400,"line":1899},[398,76697,73946],{"class":408},[398,76699,58440],{"class":2239},[398,76701,409],{"class":408},[398,76703,986],{"class":513},[398,76705,1368],{"class":404},[398,76707,76640],{"class":48170},[398,76709,704],{"class":404},[398,76711,986],{"class":513},[398,76713,843],{"class":404},[398,76715,960],{"class":408},[398,76717,75438],{"class":2239},[398,76719,409],{"class":408},[398,76721,76684],{"class":513},[398,76723,75948],{"class":408},[398,76725,75449],{"class":467},[398,76727,76728,76730,76732,76734],{"class":400,"line":1904},[398,76729,11498],{"class":404},[398,76731,74112],{"class":457},[398,76733,13841],{"class":404},[398,76735,76736],{"class":513}," 'java是一门编程语言，学完java工资很高'\n",[398,76738,76739,76741,76744,76746,76749,76752,76754,76756,76758,76760,76763,76765,76768],{"class":400,"line":1918},[398,76740,11498],{"class":404},[398,76742,76743],{"class":457}," result",[398,76745,13841],{"class":404},[398,76747,76748],{"class":408}," str.",[398,76750,76751],{"class":2239},"replace",[398,76753,409],{"class":408},[398,76755,986],{"class":513},[398,76757,76640],{"class":48170},[398,76759,986],{"class":513},[398,76761,76762],{"class":404},"ig",[398,76764,12712],{"class":408},[398,76766,76767],{"class":513},"'前端'",[398,76769,415],{"class":408},[398,76771,76772,76774,76776],{"class":400,"line":1923},[398,76773,73946],{"class":408},[398,76775,58440],{"class":2239},[398,76777,76778],{"class":408},"(result)\n",[398,76780,76781,76783,76785],{"class":400,"line":1929},[398,76782,52610],{"class":408},[398,76784,52006],{"class":51493},[398,76786,51500],{"class":408},[398,76788,76789,76791,76793],{"class":400,"line":1950},[398,76790,51978],{"class":408},[398,76792,51993],{"class":51493},[398,76794,51500],{"class":408},[398,76796,76797,76799,76801],{"class":400,"line":1955},[398,76798,51978],{"class":408},[398,76800,50828],{"class":51493},[398,76802,51500],{"class":408},[5403,76804,76805],{},"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":316,"searchDepth":317,"depth":317,"links":76807},[76808,76818,76830,76847,76854,76862],{"id":53553,"depth":317,"text":53554,"children":76809},[76810,76811,76812,76813,76814,76815,76816,76817],{"id":53557,"depth":320,"text":53558},{"id":53590,"depth":320,"text":53591},{"id":53629,"depth":320,"text":53630},{"id":53787,"depth":320,"text":53788},{"id":53835,"depth":320,"text":53836},{"id":53972,"depth":320,"text":53973},{"id":54294,"depth":320,"text":54295},{"id":57282,"depth":320,"text":57283},{"id":57310,"depth":317,"text":57311,"children":76819},[76820,76821,76822,76823,76824,76825,76826,76827,76828,76829],{"id":57314,"depth":320,"text":57315},{"id":57337,"depth":320,"text":57338},{"id":58252,"depth":320,"text":58253},{"id":58942,"depth":320,"text":58943},{"id":59224,"depth":320,"text":59225},{"id":63385,"depth":320,"text":63386},{"id":63555,"depth":320,"text":63556},{"id":63683,"depth":320,"text":63684},{"id":63708,"depth":320,"text":63709},{"id":65097,"depth":320,"text":65098},{"id":66250,"depth":317,"text":66251,"children":76831},[76832,76833,76834,76835,76836,76837,76838,76839,76840,76841,76842,76843,76844,76845,76846],{"id":66254,"depth":320,"text":66255},{"id":66908,"depth":320,"text":66909},{"id":68603,"depth":320,"text":68604},{"id":68644,"depth":320,"text":68645},{"id":68686,"depth":320,"text":68687},{"id":68700,"depth":320,"text":68701},{"id":68749,"depth":320,"text":68750},{"id":68761,"depth":320,"text":68762},{"id":68776,"depth":320,"text":68777},{"id":68812,"depth":320,"text":68813},{"id":68893,"depth":320,"text":68894},{"id":69021,"depth":320,"text":69022},{"id":69033,"depth":320,"text":69034},{"id":69052,"depth":320,"text":69053},{"id":71163,"depth":320,"text":71164},{"id":71182,"depth":317,"text":71183,"children":76848},[76849,76850,76851,76852,76853],{"id":71203,"depth":320,"text":71204},{"id":71223,"depth":320,"text":71224},{"id":71272,"depth":320,"text":71273},{"id":71397,"depth":320,"text":71398},{"id":71578,"depth":320,"text":71579},{"id":71596,"depth":317,"text":71597,"children":76855},[76856,76857,76858,76859,76860,76861],{"id":71611,"depth":320,"text":71612},{"id":71670,"depth":320,"text":71671},{"id":71694,"depth":320,"text":71695},{"id":72014,"depth":320,"text":72015},{"id":72046,"depth":320,"text":72047},{"id":72069,"depth":320,"text":72070},{"id":75137,"depth":317,"text":75138,"children":76863},[76864,76865],{"id":75171,"depth":320,"text":75172},{"id":75210,"depth":320,"text":75211},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53525,"description":23654},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76872,"title":76873,"body":76874,"description":23654,"extension":326,"meta":93011,"navigation":328,"path":93012,"seo":93013,"stem":93014,"__hash__":93015},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76875,"toc":92947},[76876,76879,76882,76886,76890,76895,76900,76911,76915,76920,76923,76927,76930,76935,76939,76943,76946,76951,76954,76958,76961,76969,76972,76976,76981,76986,76989,76993,76998,77003,77006,77010,77015,77018,77023,77026,77031,77034,77039,77044,77047,77050,77054,77059,77064,77067,77071,77075,77078,77081,77084,77088,77092,77097,77102,77105,77109,77114,77119,77122,77125,77128,77131,77134,77137,77140,77143,77146,77151,77155,77160,77165,77168,77171,77174,77177,77180,77183,77186,77189,77193,77197,77200,77203,77206,77211,77213,77216,77219,77222,77225,77228,77231,77234,77237,77240,77243,77246,77249,77252,77257,77262,77267,77270,77274,77277,77282,77286,77288,77299,77304,77405,77408,77411,77414,77417,77420,77423,77426,77429,77431,77434,77437,77440,77443,77446,77448,77451,77454,77457,77460,77463,77466,77468,77471,77473,77475,77478,77482,77486,77489,77492,77495,77498,77501,77504,77507,77510,77513,77518,77638,77641,77644,77649,77652,77655,77658,77661,77666,77669,77672,77675,77678,77683,77686,77786,77851,77925,77929,77932,77935,77939,77942,77956,77985,77988,77991,77994,77997,78000,78003,78006,78008,78011,78014,78017,78020,78024,78029,78033,78038,78113,78116,78299,78302,78305,78308,78311,78314,78316,78319,78322,78325,78328,78331,78334,78336,78340,78343,78348,78351,78354,78357,78360,78362,78367,78370,78373,78376,78379,78381,78386,78389,78392,78394,78396,78399,78403,78406,78409,78414,78417,78420,78423,78473,78478,78482,78487,78490,78559,78562,78571,78575,78580,78583,78586,78594,78597,78614,80416,80420,80424,80429,80432,80436,80442,80448,80600,80605,80610,80613,80616,80619,80622,80625,80628,80631,80634,80637,80640,80643,80646,80651,80655,80658,80669,80673,80678,80681,80684,80687,80690,80693,80695,80698,80701,80704,80707,80709,80726,80729,80733,80736,80741,80746,80749,80752,80756,80759,80762,80771,80774,80778,80781,80786,80791,80858,80862,80865,80868,80873,80878,80964,80969,80973,80976,80979,80994,80997,81002,81006,81011,81120,81123,81134,81284,81288,81293,81402,81406,81411,81416,81421,81424,81431,81451,81487,81651,81656,81659,81664,81671,81674,81677,81680,81739,81795,81851,81855,81860,82175,82178,82182,82185,82190,82299,82304,82308,82313,82317,82388,82392,82394,82397,82400,82438,82714,82718,82735,82801,82835,82839,82842,82847,82876,82883,82892,82897,82912,82917,82926,82929,83066,83070,83132,83136,83141,83386,83390,83395,83398,83401,83404,83407,83411,83416,84997,85001,85005,85011,85014,85019,85023,85026,85031,85034,85045,85049,85054,85058,85063,85068,85071,85076,85080,85084,85087,85092,85097,85100,85103,85106,85228,85233,85335,85338,85341,85345,85350,85522,85527,85531,85534,85539,85605,85610,85613,85744,85747,85752,85755,85758,85849,85854,85857,85860,85863,85866,85871,85876,85879,85884,85889,85894,85898,85901,85904,85909,85914,85919,85924,85978,85981,85984,85989,85992,85995,86000,86005,86010,86014,86019,86033,86038,86041,86046,86050,86055,86060,86065,86070,86075,86080,86085,86090,86093,86097,86102,86105,86108,86111,86116,86121,86124,86127,86131,86134,86137,86142,86147,86152,86157,86160,86165,86170,86231,86236,86239,86244,87485,87490,87494,87498,87503,87506,87511,87516,87519,87524,87526,87531,87535,87538,87541,87552,87556,87561,87566,87621,87626,87631,87636,87847,87852,87856,87861,87864,87866,87869,87872,88319,88324,88331,88337,88340,88343,88607,88612,88616,88881,88886,88890,88895,88900,88905,88910,89241,89244,89249,89254,89257,89261,89265,89270,89275,89280,89285,89290,89295,89299,89302,89307,89312,89315,89389,89394,89399,89404,89406,89409,89779,89784,89789,89794,89797,89800,89902,89907,89912,90015,90019,90024,90028,90032,90037,90042,90045,90050,90053,90056,90449,90454,90457,90460,90463,90466,90986,90990,90995,91000,91005,91008,91013,91016,91019,91401,91406,91408,91410,91413,91416,91928,91932,91993,91996,91999,92002,92006,92009,92014,92019,92944],[10,76877,76873],{"id":76878},"_4js进阶",[19,76880,76881],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[343,76883,76885],{"id":76884},"_41-作用域","4.1 作用域",[14,76887,76889],{"id":76888},"_411-局部作用域","4.1.1 局部作用域",[19,76891,76892],{},[1738,76893],{"alt":316,"src":76894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,76896,76897],{},[1738,76898],{"alt":316,"src":76899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[67,76901,76902,76905,76908],{},[41,76903,76904],{},"函数作用域在函数内部",[41,76906,76907],{},"块级作用域在{}",[41,76909,76910],{},"对象的那个{}不是作用域，不是块作用域",[14,76912,76914],{"id":76913},"_412-全局作用域","4.1.2 全局作用域",[19,76916,76917],{},[1738,76918],{"alt":316,"src":76919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,76921,76922],{},"window.a=10不要这样写",[14,76924,76926],{"id":76925},"_413-作用域链","4.1.3 作用域链",[19,76928,76929],{},"变量查找机制",[19,76931,76932],{},[1738,76933],{"alt":316,"src":76934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[343,76936,76938],{"id":76937},"_42-垃圾回收机制","4.2 垃圾回收机制",[14,76940,76942],{"id":76941},"_421-大体介绍","4.2.1 大体介绍",[19,76944,76945],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,76947,76948],{},[1738,76949],{"alt":316,"src":76950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,76952,76953],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[14,76955,76957],{"id":76956},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,76959,76960],{},"堆栈空间分配区别：",[38,76962,76963,76966],{},[41,76964,76965],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[41,76967,76968],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,76970,76971],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22275,76973,76975],{"id":76974},"_4221-引用计数","4.2.2.1 引用计数",[19,76977,76978],{},[1738,76979],{"alt":316,"src":76980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,76982,76983],{},[1738,76984],{"alt":316,"src":76985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,76987,76988],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22275,76990,76992],{"id":76991},"_4222-标记清除法","4.2.2.2 标记清除法",[19,76994,76995],{},[1738,76996],{"alt":316,"src":76997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,76999,77000],{},[1738,77001],{"alt":316,"src":77002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,77004,77005],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[343,77007,77009],{"id":77008},"_43-闭包","4.3 闭包",[19,77011,77012],{},[1738,77013],{"alt":316,"src":77014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,77016,77017],{},"闭包：内层函数+外层函数的变量",[19,77019,77020],{},[1738,77021],{"alt":316,"src":77022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,77024,77025],{},"closure就是闭包",[19,77027,77028],{},[1738,77029],{"alt":316,"src":77030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,77032,77033],{},"内层函数必须包含外层函数的变量才是闭包",[19,77035,77036],{},[1738,77037],{"alt":316,"src":77038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,77040,77041],{},[1738,77042],{"alt":316,"src":77043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,77045,77046],{},"闭包可能会引起内存泄漏",[19,77048,77049],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[343,77051,77053],{"id":77052},"_44-变量提升","4.4 变量提升",[19,77055,77056],{},[1738,77057],{"alt":316,"src":77058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,77060,77061],{},[1738,77062],{"alt":316,"src":77063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,77065,77066],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[343,77068,77070],{"id":77069},"_45-函数进阶","4.5 函数进阶",[14,77072,77074],{"id":77073},"_451-函数提升","4.5.1 函数提升",[19,77076,77077],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,77079,77080],{},"只提升函数声明，不提升函数调用",[52006,77082,77083],{},"\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,77085,77087],{"id":77086},"_452-函数参数","4.5.2 函数参数",[22275,77089,77091],{"id":77090},"_4521-动态参数","4.5.2.1 动态参数",[19,77093,77094],{},[1738,77095],{"alt":316,"src":77096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,77098,77099],{},[1738,77100],{"alt":316,"src":77101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,77103,77104],{},"箭头函数里边没有arguments",[22275,77106,77108],{"id":77107},"_4522-剩余参数","4.5.2.2 剩余参数",[19,77110,77111],{},[1738,77112],{"alt":316,"src":77113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,77115,77116],{},[1738,77117],{"alt":316,"src":77118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,77120,77121],{},"剩余参数使用的时候不需要写...",[19,77123,77124],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,77126,77127],{},"  function getSum(a,b,...arr) {",[19,77129,77130],{},"  console.log(11)",[19,77132,77133],{},"  }",[19,77135,77136],{},"  getSum(1,2,3,4)",[19,77138,77139],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,77141,77142],{},"  getSum(1,2)",[19,77144,77145],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,77147,77148],{},[1738,77149],{"alt":316,"src":77150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22275,77152,77154],{"id":77153},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,77156,77157],{},[1738,77158],{"alt":316,"src":77159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,77161,77162],{},[1738,77163],{"alt":316,"src":77164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,77166,77167],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,77169,77170],{},"展开运算符可以用于数组之间的合并：",[19,77172,77173],{},"const arr1 = [1, 2, 3]",[19,77175,77176],{},"const arr2 = [3, 4, 5]",[19,77178,77179],{},"const arr = [...arr1, ...arr2]",[19,77181,77182],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,77184,77185],{},"剩余参数：函数参数使用，得到真数组",[19,77187,77188],{},"展开运算符：数组中使用，数组展开",[14,77190,77192],{"id":77191},"_453-箭头函数","4.5.3 箭头函数",[22275,77194,77196],{"id":77195},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,77198,77199],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,77201,77202],{},"它不是万能的！！！",[19,77204,77205],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,77207,77208],{},[1738,77209],{"alt":316,"src":77210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,77212,438],{},[19,77214,77215],{},"① 只有一个形参的时候，可以省略小括号：",[19,77217,77218],{},"const fn=x=>{console.log(x)}",[19,77220,77221],{},"② 只有一行代码时可以省略大括号：",[19,77223,77224],{},"const fn=x=>console.log(11)",[19,77226,77227],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,77229,77230],{},"const fn=x=>x+x",[19,77232,77233],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,77235,77236],{},"⑤ 阻止表单默认提交：",[19,77238,77239],{},"const form = document.querySelector('form')",[19,77241,77242],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,77244,77245],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,77247,77248],{},"const fn=uname=>({uname:uname})",[19,77250,77251],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,77253,77254],{},[1738,77255],{"alt":316,"src":77256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,77258,77259],{},[1738,77260],{"alt":316,"src":77261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,77263,77264],{},[1738,77265],{"alt":316,"src":77266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,77268,77269],{},"一定不要忘记用()，有()就理解为自带return",[22275,77271,77273],{"id":77272},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,77275,77276],{},"箭头函数是没有动态参数的arguments",[19,77278,77279],{},[1738,77280],{"alt":316,"src":77281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22275,77283,77285],{"id":77284},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,77287,11609],{},[38,77289,77290,77293,77296],{},[41,77291,77292],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[41,77294,77295],{},"事件回调函数使用箭头函数时，this 为全局的 window",[41,77297,77298],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,77300,77301],{},[1738,77302],{"alt":316,"src":77303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[389,77305,77307],{"className":53260,"code":77306,"language":53262,"meta":316,"style":316},"  \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",[395,77308,77309,77317,77322,77327,77332,77337,77342,77346,77351,77355,77359,77364,77369,77374,77378,77382,77387,77392,77397],{"__ignoreMap":316},[398,77310,77311,77313,77315],{"class":400,"line":401},[398,77312,52337],{"class":408},[398,77314,52006],{"class":51493},[398,77316,51500],{"class":408},[398,77318,77319],{"class":400,"line":317},[398,77320,77321],{"class":408},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[398,77323,77324],{"class":400,"line":320},[398,77325,77326],{"class":408},"    console.log(this) \u002F\u002F指向window\n",[398,77328,77329],{"class":400,"line":1470},[398,77330,77331],{"class":408},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[398,77333,77334],{"class":400,"line":1476},[398,77335,77336],{"class":408},"    function fn() {\n",[398,77338,77339],{"class":400,"line":1490},[398,77340,77341],{"class":408},"      console.log(this)  \u002F\u002F指向window\n",[398,77343,77344],{"class":400,"line":1496},[398,77345,2463],{"class":408},[398,77347,77348],{"class":400,"line":1587},[398,77349,77350],{"class":408},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[398,77352,77353],{"class":400,"line":1593},[398,77354,2676],{"emptyLinePlaceholder":328},[398,77356,77357],{"class":400,"line":1605},[398,77358,71716],{"class":408},[398,77360,77361],{"class":400,"line":1888},[398,77362,77363],{"class":408},"      name: 'andy',\n",[398,77365,77366],{"class":400,"line":1893},[398,77367,77368],{"class":408},"      sayHai: function () {\n",[398,77370,77371],{"class":400,"line":1899},[398,77372,77373],{"class":408},"        console.log(this)\n",[398,77375,77376],{"class":400,"line":1904},[398,77377,52591],{"class":408},[398,77379,77380],{"class":400,"line":1918},[398,77381,2463],{"class":408},[398,77383,77384],{"class":400,"line":1923},[398,77385,77386],{"class":408},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[398,77388,77389],{"class":400,"line":1929},[398,77390,77391],{"class":408},"    \u002F\u002F 2.箭头函数的this\n",[398,77393,77394],{"class":400,"line":1950},[398,77395,77396],{"class":408},"    const fn = () => console.log(this)\n",[398,77398,77399,77401,77403],{"class":400,"line":1955},[398,77400,52610],{"class":408},[398,77402,52006],{"class":51493},[398,77404,51500],{"class":408},[19,77406,77407],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,77409,77410],{},"const fn = () => console.log(this)",[19,77412,77413],{},"fn() \u002F\u002F指向window",[19,77415,77416],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,77418,77419],{},"①",[19,77421,77422],{},"const obj = {",[19,77424,77425],{},"uname: 'pink老师',",[19,77427,77428],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,77430,1348],{},[19,77432,77433],{},"调用对象里边的函数",[19,77435,77436],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,77438,77439],{},"obj.sayHai()",[19,77441,77442],{},"②",[19,77444,77445],{},"const obj1 = {",[19,77447,77425],{},[19,77449,77450],{},"sayHai: function () {",[19,77452,77453],{},"let i = 10",[19,77455,77456],{},"const count = () => {",[19,77458,77459],{},"console.log(this)",[19,77461,77462],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,77464,77465],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,77467,1348],{},[19,77469,77470],{},"count()",[19,77472,1348],{},[19,77474,1348],{},[19,77476,77477],{},"obj1.sayHai()",[343,77479,77481],{"id":77480},"_46-解构赋值","4.6 解构赋值",[14,77483,77485],{"id":77484},"_461-数组解构","4.6.1 数组解构",[19,77487,77488],{},"以前要是使用数组中的值的话：",[19,77490,77491],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,77493,77494],{},"const arr=[100,60,80]",[19,77496,77497],{},"const max=arr[0]",[19,77499,77500],{},"const min=arr[1]",[19,77502,77503],{},"const avg=arr[2]",[19,77505,77506],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,77508,77509],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,77511,77512],{},"这个写法就类似于上边的那种用很多const的方法",[19,77514,77515],{},[1738,77516],{"alt":316,"src":77517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[389,77519,77521],{"className":50826,"code":77520,"language":50828,"meta":316,"style":316},"①变量之间交换值:\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",[395,77522,77523,77528,77533,77538,77543,77548,77552,77556,77561,77565,77570,77575,77579,77584,77589,77600,77610,77615,77620,77625,77629,77633],{"__ignoreMap":316},[398,77524,77525],{"class":400,"line":401},[398,77526,77527],{"class":408},"①变量之间交换值:\n",[398,77529,77530],{"class":400,"line":317},[398,77531,77532],{"class":408},"let a=1\n",[398,77534,77535],{"class":400,"line":320},[398,77536,77537],{"class":408},"let b=2;\n",[398,77539,77540],{"class":400,"line":1470},[398,77541,77542],{"class":408},"必须加这行代码，不然就会报错\n",[398,77544,77545],{"class":400,"line":1476},[398,77546,77547],{"class":408},"[b,a]=[a,b]\n",[398,77549,77550],{"class":400,"line":1490},[398,77551,2676],{"emptyLinePlaceholder":328},[398,77553,77554],{"class":400,"line":1496},[398,77555,2676],{"emptyLinePlaceholder":328},[398,77557,77558],{"class":400,"line":1587},[398,77559,77560],{"class":408},"可以写成下面的方式：\n",[398,77562,77563],{"class":400,"line":1593},[398,77564,77532],{"class":408},[398,77566,77567],{"class":400,"line":1605},[398,77568,77569],{"class":408},"let b=2\n",[398,77571,77572],{"class":400,"line":1888},[398,77573,77574],{"class":408},";[b,a]=[a,b]\n",[398,77576,77577],{"class":400,"line":1893},[398,77578,2676],{"emptyLinePlaceholder":328},[398,77580,77581],{"class":400,"line":1899},[398,77582,77583],{"class":408},"②排序\n",[398,77585,77586],{"class":400,"line":1904},[398,77587,77588],{"class":408},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[398,77590,77591,77594,77597],{"class":400,"line":1918},[398,77592,77593],{"class":408},"for (let i = 0; i ",[398,77595,1312],{"class":77596},"s7hpK",[398,77598,77599],{"class":408}," arr1.length; i++) {\n",[398,77601,77602,77605,77607],{"class":400,"line":1923},[398,77603,77604],{"class":408},"   for (let j = 0; j ",[398,77606,1312],{"class":77596},[398,77608,77609],{"class":408}," arr1.length - 1; j++) {\n",[398,77611,77612],{"class":400,"line":1929},[398,77613,77614],{"class":408},"      if (arr1[j] > arr1[j + 1]) {\n",[398,77616,77617],{"class":400,"line":1950},[398,77618,77619],{"class":408},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[398,77621,77622],{"class":400,"line":1955},[398,77623,77624],{"class":408},"       }\n",[398,77626,77627],{"class":400,"line":1969},[398,77628,4585],{"class":408},[398,77630,77631],{"class":400,"line":1974},[398,77632,1841],{"class":408},[398,77634,77635],{"class":400,"line":2003},[398,77636,77637],{"class":408},"console.log(arr1)\n",[19,77639,77640],{},"数组解构的细节：",[19,77642,77643],{},"①变量多，单元值少",[19,77645,77646],{},[1738,77647],{"alt":316,"src":77648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,77650,77651],{},"防止出现undefined的方法：",[19,77653,77654],{},"const [a=0,b=0] =[1]",[19,77656,77657],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,77659,77660],{},"②变量少，单元值多",[19,77662,77663],{},[1738,77664],{"alt":316,"src":77665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,77667,77668],{},"此时可以使用剩余参数来接收多余的值",[19,77670,77671],{},"const [a,b,...c]=[1,2,3,4]",[19,77673,77674],{},"console.log(c) 输出[3,4]",[19,77676,77677],{},"③可以按需导入，忽略某些返回值",[19,77679,77680],{},[1738,77681],{"alt":316,"src":77682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,77684,77685],{},"④支持多维数组的结构",[389,77687,77691],{"className":77688,"code":77689,"language":77690,"meta":316,"style":316},"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",[395,77692,77693,77721,77737,77752,77767],{"__ignoreMap":316},[398,77694,77695,77697,77699,77701,77703,77705,77707,77709,77712,77714,77716,77718],{"class":400,"line":401},[398,77696,7069],{"class":404},[398,77698,52026],{"class":408},[398,77700,454],{"class":404},[398,77702,52419],{"class":408},[398,77704,619],{"class":457},[398,77706,12712],{"class":408},[398,77708,486],{"class":457},[398,77710,77711],{"class":408},", [",[398,77713,480],{"class":457},[398,77715,12712],{"class":408},[398,77717,695],{"class":457},[398,77719,77720],{"class":408},"]]\n",[398,77722,77723,77726,77728,77730,77732,77734],{"class":400,"line":317},[398,77724,77725],{"class":408},"console.",[398,77727,58440],{"class":2239},[398,77729,4127],{"class":408},[398,77731,593],{"class":457},[398,77733,4492],{"class":408},[398,77735,77736],{"class":467},"  \u002F\u002F1\n",[398,77738,77739,77741,77743,77745,77747,77749],{"class":400,"line":320},[398,77740,77725],{"class":408},[398,77742,58440],{"class":2239},[398,77744,4127],{"class":408},[398,77746,619],{"class":457},[398,77748,4492],{"class":408},[398,77750,77751],{"class":467},"  \u002F\u002F2\n",[398,77753,77754,77756,77758,77760,77762,77764],{"class":400,"line":1470},[398,77755,77725],{"class":408},[398,77757,58440],{"class":2239},[398,77759,4127],{"class":408},[398,77761,486],{"class":457},[398,77763,4492],{"class":408},[398,77765,77766],{"class":467},"  \u002F\u002F[3,4]\n",[398,77768,77769,77771,77773,77775,77777,77779,77781,77783],{"class":400,"line":1476},[398,77770,77725],{"class":408},[398,77772,58440],{"class":2239},[398,77774,4127],{"class":408},[398,77776,486],{"class":457},[398,77778,5177],{"class":408},[398,77780,593],{"class":457},[398,77782,4492],{"class":408},[398,77784,77785],{"class":467},"  \u002F\u002F3\n",[389,77787,77789],{"className":77688,"code":77788,"language":77690,"meta":316,"style":316},"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",[395,77790,77791,77818,77829,77840],{"__ignoreMap":316},[398,77792,77793,77795,77798,77800,77802,77804,77806,77808,77810,77812,77814,77816],{"class":400,"line":401},[398,77794,7069],{"class":404},[398,77796,77797],{"class":408}," [a, b, c] ",[398,77799,454],{"class":404},[398,77801,52419],{"class":408},[398,77803,619],{"class":457},[398,77805,12712],{"class":408},[398,77807,486],{"class":457},[398,77809,77711],{"class":408},[398,77811,480],{"class":457},[398,77813,12712],{"class":408},[398,77815,695],{"class":457},[398,77817,77720],{"class":408},[398,77819,77820,77822,77824,77827],{"class":400,"line":317},[398,77821,77725],{"class":408},[398,77823,58440],{"class":2239},[398,77825,77826],{"class":408},"(a)",[398,77828,77736],{"class":467},[398,77830,77831,77833,77835,77838],{"class":400,"line":320},[398,77832,77725],{"class":408},[398,77834,58440],{"class":2239},[398,77836,77837],{"class":408},"(b)",[398,77839,77751],{"class":467},[398,77841,77842,77844,77846,77849],{"class":400,"line":1470},[398,77843,77725],{"class":408},[398,77845,58440],{"class":2239},[398,77847,77848],{"class":408},"(c)",[398,77850,77766],{"class":467},[389,77852,77854],{"className":77688,"code":77853,"language":77690,"meta":316,"style":316},"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",[395,77855,77856,77883,77893,77903,77913],{"__ignoreMap":316},[398,77857,77858,77860,77863,77865,77867,77869,77871,77873,77875,77877,77879,77881],{"class":400,"line":401},[398,77859,7069],{"class":404},[398,77861,77862],{"class":408}," [a, b, [c, d]] ",[398,77864,454],{"class":404},[398,77866,52419],{"class":408},[398,77868,619],{"class":457},[398,77870,12712],{"class":408},[398,77872,486],{"class":457},[398,77874,77711],{"class":408},[398,77876,480],{"class":457},[398,77878,12712],{"class":408},[398,77880,695],{"class":457},[398,77882,77720],{"class":408},[398,77884,77885,77887,77889,77891],{"class":400,"line":317},[398,77886,77725],{"class":408},[398,77888,58440],{"class":2239},[398,77890,77826],{"class":408},[398,77892,77736],{"class":467},[398,77894,77895,77897,77899,77901],{"class":400,"line":320},[398,77896,77725],{"class":408},[398,77898,58440],{"class":2239},[398,77900,77837],{"class":408},[398,77902,77751],{"class":467},[398,77904,77905,77907,77909,77911],{"class":400,"line":1470},[398,77906,77725],{"class":408},[398,77908,58440],{"class":2239},[398,77910,77848],{"class":408},[398,77912,77785],{"class":467},[398,77914,77915,77917,77919,77922],{"class":400,"line":1476},[398,77916,77725],{"class":408},[398,77918,58440],{"class":2239},[398,77920,77921],{"class":408},"(d)",[398,77923,77924],{"class":467},"  \u002F\u002F4\n",[14,77926,77928],{"id":77927},"_462-对象解构","4.6.2 对象解构",[19,77930,77931],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,77933,77934],{},"用的非常非常多！！！！！！",[22275,77936,77938],{"id":77937},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,77940,77941],{},"基本语法：",[38,77943,77944,77947,77950,77953],{},[41,77945,77946],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[41,77948,77949],{},"对象属性的值将被赋值给与属性名相同的变量",[41,77951,77952],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[41,77954,77955],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[389,77957,77959],{"className":50826,"code":77958,"language":50828,"meta":316,"style":316},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[395,77960,77961,77966,77971,77976,77980],{"__ignoreMap":316},[398,77962,77963],{"class":400,"line":401},[398,77964,77965],{"class":408},"const obj = {\n",[398,77967,77968],{"class":400,"line":317},[398,77969,77970],{"class":408},"   uname: 'pink老师',\n",[398,77972,77973],{"class":400,"line":320},[398,77974,77975],{"class":408},"   age: 18,\n",[398,77977,77978],{"class":400,"line":1470},[398,77979,1841],{"class":408},[398,77981,77982],{"class":400,"line":1476},[398,77983,77984],{"class":408},"const { uname, age } = obj\n",[19,77986,77987],{},"上方代码这样写等价于：",[19,77989,77990],{},"const uname等价于obj.uname",[19,77992,77993],{},"变量名可以重新改名：",[19,77995,77996],{},"const uname='red老师'",[19,77998,77999],{},"const user={",[19,78001,78002],{},"  uname:'pink老师',",[19,78004,78005],{},"  age:18",[19,78007,1348],{},[19,78009,78010],{},"const {uname,age}=user",[19,78012,78013],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,78015,78016],{},"const {旧变量名：新变量名}=对象",[19,78018,78019],{},"const {uname:username,age}=user",[22275,78021,78023],{"id":78022},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,78025,78026],{},[1738,78027],{"alt":316,"src":78028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22275,78030,78032],{"id":78031},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,78034,78035],{},[1738,78036],{"alt":316,"src":78037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[389,78039,78041],{"className":53260,"code":78040,"language":53262,"meta":316,"style":316},"  \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",[395,78042,78043,78051,78056,78061,78066,78071,78076,78081,78086,78091,78095,78100,78105],{"__ignoreMap":316},[398,78044,78045,78047,78049],{"class":400,"line":401},[398,78046,52337],{"class":408},[398,78048,52006],{"class":51493},[398,78050,51500],{"class":408},[398,78052,78053],{"class":400,"line":317},[398,78054,78055],{"class":408},"    const pig = {\n",[398,78057,78058],{"class":400,"line":320},[398,78059,78060],{"class":408},"      name: '佩奇',\n",[398,78062,78063],{"class":400,"line":1470},[398,78064,78065],{"class":408},"      family: {\n",[398,78067,78068],{"class":400,"line":1476},[398,78069,78070],{"class":408},"        mother: '猪妈妈',\n",[398,78072,78073],{"class":400,"line":1490},[398,78074,78075],{"class":408},"        father: '猪爸爸',\n",[398,78077,78078],{"class":400,"line":1496},[398,78079,78080],{"class":408},"        sister: '乔治'\n",[398,78082,78083],{"class":400,"line":1587},[398,78084,78085],{"class":408},"      },\n",[398,78087,78088],{"class":400,"line":1593},[398,78089,78090],{"class":408},"      age: 6\n",[398,78092,78093],{"class":400,"line":1605},[398,78094,2463],{"class":408},[398,78096,78097],{"class":400,"line":1888},[398,78098,78099],{"class":408},"    \u002F\u002F 多级对象解构\n",[398,78101,78102],{"class":400,"line":1893},[398,78103,78104],{"class":408},"    const { name, family: { mother, father, sister }, age } = pig\n",[398,78106,78107,78109,78111],{"class":400,"line":1899},[398,78108,52610],{"class":408},[398,78110,52006],{"class":51493},[398,78112,51500],{"class":408},[19,78114,78115],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[389,78117,78120],{"className":78118,"code":78119,"language":76640,"meta":316,"style":316},"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",[395,78121,78122,78127,78138,78150,78162,78171,78175,78186,78198,78208,78213,78217,78227,78238,78247,78251,78255,78266,78277,78286,78290,78295],{"__ignoreMap":316},[398,78123,78124],{"class":400,"line":401},[398,78125,78126],{"class":467},"    \u002F\u002F 这是后台传递过来的数据\n",[398,78128,78129,78131,78134,78136],{"class":400,"line":317},[398,78130,11498],{"class":404},[398,78132,78133],{"class":408}," msg ",[398,78135,454],{"class":404},[398,78137,15849],{"class":408},[398,78139,78140,78143,78145,78148],{"class":400,"line":320},[398,78141,78142],{"class":513},"      \"code\"",[398,78144,1261],{"class":404},[398,78146,78147],{"class":457}," 200",[398,78149,31659],{"class":408},[398,78151,78152,78155,78157,78160],{"class":400,"line":1470},[398,78153,78154],{"class":513},"      \"msg\"",[398,78156,1261],{"class":404},[398,78158,78159],{"class":513}," \"获取新闻列表成功\"",[398,78161,31659],{"class":408},[398,78163,78164,78167,78169],{"class":400,"line":1476},[398,78165,78166],{"class":513},"      \"data\"",[398,78168,1261],{"class":404},[398,78170,55640],{"class":408},[398,78172,78173],{"class":400,"line":1490},[398,78174,2786],{"class":408},[398,78176,78177,78180,78182,78184],{"class":400,"line":1496},[398,78178,78179],{"class":513},"          \"id\"",[398,78181,1261],{"class":404},[398,78183,25396],{"class":457},[398,78185,31659],{"class":408},[398,78187,78188,78191,78193,78196],{"class":400,"line":1587},[398,78189,78190],{"class":513},"          \"title\"",[398,78192,1261],{"class":404},[398,78194,78195],{"class":513}," \"5G商用自己，三大运用商收入下降\"",[398,78197,31659],{"class":408},[398,78199,78200,78203,78205],{"class":400,"line":1593},[398,78201,78202],{"class":513},"          \"count\"",[398,78204,1261],{"class":404},[398,78206,78207],{"class":457}," 58\n",[398,78209,78210],{"class":400,"line":1605},[398,78211,78212],{"class":408},"        },\n",[398,78214,78215],{"class":400,"line":1888},[398,78216,2786],{"class":408},[398,78218,78219,78221,78223,78225],{"class":400,"line":1893},[398,78220,78179],{"class":513},[398,78222,1261],{"class":404},[398,78224,15032],{"class":457},[398,78226,31659],{"class":408},[398,78228,78229,78231,78233,78236],{"class":400,"line":1899},[398,78230,78190],{"class":513},[398,78232,1261],{"class":404},[398,78234,78235],{"class":513}," \"国际媒体头条速览\"",[398,78237,31659],{"class":408},[398,78239,78240,78242,78244],{"class":400,"line":1904},[398,78241,78202],{"class":513},[398,78243,1261],{"class":404},[398,78245,78246],{"class":457}," 56\n",[398,78248,78249],{"class":400,"line":1918},[398,78250,78212],{"class":408},[398,78252,78253],{"class":400,"line":1923},[398,78254,2786],{"class":408},[398,78256,78257,78259,78261,78264],{"class":400,"line":1929},[398,78258,78179],{"class":513},[398,78260,1261],{"class":404},[398,78262,78263],{"class":457}," 3",[398,78265,31659],{"class":408},[398,78267,78268,78270,78272,78275],{"class":400,"line":1950},[398,78269,78190],{"class":513},[398,78271,1261],{"class":404},[398,78273,78274],{"class":513}," \"乌克兰和俄罗斯持续冲突\"",[398,78276,31659],{"class":408},[398,78278,78279,78281,78283],{"class":400,"line":1955},[398,78280,78202],{"class":513},[398,78282,1261],{"class":404},[398,78284,78285],{"class":457}," 1669\n",[398,78287,78288],{"class":400,"line":1969},[398,78289,78212],{"class":408},[398,78291,78292],{"class":400,"line":1974},[398,78293,78294],{"class":408},"      ]\n",[398,78296,78297],{"class":400,"line":2003},[398,78298,2463],{"class":408},[19,78300,78301],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,78303,78304],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,78306,78307],{},"\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,78309,78310],{},"function({data}) {",[19,78312,78313],{},"console.log(data)",[19,78315,1348],{},[19,78317,78318],{},"render(msg)",[19,78320,78321],{},"实参传递给形参的时候解构了",[19,78323,78324],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,78326,78327],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,78329,78330],{},"function render({data:mydata}) {",[19,78332,78333],{},"  console.log(data)",[19,78335,1348],{},[14,78337,78339],{"id":78338},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,78341,78342],{},"有两种情况：一个是数组结构，一个是立即执行函数",[38,78344,78345],{},[41,78346,78347],{},"如果对一个数组进行遍历，有两种方式：",[19,78349,78350],{},"①法1",[19,78352,78353],{},"const arr=[1,2,3]",[19,78355,78356],{},"arr.map(function(item,index) {",[19,78358,78359],{},"  console.log(item)",[19,78361,52657],{},[19,78363,78364],{},[1738,78365],{"alt":316,"src":78366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,78368,78369],{},"②法2",[19,78371,78372],{},"const str='pink'",[19,78374,78375],{},"[1,2,3].map(function(item,index) {",[19,78377,78378],{},"console.log(item)",[19,78380,52657],{},[19,78382,78383],{},[1738,78384],{"alt":316,"src":78385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,78387,78388],{},"此时会报错",[19,78390,78391],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,78393,78378],{},[19,78395,52657],{},[19,78397,78398],{},"内部会当成这样处理，所以我们用分号进行隔开",[343,78400,78402],{"id":78401},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,78404,78405],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,78407,78408],{},"可以理解为加强版的for循环",[19,78410,78411],{},[1738,78412],{"alt":316,"src":78413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,78415,78416],{},"里边不写return，不返回数组，只遍历不返回",[19,78418,78419],{},"map是返回数组",[19,78421,78422],{},"forEach主要用于遍历数组对象",[389,78424,78426],{"className":53260,"code":78425,"language":53262,"meta":316,"style":316},"  \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",[395,78427,78428,78436,78441,78446,78451,78456,78460,78465],{"__ignoreMap":316},[398,78429,78430,78432,78434],{"class":400,"line":401},[398,78431,52337],{"class":408},[398,78433,52006],{"class":51493},[398,78435,51500],{"class":408},[398,78437,78438],{"class":400,"line":317},[398,78439,78440],{"class":408},"    const arr = ['red', 'green', 'pink']\n",[398,78442,78443],{"class":400,"line":320},[398,78444,78445],{"class":408},"    const result = arr.forEach(function (item, index) {\n",[398,78447,78448],{"class":400,"line":1470},[398,78449,78450],{"class":408},"      console.log(item)\n",[398,78452,78453],{"class":400,"line":1476},[398,78454,78455],{"class":408},"      console.log(index)\n",[398,78457,78458],{"class":400,"line":1490},[398,78459,33654],{"class":408},[398,78461,78462],{"class":400,"line":1496},[398,78463,78464],{"class":408},"    console.log(result)\n",[398,78466,78467,78469,78471],{"class":400,"line":1587},[398,78468,52610],{"class":408},[398,78470,52006],{"class":51493},[398,78472,51500],{"class":408},[19,78474,78475],{},[1738,78476],{"alt":316,"src":78477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[343,78479,78481],{"id":78480},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,78483,78484],{},[1738,78485],{"alt":316,"src":78486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,78488,78489],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[389,78491,78493],{"className":53260,"code":78492,"language":53262,"meta":316,"style":316},"\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",[395,78494,78495,78503,78511,78516,78521,78525,78529,78534,78538,78543,78551],{"__ignoreMap":316},[398,78496,78497,78499,78501],{"class":400,"line":401},[398,78498,1312],{"class":408},[398,78500,51993],{"class":51493},[398,78502,51500],{"class":408},[398,78504,78505,78507,78509],{"class":400,"line":317},[398,78506,52337],{"class":408},[398,78508,52006],{"class":51493},[398,78510,51500],{"class":408},[398,78512,78513],{"class":400,"line":320},[398,78514,78515],{"class":408},"    const arr = [10, 20, 30]\n",[398,78517,78518],{"class":400,"line":1470},[398,78519,78520],{"class":408},"    const newArr = arr.filter(function (item, index) {\n",[398,78522,78523],{"class":400,"line":1476},[398,78524,78450],{"class":408},[398,78526,78527],{"class":400,"line":1490},[398,78528,78455],{"class":408},[398,78530,78531],{"class":400,"line":1496},[398,78532,78533],{"class":408},"      return item >= 20\n",[398,78535,78536],{"class":400,"line":1587},[398,78537,33654],{"class":408},[398,78539,78540],{"class":400,"line":1593},[398,78541,78542],{"class":408},"    console.log(newArr)\n",[398,78544,78545,78547,78549],{"class":400,"line":1605},[398,78546,52610],{"class":408},[398,78548,52006],{"class":51493},[398,78550,51500],{"class":408},[398,78552,78553,78555,78557],{"class":400,"line":1888},[398,78554,51978],{"class":408},[398,78556,51993],{"class":51493},[398,78558,51500],{"class":408},[19,78560,78561],{},"这个也可以写成箭头函数：",[389,78563,78565],{"className":50826,"code":78564,"language":50828,"meta":316,"style":316},"const newArr = arr.filter(item => item >= 20)\n",[395,78566,78567],{"__ignoreMap":316},[398,78568,78569],{"class":400,"line":401},[398,78570,78564],{"class":408},[343,78572,78574],{"id":78573},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,78576,78577],{},[1738,78578],{"alt":316,"src":78579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,78581,78582],{},"步骤：",[19,78584,78585],{},"①：渲染页面模块",[67,78587,78588,78591],{},[41,78589,78590],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[41,78592,78593],{},"用forEach+字符串的形式",[19,78595,78596],{},"②：点击不同需求，显示不同页面内容",[67,78598,78599,78602,78605,78608,78611],{},[41,78600,78601],{},"点击采取事件委托方式 .filter",[41,78603,78604],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[41,78606,78607],{},"筛选条件是根据点击的 data-index 来判断",[41,78609,78610],{},"可以使用对象解构，把事件对象解构",[41,78612,78613],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[389,78615,78617],{"className":50826,"code":78616,"language":50828,"meta":316,"style":316},"\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",[395,78618,78619,78629,78643,78647,78655,78669,78689,78701,78709,78715,78725,78735,78745,78749,78753,78759,78772,78784,78794,78806,78810,78814,78821,78834,78846,78863,78881,78894,78898,78902,78914,78924,78928,78932,78939,78980,79007,79017,79021,79025,79033,79045,79049,79053,79061,79073,79085,79096,79100,79104,79113,79125,79136,79140,79144,79153,79165,79177,79181,79185,79192,79202,79214,79226,79241,79245,79249,79257,79273,79283,79293,79303,79315,79319,79323,79333,79344,79354,79358,79366,79374,79378,79386,79401,79427,79452,79477,79496,79504,79518,79523,79528,79533,79538,79543,79551,79559,79564,79575,79580,79590,79600,79610,79620,79624,79628,79637,79646,79655,79664,79668,79672,79681,79690,79699,79708,79712,79716,79725,79734,79743,79752,79756,79760,79769,79778,79787,79796,79800,79804,79813,79822,79831,79840,79844,79848,79857,79866,79875,79884,79888,79892,79901,79910,79918,79927,79931,79935,79939,79944,79956,79961,79973,79977,79994,80022,80031,80036,80046,80056,80065,80070,80075,80079,80084,80101,80105,80110,80118,80123,80150,80155,80175,80180,80192,80197,80202,80207,80218,80232,80269,80287,80320,80337,80361,80365,80370,80376,80380,80384,80388,80396,80404,80408],{"__ignoreMap":316},[398,78620,78621,78623,78625,78627],{"class":400,"line":401},[398,78622,51490],{"class":408},[398,78624,51494],{"class":51493},[398,78626,51497],{"class":2239},[398,78628,51500],{"class":408},[398,78630,78631,78633,78635,78637,78639,78641],{"class":400,"line":317},[398,78632,1312],{"class":408},[398,78634,50828],{"class":51493},[398,78636,51509],{"class":2239},[398,78638,454],{"class":408},[398,78640,51514],{"class":513},[398,78642,51500],{"class":408},[398,78644,78645],{"class":400,"line":320},[398,78646,2676],{"emptyLinePlaceholder":328},[398,78648,78649,78651,78653],{"class":400,"line":1470},[398,78650,1312],{"class":408},[398,78652,51527],{"class":51493},[398,78654,51500],{"class":408},[398,78656,78657,78659,78661,78663,78665,78667],{"class":400,"line":1476},[398,78658,52337],{"class":408},[398,78660,51537],{"class":51493},[398,78662,51540],{"class":2239},[398,78664,454],{"class":408},[398,78666,51545],{"class":513},[398,78668,51500],{"class":408},[398,78670,78671,78673,78675,78677,78679,78681,78683,78685,78687],{"class":400,"line":1490},[398,78672,52337],{"class":408},[398,78674,51537],{"class":51493},[398,78676,15197],{"class":2239},[398,78678,454],{"class":408},[398,78680,51584],{"class":513},[398,78682,51564],{"class":2239},[398,78684,454],{"class":408},[398,78686,51591],{"class":513},[398,78688,51500],{"class":408},[398,78690,78691,78693,78695,78697,78699],{"class":400,"line":1496},[398,78692,52337],{"class":408},[398,78694,51600],{"class":51493},[398,78696,51603],{"class":408},[398,78698,51600],{"class":51493},[398,78700,51500],{"class":408},[398,78702,78703,78705,78707],{"class":400,"line":1587},[398,78704,52337],{"class":408},[398,78706,5403],{"class":51493},[398,78708,51500],{"class":408},[398,78710,78711,78713],{"class":400,"line":1593},[398,78712,6680],{"class":51493},[398,78714,15849],{"class":408},[398,78716,78717,78719,78721,78723],{"class":400,"line":1605},[398,78718,54888],{"class":457},[398,78720,51630],{"class":408},[398,78722,593],{"class":457},[398,78724,1566],{"class":408},[398,78726,78727,78729,78731,78733],{"class":400,"line":1888},[398,78728,54899],{"class":457},[398,78730,51630],{"class":408},[398,78732,593],{"class":457},[398,78734,1566],{"class":408},[398,78736,78737,78739,78741,78743],{"class":400,"line":1893},[398,78738,72789],{"class":457},[398,78740,51630],{"class":408},[398,78742,60698],{"class":457},[398,78744,1566],{"class":408},[398,78746,78747],{"class":400,"line":1899},[398,78748,2463],{"class":408},[398,78750,78751],{"class":400,"line":1904},[398,78752,2676],{"emptyLinePlaceholder":328},[398,78754,78755,78757],{"class":400,"line":1918},[398,78756,62316],{"class":2239},[398,78758,15849],{"class":408},[398,78760,78761,78763,78765,78768,78770],{"class":400,"line":1923},[398,78762,54964],{"class":457},[398,78764,51630],{"class":408},[398,78766,78767],{"class":457},"990",[398,78769,51685],{"class":404},[398,78771,1566],{"class":408},[398,78773,78774,78776,78778,78780,78782],{"class":400,"line":1929},[398,78775,54899],{"class":457},[398,78777,51630],{"class":408},[398,78779,593],{"class":457},[398,78781,51749],{"class":457},[398,78783,1566],{"class":408},[398,78785,78786,78788,78790,78792],{"class":400,"line":1950},[398,78787,55202],{"class":457},[398,78789,51630],{"class":408},[398,78791,51670],{"class":457},[398,78793,1566],{"class":408},[398,78795,78796,78799,78801,78804],{"class":400,"line":1955},[398,78797,78798],{"class":457},"      flex-wrap",[398,78800,51630],{"class":408},[398,78802,78803],{"class":457},"wrap",[398,78805,1566],{"class":408},[398,78807,78808],{"class":400,"line":1969},[398,78809,2463],{"class":408},[398,78811,78812],{"class":400,"line":1974},[398,78813,2676],{"emptyLinePlaceholder":328},[398,78815,78816,78819],{"class":400,"line":2003},[398,78817,78818],{"class":2239},"    .item",[398,78820,15849],{"class":408},[398,78822,78823,78825,78827,78830,78832],{"class":400,"line":2008},[398,78824,54964],{"class":457},[398,78826,51630],{"class":408},[398,78828,78829],{"class":457},"240",[398,78831,51685],{"class":404},[398,78833,1566],{"class":408},[398,78835,78836,78838,78840,78842,78844],{"class":400,"line":2025},[398,78837,62193],{"class":457},[398,78839,51630],{"class":408},[398,78841,848],{"class":457},[398,78843,51685],{"class":404},[398,78845,1566],{"class":408},[398,78847,78848,78850,78852,78854,78856,78859,78861],{"class":400,"line":2030},[398,78849,54888],{"class":457},[398,78851,51630],{"class":408},[398,78853,1102],{"class":457},[398,78855,51685],{"class":404},[398,78857,78858],{"class":457}," 30",[398,78860,51685],{"class":404},[398,78862,1566],{"class":408},[398,78864,78865,78867,78869,78871,78874,78877,78879],{"class":400,"line":2035},[398,78866,62053],{"class":457},[398,78868,51630],{"class":408},[398,78870,28314],{"class":457},[398,78872,78873],{"class":457}," ease",[398,78875,78876],{"class":457}," .5",[398,78878,1097],{"class":404},[398,78880,1566],{"class":408},[398,78882,78883,78886,78888,78890,78892],{"class":400,"line":2040},[398,78884,78885],{"class":457},"      margin-bottom",[398,78887,51630],{"class":408},[398,78889,1102],{"class":457},[398,78891,51685],{"class":404},[398,78893,1566],{"class":408},[398,78895,78896],{"class":400,"line":2054},[398,78897,2463],{"class":408},[398,78899,78900],{"class":400,"line":2059},[398,78901,2676],{"emptyLinePlaceholder":328},[398,78903,78904,78907,78909,78912],{"class":400,"line":2853},[398,78905,78906],{"class":2239},"    .item:nth-child",[398,78908,409],{"class":408},[398,78910,78911],{"class":457},"4n",[398,78913,12719],{"class":408},[398,78915,78916,78918,78920,78922],{"class":400,"line":2867},[398,78917,62193],{"class":457},[398,78919,51630],{"class":408},[398,78921,593],{"class":457},[398,78923,1566],{"class":408},[398,78925,78926],{"class":400,"line":2875},[398,78927,2463],{"class":408},[398,78929,78930],{"class":400,"line":2880},[398,78931,2676],{"emptyLinePlaceholder":328},[398,78933,78934,78937],{"class":400,"line":2886},[398,78935,78936],{"class":2239},"    .item:hover",[398,78938,15849],{"class":408},[398,78940,78941,78944,78946,78948,78950,78952,78954,78956,78958,78961,78963,78965,78967,78969,78971,78973,78975,78978],{"class":400,"line":2892},[398,78942,78943],{"class":457},"      box-shadow",[398,78945,51630],{"class":408},[398,78947,593],{"class":457},[398,78949,51685],{"class":404},[398,78951,4369],{"class":457},[398,78953,51685],{"class":404},[398,78955,2424],{"class":457},[398,78957,51685],{"class":404},[398,78959,78960],{"class":457}," rgba",[398,78962,409],{"class":408},[398,78964,593],{"class":457},[398,78966,12712],{"class":408},[398,78968,593],{"class":457},[398,78970,12712],{"class":408},[398,78972,593],{"class":457},[398,78974,12712],{"class":408},[398,78976,78977],{"class":457},".2",[398,78979,2995],{"class":408},[398,78981,78982,78985,78987,78990,78992,78994,78996,78999,79001,79003,79005],{"class":400,"line":2897},[398,78983,78984],{"class":457},"      transform",[398,78986,51630],{"class":408},[398,78988,78989],{"class":457},"translate3d",[398,78991,409],{"class":408},[398,78993,593],{"class":457},[398,78995,12712],{"class":408},[398,78997,78998],{"class":457},"-4",[398,79000,51685],{"class":404},[398,79002,12712],{"class":408},[398,79004,593],{"class":457},[398,79006,2995],{"class":408},[398,79008,79009,79011,79013,79015],{"class":400,"line":8225},[398,79010,62218],{"class":457},[398,79012,51630],{"class":408},[398,79014,62223],{"class":457},[398,79016,1566],{"class":408},[398,79018,79019],{"class":400,"line":8249},[398,79020,2463],{"class":408},[398,79022,79023],{"class":400,"line":8254},[398,79024,2676],{"emptyLinePlaceholder":328},[398,79026,79027,79029,79031],{"class":400,"line":8260},[398,79028,78818],{"class":2239},[398,79030,55808],{"class":51493},[398,79032,15849],{"class":408},[398,79034,79035,79037,79039,79041,79043],{"class":400,"line":8287},[398,79036,54964],{"class":457},[398,79038,51630],{"class":408},[398,79040,713],{"class":457},[398,79042,730],{"class":404},[398,79044,1566],{"class":408},[398,79046,79047],{"class":400,"line":8292},[398,79048,2463],{"class":408},[398,79050,79051],{"class":400,"line":8298},[398,79052,2676],{"emptyLinePlaceholder":328},[398,79054,79055,79057,79059],{"class":400,"line":8310},[398,79056,78818],{"class":2239},[398,79058,62497],{"class":2239},[398,79060,15849],{"class":408},[398,79062,79063,79065,79067,79069,79071],{"class":400,"line":8322},[398,79064,55115],{"class":457},[398,79066,51630],{"class":408},[398,79068,1052],{"class":457},[398,79070,51685],{"class":404},[398,79072,1566],{"class":408},[398,79074,79075,79077,79079,79081,79083],{"class":400,"line":8334},[398,79076,78885],{"class":457},[398,79078,51630],{"class":408},[398,79080,848],{"class":457},[398,79082,51685],{"class":404},[398,79084,1566],{"class":408},[398,79086,79087,79089,79091,79094],{"class":400,"line":9993},[398,79088,57609],{"class":457},[398,79090,51630],{"class":408},[398,79092,79093],{"class":457},"#666",[398,79095,1566],{"class":408},[398,79097,79098],{"class":400,"line":10018},[398,79099,2463],{"class":408},[398,79101,79102],{"class":400,"line":10041},[398,79103,2676],{"emptyLinePlaceholder":328},[398,79105,79106,79108,79111],{"class":400,"line":10065},[398,79107,78818],{"class":2239},[398,79109,79110],{"class":2239}," .price",[398,79112,15849],{"class":408},[398,79114,79115,79117,79119,79121,79123],{"class":400,"line":10070},[398,79116,55115],{"class":457},[398,79118,51630],{"class":408},[398,79120,1152],{"class":457},[398,79122,51685],{"class":404},[398,79124,1566],{"class":408},[398,79126,79127,79129,79131,79134],{"class":400,"line":10075},[398,79128,57609],{"class":457},[398,79130,51630],{"class":408},[398,79132,79133],{"class":457},"firebrick",[398,79135,1566],{"class":408},[398,79137,79138],{"class":400,"line":10080},[398,79139,2463],{"class":408},[398,79141,79142],{"class":400,"line":10089},[398,79143,2676],{"emptyLinePlaceholder":328},[398,79145,79146,79148,79151],{"class":400,"line":10094},[398,79147,78818],{"class":2239},[398,79149,79150],{"class":2239}," .price::before",[398,79152,15849],{"class":408},[398,79154,79155,79158,79160,79163],{"class":400,"line":10100},[398,79156,79157],{"class":457},"      content",[398,79159,51630],{"class":408},[398,79161,79162],{"class":513},"'￥'",[398,79164,1566],{"class":408},[398,79166,79167,79169,79171,79173,79175],{"class":400,"line":10121},[398,79168,55115],{"class":457},[398,79170,51630],{"class":408},[398,79172,951],{"class":457},[398,79174,51685],{"class":404},[398,79176,1566],{"class":408},[398,79178,79179],{"class":400,"line":10127},[398,79180,2463],{"class":408},[398,79182,79183],{"class":400,"line":10141},[398,79184,2676],{"emptyLinePlaceholder":328},[398,79186,79187,79190],{"class":400,"line":10147},[398,79188,79189],{"class":2239},"    .filter",[398,79191,15849],{"class":408},[398,79193,79194,79196,79198,79200],{"class":400,"line":10174},[398,79195,55202],{"class":457},[398,79197,51630],{"class":408},[398,79199,51670],{"class":457},[398,79201,1566],{"class":408},[398,79203,79204,79206,79208,79210,79212],{"class":400,"line":10183},[398,79205,54964],{"class":457},[398,79207,51630],{"class":408},[398,79209,78767],{"class":457},[398,79211,51685],{"class":404},[398,79213,1566],{"class":408},[398,79215,79216,79218,79220,79222,79224],{"class":400,"line":10189},[398,79217,54899],{"class":457},[398,79219,51630],{"class":408},[398,79221,593],{"class":457},[398,79223,51749],{"class":457},[398,79225,1566],{"class":408},[398,79227,79228,79230,79232,79234,79236,79238],{"class":400,"line":10197},[398,79229,54888],{"class":457},[398,79231,51630],{"class":408},[398,79233,1058],{"class":457},[398,79235,51685],{"class":404},[398,79237,78858],{"class":457},[398,79239,79240],{"class":404},"px\n",[398,79242,79243],{"class":400,"line":10202},[398,79244,2463],{"class":408},[398,79246,79247],{"class":400,"line":16881},[398,79248,2676],{"emptyLinePlaceholder":328},[398,79250,79251,79253,79255],{"class":400,"line":16887},[398,79252,79189],{"class":2239},[398,79254,1674],{"class":51493},[398,79256,15849],{"class":408},[398,79258,79259,79261,79263,79265,79267,79269,79271],{"class":400,"line":16910},[398,79260,54888],{"class":457},[398,79262,51630],{"class":408},[398,79264,848],{"class":457},[398,79266,51685],{"class":404},[398,79268,9227],{"class":457},[398,79270,51685],{"class":404},[398,79272,1566],{"class":408},[398,79274,79275,79277,79279,79281],{"class":400,"line":16916},[398,79276,61914],{"class":457},[398,79278,51630],{"class":408},[398,79280,62011],{"class":457},[398,79282,1566],{"class":408},[398,79284,79285,79287,79289,79291],{"class":400,"line":16939},[398,79286,57609],{"class":457},[398,79288,51630],{"class":408},[398,79290,79093],{"class":457},[398,79292,1566],{"class":408},[398,79294,79295,79297,79299,79301],{"class":400,"line":16953},[398,79296,64163],{"class":457},[398,79298,51630],{"class":408},[398,79300,54930],{"class":457},[398,79302,1566],{"class":408},[398,79304,79305,79307,79309,79311,79313],{"class":400,"line":16973},[398,79306,61943],{"class":457},[398,79308,51630],{"class":408},[398,79310,1102],{"class":457},[398,79312,51685],{"class":404},[398,79314,1566],{"class":408},[398,79316,79317],{"class":400,"line":16979},[398,79318,2463],{"class":408},[398,79320,79321],{"class":400,"line":16990},[398,79322,2676],{"emptyLinePlaceholder":328},[398,79324,79325,79327,79329,79331],{"class":400,"line":17013},[398,79326,79189],{"class":2239},[398,79328,1674],{"class":51493},[398,79330,62093],{"class":2239},[398,79332,15849],{"class":408},[398,79334,79335,79337,79339,79342],{"class":400,"line":17035},[398,79336,55077],{"class":457},[398,79338,51630],{"class":408},[398,79340,79341],{"class":457},"#05943c",[398,79343,1566],{"class":408},[398,79345,79346,79348,79350,79352],{"class":400,"line":17040},[398,79347,57609],{"class":457},[398,79349,51630],{"class":408},[398,79351,61035],{"class":457},[398,79353,1566],{"class":408},[398,79355,79356],{"class":400,"line":17046},[398,79357,2463],{"class":408},[398,79359,79360,79362,79364],{"class":400,"line":17060},[398,79361,52610],{"class":408},[398,79363,5403],{"class":51493},[398,79365,51500],{"class":408},[398,79367,79368,79370,79372],{"class":400,"line":17073},[398,79369,51978],{"class":408},[398,79371,51527],{"class":51493},[398,79373,51500],{"class":408},[398,79375,79376],{"class":400,"line":17078},[398,79377,2676],{"emptyLinePlaceholder":328},[398,79379,79380,79382,79384],{"class":400,"line":17092},[398,79381,1312],{"class":408},[398,79383,51993],{"class":51493},[398,79385,51500],{"class":408},[398,79387,79388,79390,79392,79394,79396,79399],{"class":400,"line":17097},[398,79389,52337],{"class":408},[398,79391,51804],{"class":51493},[398,79393,53679],{"class":2239},[398,79395,454],{"class":408},[398,79397,79398],{"class":513},"\"filter\"",[398,79400,51500],{"class":408},[398,79402,79403,79405,79407,79409,79411,79413,79416,79418,79420,79423,79425],{"class":400,"line":17103},[398,79404,51534],{"class":408},[398,79406,640],{"class":51493},[398,79408,61250],{"class":2239},[398,79410,454],{"class":408},[398,79412,61255],{"class":513},[398,79414,79415],{"class":2239}," data-index",[398,79417,454],{"class":408},[398,79419,3954],{"class":513},[398,79421,79422],{"class":408},">0-100元\u003C\u002F",[398,79424,640],{"class":51493},[398,79426,51500],{"class":408},[398,79428,79429,79431,79433,79435,79437,79439,79441,79443,79445,79448,79450],{"class":400,"line":17108},[398,79430,51534],{"class":408},[398,79432,640],{"class":51493},[398,79434,61250],{"class":2239},[398,79436,454],{"class":408},[398,79438,61255],{"class":513},[398,79440,79415],{"class":2239},[398,79442,454],{"class":408},[398,79444,3977],{"class":513},[398,79446,79447],{"class":408},">100-300元\u003C\u002F",[398,79449,640],{"class":51493},[398,79451,51500],{"class":408},[398,79453,79454,79456,79458,79460,79462,79464,79466,79468,79470,79473,79475],{"class":400,"line":17122},[398,79455,51534],{"class":408},[398,79457,640],{"class":51493},[398,79459,61250],{"class":2239},[398,79461,454],{"class":408},[398,79463,61255],{"class":513},[398,79465,79415],{"class":2239},[398,79467,454],{"class":408},[398,79469,3990],{"class":513},[398,79471,79472],{"class":408},">300元以上\u003C\u002F",[398,79474,640],{"class":51493},[398,79476,51500],{"class":408},[398,79478,79479,79481,79483,79485,79487,79489,79492,79494],{"class":400,"line":17127},[398,79480,51534],{"class":408},[398,79482,640],{"class":51493},[398,79484,61250],{"class":2239},[398,79486,454],{"class":408},[398,79488,61255],{"class":513},[398,79490,79491],{"class":408},">全部区间\u003C\u002F",[398,79493,640],{"class":51493},[398,79495,51500],{"class":408},[398,79497,79498,79500,79502],{"class":400,"line":17132},[398,79499,52610],{"class":408},[398,79501,51804],{"class":51493},[398,79503,51500],{"class":408},[398,79505,79506,79508,79510,79512,79514,79516],{"class":400,"line":17146},[398,79507,52337],{"class":408},[398,79509,51804],{"class":51493},[398,79511,53679],{"class":2239},[398,79513,454],{"class":408},[398,79515,62801],{"class":513},[398,79517,51500],{"class":408},[398,79519,79520],{"class":400,"line":17158},[398,79521,79522],{"class":467},"    \u003C!-- \u003Cdiv class=\"item\">\n",[398,79524,79525],{"class":400,"line":17163},[398,79526,79527],{"class":467},"      \u003Cimg src=\"\" alt=\"\">\n",[398,79529,79530],{"class":400,"line":17176},[398,79531,79532],{"class":467},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[398,79534,79535],{"class":400,"line":17181},[398,79536,79537],{"class":467},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[398,79539,79540],{"class":400,"line":17186},[398,79541,79542],{"class":467},"    \u003C\u002Fdiv> -->\n",[398,79544,79545,79547,79549],{"class":400,"line":17191},[398,79546,52610],{"class":408},[398,79548,51804],{"class":51493},[398,79550,51500],{"class":408},[398,79552,79553,79555,79557],{"class":400,"line":17204},[398,79554,52337],{"class":408},[398,79556,52006],{"class":51493},[398,79558,51500],{"class":408},[398,79560,79561],{"class":400,"line":17209},[398,79562,79563],{"class":467},"    \u002F\u002F 2. 初始化数据\n",[398,79565,79566,79568,79571,79573],{"class":400,"line":32826},[398,79567,11498],{"class":404},[398,79569,79570],{"class":457}," goodsList",[398,79572,13841],{"class":404},[398,79574,55640],{"class":408},[398,79576,79577],{"class":400,"line":32832},[398,79578,79579],{"class":408},"      {\n",[398,79581,79582,79585,79588],{"class":400,"line":32838},[398,79583,79584],{"class":408},"        id: ",[398,79586,79587],{"class":513},"'4001172'",[398,79589,31659],{"class":408},[398,79591,79592,79595,79598],{"class":400,"line":32844},[398,79593,79594],{"class":408},"        name: ",[398,79596,79597],{"class":513},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[398,79599,31659],{"class":408},[398,79601,79602,79605,79608],{"class":400,"line":32850},[398,79603,79604],{"class":408},"        price: ",[398,79606,79607],{"class":513},"'289.00'",[398,79609,31659],{"class":408},[398,79611,79612,79615,79618],{"class":400,"line":32861},[398,79613,79614],{"class":408},"        picture: ",[398,79616,79617],{"class":513},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[398,79619,31659],{"class":408},[398,79621,79622],{"class":400,"line":32867},[398,79623,78085],{"class":408},[398,79625,79626],{"class":400,"line":32887},[398,79627,79579],{"class":408},[398,79629,79630,79632,79635],{"class":400,"line":32893},[398,79631,79584],{"class":408},[398,79633,79634],{"class":513},"'4001594'",[398,79636,31659],{"class":408},[398,79638,79639,79641,79644],{"class":400,"line":32904},[398,79640,79594],{"class":408},[398,79642,79643],{"class":513},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[398,79645,31659],{"class":408},[398,79647,79648,79650,79653],{"class":400,"line":32910},[398,79649,79604],{"class":408},[398,79651,79652],{"class":513},"'288.00'",[398,79654,31659],{"class":408},[398,79656,79657,79659,79662],{"class":400,"line":32916},[398,79658,79614],{"class":408},[398,79660,79661],{"class":513},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[398,79663,31659],{"class":408},[398,79665,79666],{"class":400,"line":32922},[398,79667,78085],{"class":408},[398,79669,79670],{"class":400,"line":32928},[398,79671,79579],{"class":408},[398,79673,79674,79676,79679],{"class":400,"line":32934},[398,79675,79584],{"class":408},[398,79677,79678],{"class":513},"'4001009'",[398,79680,31659],{"class":408},[398,79682,79683,79685,79688],{"class":400,"line":32940},[398,79684,79594],{"class":408},[398,79686,79687],{"class":513},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[398,79689,31659],{"class":408},[398,79691,79692,79694,79697],{"class":400,"line":32946},[398,79693,79604],{"class":408},[398,79695,79696],{"class":513},"'109.00'",[398,79698,31659],{"class":408},[398,79700,79701,79703,79706],{"class":400,"line":32966},[398,79702,79614],{"class":408},[398,79704,79705],{"class":513},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[398,79707,31659],{"class":408},[398,79709,79710],{"class":400,"line":32972},[398,79711,78085],{"class":408},[398,79713,79714],{"class":400,"line":32988},[398,79715,79579],{"class":408},[398,79717,79718,79720,79723],{"class":400,"line":32994},[398,79719,79584],{"class":408},[398,79721,79722],{"class":513},"'4001874'",[398,79724,31659],{"class":408},[398,79726,79727,79729,79732],{"class":400,"line":33008},[398,79728,79594],{"class":408},[398,79730,79731],{"class":513},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[398,79733,31659],{"class":408},[398,79735,79736,79738,79741],{"class":400,"line":33014},[398,79737,79604],{"class":408},[398,79739,79740],{"class":513},"'488.00'",[398,79742,31659],{"class":408},[398,79744,79745,79747,79750],{"class":400,"line":33029},[398,79746,79614],{"class":408},[398,79748,79749],{"class":513},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[398,79751,31659],{"class":408},[398,79753,79754],{"class":400,"line":33035},[398,79755,78085],{"class":408},[398,79757,79758],{"class":400,"line":33044},[398,79759,79579],{"class":408},[398,79761,79762,79764,79767],{"class":400,"line":33050},[398,79763,79584],{"class":408},[398,79765,79766],{"class":513},"'4001649'",[398,79768,31659],{"class":408},[398,79770,79771,79773,79776],{"class":400,"line":33059},[398,79772,79594],{"class":408},[398,79774,79775],{"class":513},"'大师监制龙泉青瓷茶叶罐'",[398,79777,31659],{"class":408},[398,79779,79780,79782,79785],{"class":400,"line":33065},[398,79781,79604],{"class":408},[398,79783,79784],{"class":513},"'139.00'",[398,79786,31659],{"class":408},[398,79788,79789,79791,79794],{"class":400,"line":33071},[398,79790,79614],{"class":408},[398,79792,79793],{"class":513},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[398,79795,31659],{"class":408},[398,79797,79798],{"class":400,"line":33080},[398,79799,78085],{"class":408},[398,79801,79802],{"class":400,"line":33086},[398,79803,79579],{"class":408},[398,79805,79806,79808,79811],{"class":400,"line":33097},[398,79807,79584],{"class":408},[398,79809,79810],{"class":513},"'3997185'",[398,79812,31659],{"class":408},[398,79814,79815,79817,79820],{"class":400,"line":33103},[398,79816,79594],{"class":408},[398,79818,79819],{"class":513},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[398,79821,31659],{"class":408},[398,79823,79824,79826,79829],{"class":400,"line":33122},[398,79825,79604],{"class":408},[398,79827,79828],{"class":513},"'108.00'",[398,79830,31659],{"class":408},[398,79832,79833,79835,79838],{"class":400,"line":33128},[398,79834,79614],{"class":408},[398,79836,79837],{"class":513},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[398,79839,31659],{"class":408},[398,79841,79842],{"class":400,"line":33139},[398,79843,78085],{"class":408},[398,79845,79846],{"class":400,"line":33145},[398,79847,79579],{"class":408},[398,79849,79850,79852,79855],{"class":400,"line":33165},[398,79851,79584],{"class":408},[398,79853,79854],{"class":513},"'3997403'",[398,79856,31659],{"class":408},[398,79858,79859,79861,79864],{"class":400,"line":33181},[398,79860,79594],{"class":408},[398,79862,79863],{"class":513},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[398,79865,31659],{"class":408},[398,79867,79868,79870,79873],{"class":400,"line":33187},[398,79869,79604],{"class":408},[398,79871,79872],{"class":513},"'100.00'",[398,79874,31659],{"class":408},[398,79876,79877,79879,79882],{"class":400,"line":33201},[398,79878,79614],{"class":408},[398,79880,79881],{"class":513},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[398,79883,31659],{"class":408},[398,79885,79886],{"class":400,"line":33207},[398,79887,78085],{"class":408},[398,79889,79890],{"class":400,"line":33213},[398,79891,79579],{"class":408},[398,79893,79894,79896,79899],{"class":400,"line":33224},[398,79895,79584],{"class":408},[398,79897,79898],{"class":513},"'3998274'",[398,79900,31659],{"class":408},[398,79902,79903,79905,79908],{"class":400,"line":33230},[398,79904,79594],{"class":408},[398,79906,79907],{"class":513},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[398,79909,31659],{"class":408},[398,79911,79912,79914,79916],{"class":400,"line":33236},[398,79913,79604],{"class":408},[398,79915,79784],{"class":513},[398,79917,31659],{"class":408},[398,79919,79920,79922,79925],{"class":400,"line":33246},[398,79921,79614],{"class":408},[398,79923,79924],{"class":513},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[398,79926,31659],{"class":408},[398,79928,79929],{"class":400,"line":33252},[398,79930,78085],{"class":408},[398,79932,79933],{"class":400,"line":33263},[398,79934,53302],{"class":408},[398,79936,79937],{"class":400,"line":33269},[398,79938,2676],{"emptyLinePlaceholder":328},[398,79940,79941],{"class":400,"line":33279},[398,79942,79943],{"class":467},"    \u002F\u002F 1.渲染函数\n",[398,79945,79946,79948,79950,79952,79954],{"class":400,"line":33284},[398,79947,70277],{"class":404},[398,79949,70280],{"class":2239},[398,79951,409],{"class":408},[398,79953,4156],{"class":5493},[398,79955,12719],{"class":408},[398,79957,79958],{"class":400,"line":33290},[398,79959,79960],{"class":467},"      \u002F\u002F 声明空字符串\n",[398,79962,79963,79966,79969,79971],{"class":400,"line":33339},[398,79964,79965],{"class":404},"      let",[398,79967,79968],{"class":408}," str ",[398,79970,454],{"class":404},[398,79972,70297],{"class":513},[398,79974,79975],{"class":400,"line":33386},[398,79976,70302],{"class":467},[398,79978,79979,79981,79984,79986,79989,79992],{"class":400,"line":33391},[398,79980,58200],{"class":408},[398,79982,79983],{"class":2239},"forEach",[398,79985,409],{"class":408},[398,79987,79988],{"class":5493},"item",[398,79990,79991],{"class":404}," =>",[398,79993,15849],{"class":408},[398,79995,79996,79998,80001,80004,80006,80009,80011,80014,80017,80019],{"class":400,"line":33397},[398,79997,61463],{"class":404},[398,79999,80000],{"class":408}," { ",[398,80002,80003],{"class":457},"name",[398,80005,12712],{"class":408},[398,80007,80008],{"class":457},"price",[398,80010,12712],{"class":408},[398,80012,80013],{"class":457},"picture",[398,80015,80016],{"class":408}," } ",[398,80018,454],{"class":404},[398,80020,80021],{"class":408}," item\n",[398,80023,80024,80027,80029],{"class":400,"line":33416},[398,80025,80026],{"class":408},"        str ",[398,80028,9754],{"class":404},[398,80030,70361],{"class":513},[398,80032,80033],{"class":400,"line":33422},[398,80034,80035],{"class":513},"          \u003Cdiv class=\"item\">\n",[398,80037,80038,80041,80043],{"class":400,"line":33442},[398,80039,80040],{"class":513},"            \u003Cimg src=\"${",[398,80042,80013],{"class":408},[398,80044,80045],{"class":513},"}\" alt=\"\">\n",[398,80047,80048,80051,80053],{"class":400,"line":33448},[398,80049,80050],{"class":513},"            \u003Cp class=\"name\">${",[398,80052,80003],{"class":408},[398,80054,80055],{"class":513},"}\u003C\u002Fp>\n",[398,80057,80058,80061,80063],{"class":400,"line":33454},[398,80059,80060],{"class":513},"            \u003Cp class=\"price\">${",[398,80062,80008],{"class":408},[398,80064,80055],{"class":513},[398,80066,80067],{"class":400,"line":33464},[398,80068,80069],{"class":513},"          \u003C\u002Fdiv>\n",[398,80071,80072],{"class":400,"line":33469},[398,80073,80074],{"class":513},"        `\n",[398,80076,80077],{"class":400,"line":33475},[398,80078,65008],{"class":408},[398,80080,80081],{"class":400,"line":33491},[398,80082,80083],{"class":467},"      \u002F\u002F 追加给List\n",[398,80085,80086,80088,80090,80092,80095,80097,80099],{"class":400,"line":33536},[398,80087,55964],{"class":408},[398,80089,54592],{"class":2239},[398,80091,409],{"class":408},[398,80093,80094],{"class":513},"'.list'",[398,80096,74442],{"class":408},[398,80098,454],{"class":404},[398,80100,74178],{"class":408},[398,80102,80103],{"class":400,"line":33542},[398,80104,2463],{"class":408},[398,80106,80107],{"class":400,"line":33548},[398,80108,80109],{"class":467},"    \u002F\u002F 页面一打开就需要渲染\n",[398,80111,80112,80115],{"class":400,"line":33554},[398,80113,80114],{"class":2239},"    render",[398,80116,80117],{"class":408},"(goodsList)\n",[398,80119,80120],{"class":400,"line":33565},[398,80121,80122],{"class":467},"    \u002F\u002F 2.过滤筛选\n",[398,80124,80125,80127,80129,80131,80134,80136,80138,80140,80142,80144,80146,80148],{"class":400,"line":33571},[398,80126,52600],{"class":408},[398,80128,54592],{"class":2239},[398,80130,409],{"class":408},[398,80132,80133],{"class":513},"'.filter'",[398,80135,31019],{"class":408},[398,80137,58006],{"class":2239},[398,80139,409],{"class":408},[398,80141,58011],{"class":513},[398,80143,12712],{"class":408},[398,80145,483],{"class":5493},[398,80147,79991],{"class":404},[398,80149,15849],{"class":408},[398,80151,80152],{"class":400,"line":33577},[398,80153,80154],{"class":467},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[398,80156,80157,80159,80161,80164,80166,80168,80170,80172],{"class":400,"line":33583},[398,80158,58421],{"class":404},[398,80160,80000],{"class":408},[398,80162,80163],{"class":457},"tagName",[398,80165,12712],{"class":408},[398,80167,31730],{"class":457},[398,80169,80016],{"class":408},[398,80171,454],{"class":404},[398,80173,80174],{"class":408}," e.target\n",[398,80176,80177],{"class":400,"line":33601},[398,80178,80179],{"class":467},"      \u002F\u002F 判断\n",[398,80181,80182,80184,80186,80188,80190],{"class":400,"line":33615},[398,80183,54673],{"class":404},[398,80185,67227],{"class":408},[398,80187,54679],{"class":404},[398,80189,68449],{"class":513},[398,80191,12719],{"class":408},[398,80193,80194],{"class":400,"line":33624},[398,80195,80196],{"class":467},"        \u002F\u002F console.log(11)\n",[398,80198,80199],{"class":400,"line":33633},[398,80200,80201],{"class":467},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[398,80203,80204],{"class":400,"line":33642},[398,80205,80206],{"class":467},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[398,80208,80209,80211,80213,80215],{"class":400,"line":33651},[398,80210,52023],{"class":404},[398,80212,52026],{"class":408},[398,80214,454],{"class":404},[398,80216,80217],{"class":408}," goodsList\n",[398,80219,80220,80222,80225,80227,80230],{"class":400,"line":33657},[398,80221,2773],{"class":404},[398,80223,80224],{"class":408}," (dataset.index ",[398,80226,54679],{"class":404},[398,80228,80229],{"class":513}," '1'",[398,80231,12719],{"class":408},[398,80233,80234,80237,80239,80242,80245,80247,80249,80251,80254,80256,80258,80261,80263,80265,80267],{"class":400,"line":33663},[398,80235,80236],{"class":408},"          arr ",[398,80238,454],{"class":404},[398,80240,80241],{"class":408}," goodsList.",[398,80243,80244],{"class":2239},"filter",[398,80246,409],{"class":408},[398,80248,79988],{"class":5493},[398,80250,79991],{"class":404},[398,80252,80253],{"class":408}," item.price ",[398,80255,1986],{"class":404},[398,80257,4369],{"class":457},[398,80259,80260],{"class":404}," &&",[398,80262,80253],{"class":408},[398,80264,1864],{"class":404},[398,80266,6031],{"class":457},[398,80268,415],{"class":408},[398,80270,80271,80274,80276,80278,80280,80282,80285],{"class":400,"line":33671},[398,80272,80273],{"class":408},"        } ",[398,80275,1977],{"class":404},[398,80277,1980],{"class":404},[398,80279,80224],{"class":408},[398,80281,54679],{"class":404},[398,80283,80284],{"class":513}," '2'",[398,80286,12719],{"class":408},[398,80288,80289,80291,80293,80295,80297,80299,80301,80303,80305,80307,80309,80311,80313,80315,80318],{"class":400,"line":33676},[398,80290,80236],{"class":408},[398,80292,454],{"class":404},[398,80294,80241],{"class":408},[398,80296,80244],{"class":2239},[398,80298,409],{"class":408},[398,80300,79988],{"class":5493},[398,80302,79991],{"class":404},[398,80304,80253],{"class":408},[398,80306,1986],{"class":404},[398,80308,6031],{"class":457},[398,80310,80260],{"class":404},[398,80312,80253],{"class":408},[398,80314,1864],{"class":404},[398,80316,80317],{"class":457}," 300",[398,80319,415],{"class":408},[398,80321,80322,80324,80326,80328,80330,80332,80335],{"class":400,"line":33682},[398,80323,80273],{"class":408},[398,80325,1977],{"class":404},[398,80327,1980],{"class":404},[398,80329,80224],{"class":408},[398,80331,54679],{"class":404},[398,80333,80334],{"class":513}," '3'",[398,80336,12719],{"class":408},[398,80338,80339,80341,80343,80345,80347,80349,80351,80353,80355,80357,80359],{"class":400,"line":33693},[398,80340,80236],{"class":408},[398,80342,454],{"class":404},[398,80344,80241],{"class":408},[398,80346,80244],{"class":2239},[398,80348,409],{"class":408},[398,80350,79988],{"class":5493},[398,80352,79991],{"class":404},[398,80354,80253],{"class":408},[398,80356,1986],{"class":404},[398,80358,80317],{"class":457},[398,80360,415],{"class":408},[398,80362,80363],{"class":400,"line":33699},[398,80364,2805],{"class":408},[398,80366,80367],{"class":400,"line":33719},[398,80368,80369],{"class":467},"        \u002F\u002F 渲染函数\n",[398,80371,80372,80374],{"class":400,"line":33725},[398,80373,70601],{"class":2239},[398,80375,52605],{"class":408},[398,80377,80378],{"class":400,"line":33731},[398,80379,52591],{"class":408},[398,80381,80382],{"class":400,"line":33737},[398,80383,2676],{"emptyLinePlaceholder":328},[398,80385,80386],{"class":400,"line":33754},[398,80387,33654],{"class":408},[398,80389,80390,80392,80394],{"class":400,"line":33760},[398,80391,52610],{"class":408},[398,80393,52006],{"class":51493},[398,80395,51500],{"class":408},[398,80397,80398,80400,80402],{"class":400,"line":33766},[398,80399,51978],{"class":408},[398,80401,51993],{"class":51493},[398,80403,51500],{"class":408},[398,80405,80406],{"class":400,"line":33772},[398,80407,2676],{"emptyLinePlaceholder":328},[398,80409,80410,80412,80414],{"class":400,"line":33778},[398,80411,51978],{"class":408},[398,80413,50828],{"class":51493},[398,80415,51500],{"class":408},[343,80417,80419],{"id":80418},"_410-深入了解对象","4.10 深入了解对象",[14,80421,80423],{"id":80422},"_4101-创建对象","4.10.1 创建对象",[19,80425,80426],{},[1738,80427],{"alt":316,"src":80428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,80430,80431],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[14,80433,80435],{"id":80434},"_4102-构造函数","4.10.2 构造函数",[19,80437,80438,80441],{},[23,80439,80440],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,80443,80444,80447],{},[23,80445,80446],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[389,80449,80451],{"className":50826,"code":80450,"language":50828,"meta":316,"style":316},"\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",[395,80452,80453,80461,80466,80487,80500,80512,80524,80528,80533,80560,80565,80592],{"__ignoreMap":316},[398,80454,80455,80457,80459],{"class":400,"line":401},[398,80456,1312],{"class":408},[398,80458,52006],{"class":51493},[398,80460,51500],{"class":408},[398,80462,80463],{"class":400,"line":317},[398,80464,80465],{"class":467},"\u002F\u002F例：\n",[398,80467,80468,80470,80473,80475,80477,80479,80481,80483,80485],{"class":400,"line":320},[398,80469,54642],{"class":404},[398,80471,80472],{"class":2239}," Pig",[398,80474,409],{"class":408},[398,80476,80003],{"class":5493},[398,80478,780],{"class":408},[398,80480,70414],{"class":5493},[398,80482,780],{"class":408},[398,80484,70431],{"class":5493},[398,80486,12719],{"class":408},[398,80488,80489,80492,80495,80497],{"class":400,"line":1470},[398,80490,80491],{"class":457},"    this",[398,80493,80494],{"class":408},".name",[398,80496,454],{"class":404},[398,80498,80499],{"class":408},"name\n",[398,80501,80502,80504,80507,80509],{"class":400,"line":1476},[398,80503,80491],{"class":457},[398,80505,80506],{"class":408},".age",[398,80508,454],{"class":404},[398,80510,80511],{"class":408},"age\n",[398,80513,80514,80516,80519,80521],{"class":400,"line":1490},[398,80515,80491],{"class":457},[398,80517,80518],{"class":408},".gender",[398,80520,454],{"class":404},[398,80522,80523],{"class":408},"gender    \n",[398,80525,80526],{"class":400,"line":1496},[398,80527,1841],{"class":408},[398,80529,80530],{"class":400,"line":1587},[398,80531,80532],{"class":467},"\u002F\u002F创建佩奇对象\n",[398,80534,80535,80537,80540,80542,80544,80546,80549,80551,80553,80555,80558],{"class":400,"line":1593},[398,80536,7069],{"class":404},[398,80538,80539],{"class":457}," Peppa",[398,80541,11994],{"class":404},[398,80543,80472],{"class":2239},[398,80545,409],{"class":408},[398,80547,80548],{"class":513},"'佩奇'",[398,80550,780],{"class":408},[398,80552,746],{"class":457},[398,80554,780],{"class":408},[398,80556,80557],{"class":513},"'女'",[398,80559,415],{"class":408},[398,80561,80562],{"class":400,"line":1605},[398,80563,80564],{"class":467},"\u002F\u002F创建乔治对象\n",[398,80566,80567,80569,80572,80574,80576,80578,80581,80583,80585,80587,80590],{"class":400,"line":1888},[398,80568,7069],{"class":404},[398,80570,80571],{"class":457}," George",[398,80573,11994],{"class":404},[398,80575,80472],{"class":2239},[398,80577,409],{"class":408},[398,80579,80580],{"class":513},"'乔治'",[398,80582,780],{"class":408},[398,80584,480],{"class":457},[398,80586,780],{"class":408},[398,80588,80589],{"class":513},"'男'",[398,80591,415],{"class":408},[398,80593,80594,80596,80598],{"class":400,"line":1893},[398,80595,51978],{"class":408},[398,80597,52006],{"class":51493},[398,80599,51500],{"class":408},[19,80601,80602],{},[1738,80603],{"alt":316,"src":80604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,80606,80607],{},[1738,80608],{"alt":316,"src":80609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,80611,80612],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,80614,80615],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,80617,80618],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,80620,80621],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,80623,80624],{},"这里用等号是因为：对象.属性=值",[19,80626,80627],{},"①利用对象字面量创建对象",[19,80629,80630],{},"const o={",[19,80632,80633],{},"name:'pink'",[19,80635,80636],{},"} ②利用new Object创建对象",[19,80638,80639],{},"const o=new Object({name:'pink'})",[19,80641,80642],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,80644,80645],{},"构造函数创建对象的执行过程：",[19,80647,80648],{},[1738,80649],{"alt":316,"src":80650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[14,80652,80654],{"id":80653},"_4103-实例成员","4.10.3 实例成员",[19,80656,80657],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[38,80659,80660,80663,80666],{},[41,80661,80662],{},"实例对象的属性和方法即为实例成员",[41,80664,80665],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[41,80667,80668],{},"构造函数创建的实例对象彼此独立互不影响",[14,80670,80672],{"id":80671},"_4104-静态成员","4.10.4 静态成员",[19,80674,80675],{},[1738,80676],{"alt":316,"src":80677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,80679,80680],{},"静态成员有Date.now() Math.PI Math.random()",[19,80682,80683],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,80685,80686],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,80688,80689],{},"function Pig(name) n {",[19,80691,80692],{},"this.name=name",[19,80694,1348],{},[19,80696,80697],{},"Pig.eyes=2",[19,80699,80700],{},"Pig.sayHai=function () { console.log(this) }",[19,80702,80703],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,80705,80706],{},"console.log(Pig.eyes) \u002F\u002F2",[19,80708,11609],{},[38,80710,80711,80714,80717,80720,80723],{},[41,80712,80713],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[41,80715,80716],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[41,80718,80719],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[41,80721,80722],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[41,80724,80725],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,80727,80728],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[14,80730,80732],{"id":80731},"_4105-内置构造函数","4.10.5 内置构造函数",[19,80734,80735],{},"内置构造函数包含：",[19,80737,80738],{},[1738,80739],{"alt":316,"src":80740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,80742,80743],{},[1738,80744],{"alt":316,"src":80745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,80747,80748],{},"这些基本数据类型，js对他们进行了包装",[52006,80750,80751],{},"\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",[22275,80753,80755],{"id":80754},"_41051-object","4.10.5.1 Object",[19,80757,80758],{},"Object 是内置的构造函数，用于创建普通对象",[19,80760,80761],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[389,80763,80765],{"className":50826,"code":80764,"language":50828,"meta":316,"style":316},"const user=new Object({name:'小明',age:15})\n",[395,80766,80767],{"__ignoreMap":316},[398,80768,80769],{"class":400,"line":401},[398,80770,80764],{"class":408},[19,80772,80773],{},"三个常用的静态方法：",[23187,80775,80777],{"id":80776},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,80779,80780],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,80782,80783],{},[1738,80784],{"alt":316,"src":80785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,80787,80788],{},[1738,80789],{"alt":316,"src":80790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[389,80792,80794],{"className":53260,"code":80793,"language":53262,"meta":316,"style":316},"\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",[395,80795,80796,80804,80812,80817,80822,80827,80832,80837,80842,80850],{"__ignoreMap":316},[398,80797,80798,80800,80802],{"class":400,"line":401},[398,80799,1312],{"class":408},[398,80801,51993],{"class":51493},[398,80803,51500],{"class":408},[398,80805,80806,80808,80810],{"class":400,"line":317},[398,80807,52337],{"class":408},[398,80809,52006],{"class":51493},[398,80811,51500],{"class":408},[398,80813,80814],{"class":400,"line":320},[398,80815,80816],{"class":408},"    const o = { name: 'pink', age: 6 }\n",[398,80818,80819],{"class":400,"line":1470},[398,80820,80821],{"class":408},"    \u002F\u002F 获得所有属性名\n",[398,80823,80824],{"class":400,"line":1476},[398,80825,80826],{"class":408},"    const arr = Object.keys(o)\n",[398,80828,80829],{"class":400,"line":1490},[398,80830,80831],{"class":408},"    console.log(arr)\n",[398,80833,80834],{"class":400,"line":1496},[398,80835,80836],{"class":408},"    \u002F\u002F 获得所有属性值\n",[398,80838,80839],{"class":400,"line":1587},[398,80840,80841],{"class":408},"    console.log(Object.values(o))\n",[398,80843,80844,80846,80848],{"class":400,"line":1593},[398,80845,52610],{"class":408},[398,80847,52006],{"class":51493},[398,80849,51500],{"class":408},[398,80851,80852,80854,80856],{"class":400,"line":1605},[398,80853,51978],{"class":408},[398,80855,51993],{"class":51493},[398,80857,51500],{"class":408},[23187,80859,80861],{"id":80860},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,80863,80864],{},"Object.assign(oo,o)",[19,80866,80867],{},"后的东西添加给前 是追加",[19,80869,80870],{},[1738,80871],{"alt":316,"src":80872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,80874,80875],{},[1738,80876],{"alt":316,"src":80877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[389,80879,80881],{"className":53260,"code":80880,"language":53262,"meta":316,"style":316},"\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",[395,80882,80883,80891,80899,80903,80907,80911,80915,80919,80923,80928,80933,80938,80943,80948,80956],{"__ignoreMap":316},[398,80884,80885,80887,80889],{"class":400,"line":401},[398,80886,1312],{"class":408},[398,80888,51993],{"class":51493},[398,80890,51500],{"class":408},[398,80892,80893,80895,80897],{"class":400,"line":317},[398,80894,52337],{"class":408},[398,80896,52006],{"class":51493},[398,80898,51500],{"class":408},[398,80900,80901],{"class":400,"line":320},[398,80902,80816],{"class":408},[398,80904,80905],{"class":400,"line":1470},[398,80906,80821],{"class":408},[398,80908,80909],{"class":400,"line":1476},[398,80910,80826],{"class":408},[398,80912,80913],{"class":400,"line":1490},[398,80914,80831],{"class":408},[398,80916,80917],{"class":400,"line":1496},[398,80918,80836],{"class":408},[398,80920,80921],{"class":400,"line":1587},[398,80922,80841],{"class":408},[398,80924,80925],{"class":400,"line":1593},[398,80926,80927],{"class":408},"    const oo = {}\n",[398,80929,80930],{"class":400,"line":1605},[398,80931,80932],{"class":408},"    Object.assign(oo, o)\n",[398,80934,80935],{"class":400,"line":1888},[398,80936,80937],{"class":408},"    console.log(oo)\n",[398,80939,80940],{"class":400,"line":1893},[398,80941,80942],{"class":408},"    Object.assign(o, { gender: '女' })\n",[398,80944,80945],{"class":400,"line":1899},[398,80946,80947],{"class":408},"    console.log(o)\n",[398,80949,80950,80952,80954],{"class":400,"line":1904},[398,80951,52610],{"class":408},[398,80953,52006],{"class":51493},[398,80955,51500],{"class":408},[398,80957,80958,80960,80962],{"class":400,"line":1918},[398,80959,51978],{"class":408},[398,80961,51993],{"class":51493},[398,80963,51500],{"class":408},[19,80965,80966],{},[1738,80967],{"alt":316,"src":80968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22275,80970,80972],{"id":80971},"_41052-array","4.10.5.2 Array",[19,80974,80975],{},"Array 是内置的构造函数，用于创建数组",[19,80977,80978],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[389,80980,80982],{"className":50826,"code":80981,"language":50828,"meta":316,"style":316},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[395,80983,80984,80989],{"__ignoreMap":316},[398,80985,80986],{"class":400,"line":401},[398,80987,80988],{"class":408},"const arr=new Array(3,5)\n",[398,80990,80991],{"class":400,"line":317},[398,80992,80993],{"class":408},"console.log(arr)  \u002F\u002F[3,5]\n",[19,80995,80996],{},"Array的实例方法，这个方法是实例成员",[19,80998,80999],{},[1738,81000],{"alt":316,"src":81001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23187,81003,81005],{"id":81004},"_410521-reduce","4.10.5.2.1 reduce",[19,81007,81008],{},[1738,81009],{"alt":316,"src":81010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[389,81012,81014],{"className":53260,"code":81013,"language":53262,"meta":316,"style":316},"\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",[395,81015,81016,81024,81032,81037,81042,81047,81052,81056,81061,81066,81071,81075,81080,81085,81089,81094,81099,81104,81112],{"__ignoreMap":316},[398,81017,81018,81020,81022],{"class":400,"line":401},[398,81019,1312],{"class":408},[398,81021,51993],{"class":51493},[398,81023,51500],{"class":408},[398,81025,81026,81028,81030],{"class":400,"line":317},[398,81027,52337],{"class":408},[398,81029,52006],{"class":51493},[398,81031,51500],{"class":408},[398,81033,81034],{"class":400,"line":320},[398,81035,81036],{"class":408},"    const arr = [1, 5, 8]\n",[398,81038,81039],{"class":400,"line":1470},[398,81040,81041],{"class":408},"    \u002F\u002F 1.没有初始值\n",[398,81043,81044],{"class":400,"line":1476},[398,81045,81046],{"class":408},"    const total = arr.reduce(function (prev, current) {\n",[398,81048,81049],{"class":400,"line":1490},[398,81050,81051],{"class":408},"      return prev + current\n",[398,81053,81054],{"class":400,"line":1496},[398,81055,33654],{"class":408},[398,81057,81058],{"class":400,"line":1587},[398,81059,81060],{"class":408},"    console.log(total)   \u002F\u002F14\n",[398,81062,81063],{"class":400,"line":1593},[398,81064,81065],{"class":408},"    \u002F\u002F 2.有初始值\n",[398,81067,81068],{"class":400,"line":1605},[398,81069,81070],{"class":408},"    const total1 = arr.reduce(function (prev, current) {\n",[398,81072,81073],{"class":400,"line":1888},[398,81074,81051],{"class":408},[398,81076,81077],{"class":400,"line":1893},[398,81078,81079],{"class":408},"    }, 10)\n",[398,81081,81082],{"class":400,"line":1899},[398,81083,81084],{"class":408},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[398,81086,81087],{"class":400,"line":1904},[398,81088,2676],{"emptyLinePlaceholder":328},[398,81090,81091],{"class":400,"line":1918},[398,81092,81093],{"class":408},"    \u002F\u002F 3.箭头函数写法\n",[398,81095,81096],{"class":400,"line":1923},[398,81097,81098],{"class":408},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[398,81100,81101],{"class":400,"line":1929},[398,81102,81103],{"class":408},"    console.log(total2)   \u002F\u002F24\n",[398,81105,81106,81108,81110],{"class":400,"line":1950},[398,81107,52610],{"class":408},[398,81109,52006],{"class":51493},[398,81111,51500],{"class":408},[398,81113,81114,81116,81118],{"class":400,"line":1955},[398,81115,51978],{"class":408},[398,81117,51993],{"class":51493},[398,81119,51500],{"class":408},[19,81121,81122],{},"执行过程：",[38,81124,81125,81128,81131],{},[41,81126,81127],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[41,81129,81130],{},"每一次循环，把返回值给作为下一次循环的上一次值",[41,81132,81133],{},"如果有起始值，则起始值作为上一次值",[389,81135,81137],{"className":53260,"code":81136,"language":53262,"meta":316,"style":316},"\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",[395,81138,81139,81147,81155,81159,81163,81167,81171,81175,81179,81184,81189,81194,81199,81204,81208,81212,81216,81220,81224,81228,81233,81237,81242,81246,81251,81256,81260,81264,81268,81276],{"__ignoreMap":316},[398,81140,81141,81143,81145],{"class":400,"line":401},[398,81142,1312],{"class":408},[398,81144,51993],{"class":51493},[398,81146,51500],{"class":408},[398,81148,81149,81151,81153],{"class":400,"line":317},[398,81150,52337],{"class":408},[398,81152,52006],{"class":51493},[398,81154,51500],{"class":408},[398,81156,81157],{"class":400,"line":320},[398,81158,81036],{"class":408},[398,81160,81161],{"class":400,"line":1470},[398,81162,81041],{"class":408},[398,81164,81165],{"class":400,"line":1476},[398,81166,81046],{"class":408},[398,81168,81169],{"class":400,"line":1490},[398,81170,81051],{"class":408},[398,81172,81173],{"class":400,"line":1496},[398,81174,33654],{"class":408},[398,81176,81177],{"class":400,"line":1587},[398,81178,81060],{"class":408},[398,81180,81181],{"class":400,"line":1593},[398,81182,81183],{"class":408},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[398,81185,81186],{"class":400,"line":1605},[398,81187,81188],{"class":408},"    \u002F\u002F     1              5                    6\n",[398,81190,81191],{"class":400,"line":1888},[398,81192,81193],{"class":408},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[398,81195,81196],{"class":400,"line":1893},[398,81197,81198],{"class":408},"    \u002F\u002F     6              8                    14\n",[398,81200,81201],{"class":400,"line":1899},[398,81202,81203],{"class":408},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[398,81205,81206],{"class":400,"line":1904},[398,81207,81065],{"class":408},[398,81209,81210],{"class":400,"line":1918},[398,81211,81070],{"class":408},[398,81213,81214],{"class":400,"line":1923},[398,81215,81051],{"class":408},[398,81217,81218],{"class":400,"line":1929},[398,81219,81079],{"class":408},[398,81221,81222],{"class":400,"line":1950},[398,81223,81084],{"class":408},[398,81225,81226],{"class":400,"line":1955},[398,81227,81183],{"class":408},[398,81229,81230],{"class":400,"line":1969},[398,81231,81232],{"class":408},"    \u002F\u002F     10             1                     11\n",[398,81234,81235],{"class":400,"line":1974},[398,81236,81193],{"class":408},[398,81238,81239],{"class":400,"line":2003},[398,81240,81241],{"class":408},"    \u002F\u002F     11             5                    16\n",[398,81243,81244],{"class":400,"line":2008},[398,81245,81193],{"class":408},[398,81247,81248],{"class":400,"line":2025},[398,81249,81250],{"class":408},"    \u002F\u002F     16             8                    24\n",[398,81252,81253],{"class":400,"line":2030},[398,81254,81255],{"class":408},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[398,81257,81258],{"class":400,"line":2035},[398,81259,81093],{"class":408},[398,81261,81262],{"class":400,"line":2040},[398,81263,81098],{"class":408},[398,81265,81266],{"class":400,"line":2054},[398,81267,81103],{"class":408},[398,81269,81270,81272,81274],{"class":400,"line":2059},[398,81271,52610],{"class":408},[398,81273,52006],{"class":51493},[398,81275,51500],{"class":408},[398,81277,81278,81280,81282],{"class":400,"line":2853},[398,81279,51978],{"class":408},[398,81281,51993],{"class":51493},[398,81283,51500],{"class":408},[23187,81285,81287],{"id":81286},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,81289,81290],{},[1738,81291],{"alt":316,"src":81292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[389,81294,81296],{"className":53260,"code":81295,"language":53262,"meta":316,"style":316},"\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",[395,81297,81298,81306,81314,81319,81324,81329,81334,81338,81343,81348,81353,81358,81363,81368,81372,81377,81381,81386,81394],{"__ignoreMap":316},[398,81299,81300,81302,81304],{"class":400,"line":401},[398,81301,1312],{"class":408},[398,81303,51993],{"class":51493},[398,81305,51500],{"class":408},[398,81307,81308,81310,81312],{"class":400,"line":317},[398,81309,52337],{"class":408},[398,81311,52006],{"class":51493},[398,81313,51500],{"class":408},[398,81315,81316],{"class":400,"line":320},[398,81317,81318],{"class":408},"    const arr = [\n",[398,81320,81321],{"class":400,"line":1470},[398,81322,81323],{"class":408},"      { name: '张三', salary: 10000 },\n",[398,81325,81326],{"class":400,"line":1476},[398,81327,81328],{"class":408},"      { name: '李四', salary: 10000 },\n",[398,81330,81331],{"class":400,"line":1490},[398,81332,81333],{"class":408},"      { name: '王五', salary: 10000 }\n",[398,81335,81336],{"class":400,"line":1496},[398,81337,53302],{"class":408},[398,81339,81340],{"class":400,"line":1587},[398,81341,81342],{"class":408},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[398,81344,81345],{"class":400,"line":1593},[398,81346,81347],{"class":408},"    \u002F\u002F prev是累计值\n",[398,81349,81350],{"class":400,"line":1605},[398,81351,81352],{"class":408},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[398,81354,81355],{"class":400,"line":1888},[398,81356,81357],{"class":408},"    console.log(total)\n",[398,81359,81360],{"class":400,"line":1893},[398,81361,81362],{"class":408},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[398,81364,81365],{"class":400,"line":1899},[398,81366,81367],{"class":408},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[398,81369,81370],{"class":400,"line":1904},[398,81371,81362],{"class":408},[398,81373,81374],{"class":400,"line":1918},[398,81375,81376],{"class":408},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[398,81378,81379],{"class":400,"line":1923},[398,81380,81362],{"class":408},[398,81382,81383],{"class":400,"line":1929},[398,81384,81385],{"class":408},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[398,81387,81388,81390,81392],{"class":400,"line":1950},[398,81389,52610],{"class":408},[398,81391,52006],{"class":51493},[398,81393,51500],{"class":408},[398,81395,81396,81398,81400],{"class":400,"line":1955},[398,81397,51978],{"class":408},[398,81399,51993],{"class":51493},[398,81401,51500],{"class":408},[23187,81403,81405],{"id":81404},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,81407,81408],{},[1738,81409],{"alt":316,"src":81410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,81412,81413],{},[1738,81414],{"alt":316,"src":81415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[38,81417,81418],{},[41,81419,81420],{},"find()",[19,81422,81423],{},"循环查找，找到第一个就ok",[19,81425,81426],{},[640,81427,81430],{"href":81428,"rel":81429},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[24142],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[389,81432,81434],{"className":50826,"code":81433,"language":50828,"meta":316,"style":316},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[395,81435,81436,81441,81446],{"__ignoreMap":316},[398,81437,81438],{"class":400,"line":401},[398,81439,81440],{"class":408},"const array1 = [5, 12, 8, 130, 44]\n",[398,81442,81443],{"class":400,"line":317},[398,81444,81445],{"class":408},"const found = array1.find((element) => element > 10)\n",[398,81447,81448],{"class":400,"line":320},[398,81449,81450],{"class":408},"console.log(found)  \u002F\u002F12\n",[19,81452,81453,81455,81456,81461,81462,81465,81466,81468,81469,81474,81475,81477,81478,81480,81481,81483,81484],{},[395,81454,81420],{}," 方法是一个",[640,81457,81460],{"href":81458,"rel":81459},"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",[24142],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[395,81463,81464],{},"callbackFn"," 函数，直到 ",[395,81467,81464],{}," 返回一个",[640,81470,81473],{"href":81471,"rel":81472},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[24142],"真值","。然后 ",[395,81476,81420],{}," 返回该元素并停止迭代数组。如果 ",[395,81479,81464],{}," 从未返回真值，则 ",[395,81482,81420],{}," 返回 ",[395,81485,81486],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[389,81488,81490],{"className":53260,"code":81489,"language":53262,"meta":316,"style":316},"\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",[395,81491,81492,81500,81508,81513,81518,81523,81527,81532,81537,81541,81546,81551,81555,81559,81564,81569,81573,81577,81582,81587,81592,81597,81602,81606,81611,81616,81621,81626,81630,81635,81643],{"__ignoreMap":316},[398,81493,81494,81496,81498],{"class":400,"line":401},[398,81495,1312],{"class":408},[398,81497,51993],{"class":51493},[398,81499,51500],{"class":408},[398,81501,81502,81504,81506],{"class":400,"line":317},[398,81503,52337],{"class":408},[398,81505,52006],{"class":51493},[398,81507,51500],{"class":408},[398,81509,81510],{"class":400,"line":320},[398,81511,81512],{"class":408},"    const arr = ['red', 'blue', 'green']\n",[398,81514,81515],{"class":400,"line":1470},[398,81516,81517],{"class":408},"    const found = arr.find(item => item === 'pink')\n",[398,81519,81520],{"class":400,"line":1476},[398,81521,81522],{"class":408},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[398,81524,81525],{"class":400,"line":1490},[398,81526,2676],{"emptyLinePlaceholder":328},[398,81528,81529],{"class":400,"line":1496},[398,81530,81531],{"class":408},"    \u002F\u002F 使用场景，用于查找数据\n",[398,81533,81534],{"class":400,"line":1587},[398,81535,81536],{"class":408},"    const arr1 = [\n",[398,81538,81539],{"class":400,"line":1593},[398,81540,79579],{"class":408},[398,81542,81543],{"class":400,"line":1605},[398,81544,81545],{"class":408},"        name: '小米',\n",[398,81547,81548],{"class":400,"line":1888},[398,81549,81550],{"class":408},"        price: 1999\n",[398,81552,81553],{"class":400,"line":1893},[398,81554,78085],{"class":408},[398,81556,81557],{"class":400,"line":1899},[398,81558,79579],{"class":408},[398,81560,81561],{"class":400,"line":1904},[398,81562,81563],{"class":408},"        name: '华为',\n",[398,81565,81566],{"class":400,"line":1918},[398,81567,81568],{"class":408},"        price: 3999\n",[398,81570,81571],{"class":400,"line":1923},[398,81572,52591],{"class":408},[398,81574,81575],{"class":400,"line":1929},[398,81576,53302],{"class":408},[398,81578,81579],{"class":400,"line":1950},[398,81580,81581],{"class":408},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[398,81583,81584],{"class":400,"line":1955},[398,81585,81586],{"class":408},"    \u002F\u002F const found1 = arr1.find(item => {\n",[398,81588,81589],{"class":400,"line":1969},[398,81590,81591],{"class":408},"    \u002F\u002F   if (item.name === '小米') {\n",[398,81593,81594],{"class":400,"line":1974},[398,81595,81596],{"class":408},"    \u002F\u002F     return item\n",[398,81598,81599],{"class":400,"line":2003},[398,81600,81601],{"class":408},"    \u002F\u002F   }\n",[398,81603,81604],{"class":400,"line":2008},[398,81605,63483],{"class":408},[398,81607,81608],{"class":400,"line":2025},[398,81609,81610],{"class":408},"    \u002F\u002F 另一种写法\n",[398,81612,81613],{"class":400,"line":2030},[398,81614,81615],{"class":408},"    const found1 = arr1.find(item => {\n",[398,81617,81618],{"class":400,"line":2035},[398,81619,81620],{"class":408},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[398,81622,81623],{"class":400,"line":2040},[398,81624,81625],{"class":408},"      return item.name = '小米'\n",[398,81627,81628],{"class":400,"line":2054},[398,81629,33654],{"class":408},[398,81631,81632],{"class":400,"line":2059},[398,81633,81634],{"class":408},"    console.log(found1)\n",[398,81636,81637,81639,81641],{"class":400,"line":2853},[398,81638,52610],{"class":408},[398,81640,52006],{"class":51493},[398,81642,51500],{"class":408},[398,81644,81645,81647,81649],{"class":400,"line":2867},[398,81646,51978],{"class":408},[398,81648,51993],{"class":51493},[398,81650,51500],{"class":408},[19,81652,81653],{},[1738,81654],{"alt":316,"src":81655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,81657,81658],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[38,81660,81661],{"start":317},[41,81662,81663],{},"every()返回的是布尔值",[19,81665,81666],{},[640,81667,81670],{"href":81668,"rel":81669},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[24142],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,81672,81673],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,81675,81676],{},"some是只有有一个就没问题",[19,81678,81679],{},"every是必须全是才行",[389,81681,81685],{"className":81682,"code":81683,"language":81684,"meta":316,"style":316},"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",[395,81686,81687,81703,81717,81721,81730],{"__ignoreMap":316},[398,81688,81689,81691,81694,81696,81698,81701],{"class":400,"line":401},[398,81690,54642],{"class":404},[398,81692,81693],{"class":408}," isBigEnough(element, ",[398,81695,74251],{"class":404},[398,81697,12712],{"class":408},[398,81699,81700],{"class":404},"array",[398,81702,12719],{"class":408},[398,81704,81705,81708,81711,81713,81715],{"class":400,"line":317},[398,81706,81707],{"class":404},"  return",[398,81709,81710],{"class":408}," element ",[398,81712,1986],{"class":404},[398,81714,2314],{"class":457},[398,81716,1566],{"class":408},[398,81718,81719],{"class":400,"line":320},[398,81720,1841],{"class":408},[398,81722,81723,81726,81728],{"class":400,"line":1470},[398,81724,81725],{"class":408},"[12, 5, 8, 130, 44].every(isBigEnough); ",[398,81727,33522],{"class":404},[398,81729,54709],{"class":408},[398,81731,81732,81735,81737],{"class":400,"line":1476},[398,81733,81734],{"class":408},"[12, 54, 18, 130, 44].every(isBigEnough); ",[398,81736,33522],{"class":404},[398,81738,58133],{"class":408},[389,81740,81742],{"className":53260,"code":81741,"language":53262,"meta":316,"style":316},"\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",[395,81743,81744,81752,81760,81765,81769,81774,81779,81787],{"__ignoreMap":316},[398,81745,81746,81748,81750],{"class":400,"line":401},[398,81747,1312],{"class":408},[398,81749,51993],{"class":51493},[398,81751,51500],{"class":408},[398,81753,81754,81756,81758],{"class":400,"line":317},[398,81755,52337],{"class":408},[398,81757,52006],{"class":51493},[398,81759,51500],{"class":408},[398,81761,81762],{"class":400,"line":320},[398,81763,81764],{"class":408},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[398,81766,81767],{"class":400,"line":1470},[398,81768,78515],{"class":408},[398,81770,81771],{"class":400,"line":1476},[398,81772,81773],{"class":408},"    const flag = arr.every(item => item >= 10)\n",[398,81775,81776],{"class":400,"line":1490},[398,81777,81778],{"class":408},"    console.log(flag)    \u002F\u002Ftrue\n",[398,81780,81781,81783,81785],{"class":400,"line":1496},[398,81782,52610],{"class":408},[398,81784,52006],{"class":51493},[398,81786,51500],{"class":408},[398,81788,81789,81791,81793],{"class":400,"line":1587},[398,81790,51978],{"class":408},[398,81792,51993],{"class":51493},[398,81794,51500],{"class":408},[389,81796,81798],{"className":53260,"code":81797,"language":53262,"meta":316,"style":316},"\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",[395,81799,81800,81808,81816,81820,81825,81830,81835,81843],{"__ignoreMap":316},[398,81801,81802,81804,81806],{"class":400,"line":401},[398,81803,1312],{"class":408},[398,81805,51993],{"class":51493},[398,81807,51500],{"class":408},[398,81809,81810,81812,81814],{"class":400,"line":317},[398,81811,52337],{"class":408},[398,81813,52006],{"class":51493},[398,81815,51500],{"class":408},[398,81817,81818],{"class":400,"line":320},[398,81819,81764],{"class":408},[398,81821,81822],{"class":400,"line":1470},[398,81823,81824],{"class":408},"    const arr = [10, 0, 5]\n",[398,81826,81827],{"class":400,"line":1476},[398,81828,81829],{"class":408},"    const flag = arr.some(item => item >= 10)\n",[398,81831,81832],{"class":400,"line":1490},[398,81833,81834],{"class":408},"    console.log(flag)   \u002F\u002Ftrue\n",[398,81836,81837,81839,81841],{"class":400,"line":1496},[398,81838,52610],{"class":408},[398,81840,52006],{"class":51493},[398,81842,51500],{"class":408},[398,81844,81845,81847,81849],{"class":400,"line":1587},[398,81846,51978],{"class":408},[398,81848,51993],{"class":51493},[398,81850,51500],{"class":408},[23187,81852,81854],{"id":81853},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,81856,81857],{},[1738,81858],{"alt":316,"src":81859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[389,81861,81863],{"className":50826,"code":81862,"language":50828,"meta":316,"style":316},"\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",[395,81864,81865,81875,81889,81893,81901,81915,81935,81947,81955,81962,81974,81986,81998,82010,82020,82030,82034,82042,82050,82054,82062,82074,82082,82104,82109,82114,82147,82155,82163,82167],{"__ignoreMap":316},[398,81866,81867,81869,81871,81873],{"class":400,"line":401},[398,81868,51490],{"class":408},[398,81870,51494],{"class":51493},[398,81872,51497],{"class":2239},[398,81874,51500],{"class":408},[398,81876,81877,81879,81881,81883,81885,81887],{"class":400,"line":317},[398,81878,1312],{"class":408},[398,81880,50828],{"class":51493},[398,81882,51509],{"class":2239},[398,81884,454],{"class":408},[398,81886,51514],{"class":513},[398,81888,51500],{"class":408},[398,81890,81891],{"class":400,"line":320},[398,81892,2676],{"emptyLinePlaceholder":328},[398,81894,81895,81897,81899],{"class":400,"line":1470},[398,81896,1312],{"class":408},[398,81898,51527],{"class":51493},[398,81900,51500],{"class":408},[398,81902,81903,81905,81907,81909,81911,81913],{"class":400,"line":1476},[398,81904,52337],{"class":408},[398,81906,51537],{"class":51493},[398,81908,51540],{"class":2239},[398,81910,454],{"class":408},[398,81912,51545],{"class":513},[398,81914,51500],{"class":408},[398,81916,81917,81919,81921,81923,81925,81927,81929,81931,81933],{"class":400,"line":1490},[398,81918,52337],{"class":408},[398,81920,51537],{"class":51493},[398,81922,15197],{"class":2239},[398,81924,454],{"class":408},[398,81926,51584],{"class":513},[398,81928,51564],{"class":2239},[398,81930,454],{"class":408},[398,81932,51591],{"class":513},[398,81934,51500],{"class":408},[398,81936,81937,81939,81941,81943,81945],{"class":400,"line":1496},[398,81938,52337],{"class":408},[398,81940,51600],{"class":51493},[398,81942,51603],{"class":408},[398,81944,51600],{"class":51493},[398,81946,51500],{"class":408},[398,81948,81949,81951,81953],{"class":400,"line":1587},[398,81950,52337],{"class":408},[398,81952,5403],{"class":51493},[398,81954,51500],{"class":408},[398,81956,81957,81960],{"class":400,"line":1593},[398,81958,81959],{"class":51493},"    div",[398,81961,15849],{"class":408},[398,81963,81964,81966,81968,81970,81972],{"class":400,"line":1605},[398,81965,54964],{"class":457},[398,81967,51630],{"class":408},[398,81969,1998],{"class":457},[398,81971,51685],{"class":404},[398,81973,1566],{"class":408},[398,81975,81976,81978,81980,81982,81984],{"class":400,"line":1888},[398,81977,54978],{"class":457},[398,81979,51630],{"class":408},[398,81981,803],{"class":457},[398,81983,51685],{"class":404},[398,81985,1566],{"class":408},[398,81987,81988,81990,81992,81994,81996],{"class":400,"line":1893},[398,81989,57552],{"class":457},[398,81991,51630],{"class":408},[398,81993,803],{"class":457},[398,81995,51685],{"class":404},[398,81997,1566],{"class":408},[398,81999,82000,82002,82004,82006,82008],{"class":400,"line":1899},[398,82001,65326],{"class":457},[398,82003,51630],{"class":408},[398,82005,900],{"class":457},[398,82007,51685],{"class":404},[398,82009,1566],{"class":408},[398,82011,82012,82014,82016,82018],{"class":400,"line":1904},[398,82013,57479],{"class":457},[398,82015,51630],{"class":408},[398,82017,51785],{"class":457},[398,82019,1566],{"class":408},[398,82021,82022,82024,82026,82028],{"class":400,"line":1918},[398,82023,55077],{"class":457},[398,82025,51630],{"class":408},[398,82027,51838],{"class":457},[398,82029,1566],{"class":408},[398,82031,82032],{"class":400,"line":1923},[398,82033,2463],{"class":408},[398,82035,82036,82038,82040],{"class":400,"line":1929},[398,82037,52610],{"class":408},[398,82039,5403],{"class":51493},[398,82041,51500],{"class":408},[398,82043,82044,82046,82048],{"class":400,"line":1950},[398,82045,51978],{"class":408},[398,82047,51527],{"class":51493},[398,82049,51500],{"class":408},[398,82051,82052],{"class":400,"line":1955},[398,82053,2676],{"emptyLinePlaceholder":328},[398,82055,82056,82058,82060],{"class":400,"line":1969},[398,82057,1312],{"class":408},[398,82059,51993],{"class":51493},[398,82061,51500],{"class":408},[398,82063,82064,82066,82068,82070,82072],{"class":400,"line":1974},[398,82065,52337],{"class":408},[398,82067,51804],{"class":51493},[398,82069,55507],{"class":408},[398,82071,51804],{"class":51493},[398,82073,51500],{"class":408},[398,82075,82076,82078,82080],{"class":400,"line":2003},[398,82077,52337],{"class":408},[398,82079,52006],{"class":51493},[398,82081,51500],{"class":408},[398,82083,82084,82086,82089,82091,82094,82097,82099,82102],{"class":400,"line":2008},[398,82085,11498],{"class":404},[398,82087,82088],{"class":457}," spec",[398,82090,13841],{"class":404},[398,82092,82093],{"class":408}," { size: ",[398,82095,82096],{"class":513},"'40cm*40cm'",[398,82098,55657],{"class":408},[398,82100,82101],{"class":513},"'黑色'",[398,82103,55797],{"class":408},[398,82105,82106],{"class":400,"line":2025},[398,82107,82108],{"class":467},"    \u002F\u002F const arr = Object.values(spec)\n",[398,82110,82111],{"class":400,"line":2030},[398,82112,82113],{"class":467},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[398,82115,82116,82118,82120,82122,82125,82127,82129,82132,82135,82138,82140,82142,82145],{"class":400,"line":2035},[398,82117,52600],{"class":408},[398,82119,54592],{"class":2239},[398,82121,409],{"class":408},[398,82123,82124],{"class":513},"'div'",[398,82126,74442],{"class":408},[398,82128,454],{"class":404},[398,82130,82131],{"class":408}," Object.",[398,82133,82134],{"class":2239},"values",[398,82136,82137],{"class":408},"(spec).",[398,82139,74416],{"class":2239},[398,82141,409],{"class":408},[398,82143,82144],{"class":513},"'\u002F'",[398,82146,415],{"class":408},[398,82148,82149,82151,82153],{"class":400,"line":2040},[398,82150,52610],{"class":408},[398,82152,52006],{"class":51493},[398,82154,51500],{"class":408},[398,82156,82157,82159,82161],{"class":400,"line":2054},[398,82158,51978],{"class":408},[398,82160,51993],{"class":51493},[398,82162,51500],{"class":408},[398,82164,82165],{"class":400,"line":2059},[398,82166,2676],{"emptyLinePlaceholder":328},[398,82168,82169,82171,82173],{"class":400,"line":2853},[398,82170,51978],{"class":408},[398,82172,50828],{"class":51493},[398,82174,51500],{"class":408},[19,82176,82177],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23187,82179,82181],{"id":82180},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,82183,82184],{},"静态方法，将伪数组转换为真数组",[19,82186,82187],{},[1738,82188],{"alt":316,"src":82189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[389,82191,82193],{"className":53260,"code":82192,"language":53262,"meta":316,"style":316},"\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",[395,82194,82195,82203,82211,82223,82235,82247,82255,82263,82268,82273,82278,82283,82291],{"__ignoreMap":316},[398,82196,82197,82199,82201],{"class":400,"line":401},[398,82198,1312],{"class":408},[398,82200,51993],{"class":51493},[398,82202,51500],{"class":408},[398,82204,82205,82207,82209],{"class":400,"line":317},[398,82206,52337],{"class":408},[398,82208,67],{"class":51493},[398,82210,51500],{"class":408},[398,82212,82213,82215,82217,82219,82221],{"class":400,"line":320},[398,82214,51534],{"class":408},[398,82216,41],{"class":51493},[398,82218,55507],{"class":408},[398,82220,41],{"class":51493},[398,82222,51500],{"class":408},[398,82224,82225,82227,82229,82231,82233],{"class":400,"line":1470},[398,82226,51534],{"class":408},[398,82228,41],{"class":51493},[398,82230,55507],{"class":408},[398,82232,41],{"class":51493},[398,82234,51500],{"class":408},[398,82236,82237,82239,82241,82243,82245],{"class":400,"line":1476},[398,82238,51534],{"class":408},[398,82240,41],{"class":51493},[398,82242,55507],{"class":408},[398,82244,41],{"class":51493},[398,82246,51500],{"class":408},[398,82248,82249,82251,82253],{"class":400,"line":1490},[398,82250,52610],{"class":408},[398,82252,67],{"class":51493},[398,82254,51500],{"class":408},[398,82256,82257,82259,82261],{"class":400,"line":1496},[398,82258,52337],{"class":408},[398,82260,52006],{"class":51493},[398,82262,51500],{"class":408},[398,82264,82265],{"class":400,"line":1587},[398,82266,82267],{"class":408},"    const lis = document.querySelectorAll('li')\n",[398,82269,82270],{"class":400,"line":1593},[398,82271,82272],{"class":408},"    const liss = Array.from(lis)\n",[398,82274,82275],{"class":400,"line":1605},[398,82276,82277],{"class":408},"    liss.pop()\n",[398,82279,82280],{"class":400,"line":1888},[398,82281,82282],{"class":408},"    console.log(liss)\n",[398,82284,82285,82287,82289],{"class":400,"line":1893},[398,82286,52610],{"class":408},[398,82288,52006],{"class":51493},[398,82290,51500],{"class":408},[398,82292,82293,82295,82297],{"class":400,"line":1899},[398,82294,51978],{"class":408},[398,82296,51993],{"class":51493},[398,82298,51500],{"class":408},[19,82300,82301],{},[1738,82302],{"alt":316,"src":82303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22275,82305,82307],{"id":82306},"_41053-string","4.10.5.3 String",[19,82309,82310],{},[1738,82311],{"alt":316,"src":82312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23187,82314,82316],{"id":82315},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[389,82318,82320],{"className":53260,"code":82319,"language":53262,"meta":316,"style":316},"\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",[395,82321,82322,82330,82338,82343,82348,82353,82357,82362,82367,82372,82380],{"__ignoreMap":316},[398,82323,82324,82326,82328],{"class":400,"line":401},[398,82325,1312],{"class":408},[398,82327,51993],{"class":51493},[398,82329,51500],{"class":408},[398,82331,82332,82334,82336],{"class":400,"line":317},[398,82333,52337],{"class":408},[398,82335,52006],{"class":51493},[398,82337,51500],{"class":408},[398,82339,82340],{"class":400,"line":320},[398,82341,82342],{"class":408},"    \u002F\u002F 把字符串转化为数组\n",[398,82344,82345],{"class":400,"line":1470},[398,82346,82347],{"class":408},"    const str = 'pink,red'\n",[398,82349,82350],{"class":400,"line":1476},[398,82351,82352],{"class":408},"    const arr = str.split(',')\n",[398,82354,82355],{"class":400,"line":1490},[398,82356,80831],{"class":408},[398,82358,82359],{"class":400,"line":1496},[398,82360,82361],{"class":408},"    const str1 = '2025-8-25'\n",[398,82363,82364],{"class":400,"line":1587},[398,82365,82366],{"class":408},"    const arr1 = str1.split('-')\n",[398,82368,82369],{"class":400,"line":1593},[398,82370,82371],{"class":408},"    console.log(arr1)\n",[398,82373,82374,82376,82378],{"class":400,"line":1605},[398,82375,52610],{"class":408},[398,82377,52006],{"class":51493},[398,82379,51500],{"class":408},[398,82381,82382,82384,82386],{"class":400,"line":1888},[398,82383,51978],{"class":408},[398,82385,51993],{"class":51493},[398,82387,51500],{"class":408},[23187,82389,82391],{"id":82390},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,82393,5458],{},[19,82395,82396],{},"substring(indexStart)",[19,82398,82399],{},"substring(indexStart, indexEnd)",[67,82401,82402,82413,82425,82435],{},[41,82403,82404,82405,82408,82409,82412],{},"如果省略了 ",[395,82406,82407],{},"indexEnd","，则 ",[395,82410,82411],{},"substring()"," 提取字符直到字符串的末尾",[41,82414,82415,82416,82419,82420,82408,82422,82424],{},"如果 ",[395,82417,82418],{},"indexStart"," 等于 ",[395,82421,82407],{},[395,82423,82411],{}," 返回一个空字符串",[41,82426,82415,82427,82429,82430,82408,82432,82434],{},[395,82428,82418],{}," 大于 ",[395,82431,82407],{},[395,82433,82411],{}," 的效果就像交换了这两个参数一样",[41,82436,82437],{},"结束的索引号不包含想要截取的部分",[389,82439,82441],{"className":81682,"code":82440,"language":81684,"meta":316,"style":316},"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",[395,82442,82443,82455,82459,82493,82523,82527,82558,82562,82589,82619,82649,82653,82684],{"__ignoreMap":316},[398,82444,82445,82448,82450,82453],{"class":400,"line":401},[398,82446,82447],{"class":408},"const anyString ",[398,82449,454],{"class":404},[398,82451,82452],{"class":513}," \"Mozilla\"",[398,82454,1566],{"class":408},[398,82456,82457],{"class":400,"line":317},[398,82458,2676],{"emptyLinePlaceholder":328},[398,82460,82461,82464,82466,82468,82470,82473,82475,82478,82480,82482,82484,82486,82488,82490],{"class":400,"line":320},[398,82462,82463],{"class":457},"console",[398,82465,960],{"class":408},[398,82467,58440],{"class":457},[398,82469,409],{"class":408},[398,82471,82472],{"class":457},"anyString",[398,82474,960],{"class":408},[398,82476,82477],{"class":457},"substring",[398,82479,409],{"class":408},[398,82481,593],{"class":457},[398,82483,12712],{"class":408},[398,82485,619],{"class":457},[398,82487,75446],{"class":408},[398,82489,33522],{"class":404},[398,82491,82492],{"class":513}," 'M'\n",[398,82494,82495,82497,82499,82501,82503,82505,82507,82509,82511,82513,82515,82517,82519,82521],{"class":400,"line":1470},[398,82496,82463],{"class":457},[398,82498,960],{"class":408},[398,82500,58440],{"class":457},[398,82502,409],{"class":408},[398,82504,82472],{"class":457},[398,82506,960],{"class":408},[398,82508,82477],{"class":457},[398,82510,409],{"class":408},[398,82512,619],{"class":457},[398,82514,12712],{"class":408},[398,82516,593],{"class":457},[398,82518,75446],{"class":408},[398,82520,33522],{"class":404},[398,82522,82492],{"class":513},[398,82524,82525],{"class":400,"line":1476},[398,82526,2676],{"emptyLinePlaceholder":328},[398,82528,82529,82531,82533,82535,82537,82539,82541,82543,82545,82547,82549,82551,82553,82555],{"class":400,"line":1490},[398,82530,82463],{"class":457},[398,82532,960],{"class":408},[398,82534,58440],{"class":457},[398,82536,409],{"class":408},[398,82538,82472],{"class":457},[398,82540,960],{"class":408},[398,82542,82477],{"class":457},[398,82544,409],{"class":408},[398,82546,593],{"class":457},[398,82548,12712],{"class":408},[398,82550,746],{"class":457},[398,82552,75446],{"class":408},[398,82554,33522],{"class":404},[398,82556,82557],{"class":513}," 'Mozill'\n",[398,82559,82560],{"class":400,"line":1496},[398,82561,2676],{"emptyLinePlaceholder":328},[398,82563,82564,82566,82568,82570,82572,82574,82576,82578,82580,82582,82584,82586],{"class":400,"line":1587},[398,82565,82463],{"class":457},[398,82567,960],{"class":408},[398,82569,58440],{"class":457},[398,82571,409],{"class":408},[398,82573,82472],{"class":457},[398,82575,960],{"class":408},[398,82577,82477],{"class":457},[398,82579,409],{"class":408},[398,82581,695],{"class":457},[398,82583,75446],{"class":408},[398,82585,33522],{"class":404},[398,82587,82588],{"class":513}," 'lla'\n",[398,82590,82591,82593,82595,82597,82599,82601,82603,82605,82607,82609,82611,82613,82615,82617],{"class":400,"line":1593},[398,82592,82463],{"class":457},[398,82594,960],{"class":408},[398,82596,58440],{"class":457},[398,82598,409],{"class":408},[398,82600,82472],{"class":457},[398,82602,960],{"class":408},[398,82604,82477],{"class":457},[398,82606,409],{"class":408},[398,82608,695],{"class":457},[398,82610,12712],{"class":408},[398,82612,771],{"class":457},[398,82614,75502],{"class":408},[398,82616,33522],{"class":404},[398,82618,82588],{"class":513},[398,82620,82621,82623,82625,82627,82629,82631,82633,82635,82637,82639,82641,82643,82645,82647],{"class":400,"line":1605},[398,82622,82463],{"class":457},[398,82624,960],{"class":408},[398,82626,58440],{"class":457},[398,82628,409],{"class":408},[398,82630,82472],{"class":457},[398,82632,960],{"class":408},[398,82634,82477],{"class":457},[398,82636,409],{"class":408},[398,82638,771],{"class":457},[398,82640,12712],{"class":408},[398,82642,695],{"class":457},[398,82644,75446],{"class":408},[398,82646,33522],{"class":404},[398,82648,82588],{"class":513},[398,82650,82651],{"class":400,"line":1888},[398,82652,2676],{"emptyLinePlaceholder":328},[398,82654,82655,82657,82659,82661,82663,82665,82667,82669,82671,82673,82675,82677,82679,82681],{"class":400,"line":1893},[398,82656,82463],{"class":457},[398,82658,960],{"class":408},[398,82660,58440],{"class":457},[398,82662,409],{"class":408},[398,82664,82472],{"class":457},[398,82666,960],{"class":408},[398,82668,82477],{"class":457},[398,82670,409],{"class":408},[398,82672,593],{"class":457},[398,82674,12712],{"class":408},[398,82676,771],{"class":457},[398,82678,75446],{"class":408},[398,82680,33522],{"class":404},[398,82682,82683],{"class":513}," 'Mozilla'\n",[398,82685,82686,82688,82690,82692,82694,82696,82698,82700,82702,82704,82706,82708,82710,82712],{"class":400,"line":1899},[398,82687,82463],{"class":457},[398,82689,960],{"class":408},[398,82691,58440],{"class":457},[398,82693,409],{"class":408},[398,82695,82472],{"class":457},[398,82697,960],{"class":408},[398,82699,82477],{"class":457},[398,82701,409],{"class":408},[398,82703,593],{"class":457},[398,82705,12712],{"class":408},[398,82707,848],{"class":457},[398,82709,75446],{"class":408},[398,82711,33522],{"class":404},[398,82713,82683],{"class":513},[23187,82715,82717],{"id":82716},"_410533-startswith","4.10.5.3.3 startsWith",[19,82719,82720,82723,82724,82729,82730,82732,82733],{},[395,82721,82722],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[23,82725,82726],{},[395,82727,82728],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[395,82731,1638],{}," 或 ",[395,82734,66213],{},[389,82736,82738],{"className":77688,"code":82737,"language":77690,"meta":316,"style":316},"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",[395,82739,82740,82752,82771,82776,82796],{"__ignoreMap":316},[398,82741,82742,82744,82747,82749],{"class":400,"line":401},[398,82743,7069],{"class":404},[398,82745,82746],{"class":408}," str1 ",[398,82748,454],{"class":404},[398,82750,82751],{"class":513}," \"Saturday night plans\"\n",[398,82753,82754,82756,82758,82761,82764,82766,82769],{"class":400,"line":317},[398,82755,77725],{"class":408},[398,82757,58440],{"class":2239},[398,82759,82760],{"class":408},"(str1.",[398,82762,82763],{"class":2239},"startsWith",[398,82765,409],{"class":408},[398,82767,82768],{"class":513},"\"Sat\"",[398,82770,30690],{"class":408},[398,82772,82773],{"class":400,"line":320},[398,82774,82775],{"class":467},"\u002F\u002F Expected output: true\n",[398,82777,82778,82780,82782,82784,82786,82788,82790,82792,82794],{"class":400,"line":1470},[398,82779,77725],{"class":408},[398,82781,58440],{"class":2239},[398,82783,82760],{"class":408},[398,82785,82763],{"class":2239},[398,82787,409],{"class":408},[398,82789,82768],{"class":513},[398,82791,12712],{"class":408},[398,82793,480],{"class":457},[398,82795,30690],{"class":408},[398,82797,82798],{"class":400,"line":1476},[398,82799,82800],{"class":467},"\u002F\u002F Expected output: false\n",[389,82802,82804],{"className":50826,"code":82803,"language":50828,"meta":316,"style":316},"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",[395,82805,82806,82811,82816,82820,82825,82830],{"__ignoreMap":316},[398,82807,82808],{"class":400,"line":401},[398,82809,82810],{"class":408},"startsWith(searchString)\n",[398,82812,82813],{"class":400,"line":317},[398,82814,82815],{"class":408},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[398,82817,82818],{"class":400,"line":320},[398,82819,2676],{"emptyLinePlaceholder":328},[398,82821,82822],{"class":400,"line":1470},[398,82823,82824],{"class":408},"const str3 = 'pink老师上课中'\n",[398,82826,82827],{"class":400,"line":1476},[398,82828,82829],{"class":408},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[398,82831,82832],{"class":400,"line":1490},[398,82833,82834],{"class":408},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23187,82836,82838],{"id":82837},"_410534-includes","4.10.5.3.4 includes",[19,82840,82841],{},"includes(searchString) includes(searchString, position)",[38,82843,82844],{},[41,82845,82846],{},"searchString:",[19,82848,82849,82850,82852,82853,82858,82859,82864,82865,21777,82868,82871,82872,82875],{},"一个要在 ",[395,82851,1575],{}," 中查找的字符串。",[640,82854,82857],{"href":82855,"rel":82856},"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",[24142],"不能是正则表达式","。所有非正则表达式的值都会被",[640,82860,82863],{"href":82861,"rel":82862},"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",[24142],"强制转换为字符串","，因此如果该参数被省略或传入 ",[395,82866,82867],{},"undefined",[395,82869,82870],{},"includes()"," 方法会在字符串中搜索 ",[395,82873,82874],{},"\"undefined\"","，这通常不是你想要的",[38,82877,82878],{"start":317},[41,82879,82880,1261],{},[395,82881,82882],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,82884,82885,82886,82889,82890],{},"在字符串中开始搜索 ",[395,82887,82888],{},"searchString"," 的位置。默认值为 ",[395,82891,593],{},[38,82893,82894],{"start":320},[41,82895,82896],{},"返回值：",[19,82898,82899,82900,82902,82903,82907,82908],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[395,82901,82888],{}," 为空字符串的情况），则返回 ",[23,82904,82905],{},[395,82906,1638],{}," ，否则返回 ",[23,82909,82910],{},[395,82911,66213],{},[38,82913,82914],{"start":1470},[41,82915,82916],{},"异常：",[19,82918,82415,82919,14072,82921,82925],{},[395,82920,82888],{},[640,82922,82924],{"href":82855,"rel":82923},[24142],"是一个正则表达式","，则会抛出",[19,82927,82928],{},"只要是有就是true，不需要非得以谁开头结尾",[389,82930,82932],{"className":77688,"code":82931,"language":77690,"meta":316,"style":316},"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",[395,82933,82934,82945,82968,82987,83007,83029,83048],{"__ignoreMap":316},[398,82935,82936,82938,82940,82942],{"class":400,"line":401},[398,82937,7069],{"class":404},[398,82939,79968],{"class":408},[398,82941,454],{"class":404},[398,82943,82944],{"class":513}," \"To be, or not to be, that is the question.\"\n",[398,82946,82947,82949,82951,82954,82957,82959,82962,82965],{"class":400,"line":317},[398,82948,77725],{"class":408},[398,82950,58440],{"class":2239},[398,82952,82953],{"class":408},"(str.",[398,82955,82956],{"class":2239},"includes",[398,82958,409],{"class":408},[398,82960,82961],{"class":513},"\"To be\"",[398,82963,82964],{"class":408},"))",[398,82966,82967],{"class":467},"  \u002F\u002F true\n",[398,82969,82970,82972,82974,82976,82978,82980,82983,82985],{"class":400,"line":320},[398,82971,77725],{"class":408},[398,82973,58440],{"class":2239},[398,82975,82953],{"class":408},[398,82977,82956],{"class":2239},[398,82979,409],{"class":408},[398,82981,82982],{"class":513},"\"question\"",[398,82984,82964],{"class":408},[398,82986,82967],{"class":467},[398,82988,82989,82991,82993,82995,82997,82999,83002,83004],{"class":400,"line":1470},[398,82990,77725],{"class":408},[398,82992,58440],{"class":2239},[398,82994,82953],{"class":408},[398,82996,82956],{"class":2239},[398,82998,409],{"class":408},[398,83000,83001],{"class":513},"\"nonexistent\"",[398,83003,82964],{"class":408},[398,83005,83006],{"class":467},"  \u002F\u002F false\n",[398,83008,83009,83011,83013,83015,83017,83019,83021,83023,83025,83027],{"class":400,"line":1476},[398,83010,77725],{"class":408},[398,83012,58440],{"class":2239},[398,83014,82953],{"class":408},[398,83016,82956],{"class":2239},[398,83018,409],{"class":408},[398,83020,82961],{"class":513},[398,83022,12712],{"class":408},[398,83024,619],{"class":457},[398,83026,82964],{"class":408},[398,83028,83006],{"class":467},[398,83030,83031,83033,83035,83037,83039,83041,83044,83046],{"class":400,"line":1490},[398,83032,77725],{"class":408},[398,83034,58440],{"class":2239},[398,83036,82953],{"class":408},[398,83038,82956],{"class":2239},[398,83040,409],{"class":408},[398,83042,83043],{"class":513},"\"TO BE\"",[398,83045,82964],{"class":408},[398,83047,83006],{"class":467},[398,83049,83050,83052,83054,83056,83058,83060,83062,83064],{"class":400,"line":1496},[398,83051,77725],{"class":408},[398,83053,58440],{"class":2239},[398,83055,82953],{"class":408},[398,83057,82956],{"class":2239},[398,83059,409],{"class":408},[398,83061,7929],{"class":513},[398,83063,82964],{"class":408},[398,83065,82967],{"class":467},[23187,83067,83069],{"id":83068},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[389,83071,83073],{"className":53260,"code":83072,"language":53262,"meta":316,"style":316},"\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",[395,83074,83075,83083,83091,83096,83101,83106,83111,83116,83124],{"__ignoreMap":316},[398,83076,83077,83079,83081],{"class":400,"line":401},[398,83078,1312],{"class":408},[398,83080,51993],{"class":51493},[398,83082,51500],{"class":408},[398,83084,83085,83087,83089],{"class":400,"line":317},[398,83086,52337],{"class":408},[398,83088,52006],{"class":51493},[398,83090,51500],{"class":408},[398,83092,83093],{"class":400,"line":320},[398,83094,83095],{"class":408},"    const num = 10\n",[398,83097,83098],{"class":400,"line":1470},[398,83099,83100],{"class":408},"    \u002F\u002F 强制转换\n",[398,83102,83103],{"class":400,"line":1476},[398,83104,83105],{"class":408},"    console.log(String(num))\n",[398,83107,83108],{"class":400,"line":1490},[398,83109,83110],{"class":408},"    \u002F\u002F toString()方法转换\n",[398,83112,83113],{"class":400,"line":1496},[398,83114,83115],{"class":408},"    console.log(num.toString())\n",[398,83117,83118,83120,83122],{"class":400,"line":1587},[398,83119,52610],{"class":408},[398,83121,52006],{"class":51493},[398,83123,51500],{"class":408},[398,83125,83126,83128,83130],{"class":400,"line":1593},[398,83127,51978],{"class":408},[398,83129,51993],{"class":51493},[398,83131,51500],{"class":408},[23187,83133,83135],{"id":83134},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,83137,83138],{},[1738,83139],{"alt":316,"src":83140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[389,83142,83144],{"className":50826,"code":83143,"language":50828,"meta":316,"style":316},"\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",[395,83145,83146,83156,83170,83174,83182,83196,83216,83228,83236,83240,83248,83260,83268,83280,83285,83290,83295,83342,83358,83366,83374,83378],{"__ignoreMap":316},[398,83147,83148,83150,83152,83154],{"class":400,"line":401},[398,83149,51490],{"class":408},[398,83151,51494],{"class":51493},[398,83153,51497],{"class":2239},[398,83155,51500],{"class":408},[398,83157,83158,83160,83162,83164,83166,83168],{"class":400,"line":317},[398,83159,1312],{"class":408},[398,83161,50828],{"class":51493},[398,83163,51509],{"class":2239},[398,83165,454],{"class":408},[398,83167,51514],{"class":513},[398,83169,51500],{"class":408},[398,83171,83172],{"class":400,"line":320},[398,83173,2676],{"emptyLinePlaceholder":328},[398,83175,83176,83178,83180],{"class":400,"line":1470},[398,83177,1312],{"class":408},[398,83179,51527],{"class":51493},[398,83181,51500],{"class":408},[398,83183,83184,83186,83188,83190,83192,83194],{"class":400,"line":1476},[398,83185,52337],{"class":408},[398,83187,51537],{"class":51493},[398,83189,51540],{"class":2239},[398,83191,454],{"class":408},[398,83193,51545],{"class":513},[398,83195,51500],{"class":408},[398,83197,83198,83200,83202,83204,83206,83208,83210,83212,83214],{"class":400,"line":1490},[398,83199,52337],{"class":408},[398,83201,51537],{"class":51493},[398,83203,15197],{"class":2239},[398,83205,454],{"class":408},[398,83207,51584],{"class":513},[398,83209,51564],{"class":2239},[398,83211,454],{"class":408},[398,83213,51591],{"class":513},[398,83215,51500],{"class":408},[398,83217,83218,83220,83222,83224,83226],{"class":400,"line":1496},[398,83219,52337],{"class":408},[398,83221,51600],{"class":51493},[398,83223,51603],{"class":408},[398,83225,51600],{"class":51493},[398,83227,51500],{"class":408},[398,83229,83230,83232,83234],{"class":400,"line":1587},[398,83231,51978],{"class":408},[398,83233,51527],{"class":51493},[398,83235,51500],{"class":408},[398,83237,83238],{"class":400,"line":1593},[398,83239,2676],{"emptyLinePlaceholder":328},[398,83241,83242,83244,83246],{"class":400,"line":1605},[398,83243,1312],{"class":408},[398,83245,51993],{"class":51493},[398,83247,51500],{"class":408},[398,83249,83250,83252,83254,83256,83258],{"class":400,"line":1888},[398,83251,52337],{"class":408},[398,83253,51804],{"class":51493},[398,83255,55507],{"class":408},[398,83257,51804],{"class":51493},[398,83259,51500],{"class":408},[398,83261,83262,83264,83266],{"class":400,"line":1893},[398,83263,52337],{"class":408},[398,83265,52006],{"class":51493},[398,83267,51500],{"class":408},[398,83269,83270,83272,83275,83277],{"class":400,"line":1899},[398,83271,11498],{"class":404},[398,83273,83274],{"class":457}," gift",[398,83276,13841],{"class":404},[398,83278,83279],{"class":513}," '50g的茶叶，清洗球'\n",[398,83281,83282],{"class":400,"line":1904},[398,83283,83284],{"class":467},"    \u002F\u002F 1.把字符串拆分为数组\n",[398,83286,83287],{"class":400,"line":1918},[398,83288,83289],{"class":467},"    \u002F\u002F console.log(gift.split(','))\n",[398,83291,83292],{"class":400,"line":1923},[398,83293,83294],{"class":467},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[398,83296,83297,83299,83301,83303,83306,83309,83311,83314,83316,83318,83320,83322,83324,83327,83329,83332,83334,83336,83338,83340],{"class":400,"line":1929},[398,83298,11498],{"class":404},[398,83300,74112],{"class":457},[398,83302,13841],{"class":404},[398,83304,83305],{"class":408}," gift.",[398,83307,83308],{"class":2239},"split",[398,83310,409],{"class":408},[398,83312,83313],{"class":513},"'，'",[398,83315,31019],{"class":408},[398,83317,74237],{"class":2239},[398,83319,409],{"class":408},[398,83321,79988],{"class":5493},[398,83323,79991],{"class":404},[398,83325,83326],{"class":513}," `\u003Cspan>【赠品】${",[398,83328,79988],{"class":408},[398,83330,83331],{"class":513},"}\u003C\u002Fspan>\u003Cbr>`",[398,83333,31019],{"class":408},[398,83335,74416],{"class":2239},[398,83337,409],{"class":408},[398,83339,74421],{"class":513},[398,83341,415],{"class":408},[398,83343,83344,83346,83348,83350,83352,83354,83356],{"class":400,"line":1950},[398,83345,52600],{"class":408},[398,83347,54592],{"class":2239},[398,83349,409],{"class":408},[398,83351,82124],{"class":513},[398,83353,74442],{"class":408},[398,83355,454],{"class":404},[398,83357,74178],{"class":408},[398,83359,83360,83362,83364],{"class":400,"line":1955},[398,83361,52610],{"class":408},[398,83363,52006],{"class":51493},[398,83365,51500],{"class":408},[398,83367,83368,83370,83372],{"class":400,"line":1969},[398,83369,51978],{"class":408},[398,83371,51993],{"class":51493},[398,83373,51500],{"class":408},[398,83375,83376],{"class":400,"line":1974},[398,83377,2676],{"emptyLinePlaceholder":328},[398,83379,83380,83382,83384],{"class":400,"line":2003},[398,83381,51978],{"class":408},[398,83383,50828],{"class":51493},[398,83385,51500],{"class":408},[22275,83387,83389],{"id":83388},"_41054-number","4.10.5.4 Number",[19,83391,83392],{},[1738,83393],{"alt":316,"src":83394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,83396,83397],{},"整数也可以进行toFixed来保留小数",[19,83399,83400],{},"比如：",[19,83402,83403],{},"const price=10",[19,83405,83406],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22275,83408,83410],{"id":83409},"_41055-购物车展示","4.10.5.5 购物车展示",[19,83412,83413],{},[1738,83414],{"alt":316,"src":83415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[389,83417,83419],{"className":50826,"code":83418,"language":50828,"meta":316,"style":316},"\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",[395,83420,83421,83431,83445,83449,83457,83471,83491,83503,83511,83517,83527,83537,83547,83551,83555,83561,83573,83587,83591,83595,83601,83613,83629,83639,83655,83659,83663,83669,83679,83689,83693,83697,83705,83717,83729,83741,83745,83749,83757,83769,83773,83777,83788,83798,83810,83822,83832,83836,83840,83848,83857,83869,83879,83889,83893,83897,83905,83914,83921,83931,83943,83947,83951,83960,83970,83981,83993,84005,84009,84013,84022,84032,84043,84047,84051,84057,84069,84081,84091,84101,84119,84131,84135,84139,84148,84160,84170,84180,84192,84196,84204,84212,84216,84224,84238,84246,84260,84288,84296,84304,84314,84318,84326,84334,84343,84351,84360,84370,84374,84378,84386,84394,84403,84411,84419,84432,84436,84440,84448,84456,84465,84473,84481,84496,84500,84504,84512,84520,84529,84537,84545,84559,84567,84571,84575,84580,84606,84611,84648,84653,84676,84681,84735,84740,84776,84780,84786,84791,84800,84814,84823,84842,84851,84861,84866,84871,84884,84889,84943,84969,84977,84985,84989],{"__ignoreMap":316},[398,83422,83423,83425,83427,83429],{"class":400,"line":401},[398,83424,51490],{"class":408},[398,83426,51494],{"class":51493},[398,83428,51497],{"class":2239},[398,83430,51500],{"class":408},[398,83432,83433,83435,83437,83439,83441,83443],{"class":400,"line":317},[398,83434,1312],{"class":408},[398,83436,50828],{"class":51493},[398,83438,51509],{"class":2239},[398,83440,454],{"class":408},[398,83442,51514],{"class":513},[398,83444,51500],{"class":408},[398,83446,83447],{"class":400,"line":320},[398,83448,2676],{"emptyLinePlaceholder":328},[398,83450,83451,83453,83455],{"class":400,"line":1470},[398,83452,1312],{"class":408},[398,83454,51527],{"class":51493},[398,83456,51500],{"class":408},[398,83458,83459,83461,83463,83465,83467,83469],{"class":400,"line":1476},[398,83460,52337],{"class":408},[398,83462,51537],{"class":51493},[398,83464,51540],{"class":2239},[398,83466,454],{"class":408},[398,83468,51545],{"class":513},[398,83470,51500],{"class":408},[398,83472,83473,83475,83477,83479,83481,83483,83485,83487,83489],{"class":400,"line":1490},[398,83474,52337],{"class":408},[398,83476,51537],{"class":51493},[398,83478,15197],{"class":2239},[398,83480,454],{"class":408},[398,83482,51584],{"class":513},[398,83484,51564],{"class":2239},[398,83486,454],{"class":408},[398,83488,51591],{"class":513},[398,83490,51500],{"class":408},[398,83492,83493,83495,83497,83499,83501],{"class":400,"line":1496},[398,83494,52337],{"class":408},[398,83496,51600],{"class":51493},[398,83498,51603],{"class":408},[398,83500,51600],{"class":51493},[398,83502,51500],{"class":408},[398,83504,83505,83507,83509],{"class":400,"line":1587},[398,83506,52337],{"class":408},[398,83508,5403],{"class":51493},[398,83510,51500],{"class":408},[398,83512,83513,83515],{"class":400,"line":1593},[398,83514,6680],{"class":51493},[398,83516,15849],{"class":408},[398,83518,83519,83521,83523,83525],{"class":400,"line":1605},[398,83520,54888],{"class":457},[398,83522,51630],{"class":408},[398,83524,593],{"class":457},[398,83526,1566],{"class":408},[398,83528,83529,83531,83533,83535],{"class":400,"line":1888},[398,83530,54899],{"class":457},[398,83532,51630],{"class":408},[398,83534,593],{"class":457},[398,83536,1566],{"class":408},[398,83538,83539,83541,83543,83545],{"class":400,"line":1893},[398,83540,72789],{"class":457},[398,83542,51630],{"class":408},[398,83544,60698],{"class":457},[398,83546,1566],{"class":408},[398,83548,83549],{"class":400,"line":1899},[398,83550,2463],{"class":408},[398,83552,83553],{"class":400,"line":1904},[398,83554,2676],{"emptyLinePlaceholder":328},[398,83556,83557,83559],{"class":400,"line":1918},[398,83558,62316],{"class":2239},[398,83560,15849],{"class":408},[398,83562,83563,83565,83567,83569,83571],{"class":400,"line":1923},[398,83564,54964],{"class":457},[398,83566,51630],{"class":408},[398,83568,78767],{"class":457},[398,83570,51685],{"class":404},[398,83572,1566],{"class":408},[398,83574,83575,83577,83579,83581,83583,83585],{"class":400,"line":1929},[398,83576,54899],{"class":457},[398,83578,51630],{"class":408},[398,83580,713],{"class":457},[398,83582,51685],{"class":404},[398,83584,51749],{"class":457},[398,83586,1566],{"class":408},[398,83588,83589],{"class":400,"line":1950},[398,83590,2463],{"class":408},[398,83592,83593],{"class":400,"line":1955},[398,83594,2676],{"emptyLinePlaceholder":328},[398,83596,83597,83599],{"class":400,"line":1969},[398,83598,78818],{"class":2239},[398,83600,15849],{"class":408},[398,83602,83603,83605,83607,83609,83611],{"class":400,"line":1974},[398,83604,54888],{"class":457},[398,83606,51630],{"class":408},[398,83608,977],{"class":457},[398,83610,51685],{"class":404},[398,83612,1566],{"class":408},[398,83614,83615,83617,83619,83621,83623,83625,83627],{"class":400,"line":2003},[398,83616,62053],{"class":457},[398,83618,51630],{"class":408},[398,83620,28314],{"class":457},[398,83622,78873],{"class":457},[398,83624,78876],{"class":457},[398,83626,1097],{"class":404},[398,83628,1566],{"class":408},[398,83630,83631,83633,83635,83637],{"class":400,"line":2008},[398,83632,55202],{"class":457},[398,83634,51630],{"class":408},[398,83636,51670],{"class":457},[398,83638,1566],{"class":408},[398,83640,83641,83643,83645,83647,83649,83651,83653],{"class":400,"line":2025},[398,83642,62170],{"class":457},[398,83644,51630],{"class":408},[398,83646,619],{"class":457},[398,83648,51685],{"class":404},[398,83650,51714],{"class":457},[398,83652,62437],{"class":457},[398,83654,1566],{"class":408},[398,83656,83657],{"class":400,"line":2030},[398,83658,2463],{"class":408},[398,83660,83661],{"class":400,"line":2035},[398,83662,2676],{"emptyLinePlaceholder":328},[398,83664,83665,83667],{"class":400,"line":2040},[398,83666,78936],{"class":2239},[398,83668,15849],{"class":408},[398,83670,83671,83673,83675,83677],{"class":400,"line":2054},[398,83672,62218],{"class":457},[398,83674,51630],{"class":408},[398,83676,62223],{"class":457},[398,83678,1566],{"class":408},[398,83680,83681,83683,83685,83687],{"class":400,"line":2059},[398,83682,55077],{"class":457},[398,83684,51630],{"class":408},[398,83686,62011],{"class":457},[398,83688,1566],{"class":408},[398,83690,83691],{"class":400,"line":2853},[398,83692,2463],{"class":408},[398,83694,83695],{"class":400,"line":2867},[398,83696,2676],{"emptyLinePlaceholder":328},[398,83698,83699,83701,83703],{"class":400,"line":2875},[398,83700,78818],{"class":2239},[398,83702,55808],{"class":51493},[398,83704,15849],{"class":408},[398,83706,83707,83709,83711,83713,83715],{"class":400,"line":2880},[398,83708,54964],{"class":457},[398,83710,51630],{"class":408},[398,83712,1014],{"class":457},[398,83714,51685],{"class":404},[398,83716,1566],{"class":408},[398,83718,83719,83721,83723,83725,83727],{"class":400,"line":2886},[398,83720,54978],{"class":457},[398,83722,51630],{"class":408},[398,83724,1014],{"class":457},[398,83726,51685],{"class":404},[398,83728,1566],{"class":408},[398,83730,83731,83733,83735,83737,83739],{"class":400,"line":2892},[398,83732,61943],{"class":457},[398,83734,51630],{"class":408},[398,83736,721],{"class":457},[398,83738,51685],{"class":404},[398,83740,1566],{"class":408},[398,83742,83743],{"class":400,"line":2897},[398,83744,2463],{"class":408},[398,83746,83747],{"class":400,"line":8225},[398,83748,2676],{"emptyLinePlaceholder":328},[398,83750,83751,83753,83755],{"class":400,"line":8249},[398,83752,78818],{"class":2239},[398,83754,62497],{"class":2239},[398,83756,15849],{"class":408},[398,83758,83759,83761,83763,83765,83767],{"class":400,"line":8254},[398,83760,54964],{"class":457},[398,83762,51630],{"class":408},[398,83764,1998],{"class":457},[398,83766,51685],{"class":404},[398,83768,1566],{"class":408},[398,83770,83771],{"class":400,"line":8260},[398,83772,2463],{"class":408},[398,83774,83775],{"class":400,"line":8287},[398,83776,2676],{"emptyLinePlaceholder":328},[398,83778,83779,83781,83783,83786],{"class":400,"line":8292},[398,83780,78818],{"class":2239},[398,83782,62497],{"class":2239},[398,83784,83785],{"class":2239}," .tag",[398,83787,15849],{"class":408},[398,83789,83790,83792,83794,83796],{"class":400,"line":8298},[398,83791,55202],{"class":457},[398,83793,51630],{"class":408},[398,83795,61062],{"class":457},[398,83797,1566],{"class":408},[398,83799,83800,83802,83804,83806,83808],{"class":400,"line":8310},[398,83801,54888],{"class":457},[398,83803,51630],{"class":408},[398,83805,486],{"class":457},[398,83807,51685],{"class":404},[398,83809,1566],{"class":408},[398,83811,83812,83814,83816,83818,83820],{"class":400,"line":8322},[398,83813,55115],{"class":457},[398,83815,51630],{"class":408},[398,83817,900],{"class":457},[398,83819,51685],{"class":404},[398,83821,1566],{"class":408},[398,83823,83824,83826,83828,83830],{"class":400,"line":8334},[398,83825,57609],{"class":457},[398,83827,51630],{"class":408},[398,83829,62263],{"class":457},[398,83831,1566],{"class":408},[398,83833,83834],{"class":400,"line":9993},[398,83835,2463],{"class":408},[398,83837,83838],{"class":400,"line":10018},[398,83839,2676],{"emptyLinePlaceholder":328},[398,83841,83842,83844,83846],{"class":400,"line":10041},[398,83843,78818],{"class":2239},[398,83845,79110],{"class":2239},[398,83847,31659],{"class":408},[398,83849,83850,83852,83855],{"class":400,"line":10065},[398,83851,78818],{"class":2239},[398,83853,83854],{"class":2239}," .sub-total",[398,83856,15849],{"class":408},[398,83858,83859,83861,83863,83865,83867],{"class":400,"line":10070},[398,83860,55115],{"class":457},[398,83862,51630],{"class":408},[398,83864,1052],{"class":457},[398,83866,51685],{"class":404},[398,83868,1566],{"class":408},[398,83870,83871,83873,83875,83877],{"class":400,"line":10075},[398,83872,57609],{"class":457},[398,83874,51630],{"class":408},[398,83876,79133],{"class":457},[398,83878,1566],{"class":408},[398,83880,83881,83883,83885,83887],{"class":400,"line":10080},[398,83882,62030],{"class":457},[398,83884,51630],{"class":408},[398,83886,619],{"class":457},[398,83888,1566],{"class":408},[398,83890,83891],{"class":400,"line":10089},[398,83892,2463],{"class":408},[398,83894,83895],{"class":400,"line":10094},[398,83896,2676],{"emptyLinePlaceholder":328},[398,83898,83899,83901,83903],{"class":400,"line":10100},[398,83900,78818],{"class":2239},[398,83902,79150],{"class":2239},[398,83904,31659],{"class":408},[398,83906,83907,83909,83912],{"class":400,"line":10121},[398,83908,78818],{"class":2239},[398,83910,83911],{"class":2239}," .sub-total::before",[398,83913,31659],{"class":408},[398,83915,83916,83919],{"class":400,"line":10127},[398,83917,83918],{"class":2239},"    .amount::before",[398,83920,15849],{"class":408},[398,83922,83923,83925,83927,83929],{"class":400,"line":10141},[398,83924,79157],{"class":457},[398,83926,51630],{"class":408},[398,83928,79162],{"class":513},[398,83930,1566],{"class":408},[398,83932,83933,83935,83937,83939,83941],{"class":400,"line":10147},[398,83934,55115],{"class":457},[398,83936,51630],{"class":408},[398,83938,900],{"class":457},[398,83940,51685],{"class":404},[398,83942,1566],{"class":408},[398,83944,83945],{"class":400,"line":10174},[398,83946,2463],{"class":408},[398,83948,83949],{"class":400,"line":10183},[398,83950,2676],{"emptyLinePlaceholder":328},[398,83952,83953,83955,83958],{"class":400,"line":10189},[398,83954,78818],{"class":2239},[398,83956,83957],{"class":2239}," .spec",[398,83959,15849],{"class":408},[398,83961,83962,83964,83966,83968],{"class":400,"line":10197},[398,83963,62030],{"class":457},[398,83965,51630],{"class":408},[398,83967,486],{"class":457},[398,83969,1566],{"class":408},[398,83971,83972,83974,83976,83979],{"class":400,"line":10202},[398,83973,57609],{"class":457},[398,83975,51630],{"class":408},[398,83977,83978],{"class":457},"#888",[398,83980,1566],{"class":408},[398,83982,83983,83985,83987,83989,83991],{"class":400,"line":16881},[398,83984,55115],{"class":457},[398,83986,51630],{"class":408},[398,83988,951],{"class":457},[398,83990,51685],{"class":404},[398,83992,1566],{"class":408},[398,83994,83995,83997,83999,84001,84003],{"class":400,"line":16887},[398,83996,62193],{"class":457},[398,83998,51630],{"class":408},[398,84000,1102],{"class":457},[398,84002,51685],{"class":404},[398,84004,1566],{"class":408},[398,84006,84007],{"class":400,"line":16910},[398,84008,2463],{"class":408},[398,84010,84011],{"class":400,"line":16916},[398,84012,2676],{"emptyLinePlaceholder":328},[398,84014,84015,84017,84020],{"class":400,"line":16939},[398,84016,78818],{"class":2239},[398,84018,84019],{"class":2239}," .count",[398,84021,15849],{"class":408},[398,84023,84024,84026,84028,84030],{"class":400,"line":16953},[398,84025,62030],{"class":457},[398,84027,51630],{"class":408},[398,84029,619],{"class":457},[398,84031,1566],{"class":408},[398,84033,84034,84036,84038,84041],{"class":400,"line":16973},[398,84035,57609],{"class":457},[398,84037,51630],{"class":408},[398,84039,84040],{"class":457},"#aaa",[398,84042,1566],{"class":408},[398,84044,84045],{"class":400,"line":16979},[398,84046,2463],{"class":408},[398,84048,84049],{"class":400,"line":16990},[398,84050,2676],{"emptyLinePlaceholder":328},[398,84052,84053,84055],{"class":400,"line":17013},[398,84054,72668],{"class":2239},[398,84056,15849],{"class":408},[398,84058,84059,84061,84063,84065,84067],{"class":400,"line":17035},[398,84060,54964],{"class":457},[398,84062,51630],{"class":408},[398,84064,78767],{"class":457},[398,84066,51685],{"class":404},[398,84068,1566],{"class":408},[398,84070,84071,84073,84075,84077,84079],{"class":400,"line":17040},[398,84072,54899],{"class":457},[398,84074,51630],{"class":408},[398,84076,593],{"class":457},[398,84078,51749],{"class":457},[398,84080,1566],{"class":408},[398,84082,84083,84085,84087,84089],{"class":400,"line":17046},[398,84084,55202],{"class":457},[398,84086,51630],{"class":408},[398,84088,51670],{"class":457},[398,84090,1566],{"class":408},[398,84092,84093,84095,84097,84099],{"class":400,"line":17060},[398,84094,55213],{"class":457},[398,84096,51630],{"class":408},[398,84098,51773],{"class":457},[398,84100,1566],{"class":408},[398,84102,84103,84106,84108,84110,84112,84114,84117],{"class":400,"line":17073},[398,84104,84105],{"class":457},"      border-top",[398,84107,51630],{"class":408},[398,84109,619],{"class":457},[398,84111,51685],{"class":404},[398,84113,51714],{"class":457},[398,84115,84116],{"class":457}," #4e4e4e",[398,84118,1566],{"class":408},[398,84120,84121,84123,84125,84127,84129],{"class":400,"line":17078},[398,84122,54888],{"class":457},[398,84124,51630],{"class":408},[398,84126,1102],{"class":457},[398,84128,51685],{"class":404},[398,84130,1566],{"class":408},[398,84132,84133],{"class":400,"line":17092},[398,84134,2463],{"class":408},[398,84136,84137],{"class":400,"line":17097},[398,84138,2676],{"emptyLinePlaceholder":328},[398,84140,84141,84143,84146],{"class":400,"line":17103},[398,84142,72668],{"class":2239},[398,84144,84145],{"class":2239}," .amount",[398,84147,15849],{"class":408},[398,84149,84150,84152,84154,84156,84158],{"class":400,"line":17108},[398,84151,55115],{"class":457},[398,84153,51630],{"class":408},[398,84155,1052],{"class":457},[398,84157,51685],{"class":404},[398,84159,1566],{"class":408},[398,84161,84162,84164,84166,84168],{"class":400,"line":17122},[398,84163,57609],{"class":457},[398,84165,51630],{"class":408},[398,84167,79133],{"class":457},[398,84169,1566],{"class":408},[398,84171,84172,84174,84176,84178],{"class":400,"line":17127},[398,84173,62527],{"class":457},[398,84175,51630],{"class":408},[398,84177,51682],{"class":457},[398,84179,1566],{"class":408},[398,84181,84182,84184,84186,84188,84190],{"class":400,"line":17132},[398,84183,61943],{"class":457},[398,84185,51630],{"class":408},[398,84187,1058],{"class":457},[398,84189,51685],{"class":404},[398,84191,1566],{"class":408},[398,84193,84194],{"class":400,"line":17146},[398,84195,2463],{"class":408},[398,84197,84198,84200,84202],{"class":400,"line":17158},[398,84199,52610],{"class":408},[398,84201,5403],{"class":51493},[398,84203,51500],{"class":408},[398,84205,84206,84208,84210],{"class":400,"line":17163},[398,84207,51978],{"class":408},[398,84209,51527],{"class":51493},[398,84211,51500],{"class":408},[398,84213,84214],{"class":400,"line":17176},[398,84215,2676],{"emptyLinePlaceholder":328},[398,84217,84218,84220,84222],{"class":400,"line":17181},[398,84219,1312],{"class":408},[398,84221,51993],{"class":51493},[398,84223,51500],{"class":408},[398,84225,84226,84228,84230,84232,84234,84236],{"class":400,"line":17186},[398,84227,52337],{"class":408},[398,84229,51804],{"class":51493},[398,84231,53679],{"class":2239},[398,84233,454],{"class":408},[398,84235,62801],{"class":513},[398,84237,51500],{"class":408},[398,84239,84240,84242,84244],{"class":400,"line":17191},[398,84241,52610],{"class":408},[398,84243,51804],{"class":51493},[398,84245,51500],{"class":408},[398,84247,84248,84250,84252,84254,84256,84258],{"class":400,"line":17204},[398,84249,52337],{"class":408},[398,84251,51804],{"class":51493},[398,84253,53679],{"class":2239},[398,84255,454],{"class":408},[398,84257,62773],{"class":513},[398,84259,51500],{"class":408},[398,84261,84262,84264,84266,84269,84271,84273,84275,84278,84280,84282,84284,84286],{"class":400,"line":17209},[398,84263,51534],{"class":408},[398,84265,51804],{"class":51493},[398,84267,84268],{"class":408},">合计：\u003C",[398,84270,398],{"class":51493},[398,84272,53679],{"class":2239},[398,84274,454],{"class":408},[398,84276,84277],{"class":513},"\"amount\"",[398,84279,55507],{"class":408},[398,84281,398],{"class":51493},[398,84283,55507],{"class":408},[398,84285,51804],{"class":51493},[398,84287,51500],{"class":408},[398,84289,84290,84292,84294],{"class":400,"line":32826},[398,84291,52610],{"class":408},[398,84293,51804],{"class":51493},[398,84295,51500],{"class":408},[398,84297,84298,84300,84302],{"class":400,"line":32832},[398,84299,52337],{"class":408},[398,84301,52006],{"class":51493},[398,84303,51500],{"class":408},[398,84305,84306,84308,84310,84312],{"class":400,"line":32838},[398,84307,11498],{"class":404},[398,84309,79570],{"class":457},[398,84311,13841],{"class":404},[398,84313,55640],{"class":408},[398,84315,84316],{"class":400,"line":32844},[398,84317,79579],{"class":408},[398,84319,84320,84322,84324],{"class":400,"line":32850},[398,84321,79584],{"class":408},[398,84323,79587],{"class":513},[398,84325,31659],{"class":408},[398,84327,84328,84330,84332],{"class":400,"line":32861},[398,84329,79594],{"class":408},[398,84331,79597],{"class":513},[398,84333,31659],{"class":408},[398,84335,84336,84338,84341],{"class":400,"line":32867},[398,84337,79604],{"class":408},[398,84339,84340],{"class":457},"289.9",[398,84342,31659],{"class":408},[398,84344,84345,84347,84349],{"class":400,"line":32887},[398,84346,79614],{"class":408},[398,84348,79617],{"class":513},[398,84350,31659],{"class":408},[398,84352,84353,84356,84358],{"class":400,"line":32893},[398,84354,84355],{"class":408},"        count: ",[398,84357,486],{"class":457},[398,84359,31659],{"class":408},[398,84361,84362,84365,84368],{"class":400,"line":32904},[398,84363,84364],{"class":408},"        spec: { color: ",[398,84366,84367],{"class":513},"'白色'",[398,84369,55797],{"class":408},[398,84371,84372],{"class":400,"line":32910},[398,84373,78085],{"class":408},[398,84375,84376],{"class":400,"line":32916},[398,84377,79579],{"class":408},[398,84379,84380,84382,84384],{"class":400,"line":32922},[398,84381,79584],{"class":408},[398,84383,79678],{"class":513},[398,84385,31659],{"class":408},[398,84387,84388,84390,84392],{"class":400,"line":32928},[398,84389,79594],{"class":408},[398,84391,79687],{"class":513},[398,84393,31659],{"class":408},[398,84395,84396,84398,84401],{"class":400,"line":32934},[398,84397,79604],{"class":408},[398,84399,84400],{"class":457},"109.8",[398,84402,31659],{"class":408},[398,84404,84405,84407,84409],{"class":400,"line":32940},[398,84406,79614],{"class":408},[398,84408,79705],{"class":513},[398,84410,31659],{"class":408},[398,84412,84413,84415,84417],{"class":400,"line":32946},[398,84414,84355],{"class":408},[398,84416,480],{"class":457},[398,84418,31659],{"class":408},[398,84420,84421,84424,84426,84428,84430],{"class":400,"line":32966},[398,84422,84423],{"class":408},"        spec: { size: ",[398,84425,82096],{"class":513},[398,84427,55657],{"class":408},[398,84429,82101],{"class":513},[398,84431,55797],{"class":408},[398,84433,84434],{"class":400,"line":32972},[398,84435,78085],{"class":408},[398,84437,84438],{"class":400,"line":32988},[398,84439,79579],{"class":408},[398,84441,84442,84444,84446],{"class":400,"line":32994},[398,84443,79584],{"class":408},[398,84445,79722],{"class":513},[398,84447,31659],{"class":408},[398,84449,84450,84452,84454],{"class":400,"line":33008},[398,84451,79594],{"class":408},[398,84453,79731],{"class":513},[398,84455,31659],{"class":408},[398,84457,84458,84460,84463],{"class":400,"line":33014},[398,84459,79604],{"class":408},[398,84461,84462],{"class":457},"488",[398,84464,31659],{"class":408},[398,84466,84467,84469,84471],{"class":400,"line":33029},[398,84468,79614],{"class":408},[398,84470,79749],{"class":513},[398,84472,31659],{"class":408},[398,84474,84475,84477,84479],{"class":400,"line":33035},[398,84476,84355],{"class":408},[398,84478,619],{"class":457},[398,84480,31659],{"class":408},[398,84482,84483,84485,84488,84491,84494],{"class":400,"line":33044},[398,84484,84364],{"class":408},[398,84486,84487],{"class":513},"'青色'",[398,84489,84490],{"class":408},", sum: ",[398,84492,84493],{"class":513},"'一大四小'",[398,84495,55797],{"class":408},[398,84497,84498],{"class":400,"line":33050},[398,84499,78085],{"class":408},[398,84501,84502],{"class":400,"line":33059},[398,84503,79579],{"class":408},[398,84505,84506,84508,84510],{"class":400,"line":33065},[398,84507,79584],{"class":408},[398,84509,79766],{"class":513},[398,84511,31659],{"class":408},[398,84513,84514,84516,84518],{"class":400,"line":33071},[398,84515,79594],{"class":408},[398,84517,79775],{"class":513},[398,84519,31659],{"class":408},[398,84521,84522,84524,84527],{"class":400,"line":33080},[398,84523,79604],{"class":408},[398,84525,84526],{"class":457},"139",[398,84528,31659],{"class":408},[398,84530,84531,84533,84535],{"class":400,"line":33086},[398,84532,79614],{"class":408},[398,84534,79793],{"class":513},[398,84536,31659],{"class":408},[398,84538,84539,84541,84543],{"class":400,"line":33097},[398,84540,84355],{"class":408},[398,84542,619],{"class":457},[398,84544,31659],{"class":408},[398,84546,84547,84549,84552,84554,84557],{"class":400,"line":33103},[398,84548,84423],{"class":408},[398,84550,84551],{"class":513},"'小号'",[398,84553,55657],{"class":408},[398,84555,84556],{"class":513},"'紫色'",[398,84558,55663],{"class":408},[398,84560,84561,84564],{"class":400,"line":33122},[398,84562,84563],{"class":408},"        gift: ",[398,84565,84566],{"class":513},"'50g茶叶,清洗球'\n",[398,84568,84569],{"class":400,"line":33128},[398,84570,52591],{"class":408},[398,84572,84573],{"class":400,"line":33139},[398,84574,53302],{"class":408},[398,84576,84577],{"class":400,"line":33145},[398,84578,84579],{"class":467},"    \u002F\u002F  1.根据数据渲染页面\n",[398,84581,84582,84584,84586,84588,84590,84592,84594,84596,84598,84600,84602,84604],{"class":400,"line":33165},[398,84583,52600],{"class":408},[398,84585,54592],{"class":2239},[398,84587,409],{"class":408},[398,84589,80094],{"class":513},[398,84591,74442],{"class":408},[398,84593,454],{"class":404},[398,84595,80241],{"class":408},[398,84597,74237],{"class":2239},[398,84599,409],{"class":408},[398,84601,79988],{"class":5493},[398,84603,79991],{"class":404},[398,84605,15849],{"class":408},[398,84607,84608],{"class":400,"line":33181},[398,84609,84610],{"class":467},"      \u002F\u002F 对象解构\n",[398,84612,84613,84615,84617,84619,84621,84623,84625,84628,84630,84632,84634,84637,84639,84642,84644,84646],{"class":400,"line":33187},[398,84614,58421],{"class":404},[398,84616,80000],{"class":408},[398,84618,80013],{"class":457},[398,84620,12712],{"class":408},[398,84622,80003],{"class":457},[398,84624,12712],{"class":408},[398,84626,84627],{"class":457},"count",[398,84629,12712],{"class":408},[398,84631,80008],{"class":457},[398,84633,12712],{"class":408},[398,84635,84636],{"class":457},"spec",[398,84638,12712],{"class":408},[398,84640,84641],{"class":457},"gift",[398,84643,80016],{"class":408},[398,84645,454],{"class":404},[398,84647,80021],{"class":408},[398,84649,84650],{"class":400,"line":33201},[398,84651,84652],{"class":467},"      \u002F\u002F 规格文字模块处理\n",[398,84654,84655,84657,84660,84662,84664,84666,84668,84670,84672,84674],{"class":400,"line":33207},[398,84656,58421],{"class":404},[398,84658,84659],{"class":457}," text",[398,84661,13841],{"class":404},[398,84663,82131],{"class":408},[398,84665,82134],{"class":2239},[398,84667,82137],{"class":408},[398,84669,74416],{"class":2239},[398,84671,409],{"class":408},[398,84673,82144],{"class":513},[398,84675,415],{"class":408},[398,84677,84678],{"class":400,"line":33213},[398,84679,84680],{"class":467},"      \u002F\u002F 处理赠品模块\n",[398,84682,84683,84685,84687,84689,84692,84694,84696,84698,84700,84703,84705,84707,84709,84711,84713,84716,84718,84721,84723,84725,84727,84729,84731,84733],{"class":400,"line":33224},[398,84684,58421],{"class":404},[398,84686,74112],{"class":457},[398,84688,13841],{"class":404},[398,84690,84691],{"class":408}," gift ",[398,84693,1388],{"class":404},[398,84695,83305],{"class":408},[398,84697,83308],{"class":2239},[398,84699,409],{"class":408},[398,84701,84702],{"class":513},"','",[398,84704,31019],{"class":408},[398,84706,74237],{"class":2239},[398,84708,409],{"class":408},[398,84710,79988],{"class":5493},[398,84712,79991],{"class":404},[398,84714,84715],{"class":513}," `\u003Cspan class=\"tag\">【赠品】${",[398,84717,79988],{"class":408},[398,84719,84720],{"class":513},"}\u003C\u002Fspan>`",[398,84722,31019],{"class":408},[398,84724,74416],{"class":2239},[398,84726,409],{"class":408},[398,84728,74421],{"class":513},[398,84730,13991],{"class":408},[398,84732,1261],{"class":404},[398,84734,70297],{"class":513},[398,84736,84737],{"class":400,"line":33230},[398,84738,84739],{"class":467},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[398,84741,84742,84744,84747,84749,84752,84754,84756,84758,84761,84763,84765,84767,84770,84772,84774],{"class":400,"line":33236},[398,84743,58421],{"class":404},[398,84745,84746],{"class":457}," subtotal",[398,84748,13841],{"class":404},[398,84750,84751],{"class":408}," ((price ",[398,84753,857],{"class":404},[398,84755,6031],{"class":457},[398,84757,6795],{"class":404},[398,84759,84760],{"class":408}," count) ",[398,84762,986],{"class":404},[398,84764,6031],{"class":457},[398,84766,31019],{"class":408},[398,84768,84769],{"class":2239},"toFixed",[398,84771,409],{"class":408},[398,84773,486],{"class":457},[398,84775,415],{"class":408},[398,84777,84778],{"class":400,"line":33246},[398,84779,2676],{"emptyLinePlaceholder":328},[398,84781,84782,84784],{"class":400,"line":33252},[398,84783,74175],{"class":404},[398,84785,70361],{"class":513},[398,84787,84788],{"class":400,"line":33263},[398,84789,84790],{"class":513},"        \u003Cdiv class=\"item\">\n",[398,84792,84793,84796,84798],{"class":400,"line":33269},[398,84794,84795],{"class":513},"          \u003Cimg src=\"${",[398,84797,80013],{"class":408},[398,84799,80045],{"class":513},[398,84801,84802,84805,84807,84810,84812],{"class":400,"line":33279},[398,84803,84804],{"class":513},"          \u003Cp class=\"name\">${",[398,84806,80003],{"class":408},[398,84808,84809],{"class":513},"}${",[398,84811,1575],{"class":408},[398,84813,80055],{"class":513},[398,84815,84816,84819,84821],{"class":400,"line":33284},[398,84817,84818],{"class":513},"          \u003Cp class=\"spec\">${",[398,84820,5464],{"class":408},[398,84822,80055],{"class":513},[398,84824,84825,84828,84830,84832,84834,84836,84838,84840],{"class":400,"line":33290},[398,84826,84827],{"class":513},"          \u003Cp class=\"price\">${",[398,84829,80008],{"class":408},[398,84831,960],{"class":513},[398,84833,84769],{"class":2239},[398,84835,409],{"class":513},[398,84837,486],{"class":457},[398,84839,831],{"class":513},[398,84841,80055],{"class":513},[398,84843,84844,84847,84849],{"class":400,"line":33339},[398,84845,84846],{"class":513},"          \u003Cp class=\"count\">x${",[398,84848,84627],{"class":408},[398,84850,80055],{"class":513},[398,84852,84853,84856,84859],{"class":400,"line":33386},[398,84854,84855],{"class":513},"          \u003Cp class=\"sub-total\">${",[398,84857,84858],{"class":408},"subtotal",[398,84860,80055],{"class":513},[398,84862,84863],{"class":400,"line":33391},[398,84864,84865],{"class":513},"        \u003C\u002Fdiv> \n",[398,84867,84868],{"class":400,"line":33397},[398,84869,84870],{"class":513},"             `\n",[398,84872,84873,84876,84878,84880,84882],{"class":400,"line":33416},[398,84874,84875],{"class":408},"    }).",[398,84877,74416],{"class":2239},[398,84879,409],{"class":408},[398,84881,74421],{"class":513},[398,84883,415],{"class":408},[398,84885,84886],{"class":400,"line":33422},[398,84887,84888],{"class":467},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[398,84890,84891,84893,84895,84897,84899,84902,84904,84907,84909,84911,84913,84916,84919,84921,84924,84926,84928,84930,84933,84935,84937,84939,84941],{"class":400,"line":33442},[398,84892,11498],{"class":404},[398,84894,62978],{"class":457},[398,84896,13841],{"class":404},[398,84898,80241],{"class":408},[398,84900,84901],{"class":2239},"reduce",[398,84903,2652],{"class":408},[398,84905,84906],{"class":5493},"prev",[398,84908,12712],{"class":408},[398,84910,79988],{"class":5493},[398,84912,13991],{"class":408},[398,84914,84915],{"class":404},"=>",[398,84917,84918],{"class":408}," prev ",[398,84920,883],{"class":404},[398,84922,84923],{"class":408}," (item.price ",[398,84925,857],{"class":404},[398,84927,6031],{"class":457},[398,84929,6795],{"class":404},[398,84931,84932],{"class":408}," item.count) ",[398,84934,986],{"class":404},[398,84936,6031],{"class":457},[398,84938,12712],{"class":408},[398,84940,593],{"class":457},[398,84942,415],{"class":408},[398,84944,84945,84947,84949,84951,84954,84956,84958,84961,84963,84965,84967],{"class":400,"line":33448},[398,84946,52600],{"class":408},[398,84948,54592],{"class":2239},[398,84950,409],{"class":408},[398,84952,84953],{"class":513},"'.amount'",[398,84955,74442],{"class":408},[398,84957,454],{"class":404},[398,84959,84960],{"class":408}," total.",[398,84962,84769],{"class":2239},[398,84964,409],{"class":408},[398,84966,486],{"class":457},[398,84968,415],{"class":408},[398,84970,84971,84973,84975],{"class":400,"line":33454},[398,84972,52610],{"class":408},[398,84974,52006],{"class":51493},[398,84976,51500],{"class":408},[398,84978,84979,84981,84983],{"class":400,"line":33464},[398,84980,51978],{"class":408},[398,84982,51993],{"class":51493},[398,84984,51500],{"class":408},[398,84986,84987],{"class":400,"line":33469},[398,84988,2676],{"emptyLinePlaceholder":328},[398,84990,84991,84993,84995],{"class":400,"line":33475},[398,84992,51978],{"class":408},[398,84994,50828],{"class":51493},[398,84996,51500],{"class":408},[343,84998,85000],{"id":84999},"_411-编程思想","4.11 编程思想",[14,85002,85004],{"id":85003},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,85006,85007,85010],{},[23,85008,85009],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,85012,85013],{},"调用就可以了",[19,85015,85016],{},[1738,85017],{"alt":316,"src":85018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[14,85020,85022],{"id":85021},"_4112-面向对象","4.11.2 面向对象",[19,85024,85025],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,85027,85028],{},[1738,85029],{"alt":316,"src":85030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,85032,85033],{},"面向对象的特性：",[67,85035,85036,85039,85042],{},[41,85037,85038],{},"封装性",[41,85040,85041],{},"继承性",[41,85043,85044],{},"多态性",[14,85046,85048],{"id":85047},"_4113-两者比较","4.11.3 两者比较",[19,85050,85051],{},[1738,85052],{"alt":316,"src":85053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[343,85055,85057],{"id":85056},"_412-构造函数回顾","4.12 构造函数回顾",[19,85059,85060],{},[1738,85061],{"alt":316,"src":85062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,85064,85065],{},[1738,85066],{"alt":316,"src":85067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,85069,85070],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,85072,85073],{},[1738,85074],{"alt":316,"src":85075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[343,85077,85079],{"id":85078},"_413-原型","4.13 原型",[14,85081,85083],{"id":85082},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,85085,85086],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,85088,85089],{},[1738,85090],{"alt":316,"src":85091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,85093,85094],{},[1738,85095],{"alt":316,"src":85096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,85098,85099],{},"原型是构造函数的属性，它也是一个对象",[19,85101,85102],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,85104,85105],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[389,85107,85109],{"className":53260,"code":85108,"language":53262,"meta":316,"style":316},"\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",[395,85110,85111,85119,85124,85132,85137,85142,85147,85152,85157,85161,85165,85169,85174,85179,85183,85188,85193,85198,85203,85208,85212,85220],{"__ignoreMap":316},[398,85112,85113,85115,85117],{"class":400,"line":401},[398,85114,1312],{"class":408},[398,85116,51993],{"class":51493},[398,85118,51500],{"class":408},[398,85120,85121],{"class":400,"line":317},[398,85122,85123],{"class":467},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[398,85125,85126,85128,85130],{"class":400,"line":320},[398,85127,52337],{"class":408},[398,85129,52006],{"class":51493},[398,85131,51500],{"class":408},[398,85133,85134],{"class":400,"line":1470},[398,85135,85136],{"class":408},"    function Star(uname, age) {\n",[398,85138,85139],{"class":400,"line":1476},[398,85140,85141],{"class":408},"      this.uname = uname,\n",[398,85143,85144],{"class":400,"line":1490},[398,85145,85146],{"class":408},"        this.age = age\n",[398,85148,85149],{"class":400,"line":1496},[398,85150,85151],{"class":408},"      \u002F\u002F this.sing = function () {\n",[398,85153,85154],{"class":400,"line":1587},[398,85155,85156],{"class":408},"      \u002F\u002F   console.log('唱歌')\n",[398,85158,85159],{"class":400,"line":1593},[398,85160,2676],{"emptyLinePlaceholder":328},[398,85162,85163],{"class":400,"line":1605},[398,85164,60230],{"class":408},[398,85166,85167],{"class":400,"line":1888},[398,85168,2463],{"class":408},[398,85170,85171],{"class":400,"line":1893},[398,85172,85173],{"class":408},"    Star.prototype.sing = function () {\n",[398,85175,85176],{"class":400,"line":1899},[398,85177,85178],{"class":408},"      console.log('唱歌')\n",[398,85180,85181],{"class":400,"line":1904},[398,85182,2463],{"class":408},[398,85184,85185],{"class":400,"line":1918},[398,85186,85187],{"class":408},"    \u002F\u002F console.dir(Star.prototype)\n",[398,85189,85190],{"class":400,"line":1923},[398,85191,85192],{"class":408},"    const pink = new Star('pink', 18)\n",[398,85194,85195],{"class":400,"line":1929},[398,85196,85197],{"class":408},"    const red = new Star('red', 20)\n",[398,85199,85200],{"class":400,"line":1950},[398,85201,85202],{"class":408},"    pink.sing()\n",[398,85204,85205],{"class":400,"line":1955},[398,85206,85207],{"class":408},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[398,85209,85210],{"class":400,"line":1969},[398,85211,2676],{"emptyLinePlaceholder":328},[398,85213,85214,85216,85218],{"class":400,"line":1974},[398,85215,52610],{"class":408},[398,85217,52006],{"class":51493},[398,85219,51500],{"class":408},[398,85221,85222,85224,85226],{"class":400,"line":2003},[398,85223,51978],{"class":408},[398,85225,51993],{"class":51493},[398,85227,51500],{"class":408},[19,85229,85230],{},[1738,85231],{"alt":316,"src":85232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[389,85234,85236],{"className":53260,"code":85235,"language":53262,"meta":316,"style":316},"\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",[395,85237,85238,85246,85254,85259,85264,85269,85274,85278,85283,85288,85293,85297,85302,85306,85310,85315,85319,85327],{"__ignoreMap":316},[398,85239,85240,85242,85244],{"class":400,"line":401},[398,85241,1312],{"class":408},[398,85243,51993],{"class":51493},[398,85245,51500],{"class":408},[398,85247,85248,85250,85252],{"class":400,"line":317},[398,85249,52337],{"class":408},[398,85251,52006],{"class":51493},[398,85253,51500],{"class":408},[398,85255,85256],{"class":400,"line":320},[398,85257,85258],{"class":408},"    let that\n",[398,85260,85261],{"class":400,"line":1470},[398,85262,85263],{"class":408},"    function Star(uname) {\n",[398,85265,85266],{"class":400,"line":1476},[398,85267,85268],{"class":408},"      this.uname = uname\n",[398,85270,85271],{"class":400,"line":1490},[398,85272,85273],{"class":408},"      that = this\n",[398,85275,85276],{"class":400,"line":1496},[398,85277,2463],{"class":408},[398,85279,85280],{"class":400,"line":1587},[398,85281,85282],{"class":408},"    \u002F\u002F 实例对象是 ldh\n",[398,85284,85285],{"class":400,"line":1593},[398,85286,85287],{"class":408},"    const ldh = new Star('刘德华')\n",[398,85289,85290],{"class":400,"line":1605},[398,85291,85292],{"class":408},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[398,85294,85295],{"class":400,"line":1888},[398,85296,2676],{"emptyLinePlaceholder":328},[398,85298,85299],{"class":400,"line":1893},[398,85300,85301],{"class":408},"    Star.sing = function () {\n",[398,85303,85304],{"class":400,"line":1899},[398,85305,85178],{"class":408},[398,85307,85308],{"class":400,"line":1904},[398,85309,2463],{"class":408},[398,85311,85312],{"class":400,"line":1918},[398,85313,85314],{"class":408},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[398,85316,85317],{"class":400,"line":1923},[398,85318,2676],{"emptyLinePlaceholder":328},[398,85320,85321,85323,85325],{"class":400,"line":1929},[398,85322,52610],{"class":408},[398,85324,52006],{"class":51493},[398,85326,51500],{"class":408},[398,85328,85329,85331,85333],{"class":400,"line":1950},[398,85330,51978],{"class":408},[398,85332,51993],{"class":51493},[398,85334,51500],{"class":408},[19,85336,85337],{},"构造函数的this指向的是实例对象；",[19,85339,85340],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[14,85342,85344],{"id":85343},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,85346,85347],{},[1738,85348],{"alt":316,"src":85349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[389,85351,85353],{"className":53260,"code":85352,"language":53262,"meta":316,"style":316},"\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",[395,85354,85355,85363,85371,85376,85381,85386,85391,85396,85401,85406,85411,85416,85421,85425,85430,85435,85440,85445,85449,85454,85459,85464,85469,85473,85478,85483,85488,85493,85497,85502,85506,85514],{"__ignoreMap":316},[398,85356,85357,85359,85361],{"class":400,"line":401},[398,85358,1312],{"class":408},[398,85360,51993],{"class":51493},[398,85362,51500],{"class":408},[398,85364,85365,85367,85369],{"class":400,"line":317},[398,85366,52337],{"class":408},[398,85368,52006],{"class":51493},[398,85370,51500],{"class":408},[398,85372,85373],{"class":400,"line":320},[398,85374,85375],{"class":408},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[398,85377,85378],{"class":400,"line":1470},[398,85379,85380],{"class":408},"    const arr = [1, 2, 3]\n",[398,85382,85383],{"class":400,"line":1476},[398,85384,85385],{"class":408},"    \u002F\u002F 自己定义数组的扩展方法\n",[398,85387,85388],{"class":400,"line":1490},[398,85389,85390],{"class":408},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[398,85392,85393],{"class":400,"line":1496},[398,85394,85395],{"class":408},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[398,85397,85398],{"class":400,"line":1587},[398,85399,85400],{"class":408},"    \u002F\u002F ①.最大值\n",[398,85402,85403],{"class":400,"line":1593},[398,85404,85405],{"class":408},"    Array.prototype.max = function () {\n",[398,85407,85408],{"class":400,"line":1605},[398,85409,85410],{"class":408},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[398,85412,85413],{"class":400,"line":1888},[398,85414,85415],{"class":408},"      return Math.max(...this)\n",[398,85417,85418],{"class":400,"line":1893},[398,85419,85420],{"class":408},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[398,85422,85423],{"class":400,"line":1899},[398,85424,2463],{"class":408},[398,85426,85427],{"class":400,"line":1904},[398,85428,85429],{"class":408},"    console.log(arr.max())\n",[398,85431,85432],{"class":400,"line":1918},[398,85433,85434],{"class":408},"    \u002F\u002F ②最小值\n",[398,85436,85437],{"class":400,"line":1923},[398,85438,85439],{"class":408},"    Array.prototype.min = function () {\n",[398,85441,85442],{"class":400,"line":1929},[398,85443,85444],{"class":408},"      return Math.min(...this)\n",[398,85446,85447],{"class":400,"line":1950},[398,85448,2463],{"class":408},[398,85450,85451],{"class":400,"line":1955},[398,85452,85453],{"class":408},"    console.log(arr.min())\n",[398,85455,85456],{"class":400,"line":1969},[398,85457,85458],{"class":408},"    \u002F\u002F③求和\n",[398,85460,85461],{"class":400,"line":1974},[398,85462,85463],{"class":408},"    Array.prototype.sum = function () {\n",[398,85465,85466],{"class":400,"line":2003},[398,85467,85468],{"class":408},"      return this.reduce((prev, current) => prev + current, 0)\n",[398,85470,85471],{"class":400,"line":2008},[398,85472,2463],{"class":408},[398,85474,85475],{"class":400,"line":2025},[398,85476,85477],{"class":408},"    console.log(arr.sum())\n",[398,85479,85480],{"class":400,"line":2030},[398,85481,85482],{"class":408},"    \u002F\u002F ③排序\n",[398,85484,85485],{"class":400,"line":2035},[398,85486,85487],{"class":408},"    Array.prototype.rever = function () {\n",[398,85489,85490],{"class":400,"line":2040},[398,85491,85492],{"class":408},"      return this.reverse()\n",[398,85494,85495],{"class":400,"line":2054},[398,85496,2463],{"class":408},[398,85498,85499],{"class":400,"line":2059},[398,85500,85501],{"class":408},"    console.log(arr.rever())\n",[398,85503,85504],{"class":400,"line":2853},[398,85505,2676],{"emptyLinePlaceholder":328},[398,85507,85508,85510,85512],{"class":400,"line":2867},[398,85509,52610],{"class":408},[398,85511,52006],{"class":51493},[398,85513,51500],{"class":408},[398,85515,85516,85518,85520],{"class":400,"line":2875},[398,85517,51978],{"class":408},[398,85519,51993],{"class":51493},[398,85521,51500],{"class":408},[19,85523,85524],{},[1738,85525],{"alt":316,"src":85526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[14,85528,85530],{"id":85529},"_4133-constructor-属性","4.13.3 constructor 属性",[19,85532,85533],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,85535,85536],{},[1738,85537],{"alt":316,"src":85538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[389,85540,85542],{"className":53260,"code":85541,"language":53262,"meta":316,"style":316},"\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",[395,85543,85544,85552,85560,85565,85570,85574,85579,85584,85589,85597],{"__ignoreMap":316},[398,85545,85546,85548,85550],{"class":400,"line":401},[398,85547,1312],{"class":408},[398,85549,51993],{"class":51493},[398,85551,51500],{"class":408},[398,85553,85554,85556,85558],{"class":400,"line":317},[398,85555,52337],{"class":408},[398,85557,52006],{"class":51493},[398,85559,51500],{"class":408},[398,85561,85562],{"class":400,"line":320},[398,85563,85564],{"class":408},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[398,85566,85567],{"class":400,"line":1470},[398,85568,85569],{"class":408},"    function Star() {\n",[398,85571,85572],{"class":400,"line":1476},[398,85573,2463],{"class":408},[398,85575,85576],{"class":400,"line":1490},[398,85577,85578],{"class":408},"    const ldh = new Star()\n",[398,85580,85581],{"class":400,"line":1496},[398,85582,85583],{"class":408},"    console.log(Star.prototype)\n",[398,85585,85586],{"class":400,"line":1587},[398,85587,85588],{"class":408},"    console.log(Star.prototype.constructor === Star)\n",[398,85590,85591,85593,85595],{"class":400,"line":1593},[398,85592,52610],{"class":408},[398,85594,52006],{"class":51493},[398,85596,51500],{"class":408},[398,85598,85599,85601,85603],{"class":400,"line":1605},[398,85600,51978],{"class":408},[398,85602,51993],{"class":51493},[398,85604,51500],{"class":408},[19,85606,85607],{},[1738,85608],{"alt":316,"src":85609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,85611,85612],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[389,85614,85616],{"className":53260,"code":85615,"language":53262,"meta":316,"style":316},"  \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",[395,85617,85618,85626,85630,85634,85638,85643,85648,85653,85657,85662,85667,85672,85677,85682,85687,85691,85695,85700,85705,85710,85714,85719,85724,85728,85732,85736],{"__ignoreMap":316},[398,85619,85620,85622,85624],{"class":400,"line":401},[398,85621,52337],{"class":408},[398,85623,52006],{"class":51493},[398,85625,51500],{"class":408},[398,85627,85628],{"class":400,"line":317},[398,85629,85564],{"class":408},[398,85631,85632],{"class":400,"line":320},[398,85633,85569],{"class":408},[398,85635,85636],{"class":400,"line":1470},[398,85637,2463],{"class":408},[398,85639,85640],{"class":400,"line":1476},[398,85641,85642],{"class":408},"    \u002F\u002F const ldh = new Star()\n",[398,85644,85645],{"class":400,"line":1490},[398,85646,85647],{"class":408},"    \u002F\u002F console.log(Star.prototype)\n",[398,85649,85650],{"class":400,"line":1496},[398,85651,85652],{"class":408},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[398,85654,85655],{"class":400,"line":1587},[398,85656,2676],{"emptyLinePlaceholder":328},[398,85658,85659],{"class":400,"line":1593},[398,85660,85661],{"class":408},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[398,85663,85664],{"class":400,"line":1605},[398,85665,85666],{"class":408},"    \u002F\u002F Star.prototype.sing = function () {\n",[398,85668,85669],{"class":400,"line":1888},[398,85670,85671],{"class":408},"    \u002F\u002F   console.log('唱歌')\n",[398,85673,85674],{"class":400,"line":1893},[398,85675,85676],{"class":408},"    \u002F\u002F }\n",[398,85678,85679],{"class":400,"line":1899},[398,85680,85681],{"class":408},"    \u002F\u002F Star.prototype.dance = function () {\n",[398,85683,85684],{"class":400,"line":1904},[398,85685,85686],{"class":408},"    \u002F\u002F   console.log('跳舞')\n",[398,85688,85689],{"class":400,"line":1918},[398,85690,85676],{"class":408},[398,85692,85693],{"class":400,"line":1923},[398,85694,85583],{"class":408},[398,85696,85697],{"class":400,"line":1929},[398,85698,85699],{"class":408},"    Star.prototype = {\n",[398,85701,85702],{"class":400,"line":1950},[398,85703,85704],{"class":408},"      sing: function () {\n",[398,85706,85707],{"class":400,"line":1955},[398,85708,85709],{"class":408},"        console.log('唱歌')\n",[398,85711,85712],{"class":400,"line":1969},[398,85713,78085],{"class":408},[398,85715,85716],{"class":400,"line":1974},[398,85717,85718],{"class":408},"      dance: function () {\n",[398,85720,85721],{"class":400,"line":2003},[398,85722,85723],{"class":408},"        console.log('跳舞')\n",[398,85725,85726],{"class":400,"line":2008},[398,85727,52591],{"class":408},[398,85729,85730],{"class":400,"line":2025},[398,85731,2463],{"class":408},[398,85733,85734],{"class":400,"line":2030},[398,85735,85583],{"class":408},[398,85737,85738,85740,85742],{"class":400,"line":2035},[398,85739,52610],{"class":408},[398,85741,52006],{"class":51493},[398,85743,51500],{"class":408},[19,85745,85746],{},"进行输出结果后会发现：",[19,85748,85749],{},[1738,85750],{"alt":316,"src":85751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,85753,85754],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,85756,85757],{},"所以，要重新指回创造这个原型对象的构造函数",[389,85759,85761],{"className":71406,"code":85760,"language":71408,"meta":316,"style":316},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[395,85762,85763,85777,85782,85787,85798,85811,85816,85827,85841,85845],{"__ignoreMap":316},[398,85764,85765,85768,85770,85773,85775],{"class":400,"line":401},[398,85766,85767],{"class":457},"Star",[398,85769,960],{"class":408},[398,85771,85772],{"class":457},"prototype",[398,85774,13841],{"class":404},[398,85776,15849],{"class":408},[398,85778,85779],{"class":400,"line":317},[398,85780,85781],{"class":467},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[398,85783,85784],{"class":400,"line":320},[398,85785,85786],{"class":408},"  constructor: Star,\n",[398,85788,85789,85792,85794,85796],{"class":400,"line":1470},[398,85790,85791],{"class":2239},"  sing",[398,85793,51630],{"class":408},[398,85795,54642],{"class":404},[398,85797,54645],{"class":408},[398,85799,85800,85802,85804,85806,85809],{"class":400,"line":1476},[398,85801,73946],{"class":408},[398,85803,58440],{"class":2239},[398,85805,409],{"class":408},[398,85807,85808],{"class":513},"'唱歌'",[398,85810,415],{"class":408},[398,85812,85813],{"class":400,"line":1490},[398,85814,85815],{"class":408},"   },\n",[398,85817,85818,85821,85823,85825],{"class":400,"line":1496},[398,85819,85820],{"class":2239},"   dance",[398,85822,51630],{"class":408},[398,85824,54642],{"class":404},[398,85826,54645],{"class":408},[398,85828,85829,85832,85834,85836,85839],{"class":400,"line":1587},[398,85830,85831],{"class":408},"     console.",[398,85833,58440],{"class":2239},[398,85835,409],{"class":408},[398,85837,85838],{"class":513},"'跳舞'",[398,85840,415],{"class":408},[398,85842,85843],{"class":400,"line":1593},[398,85844,4585],{"class":408},[398,85846,85847],{"class":400,"line":1605},[398,85848,1841],{"class":408},[19,85850,85851],{},[1738,85852],{"alt":316,"src":85853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,85855,85856],{},"总结1：",[19,85858,85859],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,85861,85862],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,85864,85865],{},"constructor指的是他的来源",[19,85867,85868],{},[1738,85869],{"alt":316,"src":85870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,85872,85873],{},[1738,85874],{"alt":316,"src":85875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,85877,85878],{},"总结2：",[19,85880,85881],{},[1738,85882],{"alt":316,"src":85883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,85885,85886],{},[1738,85887],{"alt":316,"src":85888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,85890,85891],{},[1738,85892],{"alt":316,"src":85893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[14,85895,85897],{"id":85896},"_4134-对象原型","4.13.4 对象原型",[19,85899,85900],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,85902,85903],{},"对象原型就是__proto__这个属性",[19,85905,85906],{},[1738,85907],{"alt":316,"src":85908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,85910,85911],{},[1738,85912],{"alt":316,"src":85913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,85915,85916],{},[1738,85917],{"alt":316,"src":85918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,85920,85921],{},[1738,85922],{"alt":316,"src":85923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[389,85925,85927],{"className":53260,"code":85926,"language":53262,"meta":316,"style":316},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[395,85928,85929,85937,85945,85949,85953,85957,85962,85970],{"__ignoreMap":316},[398,85930,85931,85933,85935],{"class":400,"line":401},[398,85932,1312],{"class":408},[398,85934,51993],{"class":51493},[398,85936,51500],{"class":408},[398,85938,85939,85941,85943],{"class":400,"line":317},[398,85940,52337],{"class":408},[398,85942,52006],{"class":51493},[398,85944,51500],{"class":408},[398,85946,85947],{"class":400,"line":320},[398,85948,85569],{"class":408},[398,85950,85951],{"class":400,"line":1470},[398,85952,2463],{"class":408},[398,85954,85955],{"class":400,"line":1476},[398,85956,85578],{"class":408},[398,85958,85959],{"class":400,"line":1490},[398,85960,85961],{"class":408},"    console.log(ldh)\n",[398,85963,85964,85966,85968],{"class":400,"line":1496},[398,85965,52610],{"class":408},[398,85967,52006],{"class":51493},[398,85969,51500],{"class":408},[398,85971,85972,85974,85976],{"class":400,"line":1587},[398,85973,51978],{"class":408},[398,85975,51993],{"class":51493},[398,85977,51500],{"class":408},[19,85979,85980],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,85982,85983],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,85985,85986],{},[1738,85987],{"alt":316,"src":85988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,85990,85991],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,85993,85994],{},"对象原型指向原型对象",[19,85996,85997],{},[1738,85998],{"alt":316,"src":85999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,86001,86002],{},[1738,86003],{"alt":316,"src":86004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,86006,86007],{},[1738,86008],{"alt":316,"src":86009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[14,86011,86013],{"id":86012},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,86015,86016],{},[1738,86017],{"alt":316,"src":86018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[38,86020,86021,86024,86027,86030],{},[41,86022,86023],{},"构造函数通过new的形式实例化得到实例对象",[41,86025,86026],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[41,86028,86029],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[41,86031,86032],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,86034,86035],{},[1738,86036],{"alt":316,"src":86037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,86039,86040],{},"题目梳理：",[19,86042,86043],{},[1738,86044],{"alt":316,"src":86045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[14,86047,86049],{"id":86048},"_4136-原型继承","4.13.6 原型继承",[19,86051,86052],{},[1738,86053],{"alt":316,"src":86054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,86056,86057],{},[1738,86058],{"alt":316,"src":86059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,86061,86062],{},[1738,86063],{"alt":316,"src":86064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,86066,86067],{},[1738,86068],{"alt":316,"src":86069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,86071,86072],{},[1738,86073],{"alt":316,"src":86074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,86076,86077],{},[1738,86078],{"alt":316,"src":86079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,86081,86082],{},[1738,86083],{"alt":316,"src":86084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,86086,86087],{},[1738,86088],{"alt":316,"src":86089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,86091,86092],{},"回顾：构造函数每次new得到对象都是不同的",[14,86094,86096],{"id":86095},"_4137-原型链","4.13.7 原型链",[19,86098,86099],{},[1738,86100],{"alt":316,"src":86101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,86103,86104],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,86106,86107],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,86109,86110],{},"大哥是Object",[19,86112,86113],{},[1738,86114],{"alt":316,"src":86115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,86117,86118],{},[1738,86119],{"alt":316,"src":86120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,86122,86123],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,86125,86126],{},"万物皆对象",[14,86128,86130],{"id":86129},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,86132,86133],{},"模态框",[19,86135,86136],{},"以后遇见这个效果直接使用这个就行",[19,86138,86139],{},[1738,86140],{"alt":316,"src":86141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,86143,86144],{},[1738,86145],{"alt":316,"src":86146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,86148,86149],{},[1738,86150],{"alt":316,"src":86151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,86153,86154],{},[1738,86155],{"alt":316,"src":86156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,86158,86159],{},"补充知识点：",[38,86161,86162],{},[41,86163,86164],{},"append()",[19,86166,86167],{},[1738,86168],{"alt":316,"src":86169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[389,86171,86173],{"className":50826,"code":86172,"language":50828,"meta":316,"style":316},"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",[395,86174,86175,86180,86185,86190,86194,86198,86202,86207,86212,86217,86221],{"__ignoreMap":316},[398,86176,86177],{"class":400,"line":401},[398,86178,86179],{"class":408},"append(param1)\n",[398,86181,86182],{"class":400,"line":317},[398,86183,86184],{"class":408},"append(param1, param2)\n",[398,86186,86187],{"class":400,"line":320},[398,86188,86189],{"class":408},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[398,86191,86192],{"class":400,"line":1470},[398,86193,2676],{"emptyLinePlaceholder":328},[398,86195,86196],{"class":400,"line":1476},[398,86197,2676],{"emptyLinePlaceholder":328},[398,86199,86200],{"class":400,"line":1490},[398,86201,2676],{"emptyLinePlaceholder":328},[398,86203,86204],{"class":400,"line":1496},[398,86205,86206],{"class":408},"let div = document.createElement(\"div\");\n",[398,86208,86209],{"class":400,"line":1587},[398,86210,86211],{"class":408},"let p = document.createElement(\"p\");\n",[398,86213,86214],{"class":400,"line":1593},[398,86215,86216],{"class":408},"div.append(p);\n",[398,86218,86219],{"class":400,"line":1605},[398,86220,2676],{"emptyLinePlaceholder":328},[398,86222,86223,86226,86228],{"class":400,"line":1888},[398,86224,86225],{"class":408},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[398,86227,19],{"class":51493},[398,86229,86230],{"class":408},"> ]\n",[38,86232,86233],{"start":317},[41,86234,86235],{},"remove()",[19,86237,86238],{},"自己删自己",[19,86240,86241],{},[1738,86242],{"alt":316,"src":86243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[389,86245,86247],{"className":50826,"code":86246,"language":50828,"meta":316,"style":316},"\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",[395,86248,86249,86259,86273,86277,86285,86299,86319,86331,86339,86346,86358,86371,86406,86418,86429,86441,86453,86465,86492,86502,86506,86510,86519,86531,86545,86555,86567,86571,86575,86585,86596,86606,86616,86629,86642,86652,86656,86660,86669,86679,86691,86695,86699,86708,86718,86728,86740,86744,86748,86758,86774,86785,86795,86805,86817,86829,86841,86845,86849,86862,86873,86877,86885,86893,86897,86905,86925,86945,86953,86958,86984,86989,86994,87013,87018,87030,87035,87046,87056,87066,87071,87076,87080,87085,87090,87095,87115,87120,87140,87145,87159,87164,87169,87174,87190,87194,87199,87228,87233,87238,87243,87254,87258,87262,87266,87271,87296,87301,87326,87331,87340,87344,87349,87374,87378,87403,87407,87416,87420,87425,87443,87453,87457,87465,87473,87477],{"__ignoreMap":316},[398,86250,86251,86253,86255,86257],{"class":400,"line":401},[398,86252,51490],{"class":408},[398,86254,51494],{"class":51493},[398,86256,51497],{"class":2239},[398,86258,51500],{"class":408},[398,86260,86261,86263,86265,86267,86269,86271],{"class":400,"line":317},[398,86262,1312],{"class":408},[398,86264,50828],{"class":51493},[398,86266,51509],{"class":2239},[398,86268,454],{"class":408},[398,86270,51514],{"class":513},[398,86272,51500],{"class":408},[398,86274,86275],{"class":400,"line":320},[398,86276,2676],{"emptyLinePlaceholder":328},[398,86278,86279,86281,86283],{"class":400,"line":1470},[398,86280,1312],{"class":408},[398,86282,51527],{"class":51493},[398,86284,51500],{"class":408},[398,86286,86287,86289,86291,86293,86295,86297],{"class":400,"line":1476},[398,86288,52337],{"class":408},[398,86290,51537],{"class":51493},[398,86292,51540],{"class":2239},[398,86294,454],{"class":408},[398,86296,51545],{"class":513},[398,86298,51500],{"class":408},[398,86300,86301,86303,86305,86307,86309,86311,86313,86315,86317],{"class":400,"line":1490},[398,86302,52337],{"class":408},[398,86304,51537],{"class":51493},[398,86306,15197],{"class":2239},[398,86308,454],{"class":408},[398,86310,51584],{"class":513},[398,86312,51564],{"class":2239},[398,86314,454],{"class":408},[398,86316,51591],{"class":513},[398,86318,51500],{"class":408},[398,86320,86321,86323,86325,86327,86329],{"class":400,"line":1496},[398,86322,52337],{"class":408},[398,86324,51600],{"class":51493},[398,86326,51603],{"class":408},[398,86328,51600],{"class":51493},[398,86330,51500],{"class":408},[398,86332,86333,86335,86337],{"class":400,"line":1587},[398,86334,52337],{"class":408},[398,86336,5403],{"class":51493},[398,86338,51500],{"class":408},[398,86340,86341,86344],{"class":400,"line":1593},[398,86342,86343],{"class":2239},"    .modal",[398,86345,15849],{"class":408},[398,86347,86348,86350,86352,86354,86356],{"class":400,"line":1605},[398,86349,54964],{"class":457},[398,86351,51630],{"class":408},[398,86353,4249],{"class":457},[398,86355,51685],{"class":404},[398,86357,1566],{"class":408},[398,86359,86360,86363,86365,86367,86369],{"class":400,"line":1888},[398,86361,86362],{"class":457},"      min-height",[398,86364,51630],{"class":408},[398,86366,713],{"class":457},[398,86368,51685],{"class":404},[398,86370,1566],{"class":408},[398,86372,86373,86375,86377,86379,86381,86383,86385,86387,86389,86391,86393,86395,86397,86399,86401,86404],{"class":400,"line":1893},[398,86374,78943],{"class":457},[398,86376,51630],{"class":408},[398,86378,593],{"class":457},[398,86380,4369],{"class":457},[398,86382,2314],{"class":457},[398,86384,51685],{"class":404},[398,86386,78960],{"class":457},[398,86388,409],{"class":408},[398,86390,593],{"class":457},[398,86392,12712],{"class":408},[398,86394,593],{"class":457},[398,86396,12712],{"class":408},[398,86398,593],{"class":457},[398,86400,12712],{"class":408},[398,86402,86403],{"class":457},"0.1",[398,86405,2995],{"class":408},[398,86407,86408,86410,86412,86414,86416],{"class":400,"line":1899},[398,86409,55327],{"class":457},[398,86411,51630],{"class":408},[398,86413,695],{"class":457},[398,86415,51685],{"class":404},[398,86417,1566],{"class":408},[398,86419,86420,86422,86424,86427],{"class":400,"line":1904},[398,86421,54952],{"class":457},[398,86423,51630],{"class":408},[398,86425,86426],{"class":457},"fixed",[398,86428,1566],{"class":408},[398,86430,86431,86434,86436,86439],{"class":400,"line":1918},[398,86432,86433],{"class":457},"      z-index",[398,86435,51630],{"class":408},[398,86437,86438],{"class":457},"999",[398,86440,1566],{"class":408},[398,86442,86443,86445,86447,86449,86451],{"class":400,"line":1923},[398,86444,55031],{"class":457},[398,86446,51630],{"class":408},[398,86448,1058],{"class":457},[398,86450,730],{"class":404},[398,86452,1566],{"class":408},[398,86454,86455,86457,86459,86461,86463],{"class":400,"line":1929},[398,86456,55140],{"class":457},[398,86458,51630],{"class":408},[398,86460,1058],{"class":457},[398,86462,730],{"class":404},[398,86464,1566],{"class":408},[398,86466,86467,86469,86471,86473,86475,86478,86480,86482,86484,86486,86488,86490],{"class":400,"line":1950},[398,86468,78984],{"class":457},[398,86470,51630],{"class":408},[398,86472,78989],{"class":457},[398,86474,409],{"class":408},[398,86476,86477],{"class":457},"-50",[398,86479,730],{"class":404},[398,86481,12712],{"class":408},[398,86483,86477],{"class":457},[398,86485,730],{"class":404},[398,86487,12712],{"class":408},[398,86489,593],{"class":457},[398,86491,2995],{"class":408},[398,86493,86494,86496,86498,86500],{"class":400,"line":1955},[398,86495,55077],{"class":457},[398,86497,51630],{"class":408},[398,86499,61035],{"class":457},[398,86501,1566],{"class":408},[398,86503,86504],{"class":400,"line":1969},[398,86505,2463],{"class":408},[398,86507,86508],{"class":400,"line":1974},[398,86509,2676],{"emptyLinePlaceholder":328},[398,86511,86512,86514,86517],{"class":400,"line":2003},[398,86513,86343],{"class":2239},[398,86515,86516],{"class":2239}," .header",[398,86518,15849],{"class":408},[398,86520,86521,86523,86525,86527,86529],{"class":400,"line":2008},[398,86522,57552],{"class":457},[398,86524,51630],{"class":408},[398,86526,803],{"class":457},[398,86528,51685],{"class":404},[398,86530,1566],{"class":408},[398,86532,86533,86535,86537,86539,86541,86543],{"class":400,"line":2025},[398,86534,54888],{"class":457},[398,86536,51630],{"class":408},[398,86538,593],{"class":457},[398,86540,2314],{"class":457},[398,86542,51685],{"class":404},[398,86544,1566],{"class":408},[398,86546,86547,86549,86551,86553],{"class":400,"line":2030},[398,86548,54952],{"class":457},[398,86550,51630],{"class":408},[398,86552,54957],{"class":457},[398,86554,1566],{"class":408},[398,86556,86557,86559,86561,86563,86565],{"class":400,"line":2035},[398,86558,55115],{"class":457},[398,86560,51630],{"class":408},[398,86562,1102],{"class":457},[398,86564,51685],{"class":404},[398,86566,1566],{"class":408},[398,86568,86569],{"class":400,"line":2040},[398,86570,2463],{"class":408},[398,86572,86573],{"class":400,"line":2054},[398,86574,2676],{"emptyLinePlaceholder":328},[398,86576,86577,86579,86581,86583],{"class":400,"line":2059},[398,86578,86343],{"class":2239},[398,86580,86516],{"class":2239},[398,86582,3308],{"class":51493},[398,86584,15849],{"class":408},[398,86586,86587,86590,86592,86594],{"class":400,"line":2853},[398,86588,86589],{"class":457},"      font-style",[398,86591,51630],{"class":408},[398,86593,64034],{"class":457},[398,86595,1566],{"class":408},[398,86597,86598,86600,86602,86604],{"class":400,"line":2867},[398,86599,57609],{"class":457},[398,86601,51630],{"class":408},[398,86603,62263],{"class":457},[398,86605,1566],{"class":408},[398,86607,86608,86610,86612,86614],{"class":400,"line":2875},[398,86609,54952],{"class":457},[398,86611,51630],{"class":408},[398,86613,55024],{"class":457},[398,86615,1566],{"class":408},[398,86617,86618,86621,86623,86625,86627],{"class":400,"line":2880},[398,86619,86620],{"class":457},"      right",[398,86622,51630],{"class":408},[398,86624,977],{"class":457},[398,86626,51685],{"class":404},[398,86628,1566],{"class":408},[398,86630,86631,86633,86635,86638,86640],{"class":400,"line":2886},[398,86632,55140],{"class":457},[398,86634,51630],{"class":408},[398,86636,86637],{"class":457},"-2",[398,86639,51685],{"class":404},[398,86641,1566],{"class":408},[398,86643,86644,86646,86648,86650],{"class":400,"line":2892},[398,86645,62218],{"class":457},[398,86647,51630],{"class":408},[398,86649,62223],{"class":457},[398,86651,1566],{"class":408},[398,86653,86654],{"class":400,"line":2897},[398,86655,2463],{"class":408},[398,86657,86658],{"class":400,"line":8225},[398,86659,2676],{"emptyLinePlaceholder":328},[398,86661,86662,86664,86667],{"class":400,"line":8249},[398,86663,86343],{"class":2239},[398,86665,86666],{"class":2239}," .body",[398,86668,15849],{"class":408},[398,86670,86671,86673,86675,86677],{"class":400,"line":8254},[398,86672,57479],{"class":457},[398,86674,51630],{"class":408},[398,86676,51785],{"class":457},[398,86678,1566],{"class":408},[398,86680,86681,86683,86685,86687,86689],{"class":400,"line":8260},[398,86682,54888],{"class":457},[398,86684,51630],{"class":408},[398,86686,848],{"class":457},[398,86688,51685],{"class":404},[398,86690,1566],{"class":408},[398,86692,86693],{"class":400,"line":8287},[398,86694,2463],{"class":408},[398,86696,86697],{"class":400,"line":8292},[398,86698,2676],{"emptyLinePlaceholder":328},[398,86700,86701,86703,86706],{"class":400,"line":8298},[398,86702,86343],{"class":2239},[398,86704,86705],{"class":2239}," .footer",[398,86707,15849],{"class":408},[398,86709,86710,86712,86714,86716],{"class":400,"line":8310},[398,86711,55202],{"class":457},[398,86713,51630],{"class":408},[398,86715,51670],{"class":457},[398,86717,1566],{"class":408},[398,86719,86720,86722,86724,86726],{"class":400,"line":8322},[398,86721,55213],{"class":457},[398,86723,51630],{"class":408},[398,86725,51773],{"class":457},[398,86727,1566],{"class":408},[398,86729,86730,86732,86734,86736,86738],{"class":400,"line":8334},[398,86731,54888],{"class":457},[398,86733,51630],{"class":408},[398,86735,848],{"class":457},[398,86737,51685],{"class":404},[398,86739,1566],{"class":408},[398,86741,86742],{"class":400,"line":9993},[398,86743,2463],{"class":408},[398,86745,86746],{"class":400,"line":10018},[398,86747,2676],{"emptyLinePlaceholder":328},[398,86749,86750,86752,86754,86756],{"class":400,"line":10041},[398,86751,86343],{"class":2239},[398,86753,86705],{"class":2239},[398,86755,1674],{"class":51493},[398,86757,15849],{"class":408},[398,86759,86760,86762,86764,86766,86768,86770,86772],{"class":400,"line":10065},[398,86761,54888],{"class":457},[398,86763,51630],{"class":408},[398,86765,480],{"class":457},[398,86767,51685],{"class":404},[398,86769,2359],{"class":457},[398,86771,51685],{"class":404},[398,86773,1566],{"class":408},[398,86775,86776,86778,86780,86783],{"class":400,"line":10070},[398,86777,61914],{"class":457},[398,86779,51630],{"class":408},[398,86781,86782],{"class":457},"#ccc",[398,86784,1566],{"class":408},[398,86786,86787,86789,86791,86793],{"class":400,"line":10075},[398,86788,64163],{"class":457},[398,86790,51630],{"class":408},[398,86792,54930],{"class":457},[398,86794,1566],{"class":408},[398,86796,86797,86799,86801,86803],{"class":400,"line":10080},[398,86798,57609],{"class":457},[398,86800,51630],{"class":408},[398,86802,61035],{"class":457},[398,86804,1566],{"class":408},[398,86806,86807,86809,86811,86813,86815],{"class":400,"line":10089},[398,86808,55327],{"class":457},[398,86810,51630],{"class":408},[398,86812,486],{"class":457},[398,86814,51685],{"class":404},[398,86816,1566],{"class":408},[398,86818,86819,86821,86823,86825,86827],{"class":400,"line":10094},[398,86820,61943],{"class":457},[398,86822,51630],{"class":408},[398,86824,848],{"class":457},[398,86826,51685],{"class":404},[398,86828,1566],{"class":408},[398,86830,86831,86833,86835,86837,86839],{"class":400,"line":10100},[398,86832,55115],{"class":457},[398,86834,51630],{"class":408},[398,86836,951],{"class":457},[398,86838,51685],{"class":404},[398,86840,1566],{"class":408},[398,86842,86843],{"class":400,"line":10121},[398,86844,2463],{"class":408},[398,86846,86847],{"class":400,"line":10127},[398,86848,2676],{"emptyLinePlaceholder":328},[398,86850,86851,86853,86855,86857,86860],{"class":400,"line":10141},[398,86852,86343],{"class":2239},[398,86854,86705],{"class":2239},[398,86856,1674],{"class":51493},[398,86858,86859],{"class":2239},".submit",[398,86861,15849],{"class":408},[398,86863,86864,86866,86868,86871],{"class":400,"line":10147},[398,86865,55077],{"class":457},[398,86867,51630],{"class":408},[398,86869,86870],{"class":457},"#369",[398,86872,1566],{"class":408},[398,86874,86875],{"class":400,"line":10174},[398,86876,2463],{"class":408},[398,86878,86879,86881,86883],{"class":400,"line":10183},[398,86880,52610],{"class":408},[398,86882,5403],{"class":51493},[398,86884,51500],{"class":408},[398,86886,86887,86889,86891],{"class":400,"line":10189},[398,86888,51978],{"class":408},[398,86890,51527],{"class":51493},[398,86892,51500],{"class":408},[398,86894,86895],{"class":400,"line":10197},[398,86896,2676],{"emptyLinePlaceholder":328},[398,86898,86899,86901,86903],{"class":400,"line":10202},[398,86900,1312],{"class":408},[398,86902,51993],{"class":51493},[398,86904,51500],{"class":408},[398,86906,86907,86909,86911,86913,86915,86918,86921,86923],{"class":400,"line":16881},[398,86908,52337],{"class":408},[398,86910,54080],{"class":51493},[398,86912,15236],{"class":2239},[398,86914,454],{"class":408},[398,86916,86917],{"class":513},"\"delete\"",[398,86919,86920],{"class":408},">删除\u003C\u002F",[398,86922,54080],{"class":51493},[398,86924,51500],{"class":408},[398,86926,86927,86929,86931,86933,86935,86938,86941,86943],{"class":400,"line":16887},[398,86928,52337],{"class":408},[398,86930,54080],{"class":51493},[398,86932,15236],{"class":2239},[398,86934,454],{"class":408},[398,86936,86937],{"class":513},"\"login\"",[398,86939,86940],{"class":408},">登录\u003C\u002F",[398,86942,54080],{"class":51493},[398,86944,51500],{"class":408},[398,86946,86947,86949,86951],{"class":400,"line":16910},[398,86948,52337],{"class":408},[398,86950,52006],{"class":51493},[398,86952,51500],{"class":408},[398,86954,86955],{"class":400,"line":16916},[398,86956,86957],{"class":467},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[398,86959,86960,86962,86965,86967,86969,86971,86973,86975,86978,86980,86982],{"class":400,"line":16939},[398,86961,70277],{"class":404},[398,86963,86964],{"class":2239}," Modal",[398,86966,409],{"class":408},[398,86968,51600],{"class":5493},[398,86970,13841],{"class":404},[398,86972,70123],{"class":513},[398,86974,12712],{"class":408},[398,86976,86977],{"class":5493},"message",[398,86979,13841],{"class":404},[398,86981,70123],{"class":513},[398,86983,12719],{"class":408},[398,86985,86986],{"class":400,"line":16953},[398,86987,86988],{"class":467},"      \u002F\u002F 创建Model 模态框盒子\n",[398,86990,86991],{"class":400,"line":16973},[398,86992,86993],{"class":467},"      \u002F\u002F 1.1 创建div标签\n",[398,86995,86996,86998,87001,87003,87005,87007,87009,87011],{"class":400,"line":16979},[398,86997,70244],{"class":457},[398,86999,87000],{"class":408},".modalBox ",[398,87002,454],{"class":404},[398,87004,54589],{"class":408},[398,87006,70344],{"class":2239},[398,87008,409],{"class":408},[398,87010,82124],{"class":513},[398,87012,415],{"class":408},[398,87014,87015],{"class":400,"line":16990},[398,87016,87017],{"class":467},"      \u002F\u002F 1.2 给div 添加类名为model\n",[398,87019,87020,87022,87025,87027],{"class":400,"line":17013},[398,87021,70244],{"class":457},[398,87023,87024],{"class":408},".modalBox.className ",[398,87026,454],{"class":404},[398,87028,87029],{"class":513}," 'modal'\n",[398,87031,87032],{"class":400,"line":17035},[398,87033,87034],{"class":467},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[398,87036,87037,87039,87042,87044],{"class":400,"line":17040},[398,87038,70244],{"class":457},[398,87040,87041],{"class":408},".modalBox.innerHTML ",[398,87043,454],{"class":404},[398,87045,70361],{"class":513},[398,87047,87048,87051,87053],{"class":400,"line":17046},[398,87049,87050],{"class":513},"        \u003Cdiv class=\"header\">${",[398,87052,51600],{"class":408},[398,87054,87055],{"class":513},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[398,87057,87058,87061,87063],{"class":400,"line":17060},[398,87059,87060],{"class":513},"        \u003Cdiv class=\"body\">${",[398,87062,86977],{"class":408},[398,87064,87065],{"class":513},"}\u003C\u002Fdiv>\n",[398,87067,87068],{"class":400,"line":17073},[398,87069,87070],{"class":513},"      `\n",[398,87072,87073],{"class":400,"line":17078},[398,87074,87075],{"class":467},"      \u002F\u002F console.log(this.modalBox)\n",[398,87077,87078],{"class":400,"line":17092},[398,87079,2463],{"class":408},[398,87081,87082],{"class":400,"line":17097},[398,87083,87084],{"class":467},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[398,87086,87087],{"class":400,"line":17103},[398,87088,87089],{"class":467},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[398,87091,87092],{"class":400,"line":17108},[398,87093,87094],{"class":467},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[398,87096,87097,87100,87102,87104,87106,87109,87111,87113],{"class":400,"line":17122},[398,87098,87099],{"class":457},"    Modal",[398,87101,960],{"class":408},[398,87103,85772],{"class":457},[398,87105,960],{"class":408},[398,87107,87108],{"class":2239},"open",[398,87110,13841],{"class":404},[398,87112,59111],{"class":404},[398,87114,54645],{"class":408},[398,87116,87117],{"class":400,"line":17127},[398,87118,87119],{"class":467},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[398,87121,87122,87124,87127,87129,87131,87133,87135,87138],{"class":400,"line":17132},[398,87123,58421],{"class":404},[398,87125,87126],{"class":457}," box",[398,87128,13841],{"class":404},[398,87130,54589],{"class":408},[398,87132,54592],{"class":2239},[398,87134,409],{"class":408},[398,87136,87137],{"class":513},"'.modal'",[398,87139,415],{"class":408},[398,87141,87142],{"class":400,"line":17146},[398,87143,87144],{"class":467},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[398,87146,87147,87150,87152,87155,87157],{"class":400,"line":17158},[398,87148,87149],{"class":408},"      box ",[398,87151,1991],{"class":404},[398,87153,87154],{"class":408}," box.",[398,87156,57199],{"class":2239},[398,87158,2252],{"class":408},[398,87160,87161],{"class":400,"line":17163},[398,87162,87163],{"class":467},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[398,87165,87166],{"class":400,"line":17176},[398,87167,87168],{"class":467},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[398,87170,87171],{"class":400,"line":17181},[398,87172,87173],{"class":467},"      \u002F\u002F append可以增加对象\n",[398,87175,87176,87179,87182,87184,87187],{"class":400,"line":17186},[398,87177,87178],{"class":408},"      document.body.",[398,87180,87181],{"class":2239},"append",[398,87183,409],{"class":408},[398,87185,87186],{"class":457},"this",[398,87188,87189],{"class":408},".modalBox)\n",[398,87191,87192],{"class":400,"line":17191},[398,87193,2676],{"emptyLinePlaceholder":328},[398,87195,87196],{"class":400,"line":17204},[398,87197,87198],{"class":467},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[398,87200,87201,87203,87206,87208,87210,87213,87215,87217,87219,87221,87224,87226],{"class":400,"line":17209},[398,87202,70244],{"class":457},[398,87204,87205],{"class":408},".modalBox.",[398,87207,54592],{"class":2239},[398,87209,409],{"class":408},[398,87211,87212],{"class":513},"'i'",[398,87214,31019],{"class":408},[398,87216,58006],{"class":2239},[398,87218,409],{"class":408},[398,87220,58011],{"class":513},[398,87222,87223],{"class":408},", () ",[398,87225,84915],{"class":404},[398,87227,15849],{"class":408},[398,87229,87230],{"class":400,"line":32826},[398,87231,87232],{"class":467},"        \u002F\u002F 这个地方需要用到箭头函数\n",[398,87234,87235],{"class":400,"line":32832},[398,87236,87237],{"class":467},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[398,87239,87240],{"class":400,"line":32838},[398,87241,87242],{"class":467},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[398,87244,87245,87247,87249,87252],{"class":400,"line":32844},[398,87246,64919],{"class":457},[398,87248,960],{"class":408},[398,87250,87251],{"class":2239},"close",[398,87253,2252],{"class":408},[398,87255,87256],{"class":400,"line":32850},[398,87257,65008],{"class":408},[398,87259,87260],{"class":400,"line":32861},[398,87261,2463],{"class":408},[398,87263,87264],{"class":400,"line":32867},[398,87265,2676],{"emptyLinePlaceholder":328},[398,87267,87268],{"class":400,"line":32887},[398,87269,87270],{"class":467},"    \u002F\u002F 测试一下 点击 删除按钮\n",[398,87272,87273,87275,87277,87279,87282,87284,87286,87288,87290,87292,87294],{"class":400,"line":32893},[398,87274,52600],{"class":408},[398,87276,54592],{"class":2239},[398,87278,409],{"class":408},[398,87280,87281],{"class":513},"'#delete'",[398,87283,31019],{"class":408},[398,87285,58006],{"class":2239},[398,87287,409],{"class":408},[398,87289,58011],{"class":513},[398,87291,87223],{"class":408},[398,87293,84915],{"class":404},[398,87295,15849],{"class":408},[398,87297,87298],{"class":400,"line":32904},[398,87299,87300],{"class":467},"      \u002F\u002F 先调用Model构造函数\n",[398,87302,87303,87305,87308,87310,87312,87314,87316,87319,87321,87324],{"class":400,"line":32910},[398,87304,58421],{"class":404},[398,87306,87307],{"class":457}," del",[398,87309,13841],{"class":404},[398,87311,11855],{"class":404},[398,87313,86964],{"class":2239},[398,87315,409],{"class":408},[398,87317,87318],{"class":513},"'温馨的提示'",[398,87320,12712],{"class":408},[398,87322,87323],{"class":513},"'您没有删除权限操作'",[398,87325,415],{"class":408},[398,87327,87328],{"class":400,"line":32916},[398,87329,87330],{"class":467},"      \u002F\u002F 实例对象调用open方法\n",[398,87332,87333,87336,87338],{"class":400,"line":32922},[398,87334,87335],{"class":408},"      del.",[398,87337,87108],{"class":2239},[398,87339,2252],{"class":408},[398,87341,87342],{"class":400,"line":32928},[398,87343,33654],{"class":408},[398,87345,87346],{"class":400,"line":32934},[398,87347,87348],{"class":467},"    \u002F\u002F 测试一下 点击 登录按钮\n",[398,87350,87351,87353,87355,87357,87360,87362,87364,87366,87368,87370,87372],{"class":400,"line":32940},[398,87352,52600],{"class":408},[398,87354,54592],{"class":2239},[398,87356,409],{"class":408},[398,87358,87359],{"class":513},"'#login'",[398,87361,31019],{"class":408},[398,87363,58006],{"class":2239},[398,87365,409],{"class":408},[398,87367,58011],{"class":513},[398,87369,87223],{"class":408},[398,87371,84915],{"class":404},[398,87373,15849],{"class":408},[398,87375,87376],{"class":400,"line":32946},[398,87377,87300],{"class":467},[398,87379,87380,87382,87385,87387,87389,87391,87393,87396,87398,87401],{"class":400,"line":32966},[398,87381,58421],{"class":404},[398,87383,87384],{"class":457}," log",[398,87386,13841],{"class":404},[398,87388,11855],{"class":404},[398,87390,86964],{"class":2239},[398,87392,409],{"class":408},[398,87394,87395],{"class":513},"'友情提示'",[398,87397,12712],{"class":408},[398,87399,87400],{"class":513},"'您还没有登录呢'",[398,87402,415],{"class":408},[398,87404,87405],{"class":400,"line":32972},[398,87406,87330],{"class":467},[398,87408,87409,87412,87414],{"class":400,"line":32988},[398,87410,87411],{"class":408},"      log.",[398,87413,87108],{"class":2239},[398,87415,2252],{"class":408},[398,87417,87418],{"class":400,"line":32994},[398,87419,33654],{"class":408},[398,87421,87422],{"class":400,"line":33008},[398,87423,87424],{"class":467},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[398,87426,87427,87429,87431,87433,87435,87437,87439,87441],{"class":400,"line":33014},[398,87428,87099],{"class":457},[398,87430,960],{"class":408},[398,87432,85772],{"class":457},[398,87434,960],{"class":408},[398,87436,87251],{"class":2239},[398,87438,13841],{"class":404},[398,87440,59111],{"class":404},[398,87442,54645],{"class":408},[398,87444,87445,87447,87449,87451],{"class":400,"line":33029},[398,87446,70244],{"class":457},[398,87448,87205],{"class":408},[398,87450,57199],{"class":2239},[398,87452,2252],{"class":408},[398,87454,87455],{"class":400,"line":33035},[398,87456,2463],{"class":408},[398,87458,87459,87461,87463],{"class":400,"line":33044},[398,87460,52610],{"class":408},[398,87462,52006],{"class":51493},[398,87464,51500],{"class":408},[398,87466,87467,87469,87471],{"class":400,"line":33050},[398,87468,51978],{"class":408},[398,87470,51993],{"class":51493},[398,87472,51500],{"class":408},[398,87474,87475],{"class":400,"line":33059},[398,87476,2676],{"emptyLinePlaceholder":328},[398,87478,87479,87481,87483],{"class":400,"line":33065},[398,87480,51978],{"class":408},[398,87482,50828],{"class":51493},[398,87484,51500],{"class":408},[19,87486,87487],{},[1738,87488],{"alt":316,"src":87489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[343,87491,87493],{"id":87492},"_414-深浅拷贝","4.14 深浅拷贝",[14,87495,87497],{"id":87496},"_4141-浅拷贝","4.14.1 浅拷贝",[19,87499,87500],{},[1738,87501],{"alt":316,"src":87502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,87504,87505],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,87507,87508],{},[1738,87509],{"alt":316,"src":87510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,87512,87513],{},[1738,87514],{"alt":316,"src":87515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,87517,87518],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,87520,87521],{},[1738,87522],{"alt":316,"src":87523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,87525,11609],{},[19,87527,87528],{},[1738,87529],{"alt":316,"src":87530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[14,87532,87534],{"id":87533},"_4142-深拷贝","4.14.2 深拷贝",[19,87536,87537],{},"深拷贝：拷贝的是对象，不是地址",[19,87539,87540],{},"常用的三种方法：",[38,87542,87543,87546,87549],{},[41,87544,87545],{},"通过递归实现深拷贝",[41,87547,87548],{},"lodash\u002FcloneDeep",[41,87550,87551],{},"通过JSON.stringify()实现",[22275,87553,87555],{"id":87554},"_41421-递归函数","4.14.2.1 递归函数",[19,87557,87558],{},[1738,87559],{"alt":316,"src":87560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[38,87562,87563],{},[41,87564,87565],{},"死递归占溢出：",[389,87567,87569],{"className":53260,"code":87568,"language":53262,"meta":316,"style":316},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[395,87570,87571,87579,87587,87591,87596,87600,87605,87613],{"__ignoreMap":316},[398,87572,87573,87575,87577],{"class":400,"line":401},[398,87574,1312],{"class":408},[398,87576,51993],{"class":51493},[398,87578,51500],{"class":408},[398,87580,87581,87583,87585],{"class":400,"line":317},[398,87582,52337],{"class":408},[398,87584,52006],{"class":51493},[398,87586,51500],{"class":408},[398,87588,87589],{"class":400,"line":320},[398,87590,77336],{"class":408},[398,87592,87593],{"class":400,"line":1470},[398,87594,87595],{"class":408},"      fn()\n",[398,87597,87598],{"class":400,"line":1476},[398,87599,2463],{"class":408},[398,87601,87602],{"class":400,"line":1490},[398,87603,87604],{"class":408},"    fn()\n",[398,87606,87607,87609,87611],{"class":400,"line":1496},[398,87608,52610],{"class":408},[398,87610,52006],{"class":51493},[398,87612,51500],{"class":408},[398,87614,87615,87617,87619],{"class":400,"line":1587},[398,87616,51978],{"class":408},[398,87618,51993],{"class":51493},[398,87620,51500],{"class":408},[38,87622,87623],{"start":317},[41,87624,87625],{},"递归函数要加判断条件：",[19,87627,87628],{},[1738,87629],{"alt":316,"src":87630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[38,87632,87633],{"start":320},[41,87634,87635],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[389,87637,87639],{"className":50826,"code":87638,"language":50828,"meta":316,"style":316},"\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",[395,87640,87641,87651,87665,87669,87677,87691,87711,87723,87731,87735,87743,87755,87763,87771,87796,87808,87812,87819,87827,87835,87839],{"__ignoreMap":316},[398,87642,87643,87645,87647,87649],{"class":400,"line":401},[398,87644,51490],{"class":408},[398,87646,51494],{"class":51493},[398,87648,51497],{"class":2239},[398,87650,51500],{"class":408},[398,87652,87653,87655,87657,87659,87661,87663],{"class":400,"line":317},[398,87654,1312],{"class":408},[398,87656,50828],{"class":51493},[398,87658,51509],{"class":2239},[398,87660,454],{"class":408},[398,87662,51514],{"class":513},[398,87664,51500],{"class":408},[398,87666,87667],{"class":400,"line":320},[398,87668,2676],{"emptyLinePlaceholder":328},[398,87670,87671,87673,87675],{"class":400,"line":1470},[398,87672,1312],{"class":408},[398,87674,51527],{"class":51493},[398,87676,51500],{"class":408},[398,87678,87679,87681,87683,87685,87687,87689],{"class":400,"line":1476},[398,87680,52337],{"class":408},[398,87682,51537],{"class":51493},[398,87684,51540],{"class":2239},[398,87686,454],{"class":408},[398,87688,51545],{"class":513},[398,87690,51500],{"class":408},[398,87692,87693,87695,87697,87699,87701,87703,87705,87707,87709],{"class":400,"line":1490},[398,87694,52337],{"class":408},[398,87696,51537],{"class":51493},[398,87698,15197],{"class":2239},[398,87700,454],{"class":408},[398,87702,51584],{"class":513},[398,87704,51564],{"class":2239},[398,87706,454],{"class":408},[398,87708,51591],{"class":513},[398,87710,51500],{"class":408},[398,87712,87713,87715,87717,87719,87721],{"class":400,"line":1496},[398,87714,52337],{"class":408},[398,87716,51600],{"class":51493},[398,87718,51603],{"class":408},[398,87720,51600],{"class":51493},[398,87722,51500],{"class":408},[398,87724,87725,87727,87729],{"class":400,"line":1587},[398,87726,51978],{"class":408},[398,87728,51527],{"class":51493},[398,87730,51500],{"class":408},[398,87732,87733],{"class":400,"line":1593},[398,87734,2676],{"emptyLinePlaceholder":328},[398,87736,87737,87739,87741],{"class":400,"line":1605},[398,87738,1312],{"class":408},[398,87740,51993],{"class":51493},[398,87742,51500],{"class":408},[398,87744,87745,87747,87749,87751,87753],{"class":400,"line":1888},[398,87746,52337],{"class":408},[398,87748,51804],{"class":51493},[398,87750,55507],{"class":408},[398,87752,51804],{"class":51493},[398,87754,51500],{"class":408},[398,87756,87757,87759,87761],{"class":400,"line":1893},[398,87758,52337],{"class":408},[398,87760,52006],{"class":51493},[398,87762,51500],{"class":408},[398,87764,87765,87767,87769],{"class":400,"line":1899},[398,87766,70277],{"class":404},[398,87768,73966],{"class":2239},[398,87770,11130],{"class":408},[398,87772,87773,87775,87777,87779,87781,87783,87785,87787,87789,87791,87794],{"class":400,"line":1904},[398,87774,55964],{"class":408},[398,87776,54592],{"class":2239},[398,87778,409],{"class":408},[398,87780,82124],{"class":513},[398,87782,74442],{"class":408},[398,87784,454],{"class":404},[398,87786,11855],{"class":404},[398,87788,73982],{"class":2239},[398,87790,17538],{"class":408},[398,87792,87793],{"class":2239},"toLocaleString",[398,87795,2252],{"class":408},[398,87797,87798,87801,87804,87806],{"class":400,"line":1918},[398,87799,87800],{"class":2239},"      setTimeout",[398,87802,87803],{"class":408},"(getTime, ",[398,87805,6687],{"class":457},[398,87807,415],{"class":408},[398,87809,87810],{"class":400,"line":1923},[398,87811,2463],{"class":408},[398,87813,87814,87817],{"class":400,"line":1929},[398,87815,87816],{"class":2239},"    getTime",[398,87818,2252],{"class":408},[398,87820,87821,87823,87825],{"class":400,"line":1950},[398,87822,52610],{"class":408},[398,87824,52006],{"class":51493},[398,87826,51500],{"class":408},[398,87828,87829,87831,87833],{"class":400,"line":1955},[398,87830,51978],{"class":408},[398,87832,51993],{"class":51493},[398,87834,51500],{"class":408},[398,87836,87837],{"class":400,"line":1969},[398,87838,2676],{"emptyLinePlaceholder":328},[398,87840,87841,87843,87845],{"class":400,"line":1974},[398,87842,51978],{"class":408},[398,87844,50828],{"class":51493},[398,87846,51500],{"class":408},[19,87848,87849],{},[1738,87850],{"alt":316,"src":87851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[38,87853,87854],{"start":1470},[41,87855,87545],{},[19,87857,87858],{},[1738,87859],{"alt":316,"src":87860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,87862,87863],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,87865,39382],{},[19,87867,87868],{},"这个是简易版的递归函数深拷贝",[19,87870,87871],{},"一定要注意先数组再对象，因为万物皆可对象",[389,87873,87875],{"className":50826,"code":87874,"language":50828,"meta":316,"style":316},"\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",[395,87876,87877,87887,87901,87905,87913,87927,87947,87959,87967,87971,87979,87987,87997,88006,88014,88030,88034,88042,88046,88050,88062,88067,88086,88102,88107,88112,88117,88132,88137,88142,88151,88159,88176,88184,88190,88198,88203,88208,88217,88221,88225,88229,88240,88249,88259,88273,88283,88291,88299,88307,88311],{"__ignoreMap":316},[398,87878,87879,87881,87883,87885],{"class":400,"line":401},[398,87880,51490],{"class":408},[398,87882,51494],{"class":51493},[398,87884,51497],{"class":2239},[398,87886,51500],{"class":408},[398,87888,87889,87891,87893,87895,87897,87899],{"class":400,"line":317},[398,87890,1312],{"class":408},[398,87892,50828],{"class":51493},[398,87894,51509],{"class":2239},[398,87896,454],{"class":408},[398,87898,51514],{"class":513},[398,87900,51500],{"class":408},[398,87902,87903],{"class":400,"line":320},[398,87904,2676],{"emptyLinePlaceholder":328},[398,87906,87907,87909,87911],{"class":400,"line":1470},[398,87908,1312],{"class":408},[398,87910,51527],{"class":51493},[398,87912,51500],{"class":408},[398,87914,87915,87917,87919,87921,87923,87925],{"class":400,"line":1476},[398,87916,52337],{"class":408},[398,87918,51537],{"class":51493},[398,87920,51540],{"class":2239},[398,87922,454],{"class":408},[398,87924,51545],{"class":513},[398,87926,51500],{"class":408},[398,87928,87929,87931,87933,87935,87937,87939,87941,87943,87945],{"class":400,"line":1490},[398,87930,52337],{"class":408},[398,87932,51537],{"class":51493},[398,87934,15197],{"class":2239},[398,87936,454],{"class":408},[398,87938,51584],{"class":513},[398,87940,51564],{"class":2239},[398,87942,454],{"class":408},[398,87944,51591],{"class":513},[398,87946,51500],{"class":408},[398,87948,87949,87951,87953,87955,87957],{"class":400,"line":1496},[398,87950,52337],{"class":408},[398,87952,51600],{"class":51493},[398,87954,51603],{"class":408},[398,87956,51600],{"class":51493},[398,87958,51500],{"class":408},[398,87960,87961,87963,87965],{"class":400,"line":1587},[398,87962,51978],{"class":408},[398,87964,51527],{"class":51493},[398,87966,51500],{"class":408},[398,87968,87969],{"class":400,"line":1593},[398,87970,2676],{"emptyLinePlaceholder":328},[398,87972,87973,87975,87977],{"class":400,"line":1605},[398,87974,1312],{"class":408},[398,87976,51993],{"class":51493},[398,87978,51500],{"class":408},[398,87980,87981,87983,87985],{"class":400,"line":1888},[398,87982,52337],{"class":408},[398,87984,52006],{"class":51493},[398,87986,51500],{"class":408},[398,87988,87989,87991,87993,87995],{"class":400,"line":1893},[398,87990,11498],{"class":404},[398,87992,70164],{"class":457},[398,87994,13841],{"class":404},[398,87996,15849],{"class":408},[398,87998,87999,88001,88004],{"class":400,"line":1899},[398,88000,71809],{"class":408},[398,88002,88003],{"class":513},"'pink'",[398,88005,31659],{"class":408},[398,88007,88008,88010,88012],{"class":400,"line":1904},[398,88009,71819],{"class":408},[398,88011,1052],{"class":457},[398,88013,31659],{"class":408},[398,88015,88016,88019,88022,88024,88027],{"class":400,"line":1918},[398,88017,88018],{"class":408},"      hobby: [",[398,88020,88021],{"class":513},"'乒乓球'",[398,88023,12712],{"class":408},[398,88025,88026],{"class":513},"'足球'",[398,88028,88029],{"class":408},"],\n",[398,88031,88032],{"class":400,"line":1923},[398,88033,78065],{"class":408},[398,88035,88036,88039],{"class":400,"line":1929},[398,88037,88038],{"class":408},"        baby: ",[398,88040,88041],{"class":513},"'小pink'\n",[398,88043,88044],{"class":400,"line":1950},[398,88045,52591],{"class":408},[398,88047,88048],{"class":400,"line":1955},[398,88049,2463],{"class":408},[398,88051,88052,88054,88057,88059],{"class":400,"line":1969},[398,88053,11498],{"class":404},[398,88055,88056],{"class":457}," o",[398,88058,13841],{"class":404},[398,88060,88061],{"class":408}," {}\n",[398,88063,88064],{"class":400,"line":1974},[398,88065,88066],{"class":467},"    \u002F\u002F 拷贝函数\n",[398,88068,88069,88071,88074,88076,88079,88081,88084],{"class":400,"line":2003},[398,88070,70277],{"class":404},[398,88072,88073],{"class":2239}," deepCopy",[398,88075,409],{"class":408},[398,88077,88078],{"class":5493},"newObj",[398,88080,12712],{"class":408},[398,88082,88083],{"class":5493},"oldObj",[398,88085,12719],{"class":408},[398,88087,88088,88090,88092,88094,88097,88099],{"class":400,"line":2008},[398,88089,52477],{"class":404},[398,88091,1934],{"class":408},[398,88093,52040],{"class":404},[398,88095,88096],{"class":408}," k ",[398,88098,26236],{"class":404},[398,88100,88101],{"class":408}," oldObj) {\n",[398,88103,88104],{"class":400,"line":2025},[398,88105,88106],{"class":467},"        \u002F\u002F 处理数组的问题\n",[398,88108,88109],{"class":400,"line":2030},[398,88110,88111],{"class":467},"        \u002F\u002F 判断是否属于数组\n",[398,88113,88114],{"class":400,"line":2035},[398,88115,88116],{"class":467},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[398,88118,88119,88121,88124,88127,88130],{"class":400,"line":2040},[398,88120,2773],{"class":404},[398,88122,88123],{"class":408}," (oldObj[k] ",[398,88125,88126],{"class":404},"instanceof",[398,88128,88129],{"class":2239}," Array",[398,88131,12719],{"class":408},[398,88133,88134],{"class":400,"line":2054},[398,88135,88136],{"class":467},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[398,88138,88139],{"class":400,"line":2059},[398,88140,88141],{"class":467},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[398,88143,88144,88147,88149],{"class":400,"line":2853},[398,88145,88146],{"class":408},"          newObj[k] ",[398,88148,454],{"class":404},[398,88150,52031],{"class":408},[398,88152,88153,88156],{"class":400,"line":2867},[398,88154,88155],{"class":2239},"          deepCopy",[398,88157,88158],{"class":408},"(newObj[k], oldObj[k])\n",[398,88160,88161,88163,88165,88167,88169,88171,88174],{"class":400,"line":2875},[398,88162,80273],{"class":408},[398,88164,1977],{"class":404},[398,88166,1980],{"class":404},[398,88168,88123],{"class":408},[398,88170,88126],{"class":404},[398,88172,88173],{"class":2239}," Object",[398,88175,12719],{"class":408},[398,88177,88178,88180,88182],{"class":400,"line":2880},[398,88179,88146],{"class":408},[398,88181,454],{"class":404},[398,88183,88061],{"class":408},[398,88185,88186,88188],{"class":400,"line":2886},[398,88187,88155],{"class":2239},[398,88189,88158],{"class":408},[398,88191,88192,88194,88196],{"class":400,"line":2892},[398,88193,80273],{"class":408},[398,88195,1977],{"class":404},[398,88197,15849],{"class":408},[398,88199,88200],{"class":400,"line":2897},[398,88201,88202],{"class":467},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[398,88204,88205],{"class":400,"line":8225},[398,88206,88207],{"class":467},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[398,88209,88210,88212,88214],{"class":400,"line":8249},[398,88211,88146],{"class":408},[398,88213,454],{"class":404},[398,88215,88216],{"class":408}," oldObj[k]\n",[398,88218,88219],{"class":400,"line":8254},[398,88220,2805],{"class":408},[398,88222,88223],{"class":400,"line":8260},[398,88224,52591],{"class":408},[398,88226,88227],{"class":400,"line":8287},[398,88228,2463],{"class":408},[398,88230,88231,88234,88237],{"class":400,"line":8292},[398,88232,88233],{"class":2239},"    deepCopy",[398,88235,88236],{"class":408},"(o, obj) ",[398,88238,88239],{"class":467},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[398,88241,88242,88244,88246],{"class":400,"line":8298},[398,88243,73946],{"class":408},[398,88245,58440],{"class":2239},[398,88247,88248],{"class":408},"(o)\n",[398,88250,88251,88254,88256],{"class":400,"line":8310},[398,88252,88253],{"class":408},"    o.age ",[398,88255,454],{"class":404},[398,88257,88258],{"class":457}," 20\n",[398,88260,88261,88264,88266,88268,88270],{"class":400,"line":8322},[398,88262,88263],{"class":408},"    o.hobby[",[398,88265,593],{"class":457},[398,88267,4719],{"class":408},[398,88269,454],{"class":404},[398,88271,88272],{"class":513}," '篮球'\n",[398,88274,88275,88278,88280],{"class":400,"line":8334},[398,88276,88277],{"class":408},"    o.family ",[398,88279,454],{"class":404},[398,88281,88282],{"class":513}," '老pink'\n",[398,88284,88285,88287,88289],{"class":400,"line":9993},[398,88286,73946],{"class":408},[398,88288,58440],{"class":2239},[398,88290,70229],{"class":408},[398,88292,88293,88295,88297],{"class":400,"line":10018},[398,88294,52610],{"class":408},[398,88296,52006],{"class":51493},[398,88298,51500],{"class":408},[398,88300,88301,88303,88305],{"class":400,"line":10041},[398,88302,51978],{"class":408},[398,88304,51993],{"class":51493},[398,88306,51500],{"class":408},[398,88308,88309],{"class":400,"line":10065},[398,88310,2676],{"emptyLinePlaceholder":328},[398,88312,88313,88315,88317],{"class":400,"line":10070},[398,88314,51978],{"class":408},[398,88316,50828],{"class":51493},[398,88318,51500],{"class":408},[19,88320,88321],{},[1738,88322],{"alt":316,"src":88323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22275,88325,88327,88328],{"id":88326},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[23,88329,88330],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,88332,88333],{},[640,88334,88335],{"href":88335,"rel":88336},"https:\u002F\u002Fwww.lodashjs.com\u002F",[24142],[19,88338,88339],{},"lodash里边的方法都要加上一个下划线_",[19,88341,88342],{},"_.cloneDeep()",[389,88344,88346],{"className":50826,"code":88345,"language":50828,"meta":316,"style":316},"\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",[395,88347,88348,88358,88372,88376,88384,88398,88418,88430,88438,88442,88450,88455,88474,88482,88492,88500,88508,88520,88524,88530,88534,88538,88554,88562,88571,88579,88587,88595,88599],{"__ignoreMap":316},[398,88349,88350,88352,88354,88356],{"class":400,"line":401},[398,88351,51490],{"class":408},[398,88353,51494],{"class":51493},[398,88355,51497],{"class":2239},[398,88357,51500],{"class":408},[398,88359,88360,88362,88364,88366,88368,88370],{"class":400,"line":317},[398,88361,1312],{"class":408},[398,88363,50828],{"class":51493},[398,88365,51509],{"class":2239},[398,88367,454],{"class":408},[398,88369,51514],{"class":513},[398,88371,51500],{"class":408},[398,88373,88374],{"class":400,"line":320},[398,88375,2676],{"emptyLinePlaceholder":328},[398,88377,88378,88380,88382],{"class":400,"line":1470},[398,88379,1312],{"class":408},[398,88381,51527],{"class":51493},[398,88383,51500],{"class":408},[398,88385,88386,88388,88390,88392,88394,88396],{"class":400,"line":1476},[398,88387,52337],{"class":408},[398,88389,51537],{"class":51493},[398,88391,51540],{"class":2239},[398,88393,454],{"class":408},[398,88395,51545],{"class":513},[398,88397,51500],{"class":408},[398,88399,88400,88402,88404,88406,88408,88410,88412,88414,88416],{"class":400,"line":1490},[398,88401,52337],{"class":408},[398,88403,51537],{"class":51493},[398,88405,15197],{"class":2239},[398,88407,454],{"class":408},[398,88409,51584],{"class":513},[398,88411,51564],{"class":2239},[398,88413,454],{"class":408},[398,88415,51591],{"class":513},[398,88417,51500],{"class":408},[398,88419,88420,88422,88424,88426,88428],{"class":400,"line":1496},[398,88421,52337],{"class":408},[398,88423,51600],{"class":51493},[398,88425,51603],{"class":408},[398,88427,51600],{"class":51493},[398,88429,51500],{"class":408},[398,88431,88432,88434,88436],{"class":400,"line":1587},[398,88433,51978],{"class":408},[398,88435,51527],{"class":51493},[398,88437,51500],{"class":408},[398,88439,88440],{"class":400,"line":1593},[398,88441,2676],{"emptyLinePlaceholder":328},[398,88443,88444,88446,88448],{"class":400,"line":1605},[398,88445,1312],{"class":408},[398,88447,51993],{"class":51493},[398,88449,51500],{"class":408},[398,88451,88452],{"class":400,"line":1888},[398,88453,88454],{"class":467},"  \u003C!-- 先引用这个库 -->\n",[398,88456,88457,88459,88461,88463,88465,88468,88470,88472],{"class":400,"line":1893},[398,88458,52337],{"class":408},[398,88460,52006],{"class":51493},[398,88462,55432],{"class":2239},[398,88464,454],{"class":408},[398,88466,88467],{"class":513},"\"lodash.min.js\"",[398,88469,55507],{"class":408},[398,88471,52006],{"class":51493},[398,88473,51500],{"class":408},[398,88475,88476,88478,88480],{"class":400,"line":1899},[398,88477,52337],{"class":408},[398,88479,52006],{"class":51493},[398,88481,51500],{"class":408},[398,88483,88484,88486,88488,88490],{"class":400,"line":1904},[398,88485,11498],{"class":404},[398,88487,70164],{"class":457},[398,88489,13841],{"class":404},[398,88491,15849],{"class":408},[398,88493,88494,88496,88498],{"class":400,"line":1918},[398,88495,71809],{"class":408},[398,88497,88003],{"class":513},[398,88499,31659],{"class":408},[398,88501,88502,88504,88506],{"class":400,"line":1923},[398,88503,71819],{"class":408},[398,88505,1052],{"class":457},[398,88507,31659],{"class":408},[398,88509,88510,88512,88514,88516,88518],{"class":400,"line":1929},[398,88511,88018],{"class":408},[398,88513,88021],{"class":513},[398,88515,12712],{"class":408},[398,88517,88026],{"class":513},[398,88519,88029],{"class":408},[398,88521,88522],{"class":400,"line":1950},[398,88523,78065],{"class":408},[398,88525,88526,88528],{"class":400,"line":1955},[398,88527,88038],{"class":408},[398,88529,88041],{"class":513},[398,88531,88532],{"class":400,"line":1969},[398,88533,52591],{"class":408},[398,88535,88536],{"class":400,"line":1974},[398,88537,2463],{"class":408},[398,88539,88540,88542,88544,88546,88549,88552],{"class":400,"line":2003},[398,88541,11498],{"class":404},[398,88543,88056],{"class":457},[398,88545,13841],{"class":404},[398,88547,88548],{"class":408}," _.",[398,88550,88551],{"class":2239},"cloneDeep",[398,88553,70229],{"class":408},[398,88555,88556,88558,88560],{"class":400,"line":2008},[398,88557,73946],{"class":408},[398,88559,58440],{"class":2239},[398,88561,88248],{"class":408},[398,88563,88564,88567,88569],{"class":400,"line":2025},[398,88565,88566],{"class":408},"    o.family.baby ",[398,88568,454],{"class":404},[398,88570,88282],{"class":513},[398,88572,88573,88575,88577],{"class":400,"line":2030},[398,88574,73946],{"class":408},[398,88576,58440],{"class":2239},[398,88578,70229],{"class":408},[398,88580,88581,88583,88585],{"class":400,"line":2035},[398,88582,52610],{"class":408},[398,88584,52006],{"class":51493},[398,88586,51500],{"class":408},[398,88588,88589,88591,88593],{"class":400,"line":2040},[398,88590,51978],{"class":408},[398,88592,51993],{"class":51493},[398,88594,51500],{"class":408},[398,88596,88597],{"class":400,"line":2054},[398,88598,2676],{"emptyLinePlaceholder":328},[398,88600,88601,88603,88605],{"class":400,"line":2059},[398,88602,51978],{"class":408},[398,88604,50828],{"class":51493},[398,88606,51500],{"class":408},[19,88608,88609],{},[1738,88610],{"alt":316,"src":88611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22275,88613,88615],{"id":88614},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[389,88617,88619],{"className":50826,"code":88618,"language":50828,"meta":316,"style":316},"\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",[395,88620,88621,88631,88645,88649,88657,88671,88691,88703,88711,88715,88723,88731,88741,88749,88757,88769,88773,88779,88783,88787,88792,88797,88802,88828,88836,88845,88853,88861,88869,88873],{"__ignoreMap":316},[398,88622,88623,88625,88627,88629],{"class":400,"line":401},[398,88624,51490],{"class":408},[398,88626,51494],{"class":51493},[398,88628,51497],{"class":2239},[398,88630,51500],{"class":408},[398,88632,88633,88635,88637,88639,88641,88643],{"class":400,"line":317},[398,88634,1312],{"class":408},[398,88636,50828],{"class":51493},[398,88638,51509],{"class":2239},[398,88640,454],{"class":408},[398,88642,51514],{"class":513},[398,88644,51500],{"class":408},[398,88646,88647],{"class":400,"line":320},[398,88648,2676],{"emptyLinePlaceholder":328},[398,88650,88651,88653,88655],{"class":400,"line":1470},[398,88652,1312],{"class":408},[398,88654,51527],{"class":51493},[398,88656,51500],{"class":408},[398,88658,88659,88661,88663,88665,88667,88669],{"class":400,"line":1476},[398,88660,52337],{"class":408},[398,88662,51537],{"class":51493},[398,88664,51540],{"class":2239},[398,88666,454],{"class":408},[398,88668,51545],{"class":513},[398,88670,51500],{"class":408},[398,88672,88673,88675,88677,88679,88681,88683,88685,88687,88689],{"class":400,"line":1490},[398,88674,52337],{"class":408},[398,88676,51537],{"class":51493},[398,88678,15197],{"class":2239},[398,88680,454],{"class":408},[398,88682,51584],{"class":513},[398,88684,51564],{"class":2239},[398,88686,454],{"class":408},[398,88688,51591],{"class":513},[398,88690,51500],{"class":408},[398,88692,88693,88695,88697,88699,88701],{"class":400,"line":1496},[398,88694,52337],{"class":408},[398,88696,51600],{"class":51493},[398,88698,51603],{"class":408},[398,88700,51600],{"class":51493},[398,88702,51500],{"class":408},[398,88704,88705,88707,88709],{"class":400,"line":1587},[398,88706,51978],{"class":408},[398,88708,51527],{"class":51493},[398,88710,51500],{"class":408},[398,88712,88713],{"class":400,"line":1593},[398,88714,2676],{"emptyLinePlaceholder":328},[398,88716,88717,88719,88721],{"class":400,"line":1605},[398,88718,1312],{"class":408},[398,88720,51993],{"class":51493},[398,88722,51500],{"class":408},[398,88724,88725,88727,88729],{"class":400,"line":1888},[398,88726,52337],{"class":408},[398,88728,52006],{"class":51493},[398,88730,51500],{"class":408},[398,88732,88733,88735,88737,88739],{"class":400,"line":1893},[398,88734,11498],{"class":404},[398,88736,70164],{"class":457},[398,88738,13841],{"class":404},[398,88740,15849],{"class":408},[398,88742,88743,88745,88747],{"class":400,"line":1899},[398,88744,71809],{"class":408},[398,88746,88003],{"class":513},[398,88748,31659],{"class":408},[398,88750,88751,88753,88755],{"class":400,"line":1904},[398,88752,71819],{"class":408},[398,88754,1052],{"class":457},[398,88756,31659],{"class":408},[398,88758,88759,88761,88763,88765,88767],{"class":400,"line":1918},[398,88760,88018],{"class":408},[398,88762,88021],{"class":513},[398,88764,12712],{"class":408},[398,88766,88026],{"class":513},[398,88768,88029],{"class":408},[398,88770,88771],{"class":400,"line":1923},[398,88772,78065],{"class":408},[398,88774,88775,88777],{"class":400,"line":1929},[398,88776,88038],{"class":408},[398,88778,88041],{"class":513},[398,88780,88781],{"class":400,"line":1950},[398,88782,52591],{"class":408},[398,88784,88785],{"class":400,"line":1955},[398,88786,2463],{"class":408},[398,88788,88789],{"class":400,"line":1969},[398,88790,88791],{"class":467},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[398,88793,88794],{"class":400,"line":1974},[398,88795,88796],{"class":467},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[398,88798,88799],{"class":400,"line":2003},[398,88800,88801],{"class":467},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[398,88803,88804,88806,88808,88810,88813,88815,88818,88820,88822,88824,88826],{"class":400,"line":2008},[398,88805,11498],{"class":404},[398,88807,88056],{"class":457},[398,88809,13841],{"class":404},[398,88811,88812],{"class":457}," JSON",[398,88814,960],{"class":408},[398,88816,88817],{"class":2239},"parse",[398,88819,409],{"class":408},[398,88821,71857],{"class":457},[398,88823,960],{"class":408},[398,88825,71862],{"class":2239},[398,88827,71865],{"class":408},[398,88829,88830,88832,88834],{"class":400,"line":2025},[398,88831,73946],{"class":408},[398,88833,58440],{"class":2239},[398,88835,88248],{"class":408},[398,88837,88838,88840,88842],{"class":400,"line":2030},[398,88839,88566],{"class":408},[398,88841,454],{"class":404},[398,88843,88844],{"class":513}," '123'\n",[398,88846,88847,88849,88851],{"class":400,"line":2035},[398,88848,73946],{"class":408},[398,88850,58440],{"class":2239},[398,88852,70229],{"class":408},[398,88854,88855,88857,88859],{"class":400,"line":2040},[398,88856,52610],{"class":408},[398,88858,52006],{"class":51493},[398,88860,51500],{"class":408},[398,88862,88863,88865,88867],{"class":400,"line":2054},[398,88864,51978],{"class":408},[398,88866,51993],{"class":51493},[398,88868,51500],{"class":408},[398,88870,88871],{"class":400,"line":2059},[398,88872,2676],{"emptyLinePlaceholder":328},[398,88874,88875,88877,88879],{"class":400,"line":2853},[398,88876,51978],{"class":408},[398,88878,50828],{"class":51493},[398,88880,51500],{"class":408},[19,88882,88883],{},[1738,88884],{"alt":316,"src":88885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[343,88887,88889],{"id":88888},"_415-异常处理","4.15 异常处理",[38,88891,88892],{},[41,88893,88894],{},"throw抛异常",[19,88896,88897],{},[1738,88898],{"alt":316,"src":88899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[38,88901,88902],{"start":317},[41,88903,88904],{},"try\u002Fcatch 捕获错误信息",[19,88906,88907],{},[1738,88908],{"alt":316,"src":88909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[389,88911,88913],{"className":50826,"code":88912,"language":50828,"meta":316,"style":316},"\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",[395,88914,88915,88925,88939,88943,88951,88965,88985,88997,89005,89009,89017,89029,89037,89046,89053,89058,89077,89086,89097,89102,89112,89117,89122,89127,89144,89148,89153,89160,89172,89176,89188,89192,89196,89201,89206,89213,89221,89229,89233],{"__ignoreMap":316},[398,88916,88917,88919,88921,88923],{"class":400,"line":401},[398,88918,51490],{"class":408},[398,88920,51494],{"class":51493},[398,88922,51497],{"class":2239},[398,88924,51500],{"class":408},[398,88926,88927,88929,88931,88933,88935,88937],{"class":400,"line":317},[398,88928,1312],{"class":408},[398,88930,50828],{"class":51493},[398,88932,51509],{"class":2239},[398,88934,454],{"class":408},[398,88936,51514],{"class":513},[398,88938,51500],{"class":408},[398,88940,88941],{"class":400,"line":320},[398,88942,2676],{"emptyLinePlaceholder":328},[398,88944,88945,88947,88949],{"class":400,"line":1470},[398,88946,1312],{"class":408},[398,88948,51527],{"class":51493},[398,88950,51500],{"class":408},[398,88952,88953,88955,88957,88959,88961,88963],{"class":400,"line":1476},[398,88954,52337],{"class":408},[398,88956,51537],{"class":51493},[398,88958,51540],{"class":2239},[398,88960,454],{"class":408},[398,88962,51545],{"class":513},[398,88964,51500],{"class":408},[398,88966,88967,88969,88971,88973,88975,88977,88979,88981,88983],{"class":400,"line":1490},[398,88968,52337],{"class":408},[398,88970,51537],{"class":51493},[398,88972,15197],{"class":2239},[398,88974,454],{"class":408},[398,88976,51584],{"class":513},[398,88978,51564],{"class":2239},[398,88980,454],{"class":408},[398,88982,51591],{"class":513},[398,88984,51500],{"class":408},[398,88986,88987,88989,88991,88993,88995],{"class":400,"line":1496},[398,88988,52337],{"class":408},[398,88990,51600],{"class":51493},[398,88992,51603],{"class":408},[398,88994,51600],{"class":51493},[398,88996,51500],{"class":408},[398,88998,88999,89001,89003],{"class":400,"line":1587},[398,89000,51978],{"class":408},[398,89002,51527],{"class":51493},[398,89004,51500],{"class":408},[398,89006,89007],{"class":400,"line":1593},[398,89008,2676],{"emptyLinePlaceholder":328},[398,89010,89011,89013,89015],{"class":400,"line":1605},[398,89012,1312],{"class":408},[398,89014,51993],{"class":51493},[398,89016,51500],{"class":408},[398,89018,89019,89021,89023,89025,89027],{"class":400,"line":1888},[398,89020,52337],{"class":408},[398,89022,19],{"class":51493},[398,89024,53687],{"class":408},[398,89026,19],{"class":51493},[398,89028,51500],{"class":408},[398,89030,89031,89033,89035],{"class":400,"line":1893},[398,89032,52337],{"class":408},[398,89034,52006],{"class":51493},[398,89036,51500],{"class":408},[398,89038,89039,89041,89044],{"class":400,"line":1899},[398,89040,70277],{"class":404},[398,89042,89043],{"class":2239}," fn",[398,89045,11130],{"class":408},[398,89047,89048,89051],{"class":400,"line":1904},[398,89049,89050],{"class":404},"      try",[398,89052,15849],{"class":408},[398,89054,89055],{"class":400,"line":1918},[398,89056,89057],{"class":467},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[398,89059,89060,89062,89064,89066,89068,89070,89072,89075],{"class":400,"line":1923},[398,89061,61463],{"class":404},[398,89063,7102],{"class":457},[398,89065,13841],{"class":404},[398,89067,54589],{"class":408},[398,89069,54592],{"class":2239},[398,89071,409],{"class":408},[398,89073,89074],{"class":513},"'.p'",[398,89076,415],{"class":408},[398,89078,89079,89082,89084],{"class":400,"line":1929},[398,89080,89081],{"class":408},"        p.style.color ",[398,89083,454],{"class":404},[398,89085,67244],{"class":513},[398,89087,89088,89091,89094],{"class":400,"line":1950},[398,89089,89090],{"class":408},"      } ",[398,89092,89093],{"class":404},"catch",[398,89095,89096],{"class":408}," (err) {\n",[398,89098,89099],{"class":400,"line":1955},[398,89100,89101],{"class":467},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[398,89103,89104,89107,89109],{"class":400,"line":1969},[398,89105,89106],{"class":408},"        console.",[398,89108,58440],{"class":2239},[398,89110,89111],{"class":408},"(err.message)\n",[398,89113,89114],{"class":400,"line":1974},[398,89115,89116],{"class":467},"        \u002F\u002F 想要中断程序，需要加return\n",[398,89118,89119],{"class":400,"line":2003},[398,89120,89121],{"class":467},"        \u002F\u002F return\n",[398,89123,89124],{"class":400,"line":2008},[398,89125,89126],{"class":467},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[398,89128,89129,89132,89134,89137,89139,89142],{"class":400,"line":2025},[398,89130,89131],{"class":404},"        throw",[398,89133,11855],{"class":404},[398,89135,89136],{"class":2239}," Error",[398,89138,409],{"class":408},[398,89140,89141],{"class":513},"'你看看，选择器错误了吧'",[398,89143,415],{"class":408},[398,89145,89146],{"class":400,"line":2030},[398,89147,52591],{"class":408},[398,89149,89150],{"class":400,"line":2035},[398,89151,89152],{"class":467},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[398,89154,89155,89158],{"class":400,"line":2040},[398,89156,89157],{"class":404},"      finally",[398,89159,15849],{"class":408},[398,89161,89162,89165,89167,89170],{"class":400,"line":2054},[398,89163,89164],{"class":2239},"        alert",[398,89166,409],{"class":408},[398,89168,89169],{"class":513},"'弹出对话框'",[398,89171,415],{"class":408},[398,89173,89174],{"class":400,"line":2059},[398,89175,52591],{"class":408},[398,89177,89178,89180,89182,89184,89186],{"class":400,"line":2853},[398,89179,58437],{"class":408},[398,89181,58440],{"class":2239},[398,89183,409],{"class":408},[398,89185,874],{"class":457},[398,89187,415],{"class":408},[398,89189,89190],{"class":400,"line":2867},[398,89191,2676],{"emptyLinePlaceholder":328},[398,89193,89194],{"class":400,"line":2875},[398,89195,2463],{"class":408},[398,89197,89198],{"class":400,"line":2880},[398,89199,89200],{"class":467},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[398,89202,89203],{"class":400,"line":2886},[398,89204,89205],{"class":467},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[398,89207,89208,89211],{"class":400,"line":2892},[398,89209,89210],{"class":2239},"    fn",[398,89212,2252],{"class":408},[398,89214,89215,89217,89219],{"class":400,"line":2897},[398,89216,52610],{"class":408},[398,89218,52006],{"class":51493},[398,89220,51500],{"class":408},[398,89222,89223,89225,89227],{"class":400,"line":8225},[398,89224,51978],{"class":408},[398,89226,51993],{"class":51493},[398,89228,51500],{"class":408},[398,89230,89231],{"class":400,"line":8249},[398,89232,2676],{"emptyLinePlaceholder":328},[398,89234,89235,89237,89239],{"class":400,"line":8254},[398,89236,51978],{"class":408},[398,89238,50828],{"class":51493},[398,89240,51500],{"class":408},[19,89242,89243],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[38,89245,89246],{"start":320},[41,89247,89248],{},"debugger",[19,89250,89251],{},[1738,89252],{"alt":316,"src":89253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,89255,89256],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[343,89258,89260],{"id":89259},"_416-处理this","4.16 处理this",[14,89262,89264],{"id":89263},"_4161-this的指向","4.16.1 this的指向",[38,89266,89267],{},[41,89268,89269],{},"普通函数的this",[19,89271,89272],{},[1738,89273],{"alt":316,"src":89274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[38,89276,89277],{"start":317},[41,89278,89279],{},"箭头函数的this",[19,89281,89282],{},[1738,89283],{"alt":316,"src":89284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,89286,89287],{},[1738,89288],{"alt":316,"src":89289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,89291,89292],{},[1738,89293],{"alt":316,"src":89294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[14,89296,89298],{"id":89297},"_4162-this的改变","4.16.2 this的改变",[19,89300,89301],{},"call() apply() bind()",[38,89303,89304],{},[41,89305,89306],{},"call()",[19,89308,89309],{},[1738,89310],{"alt":316,"src":89311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,89313,89314],{},"两个作用：①调用函数；②改变this指向",[389,89316,89318],{"className":53260,"code":89317,"language":53262,"meta":316,"style":316},"\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",[395,89319,89320,89328,89336,89340,89345,89349,89354,89359,89364,89368,89373,89381],{"__ignoreMap":316},[398,89321,89322,89324,89326],{"class":400,"line":401},[398,89323,1312],{"class":408},[398,89325,51993],{"class":51493},[398,89327,51500],{"class":408},[398,89329,89330,89332,89334],{"class":400,"line":317},[398,89331,52337],{"class":408},[398,89333,52006],{"class":51493},[398,89335,51500],{"class":408},[398,89337,89338],{"class":400,"line":320},[398,89339,71716],{"class":408},[398,89341,89342],{"class":400,"line":1470},[398,89343,89344],{"class":408},"      uname: 'pink'\n",[398,89346,89347],{"class":400,"line":1476},[398,89348,2463],{"class":408},[398,89350,89351],{"class":400,"line":1490},[398,89352,89353],{"class":408},"    function fn(x, y) {\n",[398,89355,89356],{"class":400,"line":1496},[398,89357,89358],{"class":408},"      console.log(this)  \u002F\u002Fwindow\n",[398,89360,89361],{"class":400,"line":1587},[398,89362,89363],{"class":408},"      console.log(x + y)\n",[398,89365,89366],{"class":400,"line":1593},[398,89367,2463],{"class":408},[398,89369,89370],{"class":400,"line":1605},[398,89371,89372],{"class":408},"    fn.call(obj, 1, 2)\n",[398,89374,89375,89377,89379],{"class":400,"line":1888},[398,89376,52610],{"class":408},[398,89378,52006],{"class":51493},[398,89380,51500],{"class":408},[398,89382,89383,89385,89387],{"class":400,"line":1893},[398,89384,51978],{"class":408},[398,89386,51993],{"class":51493},[398,89388,51500],{"class":408},[19,89390,89391],{},[1738,89392],{"alt":316,"src":89393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[38,89395,89396],{"start":317},[41,89397,89398],{},"apply()",[19,89400,89401],{},[1738,89402],{"alt":316,"src":89403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,89405,89314],{},[19,89407,89408],{},"call传递的是普通参数，而apply必须传递的是数组",[389,89410,89412],{"className":50826,"code":89411,"language":50828,"meta":316,"style":316},"\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",[395,89413,89414,89424,89438,89442,89450,89464,89484,89496,89504,89508,89516,89524,89534,89541,89545,89550,89566,89578,89592,89596,89601,89620,89625,89629,89634,89639,89647,89652,89674,89679,89695,89711,89723,89727,89732,89751,89759,89767,89771],{"__ignoreMap":316},[398,89415,89416,89418,89420,89422],{"class":400,"line":401},[398,89417,51490],{"class":408},[398,89419,51494],{"class":51493},[398,89421,51497],{"class":2239},[398,89423,51500],{"class":408},[398,89425,89426,89428,89430,89432,89434,89436],{"class":400,"line":317},[398,89427,1312],{"class":408},[398,89429,50828],{"class":51493},[398,89431,51509],{"class":2239},[398,89433,454],{"class":408},[398,89435,51514],{"class":513},[398,89437,51500],{"class":408},[398,89439,89440],{"class":400,"line":320},[398,89441,2676],{"emptyLinePlaceholder":328},[398,89443,89444,89446,89448],{"class":400,"line":1470},[398,89445,1312],{"class":408},[398,89447,51527],{"class":51493},[398,89449,51500],{"class":408},[398,89451,89452,89454,89456,89458,89460,89462],{"class":400,"line":1476},[398,89453,52337],{"class":408},[398,89455,51537],{"class":51493},[398,89457,51540],{"class":2239},[398,89459,454],{"class":408},[398,89461,51545],{"class":513},[398,89463,51500],{"class":408},[398,89465,89466,89468,89470,89472,89474,89476,89478,89480,89482],{"class":400,"line":1490},[398,89467,52337],{"class":408},[398,89469,51537],{"class":51493},[398,89471,15197],{"class":2239},[398,89473,454],{"class":408},[398,89475,51584],{"class":513},[398,89477,51564],{"class":2239},[398,89479,454],{"class":408},[398,89481,51591],{"class":513},[398,89483,51500],{"class":408},[398,89485,89486,89488,89490,89492,89494],{"class":400,"line":1496},[398,89487,52337],{"class":408},[398,89489,51600],{"class":51493},[398,89491,51603],{"class":408},[398,89493,51600],{"class":51493},[398,89495,51500],{"class":408},[398,89497,89498,89500,89502],{"class":400,"line":1587},[398,89499,51978],{"class":408},[398,89501,51527],{"class":51493},[398,89503,51500],{"class":408},[398,89505,89506],{"class":400,"line":1593},[398,89507,2676],{"emptyLinePlaceholder":328},[398,89509,89510,89512,89514],{"class":400,"line":1605},[398,89511,1312],{"class":408},[398,89513,51993],{"class":51493},[398,89515,51500],{"class":408},[398,89517,89518,89520,89522],{"class":400,"line":1888},[398,89519,52337],{"class":408},[398,89521,52006],{"class":51493},[398,89523,51500],{"class":408},[398,89525,89526,89528,89530,89532],{"class":400,"line":1893},[398,89527,11498],{"class":404},[398,89529,70164],{"class":457},[398,89531,13841],{"class":404},[398,89533,15849],{"class":408},[398,89535,89536,89538],{"class":400,"line":1899},[398,89537,71819],{"class":408},[398,89539,89540],{"class":457},"18\n",[398,89542,89543],{"class":400,"line":1904},[398,89544,2463],{"class":408},[398,89546,89547],{"class":400,"line":1918},[398,89548,89549],{"class":467},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[398,89551,89552,89554,89556,89558,89560,89562,89564],{"class":400,"line":1923},[398,89553,70277],{"class":404},[398,89555,89043],{"class":2239},[398,89557,409],{"class":408},[398,89559,1222],{"class":5493},[398,89561,12712],{"class":408},[398,89563,1247],{"class":5493},[398,89565,12719],{"class":408},[398,89567,89568,89570,89572,89574,89576],{"class":400,"line":1929},[398,89569,58437],{"class":408},[398,89571,58440],{"class":2239},[398,89573,409],{"class":408},[398,89575,87186],{"class":457},[398,89577,415],{"class":408},[398,89579,89580,89582,89584,89587,89589],{"class":400,"line":1950},[398,89581,58437],{"class":408},[398,89583,58440],{"class":2239},[398,89585,89586],{"class":408},"(x ",[398,89588,883],{"class":404},[398,89590,89591],{"class":408}," y)\n",[398,89593,89594],{"class":400,"line":1955},[398,89595,2463],{"class":408},[398,89597,89598],{"class":400,"line":1969},[398,89599,89600],{"class":467},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[398,89602,89603,89606,89609,89612,89614,89616,89618],{"class":400,"line":1974},[398,89604,89605],{"class":408},"    fn.",[398,89607,89608],{"class":2239},"apply",[398,89610,89611],{"class":408},"(obj, [",[398,89613,619],{"class":457},[398,89615,12712],{"class":408},[398,89617,486],{"class":457},[398,89619,4933],{"class":408},[398,89621,89622],{"class":400,"line":2003},[398,89623,89624],{"class":467},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[398,89626,89627],{"class":400,"line":2008},[398,89628,2676],{"emptyLinePlaceholder":328},[398,89630,89631],{"class":400,"line":2025},[398,89632,89633],{"class":467},"    \u002F\u002F 使用场景：求数组最大值\n",[398,89635,89636],{"class":400,"line":2030},[398,89637,89638],{"class":467},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[398,89640,89641,89644],{"class":400,"line":2035},[398,89642,89643],{"class":467},"    \u002F\u002F console.log(max)",[398,89645,89646],{"class":467},"   \u002F\u002F3\n",[398,89648,89649],{"class":400,"line":2040},[398,89650,89651],{"class":467},"    \u002F\u002F 指向空或者Math都是可以的\n",[398,89653,89654,89656,89658,89660,89662,89664,89666,89668,89670,89672],{"class":400,"line":2054},[398,89655,11498],{"class":404},[398,89657,57888],{"class":457},[398,89659,13841],{"class":404},[398,89661,52419],{"class":408},[398,89663,713],{"class":457},[398,89665,12712],{"class":408},[398,89667,906],{"class":457},[398,89669,12712],{"class":408},[398,89671,937],{"class":457},[398,89673,33439],{"class":408},[398,89675,89676],{"class":400,"line":2059},[398,89677,89678],{"class":467},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[398,89680,89681,89683,89685,89687,89690,89692],{"class":400,"line":2853},[398,89682,11498],{"class":404},[398,89684,6228],{"class":457},[398,89686,13841],{"class":404},[398,89688,89689],{"class":408}," Math.max.",[398,89691,89608],{"class":2239},[398,89693,89694],{"class":408},"(Math, arr)\n",[398,89696,89697,89699,89702,89704,89707,89709],{"class":400,"line":2867},[398,89698,11498],{"class":404},[398,89700,89701],{"class":457}," min",[398,89703,13841],{"class":404},[398,89705,89706],{"class":408}," Math.min.",[398,89708,89608],{"class":2239},[398,89710,89694],{"class":408},[398,89712,89713,89715,89717,89720],{"class":400,"line":2875},[398,89714,73946],{"class":408},[398,89716,58440],{"class":2239},[398,89718,89719],{"class":408},"(max, min)     ",[398,89721,89722],{"class":467},"\u002F\u002F100,4\n",[398,89724,89725],{"class":400,"line":2880},[398,89726,2676],{"emptyLinePlaceholder":328},[398,89728,89729],{"class":400,"line":2886},[398,89730,89731],{"class":467},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[398,89733,89734,89736,89738,89741,89743,89745,89748],{"class":400,"line":2892},[398,89735,73946],{"class":408},[398,89737,58440],{"class":2239},[398,89739,89740],{"class":408},"(Max.",[398,89742,6292],{"class":2239},[398,89744,409],{"class":408},[398,89746,89747],{"class":404},"...",[398,89749,89750],{"class":408},"arr))\n",[398,89752,89753,89755,89757],{"class":400,"line":2897},[398,89754,52610],{"class":408},[398,89756,52006],{"class":51493},[398,89758,51500],{"class":408},[398,89760,89761,89763,89765],{"class":400,"line":8225},[398,89762,51978],{"class":408},[398,89764,51993],{"class":51493},[398,89766,51500],{"class":408},[398,89768,89769],{"class":400,"line":8249},[398,89770,2676],{"emptyLinePlaceholder":328},[398,89772,89773,89775,89777],{"class":400,"line":8254},[398,89774,51978],{"class":408},[398,89776,50828],{"class":51493},[398,89778,51500],{"class":408},[19,89780,89781],{},[1738,89782],{"alt":316,"src":89783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[38,89785,89786],{"start":320},[41,89787,89788],{},"bind()",[19,89790,89791],{},[1738,89792],{"alt":316,"src":89793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,89795,89796],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,89798,89799],{},"bind的语法跟call很相似",[389,89801,89803],{"className":53260,"code":89802,"language":53262,"meta":316,"style":316},"\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",[395,89804,89805,89813,89821,89825,89830,89834,89838,89843,89847,89852,89857,89862,89867,89872,89877,89882,89886,89894],{"__ignoreMap":316},[398,89806,89807,89809,89811],{"class":400,"line":401},[398,89808,1312],{"class":408},[398,89810,51993],{"class":51493},[398,89812,51500],{"class":408},[398,89814,89815,89817,89819],{"class":400,"line":317},[398,89816,52337],{"class":408},[398,89818,52006],{"class":51493},[398,89820,51500],{"class":408},[398,89822,89823],{"class":400,"line":320},[398,89824,71716],{"class":408},[398,89826,89827],{"class":400,"line":1470},[398,89828,89829],{"class":408},"      age: 18\n",[398,89831,89832],{"class":400,"line":1476},[398,89833,2463],{"class":408},[398,89835,89836],{"class":400,"line":1490},[398,89837,77336],{"class":408},[398,89839,89840],{"class":400,"line":1496},[398,89841,89842],{"class":408},"      console.log(this)\n",[398,89844,89845],{"class":400,"line":1587},[398,89846,2463],{"class":408},[398,89848,89849],{"class":400,"line":1593},[398,89850,89851],{"class":408},"    \u002F\u002F 1.bind 不会调用函数\n",[398,89853,89854],{"class":400,"line":1605},[398,89855,89856],{"class":408},"    \u002F\u002F 2.bind能改变this的指向\n",[398,89858,89859],{"class":400,"line":1888},[398,89860,89861],{"class":408},"    fn.bind()\n",[398,89863,89864],{"class":400,"line":1893},[398,89865,89866],{"class":408},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[398,89868,89869],{"class":400,"line":1899},[398,89870,89871],{"class":408},"    const fun = fn.bind(obj)\n",[398,89873,89874],{"class":400,"line":1904},[398,89875,89876],{"class":408},"    \u002F\u002F console.log(fun)\n",[398,89878,89879],{"class":400,"line":1918},[398,89880,89881],{"class":408},"    \u002F\u002F 调用,查看this的指向\n",[398,89883,89884],{"class":400,"line":1923},[398,89885,52844],{"class":408},[398,89887,89888,89890,89892],{"class":400,"line":1929},[398,89889,52610],{"class":408},[398,89891,52006],{"class":51493},[398,89893,51500],{"class":408},[398,89895,89896,89898,89900],{"class":400,"line":1950},[398,89897,51978],{"class":408},[398,89899,51993],{"class":51493},[398,89901,51500],{"class":408},[19,89903,89904],{},[1738,89905],{"alt":316,"src":89906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[38,89908,89909],{"start":1470},[41,89910,89911],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[389,89913,89915],{"className":53260,"code":89914,"language":53262,"meta":316,"style":316},"\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",[395,89916,89917,89925,89938,89946,89951,89955,89960,89965,89970,89975,89980,89985,89990,89995,89999,90007],{"__ignoreMap":316},[398,89918,89919,89921,89923],{"class":400,"line":401},[398,89920,1312],{"class":408},[398,89922,51993],{"class":51493},[398,89924,51500],{"class":408},[398,89926,89927,89929,89931,89934,89936],{"class":400,"line":317},[398,89928,52337],{"class":408},[398,89930,54080],{"class":51493},[398,89932,89933],{"class":408},">禁用\u003C\u002F",[398,89935,54080],{"class":51493},[398,89937,51500],{"class":408},[398,89939,89940,89942,89944],{"class":400,"line":320},[398,89941,52337],{"class":408},[398,89943,52006],{"class":51493},[398,89945,51500],{"class":408},[398,89947,89948],{"class":400,"line":1470},[398,89949,89950],{"class":408},"    const btn = document.querySelector('button')\n",[398,89952,89953],{"class":400,"line":1476},[398,89954,59209],{"class":408},[398,89956,89957],{"class":400,"line":1490},[398,89958,89959],{"class":408},"      this.disabled = true\n",[398,89961,89962],{"class":400,"line":1496},[398,89963,89964],{"class":408},"      \u002F\u002F 定时器是window进行调用的\n",[398,89966,89967],{"class":400,"line":1587},[398,89968,89969],{"class":408},"      setTimeout(function () {\n",[398,89971,89972],{"class":400,"line":1593},[398,89973,89974],{"class":408},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[398,89976,89977],{"class":400,"line":1605},[398,89978,89979],{"class":408},"        this.disabled = false\n",[398,89981,89982],{"class":400,"line":1888},[398,89983,89984],{"class":408},"      }.bind(this), 2000)\n",[398,89986,89987],{"class":400,"line":1893},[398,89988,89989],{"class":408},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[398,89991,89992],{"class":400,"line":1899},[398,89993,89994],{"class":408},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[398,89996,89997],{"class":400,"line":1904},[398,89998,33654],{"class":408},[398,90000,90001,90003,90005],{"class":400,"line":1918},[398,90002,52610],{"class":408},[398,90004,52006],{"class":51493},[398,90006,51500],{"class":408},[398,90008,90009,90011,90013],{"class":400,"line":1923},[398,90010,51978],{"class":408},[398,90012,51993],{"class":51493},[398,90014,51500],{"class":408},[38,90016,90017],{"start":1476},[41,90018,22230],{},[19,90020,90021],{},[1738,90022],{"alt":316,"src":90023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[343,90025,90027],{"id":90026},"_417-性能优化","4.17 性能优化",[14,90029,90031],{"id":90030},"_4171-防抖","4.17.1 防抖",[19,90033,90034],{},[1738,90035],{"alt":316,"src":90036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,90038,90039],{},[23,90040,90041],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,90043,90044],{},"防抖实现方式：",[67,90046,90047],{},[41,90048,90049],{},"lodash 提供了防抖处理",[19,90051,90052],{},"_.debounce(func,[wait=0],[options={}])",[19,90054,90055],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[389,90057,90059],{"className":50826,"code":90058,"language":50828,"meta":316,"style":316},"\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",[395,90060,90061,90071,90085,90089,90097,90111,90131,90143,90151,90157,90167,90179,90191,90202,90214,90224,90234,90247,90251,90259,90267,90271,90279,90297,90315,90323,90342,90352,90361,90372,90377,90381,90386,90391,90396,90421,90429,90437,90441],{"__ignoreMap":316},[398,90062,90063,90065,90067,90069],{"class":400,"line":401},[398,90064,51490],{"class":408},[398,90066,51494],{"class":51493},[398,90068,51497],{"class":2239},[398,90070,51500],{"class":408},[398,90072,90073,90075,90077,90079,90081,90083],{"class":400,"line":317},[398,90074,1312],{"class":408},[398,90076,50828],{"class":51493},[398,90078,51509],{"class":2239},[398,90080,454],{"class":408},[398,90082,51514],{"class":513},[398,90084,51500],{"class":408},[398,90086,90087],{"class":400,"line":320},[398,90088,2676],{"emptyLinePlaceholder":328},[398,90090,90091,90093,90095],{"class":400,"line":1470},[398,90092,1312],{"class":408},[398,90094,51527],{"class":51493},[398,90096,51500],{"class":408},[398,90098,90099,90101,90103,90105,90107,90109],{"class":400,"line":1476},[398,90100,52337],{"class":408},[398,90102,51537],{"class":51493},[398,90104,51540],{"class":2239},[398,90106,454],{"class":408},[398,90108,51545],{"class":513},[398,90110,51500],{"class":408},[398,90112,90113,90115,90117,90119,90121,90123,90125,90127,90129],{"class":400,"line":1490},[398,90114,52337],{"class":408},[398,90116,51537],{"class":51493},[398,90118,15197],{"class":2239},[398,90120,454],{"class":408},[398,90122,51584],{"class":513},[398,90124,51564],{"class":2239},[398,90126,454],{"class":408},[398,90128,51591],{"class":513},[398,90130,51500],{"class":408},[398,90132,90133,90135,90137,90139,90141],{"class":400,"line":1496},[398,90134,52337],{"class":408},[398,90136,51600],{"class":51493},[398,90138,51603],{"class":408},[398,90140,51600],{"class":51493},[398,90142,51500],{"class":408},[398,90144,90145,90147,90149],{"class":400,"line":1587},[398,90146,52337],{"class":408},[398,90148,5403],{"class":51493},[398,90150,51500],{"class":408},[398,90152,90153,90155],{"class":400,"line":1593},[398,90154,54945],{"class":2239},[398,90156,15849],{"class":408},[398,90158,90159,90161,90163,90165],{"class":400,"line":1605},[398,90160,72789],{"class":457},[398,90162,51630],{"class":408},[398,90164,60698],{"class":457},[398,90166,1566],{"class":408},[398,90168,90169,90171,90173,90175,90177],{"class":400,"line":1888},[398,90170,54964],{"class":457},[398,90172,51630],{"class":408},[398,90174,1998],{"class":457},[398,90176,51685],{"class":404},[398,90178,1566],{"class":408},[398,90180,90181,90183,90185,90187,90189],{"class":400,"line":1893},[398,90182,54978],{"class":457},[398,90184,51630],{"class":408},[398,90186,1998],{"class":457},[398,90188,51685],{"class":404},[398,90190,1566],{"class":408},[398,90192,90193,90195,90197,90200],{"class":400,"line":1899},[398,90194,55077],{"class":457},[398,90196,51630],{"class":408},[398,90198,90199],{"class":457},"gray",[398,90201,1566],{"class":408},[398,90203,90204,90206,90208,90210,90212],{"class":400,"line":1904},[398,90205,55115],{"class":457},[398,90207,51630],{"class":408},[398,90209,1227],{"class":457},[398,90211,51685],{"class":404},[398,90213,1566],{"class":408},[398,90215,90216,90218,90220,90222],{"class":400,"line":1918},[398,90217,57609],{"class":457},[398,90219,51630],{"class":408},[398,90221,61035],{"class":457},[398,90223,1566],{"class":408},[398,90225,90226,90228,90230,90232],{"class":400,"line":1923},[398,90227,57479],{"class":457},[398,90229,51630],{"class":408},[398,90231,51785],{"class":457},[398,90233,1566],{"class":408},[398,90235,90236,90239,90241,90243,90245],{"class":400,"line":1929},[398,90237,90238],{"class":457},"      padding-top",[398,90240,51630],{"class":408},[398,90242,721],{"class":457},[398,90244,51685],{"class":404},[398,90246,1566],{"class":408},[398,90248,90249],{"class":400,"line":1950},[398,90250,2463],{"class":408},[398,90252,90253,90255,90257],{"class":400,"line":1955},[398,90254,52610],{"class":408},[398,90256,5403],{"class":51493},[398,90258,51500],{"class":408},[398,90260,90261,90263,90265],{"class":400,"line":1969},[398,90262,51978],{"class":408},[398,90264,51527],{"class":51493},[398,90266,51500],{"class":408},[398,90268,90269],{"class":400,"line":1974},[398,90270,2676],{"emptyLinePlaceholder":328},[398,90272,90273,90275,90277],{"class":400,"line":2003},[398,90274,1312],{"class":408},[398,90276,51993],{"class":51493},[398,90278,51500],{"class":408},[398,90280,90281,90283,90285,90287,90289,90291,90293,90295],{"class":400,"line":2008},[398,90282,52337],{"class":408},[398,90284,51804],{"class":51493},[398,90286,53679],{"class":2239},[398,90288,454],{"class":408},[398,90290,53684],{"class":513},[398,90292,55507],{"class":408},[398,90294,51804],{"class":51493},[398,90296,51500],{"class":408},[398,90298,90299,90301,90303,90305,90307,90309,90311,90313],{"class":400,"line":2025},[398,90300,52337],{"class":408},[398,90302,52006],{"class":51493},[398,90304,55432],{"class":2239},[398,90306,454],{"class":408},[398,90308,88467],{"class":513},[398,90310,55507],{"class":408},[398,90312,52006],{"class":51493},[398,90314,51500],{"class":408},[398,90316,90317,90319,90321],{"class":400,"line":2030},[398,90318,52337],{"class":408},[398,90320,52006],{"class":51493},[398,90322,51500],{"class":408},[398,90324,90325,90327,90329,90331,90333,90335,90337,90340],{"class":400,"line":2035},[398,90326,11498],{"class":404},[398,90328,87126],{"class":457},[398,90330,13841],{"class":404},[398,90332,54589],{"class":408},[398,90334,54592],{"class":2239},[398,90336,409],{"class":408},[398,90338,90339],{"class":513},"'.box'",[398,90341,415],{"class":408},[398,90343,90344,90346,90348,90350],{"class":400,"line":2040},[398,90345,52412],{"class":404},[398,90347,9715],{"class":408},[398,90349,454],{"class":404},[398,90351,47526],{"class":457},[398,90353,90354,90356,90359],{"class":400,"line":2054},[398,90355,70277],{"class":404},[398,90357,90358],{"class":2239}," mouseMove",[398,90360,11130],{"class":408},[398,90362,90363,90366,90368,90370],{"class":400,"line":2059},[398,90364,90365],{"class":408},"      box.innerHTML ",[398,90367,454],{"class":404},[398,90369,3308],{"class":408},[398,90371,2978],{"class":404},[398,90373,90374],{"class":400,"line":2853},[398,90375,90376],{"class":467},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[398,90378,90379],{"class":400,"line":2867},[398,90380,2463],{"class":408},[398,90382,90383],{"class":400,"line":2875},[398,90384,90385],{"class":467},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[398,90387,90388],{"class":400,"line":2880},[398,90389,90390],{"class":467},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[398,90392,90393],{"class":400,"line":2886},[398,90394,90395],{"class":467},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[398,90397,90398,90401,90403,90405,90408,90411,90414,90417,90419],{"class":400,"line":2892},[398,90399,90400],{"class":408},"    box.",[398,90402,58006],{"class":2239},[398,90404,409],{"class":408},[398,90406,90407],{"class":513},"'mousemove'",[398,90409,90410],{"class":408},", _.",[398,90412,90413],{"class":2239},"debounce",[398,90415,90416],{"class":408},"(mouseMove, ",[398,90418,65267],{"class":457},[398,90420,30690],{"class":408},[398,90422,90423,90425,90427],{"class":400,"line":2897},[398,90424,52610],{"class":408},[398,90426,52006],{"class":51493},[398,90428,51500],{"class":408},[398,90430,90431,90433,90435],{"class":400,"line":8225},[398,90432,51978],{"class":408},[398,90434,51993],{"class":51493},[398,90436,51500],{"class":408},[398,90438,90439],{"class":400,"line":8249},[398,90440,2676],{"emptyLinePlaceholder":328},[398,90442,90443,90445,90447],{"class":400,"line":8254},[398,90444,51978],{"class":408},[398,90446,50828],{"class":51493},[398,90448,51500],{"class":408},[67,90450,90451],{},[41,90452,90453],{},"手写一个防抖函数来处理",[19,90455,90456],{},"防抖的核心就是利用定时器来实现的：",[19,90458,90459],{},"①声明一个定时器变量",[19,90461,90462],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,90464,90465],{},"③如果没有定时器则开启定时器，记得存到变量里面",[389,90467,90469],{"className":50826,"code":90468,"language":50828,"meta":316,"style":316},"\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",[395,90470,90471,90481,90495,90499,90507,90521,90541,90553,90561,90567,90577,90589,90601,90611,90623,90633,90643,90655,90659,90667,90675,90679,90687,90705,90723,90731,90749,90759,90767,90777,90781,90785,90789,90794,90799,90804,90809,90814,90819,90837,90844,90849,90857,90862,90875,90891,90901,90906,90910,90914,90934,90938,90943,90948,90953,90958,90966,90974,90978],{"__ignoreMap":316},[398,90472,90473,90475,90477,90479],{"class":400,"line":401},[398,90474,51490],{"class":408},[398,90476,51494],{"class":51493},[398,90478,51497],{"class":2239},[398,90480,51500],{"class":408},[398,90482,90483,90485,90487,90489,90491,90493],{"class":400,"line":317},[398,90484,1312],{"class":408},[398,90486,50828],{"class":51493},[398,90488,51509],{"class":2239},[398,90490,454],{"class":408},[398,90492,51514],{"class":513},[398,90494,51500],{"class":408},[398,90496,90497],{"class":400,"line":320},[398,90498,2676],{"emptyLinePlaceholder":328},[398,90500,90501,90503,90505],{"class":400,"line":1470},[398,90502,1312],{"class":408},[398,90504,51527],{"class":51493},[398,90506,51500],{"class":408},[398,90508,90509,90511,90513,90515,90517,90519],{"class":400,"line":1476},[398,90510,52337],{"class":408},[398,90512,51537],{"class":51493},[398,90514,51540],{"class":2239},[398,90516,454],{"class":408},[398,90518,51545],{"class":513},[398,90520,51500],{"class":408},[398,90522,90523,90525,90527,90529,90531,90533,90535,90537,90539],{"class":400,"line":1490},[398,90524,52337],{"class":408},[398,90526,51537],{"class":51493},[398,90528,15197],{"class":2239},[398,90530,454],{"class":408},[398,90532,51584],{"class":513},[398,90534,51564],{"class":2239},[398,90536,454],{"class":408},[398,90538,51591],{"class":513},[398,90540,51500],{"class":408},[398,90542,90543,90545,90547,90549,90551],{"class":400,"line":1496},[398,90544,52337],{"class":408},[398,90546,51600],{"class":51493},[398,90548,51603],{"class":408},[398,90550,51600],{"class":51493},[398,90552,51500],{"class":408},[398,90554,90555,90557,90559],{"class":400,"line":1587},[398,90556,52337],{"class":408},[398,90558,5403],{"class":51493},[398,90560,51500],{"class":408},[398,90562,90563,90565],{"class":400,"line":1593},[398,90564,54945],{"class":2239},[398,90566,15849],{"class":408},[398,90568,90569,90571,90573,90575],{"class":400,"line":1605},[398,90570,72789],{"class":457},[398,90572,51630],{"class":408},[398,90574,60698],{"class":457},[398,90576,1566],{"class":408},[398,90578,90579,90581,90583,90585,90587],{"class":400,"line":1888},[398,90580,54964],{"class":457},[398,90582,51630],{"class":408},[398,90584,1998],{"class":457},[398,90586,51685],{"class":404},[398,90588,1566],{"class":408},[398,90590,90591,90593,90595,90597,90599],{"class":400,"line":1893},[398,90592,54978],{"class":457},[398,90594,51630],{"class":408},[398,90596,1998],{"class":457},[398,90598,51685],{"class":404},[398,90600,1566],{"class":408},[398,90602,90603,90605,90607,90609],{"class":400,"line":1899},[398,90604,55077],{"class":457},[398,90606,51630],{"class":408},[398,90608,90199],{"class":457},[398,90610,1566],{"class":408},[398,90612,90613,90615,90617,90619,90621],{"class":400,"line":1904},[398,90614,55115],{"class":457},[398,90616,51630],{"class":408},[398,90618,1227],{"class":457},[398,90620,51685],{"class":404},[398,90622,1566],{"class":408},[398,90624,90625,90627,90629,90631],{"class":400,"line":1918},[398,90626,57609],{"class":457},[398,90628,51630],{"class":408},[398,90630,61035],{"class":457},[398,90632,1566],{"class":408},[398,90634,90635,90637,90639,90641],{"class":400,"line":1923},[398,90636,57479],{"class":457},[398,90638,51630],{"class":408},[398,90640,51785],{"class":457},[398,90642,1566],{"class":408},[398,90644,90645,90647,90649,90651,90653],{"class":400,"line":1929},[398,90646,90238],{"class":457},[398,90648,51630],{"class":408},[398,90650,721],{"class":457},[398,90652,51685],{"class":404},[398,90654,1566],{"class":408},[398,90656,90657],{"class":400,"line":1950},[398,90658,2463],{"class":408},[398,90660,90661,90663,90665],{"class":400,"line":1955},[398,90662,52610],{"class":408},[398,90664,5403],{"class":51493},[398,90666,51500],{"class":408},[398,90668,90669,90671,90673],{"class":400,"line":1969},[398,90670,51978],{"class":408},[398,90672,51527],{"class":51493},[398,90674,51500],{"class":408},[398,90676,90677],{"class":400,"line":1974},[398,90678,2676],{"emptyLinePlaceholder":328},[398,90680,90681,90683,90685],{"class":400,"line":2003},[398,90682,1312],{"class":408},[398,90684,51993],{"class":51493},[398,90686,51500],{"class":408},[398,90688,90689,90691,90693,90695,90697,90699,90701,90703],{"class":400,"line":2008},[398,90690,52337],{"class":408},[398,90692,51804],{"class":51493},[398,90694,53679],{"class":2239},[398,90696,454],{"class":408},[398,90698,53684],{"class":513},[398,90700,55507],{"class":408},[398,90702,51804],{"class":51493},[398,90704,51500],{"class":408},[398,90706,90707,90709,90711,90713,90715,90717,90719,90721],{"class":400,"line":2025},[398,90708,52337],{"class":408},[398,90710,52006],{"class":51493},[398,90712,55432],{"class":2239},[398,90714,454],{"class":408},[398,90716,88467],{"class":513},[398,90718,55507],{"class":408},[398,90720,52006],{"class":51493},[398,90722,51500],{"class":408},[398,90724,90725,90727,90729],{"class":400,"line":2030},[398,90726,52337],{"class":408},[398,90728,52006],{"class":51493},[398,90730,51500],{"class":408},[398,90732,90733,90735,90737,90739,90741,90743,90745,90747],{"class":400,"line":2035},[398,90734,11498],{"class":404},[398,90736,87126],{"class":457},[398,90738,13841],{"class":404},[398,90740,54589],{"class":408},[398,90742,54592],{"class":2239},[398,90744,409],{"class":408},[398,90746,90339],{"class":513},[398,90748,415],{"class":408},[398,90750,90751,90753,90755,90757],{"class":400,"line":2040},[398,90752,52412],{"class":404},[398,90754,9715],{"class":408},[398,90756,454],{"class":404},[398,90758,47526],{"class":457},[398,90760,90761,90763,90765],{"class":400,"line":2054},[398,90762,70277],{"class":404},[398,90764,90358],{"class":2239},[398,90766,11130],{"class":408},[398,90768,90769,90771,90773,90775],{"class":400,"line":2059},[398,90770,90365],{"class":408},[398,90772,454],{"class":404},[398,90774,3308],{"class":408},[398,90776,2978],{"class":404},[398,90778,90779],{"class":400,"line":2853},[398,90780,90376],{"class":467},[398,90782,90783],{"class":400,"line":2867},[398,90784,2463],{"class":408},[398,90786,90787],{"class":400,"line":2875},[398,90788,90385],{"class":467},[398,90790,90791],{"class":400,"line":2880},[398,90792,90793],{"class":467},"    \u002F\u002F 手写防抖函数\n",[398,90795,90796],{"class":400,"line":2886},[398,90797,90798],{"class":467},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[398,90800,90801],{"class":400,"line":2892},[398,90802,90803],{"class":467},"    \u002F\u002F 1.声明定时器变量\n",[398,90805,90806],{"class":400,"line":2897},[398,90807,90808],{"class":467},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[398,90810,90811],{"class":400,"line":8225},[398,90812,90813],{"class":467},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[398,90815,90816],{"class":400,"line":8249},[398,90817,90818],{"class":467},"    \u002F\u002F 4.定时器里面写函数调用\n",[398,90820,90821,90823,90826,90828,90831,90833,90835],{"class":400,"line":8254},[398,90822,70277],{"class":404},[398,90824,90825],{"class":2239}," debounce",[398,90827,409],{"class":408},[398,90829,90830],{"class":5493},"fn",[398,90832,12712],{"class":408},[398,90834,1122],{"class":5493},[398,90836,12719],{"class":408},[398,90838,90839,90841],{"class":400,"line":8260},[398,90840,79965],{"class":404},[398,90842,90843],{"class":408}," timer\n",[398,90845,90846],{"class":400,"line":8287},[398,90847,90848],{"class":467},"      \u002F\u002F return 返回一个匿名函数\n",[398,90850,90851,90853,90855],{"class":400,"line":8292},[398,90852,74175],{"class":404},[398,90854,59111],{"class":404},[398,90856,54645],{"class":408},[398,90858,90859],{"class":400,"line":8298},[398,90860,90861],{"class":467},"        \u002F\u002F 这里边写第二三四步\n",[398,90863,90864,90866,90869,90872],{"class":400,"line":8310},[398,90865,2773],{"class":404},[398,90867,90868],{"class":408}," (timer) ",[398,90870,90871],{"class":2239},"clearTimeout",[398,90873,90874],{"class":408},"(timer)\n",[398,90876,90877,90880,90882,90885,90887,90889],{"class":400,"line":8322},[398,90878,90879],{"class":408},"        timer ",[398,90881,454],{"class":404},[398,90883,90884],{"class":2239}," setTimeout",[398,90886,409],{"class":408},[398,90888,54642],{"class":404},[398,90890,54645],{"class":408},[398,90892,90893,90896,90898],{"class":400,"line":8334},[398,90894,90895],{"class":2239},"          fn",[398,90897,13327],{"class":408},[398,90899,90900],{"class":467},"\u002F\u002F加小括号调用fn }, t)\n",[398,90902,90903],{"class":400,"line":9993},[398,90904,90905],{"class":408},"        }, t)\n",[398,90907,90908],{"class":400,"line":10018},[398,90909,52591],{"class":408},[398,90911,90912],{"class":400,"line":10041},[398,90913,2463],{"class":408},[398,90915,90916,90918,90920,90922,90924,90926,90928,90930,90932],{"class":400,"line":10065},[398,90917,90400],{"class":408},[398,90919,58006],{"class":2239},[398,90921,409],{"class":408},[398,90923,90407],{"class":513},[398,90925,12712],{"class":408},[398,90927,90413],{"class":2239},[398,90929,90416],{"class":408},[398,90931,65267],{"class":457},[398,90933,30690],{"class":408},[398,90935,90936],{"class":400,"line":10070},[398,90937,2676],{"emptyLinePlaceholder":328},[398,90939,90940],{"class":400,"line":10075},[398,90941,90942],{"class":467},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[398,90944,90945],{"class":400,"line":10080},[398,90946,90947],{"class":467},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[398,90949,90950],{"class":400,"line":10089},[398,90951,90952],{"class":467},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[398,90954,90955],{"class":400,"line":10094},[398,90956,90957],{"class":467},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[398,90959,90960,90962,90964],{"class":400,"line":10100},[398,90961,52610],{"class":408},[398,90963,52006],{"class":51493},[398,90965,51500],{"class":408},[398,90967,90968,90970,90972],{"class":400,"line":10121},[398,90969,51978],{"class":408},[398,90971,51993],{"class":51493},[398,90973,51500],{"class":408},[398,90975,90976],{"class":400,"line":10127},[398,90977,2676],{"emptyLinePlaceholder":328},[398,90979,90980,90982,90984],{"class":400,"line":10141},[398,90981,51978],{"class":408},[398,90983,50828],{"class":51493},[398,90985,51500],{"class":408},[14,90987,90989],{"id":90988},"_4172-节流","4.17.2 节流",[19,90991,90992],{},[1738,90993],{"alt":316,"src":90994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,90996,90997],{},[1738,90998],{"alt":316,"src":90999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,91001,91002],{},[23,91003,91004],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,91006,91007],{},"实现方式：",[67,91009,91010],{},[41,91011,91012],{},"lodash 提供的节流函数来处理",[19,91014,91015],{},"_.throttle(func,[wait=0],[options=])",[19,91017,91018],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[389,91020,91022],{"className":50826,"code":91021,"language":50828,"meta":316,"style":316},"\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",[395,91023,91024,91034,91048,91052,91060,91074,91094,91106,91114,91120,91130,91142,91154,91164,91176,91186,91196,91208,91212,91220,91228,91232,91240,91258,91276,91284,91302,91312,91320,91330,91334,91338,91342,91347,91352,91373,91381,91389,91393],{"__ignoreMap":316},[398,91025,91026,91028,91030,91032],{"class":400,"line":401},[398,91027,51490],{"class":408},[398,91029,51494],{"class":51493},[398,91031,51497],{"class":2239},[398,91033,51500],{"class":408},[398,91035,91036,91038,91040,91042,91044,91046],{"class":400,"line":317},[398,91037,1312],{"class":408},[398,91039,50828],{"class":51493},[398,91041,51509],{"class":2239},[398,91043,454],{"class":408},[398,91045,51514],{"class":513},[398,91047,51500],{"class":408},[398,91049,91050],{"class":400,"line":320},[398,91051,2676],{"emptyLinePlaceholder":328},[398,91053,91054,91056,91058],{"class":400,"line":1470},[398,91055,1312],{"class":408},[398,91057,51527],{"class":51493},[398,91059,51500],{"class":408},[398,91061,91062,91064,91066,91068,91070,91072],{"class":400,"line":1476},[398,91063,52337],{"class":408},[398,91065,51537],{"class":51493},[398,91067,51540],{"class":2239},[398,91069,454],{"class":408},[398,91071,51545],{"class":513},[398,91073,51500],{"class":408},[398,91075,91076,91078,91080,91082,91084,91086,91088,91090,91092],{"class":400,"line":1490},[398,91077,52337],{"class":408},[398,91079,51537],{"class":51493},[398,91081,15197],{"class":2239},[398,91083,454],{"class":408},[398,91085,51584],{"class":513},[398,91087,51564],{"class":2239},[398,91089,454],{"class":408},[398,91091,51591],{"class":513},[398,91093,51500],{"class":408},[398,91095,91096,91098,91100,91102,91104],{"class":400,"line":1496},[398,91097,52337],{"class":408},[398,91099,51600],{"class":51493},[398,91101,51603],{"class":408},[398,91103,51600],{"class":51493},[398,91105,51500],{"class":408},[398,91107,91108,91110,91112],{"class":400,"line":1587},[398,91109,52337],{"class":408},[398,91111,5403],{"class":51493},[398,91113,51500],{"class":408},[398,91115,91116,91118],{"class":400,"line":1593},[398,91117,54945],{"class":2239},[398,91119,15849],{"class":408},[398,91121,91122,91124,91126,91128],{"class":400,"line":1605},[398,91123,72789],{"class":457},[398,91125,51630],{"class":408},[398,91127,60698],{"class":457},[398,91129,1566],{"class":408},[398,91131,91132,91134,91136,91138,91140],{"class":400,"line":1888},[398,91133,54964],{"class":457},[398,91135,51630],{"class":408},[398,91137,1998],{"class":457},[398,91139,51685],{"class":404},[398,91141,1566],{"class":408},[398,91143,91144,91146,91148,91150,91152],{"class":400,"line":1893},[398,91145,54978],{"class":457},[398,91147,51630],{"class":408},[398,91149,1998],{"class":457},[398,91151,51685],{"class":404},[398,91153,1566],{"class":408},[398,91155,91156,91158,91160,91162],{"class":400,"line":1899},[398,91157,55077],{"class":457},[398,91159,51630],{"class":408},[398,91161,90199],{"class":457},[398,91163,1566],{"class":408},[398,91165,91166,91168,91170,91172,91174],{"class":400,"line":1904},[398,91167,55115],{"class":457},[398,91169,51630],{"class":408},[398,91171,1227],{"class":457},[398,91173,51685],{"class":404},[398,91175,1566],{"class":408},[398,91177,91178,91180,91182,91184],{"class":400,"line":1918},[398,91179,57609],{"class":457},[398,91181,51630],{"class":408},[398,91183,61035],{"class":457},[398,91185,1566],{"class":408},[398,91187,91188,91190,91192,91194],{"class":400,"line":1923},[398,91189,57479],{"class":457},[398,91191,51630],{"class":408},[398,91193,51785],{"class":457},[398,91195,1566],{"class":408},[398,91197,91198,91200,91202,91204,91206],{"class":400,"line":1929},[398,91199,90238],{"class":457},[398,91201,51630],{"class":408},[398,91203,721],{"class":457},[398,91205,51685],{"class":404},[398,91207,1566],{"class":408},[398,91209,91210],{"class":400,"line":1950},[398,91211,2463],{"class":408},[398,91213,91214,91216,91218],{"class":400,"line":1955},[398,91215,52610],{"class":408},[398,91217,5403],{"class":51493},[398,91219,51500],{"class":408},[398,91221,91222,91224,91226],{"class":400,"line":1969},[398,91223,51978],{"class":408},[398,91225,51527],{"class":51493},[398,91227,51500],{"class":408},[398,91229,91230],{"class":400,"line":1974},[398,91231,2676],{"emptyLinePlaceholder":328},[398,91233,91234,91236,91238],{"class":400,"line":2003},[398,91235,1312],{"class":408},[398,91237,51993],{"class":51493},[398,91239,51500],{"class":408},[398,91241,91242,91244,91246,91248,91250,91252,91254,91256],{"class":400,"line":2008},[398,91243,52337],{"class":408},[398,91245,51804],{"class":51493},[398,91247,53679],{"class":2239},[398,91249,454],{"class":408},[398,91251,53684],{"class":513},[398,91253,55507],{"class":408},[398,91255,51804],{"class":51493},[398,91257,51500],{"class":408},[398,91259,91260,91262,91264,91266,91268,91270,91272,91274],{"class":400,"line":2025},[398,91261,52337],{"class":408},[398,91263,52006],{"class":51493},[398,91265,55432],{"class":2239},[398,91267,454],{"class":408},[398,91269,88467],{"class":513},[398,91271,55507],{"class":408},[398,91273,52006],{"class":51493},[398,91275,51500],{"class":408},[398,91277,91278,91280,91282],{"class":400,"line":2030},[398,91279,52337],{"class":408},[398,91281,52006],{"class":51493},[398,91283,51500],{"class":408},[398,91285,91286,91288,91290,91292,91294,91296,91298,91300],{"class":400,"line":2035},[398,91287,11498],{"class":404},[398,91289,87126],{"class":457},[398,91291,13841],{"class":404},[398,91293,54589],{"class":408},[398,91295,54592],{"class":2239},[398,91297,409],{"class":408},[398,91299,90339],{"class":513},[398,91301,415],{"class":408},[398,91303,91304,91306,91308,91310],{"class":400,"line":2040},[398,91305,52412],{"class":404},[398,91307,9715],{"class":408},[398,91309,454],{"class":404},[398,91311,47526],{"class":457},[398,91313,91314,91316,91318],{"class":400,"line":2054},[398,91315,70277],{"class":404},[398,91317,90358],{"class":2239},[398,91319,11130],{"class":408},[398,91321,91322,91324,91326,91328],{"class":400,"line":2059},[398,91323,90365],{"class":408},[398,91325,454],{"class":404},[398,91327,3308],{"class":408},[398,91329,2978],{"class":404},[398,91331,91332],{"class":400,"line":2853},[398,91333,90376],{"class":467},[398,91335,91336],{"class":400,"line":2867},[398,91337,2463],{"class":408},[398,91339,91340],{"class":400,"line":2875},[398,91341,90385],{"class":467},[398,91343,91344],{"class":400,"line":2880},[398,91345,91346],{"class":467},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[398,91348,91349],{"class":400,"line":2886},[398,91350,91351],{"class":467},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[398,91353,91354,91356,91358,91360,91362,91364,91367,91369,91371],{"class":400,"line":2892},[398,91355,90400],{"class":408},[398,91357,58006],{"class":2239},[398,91359,409],{"class":408},[398,91361,90407],{"class":513},[398,91363,90410],{"class":408},[398,91365,91366],{"class":2239},"throttle",[398,91368,90416],{"class":408},[398,91370,65267],{"class":457},[398,91372,30690],{"class":408},[398,91374,91375,91377,91379],{"class":400,"line":2897},[398,91376,52610],{"class":408},[398,91378,52006],{"class":51493},[398,91380,51500],{"class":408},[398,91382,91383,91385,91387],{"class":400,"line":8225},[398,91384,51978],{"class":408},[398,91386,51993],{"class":51493},[398,91388,51500],{"class":408},[398,91390,91391],{"class":400,"line":8249},[398,91392,2676],{"emptyLinePlaceholder":328},[398,91394,91395,91397,91399],{"class":400,"line":8254},[398,91396,51978],{"class":408},[398,91398,50828],{"class":51493},[398,91400,51500],{"class":408},[67,91402,91403],{},[41,91404,91405],{},"手写一个节流函数来处理",[19,91407,71145],{},[19,91409,90459],{},[19,91411,91412],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,91414,91415],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[389,91417,91419],{"className":50826,"code":91418,"language":50828,"meta":316,"style":316},"\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",[395,91420,91421,91431,91445,91449,91457,91471,91491,91503,91511,91517,91527,91539,91551,91561,91573,91583,91593,91605,91609,91617,91625,91629,91637,91655,91673,91681,91699,91709,91717,91727,91731,91735,91739,91744,91749,91754,91759,91764,91769,91786,91792,91800,91811,91826,91833,91838,91843,91853,91858,91863,91868,91872,91876,91880,91900,91908,91916,91920],{"__ignoreMap":316},[398,91422,91423,91425,91427,91429],{"class":400,"line":401},[398,91424,51490],{"class":408},[398,91426,51494],{"class":51493},[398,91428,51497],{"class":2239},[398,91430,51500],{"class":408},[398,91432,91433,91435,91437,91439,91441,91443],{"class":400,"line":317},[398,91434,1312],{"class":408},[398,91436,50828],{"class":51493},[398,91438,51509],{"class":2239},[398,91440,454],{"class":408},[398,91442,51514],{"class":513},[398,91444,51500],{"class":408},[398,91446,91447],{"class":400,"line":320},[398,91448,2676],{"emptyLinePlaceholder":328},[398,91450,91451,91453,91455],{"class":400,"line":1470},[398,91452,1312],{"class":408},[398,91454,51527],{"class":51493},[398,91456,51500],{"class":408},[398,91458,91459,91461,91463,91465,91467,91469],{"class":400,"line":1476},[398,91460,52337],{"class":408},[398,91462,51537],{"class":51493},[398,91464,51540],{"class":2239},[398,91466,454],{"class":408},[398,91468,51545],{"class":513},[398,91470,51500],{"class":408},[398,91472,91473,91475,91477,91479,91481,91483,91485,91487,91489],{"class":400,"line":1490},[398,91474,52337],{"class":408},[398,91476,51537],{"class":51493},[398,91478,15197],{"class":2239},[398,91480,454],{"class":408},[398,91482,51584],{"class":513},[398,91484,51564],{"class":2239},[398,91486,454],{"class":408},[398,91488,51591],{"class":513},[398,91490,51500],{"class":408},[398,91492,91493,91495,91497,91499,91501],{"class":400,"line":1496},[398,91494,52337],{"class":408},[398,91496,51600],{"class":51493},[398,91498,51603],{"class":408},[398,91500,51600],{"class":51493},[398,91502,51500],{"class":408},[398,91504,91505,91507,91509],{"class":400,"line":1587},[398,91506,52337],{"class":408},[398,91508,5403],{"class":51493},[398,91510,51500],{"class":408},[398,91512,91513,91515],{"class":400,"line":1593},[398,91514,54945],{"class":2239},[398,91516,15849],{"class":408},[398,91518,91519,91521,91523,91525],{"class":400,"line":1605},[398,91520,72789],{"class":457},[398,91522,51630],{"class":408},[398,91524,60698],{"class":457},[398,91526,1566],{"class":408},[398,91528,91529,91531,91533,91535,91537],{"class":400,"line":1888},[398,91530,54964],{"class":457},[398,91532,51630],{"class":408},[398,91534,1998],{"class":457},[398,91536,51685],{"class":404},[398,91538,1566],{"class":408},[398,91540,91541,91543,91545,91547,91549],{"class":400,"line":1893},[398,91542,54978],{"class":457},[398,91544,51630],{"class":408},[398,91546,1998],{"class":457},[398,91548,51685],{"class":404},[398,91550,1566],{"class":408},[398,91552,91553,91555,91557,91559],{"class":400,"line":1899},[398,91554,55077],{"class":457},[398,91556,51630],{"class":408},[398,91558,90199],{"class":457},[398,91560,1566],{"class":408},[398,91562,91563,91565,91567,91569,91571],{"class":400,"line":1904},[398,91564,55115],{"class":457},[398,91566,51630],{"class":408},[398,91568,1227],{"class":457},[398,91570,51685],{"class":404},[398,91572,1566],{"class":408},[398,91574,91575,91577,91579,91581],{"class":400,"line":1918},[398,91576,57609],{"class":457},[398,91578,51630],{"class":408},[398,91580,61035],{"class":457},[398,91582,1566],{"class":408},[398,91584,91585,91587,91589,91591],{"class":400,"line":1923},[398,91586,57479],{"class":457},[398,91588,51630],{"class":408},[398,91590,51785],{"class":457},[398,91592,1566],{"class":408},[398,91594,91595,91597,91599,91601,91603],{"class":400,"line":1929},[398,91596,90238],{"class":457},[398,91598,51630],{"class":408},[398,91600,721],{"class":457},[398,91602,51685],{"class":404},[398,91604,1566],{"class":408},[398,91606,91607],{"class":400,"line":1950},[398,91608,2463],{"class":408},[398,91610,91611,91613,91615],{"class":400,"line":1955},[398,91612,52610],{"class":408},[398,91614,5403],{"class":51493},[398,91616,51500],{"class":408},[398,91618,91619,91621,91623],{"class":400,"line":1969},[398,91620,51978],{"class":408},[398,91622,51527],{"class":51493},[398,91624,51500],{"class":408},[398,91626,91627],{"class":400,"line":1974},[398,91628,2676],{"emptyLinePlaceholder":328},[398,91630,91631,91633,91635],{"class":400,"line":2003},[398,91632,1312],{"class":408},[398,91634,51993],{"class":51493},[398,91636,51500],{"class":408},[398,91638,91639,91641,91643,91645,91647,91649,91651,91653],{"class":400,"line":2008},[398,91640,52337],{"class":408},[398,91642,51804],{"class":51493},[398,91644,53679],{"class":2239},[398,91646,454],{"class":408},[398,91648,53684],{"class":513},[398,91650,55507],{"class":408},[398,91652,51804],{"class":51493},[398,91654,51500],{"class":408},[398,91656,91657,91659,91661,91663,91665,91667,91669,91671],{"class":400,"line":2025},[398,91658,52337],{"class":408},[398,91660,52006],{"class":51493},[398,91662,55432],{"class":2239},[398,91664,454],{"class":408},[398,91666,88467],{"class":513},[398,91668,55507],{"class":408},[398,91670,52006],{"class":51493},[398,91672,51500],{"class":408},[398,91674,91675,91677,91679],{"class":400,"line":2030},[398,91676,52337],{"class":408},[398,91678,52006],{"class":51493},[398,91680,51500],{"class":408},[398,91682,91683,91685,91687,91689,91691,91693,91695,91697],{"class":400,"line":2035},[398,91684,11498],{"class":404},[398,91686,87126],{"class":457},[398,91688,13841],{"class":404},[398,91690,54589],{"class":408},[398,91692,54592],{"class":2239},[398,91694,409],{"class":408},[398,91696,90339],{"class":513},[398,91698,415],{"class":408},[398,91700,91701,91703,91705,91707],{"class":400,"line":2040},[398,91702,52412],{"class":404},[398,91704,9715],{"class":408},[398,91706,454],{"class":404},[398,91708,47526],{"class":457},[398,91710,91711,91713,91715],{"class":400,"line":2054},[398,91712,70277],{"class":404},[398,91714,90358],{"class":2239},[398,91716,11130],{"class":408},[398,91718,91719,91721,91723,91725],{"class":400,"line":2059},[398,91720,90365],{"class":408},[398,91722,454],{"class":404},[398,91724,3308],{"class":408},[398,91726,2978],{"class":404},[398,91728,91729],{"class":400,"line":2853},[398,91730,90376],{"class":467},[398,91732,91733],{"class":400,"line":2867},[398,91734,2463],{"class":408},[398,91736,91737],{"class":400,"line":2875},[398,91738,90385],{"class":467},[398,91740,91741],{"class":400,"line":2880},[398,91742,91743],{"class":467},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[398,91745,91746],{"class":400,"line":2886},[398,91747,91748],{"class":467},"    \u002F\u002F 1.声明一个定时器变量\n",[398,91750,91751],{"class":400,"line":2892},[398,91752,91753],{"class":467},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[398,91755,91756],{"class":400,"line":2897},[398,91757,91758],{"class":467},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[398,91760,91761],{"class":400,"line":8225},[398,91762,91763],{"class":467},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[398,91765,91766],{"class":400,"line":8249},[398,91767,91768],{"class":467},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[398,91770,91771,91773,91776,91778,91780,91782,91784],{"class":400,"line":8254},[398,91772,70277],{"class":404},[398,91774,91775],{"class":2239}," throttle",[398,91777,409],{"class":408},[398,91779,90830],{"class":5493},[398,91781,12712],{"class":408},[398,91783,1122],{"class":5493},[398,91785,12719],{"class":408},[398,91787,91788,91790],{"class":400,"line":8260},[398,91789,79965],{"class":404},[398,91791,90843],{"class":408},[398,91793,91794,91796,91798],{"class":400,"line":8287},[398,91795,74175],{"class":404},[398,91797,59111],{"class":404},[398,91799,54645],{"class":408},[398,91801,91802,91804,91806,91808],{"class":400,"line":8292},[398,91803,2773],{"class":404},[398,91805,1934],{"class":408},[398,91807,628],{"class":404},[398,91809,91810],{"class":408},"timer) {\n",[398,91812,91813,91816,91818,91820,91822,91824],{"class":400,"line":8298},[398,91814,91815],{"class":408},"          timer ",[398,91817,454],{"class":404},[398,91819,90884],{"class":2239},[398,91821,409],{"class":408},[398,91823,54642],{"class":404},[398,91825,54645],{"class":408},[398,91827,91828,91831],{"class":400,"line":8310},[398,91829,91830],{"class":2239},"            fn",[398,91832,2252],{"class":408},[398,91834,91835],{"class":400,"line":8322},[398,91836,91837],{"class":467},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[398,91839,91840],{"class":400,"line":8334},[398,91841,91842],{"class":467},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[398,91844,91845,91848,91850],{"class":400,"line":9993},[398,91846,91847],{"class":408},"            timer ",[398,91849,454],{"class":404},[398,91851,91852],{"class":457}," null\n",[398,91854,91855],{"class":400,"line":10018},[398,91856,91857],{"class":467},"            \u002F\u002F 不能用clearTimeout(timer)\n",[398,91859,91860],{"class":400,"line":10041},[398,91861,91862],{"class":467},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[398,91864,91865],{"class":400,"line":10065},[398,91866,91867],{"class":408},"          }, t)\n",[398,91869,91870],{"class":400,"line":10070},[398,91871,2805],{"class":408},[398,91873,91874],{"class":400,"line":10075},[398,91875,52591],{"class":408},[398,91877,91878],{"class":400,"line":10080},[398,91879,2463],{"class":408},[398,91881,91882,91884,91886,91888,91890,91892,91894,91896,91898],{"class":400,"line":10089},[398,91883,90400],{"class":408},[398,91885,58006],{"class":2239},[398,91887,409],{"class":408},[398,91889,90407],{"class":513},[398,91891,12712],{"class":408},[398,91893,91366],{"class":2239},[398,91895,90416],{"class":408},[398,91897,65267],{"class":457},[398,91899,30690],{"class":408},[398,91901,91902,91904,91906],{"class":400,"line":10094},[398,91903,52610],{"class":408},[398,91905,52006],{"class":51493},[398,91907,51500],{"class":408},[398,91909,91910,91912,91914],{"class":400,"line":10100},[398,91911,51978],{"class":408},[398,91913,51993],{"class":51493},[398,91915,51500],{"class":408},[398,91917,91918],{"class":400,"line":10121},[398,91919,2676],{"emptyLinePlaceholder":328},[398,91921,91922,91924,91926],{"class":400,"line":10127},[398,91923,51978],{"class":408},[398,91925,50828],{"class":51493},[398,91927,51500],{"class":408},[14,91929,91931],{"id":91930},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[389,91933,91935],{"className":53260,"code":91934,"language":53262,"meta":316,"style":316},"\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",[395,91936,91937,91945,91953,91958,91963,91968,91973,91977,91985],{"__ignoreMap":316},[398,91938,91939,91941,91943],{"class":400,"line":401},[398,91940,1312],{"class":408},[398,91942,51993],{"class":51493},[398,91944,51500],{"class":408},[398,91946,91947,91949,91951],{"class":400,"line":317},[398,91948,52337],{"class":408},[398,91950,52006],{"class":51493},[398,91952,51500],{"class":408},[398,91954,91955],{"class":400,"line":320},[398,91956,91957],{"class":408},"    let timer = null\n",[398,91959,91960],{"class":400,"line":1470},[398,91961,91962],{"class":408},"    timer = setTimeout(() => {\n",[398,91964,91965],{"class":400,"line":1476},[398,91966,91967],{"class":408},"      clearTimeout(timer)\n",[398,91969,91970],{"class":400,"line":1490},[398,91971,91972],{"class":408},"      console.log(timer)\n",[398,91974,91975],{"class":400,"line":1496},[398,91976,60418],{"class":408},[398,91978,91979,91981,91983],{"class":400,"line":1587},[398,91980,52610],{"class":408},[398,91982,52006],{"class":51493},[398,91984,51500],{"class":408},[398,91986,91987,91989,91991],{"class":400,"line":1593},[398,91988,51978],{"class":408},[398,91990,51993],{"class":51493},[398,91992,51500],{"class":408},[19,91994,91995],{},"输出为1",[19,91997,91998],{},"在开启的定时器里边写清除定时器",[19,92000,92001],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[14,92003,92005],{"id":92004},"_4174-节流综合案例","4.17.4 节流综合案例",[19,92007,92008],{},"页面打开，可以记录上一次的视频播放位置",[19,92010,92011],{},[1738,92012],{"alt":316,"src":92013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,92015,92016],{},[1738,92017],{"alt":316,"src":92018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[389,92020,92022],{"className":50826,"code":92021,"language":50828,"meta":316,"style":316},"\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",[395,92023,92024,92034,92048,92052,92060,92074,92094,92114,92136,92149,92157,92163,92173,92183,92193,92197,92201,92208,92221,92233,92237,92241,92251,92263,92277,92281,92285,92292,92302,92315,92327,92337,92347,92363,92375,92379,92383,92391,92401,92413,92423,92433,92443,92447,92451,92461,92472,92476,92484,92492,92496,92504,92519,92534,92549,92570,92578,92586,92601,92623,92631,92646,92672,92698,92724,92732,92740,92759,92767,92772,92791,92796,92814,92819,92824,92832,92837,92851,92859,92864,92881,92885,92890,92912,92916,92924,92932,92936],{"__ignoreMap":316},[398,92025,92026,92028,92030,92032],{"class":400,"line":401},[398,92027,51490],{"class":408},[398,92029,51494],{"class":51493},[398,92031,51497],{"class":2239},[398,92033,51500],{"class":408},[398,92035,92036,92038,92040,92042,92044,92046],{"class":400,"line":317},[398,92037,1312],{"class":408},[398,92039,50828],{"class":51493},[398,92041,51509],{"class":2239},[398,92043,454],{"class":408},[398,92045,51514],{"class":513},[398,92047,51500],{"class":408},[398,92049,92050],{"class":400,"line":320},[398,92051,2676],{"emptyLinePlaceholder":328},[398,92053,92054,92056,92058],{"class":400,"line":1470},[398,92055,1312],{"class":408},[398,92057,51527],{"class":51493},[398,92059,51500],{"class":408},[398,92061,92062,92064,92066,92068,92070,92072],{"class":400,"line":1476},[398,92063,52337],{"class":408},[398,92065,51537],{"class":51493},[398,92067,51540],{"class":2239},[398,92069,454],{"class":408},[398,92071,51545],{"class":513},[398,92073,59320],{"class":408},[398,92075,92076,92078,92080,92082,92084,92086,92088,92090,92092],{"class":400,"line":1490},[398,92077,52337],{"class":408},[398,92079,51537],{"class":51493},[398,92081,51556],{"class":2239},[398,92083,454],{"class":408},[398,92085,51561],{"class":513},[398,92087,51564],{"class":2239},[398,92089,454],{"class":408},[398,92091,51569],{"class":513},[398,92093,59320],{"class":408},[398,92095,92096,92098,92100,92102,92104,92106,92108,92110,92112],{"class":400,"line":1496},[398,92097,52337],{"class":408},[398,92099,51537],{"class":51493},[398,92101,15197],{"class":2239},[398,92103,454],{"class":408},[398,92105,51584],{"class":513},[398,92107,51564],{"class":2239},[398,92109,454],{"class":408},[398,92111,51591],{"class":513},[398,92113,59320],{"class":408},[398,92115,92116,92118,92120,92122,92124,92127,92129,92131,92134],{"class":400,"line":1587},[398,92117,52337],{"class":408},[398,92119,51537],{"class":51493},[398,92121,15197],{"class":2239},[398,92123,454],{"class":408},[398,92125,92126],{"class":513},"\"referrer\"",[398,92128,51564],{"class":2239},[398,92130,454],{"class":408},[398,92132,92133],{"class":513},"\"never\"",[398,92135,59320],{"class":408},[398,92137,92138,92140,92142,92145,92147],{"class":400,"line":1593},[398,92139,52337],{"class":408},[398,92141,51600],{"class":51493},[398,92143,92144],{"class":408},">综合案例\u003C\u002F",[398,92146,51600],{"class":51493},[398,92148,51500],{"class":408},[398,92150,92151,92153,92155],{"class":400,"line":1605},[398,92152,52337],{"class":408},[398,92154,5403],{"class":51493},[398,92156,51500],{"class":408},[398,92158,92159,92161],{"class":400,"line":1888},[398,92160,6680],{"class":51493},[398,92162,15849],{"class":408},[398,92164,92165,92167,92169,92171],{"class":400,"line":1893},[398,92166,54888],{"class":457},[398,92168,51630],{"class":408},[398,92170,593],{"class":457},[398,92172,1566],{"class":408},[398,92174,92175,92177,92179,92181],{"class":400,"line":1899},[398,92176,54899],{"class":457},[398,92178,51630],{"class":408},[398,92180,593],{"class":457},[398,92182,1566],{"class":408},[398,92184,92185,92187,92189,92191],{"class":400,"line":1904},[398,92186,72789],{"class":457},[398,92188,51630],{"class":408},[398,92190,60698],{"class":457},[398,92192,1566],{"class":408},[398,92194,92195],{"class":400,"line":1918},[398,92196,2463],{"class":408},[398,92198,92199],{"class":400,"line":1923},[398,92200,2676],{"emptyLinePlaceholder":328},[398,92202,92203,92206],{"class":400,"line":1929},[398,92204,92205],{"class":2239},"    .container",[398,92207,15849],{"class":408},[398,92209,92210,92212,92214,92217,92219],{"class":400,"line":1950},[398,92211,54964],{"class":457},[398,92213,51630],{"class":408},[398,92215,92216],{"class":457},"1200",[398,92218,51685],{"class":404},[398,92220,1566],{"class":408},[398,92222,92223,92225,92227,92229,92231],{"class":400,"line":1955},[398,92224,54899],{"class":457},[398,92226,51630],{"class":408},[398,92228,593],{"class":457},[398,92230,51749],{"class":457},[398,92232,1566],{"class":408},[398,92234,92235],{"class":400,"line":1969},[398,92236,2463],{"class":408},[398,92238,92239],{"class":400,"line":1974},[398,92240,2676],{"emptyLinePlaceholder":328},[398,92242,92243,92246,92249],{"class":400,"line":2003},[398,92244,92245],{"class":2239},"    .video",[398,92247,92248],{"class":51493}," video",[398,92250,15849],{"class":408},[398,92252,92253,92255,92257,92259,92261],{"class":400,"line":2008},[398,92254,54964],{"class":457},[398,92256,51630],{"class":408},[398,92258,713],{"class":457},[398,92260,730],{"class":404},[398,92262,1566],{"class":408},[398,92264,92265,92267,92269,92271,92273,92275],{"class":400,"line":2025},[398,92266,54888],{"class":457},[398,92268,51630],{"class":408},[398,92270,1102],{"class":457},[398,92272,51685],{"class":404},[398,92274,4369],{"class":457},[398,92276,1566],{"class":408},[398,92278,92279],{"class":400,"line":2030},[398,92280,2463],{"class":408},[398,92282,92283],{"class":400,"line":2035},[398,92284,2676],{"emptyLinePlaceholder":328},[398,92286,92287,92290],{"class":400,"line":2040},[398,92288,92289],{"class":2239},"    .elevator",[398,92291,15849],{"class":408},[398,92293,92294,92296,92298,92300],{"class":400,"line":2054},[398,92295,54952],{"class":457},[398,92297,51630],{"class":408},[398,92299,86426],{"class":457},[398,92301,1566],{"class":408},[398,92303,92304,92306,92308,92311,92313],{"class":400,"line":2059},[398,92305,55140],{"class":457},[398,92307,51630],{"class":408},[398,92309,92310],{"class":457},"280",[398,92312,51685],{"class":404},[398,92314,1566],{"class":408},[398,92316,92317,92319,92321,92323,92325],{"class":400,"line":2853},[398,92318,86620],{"class":457},[398,92320,51630],{"class":408},[398,92322,1102],{"class":457},[398,92324,51685],{"class":404},[398,92326,1566],{"class":408},[398,92328,92329,92331,92333,92335],{"class":400,"line":2867},[398,92330,86433],{"class":457},[398,92332,51630],{"class":408},[398,92334,86438],{"class":457},[398,92336,1566],{"class":408},[398,92338,92339,92341,92343,92345],{"class":400,"line":2875},[398,92340,61914],{"class":457},[398,92342,51630],{"class":408},[398,92344,61035],{"class":457},[398,92346,1566],{"class":408},[398,92348,92349,92351,92353,92355,92357,92359,92361],{"class":400,"line":2880},[398,92350,62170],{"class":457},[398,92352,51630],{"class":408},[398,92354,619],{"class":457},[398,92356,51685],{"class":404},[398,92358,51714],{"class":457},[398,92360,62437],{"class":457},[398,92362,1566],{"class":408},[398,92364,92365,92367,92369,92371,92373],{"class":400,"line":2886},[398,92366,54964],{"class":457},[398,92368,51630],{"class":408},[398,92370,1309],{"class":457},[398,92372,51685],{"class":404},[398,92374,1566],{"class":408},[398,92376,92377],{"class":400,"line":2892},[398,92378,2463],{"class":408},[398,92380,92381],{"class":400,"line":2897},[398,92382,2676],{"emptyLinePlaceholder":328},[398,92384,92385,92387,92389],{"class":400,"line":8225},[398,92386,92289],{"class":2239},[398,92388,1674],{"class":51493},[398,92390,15849],{"class":408},[398,92392,92393,92395,92397,92399],{"class":400,"line":8249},[398,92394,55202],{"class":457},[398,92396,51630],{"class":408},[398,92398,61062],{"class":457},[398,92400,1566],{"class":408},[398,92402,92403,92405,92407,92409,92411],{"class":400,"line":8254},[398,92404,54888],{"class":457},[398,92406,51630],{"class":408},[398,92408,848],{"class":457},[398,92410,51685],{"class":404},[398,92412,1566],{"class":408},[398,92414,92415,92417,92419,92421],{"class":400,"line":8260},[398,92416,64163],{"class":457},[398,92418,51630],{"class":408},[398,92420,54930],{"class":457},[398,92422,1566],{"class":408},[398,92424,92425,92427,92429,92431],{"class":400,"line":8287},[398,92426,57479],{"class":457},[398,92428,51630],{"class":408},[398,92430,51785],{"class":457},[398,92432,1566],{"class":408},[398,92434,92435,92437,92439,92441],{"class":400,"line":8292},[398,92436,57609],{"class":457},[398,92438,51630],{"class":408},[398,92440,62263],{"class":457},[398,92442,1566],{"class":408},[398,92444,92445],{"class":400,"line":8298},[398,92446,2463],{"class":408},[398,92448,92449],{"class":400,"line":8310},[398,92450,2676],{"emptyLinePlaceholder":328},[398,92452,92453,92455,92457,92459],{"class":400,"line":8322},[398,92454,92289],{"class":2239},[398,92456,1674],{"class":51493},[398,92458,64217],{"class":2239},[398,92460,15849],{"class":408},[398,92462,92463,92465,92467,92470],{"class":400,"line":8334},[398,92464,57609],{"class":457},[398,92466,51630],{"class":408},[398,92468,92469],{"class":457},"#1286ff",[398,92471,1566],{"class":408},[398,92473,92474],{"class":400,"line":9993},[398,92475,2463],{"class":408},[398,92477,92478,92480,92482],{"class":400,"line":10018},[398,92479,52610],{"class":408},[398,92481,5403],{"class":51493},[398,92483,51500],{"class":408},[398,92485,92486,92488,92490],{"class":400,"line":10041},[398,92487,51978],{"class":408},[398,92489,51527],{"class":51493},[398,92491,51500],{"class":408},[398,92493,92494],{"class":400,"line":10065},[398,92495,2676],{"emptyLinePlaceholder":328},[398,92497,92498,92500,92502],{"class":400,"line":10070},[398,92499,1312],{"class":408},[398,92501,51993],{"class":51493},[398,92503,51500],{"class":408},[398,92505,92506,92508,92510,92512,92514,92517],{"class":400,"line":10075},[398,92507,52337],{"class":408},[398,92509,51804],{"class":51493},[398,92511,53679],{"class":2239},[398,92513,454],{"class":408},[398,92515,92516],{"class":513},"\"container\"",[398,92518,51500],{"class":408},[398,92520,92521,92523,92525,92527,92529,92532],{"class":400,"line":10080},[398,92522,51534],{"class":408},[398,92524,51804],{"class":51493},[398,92526,53679],{"class":2239},[398,92528,454],{"class":408},[398,92530,92531],{"class":513},"\"header\"",[398,92533,51500],{"class":408},[398,92535,92536,92538,92540,92542,92544,92547],{"class":400,"line":10089},[398,92537,55427],{"class":408},[398,92539,640],{"class":51493},[398,92541,61250],{"class":2239},[398,92543,454],{"class":408},[398,92545,92546],{"class":513},"\"http:\u002F\u002Fpip.itcast.cn\"",[398,92548,51500],{"class":408},[398,92550,92551,92553,92555,92557,92559,92562,92564,92566,92568],{"class":400,"line":10094},[398,92552,55495],{"class":408},[398,92554,1738],{"class":51493},[398,92556,55432],{"class":2239},[398,92558,454],{"class":408},[398,92560,92561],{"class":513},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[398,92563,55440],{"class":2239},[398,92565,454],{"class":408},[398,92567,7929],{"class":513},[398,92569,59320],{"class":408},[398,92571,92572,92574,92576],{"class":400,"line":10100},[398,92573,55600],{"class":408},[398,92575,640],{"class":51493},[398,92577,51500],{"class":408},[398,92579,92580,92582,92584],{"class":400,"line":10121},[398,92581,51969],{"class":408},[398,92583,51804],{"class":51493},[398,92585,51500],{"class":408},[398,92587,92588,92590,92592,92594,92596,92599],{"class":400,"line":10127},[398,92589,51534],{"class":408},[398,92591,51804],{"class":51493},[398,92593,53679],{"class":2239},[398,92595,454],{"class":408},[398,92597,92598],{"class":513},"\"video\"",[398,92600,51500],{"class":408},[398,92602,92603,92605,92607,92609,92611,92614,92617,92619,92621],{"class":400,"line":10141},[398,92604,55427],{"class":408},[398,92606,28376],{"class":51493},[398,92608,55432],{"class":2239},[398,92610,454],{"class":408},[398,92612,92613],{"class":513},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[398,92615,92616],{"class":2239}," controls",[398,92618,55507],{"class":408},[398,92620,28376],{"class":51493},[398,92622,51500],{"class":408},[398,92624,92625,92627,92629],{"class":400,"line":10147},[398,92626,51969],{"class":408},[398,92628,51804],{"class":51493},[398,92630,51500],{"class":408},[398,92632,92633,92635,92637,92639,92641,92644],{"class":400,"line":10174},[398,92634,51534],{"class":408},[398,92636,51804],{"class":51493},[398,92638,53679],{"class":2239},[398,92640,454],{"class":408},[398,92642,92643],{"class":513},"\"elevator\"",[398,92645,51500],{"class":408},[398,92647,92648,92650,92652,92654,92656,92658,92661,92663,92665,92668,92670],{"class":400,"line":10183},[398,92649,55427],{"class":408},[398,92651,640],{"class":51493},[398,92653,61250],{"class":2239},[398,92655,454],{"class":408},[398,92657,64429],{"class":513},[398,92659,92660],{"class":2239}," data-ref",[398,92662,454],{"class":408},[398,92664,92598],{"class":513},[398,92666,92667],{"class":408},">视频介绍\u003C\u002F",[398,92669,640],{"class":51493},[398,92671,51500],{"class":408},[398,92673,92674,92676,92678,92680,92682,92684,92686,92688,92691,92694,92696],{"class":400,"line":10189},[398,92675,55427],{"class":408},[398,92677,640],{"class":51493},[398,92679,61250],{"class":2239},[398,92681,454],{"class":408},[398,92683,64429],{"class":513},[398,92685,92660],{"class":2239},[398,92687,454],{"class":408},[398,92689,92690],{"class":513},"\"intro\"",[398,92692,92693],{"class":408},">课程简介\u003C\u002F",[398,92695,640],{"class":51493},[398,92697,51500],{"class":408},[398,92699,92700,92702,92704,92706,92708,92710,92712,92714,92717,92720,92722],{"class":400,"line":10197},[398,92701,55427],{"class":408},[398,92703,640],{"class":51493},[398,92705,61250],{"class":2239},[398,92707,454],{"class":408},[398,92709,64429],{"class":513},[398,92711,92660],{"class":2239},[398,92713,454],{"class":408},[398,92715,92716],{"class":513},"\"outline\"",[398,92718,92719],{"class":408},">评论列表\u003C\u002F",[398,92721,640],{"class":51493},[398,92723,51500],{"class":408},[398,92725,92726,92728,92730],{"class":400,"line":10202},[398,92727,51969],{"class":408},[398,92729,51804],{"class":51493},[398,92731,51500],{"class":408},[398,92733,92734,92736,92738],{"class":400,"line":16881},[398,92735,52610],{"class":408},[398,92737,51804],{"class":51493},[398,92739,51500],{"class":408},[398,92741,92742,92744,92746,92748,92750,92753,92755,92757],{"class":400,"line":16887},[398,92743,52337],{"class":408},[398,92745,52006],{"class":51493},[398,92747,55432],{"class":2239},[398,92749,454],{"class":408},[398,92751,92752],{"class":513},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[398,92754,55507],{"class":408},[398,92756,52006],{"class":51493},[398,92758,51500],{"class":408},[398,92760,92761,92763,92765],{"class":400,"line":16910},[398,92762,52337],{"class":408},[398,92764,52006],{"class":51493},[398,92766,51500],{"class":408},[398,92768,92769],{"class":400,"line":16916},[398,92770,92771],{"class":467},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[398,92773,92774,92776,92778,92780,92782,92784,92786,92789],{"class":400,"line":16939},[398,92775,11498],{"class":404},[398,92777,92248],{"class":457},[398,92779,13841],{"class":404},[398,92781,54589],{"class":408},[398,92783,54592],{"class":2239},[398,92785,409],{"class":408},[398,92787,92788],{"class":513},"'video'",[398,92790,415],{"class":408},[398,92792,92793],{"class":400,"line":16953},[398,92794,92795],{"class":467},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[398,92797,92798,92801,92803,92805,92807,92810,92812],{"class":400,"line":16973},[398,92799,92800],{"class":408},"    video.ontimeupdate ",[398,92802,454],{"class":404},[398,92804,88548],{"class":408},[398,92806,91366],{"class":2239},[398,92808,92809],{"class":408},"(() ",[398,92811,84915],{"class":404},[398,92813,15849],{"class":408},[398,92815,92816],{"class":400,"line":16979},[398,92817,92818],{"class":467},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[398,92820,92821],{"class":400,"line":16990},[398,92822,92823],{"class":467},"      \u002F\u002F 控制台输出当前的时间\n",[398,92825,92826,92829],{"class":400,"line":17013},[398,92827,92828],{"class":467},"      \u002F\u002F console.log(video.currentTime)",[398,92830,92831],{"class":467},"  \u002F\u002F获得当前的视频时间\n",[398,92833,92834],{"class":400,"line":17035},[398,92835,92836],{"class":467},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[398,92838,92839,92841,92843,92845,92848],{"class":400,"line":17040},[398,92840,74876],{"class":408},[398,92842,71847],{"class":2239},[398,92844,409],{"class":408},[398,92846,92847],{"class":513},"'currentTime'",[398,92849,92850],{"class":408},", video.currentTime)\n",[398,92852,92853,92855,92857],{"class":400,"line":17046},[398,92854,54728],{"class":408},[398,92856,6687],{"class":457},[398,92858,415],{"class":408},[398,92860,92861],{"class":400,"line":17060},[398,92862,92863],{"class":467},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[398,92865,92866,92869,92872,92874,92877,92879],{"class":400,"line":17073},[398,92867,92868],{"class":408},"    video.",[398,92870,92871],{"class":2239},"onloadeddata",[398,92873,13841],{"class":404},[398,92875,92876],{"class":408}," () ",[398,92878,84915],{"class":404},[398,92880,15849],{"class":408},[398,92882,92883],{"class":400,"line":17078},[398,92884,60205],{"class":467},[398,92886,92887],{"class":400,"line":17092},[398,92888,92889],{"class":467},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[398,92891,92892,92895,92897,92900,92902,92904,92906,92908,92910],{"class":400,"line":17097},[398,92893,92894],{"class":408},"      video.currentTime ",[398,92896,454],{"class":404},[398,92898,92899],{"class":408}," localStorage.",[398,92901,71878],{"class":2239},[398,92903,409],{"class":408},[398,92905,92847],{"class":513},[398,92907,13991],{"class":408},[398,92909,71550],{"class":404},[398,92911,47526],{"class":457},[398,92913,92914],{"class":400,"line":17103},[398,92915,2463],{"class":408},[398,92917,92918,92920,92922],{"class":400,"line":17108},[398,92919,52610],{"class":408},[398,92921,52006],{"class":51493},[398,92923,51500],{"class":408},[398,92925,92926,92928,92930],{"class":400,"line":17122},[398,92927,51978],{"class":408},[398,92929,51993],{"class":51493},[398,92931,51500],{"class":408},[398,92933,92934],{"class":400,"line":17127},[398,92935,2676],{"emptyLinePlaceholder":328},[398,92937,92938,92940,92942],{"class":400,"line":17132},[398,92939,51978],{"class":408},[398,92941,50828],{"class":51493},[398,92943,51500],{"class":408},[5403,92945,92946],{},"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":316,"searchDepth":317,"depth":317,"links":92948},[92949,92954,92958,92959,92960,92965,92970,92971,92972,92973,92980,92985,92986,92996,93000,93001,93005],{"id":76884,"depth":317,"text":76885,"children":92950},[92951,92952,92953],{"id":76888,"depth":320,"text":76889},{"id":76913,"depth":320,"text":76914},{"id":76925,"depth":320,"text":76926},{"id":76937,"depth":317,"text":76938,"children":92955},[92956,92957],{"id":76941,"depth":320,"text":76942},{"id":76956,"depth":320,"text":76957},{"id":77008,"depth":317,"text":77009},{"id":77052,"depth":317,"text":77053},{"id":77069,"depth":317,"text":77070,"children":92961},[92962,92963,92964],{"id":77073,"depth":320,"text":77074},{"id":77086,"depth":320,"text":77087},{"id":77191,"depth":320,"text":77192},{"id":77480,"depth":317,"text":77481,"children":92966},[92967,92968,92969],{"id":77484,"depth":320,"text":77485},{"id":77927,"depth":320,"text":77928},{"id":78338,"depth":320,"text":78339},{"id":78401,"depth":317,"text":78402},{"id":78480,"depth":317,"text":78481},{"id":78573,"depth":317,"text":78574},{"id":80418,"depth":317,"text":80419,"children":92974},[92975,92976,92977,92978,92979],{"id":80422,"depth":320,"text":80423},{"id":80434,"depth":320,"text":80435},{"id":80653,"depth":320,"text":80654},{"id":80671,"depth":320,"text":80672},{"id":80731,"depth":320,"text":80732},{"id":84999,"depth":317,"text":85000,"children":92981},[92982,92983,92984],{"id":85003,"depth":320,"text":85004},{"id":85021,"depth":320,"text":85022},{"id":85047,"depth":320,"text":85048},{"id":85056,"depth":317,"text":85057},{"id":85078,"depth":317,"text":85079,"children":92987},[92988,92989,92990,92991,92992,92993,92994,92995],{"id":85082,"depth":320,"text":85083},{"id":85343,"depth":320,"text":85344},{"id":85529,"depth":320,"text":85530},{"id":85896,"depth":320,"text":85897},{"id":86012,"depth":320,"text":86013},{"id":86048,"depth":320,"text":86049},{"id":86095,"depth":320,"text":86096},{"id":86129,"depth":320,"text":86130},{"id":87492,"depth":317,"text":87493,"children":92997},[92998,92999],{"id":87496,"depth":320,"text":87497},{"id":87533,"depth":320,"text":87534},{"id":88888,"depth":317,"text":88889},{"id":89259,"depth":317,"text":89260,"children":93002},[93003,93004],{"id":89263,"depth":320,"text":89264},{"id":89297,"depth":320,"text":89298},{"id":90026,"depth":317,"text":90027,"children":93006},[93007,93008,93009,93010],{"id":90030,"depth":320,"text":90031},{"id":90988,"depth":320,"text":90989},{"id":91930,"depth":320,"text":91931},{"id":92004,"depth":320,"text":92005},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76873,"description":23654},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":93017,"title":93018,"body":93019,"description":93030,"extension":326,"meta":93031,"navigation":328,"path":93033,"seo":93034,"stem":93035,"__hash__":93036},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":93020,"toc":93028},[93021],[19,93022,93023,93024],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[640,93025,93026],{"href":93026,"rel":93027},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[24142],{"title":316,"searchDepth":317,"depth":317,"links":93029},[],"三件套第三套学习",{"category":93032},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":93018,"description":93030},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":93038,"title":93039,"body":93040,"description":23654,"extension":326,"meta":93145,"navigation":328,"path":93146,"seo":93147,"stem":93148,"__hash__":93149},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":93041,"toc":93140},[93042,93049,93052,93055,93058,93062,93071,93074,93077,93081,93090,93093,93097,93100,93120,93123,93137],[19,93043,93044],{},[640,93045,93048],{"href":93046,"rel":93047},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[24142],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,93050,93039],{"id":93051},"_1安装",[19,93053,93054],{},"numpy是科学计算基础库,底层是C语言",[19,93056,93057],{},"三种方式：",[343,93059,93061],{"id":93060},"_11-通过pip安装","1.1 通过pip安装",[389,93063,93065],{"className":30571,"code":93064,"language":30573,"meta":316,"style":316},"pip install numpy\n",[395,93066,93067],{"__ignoreMap":316},[398,93068,93069],{"class":400,"line":401},[398,93070,93064],{"class":408},[19,93072,93073],{},"首选方式，自动处理依赖项",[19,93075,93076],{},"在提示系统命令符中使用cmd",[343,93078,93080],{"id":93079},"_12-通过anaconda安装","1.2 通过Anaconda安装",[389,93082,93084],{"className":30571,"code":93083,"language":30573,"meta":316,"style":316},"conda install numpy\n",[395,93085,93086],{"__ignoreMap":316},[398,93087,93088],{"class":400,"line":401},[398,93089,93083],{"class":408},[19,93091,93092],{},"自动解决环境依赖",[343,93094,93096],{"id":93095},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,93098,93099],{},"对于Debian\u002FUbuntu",[389,93101,93103],{"className":30571,"code":93102,"language":30573,"meta":316,"style":316},"sudo apt-get install python3-numpy\n",[395,93104,93105],{"__ignoreMap":316},[398,93106,93107,93110,93112,93115,93117],{"class":400,"line":401},[398,93108,93109],{"class":408},"sudo apt",[398,93111,934],{"class":404},[398,93113,93114],{"class":408},"get install python3",[398,93116,934],{"class":404},[398,93118,93119],{"class":408},"numpy\n",[19,93121,93122],{},"对于Fedora:",[389,93124,93126],{"className":30571,"code":93125,"language":30573,"meta":316,"style":316},"sudo dnf install python3-numpy\n",[395,93127,93128],{"__ignoreMap":316},[398,93129,93130,93133,93135],{"class":400,"line":401},[398,93131,93132],{"class":408},"sudo dnf install python3",[398,93134,934],{"class":404},[398,93136,93119],{"class":408},[5403,93138,93139],{},"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":316,"searchDepth":317,"depth":317,"links":93141},[93142,93143,93144],{"id":93060,"depth":317,"text":93061},{"id":93079,"depth":317,"text":93080},{"id":93095,"depth":317,"text":93096},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":93039,"description":23654},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93151,"title":93152,"body":93153,"description":23654,"extension":326,"meta":93266,"navigation":328,"path":93267,"seo":93268,"stem":93269,"__hash__":93270},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93154,"toc":93264},[93155,93158,93161,93164,93167,93170,93173,93176,93179,93182,93258,93261],[10,93156,93152],{"id":93157},"_10算数函数",[19,93159,93160],{},"加减乘除运算跟python基础语法没区别",[19,93162,93163],{},"除了python那种方法外还可以使用函数",[19,93165,93166],{},"加：np.add(a,b)",[19,93168,93169],{},"减：np.subtract(a,b)",[19,93171,93172],{},"乘：np.multiply(a,b)",[19,93174,93175],{},"除：np.divide(a,b) == a\u002Fb",[19,93177,93178],{},"取余：np.mod(a,b) == a%b",[19,93180,93181],{},"必须会的用法：",[389,93183,93185],{"className":30571,"code":93184,"language":30573,"meta":316,"style":316},"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",[395,93186,93187,93209,93230,93240,93253],{"__ignoreMap":316},[398,93188,93189,93191,93193,93196,93198,93201,93203,93205,93207],{"class":400,"line":401},[398,93190,640],{"class":408},[398,93192,454],{"class":404},[398,93194,93195],{"class":408},"np.arange(",[398,93197,822],{"class":457},[398,93199,93200],{"class":408},").reshape(",[398,93202,480],{"class":457},[398,93204,780],{"class":408},[398,93206,480],{"class":457},[398,93208,415],{"class":408},[398,93210,93211,93213,93215,93218,93220,93222,93224,93226,93228],{"class":400,"line":317},[398,93212,665],{"class":408},[398,93214,454],{"class":404},[398,93216,93217],{"class":408},"np.array([",[398,93219,848],{"class":457},[398,93221,780],{"class":408},[398,93223,848],{"class":457},[398,93225,780],{"class":408},[398,93227,848],{"class":457},[398,93229,4933],{"class":408},[398,93231,93232,93235,93237],{"class":400,"line":320},[398,93233,93234],{"class":408},"result",[398,93236,454],{"class":404},[398,93238,93239],{"class":408},"np.empty_like(a)\n",[398,93241,93242,93245,93248,93250],{"class":400,"line":1470},[398,93243,93244],{"class":408},"np.add(a,b,",[398,93246,93247],{"class":5493},"out",[398,93249,454],{"class":404},[398,93251,93252],{"class":408},"result)\n",[398,93254,93255],{"class":400,"line":1476},[398,93256,93257],{"class":408},"result\n",[19,93259,93260],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[5403,93262,93263],{},"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":316,"searchDepth":317,"depth":317,"links":93265},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93152,"description":23654},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93272,"title":93273,"body":93274,"description":23654,"extension":326,"meta":94036,"navigation":328,"path":94037,"seo":94038,"stem":94039,"__hash__":94040},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93275,"toc":94023},[93276,93279,93282,93285,93289,93328,93332,93376,93436,93440,93443,93482,93485,93530,93534,93570,93574,93643,93647,93711,93715,93718,93721,93724,93727,93763,93767,93807,93811,93883,93886,93890,93953,93957,94020],[10,93277,93273],{"id":93278},"_11统计函数",[19,93280,93281],{},"sum max min mean",[19,93283,93284],{},"这些有axis参数，可以指定方向",[343,93286,93288],{"id":93287},"_111-sum求和函数","11.1 sum()求和函数",[389,93290,93292],{"className":30571,"code":93291,"language":30573,"meta":316,"style":316},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[395,93293,93294,93299,93320],{"__ignoreMap":316},[398,93295,93296],{"class":400,"line":401},[398,93297,93298],{"class":467},"#创建一维数组\n",[398,93300,93301,93303,93305,93308,93310,93312,93314,93316,93318],{"class":400,"line":317},[398,93302,640],{"class":408},[398,93304,454],{"class":404},[398,93306,93307],{"class":408},"np.random.randint(",[398,93309,619],{"class":457},[398,93311,780],{"class":408},[398,93313,713],{"class":457},[398,93315,780],{"class":408},[398,93317,1102],{"class":457},[398,93319,415],{"class":408},[398,93321,93322,93325],{"class":400,"line":320},[398,93323,93324],{"class":408},"np.sum(a)",[398,93326,93327],{"class":467},"#求和\n",[343,93329,93331],{"id":93330},"_112-max求最大值函数","11.2 max()求最大值函数",[389,93333,93335],{"className":30571,"code":93334,"language":30573,"meta":316,"style":316},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[395,93336,93337,93341,93361,93366,93371],{"__ignoreMap":316},[398,93338,93339],{"class":400,"line":401},[398,93340,93298],{"class":467},[398,93342,93343,93345,93347,93349,93351,93353,93355,93357,93359],{"class":400,"line":317},[398,93344,640],{"class":408},[398,93346,454],{"class":404},[398,93348,93307],{"class":408},[398,93350,619],{"class":457},[398,93352,780],{"class":408},[398,93354,713],{"class":457},[398,93356,780],{"class":408},[398,93358,1102],{"class":457},[398,93360,415],{"class":408},[398,93362,93363],{"class":400,"line":320},[398,93364,93365],{"class":408},"np.max(a)\n",[398,93367,93368],{"class":400,"line":1470},[398,93369,93370],{"class":467},"#最大索引(求最大元素的索引)arg\n",[398,93372,93373],{"class":400,"line":1476},[398,93374,93375],{"class":408},"np.argmax(a)\n",[389,93377,93379],{"className":30571,"code":93378,"language":30573,"meta":316,"style":316},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[395,93380,93381,93402,93422,93426],{"__ignoreMap":316},[398,93382,93383,93385,93387,93390,93392,93394,93396,93398,93400],{"class":400,"line":401},[398,93384,11196],{"class":408},[398,93386,454],{"class":404},[398,93388,93389],{"class":408}," np.array([",[398,93391,619],{"class":457},[398,93393,12712],{"class":408},[398,93395,721],{"class":457},[398,93397,12712],{"class":408},[398,93399,480],{"class":457},[398,93401,4933],{"class":408},[398,93403,93404,93406,93408,93410,93412,93414,93416,93418,93420],{"class":400,"line":317},[398,93405,11222],{"class":408},[398,93407,454],{"class":404},[398,93409,93389],{"class":408},[398,93411,480],{"class":457},[398,93413,12712],{"class":408},[398,93415,486],{"class":457},[398,93417,12712],{"class":408},[398,93419,695],{"class":457},[398,93421,4933],{"class":408},[398,93423,93424],{"class":400,"line":320},[398,93425,2676],{"emptyLinePlaceholder":328},[398,93427,93428,93430,93433],{"class":400,"line":1470},[398,93429,30608],{"class":457},[398,93431,93432],{"class":408},"(np.maximum(a, b))   ",[398,93434,93435],{"class":467},"# [3 5 4]，每个位置上取较大值\n",[343,93437,93439],{"id":93438},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,93441,93442],{},"①一维数组：",[389,93444,93446],{"className":30571,"code":93445,"language":30573,"meta":316,"style":316},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[395,93447,93448,93452,93472,93477],{"__ignoreMap":316},[398,93449,93450],{"class":400,"line":401},[398,93451,93298],{"class":467},[398,93453,93454,93456,93458,93460,93462,93464,93466,93468,93470],{"class":400,"line":317},[398,93455,640],{"class":408},[398,93457,454],{"class":404},[398,93459,93307],{"class":408},[398,93461,619],{"class":457},[398,93463,780],{"class":408},[398,93465,713],{"class":457},[398,93467,780],{"class":408},[398,93469,1102],{"class":457},[398,93471,415],{"class":408},[398,93473,93474],{"class":400,"line":320},[398,93475,93476],{"class":467},"#求平均值\n",[398,93478,93479],{"class":400,"line":1470},[398,93480,93481],{"class":408},"np.mean(a)\n",[19,93483,93484],{},"②二维数组",[389,93486,93488],{"className":30571,"code":93487,"language":30573,"meta":316,"style":316},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[395,93489,93490,93495,93520,93525],{"__ignoreMap":316},[398,93491,93492],{"class":400,"line":401},[398,93493,93494],{"class":467},"#二维数组\n",[398,93496,93497,93500,93502,93504,93506,93508,93510,93512,93514,93516,93518],{"class":400,"line":317},[398,93498,93499],{"class":408},"aa",[398,93501,454],{"class":404},[398,93503,93195],{"class":408},[398,93505,619],{"class":457},[398,93507,780],{"class":408},[398,93509,925],{"class":457},[398,93511,93200],{"class":408},[398,93513,480],{"class":457},[398,93515,780],{"class":408},[398,93517,695],{"class":457},[398,93519,415],{"class":408},[398,93521,93522],{"class":400,"line":320},[398,93523,93524],{"class":467},"#对数组中的所有数求平均\n",[398,93526,93527],{"class":400,"line":1470},[398,93528,93529],{"class":408},"np.mean(aa)\n",[343,93531,93533],{"id":93532},"_114-median求中位数函数","11.4 median()求中位数函数",[389,93535,93537],{"className":30571,"code":93536,"language":30573,"meta":316,"style":316},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[395,93538,93539,93544,93560,93565],{"__ignoreMap":316},[398,93540,93541],{"class":400,"line":401},[398,93542,93543],{"class":467},"#求中位数\n",[398,93545,93546,93548,93550,93552,93554,93556,93558],{"class":400,"line":317},[398,93547,665],{"class":408},[398,93549,454],{"class":404},[398,93551,93195],{"class":408},[398,93553,619],{"class":457},[398,93555,780],{"class":408},[398,93557,848],{"class":457},[398,93559,415],{"class":408},[398,93561,93562],{"class":400,"line":320},[398,93563,93564],{"class":408},"np.median(b)\n",[398,93566,93567],{"class":400,"line":1470},[398,93568,93569],{"class":467},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[343,93571,93573],{"id":93572},"_115-power求幂运算函数","11.5 power()求幂运算函数",[389,93575,93577],{"className":30571,"code":93576,"language":30573,"meta":316,"style":316},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[395,93578,93579,93595,93600,93605,93614,93619,93628],{"__ignoreMap":316},[398,93580,93581,93583,93585,93587,93589,93591,93593],{"class":400,"line":401},[398,93582,665],{"class":408},[398,93584,454],{"class":404},[398,93586,93195],{"class":408},[398,93588,619],{"class":457},[398,93590,780],{"class":408},[398,93592,848],{"class":457},[398,93594,415],{"class":408},[398,93596,93597],{"class":400,"line":317},[398,93598,93599],{"class":467},"#幂运算\n",[398,93601,93602],{"class":400,"line":320},[398,93603,93604],{"class":467},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[398,93606,93607,93610,93612],{"class":400,"line":1470},[398,93608,93609],{"class":408},"np.power(b,",[398,93611,486],{"class":457},[398,93613,415],{"class":408},[398,93615,93616],{"class":400,"line":1476},[398,93617,93618],{"class":467},"#或者以下代码，将数据存储起来\n",[398,93620,93621,93623,93625],{"class":400,"line":1490},[398,93622,1247],{"class":408},[398,93624,454],{"class":404},[398,93626,93627],{"class":408},"np.empty_like(b)\n",[398,93629,93630,93632,93634,93636,93638,93640],{"class":400,"line":1496},[398,93631,93609],{"class":408},[398,93633,486],{"class":457},[398,93635,780],{"class":408},[398,93637,93247],{"class":5493},[398,93639,454],{"class":404},[398,93641,93642],{"class":408},"y)\n",[343,93644,93646],{"id":93645},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[389,93648,93650],{"className":30571,"code":93649,"language":30573,"meta":316,"style":316},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[395,93651,93652,93668,93673,93678,93682,93700],{"__ignoreMap":316},[398,93653,93654,93656,93658,93660,93662,93664,93666],{"class":400,"line":401},[398,93655,665],{"class":408},[398,93657,454],{"class":404},[398,93659,93195],{"class":408},[398,93661,619],{"class":457},[398,93663,780],{"class":408},[398,93665,848],{"class":457},[398,93667,415],{"class":408},[398,93669,93670],{"class":400,"line":317},[398,93671,93672],{"class":467},"#开方\n",[398,93674,93675],{"class":400,"line":320},[398,93676,93677],{"class":408},"np.sqrt(b)\n",[398,93679,93680],{"class":400,"line":1470},[398,93681,93618],{"class":467},[398,93683,93684,93686,93688,93691,93694,93696,93698],{"class":400,"line":1476},[398,93685,1247],{"class":408},[398,93687,454],{"class":404},[398,93689,93690],{"class":408},"np.empty_like(b,",[398,93692,93693],{"class":5493},"dtype",[398,93695,454],{"class":404},[398,93697,448],{"class":457},[398,93699,415],{"class":408},[398,93701,93702,93705,93707,93709],{"class":400,"line":1490},[398,93703,93704],{"class":408},"np.sqrt(b,",[398,93706,93247],{"class":5493},[398,93708,454],{"class":404},[398,93710,93642],{"class":408},[343,93712,93714],{"id":93713},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,93716,93717],{},"对数组中的元素累计求和，可指定轴",[19,93719,93720],{},"#累计求和的意思是：",[19,93722,93723],{},"a = np.array([1, 2, 3, 4])",[19,93725,93726],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[389,93728,93730],{"className":30571,"code":93729,"language":30573,"meta":316,"style":316},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[395,93731,93732,93748,93753,93758],{"__ignoreMap":316},[398,93733,93734,93736,93738,93740,93742,93744,93746],{"class":400,"line":401},[398,93735,665],{"class":408},[398,93737,454],{"class":404},[398,93739,93195],{"class":408},[398,93741,619],{"class":457},[398,93743,780],{"class":408},[398,93745,848],{"class":457},[398,93747,415],{"class":408},[398,93749,93750],{"class":400,"line":317},[398,93751,93752],{"class":408},"np.cumsum(b)\n",[398,93754,93755],{"class":400,"line":320},[398,93756,93757],{"class":467},"#结果：\n",[398,93759,93760],{"class":400,"line":1470},[398,93761,93762],{"class":467},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[343,93764,93766],{"id":93765},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[389,93768,93770],{"className":30571,"code":93769,"language":30573,"meta":316,"style":316},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[395,93771,93772,93788,93793,93798,93802],{"__ignoreMap":316},[398,93773,93774,93776,93778,93780,93782,93784,93786],{"class":400,"line":401},[398,93775,665],{"class":408},[398,93777,454],{"class":404},[398,93779,93195],{"class":408},[398,93781,619],{"class":457},[398,93783,780],{"class":408},[398,93785,848],{"class":457},[398,93787,415],{"class":408},[398,93789,93790],{"class":400,"line":317},[398,93791,93792],{"class":467},"#对数组中的元素累计求积，可指定轴\n",[398,93794,93795],{"class":400,"line":320},[398,93796,93797],{"class":408},"np.cumprod(b)\n",[398,93799,93800],{"class":400,"line":1470},[398,93801,93757],{"class":467},[398,93803,93804],{"class":400,"line":1476},[398,93805,93806],{"class":467},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[343,93808,93810],{"id":93809},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[389,93812,93814],{"className":30571,"code":93813,"language":30573,"meta":316,"style":316},"#删除数组中的重复数据，并对数据进行排序\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",[395,93815,93816,93821,93869,93874,93878],{"__ignoreMap":316},[398,93817,93818],{"class":400,"line":401},[398,93819,93820],{"class":467},"#删除数组中的重复数据，并对数据进行排序\n",[398,93822,93823,93825,93827,93829,93831,93833,93835,93837,93839,93841,93843,93845,93847,93849,93851,93853,93855,93857,93859,93861,93863,93865,93867],{"class":400,"line":317},[398,93824,640],{"class":408},[398,93826,454],{"class":404},[398,93828,93217],{"class":408},[398,93830,619],{"class":457},[398,93832,780],{"class":408},[398,93834,486],{"class":457},[398,93836,780],{"class":408},[398,93838,480],{"class":457},[398,93840,780],{"class":408},[398,93842,900],{"class":457},[398,93844,780],{"class":408},[398,93846,480],{"class":457},[398,93848,780],{"class":408},[398,93850,848],{"class":457},[398,93852,780],{"class":408},[398,93854,599],{"class":457},[398,93856,780],{"class":408},[398,93858,593],{"class":457},[398,93860,780],{"class":408},[398,93862,1177],{"class":457},[398,93864,780],{"class":408},[398,93866,695],{"class":457},[398,93868,4933],{"class":408},[398,93870,93871],{"class":400,"line":320},[398,93872,93873],{"class":408},"np.unique(a)\n",[398,93875,93876],{"class":400,"line":1470},[398,93877,93757],{"class":467},[398,93879,93880],{"class":400,"line":1476},[398,93881,93882],{"class":467},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,93884,93885],{},"升序形式排序",[343,93887,93889],{"id":93888},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[389,93891,93893],{"className":30571,"code":93892,"language":30573,"meta":316,"style":316},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[395,93894,93895,93943,93948],{"__ignoreMap":316},[398,93896,93897,93899,93901,93903,93905,93907,93909,93911,93913,93915,93917,93919,93921,93923,93925,93927,93929,93931,93933,93935,93937,93939,93941],{"class":400,"line":401},[398,93898,640],{"class":408},[398,93900,454],{"class":404},[398,93902,93217],{"class":408},[398,93904,619],{"class":457},[398,93906,780],{"class":408},[398,93908,486],{"class":457},[398,93910,780],{"class":408},[398,93912,480],{"class":457},[398,93914,780],{"class":408},[398,93916,900],{"class":457},[398,93918,780],{"class":408},[398,93920,480],{"class":457},[398,93922,780],{"class":408},[398,93924,848],{"class":457},[398,93926,780],{"class":408},[398,93928,599],{"class":457},[398,93930,780],{"class":408},[398,93932,593],{"class":457},[398,93934,780],{"class":408},[398,93936,1177],{"class":457},[398,93938,780],{"class":408},[398,93940,695],{"class":457},[398,93942,4933],{"class":408},[398,93944,93945],{"class":400,"line":317},[398,93946,93947],{"class":467},"#返回数组中非零元素的索引\n",[398,93949,93950],{"class":400,"line":320},[398,93951,93952],{"class":408},"np.nonzero(a)\n",[343,93954,93956],{"id":93955},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[389,93958,93960],{"className":30571,"code":93959,"language":30573,"meta":316,"style":316},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[395,93961,93962,94010,94015],{"__ignoreMap":316},[398,93963,93964,93966,93968,93970,93972,93974,93976,93978,93980,93982,93984,93986,93988,93990,93992,93994,93996,93998,94000,94002,94004,94006,94008],{"class":400,"line":401},[398,93965,640],{"class":408},[398,93967,454],{"class":404},[398,93969,93217],{"class":408},[398,93971,619],{"class":457},[398,93973,780],{"class":408},[398,93975,486],{"class":457},[398,93977,780],{"class":408},[398,93979,480],{"class":457},[398,93981,780],{"class":408},[398,93983,900],{"class":457},[398,93985,780],{"class":408},[398,93987,480],{"class":457},[398,93989,780],{"class":408},[398,93991,848],{"class":457},[398,93993,780],{"class":408},[398,93995,599],{"class":457},[398,93997,780],{"class":408},[398,93999,593],{"class":457},[398,94001,780],{"class":408},[398,94003,1177],{"class":457},[398,94005,780],{"class":408},[398,94007,695],{"class":457},[398,94009,4933],{"class":408},[398,94011,94012],{"class":400,"line":317},[398,94013,94014],{"class":467},"#计算一组数中最大值与最小值的差，可指定轴\n",[398,94016,94017],{"class":400,"line":320},[398,94018,94019],{"class":408},"np.ptp(a)\n",[5403,94021,94022],{},"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":316,"searchDepth":317,"depth":317,"links":94024},[94025,94026,94027,94028,94029,94030,94031,94032,94033,94034,94035],{"id":93287,"depth":317,"text":93288},{"id":93330,"depth":317,"text":93331},{"id":93438,"depth":317,"text":93439},{"id":93532,"depth":317,"text":93533},{"id":93572,"depth":317,"text":93573},{"id":93645,"depth":317,"text":93646},{"id":93713,"depth":317,"text":93714},{"id":93765,"depth":317,"text":93766},{"id":93809,"depth":317,"text":93810},{"id":93888,"depth":317,"text":93889},{"id":93955,"depth":317,"text":93956},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93273,"description":23654},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":94042,"title":94043,"body":94044,"description":23654,"extension":326,"meta":94699,"navigation":328,"path":94700,"seo":94701,"stem":94702,"__hash__":94703},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":94045,"toc":94687},[94046,94049,94053,94056,94272,94276,94279,94488,94492,94558,94563,94567,94570,94573,94611,94615,94618,94623,94627,94630,94633,94638,94642,94645,94649,94652,94655,94660,94664,94667,94670,94675,94679,94684],[10,94047,94043],{"id":94048},"_12其他常用函数",[343,94050,94052],{"id":94051},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,94054,94055],{},"将数组的数据按照行列复制扩展",[389,94057,94059],{"className":30571,"code":94058,"language":30573,"meta":316,"style":316},"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",[395,94060,94061,94077,94086,94090,94095,94100,94113,94117,94122,94127,94132,94136,94141,94165,94177,94181,94185,94190,94195,94200,94205,94209,94222,94226,94230,94235,94240,94245,94250,94255,94259,94263,94268],{"__ignoreMap":316},[398,94062,94063,94065,94067,94069,94071,94073,94075],{"class":400,"line":401},[398,94064,640],{"class":408},[398,94066,454],{"class":404},[398,94068,93195],{"class":408},[398,94070,619],{"class":457},[398,94072,780],{"class":408},[398,94074,721],{"class":457},[398,94076,415],{"class":408},[398,94078,94079,94082,94084],{"class":400,"line":317},[398,94080,94081],{"class":408},"np.tile(a,",[398,94083,486],{"class":457},[398,94085,415],{"class":408},[398,94087,94088],{"class":400,"line":320},[398,94089,93757],{"class":467},[398,94091,94092],{"class":400,"line":1470},[398,94093,94094],{"class":467},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[398,94096,94097],{"class":400,"line":1476},[398,94098,94099],{"class":467},"#行复制两次，列复制三次\n",[398,94101,94102,94105,94107,94109,94111],{"class":400,"line":1490},[398,94103,94104],{"class":408},"np.tile(a,(",[398,94106,486],{"class":457},[398,94108,780],{"class":408},[398,94110,480],{"class":457},[398,94112,30690],{"class":408},[398,94114,94115],{"class":400,"line":1496},[398,94116,93757],{"class":467},[398,94118,94119],{"class":400,"line":1587},[398,94120,94121],{"class":513},"'''\n",[398,94123,94124],{"class":400,"line":1593},[398,94125,94126],{"class":513},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[398,94128,94129],{"class":400,"line":1605},[398,94130,94131],{"class":513},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[398,94133,94134],{"class":400,"line":1888},[398,94135,94121],{"class":513},[398,94137,94138],{"class":400,"line":1893},[398,94139,94140],{"class":467},"#创建二维数组\n",[398,94142,94143,94145,94147,94149,94151,94153,94155,94157,94159,94161,94163],{"class":400,"line":1899},[398,94144,93499],{"class":408},[398,94146,454],{"class":404},[398,94148,93195],{"class":408},[398,94150,619],{"class":457},[398,94152,780],{"class":408},[398,94154,925],{"class":457},[398,94156,93200],{"class":408},[398,94158,695],{"class":457},[398,94160,780],{"class":408},[398,94162,480],{"class":457},[398,94164,415],{"class":408},[398,94166,94167,94170,94172,94174],{"class":400,"line":1904},[398,94168,94169],{"class":408},"np.tile(aa,",[398,94171,486],{"class":457},[398,94173,831],{"class":408},[398,94175,94176],{"class":467},"#一个数的时候就是行\n",[398,94178,94179],{"class":400,"line":1918},[398,94180,93757],{"class":467},[398,94182,94183],{"class":400,"line":1923},[398,94184,94121],{"class":513},[398,94186,94187],{"class":400,"line":1929},[398,94188,94189],{"class":513},"array([[ 1,  2,  3,  1,  2,  3],\n",[398,94191,94192],{"class":400,"line":1950},[398,94193,94194],{"class":513},"       [ 4,  5,  6,  4,  5,  6],\n",[398,94196,94197],{"class":400,"line":1955},[398,94198,94199],{"class":513},"       [ 7,  8,  9,  7,  8,  9],\n",[398,94201,94202],{"class":400,"line":1969},[398,94203,94204],{"class":513},"       [10, 11, 12, 10, 11, 12]])\n",[398,94206,94207],{"class":400,"line":1974},[398,94208,94121],{"class":513},[398,94210,94211,94214,94216,94218,94220],{"class":400,"line":2003},[398,94212,94213],{"class":408},"np.tile(aa,(",[398,94215,486],{"class":457},[398,94217,780],{"class":408},[398,94219,480],{"class":457},[398,94221,30690],{"class":408},[398,94223,94224],{"class":400,"line":2008},[398,94225,93757],{"class":467},[398,94227,94228],{"class":400,"line":2025},[398,94229,94121],{"class":513},[398,94231,94232],{"class":400,"line":2030},[398,94233,94234],{"class":513},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[398,94236,94237],{"class":400,"line":2035},[398,94238,94239],{"class":513},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[398,94241,94242],{"class":400,"line":2040},[398,94243,94244],{"class":513},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[398,94246,94247],{"class":400,"line":2054},[398,94248,94249],{"class":513},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[398,94251,94252],{"class":400,"line":2059},[398,94253,94254],{"class":513},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[398,94256,94257],{"class":400,"line":2853},[398,94258,94239],{"class":513},[398,94260,94261],{"class":400,"line":2867},[398,94262,94244],{"class":513},[398,94264,94265],{"class":400,"line":2875},[398,94266,94267],{"class":513},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[398,94269,94270],{"class":400,"line":2880},[398,94271,94121],{"class":513},[343,94273,94275],{"id":94274},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,94277,94278],{},"repeat()将数组中的每个元素重复若干次",[389,94280,94282],{"className":30571,"code":94281,"language":30573,"meta":316,"style":316},"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",[395,94283,94284,94300,94309,94313,94318,94342,94347,94356,94360,94365,94369,94374,94390,94394,94398,94403,94408,94413,94417,94422,94426,94431,94436,94440,94456,94460,94464,94469,94474,94479,94484],{"__ignoreMap":316},[398,94285,94286,94288,94290,94292,94294,94296,94298],{"class":400,"line":401},[398,94287,640],{"class":408},[398,94289,454],{"class":404},[398,94291,93195],{"class":408},[398,94293,619],{"class":457},[398,94295,780],{"class":408},[398,94297,721],{"class":457},[398,94299,415],{"class":408},[398,94301,94302,94305,94307],{"class":400,"line":317},[398,94303,94304],{"class":408},"np.repeat(a,",[398,94306,480],{"class":457},[398,94308,415],{"class":408},[398,94310,94311],{"class":400,"line":320},[398,94312,93757],{"class":467},[398,94314,94315],{"class":400,"line":1470},[398,94316,94317],{"class":467},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[398,94319,94320,94322,94324,94326,94328,94330,94332,94334,94336,94338,94340],{"class":400,"line":1476},[398,94321,93499],{"class":408},[398,94323,454],{"class":404},[398,94325,93195],{"class":408},[398,94327,619],{"class":457},[398,94329,780],{"class":408},[398,94331,925],{"class":457},[398,94333,93200],{"class":408},[398,94335,695],{"class":457},[398,94337,780],{"class":408},[398,94339,480],{"class":457},[398,94341,415],{"class":408},[398,94343,94344],{"class":400,"line":1490},[398,94345,94346],{"class":467},"#这个重复之后二维变成一维\n",[398,94348,94349,94352,94354],{"class":400,"line":1496},[398,94350,94351],{"class":408},"np.repeat(aa,",[398,94353,486],{"class":457},[398,94355,415],{"class":408},[398,94357,94358],{"class":400,"line":1587},[398,94359,94121],{"class":513},[398,94361,94362],{"class":400,"line":1593},[398,94363,94364],{"class":513},"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",[398,94366,94367],{"class":400,"line":1605},[398,94368,94121],{"class":513},[398,94370,94371],{"class":400,"line":1888},[398,94372,94373],{"class":467},"#指定axis\n",[398,94375,94376,94378,94380,94382,94384,94386,94388],{"class":400,"line":1893},[398,94377,94351],{"class":408},[398,94379,486],{"class":457},[398,94381,780],{"class":408},[398,94383,47707],{"class":5493},[398,94385,454],{"class":404},[398,94387,593],{"class":457},[398,94389,415],{"class":408},[398,94391,94392],{"class":400,"line":1899},[398,94393,93757],{"class":467},[398,94395,94396],{"class":400,"line":1904},[398,94397,94121],{"class":513},[398,94399,94400],{"class":400,"line":1918},[398,94401,94402],{"class":513},"array([[ 1,  2,  3],\n",[398,94404,94405],{"class":400,"line":1923},[398,94406,94407],{"class":513},"       [ 1,  2,  3],\n",[398,94409,94410],{"class":400,"line":1929},[398,94411,94412],{"class":513},"       [ 4,  5,  6],\n",[398,94414,94415],{"class":400,"line":1950},[398,94416,94412],{"class":513},[398,94418,94419],{"class":400,"line":1955},[398,94420,94421],{"class":513},"       [ 7,  8,  9],\n",[398,94423,94424],{"class":400,"line":1969},[398,94425,94421],{"class":513},[398,94427,94428],{"class":400,"line":1974},[398,94429,94430],{"class":513},"       [10, 11, 12],\n",[398,94432,94433],{"class":400,"line":2003},[398,94434,94435],{"class":513},"       [10, 11, 12]])\n",[398,94437,94438],{"class":400,"line":2008},[398,94439,94121],{"class":513},[398,94441,94442,94444,94446,94448,94450,94452,94454],{"class":400,"line":2025},[398,94443,94351],{"class":408},[398,94445,486],{"class":457},[398,94447,780],{"class":408},[398,94449,47707],{"class":5493},[398,94451,454],{"class":404},[398,94453,619],{"class":457},[398,94455,415],{"class":408},[398,94457,94458],{"class":400,"line":2030},[398,94459,93757],{"class":467},[398,94461,94462],{"class":400,"line":2035},[398,94463,94121],{"class":513},[398,94465,94466],{"class":400,"line":2040},[398,94467,94468],{"class":513},"array([[ 1,  1,  2,  2,  3,  3],\n",[398,94470,94471],{"class":400,"line":2054},[398,94472,94473],{"class":513},"       [ 4,  4,  5,  5,  6,  6],\n",[398,94475,94476],{"class":400,"line":2059},[398,94477,94478],{"class":513},"       [ 7,  7,  8,  8,  9,  9],\n",[398,94480,94481],{"class":400,"line":2853},[398,94482,94483],{"class":513},"       [10, 10, 11, 11, 12, 12]])\n",[398,94485,94486],{"class":400,"line":2867},[398,94487,94121],{"class":513},[343,94489,94491],{"id":94490},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[389,94493,94495],{"className":30571,"code":94494,"language":30573,"meta":316,"style":316},"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",[395,94496,94497,94513,94518,94530,94534,94539,94549,94553],{"__ignoreMap":316},[398,94498,94499,94501,94503,94505,94507,94509,94511],{"class":400,"line":401},[398,94500,640],{"class":408},[398,94502,454],{"class":404},[398,94504,93195],{"class":408},[398,94506,619],{"class":457},[398,94508,780],{"class":408},[398,94510,721],{"class":457},[398,94512,415],{"class":408},[398,94514,94515],{"class":400,"line":317},[398,94516,94517],{"class":467},"#array([，2，3，4])\n",[398,94519,94520,94523,94525,94527],{"class":400,"line":320},[398,94521,94522],{"class":408},"np.roll(a,",[398,94524,486],{"class":457},[398,94526,831],{"class":408},[398,94528,94529],{"class":467},"#传正数向后调多少位，传负数向前调多少位\n",[398,94531,94532],{"class":400,"line":1470},[398,94533,93757],{"class":467},[398,94535,94536],{"class":400,"line":1476},[398,94537,94538],{"class":467},"#array([3, 4, 1, 2])\n",[398,94540,94541,94543,94545,94547],{"class":400,"line":1490},[398,94542,94522],{"class":408},[398,94544,934],{"class":404},[398,94546,619],{"class":457},[398,94548,415],{"class":408},[398,94550,94551],{"class":400,"line":1496},[398,94552,93757],{"class":467},[398,94554,94555],{"class":400,"line":1587},[398,94556,94557],{"class":467},"#array([2, 3, 4, 1])\n",[19,94559,94560],{},[1738,94561],{"alt":316,"src":94562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[343,94564,94566],{"id":94565},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,94568,94569],{},"resize()重新调整数组的大小",[19,94571,94572],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[389,94574,94576],{"className":30571,"code":94575,"language":30573,"meta":316,"style":316},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[395,94577,94578,94583,94596],{"__ignoreMap":316},[398,94579,94580],{"class":400,"line":401},[398,94581,94582],{"class":467},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[398,94584,94585,94588,94590,94592,94594],{"class":400,"line":317},[398,94586,94587],{"class":408},"np.resize(aa,(",[398,94589,486],{"class":457},[398,94591,780],{"class":408},[398,94593,746],{"class":457},[398,94595,30690],{"class":408},[398,94597,94598,94600,94602,94604,94606,94608],{"class":400,"line":320},[398,94599,94587],{"class":408},[398,94601,486],{"class":457},[398,94603,780],{"class":408},[398,94605,822],{"class":457},[398,94607,82964],{"class":408},[398,94609,94610],{"class":467},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[343,94612,94614],{"id":94613},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,94616,94617],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,94619,94620],{},[1738,94621],{"alt":316,"src":94622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[343,94624,94626],{"id":94625},"_126-保存加载文件","12.6 保存加载文件",[19,94628,94629],{},"savetxt():将数据保存到txt文件中",[19,94631,94632],{},"loadtxt():从文件加载数据",[19,94634,94635],{},[1738,94636],{"alt":316,"src":94637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[343,94639,94641],{"id":94640},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,94643,94644],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[343,94646,94648],{"id":94647},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,94650,94651],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,94653,94654],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,94656,94657],{},[1738,94658],{"alt":316,"src":94659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[343,94661,94663],{"id":94662},"_129-where语句","12.9 where语句",[19,94665,94666],{},"np.where(条件,x,y)",[19,94668,94669],{},"如果条件为True,对应值为x,否则对应值为y",[19,94671,94672],{},[1738,94673],{"alt":316,"src":94674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[343,94676,94678],{"id":94677},"_1210-dot矩阵","12.10 dot()矩阵",[19,94680,94681],{},[1738,94682],{"alt":316,"src":94683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[5403,94685,94686],{},"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":316,"searchDepth":317,"depth":317,"links":94688},[94689,94690,94691,94692,94693,94694,94695,94696,94697,94698],{"id":94051,"depth":317,"text":94052},{"id":94274,"depth":317,"text":94275},{"id":94490,"depth":317,"text":94491},{"id":94565,"depth":317,"text":94566},{"id":94613,"depth":317,"text":94614},{"id":94625,"depth":317,"text":94626},{"id":94640,"depth":317,"text":94641},{"id":94647,"depth":317,"text":94648},{"id":94662,"depth":317,"text":94663},{"id":94677,"depth":317,"text":94678},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":94043,"description":23654},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94705,"title":94706,"body":94707,"description":23654,"extension":326,"meta":95060,"navigation":328,"path":95061,"seo":95062,"stem":95063,"__hash__":95064},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94708,"toc":95058},[94709,94712,94715,94718,94721,94724,94789,94791,95055],[10,94710,94706],{"id":94711},"_13数组排序",[19,94713,94714],{},"排序主要用到的方法是np.sort和np.argsort",[19,94716,94717],{},"其中np.sort()对数组直接排序",[19,94719,94720],{},"而np.argsort()是返回排序后的原始索引",[19,94722,94723],{},"①一维数组",[389,94725,94727],{"className":30571,"code":94726,"language":30573,"meta":316,"style":316},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[395,94728,94729,94733,94773,94781],{"__ignoreMap":316},[398,94730,94731],{"class":400,"line":401},[398,94732,93298],{"class":467},[398,94734,94735,94737,94739,94741,94743,94745,94747,94749,94751,94753,94755,94757,94759,94761,94763,94765,94767,94769,94771],{"class":400,"line":317},[398,94736,640],{"class":408},[398,94738,454],{"class":404},[398,94740,93217],{"class":408},[398,94742,480],{"class":457},[398,94744,780],{"class":408},[398,94746,900],{"class":457},[398,94748,780],{"class":408},[398,94750,797],{"class":457},[398,94752,780],{"class":408},[398,94754,1177],{"class":457},[398,94756,780],{"class":408},[398,94758,681],{"class":457},[398,94760,780],{"class":408},[398,94762,1295],{"class":457},[398,94764,780],{"class":408},[398,94766,746],{"class":457},[398,94768,780],{"class":408},[398,94770,848],{"class":457},[398,94772,4933],{"class":408},[398,94774,94775,94778],{"class":400,"line":320},[398,94776,94777],{"class":408},"np.sort(a)",[398,94779,94780],{"class":467},"#升序排序\n",[398,94782,94783,94786],{"class":400,"line":1470},[398,94784,94785],{"class":408},"np.argsort(a)",[398,94787,94788],{"class":467},"#按照元素大小来索引排序\n",[19,94790,93484],{},[389,94792,94794],{"className":30571,"code":94793,"language":30573,"meta":316,"style":316},"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",[395,94795,94796,94808,94834,94839,94843,94848,94853,94858,94863,94867,94875,94879,94884,94889,94894,94899,94903,94908,94921,94925,94930,94935,94940,94945,94949,94954,94966,94970,94974,94978,94982,94986,94990,94995,95010,95015,95024,95029,95033,95037,95042,95046,95051],{"__ignoreMap":316},[398,94797,94798,94801,94803,94805],{"class":400,"line":401},[398,94799,94800],{"class":408},"np.random.seed(",[398,94802,593],{"class":457},[398,94804,831],{"class":408},[398,94806,94807],{"class":467},"#保证每次值一样\n",[398,94809,94810,94812,94814,94816,94818,94820,94822,94824,94826,94828,94830,94832],{"class":400,"line":317},[398,94811,93499],{"class":408},[398,94813,454],{"class":404},[398,94815,93307],{"class":408},[398,94817,713],{"class":457},[398,94819,780],{"class":408},[398,94821,31689],{"class":5493},[398,94823,454],{"class":404},[398,94825,409],{"class":408},[398,94827,695],{"class":457},[398,94829,780],{"class":408},[398,94831,746],{"class":457},[398,94833,30690],{"class":408},[398,94835,94836],{"class":400,"line":320},[398,94837,94838],{"class":467},"#原数组：\n",[398,94840,94841],{"class":400,"line":1470},[398,94842,94121],{"class":513},[398,94844,94845],{"class":400,"line":1476},[398,94846,94847],{"class":513},"array([[44, 47, 64, 67, 67,  9],\n",[398,94849,94850],{"class":400,"line":1490},[398,94851,94852],{"class":513},"       [83, 21, 36, 87, 70, 88],\n",[398,94854,94855],{"class":400,"line":1496},[398,94856,94857],{"class":513},"       [88, 12, 58, 65, 39, 87],\n",[398,94859,94860],{"class":400,"line":1587},[398,94861,94862],{"class":513},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[398,94864,94865],{"class":400,"line":1593},[398,94866,94121],{"class":513},[398,94868,94869,94872],{"class":400,"line":1605},[398,94870,94871],{"class":408},"np.sort(aa)",[398,94873,94874],{"class":467},"#每行进行了排序\n",[398,94876,94877],{"class":400,"line":1888},[398,94878,94121],{"class":513},[398,94880,94881],{"class":400,"line":1893},[398,94882,94883],{"class":513},"array([[ 9, 44, 47, 64, 67, 67],\n",[398,94885,94886],{"class":400,"line":1899},[398,94887,94888],{"class":513},"       [21, 36, 70, 83, 87, 88],\n",[398,94890,94891],{"class":400,"line":1904},[398,94892,94893],{"class":513},"       [12, 39, 58, 65, 87, 88],\n",[398,94895,94896],{"class":400,"line":1918},[398,94897,94898],{"class":513},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[398,94900,94901],{"class":400,"line":1923},[398,94902,94121],{"class":513},[398,94904,94905],{"class":400,"line":1929},[398,94906,94907],{"class":467},"#axis=0时\n",[398,94909,94910,94913,94915,94917,94919],{"class":400,"line":1950},[398,94911,94912],{"class":408},"np.sort(aa,",[398,94914,47707],{"class":5493},[398,94916,454],{"class":404},[398,94918,593],{"class":457},[398,94920,415],{"class":408},[398,94922,94923],{"class":400,"line":1955},[398,94924,94121],{"class":513},[398,94926,94927],{"class":400,"line":1969},[398,94928,94929],{"class":513},"array([[44, 12, 36, 37, 25,  9],\n",[398,94931,94932],{"class":400,"line":1974},[398,94933,94934],{"class":513},"       [46, 21, 58, 65, 39, 77],\n",[398,94936,94937],{"class":400,"line":2003},[398,94938,94939],{"class":513},"       [83, 47, 64, 67, 67, 87],\n",[398,94941,94942],{"class":400,"line":2008},[398,94943,94944],{"class":513},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[398,94946,94947],{"class":400,"line":2025},[398,94948,94121],{"class":513},[398,94950,94951],{"class":400,"line":2030},[398,94952,94953],{"class":467},"#axis=1时,为默认值\n",[398,94955,94956,94958,94960,94962,94964],{"class":400,"line":2035},[398,94957,94912],{"class":408},[398,94959,47707],{"class":5493},[398,94961,454],{"class":404},[398,94963,619],{"class":457},[398,94965,415],{"class":408},[398,94967,94968],{"class":400,"line":2040},[398,94969,94121],{"class":513},[398,94971,94972],{"class":400,"line":2054},[398,94973,94883],{"class":513},[398,94975,94976],{"class":400,"line":2059},[398,94977,94888],{"class":513},[398,94979,94980],{"class":400,"line":2853},[398,94981,94893],{"class":513},[398,94983,94984],{"class":400,"line":2867},[398,94985,94898],{"class":513},[398,94987,94988],{"class":400,"line":2875},[398,94989,94121],{"class":513},[398,94991,94992],{"class":400,"line":2880},[398,94993,94994],{"class":467},"#按最后一列排序\n",[398,94996,94997,94999,95001,95004,95006,95008],{"class":400,"line":2886},[398,94998,665],{"class":408},[398,95000,454],{"class":404},[398,95002,95003],{"class":408},"aa[:,",[398,95005,934],{"class":404},[398,95007,619],{"class":457},[398,95009,33439],{"class":408},[398,95011,95012],{"class":400,"line":2892},[398,95013,95014],{"class":467},"#获取最后一列排好序的索引\n",[398,95016,95017,95019,95021],{"class":400,"line":2897},[398,95018,74251],{"class":408},[398,95020,454],{"class":404},[398,95022,95023],{"class":408},"np.argsort(b)\n",[398,95025,95026],{"class":400,"line":8225},[398,95027,95028],{"class":408},"aa[index]\n",[398,95030,95031],{"class":400,"line":8249},[398,95032,94121],{"class":513},[398,95034,95035],{"class":400,"line":8254},[398,95036,94847],{"class":513},[398,95038,95039],{"class":400,"line":8260},[398,95040,95041],{"class":513},"       [46, 88, 81, 37, 25, 77],\n",[398,95043,95044],{"class":400,"line":8287},[398,95045,94857],{"class":513},[398,95047,95048],{"class":400,"line":8292},[398,95049,95050],{"class":513},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[398,95052,95053],{"class":400,"line":8298},[398,95054,94121],{"class":513},[5403,95056,95057],{},"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":316,"searchDepth":317,"depth":317,"links":95059},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94706,"description":23654},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":95066,"title":95067,"body":95068,"description":23654,"extension":326,"meta":95098,"navigation":328,"path":95099,"seo":95100,"stem":95101,"__hash__":95102},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":95069,"toc":95096},[95070,95073,95076,95079,95082,95085,95088,95091],[10,95071,95067],{"id":95072},"_14广播机制",[19,95074,95075],{},"广播的规则：",[19,95077,95078],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,95080,95081],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,95083,95084],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,95086,95087],{},"3.如果没有维度形状为1，则会引发异常",[19,95089,95090],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,95092,95093],{},[1738,95094],{"alt":316,"src":95095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":316,"searchDepth":317,"depth":317,"links":95097},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":95067,"description":23654},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":95104,"title":95105,"body":95106,"description":23654,"extension":326,"meta":95204,"navigation":328,"path":95205,"seo":95206,"stem":95207,"__hash__":95208},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":95107,"toc":95202},[95108,95111,95114,95199],[10,95109,95105],{"id":95110},"_15比较掩码",[19,95112,95113],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[389,95115,95117],{"className":30571,"code":95116,"language":30573,"meta":316,"style":316},"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",[395,95118,95119,95165,95176,95190,95194],{"__ignoreMap":316},[398,95120,95121,95123,95125,95128,95130,95132,95134,95136,95138,95140,95142,95144,95146,95148,95150,95152,95154,95156,95158,95160,95162],{"class":400,"line":401},[398,95122,640],{"class":408},[398,95124,454],{"class":404},[398,95126,95127],{"class":408},"np.array([[",[398,95129,619],{"class":457},[398,95131,780],{"class":408},[398,95133,486],{"class":457},[398,95135,780],{"class":408},[398,95137,480],{"class":457},[398,95139,48223],{"class":408},[398,95141,874],{"class":457},[398,95143,780],{"class":408},[398,95145,900],{"class":457},[398,95147,780],{"class":408},[398,95149,925],{"class":457},[398,95151,48223],{"class":408},[398,95153,1127],{"class":457},[398,95155,780],{"class":408},[398,95157,1152],{"class":457},[398,95159,780],{"class":408},[398,95161,1177],{"class":457},[398,95163,95164],{"class":408},"]])\n",[398,95166,95167,95169,95171,95173],{"class":400,"line":317},[398,95168,640],{"class":408},[398,95170,1312],{"class":404},[398,95172,1102],{"class":457},[398,95174,95175],{"class":467},"#结果是一个由True,False组成的数组\n",[398,95177,95178,95181,95183,95185,95187],{"class":400,"line":320},[398,95179,95180],{"class":408},"a[a",[398,95182,1312],{"class":404},[398,95184,1102],{"class":457},[398,95186,1342],{"class":408},[398,95188,95189],{"class":467},"#小于20的元素会存到这个数组中\n",[398,95191,95192],{"class":400,"line":1470},[398,95193,93757],{"class":467},[398,95195,95196],{"class":400,"line":1476},[398,95197,95198],{"class":467},"#array([ 1,  2,  3, 11, 12, 13])\n",[5403,95200,95201],{},"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":316,"searchDepth":317,"depth":317,"links":95203},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":95105,"description":23654},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95210,"title":95211,"body":95212,"description":23654,"extension":326,"meta":95304,"navigation":328,"path":95305,"seo":95306,"stem":95307,"__hash__":95308},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95213,"toc":95302},[95214,95217,95220,95223,95226,95229,95294,95299],[10,95215,95211],{"id":95216},"_16魔法命令time",[19,95218,95219],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,95221,95222],{},"%:行模式",[19,95224,95225],{},"%%:单元格模式",[19,95227,95228],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[389,95230,95232],{"className":30571,"code":95231,"language":30573,"meta":316,"style":316},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[395,95233,95234,95239,95246,95251,95260,95273,95277,95285],{"__ignoreMap":316},[398,95235,95236],{"class":400,"line":401},[398,95237,95238],{"class":467},"#程序执行时间\n",[398,95240,95241,95243],{"class":400,"line":317},[398,95242,30585],{"class":404},[398,95244,95245],{"class":408}," time \n",[398,95247,95248],{"class":400,"line":320},[398,95249,95250],{"class":467},"#获取时间\n",[398,95252,95253,95256,95258],{"class":400,"line":1470},[398,95254,95255],{"class":408},"start",[398,95257,454],{"class":404},[398,95259,32611],{"class":408},[398,95261,95262,95265,95268,95270],{"class":400,"line":1476},[398,95263,95264],{"class":408},"time.sleep(",[398,95266,95267],{"class":457},"0.4",[398,95269,831],{"class":408},[398,95271,95272],{"class":467},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[398,95274,95275],{"class":400,"line":1490},[398,95276,95250],{"class":467},[398,95278,95279,95281,95283],{"class":400,"line":1496},[398,95280,45994],{"class":408},[398,95282,454],{"class":404},[398,95284,32611],{"class":408},[398,95286,95287,95289,95291],{"class":400,"line":1587},[398,95288,45994],{"class":408},[398,95290,934],{"class":404},[398,95292,95293],{"class":408},"start\n",[19,95295,95296],{},[1738,95297],{"alt":316,"src":95298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[5403,95300,95301],{},"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":316,"searchDepth":317,"depth":317,"links":95303},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95211,"description":23654},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95310,"title":95311,"body":95312,"description":23654,"extension":326,"meta":95347,"navigation":328,"path":95348,"seo":95349,"stem":95350,"__hash__":95351},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95313,"toc":95345},[95314,95317,95320,95323,95326,95329,95332,95335,95340],[10,95315,95311],{"id":95316},"_17魔法命令timeit",[19,95318,95319],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,95321,95322],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,95324,95325],{},"单元格模式：",[19,95327,95328],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,95330,95331],{},"初始化语句执行次数由轮数来决定",[19,95333,95334],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,95336,95337],{},[1738,95338],{"alt":316,"src":95339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,95341,95342],{},[1738,95343],{"alt":316,"src":95344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":316,"searchDepth":317,"depth":317,"links":95346},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95311,"description":23654},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95353,"title":95354,"body":95355,"description":23654,"extension":326,"meta":95373,"navigation":328,"path":95374,"seo":95375,"stem":95376,"__hash__":95377},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95356,"toc":95371},[95357,95360,95363,95366],[10,95358,95354],{"id":95359},"_18魔法命令writefile和run",[19,95361,95362],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,95364,95365],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,95367,95368],{},[1738,95369],{"alt":316,"src":95370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":316,"searchDepth":317,"depth":317,"links":95372},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95354,"description":23654},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95379,"title":95380,"body":95381,"description":23654,"extension":326,"meta":95434,"navigation":328,"path":95435,"seo":95436,"stem":95437,"__hash__":95438},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95382,"toc":95432},[95383,95386,95389,95391,95394,95397,95402,95405,95408,95411,95414,95417,95420,95423,95426,95429],[10,95384,95380],{"id":95385},"_19魔法命令memit",[19,95387,95388],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,95390,24877],{},[19,95392,95393],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,95395,95396],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,95398,95399],{},[1738,95400],{"alt":316,"src":95401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,95403,95404],{},"补充：",[19,95406,95407],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,95409,95410],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,95412,95413],{},"解决方法：",[19,95415,95416],{},"1.cmd",[19,95418,95419],{},"2.依次输入以下代码：",[19,95421,95422],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,95424,95425],{},"pip install --upgrade ipython",[19,95427,95428],{},"#升级 memory_profiler 和 setuptools",[19,95430,95431],{},"pip install --upgrade memory_profiler setuptools",{"title":316,"searchDepth":317,"depth":317,"links":95433},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95380,"description":23654},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95440,"title":95441,"body":95442,"description":23654,"extension":326,"meta":97088,"navigation":328,"path":97089,"seo":97090,"stem":97091,"__hash__":97092},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95443,"toc":97058},[95444,95447,95451,95455,95516,95519,95524,95528,95533,95538,95543,95548,95551,95556,95560,95564,95597,95600,95603,95606,95658,95661,95697,95700,95742,95746,95767,95769,95806,95808,95813,95815,95820,95824,95827,95855,95859,95863,95916,95920,96012,96016,96020,96023,96028,96032,96057,96062,96066,96069,96072,96075,96078,96081,96084,96087,96099,96103,96107,96110,96142,96145,96168,96171,96197,96200,96226,96229,96263,96266,96328,96332,96335,96339,96342,96368,96371,96374,96379,96382,96451,96453,96458,96519,96522,96533,96539,96544,96548,96551,96564,96568,96583,96585,96608,96610,96636,96639,96642,96645,96693,96695,96700,96704,96708,96735,96739,96766,96769,96774,96779,96869,96873,96931,96936,96939,96942,96984,96988,97044,97049,97052,97055],[10,95445,95441],{"id":95446},"_2创建数组",[343,95448,95450],{"id":95449},"_21-array函数创建数组","2.1 array()函数创建数组",[14,95452,95454],{"id":95453},"_221-函数语句","2.2.1 函数语句",[389,95456,95458],{"className":30571,"code":95457,"language":30573,"meta":316,"style":316},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[395,95459,95460],{"__ignoreMap":316},[398,95461,95462,95465,95468,95470,95472,95474,95476,95478,95481,95483,95486,95488,95491,95493,95495,95497,95500,95502,95505,95507,95510,95512,95514],{"class":400,"line":401},[398,95463,95464],{"class":408},"numpy.array(",[398,95466,95467],{"class":457},"object",[398,95469,12712],{"class":408},[398,95471,93693],{"class":5493},[398,95473,13841],{"class":404},[398,95475,39126],{"class":457},[398,95477,12712],{"class":408},[398,95479,95480],{"class":5493},"copy",[398,95482,13841],{"class":404},[398,95484,95485],{"class":457}," True",[398,95487,12712],{"class":408},[398,95489,95490],{"class":5493},"order",[398,95492,13841],{"class":404},[398,95494,39126],{"class":457},[398,95496,12712],{"class":408},[398,95498,95499],{"class":5493},"subok",[398,95501,13841],{"class":404},[398,95503,95504],{"class":457}," False",[398,95506,12712],{"class":408},[398,95508,95509],{"class":5493},"ndmin",[398,95511,13841],{"class":404},[398,95513,4369],{"class":457},[398,95515,415],{"class":408},[19,95517,95518],{},"参数：",[19,95520,95521],{},[1738,95522],{"alt":316,"src":95523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[14,95525,95527],{"id":95526},"_222-实例","2.2.2 实例",[19,95529,95530],{},[1738,95531],{"alt":316,"src":95532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,95534,95535],{},[1738,95536],{"alt":316,"src":95537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,95539,95540],{},[1738,95541],{"alt":316,"src":95542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,95544,95545],{},[1738,95546],{"alt":316,"src":95547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,95549,95550],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,95552,95553],{},[1738,95554],{"alt":316,"src":95555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[343,95557,95559],{"id":95558},"_22-随机数创建数组","2.2 随机数创建数组",[14,95561,95563],{"id":95562},"_221-random语句","2.2.1 random语句",[389,95565,95567],{"className":30571,"code":95566,"language":30573,"meta":316,"style":316},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[395,95568,95569,95574,95579,95587,95592],{"__ignoreMap":316},[398,95570,95571],{"class":400,"line":401},[398,95572,95573],{"class":467},"#random.random()\n",[398,95575,95576],{"class":400,"line":317},[398,95577,95578],{"class":467},"#确定随机种子,就是每次运行结果是相同的\n",[398,95580,95581,95583,95585],{"class":400,"line":320},[398,95582,94800],{"class":408},[398,95584,593],{"class":457},[398,95586,415],{"class":408},[398,95588,95589],{"class":400,"line":1470},[398,95590,95591],{"class":408},"np.random.random()\n",[398,95593,95594],{"class":400,"line":1476},[398,95595,95596],{"class":467},"#生成一个随机的数目\n",[19,95598,95599],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,95601,95602],{},"可以指定数组形状 size",[19,95604,95605],{},"①生成一维数组",[389,95607,95609],{"className":30571,"code":95608,"language":30573,"meta":316,"style":316},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[395,95610,95611,95616,95629,95634,95650],{"__ignoreMap":316},[398,95612,95613],{"class":400,"line":401},[398,95614,95615],{"class":467},"#random.random(size())\n",[398,95617,95618,95621,95623,95625,95627],{"class":400,"line":317},[398,95619,95620],{"class":408},"np.random.random(",[398,95622,31689],{"class":5493},[398,95624,454],{"class":404},[398,95626,721],{"class":457},[398,95628,415],{"class":408},[398,95630,95631],{"class":400,"line":320},[398,95632,95633],{"class":467},"#生成一位的五个元素\n",[398,95635,95636,95638,95640,95642,95644,95646,95648],{"class":400,"line":1470},[398,95637,640],{"class":408},[398,95639,454],{"class":404},[398,95641,95620],{"class":408},[398,95643,31689],{"class":5493},[398,95645,454],{"class":404},[398,95647,695],{"class":457},[398,95649,415],{"class":408},[398,95651,95652,95655],{"class":400,"line":1476},[398,95653,95654],{"class":408},"a.shape ",[398,95656,95657],{"class":467},"#输出数组形状\n",[19,95659,95660],{},"②生成二维数组",[389,95662,95664],{"className":30571,"code":95663,"language":30573,"meta":316,"style":316},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[395,95665,95666,95670,95692],{"__ignoreMap":316},[398,95667,95668],{"class":400,"line":401},[398,95669,93494],{"class":467},[398,95671,95672,95674,95676,95678,95680,95682,95684,95686,95688,95690],{"class":400,"line":317},[398,95673,93499],{"class":408},[398,95675,454],{"class":404},[398,95677,95620],{"class":408},[398,95679,31689],{"class":5493},[398,95681,454],{"class":404},[398,95683,409],{"class":408},[398,95685,695],{"class":457},[398,95687,780],{"class":408},[398,95689,721],{"class":457},[398,95691,30690],{"class":408},[398,95693,95694],{"class":400,"line":320},[398,95695,95696],{"class":467},"#生成四行五列的数组\n",[19,95698,95699],{},"③生成三维数组",[389,95701,95703],{"className":30571,"code":95702,"language":30573,"meta":316,"style":316},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[395,95704,95705,95710,95737],{"__ignoreMap":316},[398,95706,95707],{"class":400,"line":401},[398,95708,95709],{"class":467},"#三维数组\n",[398,95711,95712,95715,95717,95719,95721,95723,95725,95727,95729,95731,95733,95735],{"class":400,"line":317},[398,95713,95714],{"class":408},"aaa",[398,95716,454],{"class":404},[398,95718,95620],{"class":408},[398,95720,31689],{"class":5493},[398,95722,454],{"class":404},[398,95724,409],{"class":408},[398,95726,486],{"class":457},[398,95728,780],{"class":408},[398,95730,480],{"class":457},[398,95732,780],{"class":408},[398,95734,695],{"class":457},[398,95736,30690],{"class":408},[398,95738,95739],{"class":400,"line":320},[398,95740,95741],{"class":408},"aaa.shape\n",[14,95743,95745],{"id":95744},"_222-randint语句","2.2.2 randint语句",[389,95747,95749],{"className":30571,"code":95748,"language":30573,"meta":316,"style":316},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[395,95750,95751,95756],{"__ignoreMap":316},[398,95752,95753],{"class":400,"line":401},[398,95754,95755],{"class":467},"#生成随机的整数 random.randint(low,high,size)\n",[398,95757,95758,95760,95762,95764],{"class":400,"line":317},[398,95759,93307],{"class":408},[398,95761,721],{"class":457},[398,95763,13991],{"class":408},[398,95765,95766],{"class":467},"#0~5中的随机一个数\n",[19,95768,95605],{},[389,95770,95772],{"className":30571,"code":95771,"language":30573,"meta":316,"style":316},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[395,95773,95774,95779,95801],{"__ignoreMap":316},[398,95775,95776],{"class":400,"line":401},[398,95777,95778],{"class":467},"#一维\n",[398,95780,95781,95783,95785,95787,95789,95791,95793,95795,95797,95799],{"class":400,"line":317},[398,95782,93307],{"class":408},[398,95784,619],{"class":457},[398,95786,780],{"class":408},[398,95788,874],{"class":457},[398,95790,780],{"class":408},[398,95792,31689],{"class":5493},[398,95794,454],{"class":404},[398,95796,409],{"class":408},[398,95798,848],{"class":457},[398,95800,30690],{"class":408},[398,95802,95803],{"class":400,"line":320},[398,95804,95805],{"class":467},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,95807,95660],{},[19,95809,95810],{},[1738,95811],{"alt":316,"src":95812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,95814,95699],{},[19,95816,95817],{},[1738,95818],{"alt":316,"src":95819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[14,95821,95823],{"id":95822},"_222-rand语句","2.2.2 rand语句",[19,95825,95826],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[389,95828,95830],{"className":30571,"code":95829,"language":30573,"meta":316,"style":316},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[395,95831,95832,95845,95850],{"__ignoreMap":316},[398,95833,95834,95837,95839,95841,95843],{"class":400,"line":401},[398,95835,95836],{"class":408},"np.random.rand(",[398,95838,713],{"class":457},[398,95840,780],{"class":408},[398,95842,848],{"class":457},[398,95844,415],{"class":408},[398,95846,95847],{"class":400,"line":317},[398,95848,95849],{"class":467},"#第一个参数100：行数，表示有100个样本\n",[398,95851,95852],{"class":400,"line":320},[398,95853,95854],{"class":467},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[343,95856,95858],{"id":95857},"_23-arange创建数组","2.3 arange()创建数组",[14,95860,95862],{"id":95861},"_231-函数语句","2.3.1 函数语句",[389,95864,95866],{"className":30571,"code":95865,"language":30573,"meta":316,"style":316},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[395,95867,95868,95882,95887,95892,95897,95902,95907,95912],{"__ignoreMap":316},[398,95869,95870,95873,95875,95877,95880],{"class":400,"line":401},[398,95871,95872],{"class":408},"numpy.arange([start,] stop[, step], ",[398,95874,93693],{"class":5493},[398,95876,454],{"class":404},[398,95878,95879],{"class":457},"None",[398,95881,415],{"class":408},[398,95883,95884],{"class":400,"line":317},[398,95885,95886],{"class":467},"#参数\n",[398,95888,95889],{"class":400,"line":320},[398,95890,95891],{"class":513},"\"\"\"\n",[398,95893,95894],{"class":400,"line":1470},[398,95895,95896],{"class":513},"start:起始值，可选，默认从 0 开始。\n",[398,95898,95899],{"class":400,"line":1476},[398,95900,95901],{"class":513},"stop:结束值（不包含该值）。\n",[398,95903,95904],{"class":400,"line":1490},[398,95905,95906],{"class":513},"step:步长，可选，默认是 1。可以为浮点数。\n",[398,95908,95909],{"class":400,"line":1496},[398,95910,95911],{"class":513},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[398,95913,95914],{"class":400,"line":1587},[398,95915,95891],{"class":513},[14,95917,95919],{"id":95918},"_232-实例","2.3.2 实例",[389,95921,95923],{"className":30571,"code":95922,"language":30573,"meta":316,"style":316},"#创建一维数组\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",[395,95924,95925,95929,95953,95958,95963,95967,95990,95994,95998,96003,96008],{"__ignoreMap":316},[398,95926,95927],{"class":400,"line":401},[398,95928,93298],{"class":467},[398,95930,95931,95933,95935,95937,95939,95941,95943,95945,95947,95949,95951],{"class":400,"line":317},[398,95932,93195],{"class":408},[398,95934,619],{"class":457},[398,95936,780],{"class":408},[398,95938,1127],{"class":457},[398,95940,780],{"class":408},[398,95942,619],{"class":457},[398,95944,780],{"class":408},[398,95946,93693],{"class":5493},[398,95948,454],{"class":404},[398,95950,412],{"class":457},[398,95952,415],{"class":408},[398,95954,95955],{"class":400,"line":320},[398,95956,95957],{"class":467},"#输出结果：\n",[398,95959,95960],{"class":400,"line":1470},[398,95961,95962],{"class":467},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[398,95964,95965],{"class":400,"line":1476},[398,95966,94140],{"class":467},[398,95968,95969,95972,95974,95976,95978,95981,95983,95985,95987],{"class":400,"line":1490},[398,95970,95971],{"class":408},"np.array([np.arange(",[398,95973,619],{"class":457},[398,95975,780],{"class":408},[398,95977,695],{"class":457},[398,95979,95980],{"class":408},"),np.arange(",[398,95982,695],{"class":457},[398,95984,780],{"class":408},[398,95986,771],{"class":457},[398,95988,95989],{"class":408},")])\n",[398,95991,95992],{"class":400,"line":1496},[398,95993,93757],{"class":467},[398,95995,95996],{"class":400,"line":1587},[398,95997,95891],{"class":513},[398,95999,96000],{"class":400,"line":1593},[398,96001,96002],{"class":513},"array([[1, 2, 3],\n",[398,96004,96005],{"class":400,"line":1605},[398,96006,96007],{"class":513},"       [4, 5, 6]])\n",[398,96009,96010],{"class":400,"line":1888},[398,96011,95891],{"class":513},[343,96013,96015],{"id":96014},"_24-生态分布","2.4 生态分布",[14,96017,96019],{"id":96018},"_241-标准正态分布","2.4.1 标准正态分布",[19,96021,96022],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,96024,96025],{},[1738,96026],{"alt":316,"src":96027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[14,96029,96031],{"id":96030},"_242-常规正态分布","2.4.2 常规正态分布",[389,96033,96035],{"className":30571,"code":96034,"language":30573,"meta":316,"style":316},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[395,96036,96037,96042,96047,96052],{"__ignoreMap":316},[398,96038,96039],{"class":400,"line":401},[398,96040,96041],{"class":408},"random.normal(loc,scale,size)也可以生成正态分布\n",[398,96043,96044],{"class":400,"line":317},[398,96045,96046],{"class":467},"#loc:期望\n",[398,96048,96049],{"class":400,"line":320},[398,96050,96051],{"class":467},"#scale:方差\n",[398,96053,96054],{"class":400,"line":1470},[398,96055,96056],{"class":467},"#size:用于确定是几维的数列\n",[19,96058,96059],{},[1738,96060],{"alt":316,"src":96061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[343,96063,96065],{"id":96064},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,96067,96068],{},"ndim:秩，维度个数",[19,96070,96071],{},"size:数组元素的个数",[19,96073,96074],{},"shape:数组的形状",[19,96076,96077],{},"dtype:数组元素的类型",[19,96079,96080],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,96082,96083],{},"他们都是属性，通过数组.属性的形式来确定",[19,96085,96086],{},"如果需要输出多个可以通过以下方式：",[389,96088,96090],{"className":30571,"code":96089,"language":30573,"meta":316,"style":316},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[395,96091,96092],{"__ignoreMap":316},[398,96093,96094,96096],{"class":400,"line":401},[398,96095,30608],{"class":457},[398,96097,96098],{"class":408},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[343,96100,96102],{"id":96101},"_26-其他方式创建数组","2.6 其他方式创建数组",[14,96104,96106],{"id":96105},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,96108,96109],{},"①创建一维数组",[389,96111,96113],{"className":30571,"code":96112,"language":30573,"meta":316,"style":316},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[395,96114,96115,96124,96128,96133,96138],{"__ignoreMap":316},[398,96116,96117,96120,96122],{"class":400,"line":401},[398,96118,96119],{"class":408},"np.zeros(",[398,96121,848],{"class":457},[398,96123,415],{"class":408},[398,96125,96126],{"class":400,"line":317},[398,96127,95891],{"class":513},[398,96129,96130],{"class":400,"line":320},[398,96131,96132],{"class":513},"输出结果：\n",[398,96134,96135],{"class":400,"line":1470},[398,96136,96137],{"class":513},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[398,96139,96140],{"class":400,"line":1476},[398,96141,95891],{"class":513},[19,96143,96144],{},"上方代码等价于：",[389,96146,96148],{"className":30571,"code":96147,"language":30573,"meta":316,"style":316},"np.zeros(shape=(10))#创建10个元素的0数组\n",[395,96149,96150],{"__ignoreMap":316},[398,96151,96152,96154,96157,96159,96161,96163,96165],{"class":400,"line":401},[398,96153,96119],{"class":408},[398,96155,96156],{"class":5493},"shape",[398,96158,454],{"class":404},[398,96160,409],{"class":408},[398,96162,848],{"class":457},[398,96164,82964],{"class":408},[398,96166,96167],{"class":467},"#创建10个元素的0数组\n",[19,96169,96170],{},"也可以指定类型",[389,96172,96174],{"className":30571,"code":96173,"language":30573,"meta":316,"style":316},"#指定类型\nnp.zeros(5,dtype=int)\n",[395,96175,96176,96181],{"__ignoreMap":316},[398,96177,96178],{"class":400,"line":401},[398,96179,96180],{"class":467},"#指定类型\n",[398,96182,96183,96185,96187,96189,96191,96193,96195],{"class":400,"line":317},[398,96184,96119],{"class":408},[398,96186,721],{"class":457},[398,96188,780],{"class":408},[398,96190,93693],{"class":5493},[398,96192,454],{"class":404},[398,96194,412],{"class":457},[398,96196,415],{"class":408},[19,96198,96199],{},"②创建二维数组",[389,96201,96203],{"className":30571,"code":96202,"language":30573,"meta":316,"style":316},"np.zeros((3,4),dtype=int)\n",[395,96204,96205],{"__ignoreMap":316},[398,96206,96207,96210,96212,96214,96216,96218,96220,96222,96224],{"class":400,"line":401},[398,96208,96209],{"class":408},"np.zeros((",[398,96211,480],{"class":457},[398,96213,780],{"class":408},[398,96215,695],{"class":457},[398,96217,42449],{"class":408},[398,96219,93693],{"class":5493},[398,96221,454],{"class":404},[398,96223,412],{"class":457},[398,96225,415],{"class":408},[19,96227,96228],{},"③创建三维数组",[389,96230,96232],{"className":30571,"code":96231,"language":30573,"meta":316,"style":316},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[395,96233,96234,96239],{"__ignoreMap":316},[398,96235,96236],{"class":400,"line":401},[398,96237,96238],{"class":467},"#创建三维数组\n",[398,96240,96241,96243,96245,96247,96249,96251,96253,96255,96257,96259,96261],{"class":400,"line":317},[398,96242,96209],{"class":408},[398,96244,480],{"class":457},[398,96246,780],{"class":408},[398,96248,695],{"class":457},[398,96250,780],{"class":408},[398,96252,721],{"class":457},[398,96254,42449],{"class":408},[398,96256,93693],{"class":5493},[398,96258,454],{"class":404},[398,96260,412],{"class":457},[398,96262,415],{"class":408},[19,96264,96265],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[389,96267,96269],{"className":30571,"code":96268,"language":30573,"meta":316,"style":316},"#使用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",[395,96270,96271,96276,96291,96296,96301,96323],{"__ignoreMap":316},[398,96272,96273],{"class":400,"line":401},[398,96274,96275],{"class":467},"#使用zeros_like将创建的一维数组变成全0的数组\n",[398,96277,96278,96280,96282,96284,96286,96288],{"class":400,"line":317},[398,96279,640],{"class":408},[398,96281,454],{"class":404},[398,96283,93195],{"class":408},[398,96285,695],{"class":457},[398,96287,831],{"class":408},[398,96289,96290],{"class":467},"#这个得到的结果：一维数组0，1，2，3\n",[398,96292,96293],{"class":400,"line":320},[398,96294,96295],{"class":408},"np.zeros_like(a)\n",[398,96297,96298],{"class":400,"line":1470},[398,96299,96300],{"class":467},"#使用zeros_like将创建的二维数组变成全0的数组\n",[398,96302,96303,96305,96307,96309,96311,96313,96315,96317,96319,96321],{"class":400,"line":1476},[398,96304,93499],{"class":408},[398,96306,454],{"class":404},[398,96308,95620],{"class":408},[398,96310,31689],{"class":5493},[398,96312,454],{"class":404},[398,96314,409],{"class":408},[398,96316,695],{"class":457},[398,96318,780],{"class":408},[398,96320,721],{"class":457},[398,96322,30690],{"class":408},[398,96324,96325],{"class":400,"line":1490},[398,96326,96327],{"class":408},"np.zeros_like(aa)\n",[14,96329,96331],{"id":96330},"_262-ones创建数组","2.6.2 ones()创建数组",[19,96333,96334],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[14,96336,96338],{"id":96337},"_263-empty创建数组","2.6.3 empty()创建数组",[19,96340,96341],{},"①empty()用法",[389,96343,96345],{"className":30571,"code":96344,"language":30573,"meta":316,"style":316},"numpy.empty(shape,dtype=float,order='c')\n",[395,96346,96347],{"__ignoreMap":316},[398,96348,96349,96352,96354,96356,96358,96360,96362,96364,96366],{"class":400,"line":401},[398,96350,96351],{"class":408},"numpy.empty(shape,",[398,96353,93693],{"class":5493},[398,96355,454],{"class":404},[398,96357,448],{"class":457},[398,96359,780],{"class":408},[398,96361,95490],{"class":5493},[398,96363,454],{"class":404},[398,96365,76221],{"class":513},[398,96367,415],{"class":408},[19,96369,96370],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,96372,96373],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,96375,96376],{},[1738,96377],{"alt":316,"src":96378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,96380,96381],{},"②empty()用法",[389,96383,96385],{"className":30571,"code":96384,"language":30573,"meta":316,"style":316},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[395,96386,96387,96408,96420,96441,96446],{"__ignoreMap":316},[398,96388,96389,96391,96393,96396,96398,96400,96402,96404,96406],{"class":400,"line":401},[398,96390,1247],{"class":408},[398,96392,454],{"class":404},[398,96394,96395],{"class":408},"np.empty(",[398,96397,848],{"class":457},[398,96399,780],{"class":408},[398,96401,93693],{"class":5493},[398,96403,454],{"class":404},[398,96405,412],{"class":457},[398,96407,415],{"class":408},[398,96409,96410,96412,96414,96416,96418],{"class":400,"line":317},[398,96411,1222],{"class":408},[398,96413,454],{"class":404},[398,96415,93195],{"class":408},[398,96417,721],{"class":457},[398,96419,415],{"class":408},[398,96421,96422,96425,96427,96430,96432,96434,96437,96439],{"class":400,"line":320},[398,96423,96424],{"class":408},"np.add(",[398,96426,486],{"class":457},[398,96428,96429],{"class":408},",x,",[398,96431,93247],{"class":5493},[398,96433,454],{"class":404},[398,96435,96436],{"class":408},"y[:",[398,96438,721],{"class":457},[398,96440,4933],{"class":408},[398,96442,96443],{"class":400,"line":1470},[398,96444,96445],{"class":467},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[398,96447,96448],{"class":400,"line":1476},[398,96449,96450],{"class":408},"y\n",[19,96452,11791],{},[19,96454,96455],{},[1738,96456],{"alt":316,"src":96457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[389,96459,96461],{"className":30571,"code":96460,"language":30573,"meta":316,"style":316},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[395,96462,96463,96479,96499,96514],{"__ignoreMap":316},[398,96464,96465,96467,96469,96471,96473,96475,96477],{"class":400,"line":401},[398,96466,1222],{"class":408},[398,96468,454],{"class":404},[398,96470,93195],{"class":408},[398,96472,619],{"class":457},[398,96474,780],{"class":408},[398,96476,746],{"class":457},[398,96478,415],{"class":408},[398,96480,96481,96483,96485,96487,96489,96491,96493,96495,96497],{"class":400,"line":317},[398,96482,1247],{"class":408},[398,96484,454],{"class":404},[398,96486,96395],{"class":408},[398,96488,721],{"class":457},[398,96490,780],{"class":408},[398,96492,93693],{"class":5493},[398,96494,454],{"class":404},[398,96496,412],{"class":457},[398,96498,415],{"class":408},[398,96500,96501,96504,96506,96508,96510,96512],{"class":400,"line":320},[398,96502,96503],{"class":408},"np.add(x,",[398,96505,486],{"class":457},[398,96507,780],{"class":408},[398,96509,93247],{"class":5493},[398,96511,454],{"class":404},[398,96513,93642],{"class":408},[398,96515,96516],{"class":400,"line":1470},[398,96517,96518],{"class":467},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,96520,96521],{},"③empty_like()",[19,96523,96524],{},[23,96525,96526,96527,96532],{},"创建一个",[23,96528,96529],{},[23,96530,96531],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,96534,96535,96538],{},[395,96536,96537],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,96540,96541],{},[1738,96542],{"alt":316,"src":96543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[14,96545,96547],{"id":96546},"_264-用法","2.6.4 ？？用法",[19,96549,96550],{},"当想查看一个函数的参数时，可以通过？？来实现",[389,96552,96554],{"className":30571,"code":96553,"language":30573,"meta":316,"style":316},"np.full??\n",[395,96555,96556],{"__ignoreMap":316},[398,96557,96558,96561],{"class":400,"line":401},[398,96559,96560],{"class":408},"np.full",[398,96562,96563],{"class":77596},"??\n",[14,96565,96567],{"id":96566},"_265-full创建数组","2.6.5 full()创建数组",[389,96569,96571],{"className":30571,"code":96570,"language":30573,"meta":316,"style":316},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[395,96572,96573,96578],{"__ignoreMap":316},[398,96574,96575],{"class":400,"line":401},[398,96576,96577],{"class":408},"full(shape,fill_value)\n",[398,96579,96580],{"class":400,"line":317},[398,96581,96582],{"class":408},"创建全为某个指定值的数组\n",[19,96584,94723],{},[389,96586,96588],{"className":30571,"code":96587,"language":30573,"meta":316,"style":316},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[395,96589,96590,96595],{"__ignoreMap":316},[398,96591,96592],{"class":400,"line":401},[398,96593,96594],{"class":467},"#创建一个一维数组,以20进行填充\n",[398,96596,96597,96600,96602,96604,96606],{"class":400,"line":317},[398,96598,96599],{"class":408},"np.full(",[398,96601,848],{"class":457},[398,96603,780],{"class":408},[398,96605,1102],{"class":457},[398,96607,415],{"class":408},[19,96609,93484],{},[389,96611,96613],{"className":30571,"code":96612,"language":30573,"meta":316,"style":316},"#创建二维数组\nnp.full((3,5),11)\n",[395,96614,96615,96619],{"__ignoreMap":316},[398,96616,96617],{"class":400,"line":401},[398,96618,94140],{"class":467},[398,96620,96621,96624,96626,96628,96630,96632,96634],{"class":400,"line":317},[398,96622,96623],{"class":408},"np.full((",[398,96625,480],{"class":457},[398,96627,780],{"class":408},[398,96629,721],{"class":457},[398,96631,42449],{"class":408},[398,96633,874],{"class":457},[398,96635,415],{"class":408},[19,96637,96638],{},"③full_like用法",[19,96640,96641],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,96643,96644],{},"这里是指定填充而已",[389,96646,96648],{"className":30571,"code":96647,"language":30573,"meta":316,"style":316},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[395,96649,96650,96655,96679,96684],{"__ignoreMap":316},[398,96651,96652],{"class":400,"line":401},[398,96653,96654],{"class":467},"#创建一个指定形状数组\n",[398,96656,96657,96659,96661,96663,96665,96667,96669,96671,96673,96675,96677],{"class":400,"line":317},[398,96658,640],{"class":408},[398,96660,454],{"class":404},[398,96662,93195],{"class":408},[398,96664,619],{"class":457},[398,96666,780],{"class":408},[398,96668,727],{"class":457},[398,96670,93200],{"class":408},[398,96672,695],{"class":457},[398,96674,780],{"class":408},[398,96676,822],{"class":457},[398,96678,415],{"class":408},[398,96680,96681],{"class":400,"line":320},[398,96682,96683],{"class":467},"#进行指定填充\n",[398,96685,96686,96689,96691],{"class":400,"line":1470},[398,96687,96688],{"class":408},"np.full_like(a,",[398,96690,848],{"class":457},[398,96692,415],{"class":408},[19,96694,11791],{},[19,96696,96697],{},[1738,96698],{"alt":316,"src":96699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[14,96701,96703],{"id":96702},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22275,96705,96707],{"id":96706},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[389,96709,96711],{"className":30571,"code":96710,"language":30573,"meta":316,"style":316},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[395,96712,96713,96730],{"__ignoreMap":316},[398,96714,96715,96718,96720,96722,96724,96726,96728],{"class":400,"line":401},[398,96716,96717],{"class":408},"np.eye(",[398,96719,695],{"class":457},[398,96721,780],{"class":408},[398,96723,93693],{"class":5493},[398,96725,454],{"class":404},[398,96727,412],{"class":457},[398,96729,415],{"class":408},[398,96731,96732],{"class":400,"line":317},[398,96733,96734],{"class":467},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22275,96736,96738],{"id":96737},"_2662-法2identity","2.6.6.2 法2：identity()",[389,96740,96742],{"className":30571,"code":96741,"language":30573,"meta":316,"style":316},"#identity()\nnp.identity(5,dtype=int)\n",[395,96743,96744,96749],{"__ignoreMap":316},[398,96745,96746],{"class":400,"line":401},[398,96747,96748],{"class":467},"#identity()\n",[398,96750,96751,96754,96756,96758,96760,96762,96764],{"class":400,"line":317},[398,96752,96753],{"class":408},"np.identity(",[398,96755,721],{"class":457},[398,96757,780],{"class":408},[398,96759,93693],{"class":5493},[398,96761,454],{"class":404},[398,96763,412],{"class":457},[398,96765,415],{"class":408},[19,96767,96768],{},"两个函数是有区别的",[19,96770,96771],{},[1738,96772],{"alt":316,"src":96773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,96775,96776],{},[1738,96777],{"alt":316,"src":96778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[389,96780,96782],{"className":30571,"code":96781,"language":30573,"meta":316,"style":316},"# 创建一个 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",[395,96783,96784,96789,96801,96806,96811,96816,96821,96825,96830,96850,96854,96859,96864],{"__ignoreMap":316},[398,96785,96786],{"class":400,"line":401},[398,96787,96788],{"class":467},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[398,96790,96791,96793,96795,96797,96799],{"class":400,"line":317},[398,96792,96717],{"class":408},[398,96794,480],{"class":457},[398,96796,12712],{"class":408},[398,96798,695],{"class":457},[398,96800,415],{"class":408},[398,96802,96803],{"class":400,"line":320},[398,96804,96805],{"class":467},"# 输出:\n",[398,96807,96808],{"class":400,"line":1470},[398,96809,96810],{"class":467},"# [[1. 0. 0. 0.]\n",[398,96812,96813],{"class":400,"line":1476},[398,96814,96815],{"class":467},"#  [0. 1. 0. 0.]\n",[398,96817,96818],{"class":400,"line":1490},[398,96819,96820],{"class":467},"#  [0. 0. 1. 0.]]\n",[398,96822,96823],{"class":400,"line":1496},[398,96824,2676],{"emptyLinePlaceholder":328},[398,96826,96827],{"class":400,"line":1587},[398,96828,96829],{"class":467},"# 对角线向上偏移1\n",[398,96831,96832,96834,96836,96838,96840,96842,96844,96846,96848],{"class":400,"line":1593},[398,96833,96717],{"class":408},[398,96835,480],{"class":457},[398,96837,12712],{"class":408},[398,96839,695],{"class":457},[398,96841,12712],{"class":408},[398,96843,895],{"class":5493},[398,96845,454],{"class":404},[398,96847,619],{"class":457},[398,96849,415],{"class":408},[398,96851,96852],{"class":400,"line":1605},[398,96853,96805],{"class":467},[398,96855,96856],{"class":400,"line":1888},[398,96857,96858],{"class":467},"# [[0. 1. 0. 0.]\n",[398,96860,96861],{"class":400,"line":1893},[398,96862,96863],{"class":467},"#  [0. 0. 1. 0.]\n",[398,96865,96866],{"class":400,"line":1899},[398,96867,96868],{"class":467},"#  [0. 0. 0. 1.]]\n",[14,96870,96872],{"id":96871},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[389,96874,96876],{"className":30571,"code":96875,"language":30573,"meta":316,"style":316},"#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",[395,96877,96878,96883,96887,96892,96897,96902,96907,96912,96917,96922,96927],{"__ignoreMap":316},[398,96879,96880],{"class":400,"line":401},[398,96881,96882],{"class":467},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[398,96884,96885],{"class":400,"line":317},[398,96886,95891],{"class":513},[398,96888,96889],{"class":400,"line":320},[398,96890,96891],{"class":513},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[398,96893,96894],{"class":400,"line":1470},[398,96895,96896],{"class":513},"参数介绍：\n",[398,96898,96899],{"class":400,"line":1476},[398,96900,96901],{"class":513},"start：序列的起始值\n",[398,96903,96904],{"class":400,"line":1490},[398,96905,96906],{"class":513},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[398,96908,96909],{"class":400,"line":1496},[398,96910,96911],{"class":513},"num：要生长的等步长的样本数量，默认为50\n",[398,96913,96914],{"class":400,"line":1587},[398,96915,96916],{"class":513},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[398,96918,96919],{"class":400,"line":1593},[398,96920,96921],{"class":513},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[398,96923,96924],{"class":400,"line":1605},[398,96925,96926],{"class":513},"dtype：ndarry的数据类型\n",[398,96928,96929],{"class":400,"line":1888},[398,96930,95891],{"class":513},[19,96932,96933],{},[1738,96934],{"alt":316,"src":96935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,96937,96938],{},"这里num=是可以省略的",[19,96940,96941],{},"也就是下方两行代码结果是一模一样的",[389,96943,96945],{"className":30571,"code":96944,"language":30573,"meta":316,"style":316},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[395,96946,96947,96964],{"__ignoreMap":316},[398,96948,96949,96952,96954,96956,96958,96960,96962],{"class":400,"line":401},[398,96950,96951],{"class":408},"np.linspace(",[398,96953,619],{"class":457},[398,96955,780],{"class":408},[398,96957,721],{"class":457},[398,96959,780],{"class":408},[398,96961,721],{"class":457},[398,96963,415],{"class":408},[398,96965,96966,96968,96970,96972,96974,96976,96978,96980,96982],{"class":400,"line":317},[398,96967,96951],{"class":408},[398,96969,619],{"class":457},[398,96971,780],{"class":408},[398,96973,721],{"class":457},[398,96975,780],{"class":408},[398,96977,1941],{"class":5493},[398,96979,454],{"class":404},[398,96981,721],{"class":457},[398,96983,415],{"class":408},[14,96985,96987],{"id":96986},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[389,96989,96991],{"className":30571,"code":96990,"language":30573,"meta":316,"style":316},"#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",[395,96992,96993,96998,97002,97007,97012,97017,97022,97026,97031,97036,97040],{"__ignoreMap":316},[398,96994,96995],{"class":400,"line":401},[398,96996,96997],{"class":467},"#logspace函数用于创建一个等比数列，格式如下：\n",[398,96999,97000],{"class":400,"line":317},[398,97001,95891],{"class":513},[398,97003,97004],{"class":400,"line":320},[398,97005,97006],{"class":513},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[398,97008,97009],{"class":400,"line":1470},[398,97010,97011],{"class":513},"参数为：\n",[398,97013,97014],{"class":400,"line":1476},[398,97015,97016],{"class":513},"start:序列的起始位置为：base**start\n",[398,97018,97019],{"class":400,"line":1490},[398,97020,97021],{"class":513},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[398,97023,97024],{"class":400,"line":1496},[398,97025,96911],{"class":513},[398,97027,97028],{"class":400,"line":1587},[398,97029,97030],{"class":513},"endpoint：是否包含 stop 这个值，默认是 True\n",[398,97032,97033],{"class":400,"line":1593},[398,97034,97035],{"class":513},"base：对数的底数，默认是 10（常见对数）\n",[398,97037,97038],{"class":400,"line":1605},[398,97039,96926],{"class":513},[398,97041,97042],{"class":400,"line":1888},[398,97043,95891],{"class":513},[19,97045,97046],{},[1738,97047],{"alt":316,"src":97048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,97050,97051],{},"logspace()函数中的num参数也是可以不写num=的",[19,97053,97054],{},"endpoint是不可以省略的",[5403,97056,97057],{},"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":316,"searchDepth":317,"depth":317,"links":97059},[97060,97064,97069,97073,97077,97078],{"id":95449,"depth":317,"text":95450,"children":97061},[97062,97063],{"id":95453,"depth":320,"text":95454},{"id":95526,"depth":320,"text":95527},{"id":95558,"depth":317,"text":95559,"children":97065},[97066,97067,97068],{"id":95562,"depth":320,"text":95563},{"id":95744,"depth":320,"text":95745},{"id":95822,"depth":320,"text":95823},{"id":95857,"depth":317,"text":95858,"children":97070},[97071,97072],{"id":95861,"depth":320,"text":95862},{"id":95918,"depth":320,"text":95919},{"id":96014,"depth":317,"text":96015,"children":97074},[97075,97076],{"id":96018,"depth":320,"text":96019},{"id":96030,"depth":320,"text":96031},{"id":96064,"depth":317,"text":96065},{"id":96101,"depth":317,"text":96102,"children":97079},[97080,97081,97082,97083,97084,97085,97086,97087],{"id":96105,"depth":320,"text":96106},{"id":96330,"depth":320,"text":96331},{"id":96337,"depth":320,"text":96338},{"id":96546,"depth":320,"text":96547},{"id":96566,"depth":320,"text":96567},{"id":96702,"depth":320,"text":96703},{"id":96871,"depth":320,"text":96872},{"id":96986,"depth":320,"text":96987},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95441,"description":23654},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":97094,"title":97095,"body":97096,"description":23654,"extension":326,"meta":97189,"navigation":328,"path":97190,"seo":97191,"stem":97192,"__hash__":97193},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":97097,"toc":97187},[97098,97101,97104,97107,97110,97113,97116,97119,97122,97125,97128,97131,97133,97136,97139,97144,97147,97150,97184],[10,97099,97095],{"id":97100},"_20魔法命令mprun",[19,97102,97103],{},"逐行分析数据内存的使用情况",[19,97105,97106],{},"语法格式：",[19,97108,97109],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,97111,97112],{},"分析结果列如下：",[19,97114,97115],{},"Line行号",[19,97117,97118],{},"Mem usage内存使用大小",[19,97120,97121],{},"increment内存增量",[19,97123,97124],{},"Line content代码内容",[19,97126,97127],{},"补充说明：",[19,97129,97130],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,97132,95396],{},[19,97134,97135],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,97137,97138],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,97140,97141],{},[1738,97142],{"alt":316,"src":97143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,97145,97146],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,97148,97149],{},"这时候需要重新加载模块",[389,97151,97153],{"className":30571,"code":97152,"language":30573,"meta":316,"style":316},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[395,97154,97155,97160,97167,97172],{"__ignoreMap":316},[398,97156,97157],{"class":400,"line":401},[398,97158,97159],{"class":467},"#重新加载模块\n",[398,97161,97162,97164],{"class":400,"line":317},[398,97163,30585],{"class":404},[398,97165,97166],{"class":408}," importlib\n",[398,97168,97169],{"class":400,"line":320},[398,97170,97171],{"class":408},"importlib.reload(mprun_test)\n",[398,97173,97174,97176,97179,97181],{"class":400,"line":1470},[398,97175,730],{"class":404},[398,97177,97178],{"class":408},"mprun ",[398,97180,934],{"class":404},[398,97182,97183],{"class":408},"f mprun_test.fun_test mprun_test.fun_test()\n",[5403,97185,97186],{},"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":316,"searchDepth":317,"depth":317,"links":97188},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":97095,"description":23654},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97195,"title":97196,"body":97197,"description":23654,"extension":326,"meta":97214,"navigation":328,"path":97215,"seo":97216,"stem":97217,"__hash__":97218},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97198,"toc":97212},[97199,97202,97207],[10,97200,97196],{"id":97201},"_3一维数组的索引和切片",[19,97203,97204],{},[1738,97205],{"alt":316,"src":97206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,97208,97209],{},[1738,97210],{"alt":316,"src":97211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":316,"searchDepth":317,"depth":317,"links":97213},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97196,"description":23654},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97220,"title":97221,"body":97222,"description":23654,"extension":326,"meta":97705,"navigation":328,"path":97706,"seo":97707,"stem":97708,"__hash__":97709},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97223,"toc":97703},[97224,97227,97230,97235,97268,97271,97309,97312,97346,97349,97454,97457,97494,97497,97598,97601,97652,97655,97697,97700],[10,97225,97221],{"id":97226},"_4二维数组的索引与切片",[19,97228,97229],{},"①获取指定单个元素",[19,97231,97232],{},[1738,97233],{"alt":316,"src":97234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[389,97236,97238],{"className":30571,"code":97237,"language":30573,"meta":316,"style":316},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[395,97239,97240,97245,97250,97255],{"__ignoreMap":316},[398,97241,97242],{"class":400,"line":401},[398,97243,97244],{"class":467},"#获取元素9\n",[398,97246,97247],{"class":400,"line":317},[398,97248,97249],{"class":467},"#先获取所在行，再获取所在列\n",[398,97251,97252],{"class":400,"line":320},[398,97253,97254],{"class":467},"#数组[行索引号，列索引号]\n",[398,97256,97257,97260,97262,97264,97266],{"class":400,"line":1470},[398,97258,97259],{"class":408},"a[",[398,97261,619],{"class":457},[398,97263,780],{"class":408},[398,97265,486],{"class":457},[398,97267,33439],{"class":408},[19,97269,97270],{},"②获取整行元素",[389,97272,97274],{"className":30571,"code":97273,"language":30573,"meta":316,"style":316},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[395,97275,97276,97281,97286,97294,97299],{"__ignoreMap":316},[398,97277,97278],{"class":400,"line":401},[398,97279,97280],{"class":467},"#获取整行 数组[行索引号]\n",[398,97282,97283],{"class":400,"line":317},[398,97284,97285],{"class":467},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[398,97287,97288,97290,97292],{"class":400,"line":320},[398,97289,97259],{"class":408},[398,97291,486],{"class":457},[398,97293,33439],{"class":408},[398,97295,97296],{"class":400,"line":1470},[398,97297,97298],{"class":467},"#也可以负索引获取一行\n",[398,97300,97301,97303,97305,97307],{"class":400,"line":1476},[398,97302,97259],{"class":408},[398,97304,934],{"class":404},[398,97306,619],{"class":457},[398,97308,33439],{"class":408},[19,97310,97311],{},"③获取整列元素",[389,97313,97315],{"className":30571,"code":97314,"language":30573,"meta":316,"style":316},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[395,97316,97317,97322,97331,97336],{"__ignoreMap":316},[398,97318,97319],{"class":400,"line":401},[398,97320,97321],{"class":467},"#获取整列 数组名[:,列索引]\n",[398,97323,97324,97327,97329],{"class":400,"line":317},[398,97325,97326],{"class":408},"a[:,",[398,97328,486],{"class":457},[398,97330,33439],{"class":408},[398,97332,97333],{"class":400,"line":320},[398,97334,97335],{"class":467},"#也可以负索引获取一列\n",[398,97337,97338,97340,97342,97344],{"class":400,"line":1470},[398,97339,97326],{"class":408},[398,97341,934],{"class":404},[398,97343,619],{"class":457},[398,97345,33439],{"class":408},[19,97347,97348],{},"④部分行部分列的元素",[389,97350,97352],{"className":30571,"code":97351,"language":30573,"meta":316,"style":316},"#部分行部分列 数组名[行切片，列切片]\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",[395,97353,97354,97359,97369,97373,97377,97382,97387,97391,97403,97407,97411,97416,97421,97426,97431,97435,97440],{"__ignoreMap":316},[398,97355,97356],{"class":400,"line":401},[398,97357,97358],{"class":467},"#部分行部分列 数组名[行切片，列切片]\n",[398,97360,97361,97364,97366],{"class":400,"line":317},[398,97362,97363],{"class":408},"a[:",[398,97365,486],{"class":457},[398,97367,97368],{"class":408},",:]\n",[398,97370,97371],{"class":400,"line":320},[398,97372,93757],{"class":467},[398,97374,97375],{"class":400,"line":1470},[398,97376,94121],{"class":513},[398,97378,97379],{"class":400,"line":1476},[398,97380,97381],{"class":513},"array([[ 1,  2,  3,  4,  5,  6],\n",[398,97383,97384],{"class":400,"line":1490},[398,97385,97386],{"class":513},"       [ 7,  8,  9, 10, 11, 12]])\n",[398,97388,97389],{"class":400,"line":1496},[398,97390,94121],{"class":513},[398,97392,97393,97395,97397,97399,97401],{"class":400,"line":1587},[398,97394,97326],{"class":408},[398,97396,619],{"class":457},[398,97398,1261],{"class":408},[398,97400,695],{"class":457},[398,97402,33439],{"class":408},[398,97404,97405],{"class":400,"line":1593},[398,97406,93757],{"class":467},[398,97408,97409],{"class":400,"line":1605},[398,97410,94121],{"class":513},[398,97412,97413],{"class":400,"line":1888},[398,97414,97415],{"class":513},"array([[ 2,  3,  4],\n",[398,97417,97418],{"class":400,"line":1893},[398,97419,97420],{"class":513},"       [ 8,  9, 10],\n",[398,97422,97423],{"class":400,"line":1899},[398,97424,97425],{"class":513},"       [14, 15, 16],\n",[398,97427,97428],{"class":400,"line":1904},[398,97429,97430],{"class":513},"       [20, 21, 22]])\n",[398,97432,97433],{"class":400,"line":1918},[398,97434,94121],{"class":513},[398,97436,97437],{"class":400,"line":1923},[398,97438,97439],{"class":467},"#对列行同时进行切片，使用了step参数\n",[398,97441,97442,97445,97447,97450,97452],{"class":400,"line":1929},[398,97443,97444],{"class":408},"a[::",[398,97446,486],{"class":457},[398,97448,97449],{"class":408},",::",[398,97451,486],{"class":457},[398,97453,33439],{"class":408},[19,97455,97456],{},"⑤同时获取两个元素",[389,97458,97460],{"className":30571,"code":97459,"language":30573,"meta":316,"style":316},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[395,97461,97462,97467,97472],{"__ignoreMap":316},[398,97463,97464],{"class":400,"line":401},[398,97465,97466],{"class":467},"#同时获取第三行第二列，第四行第一列\n",[398,97468,97469],{"class":400,"line":317},[398,97470,97471],{"class":467},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[398,97473,97474,97477,97479,97481,97483,97485,97487,97489,97491],{"class":400,"line":320},[398,97475,97476],{"class":408},"a[(",[398,97478,486],{"class":457},[398,97480,780],{"class":408},[398,97482,480],{"class":457},[398,97484,42440],{"class":408},[398,97486,619],{"class":457},[398,97488,780],{"class":408},[398,97490,593],{"class":457},[398,97492,97493],{"class":408},")]\n",[19,97495,97496],{},"⑥切片，对行进行反向获取",[389,97498,97500],{"className":30571,"code":97499,"language":30573,"meta":316,"style":316},"#切片 对所有行进行反向获取\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",[395,97501,97502,97507,97517,97521,97525,97530,97535,97540,97545,97549,97554,97570,97574,97579,97584,97589,97594],{"__ignoreMap":316},[398,97503,97504],{"class":400,"line":401},[398,97505,97506],{"class":467},"#切片 对所有行进行反向获取\n",[398,97508,97509,97511,97513,97515],{"class":400,"line":317},[398,97510,97444],{"class":408},[398,97512,934],{"class":404},[398,97514,619],{"class":457},[398,97516,33439],{"class":408},[398,97518,97519],{"class":400,"line":320},[398,97520,93757],{"class":467},[398,97522,97523],{"class":400,"line":1470},[398,97524,94121],{"class":513},[398,97526,97527],{"class":400,"line":1476},[398,97528,97529],{"class":513},"array([[19, 20, 21, 22, 23, 24],\n",[398,97531,97532],{"class":400,"line":1490},[398,97533,97534],{"class":513},"       [13, 14, 15, 16, 17, 18],\n",[398,97536,97537],{"class":400,"line":1496},[398,97538,97539],{"class":513},"       [ 7,  8,  9, 10, 11, 12],\n",[398,97541,97542],{"class":400,"line":1587},[398,97543,97544],{"class":513},"       [ 1,  2,  3,  4,  5,  6]])\n",[398,97546,97547],{"class":400,"line":1593},[398,97548,94121],{"class":513},[398,97550,97551],{"class":400,"line":1605},[398,97552,97553],{"class":467},"#对行列都进行反向切片获取\n",[398,97555,97556,97558,97560,97562,97564,97566,97568],{"class":400,"line":1888},[398,97557,97444],{"class":408},[398,97559,934],{"class":404},[398,97561,619],{"class":457},[398,97563,97449],{"class":408},[398,97565,934],{"class":404},[398,97567,619],{"class":457},[398,97569,33439],{"class":408},[398,97571,97572],{"class":400,"line":1893},[398,97573,94121],{"class":513},[398,97575,97576],{"class":400,"line":1899},[398,97577,97578],{"class":513},"array([[24, 23, 22, 21, 20, 19],\n",[398,97580,97581],{"class":400,"line":1904},[398,97582,97583],{"class":513},"       [18, 17, 16, 15, 14, 13],\n",[398,97585,97586],{"class":400,"line":1918},[398,97587,97588],{"class":513},"       [12, 11, 10,  9,  8,  7],\n",[398,97590,97591],{"class":400,"line":1923},[398,97592,97593],{"class":513},"       [ 6,  5,  4,  3,  2,  1]])\n",[398,97595,97596],{"class":400,"line":1929},[398,97597,94121],{"class":513},[19,97599,97600],{},"⑦修改元素",[389,97602,97604],{"className":30571,"code":97603,"language":30573,"meta":316,"style":316},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[395,97605,97606,97611,97629,97634],{"__ignoreMap":316},[398,97607,97608],{"class":400,"line":401},[398,97609,97610],{"class":467},"#获取前两行和前两列\n",[398,97612,97613,97616,97618,97620,97622,97625,97627],{"class":400,"line":317},[398,97614,97615],{"class":408},"sub_a",[398,97617,454],{"class":404},[398,97619,97363],{"class":408},[398,97621,486],{"class":457},[398,97623,97624],{"class":408},",:",[398,97626,486],{"class":457},[398,97628,33439],{"class":408},[398,97630,97631],{"class":400,"line":320},[398,97632,97633],{"class":467},"#修改sub_a第一个元素的值\n",[398,97635,97636,97639,97641,97643,97645,97647,97649],{"class":400,"line":1470},[398,97637,97638],{"class":408},"sub_a[",[398,97640,593],{"class":457},[398,97642,780],{"class":408},[398,97644,593],{"class":457},[398,97646,1342],{"class":408},[398,97648,454],{"class":404},[398,97650,97651],{"class":457},"100\n",[19,97653,97654],{},"⑧数组复制copy()",[389,97656,97658],{"className":30571,"code":97657,"language":30573,"meta":316,"style":316},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[395,97659,97660,97665,97675,97680],{"__ignoreMap":316},[398,97661,97662],{"class":400,"line":401},[398,97663,97664],{"class":467},"#数组复制\n",[398,97666,97667,97670,97672],{"class":400,"line":317},[398,97668,97669],{"class":408},"copy_a",[398,97671,454],{"class":404},[398,97673,97674],{"class":408},"np.copy(sub_a)\n",[398,97676,97677],{"class":400,"line":320},[398,97678,97679],{"class":467},"#修改copy_a后不影响原数组\n",[398,97681,97682,97685,97687,97689,97691,97693,97695],{"class":400,"line":1470},[398,97683,97684],{"class":408},"copy_a[",[398,97686,593],{"class":457},[398,97688,780],{"class":408},[398,97690,593],{"class":457},[398,97692,1342],{"class":408},[398,97694,454],{"class":404},[398,97696,97651],{"class":457},[19,97698,97699],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[5403,97701,97702],{},"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":316,"searchDepth":317,"depth":317,"links":97704},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97221,"description":23654},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97711,"title":97712,"body":97713,"description":23654,"extension":326,"meta":98205,"navigation":328,"path":98206,"seo":98207,"stem":98208,"__hash__":98209},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97714,"toc":98197},[97715,97718,97722,97725,97728,97781,97784,97809,97812,97831,97851,97854,97870,97874,97920,97924,97966,97970,97973,97976,97979,97982,97985,98047,98107,98111,98114,98171,98175,98180,98189,98194],[10,97716,97712],{"id":97717},"_5改变数组的维度",[343,97719,97721],{"id":97720},"_51-使用reshape","5.1 使用reshape()",[19,97723,97724],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,97726,97727],{},"①一维数组转换为二维数组",[389,97729,97731],{"className":30571,"code":97730,"language":30573,"meta":316,"style":316},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[395,97732,97733,97749,97754,97759,97764],{"__ignoreMap":316},[398,97734,97735,97737,97739,97741,97743,97745,97747],{"class":400,"line":401},[398,97736,640],{"class":408},[398,97738,454],{"class":404},[398,97740,93195],{"class":408},[398,97742,619],{"class":457},[398,97744,780],{"class":408},[398,97746,925],{"class":457},[398,97748,415],{"class":408},[398,97750,97751],{"class":400,"line":317},[398,97752,97753],{"class":467},"#将一维数组进行转换\n",[398,97755,97756],{"class":400,"line":320},[398,97757,97758],{"class":467},"#注意点：元素个数不可以变\n",[398,97760,97761],{"class":400,"line":1470},[398,97762,97763],{"class":467},"#转换维度要保持一致，不一致就异常！！！\n",[398,97765,97766,97768,97770,97773,97775,97777,97779],{"class":400,"line":1476},[398,97767,93499],{"class":408},[398,97769,454],{"class":404},[398,97771,97772],{"class":408},"a.reshape(",[398,97774,486],{"class":457},[398,97776,780],{"class":408},[398,97778,746],{"class":457},[398,97780,415],{"class":408},[19,97782,97783],{},"②一维数组转换为三维数组",[389,97785,97787],{"className":30571,"code":97786,"language":30573,"meta":316,"style":316},"aaa=a.reshape(2,3,2)\n",[395,97788,97789],{"__ignoreMap":316},[398,97790,97791,97793,97795,97797,97799,97801,97803,97805,97807],{"class":400,"line":401},[398,97792,95714],{"class":408},[398,97794,454],{"class":404},[398,97796,97772],{"class":408},[398,97798,486],{"class":457},[398,97800,780],{"class":408},[398,97802,480],{"class":457},[398,97804,780],{"class":408},[398,97806,486],{"class":457},[398,97808,415],{"class":408},[19,97810,97811],{},"③二维数组转化为一维数组",[389,97813,97815],{"className":30571,"code":97814,"language":30573,"meta":316,"style":316},"#知道元素个数：\naa.reshape(12)\n",[395,97816,97817,97822],{"__ignoreMap":316},[398,97818,97819],{"class":400,"line":401},[398,97820,97821],{"class":467},"#知道元素个数：\n",[398,97823,97824,97827,97829],{"class":400,"line":317},[398,97825,97826],{"class":408},"aa.reshape(",[398,97828,900],{"class":457},[398,97830,415],{"class":408},[389,97832,97834],{"className":30571,"code":97833,"language":30573,"meta":316,"style":316},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[395,97835,97836,97841],{"__ignoreMap":316},[398,97837,97838],{"class":400,"line":401},[398,97839,97840],{"class":467},"#不知道元素个数，参数传递-1\n",[398,97842,97843,97845,97847,97849],{"class":400,"line":317},[398,97844,97826],{"class":408},[398,97846,934],{"class":404},[398,97848,619],{"class":457},[398,97850,415],{"class":408},[19,97852,97853],{},"④三维数组转换为一维数组",[389,97855,97857],{"className":30571,"code":97856,"language":30573,"meta":316,"style":316},"aaa.reshape(-1)\n",[395,97858,97859],{"__ignoreMap":316},[398,97860,97861,97864,97866,97868],{"class":400,"line":401},[398,97862,97863],{"class":408},"aaa.reshape(",[398,97865,934],{"class":404},[398,97867,619],{"class":457},[398,97869,415],{"class":408},[343,97871,97873],{"id":97872},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[389,97875,97877],{"className":30571,"code":97876,"language":30573,"meta":316,"style":316},"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",[395,97878,97879,97906,97911,97915],{"__ignoreMap":316},[398,97880,97881,97883,97885,97887,97889,97891,97893,97895,97897,97899,97901,97903],{"class":400,"line":401},[398,97882,93499],{"class":408},[398,97884,454],{"class":404},[398,97886,93195],{"class":408},[398,97888,619],{"class":457},[398,97890,780],{"class":408},[398,97892,925],{"class":457},[398,97894,93200],{"class":408},[398,97896,486],{"class":457},[398,97898,780],{"class":408},[398,97900,746],{"class":457},[398,97902,831],{"class":408},[398,97904,97905],{"class":467},"#转换为2行6列的数组\n",[398,97907,97908],{"class":400,"line":317},[398,97909,97910],{"class":408},"aa.revel()\n",[398,97912,97913],{"class":400,"line":320},[398,97914,93757],{"class":467},[398,97916,97917],{"class":400,"line":1470},[398,97918,97919],{"class":467},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[343,97921,97923],{"id":97922},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[389,97925,97927],{"className":30571,"code":97926,"language":30573,"meta":316,"style":316},"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",[395,97928,97929,97953,97958,97962],{"__ignoreMap":316},[398,97930,97931,97933,97935,97937,97939,97941,97943,97945,97947,97949,97951],{"class":400,"line":401},[398,97932,93499],{"class":408},[398,97934,454],{"class":404},[398,97936,93195],{"class":408},[398,97938,619],{"class":457},[398,97940,780],{"class":408},[398,97942,925],{"class":457},[398,97944,93200],{"class":408},[398,97946,486],{"class":457},[398,97948,780],{"class":408},[398,97950,746],{"class":457},[398,97952,415],{"class":408},[398,97954,97955],{"class":400,"line":317},[398,97956,97957],{"class":408},"aa.flatten()\n",[398,97959,97960],{"class":400,"line":320},[398,97961,93757],{"class":467},[398,97963,97964],{"class":400,"line":1470},[398,97965,97919],{"class":467},[343,97967,97969],{"id":97968},"_54-使用resize","5.4 使用resize()",[19,97971,97972],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,97974,97975],{},"通过resize方法可以改变数组的维度",[19,97977,97978],{},"#resize修改数组维度",[19,97980,97981],{},"#以元组的形式指定形状",[19,97983,97984],{},"#改变的是原数组",[389,97986,97988],{"className":30571,"code":97987,"language":30573,"meta":316,"style":316},"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",[395,97989,97990,98006,98026,98039,98043],{"__ignoreMap":316},[398,97991,97992,97994,97996,97998,98000,98002,98004],{"class":400,"line":401},[398,97993,640],{"class":408},[398,97995,454],{"class":404},[398,97997,93195],{"class":408},[398,97999,619],{"class":457},[398,98001,780],{"class":408},[398,98003,925],{"class":457},[398,98005,415],{"class":408},[398,98007,98008,98011,98013,98015,98017,98019,98021,98023],{"class":400,"line":317},[398,98009,98010],{"class":408},"a.shape",[398,98012,454],{"class":404},[398,98014,409],{"class":408},[398,98016,486],{"class":457},[398,98018,780],{"class":408},[398,98020,746],{"class":457},[398,98022,831],{"class":408},[398,98024,98025],{"class":467},"#改变了原数组\n",[398,98027,98028,98030,98032,98035,98037],{"class":400,"line":320},[398,98029,640],{"class":408},[398,98031,454],{"class":404},[398,98033,98034],{"class":408},"resize((",[398,98036,900],{"class":457},[398,98038,30690],{"class":408},[398,98040,98041],{"class":400,"line":1470},[398,98042,93757],{"class":467},[398,98044,98045],{"class":400,"line":1476},[398,98046,97919],{"class":467},[389,98048,98050],{"className":30571,"code":98049,"language":30573,"meta":316,"style":316},"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",[395,98051,98052,98065,98069,98073,98078,98083,98088,98093,98098,98103],{"__ignoreMap":316},[398,98053,98054,98057,98059,98061,98063],{"class":400,"line":401},[398,98055,98056],{"class":408},"a.resize((",[398,98058,746],{"class":457},[398,98060,780],{"class":408},[398,98062,486],{"class":457},[398,98064,30690],{"class":408},[398,98066,98067],{"class":400,"line":317},[398,98068,93757],{"class":467},[398,98070,98071],{"class":400,"line":320},[398,98072,94121],{"class":513},[398,98074,98075],{"class":400,"line":1470},[398,98076,98077],{"class":513},"array([[ 1,  2],\n",[398,98079,98080],{"class":400,"line":1476},[398,98081,98082],{"class":513},"       [ 3,  4],\n",[398,98084,98085],{"class":400,"line":1490},[398,98086,98087],{"class":513},"       [ 5,  6],\n",[398,98089,98090],{"class":400,"line":1496},[398,98091,98092],{"class":513},"       [ 7,  8],\n",[398,98094,98095],{"class":400,"line":1587},[398,98096,98097],{"class":513},"       [ 9, 10],\n",[398,98099,98100],{"class":400,"line":1593},[398,98101,98102],{"class":513},"       [11, 12]])\n",[398,98104,98105],{"class":400,"line":1605},[398,98106,94121],{"class":513},[343,98108,98110],{"id":98109},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,98112,98113],{},"改变了原数组",[389,98115,98117],{"className":30571,"code":98116,"language":30573,"meta":316,"style":316},"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",[395,98118,98119,98135,98151,98155,98159,98163,98167],{"__ignoreMap":316},[398,98120,98121,98123,98125,98127,98129,98131,98133],{"class":400,"line":401},[398,98122,640],{"class":408},[398,98124,454],{"class":404},[398,98126,93195],{"class":408},[398,98128,619],{"class":457},[398,98130,780],{"class":408},[398,98132,925],{"class":457},[398,98134,415],{"class":408},[398,98136,98137,98139,98141,98143,98145,98147,98149],{"class":400,"line":317},[398,98138,98010],{"class":408},[398,98140,454],{"class":404},[398,98142,409],{"class":408},[398,98144,486],{"class":457},[398,98146,780],{"class":408},[398,98148,746],{"class":457},[398,98150,415],{"class":408},[398,98152,98153],{"class":400,"line":320},[398,98154,93757],{"class":467},[398,98156,98157],{"class":400,"line":1470},[398,98158,94121],{"class":513},[398,98160,98161],{"class":400,"line":1476},[398,98162,97381],{"class":513},[398,98164,98165],{"class":400,"line":1490},[398,98166,97386],{"class":513},[398,98168,98169],{"class":400,"line":1496},[398,98170,94121],{"class":513},[343,98172,98174],{"id":98173},"_56-重要比较","5.6 重要比较：",[19,98176,98177],{},[1738,98178],{"alt":316,"src":98179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,98181,98182,98183,98185,98186,98188],{},"口诀：NumPy 函数要么用 ",[395,98184,96156],{},"，要么用 ",[395,98187,31689],{},"，创建结构用 shape，造数据用 size",[19,98190,98191],{},[1738,98192],{"alt":316,"src":98193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[5403,98195,98196],{},"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":316,"searchDepth":317,"depth":317,"links":98198},[98199,98200,98201,98202,98203,98204],{"id":97720,"depth":317,"text":97721},{"id":97872,"depth":317,"text":97873},{"id":97922,"depth":317,"text":97923},{"id":97968,"depth":317,"text":97969},{"id":98109,"depth":317,"text":98110},{"id":98173,"depth":317,"text":98174},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97712,"description":23654},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98211,"title":98212,"body":98213,"description":23654,"extension":326,"meta":99285,"navigation":328,"path":99286,"seo":99287,"stem":99288,"__hash__":99289},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98214,"toc":99279},[98215,98218,98222,98225,98228,98231,98296,98299,98339,98342,98424,98427,98432,98454,98456,98461,98466,98469,98472,98627,98630,98832,98836,98839,98842,98910,98912,98917,98920,98923,99003,99007,99010,99012,99085,99087,99092,99094,99174,99178,99181,99184,99187,99190,99193,99196,99276],[10,98216,98212],{"id":98217},"_6数组的拼接",[343,98219,98221],{"id":98220},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,98223,98224],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,98226,98227],{},"函数内部传两个数列构成的数列或者元组",[19,98229,98230],{},"①一维数组的拼接",[389,98232,98234],{"className":30571,"code":98233,"language":30573,"meta":316,"style":316},"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",[395,98235,98236,98256,98276,98281,98286,98291],{"__ignoreMap":316},[398,98237,98238,98240,98242,98244,98246,98248,98250,98252,98254],{"class":400,"line":401},[398,98239,640],{"class":408},[398,98241,454],{"class":404},[398,98243,93217],{"class":408},[398,98245,619],{"class":457},[398,98247,780],{"class":408},[398,98249,486],{"class":457},[398,98251,780],{"class":408},[398,98253,480],{"class":457},[398,98255,4933],{"class":408},[398,98257,98258,98260,98262,98264,98266,98268,98270,98272,98274],{"class":400,"line":317},[398,98259,665],{"class":408},[398,98261,454],{"class":404},[398,98263,93217],{"class":408},[398,98265,695],{"class":457},[398,98267,780],{"class":408},[398,98269,721],{"class":457},[398,98271,780],{"class":408},[398,98273,746],{"class":457},[398,98275,4933],{"class":408},[398,98277,98278],{"class":400,"line":320},[398,98279,98280],{"class":467},"#调用concatenate进行数组拼接\n",[398,98282,98283],{"class":400,"line":1470},[398,98284,98285],{"class":408},"np.concatenate((a,b))\n",[398,98287,98288],{"class":400,"line":1476},[398,98289,98290],{"class":467},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[398,98292,98293],{"class":400,"line":1490},[398,98294,98295],{"class":467},"#np.concatenate([a,b])\n",[19,98297,98298],{},"②一维多个数组拼接",[389,98300,98302],{"className":30571,"code":98301,"language":30573,"meta":316,"style":316},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[395,98303,98304,98309,98329,98334],{"__ignoreMap":316},[398,98305,98306],{"class":400,"line":401},[398,98307,98308],{"class":467},"#也可以多个数组进行拼接\n",[398,98310,98311,98313,98315,98317,98319,98321,98323,98325,98327],{"class":400,"line":317},[398,98312,690],{"class":408},[398,98314,454],{"class":404},[398,98316,93217],{"class":408},[398,98318,848],{"class":457},[398,98320,780],{"class":408},[398,98322,874],{"class":457},[398,98324,780],{"class":408},[398,98326,925],{"class":457},[398,98328,4933],{"class":408},[398,98330,98331],{"class":400,"line":320},[398,98332,98333],{"class":408},"c\n",[398,98335,98336],{"class":400,"line":1470},[398,98337,98338],{"class":408},"np.concatenate((a,b,c))\n",[19,98340,98341],{},"③二维数组拼接",[389,98343,98345],{"className":30571,"code":98344,"language":30573,"meta":316,"style":316},"#二维数组使用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",[395,98346,98347,98352,98376,98401,98406,98411],{"__ignoreMap":316},[398,98348,98349],{"class":400,"line":401},[398,98350,98351],{"class":467},"#二维数组使用concatenate进行拼接\n",[398,98353,98354,98356,98358,98360,98362,98364,98366,98368,98370,98372,98374],{"class":400,"line":317},[398,98355,93499],{"class":408},[398,98357,454],{"class":404},[398,98359,93195],{"class":408},[398,98361,619],{"class":457},[398,98363,780],{"class":408},[398,98365,925],{"class":457},[398,98367,93200],{"class":408},[398,98369,480],{"class":457},[398,98371,780],{"class":408},[398,98373,695],{"class":457},[398,98375,415],{"class":408},[398,98377,98378,98381,98383,98385,98387,98389,98391,98393,98395,98397,98399],{"class":400,"line":320},[398,98379,98380],{"class":408},"bb",[398,98382,454],{"class":404},[398,98384,93195],{"class":408},[398,98386,739],{"class":457},[398,98388,780],{"class":408},[398,98390,1044],{"class":457},[398,98392,93200],{"class":408},[398,98394,480],{"class":457},[398,98396,780],{"class":408},[398,98398,695],{"class":457},[398,98400,415],{"class":408},[398,98402,98403],{"class":400,"line":1470},[398,98404,98405],{"class":467},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[398,98407,98408],{"class":400,"line":1476},[398,98409,98410],{"class":467},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[398,98412,98413,98416,98418,98420,98422],{"class":400,"line":1490},[398,98414,98415],{"class":408},"np.concatenate((aa,bb),",[398,98417,47707],{"class":5493},[398,98419,454],{"class":404},[398,98421,593],{"class":457},[398,98423,415],{"class":408},[19,98425,98426],{},"结果：",[19,98428,98429],{},[1738,98430],{"alt":316,"src":98431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[389,98433,98435],{"className":30571,"code":98434,"language":30573,"meta":316,"style":316},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[395,98436,98437,98442],{"__ignoreMap":316},[398,98438,98439],{"class":400,"line":401},[398,98440,98441],{"class":467},"#指定axis为1进行拼接\n",[398,98443,98444,98446,98448,98450,98452],{"class":400,"line":317},[398,98445,98415],{"class":408},[398,98447,47707],{"class":5493},[398,98449,454],{"class":404},[398,98451,619],{"class":457},[398,98453,415],{"class":408},[19,98455,98426],{},[19,98457,98458],{},[1738,98459],{"alt":316,"src":98460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,98462,98463],{},[23,98464,98465],{},"二维数组总结：0竖着方向，1横着方向",[19,98467,98468],{},"④三维数组拼接",[19,98470,98471],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[389,98473,98475],{"className":30571,"code":98474,"language":30573,"meta":316,"style":316},"#两个三行六列\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",[395,98476,98477,98482,98510,98540,98545,98562,98567,98572,98577,98594,98599,98604,98609,98622],{"__ignoreMap":316},[398,98478,98479],{"class":400,"line":401},[398,98480,98481],{"class":467},"#两个三行六列\n",[398,98483,98484,98486,98488,98490,98492,98494,98496,98498,98500,98502,98504,98506,98508],{"class":400,"line":317},[398,98485,95714],{"class":408},[398,98487,454],{"class":404},[398,98489,93195],{"class":408},[398,98491,619],{"class":457},[398,98493,780],{"class":408},[398,98495,727],{"class":457},[398,98497,93200],{"class":408},[398,98499,486],{"class":457},[398,98501,780],{"class":408},[398,98503,480],{"class":457},[398,98505,780],{"class":408},[398,98507,746],{"class":457},[398,98509,415],{"class":408},[398,98511,98512,98515,98517,98519,98521,98523,98526,98528,98530,98532,98534,98536,98538],{"class":400,"line":320},[398,98513,98514],{"class":408},"bbb",[398,98516,454],{"class":404},[398,98518,93195],{"class":408},[398,98520,739],{"class":457},[398,98522,780],{"class":408},[398,98524,98525],{"class":457},"137",[398,98527,93200],{"class":408},[398,98529,486],{"class":457},[398,98531,780],{"class":408},[398,98533,480],{"class":457},[398,98535,780],{"class":408},[398,98537,746],{"class":457},[398,98539,415],{"class":408},[398,98541,98542],{"class":400,"line":1470},[398,98543,98544],{"class":467},"#axis=0\n",[398,98546,98547,98549,98551,98554,98556,98558,98560],{"class":400,"line":1476},[398,98548,1097],{"class":408},[398,98550,454],{"class":404},[398,98552,98553],{"class":408},"np.concatenate((aaa,bbb),",[398,98555,47707],{"class":5493},[398,98557,454],{"class":404},[398,98559,593],{"class":457},[398,98561,415],{"class":408},[398,98563,98564],{"class":400,"line":1490},[398,98565,98566],{"class":408},"s.shape\n",[398,98568,98569],{"class":400,"line":1496},[398,98570,98571],{"class":467},"#输出：(4,3,6)\n",[398,98573,98574],{"class":400,"line":1587},[398,98575,98576],{"class":467},"#axis=1\n",[398,98578,98579,98582,98584,98586,98588,98590,98592],{"class":400,"line":1593},[398,98580,98581],{"class":408},"ss",[398,98583,454],{"class":404},[398,98585,98553],{"class":408},[398,98587,47707],{"class":5493},[398,98589,454],{"class":404},[398,98591,619],{"class":457},[398,98593,415],{"class":408},[398,98595,98596],{"class":400,"line":1605},[398,98597,98598],{"class":408},"ss.shape\n",[398,98600,98601],{"class":400,"line":1888},[398,98602,98603],{"class":467},"#输出：(2,6,6)\n",[398,98605,98606],{"class":400,"line":1893},[398,98607,98608],{"class":467},"#axis=2\n",[398,98610,98611,98613,98615,98617,98619],{"class":400,"line":1899},[398,98612,98553],{"class":408},[398,98614,47707],{"class":5493},[398,98616,454],{"class":404},[398,98618,486],{"class":457},[398,98620,98621],{"class":408},").shape\n",[398,98623,98624],{"class":400,"line":1904},[398,98625,98626],{"class":467},"#输出：（2，3，12）\n",[19,98628,98629],{},"⑤四维数组拼接",[389,98631,98633],{"className":30571,"code":98632,"language":30573,"meta":316,"style":316},"#两个三行六列\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",[395,98634,98635,98639,98667,98695,98720,98746,98750,98763,98768,98772,98784,98789,98793,98805,98810,98815,98827],{"__ignoreMap":316},[398,98636,98637],{"class":400,"line":401},[398,98638,98481],{"class":467},[398,98640,98641,98643,98645,98647,98649,98651,98653,98655,98657,98659,98661,98663,98665],{"class":400,"line":317},[398,98642,95714],{"class":408},[398,98644,454],{"class":404},[398,98646,93195],{"class":408},[398,98648,619],{"class":457},[398,98650,780],{"class":408},[398,98652,727],{"class":457},[398,98654,93200],{"class":408},[398,98656,486],{"class":457},[398,98658,780],{"class":408},[398,98660,480],{"class":457},[398,98662,780],{"class":408},[398,98664,746],{"class":457},[398,98666,415],{"class":408},[398,98668,98669,98671,98673,98675,98677,98679,98681,98683,98685,98687,98689,98691,98693],{"class":400,"line":320},[398,98670,98514],{"class":408},[398,98672,454],{"class":404},[398,98674,93195],{"class":408},[398,98676,739],{"class":457},[398,98678,780],{"class":408},[398,98680,98525],{"class":457},[398,98682,93200],{"class":408},[398,98684,486],{"class":457},[398,98686,780],{"class":408},[398,98688,480],{"class":457},[398,98690,780],{"class":408},[398,98692,746],{"class":457},[398,98694,415],{"class":408},[398,98696,98697,98700,98702,98704,98706,98708,98710,98712,98714,98716,98718],{"class":400,"line":1470},[398,98698,98699],{"class":408},"aaaa",[398,98701,454],{"class":404},[398,98703,97863],{"class":408},[398,98705,486],{"class":457},[398,98707,780],{"class":408},[398,98709,480],{"class":457},[398,98711,780],{"class":408},[398,98713,480],{"class":457},[398,98715,780],{"class":408},[398,98717,486],{"class":457},[398,98719,415],{"class":408},[398,98721,98722,98725,98727,98730,98732,98734,98736,98738,98740,98742,98744],{"class":400,"line":1476},[398,98723,98724],{"class":408},"bbbb",[398,98726,454],{"class":404},[398,98728,98729],{"class":408},"bbb.reshape(",[398,98731,486],{"class":457},[398,98733,780],{"class":408},[398,98735,480],{"class":457},[398,98737,780],{"class":408},[398,98739,480],{"class":457},[398,98741,780],{"class":408},[398,98743,486],{"class":457},[398,98745,415],{"class":408},[398,98747,98748],{"class":400,"line":1490},[398,98749,98544],{"class":467},[398,98751,98752,98755,98757,98759,98761],{"class":400,"line":1496},[398,98753,98754],{"class":408},"np.concatenate((aaaa,bbbb),",[398,98756,47707],{"class":5493},[398,98758,454],{"class":404},[398,98760,593],{"class":457},[398,98762,98621],{"class":408},[398,98764,98765],{"class":400,"line":1587},[398,98766,98767],{"class":467},"#结果：（4，3，3，2）\n",[398,98769,98770],{"class":400,"line":1593},[398,98771,98576],{"class":467},[398,98773,98774,98776,98778,98780,98782],{"class":400,"line":1605},[398,98775,98754],{"class":408},[398,98777,47707],{"class":5493},[398,98779,454],{"class":404},[398,98781,619],{"class":457},[398,98783,98621],{"class":408},[398,98785,98786],{"class":400,"line":1888},[398,98787,98788],{"class":467},"#结果：（2，6，3，2）\n",[398,98790,98791],{"class":400,"line":1893},[398,98792,98608],{"class":467},[398,98794,98795,98797,98799,98801,98803],{"class":400,"line":1899},[398,98796,98754],{"class":408},[398,98798,47707],{"class":5493},[398,98800,454],{"class":404},[398,98802,486],{"class":457},[398,98804,98621],{"class":408},[398,98806,98807],{"class":400,"line":1904},[398,98808,98809],{"class":467},"#结果：（2，3，6，2）\n",[398,98811,98812],{"class":400,"line":1918},[398,98813,98814],{"class":467},"#axis=3\n",[398,98816,98817,98819,98821,98823,98825],{"class":400,"line":1923},[398,98818,98754],{"class":408},[398,98820,47707],{"class":5493},[398,98822,454],{"class":404},[398,98824,480],{"class":457},[398,98826,98621],{"class":408},[398,98828,98829],{"class":400,"line":1929},[398,98830,98831],{"class":467},"#结果：（2，3，3，4）\n",[343,98833,98835],{"id":98834},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,98837,98838],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,98840,98841],{},"①二维数组",[389,98843,98845],{"className":30571,"code":98844,"language":30573,"meta":316,"style":316},"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",[395,98846,98847,98871,98895,98900,98905],{"__ignoreMap":316},[398,98848,98849,98851,98853,98855,98857,98859,98861,98863,98865,98867,98869],{"class":400,"line":401},[398,98850,93499],{"class":408},[398,98852,454],{"class":404},[398,98854,93195],{"class":408},[398,98856,619],{"class":457},[398,98858,780],{"class":408},[398,98860,925],{"class":457},[398,98862,93200],{"class":408},[398,98864,480],{"class":457},[398,98866,780],{"class":408},[398,98868,695],{"class":457},[398,98870,415],{"class":408},[398,98872,98873,98875,98877,98879,98881,98883,98885,98887,98889,98891,98893],{"class":400,"line":317},[398,98874,98380],{"class":408},[398,98876,454],{"class":404},[398,98878,93195],{"class":408},[398,98880,739],{"class":457},[398,98882,780],{"class":408},[398,98884,1044],{"class":457},[398,98886,93200],{"class":408},[398,98888,480],{"class":457},[398,98890,780],{"class":408},[398,98892,695],{"class":457},[398,98894,415],{"class":408},[398,98896,98897],{"class":400,"line":320},[398,98898,98899],{"class":408},"np.hstack((aa,bb))\n",[398,98901,98902],{"class":400,"line":1470},[398,98903,98904],{"class":467},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[398,98906,98907],{"class":400,"line":1476},[398,98908,98909],{"class":467},"#np.hstack([aa,bb])\n",[19,98911,98426],{},[19,98913,98914],{},[1738,98915],{"alt":316,"src":98916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,98918,98919],{},"等效于concatenate()函数中axis=1时的情况",[19,98921,98922],{},"②三维数组",[389,98924,98926],{"className":30571,"code":98925,"language":30573,"meta":316,"style":316},"#两个三行六列\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",[395,98927,98928,98932,98960,98988,98993,98998],{"__ignoreMap":316},[398,98929,98930],{"class":400,"line":401},[398,98931,98481],{"class":467},[398,98933,98934,98936,98938,98940,98942,98944,98946,98948,98950,98952,98954,98956,98958],{"class":400,"line":317},[398,98935,95714],{"class":408},[398,98937,454],{"class":404},[398,98939,93195],{"class":408},[398,98941,619],{"class":457},[398,98943,780],{"class":408},[398,98945,727],{"class":457},[398,98947,93200],{"class":408},[398,98949,486],{"class":457},[398,98951,780],{"class":408},[398,98953,480],{"class":457},[398,98955,780],{"class":408},[398,98957,746],{"class":457},[398,98959,415],{"class":408},[398,98961,98962,98964,98966,98968,98970,98972,98974,98976,98978,98980,98982,98984,98986],{"class":400,"line":320},[398,98963,98514],{"class":408},[398,98965,454],{"class":404},[398,98967,93195],{"class":408},[398,98969,739],{"class":457},[398,98971,780],{"class":408},[398,98973,98525],{"class":457},[398,98975,93200],{"class":408},[398,98977,486],{"class":457},[398,98979,780],{"class":408},[398,98981,480],{"class":457},[398,98983,780],{"class":408},[398,98985,746],{"class":457},[398,98987,415],{"class":408},[398,98989,98990],{"class":400,"line":1470},[398,98991,98992],{"class":467},"#使用hstack\n",[398,98994,98995],{"class":400,"line":1476},[398,98996,98997],{"class":408},"np.hstack((aaa,bbb)).shape\n",[398,98999,99000],{"class":400,"line":1490},[398,99001,99002],{"class":467},"#输出：（2，6，6）\n",[343,99004,99006],{"id":99005},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,99008,99009],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,99011,98841],{},[389,99013,99015],{"className":30571,"code":99014,"language":30573,"meta":316,"style":316},"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",[395,99016,99017,99041,99065,99070,99075,99080],{"__ignoreMap":316},[398,99018,99019,99021,99023,99025,99027,99029,99031,99033,99035,99037,99039],{"class":400,"line":401},[398,99020,93499],{"class":408},[398,99022,454],{"class":404},[398,99024,93195],{"class":408},[398,99026,619],{"class":457},[398,99028,780],{"class":408},[398,99030,925],{"class":457},[398,99032,93200],{"class":408},[398,99034,480],{"class":457},[398,99036,780],{"class":408},[398,99038,695],{"class":457},[398,99040,415],{"class":408},[398,99042,99043,99045,99047,99049,99051,99053,99055,99057,99059,99061,99063],{"class":400,"line":317},[398,99044,98380],{"class":408},[398,99046,454],{"class":404},[398,99048,93195],{"class":408},[398,99050,739],{"class":457},[398,99052,780],{"class":408},[398,99054,1044],{"class":457},[398,99056,93200],{"class":408},[398,99058,480],{"class":457},[398,99060,780],{"class":408},[398,99062,695],{"class":457},[398,99064,415],{"class":408},[398,99066,99067],{"class":400,"line":320},[398,99068,99069],{"class":467},"#vstack 垂直方向进行堆叠\n",[398,99071,99072],{"class":400,"line":1470},[398,99073,99074],{"class":408},"np.vstack((aa,bb))\n",[398,99076,99077],{"class":400,"line":1476},[398,99078,99079],{"class":467},"#与hstack传的参数类似，等价于：\n",[398,99081,99082],{"class":400,"line":1490},[398,99083,99084],{"class":408},"np.vstack([aa,bb])\n",[19,99086,98426],{},[19,99088,99089],{},[1738,99090],{"alt":316,"src":99091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,99093,98922],{},[389,99095,99097],{"className":30571,"code":99096,"language":30573,"meta":316,"style":316},"#两个三行六列\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",[395,99098,99099,99103,99131,99159,99164,99169],{"__ignoreMap":316},[398,99100,99101],{"class":400,"line":401},[398,99102,98481],{"class":467},[398,99104,99105,99107,99109,99111,99113,99115,99117,99119,99121,99123,99125,99127,99129],{"class":400,"line":317},[398,99106,95714],{"class":408},[398,99108,454],{"class":404},[398,99110,93195],{"class":408},[398,99112,619],{"class":457},[398,99114,780],{"class":408},[398,99116,727],{"class":457},[398,99118,93200],{"class":408},[398,99120,486],{"class":457},[398,99122,780],{"class":408},[398,99124,480],{"class":457},[398,99126,780],{"class":408},[398,99128,746],{"class":457},[398,99130,415],{"class":408},[398,99132,99133,99135,99137,99139,99141,99143,99145,99147,99149,99151,99153,99155,99157],{"class":400,"line":320},[398,99134,98514],{"class":408},[398,99136,454],{"class":404},[398,99138,93195],{"class":408},[398,99140,739],{"class":457},[398,99142,780],{"class":408},[398,99144,98525],{"class":457},[398,99146,93200],{"class":408},[398,99148,486],{"class":457},[398,99150,780],{"class":408},[398,99152,480],{"class":457},[398,99154,780],{"class":408},[398,99156,746],{"class":457},[398,99158,415],{"class":408},[398,99160,99161],{"class":400,"line":1470},[398,99162,99163],{"class":467},"#使用vstack\n",[398,99165,99166],{"class":400,"line":1476},[398,99167,99168],{"class":408},"np.vstack((aaa,bbb)).shape\n",[398,99170,99171],{"class":400,"line":1490},[398,99172,99173],{"class":467},"#输出：（4，3，6）\n",[343,99175,99177],{"id":99176},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,99179,99180],{},"该方法是三维数组特有的方法",[19,99182,99183],{},"也就是说",[19,99185,99186],{},"一维数组拼接方法用：concatenate()",[19,99188,99189],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,99191,99192],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,99194,99195],{},"四维数组及多维数组只能用concatenate进行拼接",[389,99197,99199],{"className":30571,"code":99198,"language":30573,"meta":316,"style":316},"#两个三行六列\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",[395,99200,99201,99205,99233,99261,99266,99271],{"__ignoreMap":316},[398,99202,99203],{"class":400,"line":401},[398,99204,98481],{"class":467},[398,99206,99207,99209,99211,99213,99215,99217,99219,99221,99223,99225,99227,99229,99231],{"class":400,"line":317},[398,99208,95714],{"class":408},[398,99210,454],{"class":404},[398,99212,93195],{"class":408},[398,99214,619],{"class":457},[398,99216,780],{"class":408},[398,99218,727],{"class":457},[398,99220,93200],{"class":408},[398,99222,486],{"class":457},[398,99224,780],{"class":408},[398,99226,480],{"class":457},[398,99228,780],{"class":408},[398,99230,746],{"class":457},[398,99232,415],{"class":408},[398,99234,99235,99237,99239,99241,99243,99245,99247,99249,99251,99253,99255,99257,99259],{"class":400,"line":320},[398,99236,98514],{"class":408},[398,99238,454],{"class":404},[398,99240,93195],{"class":408},[398,99242,739],{"class":457},[398,99244,780],{"class":408},[398,99246,98525],{"class":457},[398,99248,93200],{"class":408},[398,99250,486],{"class":457},[398,99252,780],{"class":408},[398,99254,480],{"class":457},[398,99256,780],{"class":408},[398,99258,746],{"class":457},[398,99260,415],{"class":408},[398,99262,99263],{"class":400,"line":1470},[398,99264,99265],{"class":467},"#使用dstack\n",[398,99267,99268],{"class":400,"line":1476},[398,99269,99270],{"class":408},"np.dstack((aaa,bbb)).shape\n",[398,99272,99273],{"class":400,"line":1490},[398,99274,99275],{"class":467},"#结果：（2，3，12）\n",[5403,99277,99278],{},"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":316,"searchDepth":317,"depth":317,"links":99280},[99281,99282,99283,99284],{"id":98220,"depth":317,"text":98221},{"id":98834,"depth":317,"text":98835},{"id":99005,"depth":317,"text":99006},{"id":99176,"depth":317,"text":99177},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98212,"description":23654},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99291,"title":99292,"body":99293,"description":23654,"extension":326,"meta":99568,"navigation":328,"path":99569,"seo":99570,"stem":99571,"__hash__":99572},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99294,"toc":99566},[99295,99298,99301,99395,99398,99401,99404,99407,99410,99413,99416,99419,99563],[10,99296,99292],{"id":99297},"_7数组转置",[19,99299,99300],{},"使用transpose()函数",[389,99302,99304],{"className":30571,"code":99303,"language":30573,"meta":316,"style":316},"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",[395,99305,99306,99316,99340,99345,99350,99355,99360,99368,99372,99376,99381,99386,99391],{"__ignoreMap":316},[398,99307,99308,99310,99312,99314],{"class":400,"line":401},[398,99309,30585],{"class":404},[398,99311,31573],{"class":408},[398,99313,31576],{"class":404},[398,99315,31579],{"class":408},[398,99317,99318,99320,99322,99324,99326,99328,99330,99332,99334,99336,99338],{"class":400,"line":317},[398,99319,640],{"class":408},[398,99321,454],{"class":404},[398,99323,31910],{"class":408},[398,99325,619],{"class":457},[398,99327,780],{"class":408},[398,99329,925],{"class":457},[398,99331,93200],{"class":408},[398,99333,695],{"class":457},[398,99335,780],{"class":408},[398,99337,480],{"class":457},[398,99339,415],{"class":408},[398,99341,99342],{"class":400,"line":320},[398,99343,99344],{"class":467},"#二维数组转置\n",[398,99346,99347],{"class":400,"line":1470},[398,99348,99349],{"class":467},"#调用transpose()函数\n",[398,99351,99352],{"class":400,"line":1476},[398,99353,99354],{"class":408},"a.transpose()\n",[398,99356,99357],{"class":400,"line":1490},[398,99358,99359],{"class":467},"#对于二维数组也可以采用.T来实现\n",[398,99361,99362,99365],{"class":400,"line":1496},[398,99363,99364],{"class":408},"a.T",[398,99366,99367],{"class":467},"#与上述代码一样\n",[398,99369,99370],{"class":400,"line":1587},[398,99371,93757],{"class":467},[398,99373,99374],{"class":400,"line":1593},[398,99375,94121],{"class":513},[398,99377,99378],{"class":400,"line":1605},[398,99379,99380],{"class":513},"array([[ 1,  4,  7, 10],\n",[398,99382,99383],{"class":400,"line":1888},[398,99384,99385],{"class":513},"       [ 2,  5,  8, 11],\n",[398,99387,99388],{"class":400,"line":1893},[398,99389,99390],{"class":513},"       [ 3,  6,  9, 12]])\n",[398,99392,99393],{"class":400,"line":1899},[398,99394,94121],{"class":513},[19,99396,99397],{},"也可以使用np.transpose()的形式",[19,99399,99400],{},"#多维数组进行转置 np.transpose()",[19,99402,99403],{},"#对二维数组也可以使用np.transpose()进行转置",[19,99405,99406],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,99408,99409],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,99411,99412],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,99414,99415],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,99417,99418],{},"四维及以上的数组也是一样的道理",[389,99420,99422],{"className":30571,"code":99421,"language":30573,"meta":316,"style":316},"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",[395,99423,99424,99452,99457,99462,99467,99485,99490,99522,99527,99532,99537,99558],{"__ignoreMap":316},[398,99425,99426,99428,99430,99432,99434,99436,99438,99440,99442,99444,99446,99448,99450],{"class":400,"line":401},[398,99427,1222],{"class":408},[398,99429,454],{"class":404},[398,99431,93195],{"class":408},[398,99433,619],{"class":457},[398,99435,780],{"class":408},[398,99437,727],{"class":457},[398,99439,93200],{"class":408},[398,99441,480],{"class":457},[398,99443,780],{"class":408},[398,99445,746],{"class":457},[398,99447,780],{"class":408},[398,99449,486],{"class":457},[398,99451,415],{"class":408},[398,99453,99454],{"class":400,"line":317},[398,99455,99456],{"class":408},"x.shape\n",[398,99458,99459],{"class":400,"line":320},[398,99460,99461],{"class":467},"#结果：（3,6,2）\n",[398,99463,99464],{"class":400,"line":1470},[398,99465,99466],{"class":467},"#使用np.transpose()进行转置 变为(2,6,3)\n",[398,99468,99469,99472,99474,99476,99478,99480,99482],{"class":400,"line":1476},[398,99470,99471],{"class":408},"np.transpose(x,(",[398,99473,486],{"class":457},[398,99475,780],{"class":408},[398,99477,619],{"class":457},[398,99479,780],{"class":408},[398,99481,593],{"class":457},[398,99483,99484],{"class":408},")).shape\n",[398,99486,99487],{"class":400,"line":1490},[398,99488,99489],{"class":467},"#结果：(2,6,3)\n",[398,99491,99492,99494,99496,99498,99500,99502,99504,99506,99508,99510,99512,99514,99516,99518,99520],{"class":400,"line":1496},[398,99493,98699],{"class":408},[398,99495,454],{"class":404},[398,99497,93195],{"class":408},[398,99499,619],{"class":457},[398,99501,780],{"class":408},[398,99503,727],{"class":457},[398,99505,93200],{"class":408},[398,99507,480],{"class":457},[398,99509,780],{"class":408},[398,99511,486],{"class":457},[398,99513,780],{"class":408},[398,99515,619],{"class":457},[398,99517,780],{"class":408},[398,99519,746],{"class":457},[398,99521,415],{"class":408},[398,99523,99524],{"class":400,"line":1587},[398,99525,99526],{"class":408},"aaaa.shape\n",[398,99528,99529],{"class":400,"line":1593},[398,99530,99531],{"class":467},"#结果：（3，2，1，6）\n",[398,99533,99534],{"class":400,"line":1605},[398,99535,99536],{"class":467},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[398,99538,99539,99542,99544,99546,99548,99550,99552,99554,99556],{"class":400,"line":1888},[398,99540,99541],{"class":408},"np.transpose(aaaa,(",[398,99543,619],{"class":457},[398,99545,780],{"class":408},[398,99547,486],{"class":457},[398,99549,780],{"class":408},[398,99551,593],{"class":457},[398,99553,780],{"class":408},[398,99555,480],{"class":457},[398,99557,99484],{"class":408},[398,99559,99560],{"class":400,"line":1893},[398,99561,99562],{"class":467},"#结果：(2,1,3,6)\n",[5403,99564,99565],{},"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":316,"searchDepth":317,"depth":317,"links":99567},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99292,"description":23654},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99574,"title":99575,"body":99576,"description":23654,"extension":326,"meta":100310,"navigation":328,"path":100311,"seo":100312,"stem":100313,"__hash__":100314},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99577,"toc":100308},[99578,99581,99584,99587,99590,99593,99596,99599,99602,99711,99714,99717,100305],[10,99579,99575],{"id":99580},"_8数组分割",[19,99582,99583],{},"split分割",[19,99585,99586],{},"numpy.split(ary,indics_or_sections,axis)",[19,99588,99589],{},"解释：",[19,99591,99592],{},"ary:被分割的数组",[19,99594,99595],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,99597,99598],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,99600,99601],{},"①一维数组的分割",[389,99603,99605],{"className":30571,"code":99604,"language":30573,"meta":316,"style":316},"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",[395,99606,99607,99623,99628,99637,99641,99646,99654,99658,99663,99668,99681,99685,99690,99702,99706],{"__ignoreMap":316},[398,99608,99609,99611,99613,99615,99617,99619,99621],{"class":400,"line":401},[398,99610,640],{"class":408},[398,99612,454],{"class":404},[398,99614,93195],{"class":408},[398,99616,619],{"class":457},[398,99618,780],{"class":408},[398,99620,822],{"class":457},[398,99622,415],{"class":408},[398,99624,99625],{"class":400,"line":317},[398,99626,99627],{"class":467},"#如果传入整数，必须能够平分，否则会报错\n",[398,99629,99630,99633,99635],{"class":400,"line":320},[398,99631,99632],{"class":408},"np.split(a,",[398,99634,486],{"class":457},[398,99636,415],{"class":408},[398,99638,99639],{"class":400,"line":1470},[398,99640,93757],{"class":467},[398,99642,99643],{"class":400,"line":1476},[398,99644,99645],{"class":467},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[398,99647,99648,99650,99652],{"class":400,"line":1490},[398,99649,99632],{"class":408},[398,99651,695],{"class":457},[398,99653,415],{"class":408},[398,99655,99656],{"class":400,"line":1496},[398,99657,93757],{"class":467},[398,99659,99660],{"class":400,"line":1587},[398,99661,99662],{"class":467},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[398,99664,99665],{"class":400,"line":1593},[398,99666,99667],{"class":467},"#传入数组\n",[398,99669,99670,99673,99675,99677,99679],{"class":400,"line":1605},[398,99671,99672],{"class":408},"np.split(a,[",[398,99674,480],{"class":457},[398,99676,780],{"class":408},[398,99678,721],{"class":457},[398,99680,4933],{"class":408},[398,99682,99683],{"class":400,"line":1888},[398,99684,93757],{"class":467},[398,99686,99687],{"class":400,"line":1893},[398,99688,99689],{"class":467},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[398,99691,99692,99694,99696,99698,99700],{"class":400,"line":1899},[398,99693,99672],{"class":408},[398,99695,721],{"class":457},[398,99697,780],{"class":408},[398,99699,771],{"class":457},[398,99701,4933],{"class":408},[398,99703,99704],{"class":400,"line":1904},[398,99705,93757],{"class":467},[398,99707,99708],{"class":400,"line":1918},[398,99709,99710],{"class":467},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,99712,99713],{},"②二维数组的分割",[19,99715,99716],{},"使用split()",[389,99718,99720],{"className":30571,"code":99719,"language":30573,"meta":316,"style":316},"#二维数组分割\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",[395,99721,99722,99727,99751,99756,99765,99769,99773,99778,99783,99788,99793,99798,99803,99808,99812,99825,99829,99833,99837,99841,99845,99850,99855,99860,99864,99869,99885,99889,99893,99898,99903,99908,99913,99918,99923,99928,99933,99938,99943,99948,99953,99958,99963,99968,99973,99978,99983,99987,99991,100011,100015,100019,100024,100029,100034,100039,100044,100049,100054,100059,100064,100069,100074,100079,100084,100089,100094,100099,100104,100109,100113,100118,100127,100131,100135,100139,100143,100147,100151,100155,100159,100163,100172,100176,100180,100184,100188,100192,100196,100200,100204,100208,100212,100216,100220,100224,100228,100232,100236,100240,100244,100248,100252,100256,100269,100273,100277,100281,100285,100289,100293,100297,100301],{"__ignoreMap":316},[398,99723,99724],{"class":400,"line":401},[398,99725,99726],{"class":467},"#二维数组分割\n",[398,99728,99729,99731,99733,99735,99737,99739,99741,99743,99745,99747,99749],{"class":400,"line":317},[398,99730,93499],{"class":408},[398,99732,454],{"class":404},[398,99734,93195],{"class":408},[398,99736,619],{"class":457},[398,99738,780],{"class":408},[398,99740,727],{"class":457},[398,99742,93200],{"class":408},[398,99744,746],{"class":457},[398,99746,780],{"class":408},[398,99748,746],{"class":457},[398,99750,415],{"class":408},[398,99752,99753],{"class":400,"line":320},[398,99754,99755],{"class":467},"#默认axis=0  传入整数平均分,按行来的\n",[398,99757,99758,99761,99763],{"class":400,"line":1470},[398,99759,99760],{"class":408},"np.split(aa,",[398,99762,480],{"class":457},[398,99764,415],{"class":408},[398,99766,99767],{"class":400,"line":1476},[398,99768,95957],{"class":467},[398,99770,99771],{"class":400,"line":1490},[398,99772,94121],{"class":513},[398,99774,99775],{"class":400,"line":1496},[398,99776,99777],{"class":513},"[array([[ 1,  2,  3,  4,  5,  6],\n",[398,99779,99780],{"class":400,"line":1587},[398,99781,99782],{"class":513},"        [ 7,  8,  9, 10, 11, 12]]),\n",[398,99784,99785],{"class":400,"line":1593},[398,99786,99787],{"class":513}," array([[13, 14, 15, 16, 17, 18],\n",[398,99789,99790],{"class":400,"line":1605},[398,99791,99792],{"class":513},"        [19, 20, 21, 22, 23, 24]]),\n",[398,99794,99795],{"class":400,"line":1888},[398,99796,99797],{"class":513}," array([[25, 26, 27, 28, 29, 30],\n",[398,99799,99800],{"class":400,"line":1893},[398,99801,99802],{"class":513},"        [31, 32, 33, 34, 35, 36]])]\n",[398,99804,99805],{"class":400,"line":1899},[398,99806,99807],{"class":513}," '''\n",[398,99809,99810],{"class":400,"line":1904},[398,99811,99667],{"class":467},[398,99813,99814,99817,99819,99821,99823],{"class":400,"line":1918},[398,99815,99816],{"class":408},"np.split(aa,[",[398,99818,486],{"class":457},[398,99820,780],{"class":408},[398,99822,721],{"class":457},[398,99824,4933],{"class":408},[398,99826,99827],{"class":400,"line":1923},[398,99828,95957],{"class":467},[398,99830,99831],{"class":400,"line":1929},[398,99832,94121],{"class":513},[398,99834,99835],{"class":400,"line":1950},[398,99836,99777],{"class":513},[398,99838,99839],{"class":400,"line":1955},[398,99840,99782],{"class":513},[398,99842,99843],{"class":400,"line":1969},[398,99844,99787],{"class":513},[398,99846,99847],{"class":400,"line":1974},[398,99848,99849],{"class":513},"        [19, 20, 21, 22, 23, 24],\n",[398,99851,99852],{"class":400,"line":2003},[398,99853,99854],{"class":513},"        [25, 26, 27, 28, 29, 30]]),\n",[398,99856,99857],{"class":400,"line":2008},[398,99858,99859],{"class":513}," array([[31, 32, 33, 34, 35, 36]])]\n",[398,99861,99862],{"class":400,"line":2025},[398,99863,94121],{"class":513},[398,99865,99866],{"class":400,"line":2030},[398,99867,99868],{"class":467},"#axis=1 按照列来分\n",[398,99870,99871,99873,99875,99877,99879,99881,99883],{"class":400,"line":2035},[398,99872,99760],{"class":408},[398,99874,480],{"class":457},[398,99876,780],{"class":408},[398,99878,47707],{"class":5493},[398,99880,454],{"class":404},[398,99882,619],{"class":457},[398,99884,415],{"class":408},[398,99886,99887],{"class":400,"line":2040},[398,99888,95957],{"class":467},[398,99890,99891],{"class":400,"line":2054},[398,99892,94121],{"class":513},[398,99894,99895],{"class":400,"line":2059},[398,99896,99897],{"class":513},"[array([[ 1,  2],\n",[398,99899,99900],{"class":400,"line":2853},[398,99901,99902],{"class":513},"        [ 7,  8],\n",[398,99904,99905],{"class":400,"line":2867},[398,99906,99907],{"class":513},"        [13, 14],\n",[398,99909,99910],{"class":400,"line":2875},[398,99911,99912],{"class":513},"        [19, 20],\n",[398,99914,99915],{"class":400,"line":2880},[398,99916,99917],{"class":513},"        [25, 26],\n",[398,99919,99920],{"class":400,"line":2886},[398,99921,99922],{"class":513},"        [31, 32]]),\n",[398,99924,99925],{"class":400,"line":2892},[398,99926,99927],{"class":513}," array([[ 3,  4],\n",[398,99929,99930],{"class":400,"line":2897},[398,99931,99932],{"class":513},"        [ 9, 10],\n",[398,99934,99935],{"class":400,"line":8225},[398,99936,99937],{"class":513},"        [15, 16],\n",[398,99939,99940],{"class":400,"line":8249},[398,99941,99942],{"class":513},"        [21, 22],\n",[398,99944,99945],{"class":400,"line":8254},[398,99946,99947],{"class":513},"        [27, 28],\n",[398,99949,99950],{"class":400,"line":8260},[398,99951,99952],{"class":513},"        [33, 34]]),\n",[398,99954,99955],{"class":400,"line":8287},[398,99956,99957],{"class":513}," array([[ 5,  6],\n",[398,99959,99960],{"class":400,"line":8292},[398,99961,99962],{"class":513},"        [11, 12],\n",[398,99964,99965],{"class":400,"line":8298},[398,99966,99967],{"class":513},"        [17, 18],\n",[398,99969,99970],{"class":400,"line":8310},[398,99971,99972],{"class":513},"        [23, 24],\n",[398,99974,99975],{"class":400,"line":8322},[398,99976,99977],{"class":513},"        [29, 30],\n",[398,99979,99980],{"class":400,"line":8334},[398,99981,99982],{"class":513},"        [35, 36]])]\n",[398,99984,99985],{"class":400,"line":9993},[398,99986,99807],{"class":513},[398,99988,99989],{"class":400,"line":10018},[398,99990,99667],{"class":467},[398,99992,99993,99995,99997,99999,100001,100003,100005,100007,100009],{"class":400,"line":10041},[398,99994,99816],{"class":408},[398,99996,619],{"class":457},[398,99998,780],{"class":408},[398,100000,486],{"class":457},[398,100002,41802],{"class":408},[398,100004,47707],{"class":5493},[398,100006,454],{"class":404},[398,100008,619],{"class":457},[398,100010,415],{"class":408},[398,100012,100013],{"class":400,"line":10065},[398,100014,93757],{"class":467},[398,100016,100017],{"class":400,"line":10070},[398,100018,94121],{"class":513},[398,100020,100021],{"class":400,"line":10075},[398,100022,100023],{"class":513},"[array([[ 1],\n",[398,100025,100026],{"class":400,"line":10080},[398,100027,100028],{"class":513},"        [ 7],\n",[398,100030,100031],{"class":400,"line":10089},[398,100032,100033],{"class":513},"        [13],\n",[398,100035,100036],{"class":400,"line":10094},[398,100037,100038],{"class":513},"        [19],\n",[398,100040,100041],{"class":400,"line":10100},[398,100042,100043],{"class":513},"        [25],\n",[398,100045,100046],{"class":400,"line":10121},[398,100047,100048],{"class":513},"        [31]]),\n",[398,100050,100051],{"class":400,"line":10127},[398,100052,100053],{"class":513}," array([[ 2],\n",[398,100055,100056],{"class":400,"line":10141},[398,100057,100058],{"class":513},"        [ 8],\n",[398,100060,100061],{"class":400,"line":10147},[398,100062,100063],{"class":513},"        [14],\n",[398,100065,100066],{"class":400,"line":10174},[398,100067,100068],{"class":513},"        [20],\n",[398,100070,100071],{"class":400,"line":10183},[398,100072,100073],{"class":513},"        [26],\n",[398,100075,100076],{"class":400,"line":10189},[398,100077,100078],{"class":513},"        [32]]),\n",[398,100080,100081],{"class":400,"line":10197},[398,100082,100083],{"class":513}," array([[ 3,  4,  5,  6],\n",[398,100085,100086],{"class":400,"line":10202},[398,100087,100088],{"class":513},"        [ 9, 10, 11, 12],\n",[398,100090,100091],{"class":400,"line":16881},[398,100092,100093],{"class":513},"        [15, 16, 17, 18],\n",[398,100095,100096],{"class":400,"line":16887},[398,100097,100098],{"class":513},"        [21, 22, 23, 24],\n",[398,100100,100101],{"class":400,"line":16910},[398,100102,100103],{"class":513},"        [27, 28, 29, 30],\n",[398,100105,100106],{"class":400,"line":16916},[398,100107,100108],{"class":513},"        [33, 34, 35, 36]])]\n",[398,100110,100111],{"class":400,"line":16939},[398,100112,94121],{"class":513},[398,100114,100115],{"class":400,"line":16953},[398,100116,100117],{"class":467},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[398,100119,100120,100123,100125],{"class":400,"line":16973},[398,100121,100122],{"class":408},"np.vsplit(aa,",[398,100124,480],{"class":457},[398,100126,415],{"class":408},[398,100128,100129],{"class":400,"line":16979},[398,100130,93757],{"class":467},[398,100132,100133],{"class":400,"line":16990},[398,100134,94121],{"class":513},[398,100136,100137],{"class":400,"line":17013},[398,100138,99777],{"class":513},[398,100140,100141],{"class":400,"line":17035},[398,100142,99782],{"class":513},[398,100144,100145],{"class":400,"line":17040},[398,100146,99787],{"class":513},[398,100148,100149],{"class":400,"line":17046},[398,100150,99792],{"class":513},[398,100152,100153],{"class":400,"line":17060},[398,100154,99797],{"class":513},[398,100156,100157],{"class":400,"line":17073},[398,100158,99802],{"class":513},[398,100160,100161],{"class":400,"line":17078},[398,100162,94121],{"class":513},[398,100164,100165,100168,100170],{"class":400,"line":17092},[398,100166,100167],{"class":408},"np.hsplit(aa,",[398,100169,480],{"class":457},[398,100171,415],{"class":408},[398,100173,100174],{"class":400,"line":17097},[398,100175,93757],{"class":467},[398,100177,100178],{"class":400,"line":17103},[398,100179,94121],{"class":513},[398,100181,100182],{"class":400,"line":17108},[398,100183,99897],{"class":513},[398,100185,100186],{"class":400,"line":17122},[398,100187,99902],{"class":513},[398,100189,100190],{"class":400,"line":17127},[398,100191,99907],{"class":513},[398,100193,100194],{"class":400,"line":17132},[398,100195,99912],{"class":513},[398,100197,100198],{"class":400,"line":17146},[398,100199,99917],{"class":513},[398,100201,100202],{"class":400,"line":17158},[398,100203,99922],{"class":513},[398,100205,100206],{"class":400,"line":17163},[398,100207,99927],{"class":513},[398,100209,100210],{"class":400,"line":17176},[398,100211,99932],{"class":513},[398,100213,100214],{"class":400,"line":17181},[398,100215,99937],{"class":513},[398,100217,100218],{"class":400,"line":17186},[398,100219,99942],{"class":513},[398,100221,100222],{"class":400,"line":17191},[398,100223,99947],{"class":513},[398,100225,100226],{"class":400,"line":17204},[398,100227,99952],{"class":513},[398,100229,100230],{"class":400,"line":17209},[398,100231,99957],{"class":513},[398,100233,100234],{"class":400,"line":32826},[398,100235,99962],{"class":513},[398,100237,100238],{"class":400,"line":32832},[398,100239,99967],{"class":513},[398,100241,100242],{"class":400,"line":32838},[398,100243,99972],{"class":513},[398,100245,100246],{"class":400,"line":32844},[398,100247,99977],{"class":513},[398,100249,100250],{"class":400,"line":32850},[398,100251,99982],{"class":513},[398,100253,100254],{"class":400,"line":32861},[398,100255,94121],{"class":513},[398,100257,100258,100261,100263,100265,100267],{"class":400,"line":32867},[398,100259,100260],{"class":408},"np.vsplit(aa,[",[398,100262,486],{"class":457},[398,100264,780],{"class":408},[398,100266,721],{"class":457},[398,100268,4933],{"class":408},[398,100270,100271],{"class":400,"line":32887},[398,100272,93757],{"class":467},[398,100274,100275],{"class":400,"line":32893},[398,100276,94121],{"class":513},[398,100278,100279],{"class":400,"line":32904},[398,100280,99777],{"class":513},[398,100282,100283],{"class":400,"line":32910},[398,100284,99782],{"class":513},[398,100286,100287],{"class":400,"line":32916},[398,100288,99787],{"class":513},[398,100290,100291],{"class":400,"line":32922},[398,100292,99849],{"class":513},[398,100294,100295],{"class":400,"line":32928},[398,100296,99854],{"class":513},[398,100298,100299],{"class":400,"line":32934},[398,100300,99859],{"class":513},[398,100302,100303],{"class":400,"line":32940},[398,100304,99807],{"class":513},[5403,100306,100307],{},"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":316,"searchDepth":317,"depth":317,"links":100309},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99575,"description":23654},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100316,"title":100317,"body":100318,"description":23654,"extension":326,"meta":100812,"navigation":328,"path":100813,"seo":100814,"stem":100815,"__hash__":100816},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100319,"toc":100803},[100320,100323,100326,100351,100355,100414,100466,100470,100472,100508,100562,100564,100602,100673,100677,100682,100686,100689,100722,100725,100729,100732,100735,100738,100741,100746,100750,100753,100756,100759,100762,100767,100771,100776,100779,100800],[10,100321,100317],{"id":100322},"_9数学函数",[19,100324,100325],{},"补充回顾：python的列表推导式",[389,100327,100329],{"className":30571,"code":100328,"language":30573,"meta":316,"style":316},"[1\u002Fi for i in a]\n",[395,100330,100331],{"__ignoreMap":316},[398,100332,100333,100335,100337,100339,100342,100344,100346,100348],{"class":400,"line":401},[398,100334,1292],{"class":408},[398,100336,619],{"class":457},[398,100338,986],{"class":404},[398,100340,100341],{"class":408},"i ",[398,100343,3301],{"class":404},[398,100345,9715],{"class":408},[398,100347,26236],{"class":404},[398,100349,100350],{"class":408}," a]\n",[343,100352,100354],{"id":100353},"_91-求倒数","9.1 求倒数",[389,100356,100358],{"className":30571,"code":100357,"language":30573,"meta":316,"style":316},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[395,100359,100360,100365,100393,100405],{"__ignoreMap":316},[398,100361,100362],{"class":400,"line":401},[398,100363,100364],{"class":467},"#数组求倒数\n",[398,100366,100367,100369,100371,100373,100375,100377,100379,100381,100383,100385,100387,100389,100391],{"class":400,"line":317},[398,100368,640],{"class":408},[398,100370,454],{"class":404},[398,100372,1292],{"class":408},[398,100374,619],{"class":457},[398,100376,780],{"class":408},[398,100378,486],{"class":457},[398,100380,780],{"class":408},[398,100382,480],{"class":457},[398,100384,780],{"class":408},[398,100386,695],{"class":457},[398,100388,780],{"class":408},[398,100390,721],{"class":457},[398,100392,33439],{"class":408},[398,100394,100395,100397,100399,100402],{"class":400,"line":320},[398,100396,665],{"class":408},[398,100398,454],{"class":404},[398,100400,100401],{"class":408},"np.array(a)",[398,100403,100404],{"class":467},"#将列表转换为数组\n",[398,100406,100407,100409,100411],{"class":400,"line":1470},[398,100408,619],{"class":457},[398,100410,986],{"class":404},[398,100412,100413],{"class":408},"b\n",[389,100415,100417],{"className":30571,"code":100416,"language":30573,"meta":316,"style":316},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[395,100418,100419,100447,100456,100461],{"__ignoreMap":316},[398,100420,100421,100423,100425,100427,100429,100431,100433,100435,100437,100439,100441,100443,100445],{"class":400,"line":401},[398,100422,640],{"class":408},[398,100424,454],{"class":404},[398,100426,1292],{"class":408},[398,100428,619],{"class":457},[398,100430,780],{"class":408},[398,100432,486],{"class":457},[398,100434,780],{"class":408},[398,100436,480],{"class":457},[398,100438,780],{"class":408},[398,100440,695],{"class":457},[398,100442,780],{"class":408},[398,100444,721],{"class":457},[398,100446,33439],{"class":408},[398,100448,100449,100451,100453],{"class":400,"line":317},[398,100450,665],{"class":408},[398,100452,454],{"class":404},[398,100454,100455],{"class":408},"np.array(a)\n",[398,100457,100458],{"class":400,"line":320},[398,100459,100460],{"class":467},"#调用numpy中的函数reciprocal()\n",[398,100462,100463],{"class":400,"line":1470},[398,100464,100465],{"class":408},"np.reciprocal(b)\n",[343,100467,100469],{"id":100468},"_92-求平方","9.2 求平方",[19,100471,94723],{},[389,100473,100475],{"className":30571,"code":100474,"language":30573,"meta":316,"style":316},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[395,100476,100477,100482,100487,100503],{"__ignoreMap":316},[398,100478,100479],{"class":400,"line":401},[398,100480,100481],{"class":467},"#square()，求平方\n",[398,100483,100484],{"class":400,"line":317},[398,100485,100486],{"class":467},"#一维数组\n",[398,100488,100489,100491,100493,100495,100497,100499,100501],{"class":400,"line":320},[398,100490,640],{"class":408},[398,100492,454],{"class":404},[398,100494,93195],{"class":408},[398,100496,619],{"class":457},[398,100498,780],{"class":408},[398,100500,848],{"class":457},[398,100502,415],{"class":408},[398,100504,100505],{"class":400,"line":1470},[398,100506,100507],{"class":408},"np.square(a)\n",[389,100509,100511],{"className":30571,"code":100510,"language":30573,"meta":316,"style":316},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[395,100512,100513,100518,100523,100544],{"__ignoreMap":316},[398,100514,100515],{"class":400,"line":401},[398,100516,100517],{"class":467},"#或者通过循环遍历的形式来计算\n",[398,100519,100520],{"class":400,"line":317},[398,100521,100522],{"class":467},"#这是一个列表\n",[398,100524,100525,100528,100530,100532,100534,100536,100538,100541],{"class":400,"line":320},[398,100526,100527],{"class":408},"[i",[398,100529,857],{"class":404},[398,100531,100341],{"class":408},[398,100533,3301],{"class":404},[398,100535,9715],{"class":408},[398,100537,26236],{"class":404},[398,100539,100540],{"class":408}," a]",[398,100542,100543],{"class":467},"#这个求完之后在数列当中\n",[398,100545,100546,100549,100551,100553,100555,100557,100559],{"class":400,"line":1470},[398,100547,100548],{"class":408},"np.array([i",[398,100550,857],{"class":404},[398,100552,100341],{"class":408},[398,100554,3301],{"class":404},[398,100556,9715],{"class":408},[398,100558,26236],{"class":404},[398,100560,100561],{"class":408}," a])\n",[19,100563,93484],{},[389,100565,100567],{"className":30571,"code":100566,"language":30573,"meta":316,"style":316},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[395,100568,100569,100573,100597],{"__ignoreMap":316},[398,100570,100571],{"class":400,"line":401},[398,100572,93494],{"class":467},[398,100574,100575,100577,100579,100581,100583,100585,100587,100589,100591,100593,100595],{"class":400,"line":317},[398,100576,93499],{"class":408},[398,100578,454],{"class":404},[398,100580,93195],{"class":408},[398,100582,619],{"class":457},[398,100584,780],{"class":408},[398,100586,925],{"class":457},[398,100588,93200],{"class":408},[398,100590,695],{"class":457},[398,100592,780],{"class":408},[398,100594,480],{"class":457},[398,100596,415],{"class":408},[398,100598,100599],{"class":400,"line":320},[398,100600,100601],{"class":408},"np.square(aa)\n",[389,100603,100605],{"className":30571,"code":100604,"language":30573,"meta":316,"style":316},"#传统的方式\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",[395,100606,100607,100612,100621,100637,100653,100668],{"__ignoreMap":316},[398,100608,100609],{"class":400,"line":401},[398,100610,100611],{"class":467},"#传统的方式\n",[398,100613,100614,100616,100618],{"class":400,"line":317},[398,100615,98380],{"class":408},[398,100617,454],{"class":404},[398,100619,100620],{"class":408},"np.empty_like(aa)\n",[398,100622,100623,100625,100627,100629,100631,100633,100635],{"class":400,"line":320},[398,100624,3301],{"class":404},[398,100626,9715],{"class":408},[398,100628,26236],{"class":404},[398,100630,32636],{"class":457},[398,100632,409],{"class":408},[398,100634,695],{"class":457},[398,100636,30979],{"class":408},[398,100638,100639,100641,100643,100645,100647,100649,100651],{"class":400,"line":1470},[398,100640,3477],{"class":404},[398,100642,9777],{"class":408},[398,100644,26236],{"class":404},[398,100646,32636],{"class":457},[398,100648,409],{"class":408},[398,100650,480],{"class":457},[398,100652,30979],{"class":408},[398,100654,100655,100658,100660,100663,100665],{"class":400,"line":1476},[398,100656,100657],{"class":408},"        bb[i,j]",[398,100659,454],{"class":404},[398,100661,100662],{"class":408},"aa[i,j]",[398,100664,857],{"class":404},[398,100666,100667],{"class":408},"aa[i,j]\n",[398,100669,100670],{"class":400,"line":1490},[398,100671,100672],{"class":408},"bb\n",[343,100674,100676],{"id":100675},"_93-求各元素的符号","9.3 求各元素的符号",[19,100678,100679],{},[1738,100680],{"alt":316,"src":100681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[343,100683,100685],{"id":100684},"_94-modf函数","9.4 modf函数",[19,100687,100688],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[389,100690,100692],{"className":30571,"code":100691,"language":30573,"meta":316,"style":316},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[395,100693,100694,100717],{"__ignoreMap":316},[398,100695,100696,100698,100700,100702,100704,100706,100708,100710,100712,100715],{"class":400,"line":401},[398,100697,640],{"class":408},[398,100699,454],{"class":404},[398,100701,93195],{"class":408},[398,100703,934],{"class":404},[398,100705,848],{"class":457},[398,100707,780],{"class":408},[398,100709,848],{"class":457},[398,100711,780],{"class":408},[398,100713,100714],{"class":457},"0.3",[398,100716,415],{"class":408},[398,100718,100719],{"class":400,"line":317},[398,100720,100721],{"class":408},"np.modf(a)\n",[19,100723,100724],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[343,100726,100728],{"id":100727},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,100730,100731],{},"np.cell()",[19,100733,100734],{},"np.floor()",[19,100736,100737],{},"np.rint()",[19,100739,100740],{},"对各元素分别向上取整、向下取整、四舍五入",[19,100742,100743],{},[1738,100744],{"alt":316,"src":100745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[343,100747,100749],{"id":100748},"_96-around函数","9.6 around()函数",[19,100751,100752],{},"around()函数也可以实现对数的小数位数进行操作",[19,100754,100755],{},"其中的参数：",[19,100757,100758],{},"1.要传的数组",[19,100760,100761],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,100763,100764],{},[1738,100765],{"alt":316,"src":100766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[343,100768,100770],{"id":100769},"_97-三角函数","9.7 三角函数",[19,100772,100773],{},[1738,100774],{"alt":316,"src":100775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,100777,100778],{},"引入图像模块非常重要",[389,100780,100782],{"className":30571,"code":100781,"language":30573,"meta":316,"style":316},"from matplotlib import pyplot as plt\n",[395,100783,100784],{"__ignoreMap":316},[398,100785,100786,100788,100791,100793,100796,100798],{"class":400,"line":401},[398,100787,30930],{"class":404},[398,100789,100790],{"class":408}," matplotlib ",[398,100792,30585],{"class":404},[398,100794,100795],{"class":408}," pyplot ",[398,100797,31576],{"class":404},[398,100799,31630],{"class":408},[5403,100801,100802],{},"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":316,"searchDepth":317,"depth":317,"links":100804},[100805,100806,100807,100808,100809,100810,100811],{"id":100353,"depth":317,"text":100354},{"id":100468,"depth":317,"text":100469},{"id":100675,"depth":317,"text":100676},{"id":100684,"depth":317,"text":100685},{"id":100727,"depth":317,"text":100728},{"id":100748,"depth":317,"text":100749},{"id":100769,"depth":317,"text":100770},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100317,"description":23654},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100818,"title":100819,"body":100820,"description":23654,"extension":326,"meta":100824,"navigation":328,"path":100825,"seo":100826,"stem":100827,"__hash__":100828},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100821,"toc":100822},[],{"title":316,"searchDepth":317,"depth":317,"links":100823},[],{"category":50613},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100819,"description":23654},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100830,"title":100831,"body":100832,"description":316,"extension":326,"meta":102840,"navigation":328,"path":102841,"seo":102842,"stem":102843,"__hash__":102844},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100833,"toc":102816},[100834,100837,100841,100844,100847,100853,100856,100879,100882,100916,100919,100960,100964,100967,101060,101063,101107,101110,101127,101130,101144,101147,101150,101195,101198,101235,101239,101242,101248,101253,101273,101277,101280,101346,101349,101367,101371,101374,101403,101413,101419,101423,101426,101432,101443,101447,101450,101480,101483,101763,101766,101769,101780,101783,101786,101808,101815,101818,101836,101839,101842,101856,101864,101867,101893,101899,101902,101905,101915,101927,101947,101956,101976,101986,102010,102023,102037,102042,102083,102100,102125,102137,102157,102163,102208,102227,102244,102257,102273,102280,102292,102301,102336,102357,102382,102395,102419,102434,102459,102462,102483,102492,102495,102506,102510,102513,102519,102531,102538,102542,102545,102557,102560,102574,102577,102587,102597,102600,102640,102643,102647,102653,102656,102670,102674,102677,102710,102714,102717,102740,102748,102751,102757,102763,102766,102769,102797,102801,102804,102810,102813],[10,100835,100831],{"id":100836},"_1环境安装与第一个-mujoco-程序",[343,100838,100840],{"id":100839},"_1目标说明","1.目标说明",[19,100842,100843],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,100845,100846],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[389,100848,100851],{"className":100849,"code":100850,"language":5464,"meta":316},[5462],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[395,100852,100850],{"__ignoreMap":316},[19,100854,100855],{},"需要掌握:",[38,100857,100858,100861,100864,100869,100874],{},[41,100859,100860],{},"Fedora 44 下 MuJoCo 的系统依赖",[41,100862,100863],{},"Python 虚拟环境创建",[41,100865,100866],{},[395,100867,100868],{},"mujoco.MjModel",[41,100870,100871],{},[395,100872,100873],{},"mujoco.MjData",[41,100875,100876],{},[395,100877,100878],{},"mujoco.mj_step(model, data)",[19,100880,100881],{},"MuJoCo 中最重要的两个对象:",[84,100883,100884,100894],{},[87,100885,100886],{},[90,100887,100888,100891],{},[93,100889,100890],{"align":95},"对象",[93,100892,100893],{"align":95},"含义",[101,100895,100896,100906],{},[90,100897,100898,100903],{},[106,100899,100900],{"align":95},[395,100901,100902],{},"MjModel",[106,100904,100905],{"align":95},"模型结构，来自 XML，基本不随时间变化",[90,100907,100908,100913],{},[106,100909,100910],{"align":95},[395,100911,100912],{},"MjData",[106,100914,100915],{"align":95},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,100917,100918],{},"可以先用一个类比理解：",[84,100920,100921,100931],{},[87,100922,100923],{},[90,100924,100925,100928],{},[93,100926,100927],{"align":95},"类比",[93,100929,100930],{"align":95},"MuJoCo 对象",[101,100932,100933,100942,100951],{},[90,100934,100935,100938],{},[106,100936,100937],{"align":95},"游戏地图和角色配置",[106,100939,100940],{"align":95},[395,100941,100902],{},[90,100943,100944,100947],{},[106,100945,100946],{"align":95},"游戏运行到当前帧的状态",[106,100948,100949],{"align":95},[395,100950,100912],{},[90,100952,100953,100956],{},[106,100954,100955],{"align":95},"前进一帧",[106,100957,100958],{"align":95},[395,100959,100878],{},[343,100961,100963],{"id":100962},"_2环境与依赖安装","2.环境与依赖安装",[19,100965,100966],{},"Fedora 44 系统依赖:",[389,100968,100970],{"className":24099,"code":100969,"language":24101,"meta":316,"style":316},"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",[395,100971,100972,100984,100997,101010,101020,101030,101049],{"__ignoreMap":316},[398,100973,100974,100976,100978,100980,100982],{"class":400,"line":401},[398,100975,24854],{"class":2239},[398,100977,26508],{"class":513},[398,100979,24111],{"class":513},[398,100981,26593],{"class":457},[398,100983,24956],{"class":457},[398,100985,100986,100989,100992,100995],{"class":400,"line":317},[398,100987,100988],{"class":513},"  python3",[398,100990,100991],{"class":513}," python3-pip",[398,100993,100994],{"class":513}," python3-virtualenv",[398,100996,24956],{"class":457},[398,100998,100999,101002,101005,101008],{"class":400,"line":320},[398,101000,101001],{"class":513},"  mesa-libGL",[398,101003,101004],{"class":513}," mesa-libGLU",[398,101006,101007],{"class":513}," mesa-dri-drivers",[398,101009,24956],{"class":457},[398,101011,101012,101015,101018],{"class":400,"line":1470},[398,101013,101014],{"class":513},"  libglvnd-glx",[398,101016,101017],{"class":513}," libglvnd-opengl",[398,101019,24956],{"class":457},[398,101021,101022,101025,101028],{"class":400,"line":1476},[398,101023,101024],{"class":513},"  glfw",[398,101026,101027],{"class":513}," glfw-devel",[398,101029,24956],{"class":457},[398,101031,101032,101035,101038,101041,101044,101047],{"class":400,"line":1490},[398,101033,101034],{"class":513},"  libX11",[398,101036,101037],{"class":513}," libXcursor",[398,101039,101040],{"class":513}," libXi",[398,101042,101043],{"class":513}," libXinerama",[398,101045,101046],{"class":513}," libXrandr",[398,101048,24956],{"class":457},[398,101050,101051,101054,101057],{"class":400,"line":1496},[398,101052,101053],{"class":513},"  gcc",[398,101055,101056],{"class":513}," gcc-c++",[398,101058,101059],{"class":513}," make\n",[19,101061,101062],{},"创建 Python 环境:",[389,101064,101066],{"className":24099,"code":101065,"language":24101,"meta":316,"style":316},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[395,101067,101068,101082,101090],{"__ignoreMap":316},[398,101069,101070,101073,101076,101079],{"class":400,"line":401},[398,101071,101072],{"class":2239},"python3",[398,101074,101075],{"class":457}," -m",[398,101077,101078],{"class":513}," venv",[398,101080,101081],{"class":513}," .venv\n",[398,101083,101084,101087],{"class":400,"line":317},[398,101085,101086],{"class":457},"source",[398,101088,101089],{"class":513}," .venv\u002Fbin\u002Factivate\n",[398,101091,101092,101094,101096,101099,101101,101104],{"class":400,"line":320},[398,101093,30573],{"class":2239},[398,101095,101075],{"class":457},[398,101097,101098],{"class":513}," pip",[398,101100,24111],{"class":513},[398,101102,101103],{"class":457}," --upgrade",[398,101105,101106],{"class":513}," pip\n",[19,101108,101109],{},"pip 安装:",[389,101111,101113],{"className":24099,"code":101112,"language":24101,"meta":316,"style":316},"pip install \"mujoco>=2.3\" numpy\n",[395,101114,101115],{"__ignoreMap":316},[398,101116,101117,101119,101121,101124],{"class":400,"line":401},[398,101118,24108],{"class":2239},[398,101120,24111],{"class":513},[398,101122,101123],{"class":513}," \"mujoco>=2.3\"",[398,101125,101126],{"class":513}," numpy\n",[19,101128,101129],{},"安装完成后，先做最小检查：",[389,101131,101133],{"className":24099,"code":101132,"language":24101,"meta":316,"style":316},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[395,101134,101135],{"__ignoreMap":316},[398,101136,101137,101139,101141],{"class":400,"line":401},[398,101138,30573],{"class":2239},[398,101140,30551],{"class":457},[398,101142,101143],{"class":513}," \"import mujoco; print(mujoco.__version__)\"\n",[19,101145,101146],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,101148,101149],{},"conda 安装:",[389,101151,101153],{"className":24099,"code":101152,"language":24101,"meta":316,"style":316},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[395,101154,101155,101175,101185],{"__ignoreMap":316},[398,101156,101157,101159,101161,101163,101166,101169,101172],{"class":400,"line":401},[398,101158,30523],{"class":2239},[398,101160,29369],{"class":513},[398,101162,25393],{"class":457},[398,101164,101165],{"class":513}," mujoco-study",[398,101167,101168],{"class":513}," python=",[398,101170,101171],{"class":457},"3.10",[398,101173,101174],{"class":457}," -y\n",[398,101176,101177,101179,101182],{"class":400,"line":317},[398,101178,30523],{"class":2239},[398,101180,101181],{"class":513}," activate",[398,101183,101184],{"class":513}," mujoco-study\n",[398,101186,101187,101189,101191,101193],{"class":400,"line":320},[398,101188,24108],{"class":2239},[398,101190,24111],{"class":513},[398,101192,101123],{"class":513},[398,101194,101126],{"class":513},[19,101196,101197],{},"版本冲突说明:",[38,101199,101200,101206,101216,101225],{},[41,101201,101202,101203,28578],{},"不要安装 ",[395,101204,101205],{},"mujoco-py",[41,101207,101208,101209,101211,101212,101215],{},"如果旧项目里同时安装了 ",[395,101210,101205],{}," 和 ",[395,101213,101214],{},"mujoco","，建议新建干净虚拟环境。",[41,101217,101218,101221,101222,28578],{},[395,101219,101220],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[395,101223,101224],{},"~\u002F.mujoco\u002Fmujoco210",[41,101226,101227,101228,82732,101231,101234],{},"离屏渲染可能涉及 OpenGL 后端，",[395,101229,101230],{},"MUJOCO_GL=egl",[395,101232,101233],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[343,101236,101238],{"id":101237},"_3核心概念解释","3.核心概念解释",[19,101240,101241],{},"MuJoCo 的基本执行流程:",[389,101243,101246],{"className":101244,"code":101245,"language":5464,"meta":316},[5462],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[395,101247,101245],{"__ignoreMap":316},[19,101249,101250,101252],{},[395,101251,100902],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,101254,101255,101257,101258,614,101261,614,101264,614,101267,614,101270,28578],{},[395,101256,100912],{}," 存放仿真运行时状态，例如 ",[395,101259,101260],{},"data.time",[395,101262,101263],{},"data.qpos",[395,101265,101266],{},"data.qvel",[395,101268,101269],{},"data.ctrl",[395,101271,101272],{},"data.xpos",[14,101274,101276],{"id":101275},"xml-是什么","XML 是什么",[19,101278,101279],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[389,101281,101283],{"className":53260,"code":101282,"language":53262,"meta":316,"style":316},"\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",[395,101284,101285,101307,101338],{"__ignoreMap":316},[398,101286,101287,101289,101291,101293,101295,101297,101300,101302,101305],{"class":400,"line":401},[398,101288,1312],{"class":408},[398,101290,51993],{"class":51493},[398,101292,15197],{"class":2239},[398,101294,454],{"class":408},[398,101296,53684],{"class":513},[398,101298,101299],{"class":2239}," pos",[398,101301,454],{"class":408},[398,101303,101304],{"class":513},"\"0 0 1\"",[398,101306,51500],{"class":408},[398,101308,101309,101311,101314,101316,101318,101321,101323,101325,101327,101330,101332,101335],{"class":400,"line":317},[398,101310,52337],{"class":408},[398,101312,101313],{"class":51493},"geom",[398,101315,15197],{"class":2239},[398,101317,454],{"class":408},[398,101319,101320],{"class":513},"\"box_geom\"",[398,101322,54017],{"class":2239},[398,101324,454],{"class":408},[398,101326,53684],{"class":513},[398,101328,101329],{"class":2239}," size",[398,101331,454],{"class":408},[398,101333,101334],{"class":513},"\"0.1 0.1 0.1\"",[398,101336,101337],{"class":408},"\u002F>\n",[398,101339,101340,101342,101344],{"class":400,"line":320},[398,101341,51978],{"class":408},[398,101343,51993],{"class":51493},[398,101345,51500],{"class":408},[19,101347,101348],{},"这段意思是：",[38,101350,101351,101357,101364],{},[41,101352,101353,101354,101356],{},"创建一个叫 ",[395,101355,53907],{}," 的刚体。",[41,101358,101359,101360,101363],{},"它初始放在 ",[395,101361,101362],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[41,101365,101366],{},"它里面有一个盒子形状的几何体。",[14,101368,101370],{"id":101369},"timestep-是什么","timestep 是什么",[19,101372,101373],{},"XML 里的：",[389,101375,101377],{"className":53260,"code":101376,"language":53262,"meta":316,"style":316},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[395,101378,101379],{"__ignoreMap":316},[398,101380,101381,101383,101385,101388,101390,101393,101396,101398,101401],{"class":400,"line":401},[398,101382,1312],{"class":408},[398,101384,69359],{"class":51493},[398,101386,101387],{"class":2239}," timestep",[398,101389,454],{"class":408},[398,101391,101392],{"class":513},"\"0.01\"",[398,101394,101395],{"class":2239}," gravity",[398,101397,454],{"class":408},[398,101399,101400],{"class":513},"\"0 0 -9.81\"",[398,101402,101337],{"class":408},[19,101404,101405,101406,101409,101410,101412],{},"表示每调用一次 ",[395,101407,101408],{},"mj_step","，仿真时间前进 ",[395,101411,39179],{}," 秒。循环 100 次，大约就是 1 秒：",[389,101414,101417],{"className":101415,"code":101416,"language":5464,"meta":316},[5462],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[395,101418,101416],{"__ignoreMap":316},[14,101420,101422],{"id":101421},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,101424,101425],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[389,101427,101430],{"className":101428,"code":101429,"language":5464,"meta":316},[5462],"x y z qw qx qy qz\n",[395,101431,101429],{"__ignoreMap":316},[19,101433,101434,101435,101438,101439,101442],{},"表示一个自由刚体的位置和姿态。其中 ",[395,101436,101437],{},"x y z"," 是位置，",[395,101440,101441],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[343,101444,101446],{"id":101445},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,101448,101449],{},"新建文件:",[389,101451,101453],{"className":24099,"code":101452,"language":24101,"meta":316,"style":316},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[395,101454,101455,101465,101472],{"__ignoreMap":316},[398,101456,101457,101460,101462],{"class":400,"line":401},[398,101458,101459],{"class":2239},"mkdir",[398,101461,29409],{"class":457},[398,101463,101464],{"class":513}," mujoco_tutorial\n",[398,101466,101467,101470],{"class":400,"line":317},[398,101468,101469],{"class":457},"cd",[398,101471,101464],{"class":513},[398,101473,101474,101477],{"class":400,"line":320},[398,101475,101476],{"class":2239},"touch",[398,101478,101479],{"class":513}," ch1_first_sim.py\n",[19,101481,101482],{},"写入:",[389,101484,101486],{"className":30571,"code":101485,"language":30573,"meta":316,"style":316},"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",[395,101487,101488,101495,101499,101503,101513,101518,101523,101527,101532,101537,101541,101546,101551,101556,101561,101566,101571,101575,101579,101583,101596,101610,101620,101624,101636,101648,101660,101672,101684,101688,101705,101710,101714,101725,101736,101740,101744,101758],{"__ignoreMap":316},[398,101489,101490,101492],{"class":400,"line":401},[398,101491,30585],{"class":404},[398,101493,101494],{"class":408}," mujoco\n",[398,101496,101497],{"class":400,"line":317},[398,101498,2676],{"emptyLinePlaceholder":328},[398,101500,101501],{"class":400,"line":320},[398,101502,2676],{"emptyLinePlaceholder":328},[398,101504,101505,101508,101510],{"class":400,"line":1470},[398,101506,101507],{"class":457},"XML",[398,101509,13841],{"class":404},[398,101511,101512],{"class":513}," \"\"\"\n",[398,101514,101515],{"class":400,"line":1476},[398,101516,101517],{"class":513},"\u003Cmujoco model=\"first_sim\">\n",[398,101519,101520],{"class":400,"line":1490},[398,101521,101522],{"class":513},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[398,101524,101525],{"class":400,"line":1496},[398,101526,2676],{"emptyLinePlaceholder":328},[398,101528,101529],{"class":400,"line":1587},[398,101530,101531],{"class":513},"  \u003Cworldbody>\n",[398,101533,101534],{"class":400,"line":1593},[398,101535,101536],{"class":513},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[398,101538,101539],{"class":400,"line":1605},[398,101540,2676],{"emptyLinePlaceholder":328},[398,101542,101543],{"class":400,"line":1888},[398,101544,101545],{"class":513},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[398,101547,101548],{"class":400,"line":1893},[398,101549,101550],{"class":513},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[398,101552,101553],{"class":400,"line":1899},[398,101554,101555],{"class":513},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[398,101557,101558],{"class":400,"line":1904},[398,101559,101560],{"class":513},"    \u003C\u002Fbody>\n",[398,101562,101563],{"class":400,"line":1918},[398,101564,101565],{"class":513},"  \u003C\u002Fworldbody>\n",[398,101567,101568],{"class":400,"line":1923},[398,101569,101570],{"class":513},"\u003C\u002Fmujoco>\n",[398,101572,101573],{"class":400,"line":1929},[398,101574,95891],{"class":513},[398,101576,101577],{"class":400,"line":1950},[398,101578,2676],{"emptyLinePlaceholder":328},[398,101580,101581],{"class":400,"line":1955},[398,101582,2676],{"emptyLinePlaceholder":328},[398,101584,101585,101587,101589,101592,101594],{"class":400,"line":1969},[398,101586,32140],{"class":404},[398,101588,2249],{"class":2239},[398,101590,101591],{"class":408},"() -> ",[398,101593,95879],{"class":457},[398,101595,4015],{"class":408},[398,101597,101598,101601,101603,101606,101608],{"class":400,"line":1974},[398,101599,101600],{"class":408},"    model ",[398,101602,454],{"class":404},[398,101604,101605],{"class":408}," mujoco.MjModel.from_xml_string(",[398,101607,101507],{"class":457},[398,101609,415],{"class":408},[398,101611,101612,101615,101617],{"class":400,"line":2003},[398,101613,101614],{"class":408},"    data ",[398,101616,454],{"class":404},[398,101618,101619],{"class":408}," mujoco.MjData(model)\n",[398,101621,101622],{"class":400,"line":2008},[398,101623,2676],{"emptyLinePlaceholder":328},[398,101625,101626,101628,101630,101633],{"class":400,"line":2025},[398,101627,31492],{"class":457},[398,101629,409],{"class":408},[398,101631,101632],{"class":513},"\"nq:\"",[398,101634,101635],{"class":408},", model.nq)\n",[398,101637,101638,101640,101642,101645],{"class":400,"line":2030},[398,101639,31492],{"class":457},[398,101641,409],{"class":408},[398,101643,101644],{"class":513},"\"nv:\"",[398,101646,101647],{"class":408},", model.nv)\n",[398,101649,101650,101652,101654,101657],{"class":400,"line":2035},[398,101651,31492],{"class":457},[398,101653,409],{"class":408},[398,101655,101656],{"class":513},"\"nu:\"",[398,101658,101659],{"class":408},", model.nu)\n",[398,101661,101662,101664,101666,101669],{"class":400,"line":2040},[398,101663,31492],{"class":457},[398,101665,409],{"class":408},[398,101667,101668],{"class":513},"\"initial time:\"",[398,101670,101671],{"class":408},", data.time)\n",[398,101673,101674,101676,101678,101681],{"class":400,"line":2054},[398,101675,31492],{"class":457},[398,101677,409],{"class":408},[398,101679,101680],{"class":513},"\"initial qpos:\"",[398,101682,101683],{"class":408},", data.qpos.copy())\n",[398,101685,101686],{"class":400,"line":2059},[398,101687,2676],{"emptyLinePlaceholder":328},[398,101689,101690,101692,101695,101697,101699,101701,101703],{"class":400,"line":2853},[398,101691,3477],{"class":404},[398,101693,101694],{"class":408}," _ ",[398,101696,26236],{"class":404},[398,101698,32636],{"class":457},[398,101700,409],{"class":408},[398,101702,713],{"class":457},[398,101704,30979],{"class":408},[398,101706,101707],{"class":400,"line":2867},[398,101708,101709],{"class":408},"        mujoco.mj_step(model, data)\n",[398,101711,101712],{"class":400,"line":2875},[398,101713,2676],{"emptyLinePlaceholder":328},[398,101715,101716,101718,101720,101723],{"class":400,"line":2880},[398,101717,31492],{"class":457},[398,101719,409],{"class":408},[398,101721,101722],{"class":513},"\"final time:\"",[398,101724,101671],{"class":408},[398,101726,101727,101729,101731,101734],{"class":400,"line":2886},[398,101728,31492],{"class":457},[398,101730,409],{"class":408},[398,101732,101733],{"class":513},"\"final qpos:\"",[398,101735,101683],{"class":408},[398,101737,101738],{"class":400,"line":2892},[398,101739,2676],{"emptyLinePlaceholder":328},[398,101741,101742],{"class":400,"line":2897},[398,101743,2676],{"emptyLinePlaceholder":328},[398,101745,101746,101748,101750,101753,101756],{"class":400,"line":8225},[398,101747,1807],{"class":404},[398,101749,31413],{"class":457},[398,101751,101752],{"class":404}," ==",[398,101754,101755],{"class":513}," \"__main__\"",[398,101757,4015],{"class":408},[398,101759,101760],{"class":400,"line":8249},[398,101761,101762],{"class":408},"    main()\n",[14,101764,101765],{"id":101765},"代码逐段解释",[19,101767,101768],{},"导入库：",[389,101770,101772],{"className":30571,"code":101771,"language":30573,"meta":316,"style":316},"import mujoco\n",[395,101773,101774],{"__ignoreMap":316},[398,101775,101776,101778],{"class":400,"line":401},[398,101777,30585],{"class":404},[398,101779,101494],{"class":408},[19,101781,101782],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,101784,101785],{},"定义 XML：",[389,101787,101789],{"className":30571,"code":101788,"language":30573,"meta":316,"style":316},"XML = \"\"\"\n...\n\"\"\"\n",[395,101790,101791,101799,101804],{"__ignoreMap":316},[398,101792,101793,101795,101797],{"class":400,"line":401},[398,101794,101507],{"class":457},[398,101796,13841],{"class":404},[398,101798,101512],{"class":513},[398,101800,101801],{"class":400,"line":317},[398,101802,101803],{"class":513},"...\n",[398,101805,101806],{"class":400,"line":320},[398,101807,95891],{"class":513},[19,101809,101810,101811,101814],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[395,101812,101813],{},"freejoint"," 的方块。",[19,101816,101817],{},"编译模型：",[389,101819,101821],{"className":30571,"code":101820,"language":30573,"meta":316,"style":316},"model = mujoco.MjModel.from_xml_string(XML)\n",[395,101822,101823],{"__ignoreMap":316},[398,101824,101825,101828,101830,101832,101834],{"class":400,"line":401},[398,101826,101827],{"class":408},"model ",[398,101829,454],{"class":404},[398,101831,101605],{"class":408},[398,101833,101507],{"class":457},[398,101835,415],{"class":408},[19,101837,101838],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,101840,101841],{},"创建数据：",[389,101843,101845],{"className":30571,"code":101844,"language":30573,"meta":316,"style":316},"data = mujoco.MjData(model)\n",[395,101846,101847],{"__ignoreMap":316},[398,101848,101849,101852,101854],{"class":400,"line":401},[398,101850,101851],{"class":408},"data ",[398,101853,454],{"class":404},[398,101855,101619],{"class":408},[19,101857,101858,101860,101861,101863],{},[395,101859,33594],{}," 会保存仿真当前状态。刚创建时，时间是 ",[395,101862,593],{},"，方块还在初始位置。",[19,101865,101866],{},"推进仿真：",[389,101868,101870],{"className":30571,"code":101869,"language":30573,"meta":316,"style":316},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[395,101871,101872,101888],{"__ignoreMap":316},[398,101873,101874,101876,101878,101880,101882,101884,101886],{"class":400,"line":401},[398,101875,3301],{"class":404},[398,101877,101694],{"class":408},[398,101879,26236],{"class":404},[398,101881,32636],{"class":457},[398,101883,409],{"class":408},[398,101885,713],{"class":457},[398,101887,30979],{"class":408},[398,101889,101890],{"class":400,"line":317},[398,101891,101892],{"class":408},"    mujoco.mj_step(model, data)\n",[19,101894,101895,101896,101898],{},"每次 ",[395,101897,101408],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[14,101900,101901],{"id":101901},"代码逐行细讲",[19,101903,101904],{},"下面把完整代码按新手视角拆开讲。",[389,101906,101907],{"className":30571,"code":101771,"language":30573,"meta":316,"style":316},[395,101908,101909],{"__ignoreMap":316},[398,101910,101911,101913],{"class":400,"line":401},[398,101912,30585],{"class":404},[398,101914,101494],{"class":408},[19,101916,101917,101919,101920,614,101922,614,101924,28578],{},[395,101918,30585],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[395,101921,100868],{},[395,101923,100873],{},[395,101925,101926],{},"mujoco.mj_step",[389,101928,101929],{"className":30571,"code":101788,"language":30573,"meta":316,"style":316},[395,101930,101931,101939,101943],{"__ignoreMap":316},[398,101932,101933,101935,101937],{"class":400,"line":401},[398,101934,101507],{"class":457},[398,101936,13841],{"class":404},[398,101938,101512],{"class":513},[398,101940,101941],{"class":400,"line":317},[398,101942,101803],{"class":513},[398,101944,101945],{"class":400,"line":320},[398,101946,95891],{"class":513},[19,101948,101949,101951,101952,101955],{},[395,101950,101507],{}," 是一个变量名。右边的三引号 ",[395,101953,101954],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[389,101957,101958],{"className":53260,"code":101517,"language":53262,"meta":316,"style":316},[395,101959,101960],{"__ignoreMap":316},[398,101961,101962,101964,101966,101969,101971,101974],{"class":400,"line":401},[398,101963,1312],{"class":408},[398,101965,101214],{"class":51493},[398,101967,101968],{"class":2239}," model",[398,101970,454],{"class":408},[398,101972,101973],{"class":513},"\"first_sim\"",[398,101975,51500],{"class":408},[19,101977,101978,101979,101982,101983,28578],{},"这是 XML 的根标签。",[395,101980,101981],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[395,101984,101985],{},"first_sim",[389,101987,101988],{"className":53260,"code":101376,"language":53262,"meta":316,"style":316},[395,101989,101990],{"__ignoreMap":316},[398,101991,101992,101994,101996,101998,102000,102002,102004,102006,102008],{"class":400,"line":401},[398,101993,1312],{"class":408},[398,101995,69359],{"class":51493},[398,101997,101387],{"class":2239},[398,101999,454],{"class":408},[398,102001,101392],{"class":513},[398,102003,101395],{"class":2239},[398,102005,454],{"class":408},[398,102007,101400],{"class":513},[398,102009,101337],{"class":408},[19,102011,102012,102014,102015,102018,102019,102022],{},[395,102013,69359],{}," 用来设置仿真参数。",[395,102016,102017],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[395,102020,102021],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[389,102024,102026],{"className":53260,"code":102025,"language":53262,"meta":316,"style":316},"\u003Cworldbody>\n",[395,102027,102028],{"__ignoreMap":316},[398,102029,102030,102032,102035],{"class":400,"line":401},[398,102031,1312],{"class":408},[398,102033,102034],{"class":51493},"worldbody",[398,102036,51500],{"class":408},[19,102038,102039,102041],{},[395,102040,102034],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[389,102043,102045],{"className":53260,"code":102044,"language":53262,"meta":316,"style":316},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[395,102046,102047],{"__ignoreMap":316},[398,102048,102049,102051,102053,102055,102057,102060,102062,102064,102067,102069,102071,102074,102076,102078,102081],{"class":400,"line":401},[398,102050,1312],{"class":408},[398,102052,101313],{"class":51493},[398,102054,15197],{"class":2239},[398,102056,454],{"class":408},[398,102058,102059],{"class":513},"\"floor\"",[398,102061,54017],{"class":2239},[398,102063,454],{"class":408},[398,102065,102066],{"class":513},"\"plane\"",[398,102068,101329],{"class":2239},[398,102070,454],{"class":408},[398,102072,102073],{"class":513},"\"2 2 0.1\"",[398,102075,78960],{"class":2239},[398,102077,454],{"class":408},[398,102079,102080],{"class":513},"\"0.8 0.8 0.8 1\"",[398,102082,101337],{"class":408},[19,102084,102085,102086,102088,102089,102092,102093,102096,102097,102099],{},"这行创建地面。",[395,102087,101313],{}," 是几何体。",[395,102090,102091],{},"name=\"floor\""," 是名字。",[395,102094,102095],{},"type=\"plane\""," 表示平面。",[395,102098,55303],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[389,102101,102103],{"className":53260,"code":102102,"language":53262,"meta":316,"style":316},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[395,102104,102105],{"__ignoreMap":316},[398,102106,102107,102109,102111,102113,102115,102117,102119,102121,102123],{"class":400,"line":401},[398,102108,1312],{"class":408},[398,102110,51993],{"class":51493},[398,102112,15197],{"class":2239},[398,102114,454],{"class":408},[398,102116,53684],{"class":513},[398,102118,101299],{"class":2239},[398,102120,454],{"class":408},[398,102122,101304],{"class":513},[398,102124,51500],{"class":408},[19,102126,102127,102128,28578,102130,102133,102134,102136],{},"这行创建一个刚体，名字叫 ",[395,102129,53907],{},[395,102131,102132],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[395,102135,101362],{},"，也就是离地面 1 米高。",[389,102138,102140],{"className":53260,"code":102139,"language":53262,"meta":316,"style":316},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[395,102141,102142],{"__ignoreMap":316},[398,102143,102144,102146,102148,102150,102152,102155],{"class":400,"line":401},[398,102145,1312],{"class":408},[398,102147,101813],{"class":51493},[398,102149,15197],{"class":2239},[398,102151,454],{"class":408},[398,102153,102154],{"class":513},"\"box_free\"",[398,102156,101337],{"class":408},[19,102158,102159,102160,102162],{},"这行很重要。",[395,102161,101813],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[389,102164,102166],{"className":53260,"code":102165,"language":53262,"meta":316,"style":316},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[395,102167,102168],{"__ignoreMap":316},[398,102169,102170,102172,102174,102176,102178,102180,102182,102184,102186,102188,102190,102192,102195,102197,102199,102201,102203,102206],{"class":400,"line":401},[398,102171,1312],{"class":408},[398,102173,101313],{"class":51493},[398,102175,15197],{"class":2239},[398,102177,454],{"class":408},[398,102179,101320],{"class":513},[398,102181,54017],{"class":2239},[398,102183,454],{"class":408},[398,102185,53684],{"class":513},[398,102187,101329],{"class":2239},[398,102189,454],{"class":408},[398,102191,101334],{"class":513},[398,102193,102194],{"class":2239}," mass",[398,102196,454],{"class":408},[398,102198,3954],{"class":513},[398,102200,78960],{"class":2239},[398,102202,454],{"class":408},[398,102204,102205],{"class":513},"\"1 0 0 1\"",[398,102207,101337],{"class":408},[19,102209,102210,102211,102214,102215,102218,102219,102222,102223,102226],{},"这行给 box body 添加一个盒子形状。",[395,102212,102213],{},"type=\"box\""," 表示形状是盒子。",[395,102216,102217],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[395,102220,102221],{},"mass=\"1\""," 表示质量是 1。",[395,102224,102225],{},"rgba=\"1 0 0 1\""," 表示红色。",[389,102228,102230],{"className":30571,"code":102229,"language":30573,"meta":316,"style":316},"def main() -> None:\n",[395,102231,102232],{"__ignoreMap":316},[398,102233,102234,102236,102238,102240,102242],{"class":400,"line":401},[398,102235,32140],{"class":404},[398,102237,2249],{"class":2239},[398,102239,101591],{"class":408},[398,102241,95879],{"class":457},[398,102243,4015],{"class":408},[19,102245,102246,102248,102249,102252,102253,102256],{},[395,102247,32140],{}," 用来定义函数。这里定义了一个叫 ",[395,102250,102251],{},"main"," 的函数。",[395,102254,102255],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[389,102258,102259],{"className":30571,"code":101820,"language":30573,"meta":316,"style":316},[395,102260,102261],{"__ignoreMap":316},[398,102262,102263,102265,102267,102269,102271],{"class":400,"line":401},[398,102264,101827],{"class":408},[398,102266,454],{"class":404},[398,102268,101605],{"class":408},[398,102270,101507],{"class":457},[398,102272,415],{"class":408},[19,102274,102275,102276,102279],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[395,102277,102278],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[389,102281,102282],{"className":30571,"code":101844,"language":30573,"meta":316,"style":316},[395,102283,102284],{"__ignoreMap":316},[398,102285,102286,102288,102290],{"class":400,"line":401},[398,102287,101851],{"class":408},[398,102289,454],{"class":404},[398,102291,101619],{"class":408},[19,102293,102294,102295,102297,102298,102300],{},"这行创建仿真数据。",[395,102296,33594],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[395,102299,33594],{}," 都会变化。",[389,102302,102304],{"className":30571,"code":102303,"language":30573,"meta":316,"style":316},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[395,102305,102306,102316,102326],{"__ignoreMap":316},[398,102307,102308,102310,102312,102314],{"class":400,"line":401},[398,102309,30608],{"class":457},[398,102311,409],{"class":408},[398,102313,101632],{"class":513},[398,102315,101635],{"class":408},[398,102317,102318,102320,102322,102324],{"class":400,"line":317},[398,102319,30608],{"class":457},[398,102321,409],{"class":408},[398,102323,101644],{"class":513},[398,102325,101647],{"class":408},[398,102327,102328,102330,102332,102334],{"class":400,"line":320},[398,102329,30608],{"class":457},[398,102331,409],{"class":408},[398,102333,101656],{"class":513},[398,102335,101659],{"class":408},[19,102337,102338,102340,102341,102344,102345,102348,102349,102352,102353,102356],{},[395,102339,30608],{}," 用来输出信息。",[395,102342,102343],{},"model.nq"," 是位置变量数量，",[395,102346,102347],{},"model.nv"," 是速度变量数量，",[395,102350,102351],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[395,102354,102355],{},"nu"," 是 0。",[389,102358,102360],{"className":30571,"code":102359,"language":30573,"meta":316,"style":316},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[395,102361,102362,102372],{"__ignoreMap":316},[398,102363,102364,102366,102368,102370],{"class":400,"line":401},[398,102365,30608],{"class":457},[398,102367,409],{"class":408},[398,102369,101668],{"class":513},[398,102371,101671],{"class":408},[398,102373,102374,102376,102378,102380],{"class":400,"line":317},[398,102375,30608],{"class":457},[398,102377,409],{"class":408},[398,102379,101680],{"class":513},[398,102381,101683],{"class":408},[19,102383,102384,102385,102387,102388,102390,102391,102394],{},"这里打印初始时间和初始位置。",[395,102386,101260],{}," 一开始是 0。",[395,102389,101263],{}," 是位置数组。",[395,102392,102393],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[389,102396,102397],{"className":30571,"code":101869,"language":30573,"meta":316,"style":316},[395,102398,102399,102415],{"__ignoreMap":316},[398,102400,102401,102403,102405,102407,102409,102411,102413],{"class":400,"line":401},[398,102402,3301],{"class":404},[398,102404,101694],{"class":408},[398,102406,26236],{"class":404},[398,102408,32636],{"class":457},[398,102410,409],{"class":408},[398,102412,713],{"class":457},[398,102414,30979],{"class":408},[398,102416,102417],{"class":400,"line":317},[398,102418,101892],{"class":408},[19,102420,102421,102423,102424,102427,102428,102430,102431,102433],{},[395,102422,3301],{}," 是循环。",[395,102425,102426],{},"range(100)"," 表示循环 100 次。",[395,102429,1394],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[395,102432,101408],{},"，仿真就前进一步。",[389,102435,102437],{"className":30571,"code":102436,"language":30573,"meta":316,"style":316},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[395,102438,102439,102449],{"__ignoreMap":316},[398,102440,102441,102443,102445,102447],{"class":400,"line":401},[398,102442,30608],{"class":457},[398,102444,409],{"class":408},[398,102446,101722],{"class":513},[398,102448,101671],{"class":408},[398,102450,102451,102453,102455,102457],{"class":400,"line":317},[398,102452,30608],{"class":457},[398,102454,409],{"class":408},[398,102456,101733],{"class":513},[398,102458,101683],{"class":408},[19,102460,102461],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[389,102463,102465],{"className":30571,"code":102464,"language":30573,"meta":316,"style":316},"if __name__ == \"__main__\":\n    main()\n",[395,102466,102467,102479],{"__ignoreMap":316},[398,102468,102469,102471,102473,102475,102477],{"class":400,"line":401},[398,102470,1807],{"class":404},[398,102472,31413],{"class":457},[398,102474,101752],{"class":404},[398,102476,101755],{"class":513},[398,102478,4015],{"class":408},[398,102480,102481],{"class":400,"line":317},[398,102482,101762],{"class":408},[19,102484,102485,102486,102489,102490,28578],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[395,102487,102488],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[395,102491,102488],{},[19,102493,102494],{},"运行:",[389,102496,102498],{"className":24099,"code":102497,"language":24101,"meta":316,"style":316},"python ch1_first_sim.py\n",[395,102499,102500],{"__ignoreMap":316},[398,102501,102502,102504],{"class":400,"line":401},[398,102503,30573],{"class":2239},[398,102505,101479],{"class":513},[343,102507,102509],{"id":102508},"_5运行结果说明","5.运行结果说明",[19,102511,102512],{},"你应该看到类似输出:",[389,102514,102517],{"className":102515,"code":102516,"language":5464,"meta":316},[5462],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[395,102518,102516],{"__ignoreMap":316},[19,102520,102521,102523,102524,102527,102528,28578],{},[395,102522,101813],{}," 有 7 个位置变量: ",[395,102525,102526],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[395,102529,102530],{},"vx vy vz wx wy wz",[19,102532,102533,102534,102537],{},"你还会看到 ",[395,102535,102536],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[343,102539,102541],{"id":102540},"_6验证步骤","6.验证步骤",[19,102543,102544],{},"确认版本:",[389,102546,102547],{"className":24099,"code":101132,"language":24101,"meta":316,"style":316},[395,102548,102549],{"__ignoreMap":316},[398,102550,102551,102553,102555],{"class":400,"line":401},[398,102552,30573],{"class":2239},[398,102554,30551],{"class":457},[398,102556,101143],{"class":513},[19,102558,102559],{},"确认导入的是官方 bindings:",[389,102561,102563],{"className":24099,"code":102562,"language":24101,"meta":316,"style":316},"python -c \"import mujoco; print(mujoco)\"\n",[395,102564,102565],{"__ignoreMap":316},[398,102566,102567,102569,102571],{"class":400,"line":401},[398,102568,30573],{"class":2239},[398,102570,30551],{"class":457},[398,102572,102573],{"class":513}," \"import mujoco; print(mujoco)\"\n",[19,102575,102576],{},"运行程序:",[389,102578,102579],{"className":24099,"code":102497,"language":24101,"meta":316,"style":316},[395,102580,102581],{"__ignoreMap":316},[398,102582,102583,102585],{"class":400,"line":401},[398,102584,30573],{"class":2239},[398,102586,101479],{"class":513},[19,102588,102589,102590,102593,102594,28578],{},"检查 ",[395,102591,102592],{},"final time"," 是否约等于 ",[395,102595,102596],{},"1.0",[19,102598,102599],{},"再做几个小实验：",[38,102601,102602,102612,102620,102633],{},[41,102603,102604,102605,102607,102608,102611],{},"把 ",[395,102606,102132],{}," 改成 ",[395,102609,102610],{},"pos=\"0 0 2\"","，观察初始高度变化。",[41,102613,102604,102614,102607,102616,102619],{},[395,102615,102021],{},[395,102617,102618],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[41,102621,102604,102622,102607,102624,102627,102628,102630,102631,28578],{},[395,102623,102017],{},[395,102625,102626],{},"timestep=\"0.005\"","，观察 100 步后的 ",[395,102629,102592],{}," 是否变成约 ",[395,102632,35522],{},[41,102634,102635,102636,102639],{},"删除 ",[395,102637,102638],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,102641,102642],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[343,102644,102646],{"id":102645},"_7常见错误与解决方案","7.常见错误与解决方案",[14,102648,102650],{"id":102649},"modulenotfounderror-no-module-named-mujoco",[395,102651,102652],{},"ModuleNotFoundError: No module named 'mujoco'",[19,102654,102655],{},"解决:",[389,102657,102659],{"className":24099,"code":102658,"language":24101,"meta":316,"style":316},"pip install \"mujoco>=2.3\"\n",[395,102660,102661],{"__ignoreMap":316},[398,102662,102663,102665,102667],{"class":400,"line":401},[398,102664,24108],{"class":2239},[398,102666,24111],{"class":513},[398,102668,102669],{"class":513}," \"mujoco>=2.3\"\n",[14,102671,102673],{"id":102672},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,102675,102676],{},"先安装系统依赖:",[389,102678,102680],{"className":24099,"code":102679,"language":24101,"meta":316,"style":316},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[395,102681,102682],{"__ignoreMap":316},[398,102683,102684,102686,102688,102690,102692,102695,102697,102700,102702,102705,102707],{"class":400,"line":401},[398,102685,24854],{"class":2239},[398,102687,26508],{"class":513},[398,102689,24111],{"class":513},[398,102691,26593],{"class":457},[398,102693,102694],{"class":513}," mesa-libGL",[398,102696,101007],{"class":513},[398,102698,102699],{"class":513}," glfw",[398,102701,101027],{"class":513},[398,102703,102704],{"class":513}," libX11",[398,102706,101040],{"class":513},[398,102708,102709],{"class":513}," libXrandr\n",[14,102711,102713],{"id":102712},"xml-解析失败","XML 解析失败",[19,102715,102716],{},"检查:",[38,102718,102719,102722,102725,102731],{},[41,102720,102721],{},"标签是否闭合",[41,102723,102724],{},"属性是否带引号",[41,102726,102727,102728],{},"根节点是否是 ",[395,102729,102730],{},"\u003Cmujoco>",[41,102732,102733,102735,102736,102739],{},[395,102734,51993],{}," 是否放在 ",[395,102737,102738],{},"\u003Cworldbody>"," 内部",[14,102741,102743,102745,102746],{"id":102742},"final-time-不是严格等于-10",[395,102744,102592],{}," 不是严格等于 ",[395,102747,102596],{},[19,102749,102750],{},"这通常不是错误。浮点数计算可能得到：",[389,102752,102755],{"className":102753,"code":102754,"language":5464,"meta":316},[5462],"1.0000000000000007\n",[395,102756,102754],{"__ignoreMap":316},[19,102758,102759,102760,102762],{},"只要接近 ",[395,102761,102596],{}," 就正常。",[14,102764,102765],{"id":102765},"方块没有掉下来",[19,102767,102768],{},"检查：",[38,102770,102771,102777,102783,102788],{},[41,102772,102773,102774],{},"方块 body 里是否有 ",[395,102775,102776],{},"\u003Cfreejoint\u002F>",[41,102778,102779,102780],{},"重力是否是 ",[395,102781,102782],{},"0 0 -9.81",[41,102784,102785,102786],{},"是否真的调用了 ",[395,102787,100878],{},[41,102789,102790,102791,102793,102794],{},"你看的是否是 ",[395,102792,102536],{},"，不是 ",[395,102795,102796],{},"initial qpos",[343,102798,102800],{"id":102799},"_8本章小结","8.本章小结",[19,102802,102803],{},"本章你已经完成了 MuJoCo 的最小闭环：",[389,102805,102808],{"className":102806,"code":102807,"language":5464,"meta":316},[5462],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[395,102809,102807],{"__ignoreMap":316},[19,102811,102812],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[5403,102814,102815],{},"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":316,"searchDepth":317,"depth":317,"links":102817},[102818,102819,102820,102825,102829,102830,102831,102839],{"id":100839,"depth":317,"text":100840},{"id":100962,"depth":317,"text":100963},{"id":101237,"depth":317,"text":101238,"children":102821},[102822,102823,102824],{"id":101275,"depth":320,"text":101276},{"id":101369,"depth":320,"text":101370},{"id":101421,"depth":320,"text":101422},{"id":101445,"depth":317,"text":101446,"children":102826},[102827,102828],{"id":101765,"depth":320,"text":101765},{"id":101901,"depth":320,"text":101901},{"id":102508,"depth":317,"text":102509},{"id":102540,"depth":317,"text":102541},{"id":102645,"depth":317,"text":102646,"children":102832},[102833,102834,102835,102836,102838],{"id":102649,"depth":320,"text":102652},{"id":102672,"depth":320,"text":102673},{"id":102712,"depth":320,"text":102713},{"id":102742,"depth":320,"text":102837},"final time 不是严格等于 1.0",{"id":102765,"depth":320,"text":102765},{"id":102799,"depth":317,"text":102800},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100831,"description":316},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102846,"title":102847,"body":102848,"description":316,"extension":326,"meta":104504,"navigation":328,"path":104505,"seo":104506,"stem":104507,"__hash__":104508},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102849,"toc":104480},[102850,102853,102855,102858,102861,102878,102973,102976,102982,102984,102986,103010,103013,103027,103030,103071,103073,103086,103088,103091,103139,103151,103154,103157,103163,103176,103243,103246,103265,103268,103271,103277,103279,103288,103291,103295,103304,103386,103395,103399,103405,103419,103429,103431,103761,103764,103776,103778,103789,103791,103794,103812,103815,103818,103836,103847,103850,103865,103875,103877,103898,103915,103935,103941,103981,103997,104013,104019,104022,104046,104062,104067,104097,104114,104139,104142,104157,104166,104181,104190,104205,104212,104214,104224,104237,104244,104247,104286,104293,104295,104347,104349,104355,104358,104365,104372,104375,104377,104395,104398,104401,104435,104447,104449,104452,104474,104477],[10,102851,102847],{"id":102852},"_2xml-与-mjcf-物理建模基础",[343,102854,100840],{"id":100839},[19,102856,102857],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,102859,102860],{},"本章结束后，你应该能看懂一个简单模型里：",[38,102862,102863,102866,102869,102872,102875],{},[41,102864,102865],{},"地面在哪里。",[41,102867,102868],{},"物体初始位置在哪里。",[41,102870,102871],{},"几何体是什么形状。",[41,102873,102874],{},"哪些 body 可以自由运动。",[41,102876,102877],{},"如何用名字在 Python 里找到 XML 中的对象。",[84,102879,102880,102890],{},[87,102881,102882],{},[90,102883,102884,102887],{},[93,102885,102886],{"align":95},"标签",[93,102888,102889],{"align":95},"作用",[101,102891,102892,102901,102911,102920,102930,102940,102953,102963],{},[90,102893,102894,102898],{},[106,102895,102896],{"align":95},[395,102897,102730],{},[106,102899,102900],{"align":95},"根节点",[90,102902,102903,102908],{},[106,102904,102905],{"align":95},[395,102906,102907],{},"\u003Coption>",[106,102909,102910],{"align":95},"仿真参数",[90,102912,102913,102917],{},[106,102914,102915],{"align":95},[395,102916,102738],{},[106,102918,102919],{"align":95},"世界中的物体",[90,102921,102922,102927],{},[106,102923,102924],{"align":95},[395,102925,102926],{},"\u003Cbody>",[106,102928,102929],{"align":95},"刚体",[90,102931,102932,102937],{},[106,102933,102934],{"align":95},[395,102935,102936],{},"\u003Cgeom>",[106,102938,102939],{"align":95},"几何体、碰撞体、可视体",[90,102941,102942,102950],{},[106,102943,102944,25256,102947],{"align":95},[395,102945,102946],{},"\u003Cjoint>",[395,102948,102949],{},"\u003Cfreejoint>",[106,102951,102952],{"align":95},"关节",[90,102954,102955,102960],{},[106,102956,102957],{"align":95},[395,102958,102959],{},"\u003Csite>",[106,102961,102962],{"align":95},"标记点",[90,102964,102965,102970],{},[106,102966,102967],{"align":95},[395,102968,102969],{},"\u003Cactuator>",[106,102971,102972],{"align":95},"控制器",[19,102974,102975],{},"初学时可以先记住：",[389,102977,102980],{"className":102978,"code":102979,"language":5464,"meta":316},[5462],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[395,102981,102979],{"__ignoreMap":316},[343,102983,100963],{"id":100962},[19,102985,100966],{},[389,102987,102989],{"className":24099,"code":102988,"language":24101,"meta":316,"style":316},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[395,102990,102991],{"__ignoreMap":316},[398,102992,102993,102995,102997,102999,103001,103003,103005,103007],{"class":400,"line":401},[398,102994,24854],{"class":2239},[398,102996,26508],{"class":513},[398,102998,24111],{"class":513},[398,103000,26593],{"class":457},[398,103002,102694],{"class":513},[398,103004,101007],{"class":513},[398,103006,102699],{"class":513},[398,103008,103009],{"class":513}," glfw-devel\n",[19,103011,103012],{},"pip:",[389,103014,103015],{"className":24099,"code":101112,"language":24101,"meta":316,"style":316},[395,103016,103017],{"__ignoreMap":316},[398,103018,103019,103021,103023,103025],{"class":400,"line":401},[398,103020,24108],{"class":2239},[398,103022,24111],{"class":513},[398,103024,101123],{"class":513},[398,103026,101126],{"class":513},[19,103028,103029],{},"conda:",[389,103031,103033],{"className":24099,"code":103032,"language":24101,"meta":316,"style":316},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[395,103034,103035,103052,103061],{"__ignoreMap":316},[398,103036,103037,103039,103041,103043,103046,103048,103050],{"class":400,"line":401},[398,103038,30523],{"class":2239},[398,103040,29369],{"class":513},[398,103042,25393],{"class":457},[398,103044,103045],{"class":513}," mujoco-xml",[398,103047,101168],{"class":513},[398,103049,101171],{"class":457},[398,103051,101174],{"class":457},[398,103053,103054,103056,103058],{"class":400,"line":317},[398,103055,30523],{"class":2239},[398,103057,101181],{"class":513},[398,103059,103060],{"class":513}," mujoco-xml\n",[398,103062,103063,103065,103067,103069],{"class":400,"line":320},[398,103064,24108],{"class":2239},[398,103066,24111],{"class":513},[398,103068,101123],{"class":513},[398,103070,101126],{"class":513},[19,103072,101197],{},[38,103074,103075,103078,103083],{},[41,103076,103077],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[41,103079,103080,103081,28578],{},"本章使用基础标签，适用于 ",[395,103082,101220],{},[41,103084,103085],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[343,103087,101238],{"id":101237},[19,103089,103090],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[389,103092,103094],{"className":53260,"code":103093,"language":53262,"meta":316,"style":316},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[395,103095,103096,103110,103118,103123,103131],{"__ignoreMap":316},[398,103097,103098,103100,103102,103104,103106,103108],{"class":400,"line":401},[398,103099,1312],{"class":408},[398,103101,101214],{"class":51493},[398,103103,101968],{"class":2239},[398,103105,454],{"class":408},[398,103107,62872],{"class":513},[398,103109,51500],{"class":408},[398,103111,103112,103114,103116],{"class":400,"line":317},[398,103113,52337],{"class":408},[398,103115,102034],{"class":51493},[398,103117,51500],{"class":408},[398,103119,103120],{"class":400,"line":320},[398,103121,103122],{"class":408},"    ...\n",[398,103124,103125,103127,103129],{"class":400,"line":1470},[398,103126,52610],{"class":408},[398,103128,102034],{"class":51493},[398,103130,51500],{"class":408},[398,103132,103133,103135,103137],{"class":400,"line":1476},[398,103134,51978],{"class":408},[398,103136,101214],{"class":51493},[398,103138,51500],{"class":408},[19,103140,103141,103143,103144,103146,103147,103150],{},[395,103142,51993],{}," 表示刚体。",[395,103145,101313],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[395,103148,103149],{},"joint"," 表示刚体相对父刚体如何运动。",[14,103152,103153],{"id":103153},"层级结构非常重要",[19,103155,103156],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[389,103158,103161],{"className":103159,"code":103160,"language":5464,"meta":316},[5462],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[395,103162,103160],{"__ignoreMap":316},[19,103164,103165,101211,103168,103171,103172,103175],{},[395,103166,103167],{},"red_box_geom",[395,103169,103170],{},"box_center"," 都属于 ",[395,103173,103174],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[389,103177,103179],{"className":53260,"code":103178,"language":53262,"meta":316,"style":316},"\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",[395,103180,103181,103201,103215,103235],{"__ignoreMap":316},[398,103182,103183,103185,103187,103189,103191,103193,103195,103197,103199],{"class":400,"line":401},[398,103184,1312],{"class":408},[398,103186,51993],{"class":51493},[398,103188,15197],{"class":2239},[398,103190,454],{"class":408},[398,103192,53684],{"class":513},[398,103194,101299],{"class":2239},[398,103196,454],{"class":408},[398,103198,101304],{"class":513},[398,103200,51500],{"class":408},[398,103202,103203,103205,103207,103209,103211,103213],{"class":400,"line":317},[398,103204,52337],{"class":408},[398,103206,101813],{"class":51493},[398,103208,15197],{"class":2239},[398,103210,454],{"class":408},[398,103212,102154],{"class":513},[398,103214,101337],{"class":408},[398,103216,103217,103219,103221,103223,103225,103227,103229,103231,103233],{"class":400,"line":320},[398,103218,52337],{"class":408},[398,103220,101313],{"class":51493},[398,103222,54017],{"class":2239},[398,103224,454],{"class":408},[398,103226,53684],{"class":513},[398,103228,101329],{"class":2239},[398,103230,454],{"class":408},[398,103232,101334],{"class":513},[398,103234,101337],{"class":408},[398,103236,103237,103239,103241],{"class":400,"line":1470},[398,103238,51978],{"class":408},[398,103240,51993],{"class":51493},[398,103242,51500],{"class":408},[19,103244,103245],{},"含义:",[38,103247,103248,103254,103259,103262],{},[41,103249,103250,103251,103253],{},"创建名为 ",[395,103252,53907],{}," 的刚体",[41,103255,103256,103257],{},"初始位置在世界坐标 ",[395,103258,101362],{},[41,103260,103261],{},"它有一个自由关节",[41,103263,103264],{},"它有一个盒子几何体",[14,103266,103267],{"id":103267},"坐标怎么理解",[19,103269,103270],{},"MuJoCo 默认使用三维坐标：",[389,103272,103275],{"className":103273,"code":103274,"language":5464,"meta":316},[5462],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[395,103276,103274],{"__ignoreMap":316},[19,103278,14910],{},[389,103280,103282],{"className":53260,"code":103281,"language":53262,"meta":316,"style":316},"pos=\"0 0 1\"\n",[395,103283,103284],{"__ignoreMap":316},[398,103285,103286],{"class":400,"line":401},[398,103287,103281],{"class":408},[19,103289,103290],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[14,103292,103294],{"id":103293},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,103296,103297,103298,82723,103301,103303],{},"不同 ",[395,103299,103300],{},"type",[395,103302,31689],{}," 含义不同：",[84,103305,103306,103321],{},[87,103307,103308],{},[90,103309,103310,103314,103319],{},[93,103311,103312],{"align":95},[395,103313,103300],{},[93,103315,103316,103318],{"align":95},[395,103317,31689],{}," 示例",[93,103320,100893],{"align":95},[101,103322,103323,103337,103352,103371],{},[90,103324,103325,103329,103334],{},[106,103326,103327],{"align":95},[395,103328,53907],{},[106,103330,103331],{"align":95},[395,103332,103333],{},"size=\"0.1 0.2 0.3\"",[106,103335,103336],{"align":95},"x\u002Fy\u002Fz 半边长，不是完整长度",[90,103338,103339,103344,103349],{},[106,103340,103341],{"align":95},[395,103342,103343],{},"sphere",[106,103345,103346],{"align":95},[395,103347,103348],{},"size=\"0.1\"",[106,103350,103351],{"align":95},"球半径",[90,103353,103354,103359,103364],{},[106,103355,103356],{"align":95},[395,103357,103358],{},"capsule",[106,103360,103361],{"align":95},[395,103362,103363],{},"size=\"0.03\"",[106,103365,103366,103367,103370],{"align":95},"胶囊半径，长度常用 ",[395,103368,103369],{},"fromto"," 指定",[90,103372,103373,103378,103383],{},[106,103374,103375],{"align":95},[395,103376,103377],{},"plane",[106,103379,103380],{"align":95},[395,103381,103382],{},"size=\"3 3 0.1\"",[106,103384,103385],{"align":95},"可视平面大小，通常当地面",[19,103387,103388,103389,103391,103392,103394],{},"最容易踩坑的是 box：",[395,103390,102217],{}," 表示边长大约是 ",[395,103393,32230],{},"，因为 MuJoCo 用的是半边长。",[14,103396,103398],{"id":103397},"site-是什么","site 是什么",[19,103400,103401,103404],{},[395,103402,103403],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[38,103406,103407,103410,103413,103416],{},[41,103408,103409],{},"标记机械臂末端。",[41,103411,103412],{},"标记目标位置。",[41,103414,103415],{},"放传感器或相机参考点。",[41,103417,103418],{},"在 Python 中读取某个关键点的世界坐标。",[19,103420,103421,103422,101211,103425,103428],{},"在后面的 Reacher 任务中，",[395,103423,103424],{},"tip",[395,103426,103427],{},"target"," 就会用 site 表示。",[343,103430,101446],{"id":101445},[389,103432,103434],{"className":30571,"code":103433,"language":30573,"meta":316,"style":316},"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",[395,103435,103436,103442,103452,103456,103460,103468,103473,103477,103481,103485,103490,103494,103499,103504,103509,103514,103518,103522,103526,103530,103534,103538,103550,103562,103570,103574,103589,103604,103608,103621,103636,103649,103662,103666,103682,103686,103690,103701,103713,103725,103737,103741,103745,103757],{"__ignoreMap":316},[398,103437,103438,103440],{"class":400,"line":401},[398,103439,30585],{"class":404},[398,103441,101494],{"class":408},[398,103443,103444,103446,103448,103450],{"class":400,"line":317},[398,103445,30585],{"class":404},[398,103447,31573],{"class":408},[398,103449,31576],{"class":404},[398,103451,31579],{"class":408},[398,103453,103454],{"class":400,"line":320},[398,103455,2676],{"emptyLinePlaceholder":328},[398,103457,103458],{"class":400,"line":1470},[398,103459,2676],{"emptyLinePlaceholder":328},[398,103461,103462,103464,103466],{"class":400,"line":1476},[398,103463,101507],{"class":457},[398,103465,13841],{"class":404},[398,103467,101512],{"class":513},[398,103469,103470],{"class":400,"line":1490},[398,103471,103472],{"class":513},"\u003Cmujoco model=\"xml_basic\">\n",[398,103474,103475],{"class":400,"line":1496},[398,103476,101522],{"class":513},[398,103478,103479],{"class":400,"line":1587},[398,103480,2676],{"emptyLinePlaceholder":328},[398,103482,103483],{"class":400,"line":1593},[398,103484,101531],{"class":513},[398,103486,103487],{"class":400,"line":1605},[398,103488,103489],{"class":513},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[398,103491,103492],{"class":400,"line":1888},[398,103493,2676],{"emptyLinePlaceholder":328},[398,103495,103496],{"class":400,"line":1893},[398,103497,103498],{"class":513},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[398,103500,103501],{"class":400,"line":1899},[398,103502,103503],{"class":513},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[398,103505,103506],{"class":400,"line":1904},[398,103507,103508],{"class":513},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[398,103510,103511],{"class":400,"line":1918},[398,103512,103513],{"class":513},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[398,103515,103516],{"class":400,"line":1923},[398,103517,101560],{"class":513},[398,103519,103520],{"class":400,"line":1929},[398,103521,101565],{"class":513},[398,103523,103524],{"class":400,"line":1950},[398,103525,101570],{"class":513},[398,103527,103528],{"class":400,"line":1955},[398,103529,95891],{"class":513},[398,103531,103532],{"class":400,"line":1969},[398,103533,2676],{"emptyLinePlaceholder":328},[398,103535,103536],{"class":400,"line":1974},[398,103537,2676],{"emptyLinePlaceholder":328},[398,103539,103540,103542,103544,103546,103548],{"class":400,"line":2003},[398,103541,32140],{"class":404},[398,103543,2249],{"class":2239},[398,103545,101591],{"class":408},[398,103547,95879],{"class":457},[398,103549,4015],{"class":408},[398,103551,103552,103554,103556,103558,103560],{"class":400,"line":2008},[398,103553,101600],{"class":408},[398,103555,454],{"class":404},[398,103557,101605],{"class":408},[398,103559,101507],{"class":457},[398,103561,415],{"class":408},[398,103563,103564,103566,103568],{"class":400,"line":2025},[398,103565,101614],{"class":408},[398,103567,454],{"class":404},[398,103569,101619],{"class":408},[398,103571,103572],{"class":400,"line":2030},[398,103573,2676],{"emptyLinePlaceholder":328},[398,103575,103576,103579,103581,103584,103587],{"class":400,"line":2035},[398,103577,103578],{"class":408},"    box_body_id ",[398,103580,454],{"class":404},[398,103582,103583],{"class":408}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[398,103585,103586],{"class":513},"\"red_box\"",[398,103588,415],{"class":408},[398,103590,103591,103594,103596,103599,103602],{"class":400,"line":2040},[398,103592,103593],{"class":408},"    site_id ",[398,103595,454],{"class":404},[398,103597,103598],{"class":408}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[398,103600,103601],{"class":513},"\"box_center\"",[398,103603,415],{"class":408},[398,103605,103606],{"class":400,"line":2054},[398,103607,2676],{"emptyLinePlaceholder":328},[398,103609,103610,103612,103615,103617,103619],{"class":400,"line":2059},[398,103611,3377],{"class":404},[398,103613,103614],{"class":408}," box_body_id ",[398,103616,1312],{"class":404},[398,103618,4369],{"class":457},[398,103620,4015],{"class":408},[398,103622,103623,103626,103629,103631,103634],{"class":400,"line":2853},[398,103624,103625],{"class":404},"        raise",[398,103627,103628],{"class":457}," RuntimeError",[398,103630,409],{"class":408},[398,103632,103633],{"class":513},"\"body red_box not found\"",[398,103635,415],{"class":408},[398,103637,103638,103640,103643,103645,103647],{"class":400,"line":2867},[398,103639,3377],{"class":404},[398,103641,103642],{"class":408}," site_id ",[398,103644,1312],{"class":404},[398,103646,4369],{"class":457},[398,103648,4015],{"class":408},[398,103650,103651,103653,103655,103657,103660],{"class":400,"line":2875},[398,103652,103625],{"class":404},[398,103654,103628],{"class":457},[398,103656,409],{"class":408},[398,103658,103659],{"class":513},"\"site box_center not found\"",[398,103661,415],{"class":408},[398,103663,103664],{"class":400,"line":2880},[398,103665,2676],{"emptyLinePlaceholder":328},[398,103667,103668,103670,103672,103674,103676,103678,103680],{"class":400,"line":2886},[398,103669,3477],{"class":404},[398,103671,101694],{"class":408},[398,103673,26236],{"class":404},[398,103675,32636],{"class":457},[398,103677,409],{"class":408},[398,103679,1998],{"class":457},[398,103681,30979],{"class":408},[398,103683,103684],{"class":400,"line":2892},[398,103685,101709],{"class":408},[398,103687,103688],{"class":400,"line":2897},[398,103689,2676],{"emptyLinePlaceholder":328},[398,103691,103692,103694,103696,103699],{"class":400,"line":8225},[398,103693,31492],{"class":457},[398,103695,409],{"class":408},[398,103697,103698],{"class":513},"\"simulation time:\"",[398,103700,101671],{"class":408},[398,103702,103703,103705,103707,103710],{"class":400,"line":8249},[398,103704,31492],{"class":457},[398,103706,409],{"class":408},[398,103708,103709],{"class":513},"\"box body position:\"",[398,103711,103712],{"class":408},", data.xpos[box_body_id].copy())\n",[398,103714,103715,103717,103719,103722],{"class":400,"line":8254},[398,103716,31492],{"class":457},[398,103718,409],{"class":408},[398,103720,103721],{"class":513},"\"site position:\"",[398,103723,103724],{"class":408},", data.site_xpos[site_id].copy())\n",[398,103726,103727,103729,103731,103734],{"class":400,"line":8260},[398,103728,31492],{"class":457},[398,103730,409],{"class":408},[398,103732,103733],{"class":513},"\"box qpos:\"",[398,103735,103736],{"class":408},", np.array(data.qpos))\n",[398,103738,103739],{"class":400,"line":8287},[398,103740,2676],{"emptyLinePlaceholder":328},[398,103742,103743],{"class":400,"line":8292},[398,103744,2676],{"emptyLinePlaceholder":328},[398,103746,103747,103749,103751,103753,103755],{"class":400,"line":8298},[398,103748,1807],{"class":404},[398,103750,31413],{"class":457},[398,103752,101752],{"class":404},[398,103754,101755],{"class":513},[398,103756,4015],{"class":408},[398,103758,103759],{"class":400,"line":8310},[398,103760,101762],{"class":408},[19,103762,103763],{},"保存为：",[389,103765,103767],{"className":24099,"code":103766,"language":24101,"meta":316,"style":316},"touch ch2_xml_basic.py\n",[395,103768,103769],{"__ignoreMap":316},[398,103770,103771,103773],{"class":400,"line":401},[398,103772,101476],{"class":2239},[398,103774,103775],{"class":513}," ch2_xml_basic.py\n",[19,103777,102494],{},[389,103779,103781],{"className":24099,"code":103780,"language":24101,"meta":316,"style":316},"python ch2_xml_basic.py\n",[395,103782,103783],{"__ignoreMap":316},[398,103784,103785,103787],{"class":400,"line":401},[398,103786,30573],{"class":2239},[398,103788,103775],{"class":513},[14,103790,101765],{"id":101765},[19,103792,103793],{},"用名字查找 body：",[389,103795,103797],{"className":30571,"code":103796,"language":30573,"meta":316,"style":316},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[395,103798,103799],{"__ignoreMap":316},[398,103800,103801,103804,103806,103808,103810],{"class":400,"line":401},[398,103802,103803],{"class":408},"box_body_id ",[398,103805,454],{"class":404},[398,103807,103583],{"class":408},[398,103809,103586],{"class":513},[398,103811,415],{"class":408},[19,103813,103814],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,103816,103817],{},"用名字查找 site：",[389,103819,103821],{"className":30571,"code":103820,"language":30573,"meta":316,"style":316},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[395,103822,103823],{"__ignoreMap":316},[398,103824,103825,103828,103830,103832,103834],{"class":400,"line":401},[398,103826,103827],{"class":408},"site_id ",[398,103829,454],{"class":404},[398,103831,103598],{"class":408},[398,103833,103601],{"class":513},[398,103835,415],{"class":408},[19,103837,103838,103839,103842,103843,103846],{},"注意第二个参数是对象类型。查 body 就用 ",[395,103840,103841],{},"mjOBJ_BODY","，查 site 就用 ",[395,103844,103845],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,103848,103849],{},"读取世界坐标：",[389,103851,103853],{"className":30571,"code":103852,"language":30573,"meta":316,"style":316},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[395,103854,103855,103860],{"__ignoreMap":316},[398,103856,103857],{"class":400,"line":401},[398,103858,103859],{"class":408},"data.xpos[box_body_id]\n",[398,103861,103862],{"class":400,"line":317},[398,103863,103864],{"class":408},"data.site_xpos[site_id]\n",[19,103866,103867,103870,103871,103874],{},[395,103868,103869],{},"xpos"," 是 body 的世界坐标，",[395,103872,103873],{},"site_xpos"," 是 site 的世界坐标。",[14,103876,101901],{"id":101901},[389,103878,103880],{"className":30571,"code":103879,"language":30573,"meta":316,"style":316},"import mujoco\nimport numpy as np\n",[395,103881,103882,103888],{"__ignoreMap":316},[398,103883,103884,103886],{"class":400,"line":401},[398,103885,30585],{"class":404},[398,103887,101494],{"class":408},[398,103889,103890,103892,103894,103896],{"class":400,"line":317},[398,103891,30585],{"class":404},[398,103893,31573],{"class":408},[398,103895,31576],{"class":404},[398,103897,31579],{"class":408},[19,103899,103900,103901,103904,103905,103908,103909,614,103912,28578],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[395,103902,103903],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[395,103906,103907],{},"as np"," 是习惯写法，后面就可以写 ",[395,103910,103911],{},"np.array(...)",[395,103913,103914],{},"np.round(...)",[389,103916,103917],{"className":30571,"code":101788,"language":30573,"meta":316,"style":316},[395,103918,103919,103927,103931],{"__ignoreMap":316},[398,103920,103921,103923,103925],{"class":400,"line":401},[398,103922,101507],{"class":457},[398,103924,13841],{"class":404},[398,103926,101512],{"class":513},[398,103928,103929],{"class":400,"line":317},[398,103930,101803],{"class":513},[398,103932,103933],{"class":400,"line":320},[398,103934,95891],{"class":513},[19,103936,103937,103938,28578],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[395,103939,103940],{},"mujoco.MjModel.from_xml_string(XML)",[389,103942,103944],{"className":53260,"code":103943,"language":53262,"meta":316,"style":316},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[395,103945,103946],{"__ignoreMap":316},[398,103947,103948,103950,103952,103954,103956,103958,103960,103962,103965,103967,103969,103972,103974,103976,103979],{"class":400,"line":401},[398,103949,1312],{"class":408},[398,103951,103403],{"class":51493},[398,103953,15197],{"class":2239},[398,103955,454],{"class":408},[398,103957,103601],{"class":513},[398,103959,101299],{"class":2239},[398,103961,454],{"class":408},[398,103963,103964],{"class":513},"\"0 0 0\"",[398,103966,101329],{"class":2239},[398,103968,454],{"class":408},[398,103970,103971],{"class":513},"\"0.03\"",[398,103973,78960],{"class":2239},[398,103975,454],{"class":408},[398,103977,103978],{"class":513},"\"0 1 0 1\"",[398,103980,101337],{"class":408},[19,103982,103983,103985,103986,103989,103990,103992,103993,103996],{},[395,103984,103403],{}," 是标记点。",[395,103987,103988],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[395,103991,103363],{}," 表示显示出来的小球大小。",[395,103994,103995],{},"rgba=\"0 1 0 1\""," 表示绿色。",[389,103998,103999],{"className":30571,"code":103796,"language":30573,"meta":316,"style":316},[395,104000,104001],{"__ignoreMap":316},[398,104002,104003,104005,104007,104009,104011],{"class":400,"line":401},[398,104004,103803],{"class":408},[398,104006,454],{"class":404},[398,104008,103583],{"class":408},[398,104010,103586],{"class":513},[398,104012,415],{"class":408},[19,104014,104015,104016,104018],{},"这行的作用是：根据名字 ",[395,104017,103586],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,104020,104021],{},"拆开看：",[38,104023,104024,104030,104035,104041],{},[41,104025,104026,104029],{},[395,104027,104028],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[41,104031,104032,104034],{},[395,104033,102278],{}," 是被查询的模型。",[41,104036,104037,104040],{},[395,104038,104039],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[41,104042,104043,104045],{},[395,104044,103586],{}," 是 XML 里写的名字。",[389,104047,104048],{"className":30571,"code":103820,"language":30573,"meta":316,"style":316},[395,104049,104050],{"__ignoreMap":316},[398,104051,104052,104054,104056,104058,104060],{"class":400,"line":401},[398,104053,103827],{"class":408},[398,104055,454],{"class":404},[398,104057,103598],{"class":408},[398,104059,103601],{"class":513},[398,104061,415],{"class":408},[19,104063,104064,104065,28578],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[395,104066,103601],{},[389,104068,104070],{"className":30571,"code":104069,"language":30573,"meta":316,"style":316},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[395,104071,104072,104084],{"__ignoreMap":316},[398,104073,104074,104076,104078,104080,104082],{"class":400,"line":401},[398,104075,1807],{"class":404},[398,104077,103614],{"class":408},[398,104079,1312],{"class":404},[398,104081,4369],{"class":457},[398,104083,4015],{"class":408},[398,104085,104086,104089,104091,104093,104095],{"class":400,"line":317},[398,104087,104088],{"class":404},"    raise",[398,104090,103628],{"class":457},[398,104092,409],{"class":408},[398,104094,103633],{"class":513},[398,104096,415],{"class":408},[19,104098,104099,104101,104102,104105,104106,104109,104110,104113],{},[395,104100,1807],{}," 是条件判断。",[395,104103,104104],{},"mj_name2id"," 找不到对象时会返回 ",[395,104107,104108],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[395,104111,104112],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[389,104115,104117],{"className":30571,"code":104116,"language":30573,"meta":316,"style":316},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[395,104118,104119,104135],{"__ignoreMap":316},[398,104120,104121,104123,104125,104127,104129,104131,104133],{"class":400,"line":401},[398,104122,3301],{"class":404},[398,104124,101694],{"class":408},[398,104126,26236],{"class":404},[398,104128,32636],{"class":457},[398,104130,409],{"class":408},[398,104132,1998],{"class":457},[398,104134,30979],{"class":408},[398,104136,104137],{"class":400,"line":317},[398,104138,101892],{"class":408},[19,104140,104141],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[389,104143,104145],{"className":30571,"code":104144,"language":30573,"meta":316,"style":316},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[395,104146,104147],{"__ignoreMap":316},[398,104148,104149,104151,104153,104155],{"class":400,"line":401},[398,104150,30608],{"class":457},[398,104152,409],{"class":408},[398,104154,103709],{"class":513},[398,104156,103712],{"class":408},[19,104158,104159,104161,104162,104165],{},[395,104160,101272],{}," 保存所有 body 的世界坐标。",[395,104163,104164],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[389,104167,104169],{"className":30571,"code":104168,"language":30573,"meta":316,"style":316},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[395,104170,104171],{"__ignoreMap":316},[398,104172,104173,104175,104177,104179],{"class":400,"line":401},[398,104174,30608],{"class":457},[398,104176,409],{"class":408},[398,104178,103721],{"class":513},[398,104180,103724],{"class":408},[19,104182,104183,104186,104187,104189],{},[395,104184,104185],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[395,104188,103170],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[389,104191,104193],{"className":30571,"code":104192,"language":30573,"meta":316,"style":316},"print(\"box qpos:\", np.array(data.qpos))\n",[395,104194,104195],{"__ignoreMap":316},[398,104196,104197,104199,104201,104203],{"class":400,"line":401},[398,104198,30608],{"class":457},[398,104200,409],{"class":408},[398,104202,103733],{"class":513},[398,104204,103736],{"class":408},[19,104206,104207,104208,104211],{},"这里打印广义位置数组。",[395,104209,104210],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[343,104213,102509],{"id":102508},[19,104215,104216,104217,104220,104221,28578],{},"程序会输出 ",[395,104218,104219],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[395,104222,104223],{},"qpos",[19,104225,104226,104228,104229,104232,104233,104236],{},[395,104227,104164],{}," 是 body 的世界坐标位置。",[395,104230,104231],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[395,104234,104235],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,104238,82415,104239,82723,104241,104243],{},[395,104240,103170],{},[395,104242,103988],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,104245,104246],{},"如果你把 site 改成：",[389,104248,104250],{"className":53260,"code":104249,"language":53262,"meta":316,"style":316},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[395,104251,104252],{"__ignoreMap":316},[398,104253,104254,104256,104258,104260,104262,104265,104267,104269,104272,104274,104276,104278,104280,104282,104284],{"class":400,"line":401},[398,104255,1312],{"class":408},[398,104257,103403],{"class":51493},[398,104259,15197],{"class":2239},[398,104261,454],{"class":408},[398,104263,104264],{"class":513},"\"box_top\"",[398,104266,101299],{"class":2239},[398,104268,454],{"class":408},[398,104270,104271],{"class":513},"\"0 0 0.15\"",[398,104273,101329],{"class":2239},[398,104275,454],{"class":408},[398,104277,103971],{"class":513},[398,104279,78960],{"class":2239},[398,104281,454],{"class":408},[398,104283,103978],{"class":513},[398,104285,101337],{"class":408},[19,104287,104288,104289,104292],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[395,104290,104291],{},"site position"," 就会比 body position 的 z 坐标更高。",[343,104294,102541],{"id":102540},[38,104296,104297,104306,104309,104316,104322,104333],{},[41,104298,102604,104299,104301,104302,102607,104304,28578],{},[395,104300,103174],{}," 的初始高度从 ",[395,104303,619],{},[395,104305,486],{},[41,104307,104308],{},"重新运行程序。",[41,104310,104311,104312,104315],{},"观察 ",[395,104313,104314],{},"box qpos"," 和最终位置是否变化。",[41,104317,104318,104319,104321],{},"故意把 ",[395,104320,103403],{}," 名称改错，确认程序能报错。",[41,104323,102604,104324,104326,104327,102607,104329,104332],{},[395,104325,101313],{}," 的颜色 ",[395,104328,102225],{},[395,104330,104331],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[41,104334,102604,104335,82723,104337,102607,104340,104343,104344,104346],{},[395,104336,103170],{},[395,104338,104339],{},"pos",[395,104341,104342],{},"0 0 0.2","，观察 ",[395,104345,104291],{}," 如何变化。",[343,104348,102646],{"id":102645},[14,104350,104352],{"id":104351},"xml-error-schema-violation",[395,104353,104354],{},"XML Error: Schema violation",[19,104356,104357],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[14,104359,104361,81483,104363],{"id":104360},"mj_name2id-返回-1",[395,104362,104104],{},[395,104364,104108],{},[19,104366,104367,104368,104371],{},"说明名字没有找到。检查 XML 中 ",[395,104369,104370],{},"name=\"...\"","，并确认对象类型正确。",[14,104373,104374],{"id":104374},"物体不下落",[19,104376,102716],{},[38,104378,104379,104384,104389],{},[41,104380,104381,104382],{},"body 是否有 ",[395,104383,101813],{},[41,104385,104386,104387],{},"gravity 是否为 ",[395,104388,102782],{},[41,104390,104391,104392,104394],{},"body 是否被固定在 ",[395,104393,102034],{}," 中",[14,104396,104397],{"id":104397},"坐标看起来不符合预期",[19,104399,104400],{},"先区分两种坐标：",[84,104402,104403,104412],{},[87,104404,104405],{},[90,104406,104407,104410],{},[93,104408,104409],{"align":95},"坐标",[93,104411,100893],{"align":95},[101,104413,104414,104424],{},[90,104415,104416,104421],{},[106,104417,104418,104419],{"align":95},"XML 里的 ",[395,104420,104339],{},[106,104422,104423],{"align":95},"相对父 body 的局部坐标",[90,104425,104426,104432],{},[106,104427,104428,25256,104430],{"align":95},[395,104429,101272],{},[395,104431,104185],{},[106,104433,104434],{"align":95},"仿真更新后的世界坐标",[19,104436,104437,104438,104440,104441,82732,104444,104446],{},"如果你修改了 ",[395,104439,101263],{},"，但还没调用 ",[395,104442,104443],{},"mj_forward",[395,104445,101408],{},"，世界坐标可能还没有更新。",[343,104448,102800],{"id":102799},[19,104450,104451],{},"MJCF 建模先掌握四件事：",[38,104453,104454,104459,104464,104469],{},[41,104455,104456,104458],{},[395,104457,51993],{}," 表示刚体层级。",[41,104460,104461,104463],{},[395,104462,101313],{}," 表示形状、碰撞和质量。",[41,104465,104466,104468],{},[395,104467,103149],{}," 决定 body 能不能动、怎么动。",[41,104470,104471,104473],{},[395,104472,103403],{}," 用来标记关键点，方便 Python 读取位置。",[19,104475,104476],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[5403,104478,104479],{},"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":316,"searchDepth":317,"depth":317,"links":104481},[104482,104483,104484,104490,104494,104495,104496,104503],{"id":100839,"depth":317,"text":100840},{"id":100962,"depth":317,"text":100963},{"id":101237,"depth":317,"text":101238,"children":104485},[104486,104487,104488,104489],{"id":103153,"depth":320,"text":103153},{"id":103267,"depth":320,"text":103267},{"id":103293,"depth":320,"text":103294},{"id":103397,"depth":320,"text":103398},{"id":101445,"depth":317,"text":101446,"children":104491},[104492,104493],{"id":101765,"depth":320,"text":101765},{"id":101901,"depth":320,"text":101901},{"id":102508,"depth":317,"text":102509},{"id":102540,"depth":317,"text":102541},{"id":102645,"depth":317,"text":102646,"children":104497},[104498,104499,104501,104502],{"id":104351,"depth":320,"text":104354},{"id":104360,"depth":320,"text":104500},"mj_name2id 返回 -1",{"id":104374,"depth":320,"text":104374},{"id":104397,"depth":320,"text":104397},{"id":102799,"depth":317,"text":102800},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102847,"description":316},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104510,"title":104511,"body":104512,"description":316,"extension":326,"meta":106007,"navigation":328,"path":106008,"seo":106009,"stem":106010,"__hash__":106011},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104513,"toc":105979},[104514,104517,104519,104522,104525,104563,104566,104572,104575,104577,104579,104606,104608,104622,104624,104665,104667,104691,104693,104696,104705,104714,104717,104726,104734,104743,104746,104756,104759,104811,104818,104824,104832,104880,104883,104902,104905,104913,104917,104926,104959,104961,105309,105311,105323,105325,105336,105338,105341,105362,105368,105371,105396,105406,105409,105417,105420,105423,105444,105455,105457,105477,105480,105501,105510,105529,105535,105560,105563,105577,105584,105608,105611,105619,105628,105644,105656,105664,105673,105675,105678,105702,105707,105710,105732,105734,105773,105775,105782,105784,105792,105795,105798,105810,105851,105858,105869,105876,105879,105928,105931,105934,105940,105942,105947,105973,105976],[10,104515,104511],{"id":104516},"_3python-控制接口读取状态与推进仿真",[343,104518,100840],{"id":100839},[19,104520,104521],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,104523,104524],{},"你将学习:",[38,104526,104527,104532,104537,104541,104546,104557],{},[41,104528,104529],{},[395,104530,104531],{},"MjModel.from_xml_string",[41,104533,104534],{},[395,104535,104536],{},"MjData(model)",[41,104538,104539],{},[395,104540,101408],{},[41,104542,104543],{},[395,104544,104545],{},"mj_resetData",[41,104547,104548,104549,614,104551,614,104554],{},"读取 ",[395,104550,104223],{},[395,104552,104553],{},"qvel",[395,104555,104556],{},"ctrl",[41,104558,104559,104560],{},"使用 ",[395,104561,104562],{},"model.opt.timestep",[19,104564,104565],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[389,104567,104570],{"className":104568,"code":104569,"language":5464,"meta":316},[5462],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[395,104571,104569],{"__ignoreMap":316},[19,104573,104574],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[343,104576,100963],{"id":100962},[19,104578,100966],{},[389,104580,104582],{"className":24099,"code":104581,"language":24101,"meta":316,"style":316},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[395,104583,104584],{"__ignoreMap":316},[398,104585,104586,104588,104590,104592,104594,104597,104599,104601,104603],{"class":400,"line":401},[398,104587,24854],{"class":2239},[398,104589,26508],{"class":513},[398,104591,24111],{"class":513},[398,104593,26593],{"class":457},[398,104595,104596],{"class":513}," python3",[398,104598,100991],{"class":513},[398,104600,102694],{"class":513},[398,104602,101007],{"class":513},[398,104604,104605],{"class":513}," glfw\n",[19,104607,103012],{},[389,104609,104610],{"className":24099,"code":101112,"language":24101,"meta":316,"style":316},[395,104611,104612],{"__ignoreMap":316},[398,104613,104614,104616,104618,104620],{"class":400,"line":401},[398,104615,24108],{"class":2239},[398,104617,24111],{"class":513},[398,104619,101123],{"class":513},[398,104621,101126],{"class":513},[19,104623,103029],{},[389,104625,104627],{"className":24099,"code":104626,"language":24101,"meta":316,"style":316},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[395,104628,104629,104646,104655],{"__ignoreMap":316},[398,104630,104631,104633,104635,104637,104640,104642,104644],{"class":400,"line":401},[398,104632,30523],{"class":2239},[398,104634,29369],{"class":513},[398,104636,25393],{"class":457},[398,104638,104639],{"class":513}," mujoco-python-api",[398,104641,101168],{"class":513},[398,104643,101171],{"class":457},[398,104645,101174],{"class":457},[398,104647,104648,104650,104652],{"class":400,"line":317},[398,104649,30523],{"class":2239},[398,104651,101181],{"class":513},[398,104653,104654],{"class":513}," mujoco-python-api\n",[398,104656,104657,104659,104661,104663],{"class":400,"line":320},[398,104658,24108],{"class":2239},[398,104660,24111],{"class":513},[398,104662,101123],{"class":513},[398,104664,101126],{"class":513},[19,104666,101197],{},[38,104668,104669,104676,104685],{},[41,104670,104671,101211,104673,104675],{},[395,104672,100868],{},[395,104674,100873],{}," 是官方 Python bindings 的类名。",[41,104677,104678,104679,104682,104683,28578],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[395,104680,104681],{},"mjModel"," 在 Python 中是 ",[395,104684,100902],{},[41,104686,104687,104688,28578],{},"不要使用 ",[395,104689,104690],{},"sim = mujoco_py.MjSim(...)",[343,104692,101238],{"id":101237},[19,104694,104695],{},"仿真推进核心代码:",[389,104697,104699],{"className":30571,"code":104698,"language":30573,"meta":316,"style":316},"mujoco.mj_step(model, data)\n",[395,104700,104701],{"__ignoreMap":316},[398,104702,104703],{"class":400,"line":401},[398,104704,104698],{"class":408},[19,104706,104707,104708,614,104710,614,104712,28578],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[395,104709,101263],{},[395,104711,101266],{},[395,104713,101260],{},[19,104715,104716],{},"重置仿真:",[389,104718,104720],{"className":30571,"code":104719,"language":30573,"meta":316,"style":316},"mujoco.mj_resetData(model, data)\n",[395,104721,104722],{"__ignoreMap":316},[398,104723,104724],{"class":400,"line":401},[398,104725,104719],{"class":408},[19,104727,104728,104729,82732,104731,104733],{},"如果手动修改了 ",[395,104730,101263],{},[395,104732,101266],{},"，通常应调用:",[389,104735,104737],{"className":30571,"code":104736,"language":30573,"meta":316,"style":316},"mujoco.mj_forward(model, data)\n",[395,104738,104739],{"__ignoreMap":316},[398,104740,104741],{"class":400,"line":401},[398,104742,104736],{"class":408},[19,104744,104745],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[14,104747,104749,614,104751,614,104753,104755],{"id":104748},"qposqvelctrl-是什么",[395,104750,104223],{},[395,104752,104553],{},[395,104754,104556],{}," 是什么",[19,104757,104758],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[84,104760,104761,104773],{},[87,104762,104763],{},[90,104764,104765,104768,104770],{},[93,104766,104767],{"align":95},"字段",[93,104769,100893],{"align":95},[93,104771,104772],{"align":95},"谁来修改",[101,104774,104775,104787,104799],{},[90,104776,104777,104781,104784],{},[106,104778,104779],{"align":95},[395,104780,101263],{},[106,104782,104783],{"align":95},"广义位置，例如小车位置、关节角、自由物体位置姿态",[106,104785,104786],{"align":95},"MuJoCo 更新，也可以手动设置初始状态",[90,104788,104789,104793,104796],{},[106,104790,104791],{"align":95},[395,104792,101266],{},[106,104794,104795],{"align":95},"广义速度，例如小车速度、关节角速度",[106,104797,104798],{"align":95},"MuJoCo 更新，也可以手动清零",[90,104800,104801,104805,104808],{},[106,104802,104803],{"align":95},[395,104804,101269],{},[106,104806,104807],{"align":95},"actuator 的控制输入",[106,104809,104810],{"align":95},"主要由你的控制代码写入",[19,104812,9302,104813,101211,104815,104817],{},[395,104814,104223],{},[395,104816,104553],{}," 不一定同维。自由刚体就是典型例子：",[389,104819,104822],{"className":104820,"code":104821,"language":5464,"meta":316},[5462],"freejoint: qpos 7 维，qvel 6 维\n",[395,104823,104821],{"__ignoreMap":316},[14,104825,104827,101211,104829,104831],{"id":104826},"mj_step-和-mj_forward-的区别",[395,104828,101408],{},[395,104830,104443],{}," 的区别",[84,104833,104834,104847],{},[87,104835,104836],{},[90,104837,104838,104841,104844],{},[93,104839,104840],{"align":95},"函数",[93,104842,104843],{"align":95},"是否推进时间",[93,104845,104846],{"align":95},"什么时候用",[101,104848,104849,104862],{},[90,104850,104851,104856,104859],{},[106,104852,104853],{"align":95},[395,104854,104855],{},"mj_step(model, data)",[106,104857,104858],{"align":95},"是",[106,104860,104861],{"align":95},"正常仿真循环，每调用一次前进一步",[90,104863,104864,104869,104872],{},[106,104865,104866],{"align":95},[395,104867,104868],{},"mj_forward(model, data)",[106,104870,104871],{"align":95},"否",[106,104873,104874,104875,614,104877,104879],{"align":95},"手动改了 ",[395,104876,104223],{},[395,104878,104553],{}," 后，刷新派生量",[19,104881,104882],{},"例如你写：",[389,104884,104886],{"className":30571,"code":104885,"language":30573,"meta":316,"style":316},"data.qpos[2] = 2.0\n",[395,104887,104888],{"__ignoreMap":316},[398,104889,104890,104893,104895,104897,104899],{"class":400,"line":401},[398,104891,104892],{"class":408},"data.qpos[",[398,104894,486],{"class":457},[398,104896,4719],{"class":408},[398,104898,454],{"class":404},[398,104900,104901],{"class":457}," 2.0\n",[19,104903,104904],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[389,104906,104907],{"className":30571,"code":104736,"language":30573,"meta":316,"style":316},[395,104908,104909],{"__ignoreMap":316},[398,104910,104911],{"class":400,"line":401},[398,104912,104736],{"class":408},[14,104914,104916],{"id":104915},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,104918,104919,104922,104923,104925],{},[395,104920,104921],{},"mujoco.mj_resetData(model, data)"," 会把 ",[395,104924,33594],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[389,104927,104929],{"className":30571,"code":104928,"language":30573,"meta":316,"style":316},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[395,104930,104931,104935,104945,104955],{"__ignoreMap":316},[398,104932,104933],{"class":400,"line":401},[398,104934,104719],{"class":408},[398,104936,104937,104940,104942],{"class":400,"line":317},[398,104938,104939],{"class":408},"data.qpos[:] ",[398,104941,454],{"class":404},[398,104943,104944],{"class":408}," random_qpos\n",[398,104946,104947,104950,104952],{"class":400,"line":320},[398,104948,104949],{"class":408},"data.qvel[:] ",[398,104951,454],{"class":404},[398,104953,104954],{"class":457}," 0.0\n",[398,104956,104957],{"class":400,"line":1470},[398,104958,104736],{"class":408},[343,104960,101446],{"id":101445},[389,104962,104964],{"className":30571,"code":104963,"language":30573,"meta":316,"style":316},"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",[395,104965,104966,104972,104982,104986,104990,104998,105003,105007,105011,105015,105020,105024,105029,105034,105039,105043,105047,105051,105055,105059,105063,105082,105089,105101,105112,105128,105144,105148,105152,105164,105176,105184,105188,105199,105203,105219,105223,105227,105236,105240,105245,105254,105258,105271,105276,105285,105289,105293,105305],{"__ignoreMap":316},[398,104967,104968,104970],{"class":400,"line":401},[398,104969,30585],{"class":404},[398,104971,101494],{"class":408},[398,104973,104974,104976,104978,104980],{"class":400,"line":317},[398,104975,30585],{"class":404},[398,104977,31573],{"class":408},[398,104979,31576],{"class":404},[398,104981,31579],{"class":408},[398,104983,104984],{"class":400,"line":320},[398,104985,2676],{"emptyLinePlaceholder":328},[398,104987,104988],{"class":400,"line":1470},[398,104989,2676],{"emptyLinePlaceholder":328},[398,104991,104992,104994,104996],{"class":400,"line":1476},[398,104993,101507],{"class":457},[398,104995,13841],{"class":404},[398,104997,101512],{"class":513},[398,104999,105000],{"class":400,"line":1490},[398,105001,105002],{"class":513},"\u003Cmujoco model=\"state_api\">\n",[398,105004,105005],{"class":400,"line":1496},[398,105006,101522],{"class":513},[398,105008,105009],{"class":400,"line":1587},[398,105010,2676],{"emptyLinePlaceholder":328},[398,105012,105013],{"class":400,"line":1593},[398,105014,101531],{"class":513},[398,105016,105017],{"class":400,"line":1605},[398,105018,105019],{"class":513},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[398,105021,105022],{"class":400,"line":1888},[398,105023,2676],{"emptyLinePlaceholder":328},[398,105025,105026],{"class":400,"line":1893},[398,105027,105028],{"class":513},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[398,105030,105031],{"class":400,"line":1899},[398,105032,105033],{"class":513},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[398,105035,105036],{"class":400,"line":1904},[398,105037,105038],{"class":513},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[398,105040,105041],{"class":400,"line":1918},[398,105042,101560],{"class":513},[398,105044,105045],{"class":400,"line":1923},[398,105046,101565],{"class":513},[398,105048,105049],{"class":400,"line":1929},[398,105050,101570],{"class":513},[398,105052,105053],{"class":400,"line":1950},[398,105054,95891],{"class":513},[398,105056,105057],{"class":400,"line":1955},[398,105058,2676],{"emptyLinePlaceholder":328},[398,105060,105061],{"class":400,"line":1969},[398,105062,2676],{"emptyLinePlaceholder":328},[398,105064,105065,105067,105070,105073,105075,105078,105080],{"class":400,"line":1974},[398,105066,32140],{"class":404},[398,105068,105069],{"class":2239}," print_state",[398,105071,105072],{"class":408},"(prefix: ",[398,105074,1575],{"class":457},[398,105076,105077],{"class":408},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[398,105079,95879],{"class":457},[398,105081,4015],{"class":408},[398,105083,105084,105086],{"class":400,"line":2003},[398,105085,31492],{"class":457},[398,105087,105088],{"class":408},"(prefix)\n",[398,105090,105091,105093,105095,105098],{"class":400,"line":2008},[398,105092,31492],{"class":457},[398,105094,409],{"class":408},[398,105096,105097],{"class":513},"\"  timestep:\"",[398,105099,105100],{"class":408},", model.opt.timestep)\n",[398,105102,105103,105105,105107,105110],{"class":400,"line":2025},[398,105104,31492],{"class":457},[398,105106,409],{"class":408},[398,105108,105109],{"class":513},"\"  time:\"",[398,105111,101671],{"class":408},[398,105113,105114,105116,105118,105121,105124,105126],{"class":400,"line":2030},[398,105115,31492],{"class":457},[398,105117,409],{"class":408},[398,105119,105120],{"class":513},"\"  qpos:\"",[398,105122,105123],{"class":408},", np.round(data.qpos.copy(), ",[398,105125,695],{"class":457},[398,105127,30690],{"class":408},[398,105129,105130,105132,105134,105137,105140,105142],{"class":400,"line":2035},[398,105131,31492],{"class":457},[398,105133,409],{"class":408},[398,105135,105136],{"class":513},"\"  qvel:\"",[398,105138,105139],{"class":408},", np.round(data.qvel.copy(), ",[398,105141,695],{"class":457},[398,105143,30690],{"class":408},[398,105145,105146],{"class":400,"line":2040},[398,105147,2676],{"emptyLinePlaceholder":328},[398,105149,105150],{"class":400,"line":2054},[398,105151,2676],{"emptyLinePlaceholder":328},[398,105153,105154,105156,105158,105160,105162],{"class":400,"line":2059},[398,105155,32140],{"class":404},[398,105157,2249],{"class":2239},[398,105159,101591],{"class":408},[398,105161,95879],{"class":457},[398,105163,4015],{"class":408},[398,105165,105166,105168,105170,105172,105174],{"class":400,"line":2853},[398,105167,101600],{"class":408},[398,105169,454],{"class":404},[398,105171,101605],{"class":408},[398,105173,101507],{"class":457},[398,105175,415],{"class":408},[398,105177,105178,105180,105182],{"class":400,"line":2867},[398,105179,101614],{"class":408},[398,105181,454],{"class":404},[398,105183,101619],{"class":408},[398,105185,105186],{"class":400,"line":2875},[398,105187,2676],{"emptyLinePlaceholder":328},[398,105189,105190,105193,105196],{"class":400,"line":2880},[398,105191,105192],{"class":408},"    print_state(",[398,105194,105195],{"class":513},"\"initial\"",[398,105197,105198],{"class":408},", model, data)\n",[398,105200,105201],{"class":400,"line":2886},[398,105202,2676],{"emptyLinePlaceholder":328},[398,105204,105205,105207,105209,105211,105213,105215,105217],{"class":400,"line":2892},[398,105206,3477],{"class":404},[398,105208,101694],{"class":408},[398,105210,26236],{"class":404},[398,105212,32636],{"class":457},[398,105214,409],{"class":408},[398,105216,1058],{"class":457},[398,105218,30979],{"class":408},[398,105220,105221],{"class":400,"line":2897},[398,105222,101709],{"class":408},[398,105224,105225],{"class":400,"line":8225},[398,105226,2676],{"emptyLinePlaceholder":328},[398,105228,105229,105231,105234],{"class":400,"line":8249},[398,105230,105192],{"class":408},[398,105232,105233],{"class":513},"\"after 50 steps\"",[398,105235,105198],{"class":408},[398,105237,105238],{"class":400,"line":8254},[398,105239,2676],{"emptyLinePlaceholder":328},[398,105241,105242],{"class":400,"line":8260},[398,105243,105244],{"class":408},"    mujoco.mj_resetData(model, data)\n",[398,105246,105247,105249,105252],{"class":400,"line":8287},[398,105248,105192],{"class":408},[398,105250,105251],{"class":513},"\"after reset\"",[398,105253,105198],{"class":408},[398,105255,105256],{"class":400,"line":8292},[398,105257,2676],{"emptyLinePlaceholder":328},[398,105259,105260,105263,105265,105267,105269],{"class":400,"line":8298},[398,105261,105262],{"class":408},"    data.qpos[",[398,105264,486],{"class":457},[398,105266,4719],{"class":408},[398,105268,454],{"class":404},[398,105270,104901],{"class":457},[398,105272,105273],{"class":400,"line":8310},[398,105274,105275],{"class":408},"    mujoco.mj_forward(model, data)\n",[398,105277,105278,105280,105283],{"class":400,"line":8322},[398,105279,105192],{"class":408},[398,105281,105282],{"class":513},"\"after manual qpos edit\"",[398,105284,105198],{"class":408},[398,105286,105287],{"class":400,"line":8334},[398,105288,2676],{"emptyLinePlaceholder":328},[398,105290,105291],{"class":400,"line":9993},[398,105292,2676],{"emptyLinePlaceholder":328},[398,105294,105295,105297,105299,105301,105303],{"class":400,"line":10018},[398,105296,1807],{"class":404},[398,105298,31413],{"class":457},[398,105300,101752],{"class":404},[398,105302,101755],{"class":513},[398,105304,4015],{"class":408},[398,105306,105307],{"class":400,"line":10041},[398,105308,101762],{"class":408},[19,105310,103763],{},[389,105312,105314],{"className":24099,"code":105313,"language":24101,"meta":316,"style":316},"touch ch3_python_state.py\n",[395,105315,105316],{"__ignoreMap":316},[398,105317,105318,105320],{"class":400,"line":401},[398,105319,101476],{"class":2239},[398,105321,105322],{"class":513}," ch3_python_state.py\n",[19,105324,102494],{},[389,105326,105328],{"className":24099,"code":105327,"language":24101,"meta":316,"style":316},"python ch3_python_state.py\n",[395,105329,105330],{"__ignoreMap":316},[398,105331,105332,105334],{"class":400,"line":401},[398,105333,30573],{"class":2239},[398,105335,105322],{"class":513},[14,105337,101765],{"id":101765},[19,105339,105340],{},"打印状态的函数：",[389,105342,105344],{"className":30571,"code":105343,"language":30573,"meta":316,"style":316},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[395,105345,105346],{"__ignoreMap":316},[398,105347,105348,105350,105352,105354,105356,105358,105360],{"class":400,"line":401},[398,105349,32140],{"class":404},[398,105351,105069],{"class":2239},[398,105353,105072],{"class":408},[398,105355,1575],{"class":457},[398,105357,105077],{"class":408},[398,105359,95879],{"class":457},[398,105361,4015],{"class":408},[19,105363,105364,105365,105367],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[395,105366,33594],{}," 里发生了什么。",[19,105369,105370],{},"推进 50 步：",[389,105372,105374],{"className":30571,"code":105373,"language":30573,"meta":316,"style":316},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[395,105375,105376,105392],{"__ignoreMap":316},[398,105377,105378,105380,105382,105384,105386,105388,105390],{"class":400,"line":401},[398,105379,3301],{"class":404},[398,105381,101694],{"class":408},[398,105383,26236],{"class":404},[398,105385,32636],{"class":457},[398,105387,409],{"class":408},[398,105389,1058],{"class":457},[398,105391,30979],{"class":408},[398,105393,105394],{"class":400,"line":317},[398,105395,101892],{"class":408},[19,105397,105398,105399,105402,105403,105405],{},"由于 ",[395,105400,105401],{},"timestep=0.01","，所以 50 步后时间约为 ",[395,105404,35522],{}," 秒。",[19,105407,105408],{},"重置：",[389,105410,105411],{"className":30571,"code":104719,"language":30573,"meta":316,"style":316},[395,105412,105413],{"__ignoreMap":316},[398,105414,105415],{"class":400,"line":401},[398,105416,104719],{"class":408},[19,105418,105419],{},"这会把时间、位置、速度恢复到初始状态。",[19,105421,105422],{},"手动改高度：",[389,105424,105426],{"className":30571,"code":105425,"language":30573,"meta":316,"style":316},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[395,105427,105428,105440],{"__ignoreMap":316},[398,105429,105430,105432,105434,105436,105438],{"class":400,"line":401},[398,105431,104892],{"class":408},[398,105433,486],{"class":457},[398,105435,4719],{"class":408},[398,105437,454],{"class":404},[398,105439,104901],{"class":457},[398,105441,105442],{"class":400,"line":317},[398,105443,104736],{"class":408},[19,105445,105446,105447,105450,105451,105454],{},"这个例子里 ",[395,105448,105449],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[395,105452,105453],{},"2.0"," 表示把小球放到更高的位置。",[14,105456,101901],{"id":101901},[389,105458,105459],{"className":30571,"code":105343,"language":30573,"meta":316,"style":316},[395,105460,105461],{"__ignoreMap":316},[398,105462,105463,105465,105467,105469,105471,105473,105475],{"class":400,"line":401},[398,105464,32140],{"class":404},[398,105466,105069],{"class":2239},[398,105468,105072],{"class":408},[398,105470,1575],{"class":457},[398,105472,105077],{"class":408},[398,105474,95879],{"class":457},[398,105476,4015],{"class":408},[19,105478,105479],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[38,105481,105482,105491,105496],{},[41,105483,105484,105487,105488,105490],{},[395,105485,105486],{},"prefix","：一段文字，比如 ",[395,105489,105195],{},"，用来说明现在打印的是哪个阶段。",[41,105492,105493,105495],{},[395,105494,102278],{},"：MuJoCo 模型。",[41,105497,105498,105500],{},[395,105499,33594],{},"：MuJoCo 当前状态。",[19,105502,105503,614,105506,105509],{},[395,105504,105505],{},"prefix: str",[395,105507,105508],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[389,105511,105513],{"className":30571,"code":105512,"language":30573,"meta":316,"style":316},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[395,105514,105515],{"__ignoreMap":316},[398,105516,105517,105519,105521,105523,105525,105527],{"class":400,"line":401},[398,105518,30608],{"class":457},[398,105520,409],{"class":408},[398,105522,105120],{"class":513},[398,105524,105123],{"class":408},[398,105526,695],{"class":457},[398,105528,30690],{"class":408},[19,105530,105531,105534],{},[395,105532,105533],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[389,105536,105538],{"className":30571,"code":105537,"language":30573,"meta":316,"style":316},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[395,105539,105540,105552],{"__ignoreMap":316},[398,105541,105542,105544,105546,105548,105550],{"class":400,"line":401},[398,105543,101827],{"class":408},[398,105545,454],{"class":404},[398,105547,101605],{"class":408},[398,105549,101507],{"class":457},[398,105551,415],{"class":408},[398,105553,105554,105556,105558],{"class":400,"line":317},[398,105555,101851],{"class":408},[398,105557,454],{"class":404},[398,105559,101619],{"class":408},[19,105561,105562],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[389,105564,105566],{"className":30571,"code":105565,"language":30573,"meta":316,"style":316},"print_state(\"initial\", model, data)\n",[395,105567,105568],{"__ignoreMap":316},[398,105569,105570,105573,105575],{"class":400,"line":401},[398,105571,105572],{"class":408},"print_state(",[398,105574,105195],{"class":513},[398,105576,105198],{"class":408},[19,105578,105579,105580,105583],{},"调用刚才定义的 ",[395,105581,105582],{},"print_state"," 函数，打印初始状态。",[389,105585,105586],{"className":30571,"code":105373,"language":30573,"meta":316,"style":316},[395,105587,105588,105604],{"__ignoreMap":316},[398,105589,105590,105592,105594,105596,105598,105600,105602],{"class":400,"line":401},[398,105591,3301],{"class":404},[398,105593,101694],{"class":408},[398,105595,26236],{"class":404},[398,105597,32636],{"class":457},[398,105599,409],{"class":408},[398,105601,1058],{"class":457},[398,105603,30979],{"class":408},[398,105605,105606],{"class":400,"line":317},[398,105607,101892],{"class":408},[19,105609,105610],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[389,105612,105613],{"className":30571,"code":104719,"language":30573,"meta":316,"style":316},[395,105614,105615],{"__ignoreMap":316},[398,105616,105617],{"class":400,"line":401},[398,105618,104719],{"class":408},[19,105620,105621,105622,105624,105625,105627],{},"重置 ",[395,105623,33594],{},"。注意它不会重新创建 ",[395,105626,102278],{},"，因为模型结构没有变，只是状态回到初始值。",[389,105629,105630],{"className":30571,"code":104885,"language":30573,"meta":316,"style":316},[395,105631,105632],{"__ignoreMap":316},[398,105633,105634,105636,105638,105640,105642],{"class":400,"line":401},[398,105635,104892],{"class":408},[398,105637,486],{"class":457},[398,105639,4719],{"class":408},[398,105641,454],{"class":404},[398,105643,104901],{"class":457},[19,105645,105646,105647,614,105650,614,105653,105655],{},"这行是“手动改状态”。在 freejoint 中，",[395,105648,105649],{},"qpos[0]",[395,105651,105652],{},"qpos[1]",[395,105654,105449],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[389,105657,105658],{"className":30571,"code":104736,"language":30573,"meta":316,"style":316},[395,105659,105660],{"__ignoreMap":316},[398,105661,105662],{"class":400,"line":401},[398,105663,104736],{"class":408},[19,105665,105666,105667,105669,105670,105672],{},"手动改完 ",[395,105668,104223],{}," 后，调用 ",[395,105671,104443],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[343,105674,102509],{"id":102508},[19,105676,105677],{},"你会看到:",[38,105679,105680,105685,105690,105693],{},[41,105681,105682,105683],{},"初始时间为 ",[395,105684,593],{},[41,105686,105687,105688],{},"50 步后时间约为 ",[395,105689,35522],{},[41,105691,105692],{},"reset 后状态恢复",[41,105694,105695,105696,105699,105700],{},"手动修改 ",[395,105697,105698],{},"data.qpos[2]"," 后，小球高度变为 ",[395,105701,105453],{},[19,105703,105704,105706],{},[395,105705,105449],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,105708,105709],{},"输出里可以重点看三件事：",[38,105711,105712,105720,105725],{},[41,105713,105714,105716,105717,105719],{},[395,105715,2663],{}," 是否随着 ",[395,105718,101408],{}," 增加。",[41,105721,105722,105724],{},[395,105723,104223],{}," 的 z 坐标是否因为下落而变化。",[41,105726,105727,105729,105730,28578],{},[395,105728,104545],{}," 后时间是否回到 ",[395,105731,593],{},[343,105733,102541],{"id":102540},[38,105735,105736,105742,105748,105754,105757,105766],{},[41,105737,105738,105739,28578],{},"修改 timestep 为 ",[395,105740,105741],{},"0.005",[41,105743,105744,105745,28578],{},"重新运行，检查 50 步后时间是否约为 ",[395,105746,105747],{},"0.25",[41,105749,105750,105751,28578],{},"修改重力为 ",[395,105752,105753],{},"0 0 -1.0",[41,105755,105756],{},"观察小球下降速度是否变慢。",[41,105758,102604,105759,102607,105762,105765],{},[395,105760,105761],{},"data.qpos[2] = 2.0",[395,105763,105764],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[41,105767,105768,105769,105772],{},"注释掉 ",[395,105770,105771],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[343,105774,102646],{"id":102645},[14,105776,105778,105779,105781],{"id":105777},"修改-dataqpos-后位置没有更新","修改 ",[395,105780,101263],{}," 后位置没有更新",[19,105783,102655],{},[389,105785,105786],{"className":30571,"code":104736,"language":30573,"meta":316,"style":316},[395,105787,105788],{"__ignoreMap":316},[398,105789,105790],{"class":400,"line":401},[398,105791,104736],{"class":408},[14,105793,105794],{"id":105794},"数组维度看不懂",[19,105796,105797],{},"打印模型维度:",[389,105799,105801],{"className":30571,"code":105800,"language":30573,"meta":316,"style":316},"print(model.nq, model.nv, model.nu)\n",[395,105802,105803],{"__ignoreMap":316},[398,105804,105805,105807],{"class":400,"line":401},[398,105806,30608],{"class":457},[398,105808,105809],{"class":408},"(model.nq, model.nv, model.nu)\n",[84,105811,105812,105820],{},[87,105813,105814],{},[90,105815,105816,105818],{},[93,105817,104767],{"align":95},[93,105819,100893],{"align":95},[101,105821,105822,105832,105842],{},[90,105823,105824,105829],{},[106,105825,105826],{"align":95},[395,105827,105828],{},"nq",[106,105830,105831],{"align":95},"位置变量数量",[90,105833,105834,105839],{},[106,105835,105836],{"align":95},[395,105837,105838],{},"nv",[106,105840,105841],{"align":95},"速度变量数量",[90,105843,105844,105848],{},[106,105845,105846],{"align":95},[395,105847,102355],{},[106,105849,105850],{"align":95},"控制输入数量",[14,105852,105854,105855,105857],{"id":105853},"误以为-qpos-一定等于关节数","误以为 ",[395,105856,104223],{}," 一定等于关节数",[19,105859,105860,105861,82723,105863,105865,105866,105868],{},"不是。例如 ",[395,105862,101813],{},[395,105864,104223],{}," 是 7 维，但 ",[395,105867,104553],{}," 是 6 维。",[14,105870,105872,105873,105875],{"id":105871},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[395,105874,104223],{}," 的第几位",[19,105877,105878],{},"初学时可以先打印：",[389,105880,105882],{"className":30571,"code":105881,"language":30573,"meta":316,"style":316},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[395,105883,105884,105894,105904,105916],{"__ignoreMap":316},[398,105885,105886,105888,105890,105892],{"class":400,"line":401},[398,105887,30608],{"class":457},[398,105889,409],{"class":408},[398,105891,101632],{"class":513},[398,105893,101635],{"class":408},[398,105895,105896,105898,105900,105902],{"class":400,"line":317},[398,105897,30608],{"class":457},[398,105899,409],{"class":408},[398,105901,101644],{"class":513},[398,105903,101647],{"class":408},[398,105905,105906,105908,105910,105913],{"class":400,"line":320},[398,105907,30608],{"class":457},[398,105909,409],{"class":408},[398,105911,105912],{"class":513},"\"qpos:\"",[398,105914,105915],{"class":408},", data.qpos)\n",[398,105917,105918,105920,105922,105925],{"class":400,"line":1470},[398,105919,30608],{"class":457},[398,105921,409],{"class":408},[398,105923,105924],{"class":513},"\"qvel:\"",[398,105926,105927],{"class":408},", data.qvel)\n",[19,105929,105930],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[14,105932,105933],{"id":105933},"仿真结果每次都一样",[19,105935,105936,105937,105939],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[395,105938,104223],{},"、目标点或控制输入。",[343,105941,102800],{"id":102799},[19,105943,105944,105945,24896],{},"Python 控制 MuJoCo 的核心就是读写 ",[395,105946,33594],{},[38,105948,105949,105957,105962,105967],{},[41,105950,105951,105952,101211,105954,105956],{},"用 ",[395,105953,101263],{},[395,105955,101266],{}," 读取状态。",[41,105958,105951,105959,105961],{},[395,105960,101269],{}," 写入控制。",[41,105963,105951,105964,105966],{},[395,105965,101408],{}," 推进时间。",[41,105968,105969,105970,105972],{},"手动改状态后用 ",[395,105971,104443],{}," 刷新派生量。",[19,105974,105975],{},"理解这一章后，就可以进入关节和 actuator 控制。",[5403,105977,105978],{},"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":316,"searchDepth":317,"depth":317,"links":105980},[105981,105982,105983,105990,105994,105995,105996,106006],{"id":100839,"depth":317,"text":100840},{"id":100962,"depth":317,"text":100963},{"id":101237,"depth":317,"text":101238,"children":105984},[105985,105987,105989],{"id":104748,"depth":320,"text":105986},"qpos、qvel、ctrl 是什么",{"id":104826,"depth":320,"text":105988},"mj_step 和 mj_forward 的区别",{"id":104915,"depth":320,"text":104916},{"id":101445,"depth":317,"text":101446,"children":105991},[105992,105993],{"id":101765,"depth":320,"text":101765},{"id":101901,"depth":320,"text":101901},{"id":102508,"depth":317,"text":102509},{"id":102540,"depth":317,"text":102541},{"id":102645,"depth":317,"text":102646,"children":105997},[105998,106000,106001,106003,106005],{"id":105777,"depth":320,"text":105999},"修改 data.qpos 后位置没有更新",{"id":105794,"depth":320,"text":105794},{"id":105853,"depth":320,"text":106002},"误以为 qpos 一定等于关节数",{"id":105871,"depth":320,"text":106004},"不知道某个元素在 qpos 的第几位",{"id":105933,"depth":320,"text":105933},{"id":102799,"depth":317,"text":102800},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104511,"description":316},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":106013,"title":106014,"body":106015,"description":316,"extension":326,"meta":107705,"navigation":328,"path":107706,"seo":107707,"stem":107708,"__hash__":107709},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":106016,"toc":107681},[106017,106020,106022,106025,106027,106052,106055,106074,106077,106079,106081,106105,106107,106121,106123,106164,106166,106190,106192,106195,106229,106231,106244,106247,106315,106324,106328,106331,106365,106371,106374,106378,106417,106420,106440,106444,106487,106489,106518,106521,106527,106530,106532,106926,106928,106940,106942,106953,106955,106958,106987,106995,106998,107033,107036,107038,107046,107049,107051,107062,107072,107092,107095,107131,107143,107191,107210,107252,107265,107293,107298,107319,107329,107347,107350,107384,107387,107407,107410,107429,107435,107437,107440,107446,107452,107462,107465,107471,107480,107482,107528,107530,107536,107542,107545,107548,107568,107571,107577,107583,107585,107608,107611,107614,107623,107626,107664,107666,107669,107675,107678],[10,106018,106014],{"id":106019},"_4关节actuator-与力控制",[343,106021,100840],{"id":100839},[19,106023,106024],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,106026,104524],{},[38,106028,106029,106035,106040,106044,106049],{},[41,106030,106031,106034],{},[395,106032,106033],{},"hinge"," 关节",[41,106036,106037],{},[395,106038,106039],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[41,106041,106042],{},[395,106043,101269],{},[41,106045,106046],{},[395,106047,106048],{},"ctrlrange",[41,106050,106051],{},"读取关节角和角速度",[19,106053,106054],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[389,106056,106058],{"className":30571,"code":106057,"language":30573,"meta":316,"style":316},"data.ctrl[0] = ...\n",[395,106059,106060],{"__ignoreMap":316},[398,106061,106062,106065,106067,106069,106071],{"class":400,"line":401},[398,106063,106064],{"class":408},"data.ctrl[",[398,106066,593],{"class":457},[398,106068,4719],{"class":408},[398,106070,454],{"class":404},[398,106072,106073],{"class":457}," ...\n",[19,106075,106076],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[343,106078,100963],{"id":100962},[19,106080,100966],{},[389,106082,106083],{"className":24099,"code":104581,"language":24101,"meta":316,"style":316},[395,106084,106085],{"__ignoreMap":316},[398,106086,106087,106089,106091,106093,106095,106097,106099,106101,106103],{"class":400,"line":401},[398,106088,24854],{"class":2239},[398,106090,26508],{"class":513},[398,106092,24111],{"class":513},[398,106094,26593],{"class":457},[398,106096,104596],{"class":513},[398,106098,100991],{"class":513},[398,106100,102694],{"class":513},[398,106102,101007],{"class":513},[398,106104,104605],{"class":513},[19,106106,103012],{},[389,106108,106109],{"className":24099,"code":101112,"language":24101,"meta":316,"style":316},[395,106110,106111],{"__ignoreMap":316},[398,106112,106113,106115,106117,106119],{"class":400,"line":401},[398,106114,24108],{"class":2239},[398,106116,24111],{"class":513},[398,106118,101123],{"class":513},[398,106120,101126],{"class":513},[19,106122,103029],{},[389,106124,106126],{"className":24099,"code":106125,"language":24101,"meta":316,"style":316},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[395,106127,106128,106145,106154],{"__ignoreMap":316},[398,106129,106130,106132,106134,106136,106139,106141,106143],{"class":400,"line":401},[398,106131,30523],{"class":2239},[398,106133,29369],{"class":513},[398,106135,25393],{"class":457},[398,106137,106138],{"class":513}," mujoco-control",[398,106140,101168],{"class":513},[398,106142,101171],{"class":457},[398,106144,101174],{"class":457},[398,106146,106147,106149,106151],{"class":400,"line":317},[398,106148,30523],{"class":2239},[398,106150,101181],{"class":513},[398,106152,106153],{"class":513}," mujoco-control\n",[398,106155,106156,106158,106160,106162],{"class":400,"line":320},[398,106157,24108],{"class":2239},[398,106159,24111],{"class":513},[398,106161,101123],{"class":513},[398,106163,101126],{"class":513},[19,106165,101197],{},[38,106167,106168,106174,106181,106187],{},[41,106169,106170,106173],{},[395,106171,106172],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[41,106175,106176,106178,106179,28578],{},[395,106177,101269],{}," 长度等于 ",[395,106180,102351],{},[41,106182,82415,106183,106186],{},[395,106184,106185],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[41,106188,106189],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[343,106191,101238],{"id":101237},[19,106193,106194],{},"关节决定 body 如何运动:",[389,106196,106198],{"className":53260,"code":106197,"language":53262,"meta":316,"style":316},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[395,106199,106200],{"__ignoreMap":316},[398,106201,106202,106204,106206,106208,106210,106213,106215,106217,106219,106222,106224,106227],{"class":400,"line":401},[398,106203,1312],{"class":408},[398,106205,103149],{"class":51493},[398,106207,15197],{"class":2239},[398,106209,454],{"class":408},[398,106211,106212],{"class":513},"\"hinge\"",[398,106214,54017],{"class":2239},[398,106216,454],{"class":408},[398,106218,106212],{"class":513},[398,106220,106221],{"class":2239}," axis",[398,106223,454],{"class":408},[398,106225,106226],{"class":513},"\"0 1 0\"",[398,106228,101337],{"class":408},[19,106230,103245],{},[38,106232,106233,106238,106241],{},[41,106234,106235,106236],{},"名字是 ",[395,106237,106033],{},[41,106239,106240],{},"类型是旋转关节",[41,106242,106243],{},"绕 y 轴旋转",[19,106245,106246],{},"actuator 决定如何施加控制:",[389,106248,106250],{"className":53260,"code":106249,"language":53262,"meta":316,"style":316},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[395,106251,106252,106261,106307],{"__ignoreMap":316},[398,106253,106254,106256,106259],{"class":400,"line":401},[398,106255,1312],{"class":408},[398,106257,106258],{"class":51493},"actuator",[398,106260,51500],{"class":408},[398,106262,106263,106265,106268,106270,106272,106275,106278,106280,106282,106285,106287,106289,106292,106294,106297,106300,106302,106305],{"class":400,"line":317},[398,106264,52337],{"class":408},[398,106266,106267],{"class":51493},"motor",[398,106269,15197],{"class":2239},[398,106271,454],{"class":408},[398,106273,106274],{"class":513},"\"hinge_motor\"",[398,106276,106277],{"class":2239}," joint",[398,106279,454],{"class":408},[398,106281,106212],{"class":513},[398,106283,106284],{"class":2239}," gear",[398,106286,454],{"class":408},[398,106288,3954],{"class":513},[398,106290,106291],{"class":2239}," ctrlrange",[398,106293,454],{"class":408},[398,106295,106296],{"class":513},"\"-2 2\"",[398,106298,106299],{"class":2239}," ctrllimited",[398,106301,454],{"class":408},[398,106303,106304],{"class":513},"\"true\"",[398,106306,101337],{"class":408},[398,106308,106309,106311,106313],{"class":400,"line":320},[398,106310,51978],{"class":408},[398,106312,106258],{"class":51493},[398,106314,51500],{"class":408},[19,106316,106317,106320,106321,28578],{},[395,106318,106319],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[395,106322,106323],{},"[-2, 2]",[14,106325,106327],{"id":106326},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,106329,106330],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[84,106332,106333,106343],{},[87,106334,106335],{},[90,106336,106337,106339,106341],{},[93,106338,96],{"align":95},[93,106340,102889],{"align":95},[93,106342,100927],{"align":95},[101,106344,106345,106355],{},[90,106346,106347,106349,106352],{},[106,106348,103149],{"align":95},[106,106350,106351],{"align":95},"定义能怎么动",[106,106353,106354],{"align":95},"门轴允许门旋转",[90,106356,106357,106359,106362],{},[106,106358,106258],{"align":95},[106,106360,106361],{"align":95},"定义怎么施力或控制",[106,106363,106364],{"align":95},"人推门、马达带动门",[19,106366,106367,106368,106370],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[395,106369,101269],{}," 主动控制它。",[19,106372,106373],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[14,106375,106377],{"id":106376},"hinge-joint","hinge joint",[389,106379,106381],{"className":53260,"code":106380,"language":53262,"meta":316,"style":316},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[395,106382,106383],{"__ignoreMap":316},[398,106384,106385,106387,106389,106391,106393,106395,106397,106399,106401,106403,106405,106407,106410,106412,106415],{"class":400,"line":401},[398,106386,1312],{"class":408},[398,106388,103149],{"class":51493},[398,106390,15197],{"class":2239},[398,106392,454],{"class":408},[398,106394,106212],{"class":513},[398,106396,54017],{"class":2239},[398,106398,454],{"class":408},[398,106400,106212],{"class":513},[398,106402,106221],{"class":2239},[398,106404,454],{"class":408},[398,106406,106226],{"class":513},[398,106408,106409],{"class":2239}," damping",[398,106411,454],{"class":408},[398,106413,106414],{"class":513},"\"0.1\"",[398,106416,101337],{"class":408},[19,106418,106419],{},"含义：",[38,106421,106422,106428,106434],{},[41,106423,106424,106427],{},[395,106425,106426],{},"type=\"hinge\"","：只能绕一个轴旋转。",[41,106429,106430,106433],{},[395,106431,106432],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[41,106435,106436,106439],{},[395,106437,106438],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[14,106441,106443],{"id":106442},"motor-actuator","motor actuator",[389,106445,106447],{"className":53260,"code":106446,"language":53262,"meta":316,"style":316},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[395,106448,106449],{"__ignoreMap":316},[398,106450,106451,106453,106455,106457,106459,106461,106463,106465,106467,106469,106471,106473,106475,106477,106479,106481,106483,106485],{"class":400,"line":401},[398,106452,1312],{"class":408},[398,106454,106267],{"class":51493},[398,106456,15197],{"class":2239},[398,106458,454],{"class":408},[398,106460,106274],{"class":513},[398,106462,106277],{"class":2239},[398,106464,454],{"class":408},[398,106466,106212],{"class":513},[398,106468,106284],{"class":2239},[398,106470,454],{"class":408},[398,106472,3954],{"class":513},[398,106474,106291],{"class":2239},[398,106476,454],{"class":408},[398,106478,106296],{"class":513},[398,106480,106299],{"class":2239},[398,106482,454],{"class":408},[398,106484,106304],{"class":513},[398,106486,101337],{"class":408},[19,106488,106419],{},[38,106490,106491,106500,106506,106512],{},[41,106492,106493,106496,106497,106499],{},[395,106494,106495],{},"joint=\"hinge\"","：这个电机作用在名为 ",[395,106498,106033],{}," 的关节上。",[41,106501,106502,106505],{},[395,106503,106504],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[41,106507,106508,106511],{},[395,106509,106510],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[41,106513,106514,106517],{},[395,106515,106516],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,106519,106520],{},"简单理解：",[389,106522,106525],{"className":106523,"code":106524,"language":5464,"meta":316},[5462],"实际施加效果 ≈ data.ctrl[0] * gear\n",[395,106526,106524],{"__ignoreMap":316},[19,106528,106529],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[343,106531,101446],{"id":101445},[389,106533,106535],{"className":30571,"code":106534,"language":30573,"meta":316,"style":316},"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",[395,106536,106537,106544,106548,106554,106564,106568,106572,106580,106585,106590,106594,106598,106603,106608,106612,106617,106622,106627,106632,106636,106640,106644,106649,106654,106659,106663,106667,106671,106675,106687,106699,106707,106711,106721,106731,106741,106745,106758,106771,106775,106792,106806,106841,106845,106849,106860,106875,106890,106902,106906,106910,106922],{"__ignoreMap":316},[398,106538,106539,106541],{"class":400,"line":401},[398,106540,30585],{"class":404},[398,106542,106543],{"class":408}," math\n",[398,106545,106546],{"class":400,"line":317},[398,106547,2676],{"emptyLinePlaceholder":328},[398,106549,106550,106552],{"class":400,"line":320},[398,106551,30585],{"class":404},[398,106553,101494],{"class":408},[398,106555,106556,106558,106560,106562],{"class":400,"line":1470},[398,106557,30585],{"class":404},[398,106559,31573],{"class":408},[398,106561,31576],{"class":404},[398,106563,31579],{"class":408},[398,106565,106566],{"class":400,"line":1476},[398,106567,2676],{"emptyLinePlaceholder":328},[398,106569,106570],{"class":400,"line":1490},[398,106571,2676],{"emptyLinePlaceholder":328},[398,106573,106574,106576,106578],{"class":400,"line":1496},[398,106575,101507],{"class":457},[398,106577,13841],{"class":404},[398,106579,101512],{"class":513},[398,106581,106582],{"class":400,"line":1587},[398,106583,106584],{"class":513},"\u003Cmujoco model=\"one_link_motor\">\n",[398,106586,106587],{"class":400,"line":1593},[398,106588,106589],{"class":513},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[398,106591,106592],{"class":400,"line":1605},[398,106593,2676],{"emptyLinePlaceholder":328},[398,106595,106596],{"class":400,"line":1888},[398,106597,101531],{"class":513},[398,106599,106600],{"class":400,"line":1893},[398,106601,106602],{"class":513},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[398,106604,106605],{"class":400,"line":1899},[398,106606,106607],{"class":513},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[398,106609,106610],{"class":400,"line":1904},[398,106611,2676],{"emptyLinePlaceholder":328},[398,106613,106614],{"class":400,"line":1918},[398,106615,106616],{"class":513},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[398,106618,106619],{"class":400,"line":1923},[398,106620,106621],{"class":513},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[398,106623,106624],{"class":400,"line":1929},[398,106625,106626],{"class":513},"        \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",[398,106628,106629],{"class":400,"line":1950},[398,106630,106631],{"class":513},"      \u003C\u002Fbody>\n",[398,106633,106634],{"class":400,"line":1955},[398,106635,101560],{"class":513},[398,106637,106638],{"class":400,"line":1969},[398,106639,101565],{"class":513},[398,106641,106642],{"class":400,"line":1974},[398,106643,2676],{"emptyLinePlaceholder":328},[398,106645,106646],{"class":400,"line":2003},[398,106647,106648],{"class":513},"  \u003Cactuator>\n",[398,106650,106651],{"class":400,"line":2008},[398,106652,106653],{"class":513},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[398,106655,106656],{"class":400,"line":2025},[398,106657,106658],{"class":513},"  \u003C\u002Factuator>\n",[398,106660,106661],{"class":400,"line":2030},[398,106662,101570],{"class":513},[398,106664,106665],{"class":400,"line":2035},[398,106666,95891],{"class":513},[398,106668,106669],{"class":400,"line":2040},[398,106670,2676],{"emptyLinePlaceholder":328},[398,106672,106673],{"class":400,"line":2054},[398,106674,2676],{"emptyLinePlaceholder":328},[398,106676,106677,106679,106681,106683,106685],{"class":400,"line":2059},[398,106678,32140],{"class":404},[398,106680,2249],{"class":2239},[398,106682,101591],{"class":408},[398,106684,95879],{"class":457},[398,106686,4015],{"class":408},[398,106688,106689,106691,106693,106695,106697],{"class":400,"line":2853},[398,106690,101600],{"class":408},[398,106692,454],{"class":404},[398,106694,101605],{"class":408},[398,106696,101507],{"class":457},[398,106698,415],{"class":408},[398,106700,106701,106703,106705],{"class":400,"line":2867},[398,106702,101614],{"class":408},[398,106704,454],{"class":404},[398,106706,101619],{"class":408},[398,106708,106709],{"class":400,"line":2875},[398,106710,2676],{"emptyLinePlaceholder":328},[398,106712,106713,106715,106717,106719],{"class":400,"line":2880},[398,106714,31492],{"class":457},[398,106716,409],{"class":408},[398,106718,101632],{"class":513},[398,106720,101635],{"class":408},[398,106722,106723,106725,106727,106729],{"class":400,"line":2886},[398,106724,31492],{"class":457},[398,106726,409],{"class":408},[398,106728,101644],{"class":513},[398,106730,101647],{"class":408},[398,106732,106733,106735,106737,106739],{"class":400,"line":2892},[398,106734,31492],{"class":457},[398,106736,409],{"class":408},[398,106738,101656],{"class":513},[398,106740,101659],{"class":408},[398,106742,106743],{"class":400,"line":2897},[398,106744,2676],{"emptyLinePlaceholder":328},[398,106746,106747,106749,106752,106754,106756],{"class":400,"line":8225},[398,106748,3377],{"class":404},[398,106750,106751],{"class":408}," model.nu ",[398,106753,21225],{"class":404},[398,106755,25396],{"class":457},[398,106757,4015],{"class":408},[398,106759,106760,106762,106764,106766,106769],{"class":400,"line":8249},[398,106761,103625],{"class":404},[398,106763,103628],{"class":457},[398,106765,409],{"class":408},[398,106767,106768],{"class":513},"\"expected exactly one actuator\"",[398,106770,415],{"class":408},[398,106772,106773],{"class":400,"line":8254},[398,106774,2676],{"emptyLinePlaceholder":328},[398,106776,106777,106779,106781,106783,106785,106787,106790],{"class":400,"line":8260},[398,106778,3477],{"class":404},[398,106780,31809],{"class":408},[398,106782,26236],{"class":404},[398,106784,32636],{"class":457},[398,106786,409],{"class":408},[398,106788,106789],{"class":457},"2000",[398,106791,30979],{"class":408},[398,106793,106794,106797,106799,106801,106803],{"class":400,"line":8287},[398,106795,106796],{"class":408},"        t ",[398,106798,454],{"class":404},[398,106800,31809],{"class":408},[398,106802,857],{"class":404},[398,106804,106805],{"class":408}," model.opt.timestep\n",[398,106807,106808,106811,106813,106815,106817,106820,106822,106825,106827,106829,106832,106834,106836,106838],{"class":400,"line":8292},[398,106809,106810],{"class":408},"        data.ctrl[",[398,106812,593],{"class":457},[398,106814,4719],{"class":408},[398,106816,454],{"class":404},[398,106818,106819],{"class":457}," 1.5",[398,106821,6795],{"class":404},[398,106823,106824],{"class":408}," math.sin(",[398,106826,105453],{"class":457},[398,106828,6795],{"class":404},[398,106830,106831],{"class":408}," math.pi ",[398,106833,857],{"class":404},[398,106835,62060],{"class":457},[398,106837,6795],{"class":404},[398,106839,106840],{"class":408}," t)\n",[398,106842,106843],{"class":400,"line":8298},[398,106844,101709],{"class":408},[398,106846,106847],{"class":400,"line":8310},[398,106848,2676],{"emptyLinePlaceholder":328},[398,106850,106851,106853,106855,106858],{"class":400,"line":8322},[398,106852,31492],{"class":457},[398,106854,409],{"class":408},[398,106856,106857],{"class":513},"\"time:\"",[398,106859,101671],{"class":408},[398,106861,106862,106864,106866,106869,106871,106873],{"class":400,"line":8334},[398,106863,31492],{"class":457},[398,106865,409],{"class":408},[398,106867,106868],{"class":513},"\"joint qpos:\"",[398,106870,105123],{"class":408},[398,106872,695],{"class":457},[398,106874,30690],{"class":408},[398,106876,106877,106879,106881,106884,106886,106888],{"class":400,"line":9993},[398,106878,31492],{"class":457},[398,106880,409],{"class":408},[398,106882,106883],{"class":513},"\"joint qvel:\"",[398,106885,105139],{"class":408},[398,106887,695],{"class":457},[398,106889,30690],{"class":408},[398,106891,106892,106894,106896,106899],{"class":400,"line":10018},[398,106893,31492],{"class":457},[398,106895,409],{"class":408},[398,106897,106898],{"class":513},"\"last ctrl:\"",[398,106900,106901],{"class":408},", data.ctrl.copy())\n",[398,106903,106904],{"class":400,"line":10041},[398,106905,2676],{"emptyLinePlaceholder":328},[398,106907,106908],{"class":400,"line":10065},[398,106909,2676],{"emptyLinePlaceholder":328},[398,106911,106912,106914,106916,106918,106920],{"class":400,"line":10070},[398,106913,1807],{"class":404},[398,106915,31413],{"class":457},[398,106917,101752],{"class":404},[398,106919,101755],{"class":513},[398,106921,4015],{"class":408},[398,106923,106924],{"class":400,"line":10075},[398,106925,101762],{"class":408},[19,106927,103763],{},[389,106929,106931],{"className":24099,"code":106930,"language":24101,"meta":316,"style":316},"touch ch4_joint_motor.py\n",[395,106932,106933],{"__ignoreMap":316},[398,106934,106935,106937],{"class":400,"line":401},[398,106936,101476],{"class":2239},[398,106938,106939],{"class":513}," ch4_joint_motor.py\n",[19,106941,102494],{},[389,106943,106945],{"className":24099,"code":106944,"language":24101,"meta":316,"style":316},"python ch4_joint_motor.py\n",[395,106946,106947],{"__ignoreMap":316},[398,106948,106949,106951],{"class":400,"line":401},[398,106950,30573],{"class":2239},[398,106952,106939],{"class":513},[14,106954,101765],{"id":101765},[19,106956,106957],{},"检查 actuator 数量：",[389,106959,106961],{"className":30571,"code":106960,"language":30573,"meta":316,"style":316},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[395,106962,106963,106975],{"__ignoreMap":316},[398,106964,106965,106967,106969,106971,106973],{"class":400,"line":401},[398,106966,1807],{"class":404},[398,106968,106751],{"class":408},[398,106970,21225],{"class":404},[398,106972,25396],{"class":457},[398,106974,4015],{"class":408},[398,106976,106977,106979,106981,106983,106985],{"class":400,"line":317},[398,106978,104088],{"class":404},[398,106980,103628],{"class":457},[398,106982,409],{"class":408},[398,106984,106768],{"class":513},[398,106986,415],{"class":408},[19,106988,106989,106991,106992,106994],{},[395,106990,102351],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[395,106993,101269],{}," 长度应该是 1。",[19,106996,106997],{},"产生正弦控制信号：",[389,106999,107001],{"className":30571,"code":107000,"language":30573,"meta":316,"style":316},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[395,107002,107003],{"__ignoreMap":316},[398,107004,107005,107007,107009,107011,107013,107015,107017,107019,107021,107023,107025,107027,107029,107031],{"class":400,"line":401},[398,107006,106064],{"class":408},[398,107008,593],{"class":457},[398,107010,4719],{"class":408},[398,107012,454],{"class":404},[398,107014,106819],{"class":457},[398,107016,6795],{"class":404},[398,107018,106824],{"class":408},[398,107020,105453],{"class":457},[398,107022,6795],{"class":404},[398,107024,106831],{"class":408},[398,107026,857],{"class":404},[398,107028,62060],{"class":457},[398,107030,6795],{"class":404},[398,107032,106840],{"class":408},[19,107034,107035],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,107037,101866],{},[389,107039,107040],{"className":30571,"code":104698,"language":30573,"meta":316,"style":316},[395,107041,107042],{"__ignoreMap":316},[398,107043,107044],{"class":400,"line":401},[398,107045,104698],{"class":408},[19,107047,107048],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[14,107050,101901],{"id":101901},[389,107052,107054],{"className":30571,"code":107053,"language":30573,"meta":316,"style":316},"import math\n",[395,107055,107056],{"__ignoreMap":316},[398,107057,107058,107060],{"class":400,"line":401},[398,107059,30585],{"class":404},[398,107061,106543],{"class":408},[19,107063,107064,107065,101211,107068,107071],{},"导入 Python 标准库里的数学模块。后面要用 ",[395,107066,107067],{},"math.sin",[395,107069,107070],{},"math.pi"," 生成周期变化的控制信号。",[389,107073,107074],{"className":30571,"code":103879,"language":30573,"meta":316,"style":316},[395,107075,107076,107082],{"__ignoreMap":316},[398,107077,107078,107080],{"class":400,"line":401},[398,107079,30585],{"class":404},[398,107081,101494],{"class":408},[398,107083,107084,107086,107088,107090],{"class":400,"line":317},[398,107085,30585],{"class":404},[398,107087,31573],{"class":408},[398,107089,31576],{"class":404},[398,107091,31579],{"class":408},[19,107093,107094],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[389,107096,107097],{"className":53260,"code":106380,"language":53262,"meta":316,"style":316},[395,107098,107099],{"__ignoreMap":316},[398,107100,107101,107103,107105,107107,107109,107111,107113,107115,107117,107119,107121,107123,107125,107127,107129],{"class":400,"line":401},[398,107102,1312],{"class":408},[398,107104,103149],{"class":51493},[398,107106,15197],{"class":2239},[398,107108,454],{"class":408},[398,107110,106212],{"class":513},[398,107112,54017],{"class":2239},[398,107114,454],{"class":408},[398,107116,106212],{"class":513},[398,107118,106221],{"class":2239},[398,107120,454],{"class":408},[398,107122,106226],{"class":513},[398,107124,106409],{"class":2239},[398,107126,454],{"class":408},[398,107128,106414],{"class":513},[398,107130,101337],{"class":408},[19,107132,107133,107134,107136,107137,107139,107140,107142],{},"这行定义关节。",[395,107135,106033],{}," 表示旋转关节。",[395,107138,106432],{}," 表示绕 y 轴旋转。",[395,107141,106438],{}," 表示有一点阻尼，运动不会完全无损耗。",[389,107144,107146],{"className":53260,"code":107145,"language":53262,"meta":316,"style":316},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[395,107147,107148],{"__ignoreMap":316},[398,107149,107150,107152,107154,107156,107158,107161,107163,107165,107168,107171,107173,107176,107178,107180,107182,107184,107186,107189],{"class":400,"line":401},[398,107151,1312],{"class":408},[398,107153,101313],{"class":51493},[398,107155,15197],{"class":2239},[398,107157,454],{"class":408},[398,107159,107160],{"class":513},"\"link_geom\"",[398,107162,54017],{"class":2239},[398,107164,454],{"class":408},[398,107166,107167],{"class":513},"\"capsule\"",[398,107169,107170],{"class":2239}," fromto",[398,107172,454],{"class":408},[398,107174,107175],{"class":513},"\"0 0 0 0 0 0.5\"",[398,107177,101329],{"class":2239},[398,107179,454],{"class":408},[398,107181,103971],{"class":513},[398,107183,102194],{"class":2239},[398,107185,454],{"class":408},[398,107187,107188],{"class":513},"\"0.5\"",[398,107190,101337],{"class":408},[19,107192,107193,107194,107196,107197,107199,107200,107203,107204,28578,107207,107209],{},"这行定义摆杆的形状。",[395,107195,103358],{}," 是胶囊体，适合表示杆子。",[395,107198,103369],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[395,107201,107202],{},"(0,0,0)"," 延伸到 ",[395,107205,107206],{},"(0,0,0.5)",[395,107208,103363],{}," 是半径。",[389,107211,107212],{"className":53260,"code":106446,"language":53262,"meta":316,"style":316},[395,107213,107214],{"__ignoreMap":316},[398,107215,107216,107218,107220,107222,107224,107226,107228,107230,107232,107234,107236,107238,107240,107242,107244,107246,107248,107250],{"class":400,"line":401},[398,107217,1312],{"class":408},[398,107219,106267],{"class":51493},[398,107221,15197],{"class":2239},[398,107223,454],{"class":408},[398,107225,106274],{"class":513},[398,107227,106277],{"class":2239},[398,107229,454],{"class":408},[398,107231,106212],{"class":513},[398,107233,106284],{"class":2239},[398,107235,454],{"class":408},[398,107237,3954],{"class":513},[398,107239,106291],{"class":2239},[398,107241,454],{"class":408},[398,107243,106296],{"class":513},[398,107245,106299],{"class":2239},[398,107247,454],{"class":408},[398,107249,106304],{"class":513},[398,107251,101337],{"class":408},[19,107253,107254,107255,107257,107258,107261,107262,107264],{},"这行定义电机。它作用在 ",[395,107256,106033],{}," 关节上。",[395,107259,107260],{},"gear"," 可以理解成放大倍数。",[395,107263,106048],{}," 限制控制输入范围。",[389,107266,107267],{"className":30571,"code":106960,"language":30573,"meta":316,"style":316},[395,107268,107269,107281],{"__ignoreMap":316},[398,107270,107271,107273,107275,107277,107279],{"class":400,"line":401},[398,107272,1807],{"class":404},[398,107274,106751],{"class":408},[398,107276,21225],{"class":404},[398,107278,25396],{"class":457},[398,107280,4015],{"class":408},[398,107282,107283,107285,107287,107289,107291],{"class":400,"line":317},[398,107284,104088],{"class":404},[398,107286,103628],{"class":457},[398,107288,409],{"class":408},[398,107290,106768],{"class":513},[398,107292,415],{"class":408},[19,107294,107295,107297],{},[395,107296,102351],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[389,107299,107301],{"className":30571,"code":107300,"language":30573,"meta":316,"style":316},"for step in range(2000):\n",[395,107302,107303],{"__ignoreMap":316},[398,107304,107305,107307,107309,107311,107313,107315,107317],{"class":400,"line":401},[398,107306,3301],{"class":404},[398,107308,31809],{"class":408},[398,107310,26236],{"class":404},[398,107312,32636],{"class":457},[398,107314,409],{"class":408},[398,107316,106789],{"class":457},[398,107318,30979],{"class":408},[19,107320,107321,107322,107324,107325,107328],{},"循环 2000 步。这里没有用 ",[395,107323,1394],{},"，而是用 ",[395,107326,107327],{},"step","，因为后面要用当前步数计算时间。",[389,107330,107332],{"className":30571,"code":107331,"language":30573,"meta":316,"style":316},"t = step * model.opt.timestep\n",[395,107333,107334],{"__ignoreMap":316},[398,107335,107336,107339,107341,107343,107345],{"class":400,"line":401},[398,107337,107338],{"class":408},"t ",[398,107340,454],{"class":404},[398,107342,31809],{"class":408},[398,107344,857],{"class":404},[398,107346,106805],{"class":408},[19,107348,107349],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[389,107351,107352],{"className":30571,"code":107000,"language":30573,"meta":316,"style":316},[395,107353,107354],{"__ignoreMap":316},[398,107355,107356,107358,107360,107362,107364,107366,107368,107370,107372,107374,107376,107378,107380,107382],{"class":400,"line":401},[398,107357,106064],{"class":408},[398,107359,593],{"class":457},[398,107361,4719],{"class":408},[398,107363,454],{"class":404},[398,107365,106819],{"class":457},[398,107367,6795],{"class":404},[398,107369,106824],{"class":408},[398,107371,105453],{"class":457},[398,107373,6795],{"class":404},[398,107375,106831],{"class":408},[398,107377,857],{"class":404},[398,107379,62060],{"class":457},[398,107381,6795],{"class":404},[398,107383,106840],{"class":408},[19,107385,107386],{},"这行给电机输入一个正弦波。拆开看：",[38,107388,107389,107395,107401],{},[41,107390,107391,107394],{},[395,107392,107393],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[41,107396,107397,107400],{},[395,107398,107399],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[41,107402,107403,107406],{},[395,107404,107405],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,107408,107409],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[389,107411,107413],{"className":30571,"code":107412,"language":30573,"meta":316,"style":316},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[395,107414,107415],{"__ignoreMap":316},[398,107416,107417,107419,107421,107423,107425,107427],{"class":400,"line":401},[398,107418,30608],{"class":457},[398,107420,409],{"class":408},[398,107422,106868],{"class":513},[398,107424,105123],{"class":408},[398,107426,695],{"class":457},[398,107428,30690],{"class":408},[19,107430,107431,107432,107434],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[395,107433,101263],{}," 只有一个数。",[343,107436,102509],{"id":102508},[19,107438,107439],{},"输出类似:",[389,107441,107444],{"className":107442,"code":107443,"language":5464,"meta":316},[5462],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[395,107445,107443],{"__ignoreMap":316},[19,107447,107448,107449,107451],{},"这里 ",[395,107450,106319],{}," 是电机输入。",[19,107453,107454,107457,107458,107461],{},[395,107455,107456],{},"joint qpos"," 是关节角度，单位通常是弧度。",[395,107459,107460],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,107463,107464],{},"角度单位提示：",[389,107466,107469],{"className":107467,"code":107468,"language":5464,"meta":316},[5462],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[395,107470,107468],{"__ignoreMap":316},[19,107472,107473,107474,107476,107477,107479],{},"如果你看到 ",[395,107475,104223],{}," 是 ",[395,107478,35522],{},"，大约就是 28.6 度。",[343,107481,102541],{"id":102540},[38,107483,107484,107491,107494,107501,107504,107512,107520],{},[41,107485,102604,107486,102607,107488,28578],{},[395,107487,106504],{},[395,107489,107490],{},"gear=\"5\"",[41,107492,107493],{},"重新运行，观察关节运动是否更剧烈。",[41,107495,102604,107496,102607,107498,28578],{},[395,107497,106048],{},[395,107499,107500],{},"-0.2 0.2",[41,107502,107503],{},"重新运行，观察控制能力是否变弱。",[41,107505,107506,107507,107509,107510,28578],{},"去掉 actuator，确认 ",[395,107508,102351],{}," 变成 ",[395,107511,593],{},[41,107513,102604,107514,102607,107516,107519],{},[395,107515,106438],{},[395,107517,107518],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[41,107521,102604,107522,102607,107524,107527],{},[395,107523,106432],{},[395,107525,107526],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[343,107529,102646],{"id":102645},[14,107531,107533],{"id":107532},"indexerror-index-0-is-out-of-bounds",[395,107534,107535],{},"IndexError: index 0 is out of bounds",[19,107537,107538,107539,107541],{},"原因是 ",[395,107540,106185],{},"，没有 actuator。",[14,107543,107544],{"id":107544},"关节几乎不动",[19,107546,107547],{},"可能原因:",[38,107549,107550,107555,107559,107565],{},[41,107551,107552,107554],{},[395,107553,107260],{}," 太小",[41,107556,107557,107554],{},[395,107558,106048],{},[41,107560,107561,107564],{},[395,107562,107563],{},"damping"," 太大",[41,107566,107567],{},"重力方向导致运动不明显",[14,107569,107570],{"id":107570},"模型编译失败",[19,107572,107573,107574,107576],{},"检查 actuator 引用的 ",[395,107575,106495],{}," 是否存在，joint 名称是否拼写一致。",[14,107578,107580,107582],{"id":107579},"datactrl0-写了但没有效果",[395,107581,106319],{}," 写了但没有效果",[19,107584,102768],{},[38,107586,107587,107592,107595,107600,107605],{},[41,107588,107589,107591],{},[395,107590,102351],{}," 是否大于 0。",[41,107593,107594],{},"motor 是否引用了正确 joint。",[41,107596,107597,107599],{},[395,107598,107260],{}," 是否太小。",[41,107601,107602,107604],{},[395,107603,106048],{}," 是否把输入限制得太小。",[41,107606,107607],{},"body 是否真的有可动 joint。",[14,107609,107610],{"id":107610},"控制输入超过范围会怎样",[19,107612,107613],{},"如果设置了：",[389,107615,107617],{"className":53260,"code":107616,"language":53262,"meta":316,"style":316},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[395,107618,107619],{"__ignoreMap":316},[398,107620,107621],{"class":400,"line":401},[398,107622,107616],{"class":408},[19,107624,107625],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[389,107627,107629],{"className":30571,"code":107628,"language":30573,"meta":316,"style":316},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[395,107630,107631,107651],{"__ignoreMap":316},[398,107632,107633,107636,107638,107641,107643,107645,107647,107649],{"class":400,"line":401},[398,107634,107635],{"class":408},"action ",[398,107637,454],{"class":404},[398,107639,107640],{"class":408}," np.clip(action, ",[398,107642,934],{"class":404},[398,107644,105453],{"class":457},[398,107646,12712],{"class":408},[398,107648,105453],{"class":457},[398,107650,415],{"class":408},[398,107652,107653,107655,107657,107659,107661],{"class":400,"line":317},[398,107654,106064],{"class":408},[398,107656,593],{"class":457},[398,107658,4719],{"class":408},[398,107660,454],{"class":404},[398,107662,107663],{"class":408}," action\n",[343,107665,102800],{"id":102799},[19,107667,107668],{},"这一章建立了控制任务的基本形式：",[389,107670,107673],{"className":107671,"code":107672,"language":5464,"meta":316},[5462],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[395,107674,107672],{"__ignoreMap":316},[19,107676,107677],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[5403,107679,107680],{},"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":316,"searchDepth":317,"depth":317,"links":107682},[107683,107684,107685,107690,107694,107695,107696,107704],{"id":100839,"depth":317,"text":100840},{"id":100962,"depth":317,"text":100963},{"id":101237,"depth":317,"text":101238,"children":107686},[107687,107688,107689],{"id":106326,"depth":320,"text":106327},{"id":106376,"depth":320,"text":106377},{"id":106442,"depth":320,"text":106443},{"id":101445,"depth":317,"text":101446,"children":107691},[107692,107693],{"id":101765,"depth":320,"text":101765},{"id":101901,"depth":320,"text":101901},{"id":102508,"depth":317,"text":102509},{"id":102540,"depth":317,"text":102541},{"id":102645,"depth":317,"text":102646,"children":107697},[107698,107699,107700,107701,107703],{"id":107532,"depth":320,"text":107535},{"id":107544,"depth":320,"text":107544},{"id":107570,"depth":320,"text":107570},{"id":107579,"depth":320,"text":107702},"data.ctrl[0] 写了但没有效果",{"id":107610,"depth":320,"text":107610},{"id":102799,"depth":317,"text":102800},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":106014,"description":316},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107711,"title":107712,"body":107713,"description":316,"extension":326,"meta":109622,"navigation":328,"path":109623,"seo":109624,"stem":109625,"__hash__":109626},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107714,"toc":109598},[107715,107718,107720,107723,107731,107734,107751,107754,107779,107782,107828,107830,107832,107887,107889,107908,107910,107953,107956,107973,107976,107992,108002,108009,108011,108014,108017,108051,108054,108102,108106,108109,108123,108132,108136,108139,108164,108167,108171,108184,108187,108193,108196,108211,108213,108216,108476,108478,108490,108493,108805,108807,108819,108821,108824,108839,108844,108847,108869,108872,108875,108909,108912,108916,108927,108930,108947,108950,108964,108971,108991,108998,109012,109015,109027,109042,109062,109065,109087,109090,109094,109109,109120,109135,109138,109168,109184,109213,109221,109245,109248,109266,109276,109288,109295,109304,109310,109319,109322,109324,109333,109336,109351,109353,109356,109367,109370,109381,109384,109402,109404,109421,109424,109452,109454,109458,109461,109491,109497,109500,109504,109512,109515,109517,109538,109541,109544,109560,109563,109579,109581,109584,109595],[10,107716,107712],{"id":107717},"_5viewer-可视化与-renderer-离屏渲染",[343,107719,100840],{"id":100839},[19,107721,107722],{},"本章掌握两类可视化方式:",[38,107724,107725,107728],{},[41,107726,107727],{},"交互式 viewer: 适合人工观察仿真",[41,107729,107730],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,107732,107733],{},"使用官方接口:",[389,107735,107737],{"className":30571,"code":107736,"language":30573,"meta":316,"style":316},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[395,107738,107739,107746],{"__ignoreMap":316},[398,107740,107741,107743],{"class":400,"line":401},[398,107742,30585],{"class":404},[398,107744,107745],{"class":408}," mujoco.viewer\n",[398,107747,107748],{"class":400,"line":317},[398,107749,107750],{"class":408},"mujoco.viewer.launch_passive(model, data)\n",[19,107752,107753],{},"以及:",[389,107755,107757],{"className":30571,"code":107756,"language":30573,"meta":316,"style":316},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[395,107758,107759,107769],{"__ignoreMap":316},[398,107760,107761,107764,107766],{"class":400,"line":401},[398,107762,107763],{"class":408},"renderer ",[398,107765,454],{"class":404},[398,107767,107768],{"class":408}," mujoco.Renderer(model)\n",[398,107770,107771,107774,107776],{"class":400,"line":317},[398,107772,107773],{"class":408},"image ",[398,107775,454],{"class":404},[398,107777,107778],{"class":408}," renderer.render()\n",[19,107780,107781],{},"新手建议先理解二者区别：",[84,107783,107784,107800],{},[87,107785,107786],{},[90,107787,107788,107791,107794,107797],{},[93,107789,107790],{"align":95},"工具",[93,107792,107793],{"align":95},"用途",[93,107795,107796],{"align":95},"是否打开窗口",[93,107798,107799],{"align":95},"常见场景",[101,107801,107802,107815],{},[90,107803,107804,107807,107810,107812],{},[106,107805,107806],{"align":95},"Viewer",[106,107808,107809],{"align":95},"人眼实时观察仿真",[106,107811,104858],{"align":95},[106,107813,107814],{"align":95},"调试模型、看控制效果",[90,107816,107817,107820,107823,107825],{},[106,107818,107819],{"align":95},"Renderer",[106,107821,107822],{"align":95},"生成图像数组",[106,107824,104871],{"align":95},[106,107826,107827],{"align":95},"保存图片、训练视觉策略、服务器批量采集",[343,107829,100963],{"id":100962},[19,107831,100966],{},[389,107833,107835],{"className":24099,"code":107834,"language":24101,"meta":316,"style":316},"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",[395,107836,107837,107849,107859,107867,107875],{"__ignoreMap":316},[398,107838,107839,107841,107843,107845,107847],{"class":400,"line":401},[398,107840,24854],{"class":2239},[398,107842,26508],{"class":513},[398,107844,24111],{"class":513},[398,107846,26593],{"class":457},[398,107848,24956],{"class":457},[398,107850,107851,107853,107855,107857],{"class":400,"line":317},[398,107852,101001],{"class":513},[398,107854,101004],{"class":513},[398,107856,101007],{"class":513},[398,107858,24956],{"class":457},[398,107860,107861,107863,107865],{"class":400,"line":320},[398,107862,101014],{"class":513},[398,107864,101017],{"class":513},[398,107866,24956],{"class":457},[398,107868,107869,107871,107873],{"class":400,"line":1470},[398,107870,101024],{"class":513},[398,107872,101027],{"class":513},[398,107874,24956],{"class":457},[398,107876,107877,107879,107881,107883,107885],{"class":400,"line":1476},[398,107878,101034],{"class":513},[398,107880,101037],{"class":513},[398,107882,101040],{"class":513},[398,107884,101043],{"class":513},[398,107886,102709],{"class":513},[19,107888,103012],{},[389,107890,107892],{"className":24099,"code":107891,"language":24101,"meta":316,"style":316},"pip install \"mujoco>=2.3\" numpy pillow\n",[395,107893,107894],{"__ignoreMap":316},[398,107895,107896,107898,107900,107902,107905],{"class":400,"line":401},[398,107897,24108],{"class":2239},[398,107899,24111],{"class":513},[398,107901,101123],{"class":513},[398,107903,107904],{"class":513}," numpy",[398,107906,107907],{"class":513}," pillow\n",[19,107909,103029],{},[389,107911,107913],{"className":24099,"code":107912,"language":24101,"meta":316,"style":316},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[395,107914,107915,107932,107941],{"__ignoreMap":316},[398,107916,107917,107919,107921,107923,107926,107928,107930],{"class":400,"line":401},[398,107918,30523],{"class":2239},[398,107920,29369],{"class":513},[398,107922,25393],{"class":457},[398,107924,107925],{"class":513}," mujoco-render",[398,107927,101168],{"class":513},[398,107929,101171],{"class":457},[398,107931,101174],{"class":457},[398,107933,107934,107936,107938],{"class":400,"line":317},[398,107935,30523],{"class":2239},[398,107937,101181],{"class":513},[398,107939,107940],{"class":513}," mujoco-render\n",[398,107942,107943,107945,107947,107949,107951],{"class":400,"line":320},[398,107944,24108],{"class":2239},[398,107946,24111],{"class":513},[398,107948,101123],{"class":513},[398,107950,107904],{"class":513},[398,107952,107907],{"class":513},[19,107954,107955],{},"离屏渲染后端:",[389,107957,107959],{"className":24099,"code":107958,"language":24101,"meta":316,"style":316},"export MUJOCO_GL=egl\n",[395,107960,107961],{"__ignoreMap":316},[398,107962,107963,107965,107968,107970],{"class":400,"line":401},[398,107964,25320],{"class":404},[398,107966,107967],{"class":408}," MUJOCO_GL",[398,107969,454],{"class":404},[398,107971,107972],{"class":408},"egl\n",[19,107974,107975],{},"或:",[389,107977,107979],{"className":24099,"code":107978,"language":24101,"meta":316,"style":316},"export MUJOCO_GL=osmesa\n",[395,107980,107981],{"__ignoreMap":316},[398,107982,107983,107985,107987,107989],{"class":400,"line":401},[398,107984,25320],{"class":404},[398,107986,107967],{"class":408},[398,107988,454],{"class":404},[398,107990,107991],{"class":408},"osmesa\n",[19,107993,107994,107995,107998,107999,28578],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[395,107996,107997],{},"egl"," 失败，再尝试 ",[395,108000,108001],{},"osmesa",[19,108003,108004,108005,108008],{},"如果你在本机桌面环境运行，通常先不要设置 ",[395,108006,108007],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[343,108010,101238],{"id":101237},[19,108012,108013],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,108015,108016],{},"典型 viewer 流程:",[389,108018,108020],{"className":30571,"code":108019,"language":30573,"meta":316,"style":316},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[395,108021,108022,108035,108042,108046],{"__ignoreMap":316},[398,108023,108024,108027,108030,108032],{"class":400,"line":401},[398,108025,108026],{"class":404},"with",[398,108028,108029],{"class":408}," mujoco.viewer.launch_passive(model, data) ",[398,108031,31576],{"class":404},[398,108033,108034],{"class":408}," viewer:\n",[398,108036,108037,108039],{"class":400,"line":317},[398,108038,2527],{"class":404},[398,108040,108041],{"class":408}," viewer.is_running():\n",[398,108043,108044],{"class":400,"line":320},[398,108045,101709],{"class":408},[398,108047,108048],{"class":400,"line":1470},[398,108049,108050],{"class":408},"        viewer.sync()\n",[19,108052,108053],{},"典型 renderer 流程:",[389,108055,108057],{"className":30571,"code":108056,"language":30573,"meta":316,"style":316},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[395,108058,108059,108085,108089,108094],{"__ignoreMap":316},[398,108060,108061,108063,108065,108068,108070,108072,108074,108076,108078,108080,108083],{"class":400,"line":401},[398,108062,107763],{"class":408},[398,108064,454],{"class":404},[398,108066,108067],{"class":408}," mujoco.Renderer(model, ",[398,108069,25259],{"class":5493},[398,108071,454],{"class":404},[398,108073,42535],{"class":457},[398,108075,12712],{"class":408},[398,108077,25255],{"class":5493},[398,108079,454],{"class":404},[398,108081,108082],{"class":457},"640",[398,108084,415],{"class":408},[398,108086,108087],{"class":400,"line":317},[398,108088,104698],{"class":408},[398,108090,108091],{"class":400,"line":320},[398,108092,108093],{"class":408},"renderer.update_scene(data)\n",[398,108095,108096,108098,108100],{"class":400,"line":1470},[398,108097,107773],{"class":408},[398,108099,454],{"class":404},[398,108101,107778],{"class":408},[14,108103,108105],{"id":108104},"viewer-的同步逻辑","viewer 的同步逻辑",[19,108107,108108],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[389,108110,108112],{"className":30571,"code":108111,"language":30573,"meta":316,"style":316},"mujoco.mj_step(model, data)\nviewer.sync()\n",[395,108113,108114,108118],{"__ignoreMap":316},[398,108115,108116],{"class":400,"line":401},[398,108117,104698],{"class":408},[398,108119,108120],{"class":400,"line":317},[398,108121,108122],{"class":408},"viewer.sync()\n",[19,108124,108125,108127,108128,108131],{},[395,108126,101408],{}," 负责算物理，",[395,108129,108130],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[14,108133,108135],{"id":108134},"为什么要-sleep","为什么要 sleep",[19,108137,108138],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[389,108140,108142],{"className":30571,"code":108141,"language":30573,"meta":316,"style":316},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[395,108143,108144],{"__ignoreMap":316},[398,108145,108146,108149,108151,108154,108156,108159,108161],{"class":400,"line":401},[398,108147,108148],{"class":408},"sleep_time ",[398,108150,454],{"class":404},[398,108152,108153],{"class":408}," model.opt.timestep ",[398,108155,934],{"class":404},[398,108157,108158],{"class":408}," (time.time() ",[398,108160,934],{"class":404},[398,108162,108163],{"class":408}," step_start)\n",[19,108165,108166],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[14,108168,108170],{"id":108169},"renderer-输出是什么","renderer 输出是什么",[389,108172,108174],{"className":30571,"code":108173,"language":30573,"meta":316,"style":316},"image = renderer.render()\n",[395,108175,108176],{"__ignoreMap":316},[398,108177,108178,108180,108182],{"class":400,"line":401},[398,108179,107773],{"class":408},[398,108181,454],{"class":404},[398,108183,107778],{"class":408},[19,108185,108186],{},"得到的是 NumPy 数组，形状通常是：",[389,108188,108191],{"className":108189,"code":108190,"language":5464,"meta":316},[5462],"(height, width, 3)\n",[395,108192,108190],{"__ignoreMap":316},[19,108194,108195],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[389,108197,108199],{"className":30571,"code":108198,"language":30573,"meta":316,"style":316},"Image.fromarray(image).save(\"render_output.png\")\n",[395,108200,108201],{"__ignoreMap":316},[398,108202,108203,108206,108209],{"class":400,"line":401},[398,108204,108205],{"class":408},"Image.fromarray(image).save(",[398,108207,108208],{"class":513},"\"render_output.png\"",[398,108210,415],{"class":408},[343,108212,101446],{"id":101445},[19,108214,108215],{},"交互式 Viewer:",[389,108217,108219],{"className":30571,"code":108218,"language":30573,"meta":316,"style":316},"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",[395,108220,108221,108227,108231,108237,108243,108247,108251,108259,108264,108268,108272,108276,108281,108286,108290,108294,108298,108303,108307,108311,108315,108319,108323,108327,108339,108351,108359,108363,108373,108393,108403,108408,108413,108417,108434,108447,108452,108456,108460,108472],{"__ignoreMap":316},[398,108222,108223,108225],{"class":400,"line":401},[398,108224,30585],{"class":404},[398,108226,32022],{"class":408},[398,108228,108229],{"class":400,"line":317},[398,108230,2676],{"emptyLinePlaceholder":328},[398,108232,108233,108235],{"class":400,"line":320},[398,108234,30585],{"class":404},[398,108236,101494],{"class":408},[398,108238,108239,108241],{"class":400,"line":1470},[398,108240,30585],{"class":404},[398,108242,107745],{"class":408},[398,108244,108245],{"class":400,"line":1476},[398,108246,2676],{"emptyLinePlaceholder":328},[398,108248,108249],{"class":400,"line":1490},[398,108250,2676],{"emptyLinePlaceholder":328},[398,108252,108253,108255,108257],{"class":400,"line":1496},[398,108254,101507],{"class":457},[398,108256,13841],{"class":404},[398,108258,101512],{"class":513},[398,108260,108261],{"class":400,"line":1587},[398,108262,108263],{"class":513},"\u003Cmujoco model=\"viewer_demo\">\n",[398,108265,108266],{"class":400,"line":1593},[398,108267,101522],{"class":513},[398,108269,108270],{"class":400,"line":1605},[398,108271,2676],{"emptyLinePlaceholder":328},[398,108273,108274],{"class":400,"line":1888},[398,108275,101531],{"class":513},[398,108277,108278],{"class":400,"line":1893},[398,108279,108280],{"class":513},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[398,108282,108283],{"class":400,"line":1899},[398,108284,108285],{"class":513},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[398,108287,108288],{"class":400,"line":1904},[398,108289,2676],{"emptyLinePlaceholder":328},[398,108291,108292],{"class":400,"line":1918},[398,108293,101545],{"class":513},[398,108295,108296],{"class":400,"line":1923},[398,108297,101550],{"class":513},[398,108299,108300],{"class":400,"line":1929},[398,108301,108302],{"class":513},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[398,108304,108305],{"class":400,"line":1950},[398,108306,101560],{"class":513},[398,108308,108309],{"class":400,"line":1955},[398,108310,101565],{"class":513},[398,108312,108313],{"class":400,"line":1969},[398,108314,101570],{"class":513},[398,108316,108317],{"class":400,"line":1974},[398,108318,95891],{"class":513},[398,108320,108321],{"class":400,"line":2003},[398,108322,2676],{"emptyLinePlaceholder":328},[398,108324,108325],{"class":400,"line":2008},[398,108326,2676],{"emptyLinePlaceholder":328},[398,108328,108329,108331,108333,108335,108337],{"class":400,"line":2025},[398,108330,32140],{"class":404},[398,108332,2249],{"class":2239},[398,108334,101591],{"class":408},[398,108336,95879],{"class":457},[398,108338,4015],{"class":408},[398,108340,108341,108343,108345,108347,108349],{"class":400,"line":2030},[398,108342,101600],{"class":408},[398,108344,454],{"class":404},[398,108346,101605],{"class":408},[398,108348,101507],{"class":457},[398,108350,415],{"class":408},[398,108352,108353,108355,108357],{"class":400,"line":2035},[398,108354,101614],{"class":408},[398,108356,454],{"class":404},[398,108358,101619],{"class":408},[398,108360,108361],{"class":400,"line":2040},[398,108362,2676],{"emptyLinePlaceholder":328},[398,108364,108365,108367,108369,108371],{"class":400,"line":2054},[398,108366,34371],{"class":404},[398,108368,108029],{"class":408},[398,108370,31576],{"class":404},[398,108372,108034],{"class":408},[398,108374,108375,108378,108381,108383,108386,108388,108391],{"class":400,"line":2059},[398,108376,108377],{"class":404},"        while",[398,108379,108380],{"class":408}," viewer.is_running() ",[398,108382,30655],{"class":404},[398,108384,108385],{"class":408}," data.time ",[398,108387,1312],{"class":404},[398,108389,108390],{"class":457}," 5.0",[398,108392,4015],{"class":408},[398,108394,108395,108398,108400],{"class":400,"line":2853},[398,108396,108397],{"class":408},"            step_start ",[398,108399,454],{"class":404},[398,108401,108402],{"class":408}," time.time()\n",[398,108404,108405],{"class":400,"line":2867},[398,108406,108407],{"class":408},"            mujoco.mj_step(model, data)\n",[398,108409,108410],{"class":400,"line":2875},[398,108411,108412],{"class":408},"            viewer.sync()\n",[398,108414,108415],{"class":400,"line":2880},[398,108416,2676],{"emptyLinePlaceholder":328},[398,108418,108419,108422,108424,108426,108428,108430,108432],{"class":400,"line":2886},[398,108420,108421],{"class":408},"            sleep_time ",[398,108423,454],{"class":404},[398,108425,108153],{"class":408},[398,108427,934],{"class":404},[398,108429,108158],{"class":408},[398,108431,934],{"class":404},[398,108433,108163],{"class":408},[398,108435,108436,108438,108441,108443,108445],{"class":400,"line":2892},[398,108437,4918],{"class":404},[398,108439,108440],{"class":408}," sleep_time ",[398,108442,1362],{"class":404},[398,108444,4369],{"class":457},[398,108446,4015],{"class":408},[398,108448,108449],{"class":400,"line":2897},[398,108450,108451],{"class":408},"                time.sleep(sleep_time)\n",[398,108453,108454],{"class":400,"line":8225},[398,108455,2676],{"emptyLinePlaceholder":328},[398,108457,108458],{"class":400,"line":8249},[398,108459,2676],{"emptyLinePlaceholder":328},[398,108461,108462,108464,108466,108468,108470],{"class":400,"line":8254},[398,108463,1807],{"class":404},[398,108465,31413],{"class":457},[398,108467,101752],{"class":404},[398,108469,101755],{"class":513},[398,108471,4015],{"class":408},[398,108473,108474],{"class":400,"line":8260},[398,108475,101762],{"class":408},[19,108477,103763],{},[389,108479,108481],{"className":24099,"code":108480,"language":24101,"meta":316,"style":316},"touch ch5_viewer.py\n",[395,108482,108483],{"__ignoreMap":316},[398,108484,108485,108487],{"class":400,"line":401},[398,108486,101476],{"class":2239},[398,108488,108489],{"class":513}," ch5_viewer.py\n",[19,108491,108492],{},"离屏 Renderer 保存图片:",[389,108494,108496],{"className":30571,"code":108495,"language":30573,"meta":316,"style":316},"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",[395,108497,108498,108510,108514,108520,108530,108534,108538,108546,108551,108555,108559,108563,108567,108572,108576,108580,108584,108588,108592,108596,108600,108604,108608,108612,108616,108628,108640,108648,108673,108677,108693,108697,108701,108716,108725,108729,108743,108748,108753,108757,108769,108781,108785,108789,108801],{"__ignoreMap":316},[398,108499,108500,108502,108505,108507],{"class":400,"line":401},[398,108501,30930],{"class":404},[398,108503,108504],{"class":408}," pathlib ",[398,108506,30585],{"class":404},[398,108508,108509],{"class":408}," Path\n",[398,108511,108512],{"class":400,"line":317},[398,108513,2676],{"emptyLinePlaceholder":328},[398,108515,108516,108518],{"class":400,"line":320},[398,108517,30585],{"class":404},[398,108519,101494],{"class":408},[398,108521,108522,108524,108526,108528],{"class":400,"line":1470},[398,108523,30930],{"class":404},[398,108525,47456],{"class":457},[398,108527,47459],{"class":404},[398,108529,47462],{"class":408},[398,108531,108532],{"class":400,"line":1476},[398,108533,2676],{"emptyLinePlaceholder":328},[398,108535,108536],{"class":400,"line":1490},[398,108537,2676],{"emptyLinePlaceholder":328},[398,108539,108540,108542,108544],{"class":400,"line":1496},[398,108541,101507],{"class":457},[398,108543,13841],{"class":404},[398,108545,101512],{"class":513},[398,108547,108548],{"class":400,"line":1587},[398,108549,108550],{"class":513},"\u003Cmujoco model=\"renderer_demo\">\n",[398,108552,108553],{"class":400,"line":1593},[398,108554,101522],{"class":513},[398,108556,108557],{"class":400,"line":1605},[398,108558,2676],{"emptyLinePlaceholder":328},[398,108560,108561],{"class":400,"line":1888},[398,108562,101531],{"class":513},[398,108564,108565],{"class":400,"line":1893},[398,108566,108280],{"class":513},[398,108568,108569],{"class":400,"line":1899},[398,108570,108571],{"class":513},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[398,108573,108574],{"class":400,"line":1904},[398,108575,108285],{"class":513},[398,108577,108578],{"class":400,"line":1918},[398,108579,2676],{"emptyLinePlaceholder":328},[398,108581,108582],{"class":400,"line":1923},[398,108583,101545],{"class":513},[398,108585,108586],{"class":400,"line":1929},[398,108587,101550],{"class":513},[398,108589,108590],{"class":400,"line":1950},[398,108591,108302],{"class":513},[398,108593,108594],{"class":400,"line":1955},[398,108595,101560],{"class":513},[398,108597,108598],{"class":400,"line":1969},[398,108599,101565],{"class":513},[398,108601,108602],{"class":400,"line":1974},[398,108603,101570],{"class":513},[398,108605,108606],{"class":400,"line":2003},[398,108607,95891],{"class":513},[398,108609,108610],{"class":400,"line":2008},[398,108611,2676],{"emptyLinePlaceholder":328},[398,108613,108614],{"class":400,"line":2025},[398,108615,2676],{"emptyLinePlaceholder":328},[398,108617,108618,108620,108622,108624,108626],{"class":400,"line":2030},[398,108619,32140],{"class":404},[398,108621,2249],{"class":2239},[398,108623,101591],{"class":408},[398,108625,95879],{"class":457},[398,108627,4015],{"class":408},[398,108629,108630,108632,108634,108636,108638],{"class":400,"line":2035},[398,108631,101600],{"class":408},[398,108633,454],{"class":404},[398,108635,101605],{"class":408},[398,108637,101507],{"class":457},[398,108639,415],{"class":408},[398,108641,108642,108644,108646],{"class":400,"line":2040},[398,108643,101614],{"class":408},[398,108645,454],{"class":404},[398,108647,101619],{"class":408},[398,108649,108650,108653,108655,108657,108659,108661,108663,108665,108667,108669,108671],{"class":400,"line":2054},[398,108651,108652],{"class":408},"    renderer ",[398,108654,454],{"class":404},[398,108656,108067],{"class":408},[398,108658,25259],{"class":5493},[398,108660,454],{"class":404},[398,108662,42535],{"class":457},[398,108664,12712],{"class":408},[398,108666,25255],{"class":5493},[398,108668,454],{"class":404},[398,108670,108082],{"class":457},[398,108672,415],{"class":408},[398,108674,108675],{"class":400,"line":2059},[398,108676,2676],{"emptyLinePlaceholder":328},[398,108678,108679,108681,108683,108685,108687,108689,108691],{"class":400,"line":2853},[398,108680,3477],{"class":404},[398,108682,101694],{"class":408},[398,108684,26236],{"class":404},[398,108686,32636],{"class":457},[398,108688,409],{"class":408},[398,108690,713],{"class":457},[398,108692,30979],{"class":408},[398,108694,108695],{"class":400,"line":2867},[398,108696,101709],{"class":408},[398,108698,108699],{"class":400,"line":2875},[398,108700,2676],{"emptyLinePlaceholder":328},[398,108702,108703,108706,108709,108711,108714],{"class":400,"line":2880},[398,108704,108705],{"class":408},"    renderer.update_scene(data, ",[398,108707,108708],{"class":5493},"camera",[398,108710,454],{"class":404},[398,108712,108713],{"class":513},"\"fixed_camera\"",[398,108715,415],{"class":408},[398,108717,108718,108721,108723],{"class":400,"line":2886},[398,108719,108720],{"class":408},"    image ",[398,108722,454],{"class":404},[398,108724,107778],{"class":408},[398,108726,108727],{"class":400,"line":2892},[398,108728,2676],{"emptyLinePlaceholder":328},[398,108730,108731,108734,108736,108739,108741],{"class":400,"line":2897},[398,108732,108733],{"class":408},"    output_path ",[398,108735,454],{"class":404},[398,108737,108738],{"class":408}," Path(",[398,108740,108208],{"class":513},[398,108742,415],{"class":408},[398,108744,108745],{"class":400,"line":8225},[398,108746,108747],{"class":408},"    Image.fromarray(image).save(output_path)\n",[398,108749,108750],{"class":400,"line":8249},[398,108751,108752],{"class":408},"    renderer.close()\n",[398,108754,108755],{"class":400,"line":8254},[398,108756,2676],{"emptyLinePlaceholder":328},[398,108758,108759,108761,108763,108766],{"class":400,"line":8260},[398,108760,31492],{"class":457},[398,108762,409],{"class":408},[398,108764,108765],{"class":513},"\"saved:\"",[398,108767,108768],{"class":408},", output_path.resolve())\n",[398,108770,108771,108773,108775,108778],{"class":400,"line":8287},[398,108772,31492],{"class":457},[398,108774,409],{"class":408},[398,108776,108777],{"class":513},"\"image shape:\"",[398,108779,108780],{"class":408},", image.shape)\n",[398,108782,108783],{"class":400,"line":8292},[398,108784,2676],{"emptyLinePlaceholder":328},[398,108786,108787],{"class":400,"line":8298},[398,108788,2676],{"emptyLinePlaceholder":328},[398,108790,108791,108793,108795,108797,108799],{"class":400,"line":8310},[398,108792,1807],{"class":404},[398,108794,31413],{"class":457},[398,108796,101752],{"class":404},[398,108798,101755],{"class":513},[398,108800,4015],{"class":408},[398,108802,108803],{"class":400,"line":8322},[398,108804,101762],{"class":408},[19,108806,103763],{},[389,108808,108810],{"className":24099,"code":108809,"language":24101,"meta":316,"style":316},"touch ch5_renderer.py\n",[395,108811,108812],{"__ignoreMap":316},[398,108813,108814,108816],{"class":400,"line":401},[398,108815,101476],{"class":2239},[398,108817,108818],{"class":513}," ch5_renderer.py\n",[14,108820,101765],{"id":101765},[19,108822,108823],{},"viewer 上下文：",[389,108825,108827],{"className":30571,"code":108826,"language":30573,"meta":316,"style":316},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[395,108828,108829],{"__ignoreMap":316},[398,108830,108831,108833,108835,108837],{"class":400,"line":401},[398,108832,108026],{"class":404},[398,108834,108029],{"class":408},[398,108836,31576],{"class":404},[398,108838,108034],{"class":408},[19,108840,108841,108843],{},[395,108842,108026],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,108845,108846],{},"窗口循环：",[389,108848,108850],{"className":30571,"code":108849,"language":30573,"meta":316,"style":316},"while viewer.is_running() and data.time \u003C 5.0:\n",[395,108851,108852],{"__ignoreMap":316},[398,108853,108854,108857,108859,108861,108863,108865,108867],{"class":400,"line":401},[398,108855,108856],{"class":404},"while",[398,108858,108380],{"class":408},[398,108860,30655],{"class":404},[398,108862,108385],{"class":408},[398,108864,1312],{"class":404},[398,108866,108390],{"class":457},[398,108868,4015],{"class":408},[19,108870,108871],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,108873,108874],{},"固定相机：",[389,108876,108878],{"className":53260,"code":108877,"language":53262,"meta":316,"style":316},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[395,108879,108880],{"__ignoreMap":316},[398,108881,108882,108884,108886,108888,108890,108892,108894,108896,108899,108902,108904,108907],{"class":400,"line":401},[398,108883,1312],{"class":408},[398,108885,108708],{"class":51493},[398,108887,15197],{"class":2239},[398,108889,454],{"class":408},[398,108891,108713],{"class":513},[398,108893,101299],{"class":2239},[398,108895,454],{"class":408},[398,108897,108898],{"class":513},"\"1.5 -2.0 1.2\"",[398,108900,108901],{"class":2239}," xyaxes",[398,108903,454],{"class":408},[398,108905,108906],{"class":513},"\"1 0.75 0 0 0 1\"",[398,108908,101337],{"class":408},[19,108910,108911],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[14,108913,108915],{"id":108914},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[389,108917,108919],{"className":30571,"code":108918,"language":30573,"meta":316,"style":316},"import time\n",[395,108920,108921],{"__ignoreMap":316},[398,108922,108923,108925],{"class":400,"line":401},[398,108924,30585],{"class":404},[398,108926,32022],{"class":408},[19,108928,108929],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[389,108931,108933],{"className":30571,"code":108932,"language":30573,"meta":316,"style":316},"import mujoco\nimport mujoco.viewer\n",[395,108934,108935,108941],{"__ignoreMap":316},[398,108936,108937,108939],{"class":400,"line":401},[398,108938,30585],{"class":404},[398,108940,101494],{"class":408},[398,108942,108943,108945],{"class":400,"line":317},[398,108944,30585],{"class":404},[398,108946,107745],{"class":408},[19,108948,108949],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[389,108951,108952],{"className":30571,"code":108826,"language":30573,"meta":316,"style":316},[395,108953,108954],{"__ignoreMap":316},[398,108955,108956,108958,108960,108962],{"class":400,"line":401},[398,108957,108026],{"class":404},[398,108959,108029],{"class":408},[398,108961,31576],{"class":404},[398,108963,108034],{"class":408},[19,108965,108966,108967,108970],{},"打开一个 viewer 窗口。",[395,108968,108969],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[389,108972,108973],{"className":30571,"code":108849,"language":30573,"meta":316,"style":316},[395,108974,108975],{"__ignoreMap":316},[398,108976,108977,108979,108981,108983,108985,108987,108989],{"class":400,"line":401},[398,108978,108856],{"class":404},[398,108980,108380],{"class":408},[398,108982,30655],{"class":404},[398,108984,108385],{"class":408},[398,108986,1312],{"class":404},[398,108988,108390],{"class":457},[398,108990,4015],{"class":408},[19,108992,108993,108994,108997],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[395,108995,108996],{},"viewer.is_running()"," 会变成 false，循环结束。",[389,108999,109001],{"className":30571,"code":109000,"language":30573,"meta":316,"style":316},"step_start = time.time()\n",[395,109002,109003],{"__ignoreMap":316},[398,109004,109005,109008,109010],{"class":400,"line":401},[398,109006,109007],{"class":408},"step_start ",[398,109009,454],{"class":404},[398,109011,108402],{"class":408},[19,109013,109014],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[389,109016,109017],{"className":30571,"code":108111,"language":30573,"meta":316,"style":316},[395,109018,109019,109023],{"__ignoreMap":316},[398,109020,109021],{"class":400,"line":401},[398,109022,104698],{"class":408},[398,109024,109025],{"class":400,"line":317},[398,109026,108122],{"class":408},[19,109028,109029,109031,109032,109034,109035,109037,109038,109041],{},[395,109030,101408],{}," 推进物理仿真。",[395,109033,108130],{}," 把最新的 ",[395,109036,33594],{}," 同步到窗口里显示。没有 ",[395,109039,109040],{},"sync()","，窗口可能看不到最新状态。",[389,109043,109044],{"className":30571,"code":108141,"language":30573,"meta":316,"style":316},[395,109045,109046],{"__ignoreMap":316},[398,109047,109048,109050,109052,109054,109056,109058,109060],{"class":400,"line":401},[398,109049,108148],{"class":408},[398,109051,454],{"class":404},[398,109053,108153],{"class":408},[398,109055,934],{"class":404},[398,109057,108158],{"class":408},[398,109059,934],{"class":404},[398,109061,108163],{"class":408},[19,109063,109064],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[389,109066,109068],{"className":30571,"code":109067,"language":30573,"meta":316,"style":316},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[395,109069,109070,109082],{"__ignoreMap":316},[398,109071,109072,109074,109076,109078,109080],{"class":400,"line":401},[398,109073,1807],{"class":404},[398,109075,108440],{"class":408},[398,109077,1362],{"class":404},[398,109079,4369],{"class":457},[398,109081,4015],{"class":408},[398,109083,109084],{"class":400,"line":317},[398,109085,109086],{"class":408},"    time.sleep(sleep_time)\n",[19,109088,109089],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[14,109091,109093],{"id":109092},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[389,109095,109097],{"className":30571,"code":109096,"language":30573,"meta":316,"style":316},"from pathlib import Path\n",[395,109098,109099],{"__ignoreMap":316},[398,109100,109101,109103,109105,109107],{"class":400,"line":401},[398,109102,30930],{"class":404},[398,109104,108504],{"class":408},[398,109106,30585],{"class":404},[398,109108,108509],{"class":408},[19,109110,109111,109112,109115,109116,109119],{},"导入 ",[395,109113,109114],{},"Path","，用来处理文件路径。相比直接写字符串，",[395,109117,109118],{},"Path(\"render_output.png\")"," 更清晰。",[389,109121,109123],{"className":30571,"code":109122,"language":30573,"meta":316,"style":316},"from PIL import Image\n",[395,109124,109125],{"__ignoreMap":316},[398,109126,109127,109129,109131,109133],{"class":400,"line":401},[398,109128,30930],{"class":404},[398,109130,47456],{"class":457},[398,109132,47459],{"class":404},[398,109134,47462],{"class":408},[19,109136,109137],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[389,109139,109140],{"className":53260,"code":108877,"language":53262,"meta":316,"style":316},[395,109141,109142],{"__ignoreMap":316},[398,109143,109144,109146,109148,109150,109152,109154,109156,109158,109160,109162,109164,109166],{"class":400,"line":401},[398,109145,1312],{"class":408},[398,109147,108708],{"class":51493},[398,109149,15197],{"class":2239},[398,109151,454],{"class":408},[398,109153,108713],{"class":513},[398,109155,101299],{"class":2239},[398,109157,454],{"class":408},[398,109159,108898],{"class":513},[398,109161,108901],{"class":2239},[398,109163,454],{"class":408},[398,109165,108906],{"class":513},[398,109167,101337],{"class":408},[19,109169,109170,109171,109173,109174,109176,109177,109180,109181,109183],{},"定义一个相机。",[395,109172,80003],{}," 是相机名字。",[395,109175,104339],{}," 是相机在世界里的位置。",[395,109178,109179],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[395,109182,104339],{}," 来调视角。",[389,109185,109187],{"className":30571,"code":109186,"language":30573,"meta":316,"style":316},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[395,109188,109189],{"__ignoreMap":316},[398,109190,109191,109193,109195,109197,109199,109201,109203,109205,109207,109209,109211],{"class":400,"line":401},[398,109192,107763],{"class":408},[398,109194,454],{"class":404},[398,109196,108067],{"class":408},[398,109198,25259],{"class":5493},[398,109200,454],{"class":404},[398,109202,42535],{"class":457},[398,109204,12712],{"class":408},[398,109206,25255],{"class":5493},[398,109208,454],{"class":404},[398,109210,108082],{"class":457},[398,109212,415],{"class":408},[19,109214,109215,109216,101211,109218,109220],{},"创建离屏渲染器。",[395,109217,25259],{},[395,109219,25255],{}," 决定输出图片大小。",[389,109222,109223],{"className":30571,"code":101869,"language":30573,"meta":316,"style":316},[395,109224,109225,109241],{"__ignoreMap":316},[398,109226,109227,109229,109231,109233,109235,109237,109239],{"class":400,"line":401},[398,109228,3301],{"class":404},[398,109230,101694],{"class":408},[398,109232,26236],{"class":404},[398,109234,32636],{"class":457},[398,109236,409],{"class":408},[398,109238,713],{"class":457},[398,109240,30979],{"class":408},[398,109242,109243],{"class":400,"line":317},[398,109244,101892],{"class":408},[19,109246,109247],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[389,109249,109251],{"className":30571,"code":109250,"language":30573,"meta":316,"style":316},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[395,109252,109253],{"__ignoreMap":316},[398,109254,109255,109258,109260,109262,109264],{"class":400,"line":401},[398,109256,109257],{"class":408},"renderer.update_scene(data, ",[398,109259,108708],{"class":5493},[398,109261,454],{"class":404},[398,109263,108713],{"class":513},[398,109265,415],{"class":408},[19,109267,109268,109269,109271,109272,109275],{},"告诉 renderer：用当前 ",[395,109270,33594],{}," 的状态更新画面，并使用名为 ",[395,109273,109274],{},"fixed_camera"," 的相机视角。",[389,109277,109278],{"className":30571,"code":108173,"language":30573,"meta":316,"style":316},[395,109279,109280],{"__ignoreMap":316},[398,109281,109282,109284,109286],{"class":400,"line":401},[398,109283,107773],{"class":408},[398,109285,454],{"class":404},[398,109287,107778],{"class":408},[19,109289,109290,109291,109294],{},"真正渲染出图像。",[395,109292,109293],{},"image"," 是一个 NumPy 数组，不是文件。",[389,109296,109298],{"className":30571,"code":109297,"language":30573,"meta":316,"style":316},"Image.fromarray(image).save(output_path)\n",[395,109299,109300],{"__ignoreMap":316},[398,109301,109302],{"class":400,"line":401},[398,109303,109297],{"class":408},[19,109305,109306,109307,28578],{},"把数组转换成图片，并保存到 ",[395,109308,109309],{},"render_output.png",[389,109311,109313],{"className":30571,"code":109312,"language":30573,"meta":316,"style":316},"renderer.close()\n",[395,109314,109315],{"__ignoreMap":316},[398,109316,109317],{"class":400,"line":401},[398,109318,109312],{"class":408},[19,109320,109321],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[343,109323,102509],{"id":102508},[19,109325,109326,109327,109329,109330,28578],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[395,109328,109309],{},"，并输出图像数组形状，例如 ",[395,109331,109332],{},"(480, 640, 3)",[19,109334,109335],{},"如果图片里看不到方块，先检查：",[38,109337,109338,109341,109344],{},[41,109339,109340],{},"方块是否掉到相机视野外。",[41,109342,109343],{},"camera 位置是否合理。",[41,109345,109346,109347,109350],{},"是否在 ",[395,109348,109349],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[343,109352,102541],{"id":102540},[19,109354,109355],{},"运行 viewer:",[389,109357,109359],{"className":24099,"code":109358,"language":24101,"meta":316,"style":316},"python ch5_viewer.py\n",[395,109360,109361],{"__ignoreMap":316},[398,109362,109363,109365],{"class":400,"line":401},[398,109364,30573],{"class":2239},[398,109366,108489],{"class":513},[19,109368,109369],{},"运行 renderer:",[389,109371,109373],{"className":24099,"code":109372,"language":24101,"meta":316,"style":316},"python ch5_renderer.py\n",[395,109374,109375],{"__ignoreMap":316},[398,109376,109377,109379],{"class":400,"line":401},[398,109378,30573],{"class":2239},[398,109380,108818],{"class":513},[19,109382,109383],{},"如果在服务器上运行:",[389,109385,109387],{"className":24099,"code":109386,"language":24101,"meta":316,"style":316},"MUJOCO_GL=egl python ch5_renderer.py\n",[395,109388,109389],{"__ignoreMap":316},[398,109390,109391,109393,109395,109397,109400],{"class":400,"line":401},[398,109392,108007],{"class":408},[398,109394,454],{"class":404},[398,109396,107997],{"class":513},[398,109398,109399],{"class":2239}," python",[398,109401,108818],{"class":513},[19,109403,107975],{},[389,109405,109407],{"className":24099,"code":109406,"language":24101,"meta":316,"style":316},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[395,109408,109409],{"__ignoreMap":316},[398,109410,109411,109413,109415,109417,109419],{"class":400,"line":401},[398,109412,108007],{"class":408},[398,109414,454],{"class":404},[398,109416,108001],{"class":513},[398,109418,109399],{"class":2239},[398,109420,108818],{"class":513},[19,109422,109423],{},"再做几个练习：",[38,109425,109426,109433,109436,109442],{},[41,109427,109428,109429,109432],{},"把 renderer 分辨率改成 ",[395,109430,109431],{},"height=240, width=320","，观察输出 shape。",[41,109434,109435],{},"把方块颜色改成蓝色，重新保存图片。",[41,109437,109438,109439,109441],{},"把相机 ",[395,109440,104339],{}," 改远一点，观察画面中物体是否变小。",[41,109443,109444,109445,102607,109448,109451],{},"把 viewer 示例中的 ",[395,109446,109447],{},"data.time \u003C 5.0",[395,109449,109450],{},"data.time \u003C 20.0","，观察更长时间。",[343,109453,102646],{"id":102645},[14,109455,109457],{"id":109456},"viewer-窗口打不开","viewer 窗口打不开",[19,109459,109460],{},"安装:",[389,109462,109464],{"className":24099,"code":109463,"language":24101,"meta":316,"style":316},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[395,109465,109466],{"__ignoreMap":316},[398,109467,109468,109470,109472,109474,109476,109478,109480,109482,109484,109486,109488],{"class":400,"line":401},[398,109469,24854],{"class":2239},[398,109471,26508],{"class":513},[398,109473,24111],{"class":513},[398,109475,26593],{"class":457},[398,109477,102699],{"class":513},[398,109479,101027],{"class":513},[398,109481,102704],{"class":513},[398,109483,101040],{"class":513},[398,109485,101046],{"class":513},[398,109487,101037],{"class":513},[398,109489,109490],{"class":513}," libXinerama\n",[14,109492,109494],{"id":109493},"glfwerror",[395,109495,109496],{},"GLFWError",[19,109498,109499],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[14,109501,109503],{"id":109502},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,109505,109506,109507,82732,109509,109511],{},"尝试 ",[395,109508,101230],{},[395,109510,101233],{},"。可能存在版本差异。",[14,109513,109514],{"id":109514},"保存图片是黑的",[19,109516,102768],{},[38,109518,109519,109522,109525,109535],{},[41,109520,109521],{},"XML 里是否有 light。",[41,109523,109524],{},"相机是否对着模型。",[41,109526,109527,109528,109531,109532,28578],{},"是否先 ",[395,109529,109530],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[395,109533,109534],{},"renderer.render()",[41,109536,109537],{},"物体是否已经掉出视野。",[14,109539,109540],{"id":109540},"远程服务器没有显示器",[19,109542,109543],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[389,109545,109546],{"className":24099,"code":109386,"language":24101,"meta":316,"style":316},[395,109547,109548],{"__ignoreMap":316},[398,109549,109550,109552,109554,109556,109558],{"class":400,"line":401},[398,109551,108007],{"class":408},[398,109553,454],{"class":404},[398,109555,107997],{"class":513},[398,109557,109399],{"class":2239},[398,109559,108818],{"class":513},[19,109561,109562],{},"如果 EGL 不可用，再尝试：",[389,109564,109565],{"className":24099,"code":109406,"language":24101,"meta":316,"style":316},[395,109566,109567],{"__ignoreMap":316},[398,109568,109569,109571,109573,109575,109577],{"class":400,"line":401},[398,109570,108007],{"class":408},[398,109572,454],{"class":404},[398,109574,108001],{"class":513},[398,109576,109399],{"class":2239},[398,109578,108818],{"class":513},[343,109580,102800],{"id":102799},[19,109582,109583],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[38,109585,109586,109589,109592],{},[41,109587,109588],{},"先用 viewer 看模型和控制是否正常。",[41,109590,109591],{},"再用 renderer 保存图片或构造视觉观测。",[41,109593,109594],{},"最后把状态、动作、图像、奖励组织成训练数据。",[5403,109596,109597],{},"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":316,"searchDepth":317,"depth":317,"links":109599},[109600,109601,109602,109607,109612,109613,109614,109621],{"id":100839,"depth":317,"text":100840},{"id":100962,"depth":317,"text":100963},{"id":101237,"depth":317,"text":101238,"children":109603},[109604,109605,109606],{"id":108104,"depth":320,"text":108105},{"id":108134,"depth":320,"text":108135},{"id":108169,"depth":320,"text":108170},{"id":101445,"depth":317,"text":101446,"children":109608},[109609,109610,109611],{"id":101765,"depth":320,"text":101765},{"id":108914,"depth":320,"text":108915},{"id":109092,"depth":320,"text":109093},{"id":102508,"depth":317,"text":102509},{"id":102540,"depth":317,"text":102541},{"id":102645,"depth":317,"text":102646,"children":109615},[109616,109617,109618,109619,109620],{"id":109456,"depth":320,"text":109457},{"id":109493,"depth":320,"text":109496},{"id":109502,"depth":320,"text":109503},{"id":109514,"depth":320,"text":109514},{"id":109540,"depth":320,"text":109540},{"id":102799,"depth":317,"text":102800},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107712,"description":316},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109628,"title":109629,"body":109630,"description":316,"extension":326,"meta":111541,"navigation":328,"path":111542,"seo":111543,"stem":111544,"__hash__":111545},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109631,"toc":111517},[109632,109635,109637,109640,109642,109661,109664,109670,109673,109675,109677,109701,109703,109717,109719,109760,109762,109773,109775,109778,109784,109787,109821,109824,109856,109859,109891,109895,109898,109938,109941,109947,109950,109956,109960,109963,109969,109972,109976,109979,110019,110021,110034,110037,110039,110621,110623,110635,110638,110649,110651,110654,110673,110685,110688,110709,110712,110715,110758,110761,110764,110784,110791,110793,110811,110826,110829,110835,110838,110844,110861,110868,110899,110910,110944,110955,110972,110981,110989,110994,111008,111011,111032,111038,111052,111057,111087,111097,111122,111130,111153,111156,111172,111175,111183,111189,111211,111224,111245,111254,111293,111304,111306,111309,111315,111318,111321,111327,111330,111350,111353,111355,111394,111396,111399,111407,111410,111413,111440,111443,111453,111459,111462,111468,111470,111476,111480,111483,111485,111488,111512,111515],[10,109633,109629],{"id":109634},"_6控制任务cartpole",[343,109636,100840],{"id":100839},[19,109638,109639],{},"本章搭建一个最小 Cartpole 控制任务。",[19,109641,104524],{},[38,109643,109644,109647,109649,109652,109655,109658],{},[41,109645,109646],{},"slide joint",[41,109648,106377],{},[41,109650,109651],{},"cart force actuator",[41,109653,109654],{},"状态观测",[41,109656,109657],{},"简单控制循环",[41,109659,109660],{},"reward 设计雏形",[19,109662,109663],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[389,109665,109668],{"className":109666,"code":109667,"language":5464,"meta":316},[5462],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[395,109669,109667],{"__ignoreMap":316},[19,109671,109672],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[343,109674,100963],{"id":100962},[19,109676,100966],{},[389,109678,109679],{"className":24099,"code":104581,"language":24101,"meta":316,"style":316},[395,109680,109681],{"__ignoreMap":316},[398,109682,109683,109685,109687,109689,109691,109693,109695,109697,109699],{"class":400,"line":401},[398,109684,24854],{"class":2239},[398,109686,26508],{"class":513},[398,109688,24111],{"class":513},[398,109690,26593],{"class":457},[398,109692,104596],{"class":513},[398,109694,100991],{"class":513},[398,109696,102694],{"class":513},[398,109698,101007],{"class":513},[398,109700,104605],{"class":513},[19,109702,103012],{},[389,109704,109705],{"className":24099,"code":101112,"language":24101,"meta":316,"style":316},[395,109706,109707],{"__ignoreMap":316},[398,109708,109709,109711,109713,109715],{"class":400,"line":401},[398,109710,24108],{"class":2239},[398,109712,24111],{"class":513},[398,109714,101123],{"class":513},[398,109716,101126],{"class":513},[19,109718,103029],{},[389,109720,109722],{"className":24099,"code":109721,"language":24101,"meta":316,"style":316},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[395,109723,109724,109741,109750],{"__ignoreMap":316},[398,109725,109726,109728,109730,109732,109735,109737,109739],{"class":400,"line":401},[398,109727,30523],{"class":2239},[398,109729,29369],{"class":513},[398,109731,25393],{"class":457},[398,109733,109734],{"class":513}," mujoco-cartpole",[398,109736,101168],{"class":513},[398,109738,101171],{"class":457},[398,109740,101174],{"class":457},[398,109742,109743,109745,109747],{"class":400,"line":317},[398,109744,30523],{"class":2239},[398,109746,101181],{"class":513},[398,109748,109749],{"class":513}," mujoco-cartpole\n",[398,109751,109752,109754,109756,109758],{"class":400,"line":320},[398,109753,24108],{"class":2239},[398,109755,24111],{"class":513},[398,109757,101123],{"class":513},[398,109759,101126],{"class":513},[19,109761,101197],{},[38,109763,109764,109767,109770],{},[41,109765,109766],{},"本章不依赖 Gymnasium。",[41,109768,109769],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[41,109771,109772],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[343,109774,101238],{"id":101237},[19,109776,109777],{},"Cartpole 的模型结构:",[389,109779,109782],{"className":109780,"code":109781,"language":5464,"meta":316},[5462],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[395,109783,109781],{"__ignoreMap":316},[19,109785,109786],{},"小车通过 slide joint 左右移动:",[389,109788,109790],{"className":53260,"code":109789,"language":53262,"meta":316,"style":316},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[395,109791,109792],{"__ignoreMap":316},[398,109793,109794,109796,109798,109800,109802,109805,109807,109809,109812,109814,109816,109819],{"class":400,"line":401},[398,109795,1312],{"class":408},[398,109797,103149],{"class":51493},[398,109799,15197],{"class":2239},[398,109801,454],{"class":408},[398,109803,109804],{"class":513},"\"cart_x\"",[398,109806,54017],{"class":2239},[398,109808,454],{"class":408},[398,109810,109811],{"class":513},"\"slide\"",[398,109813,106221],{"class":2239},[398,109815,454],{"class":408},[398,109817,109818],{"class":513},"\"1 0 0\"",[398,109820,101337],{"class":408},[19,109822,109823],{},"杆子通过 hinge joint 旋转:",[389,109825,109827],{"className":53260,"code":109826,"language":53262,"meta":316,"style":316},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[395,109828,109829],{"__ignoreMap":316},[398,109830,109831,109833,109835,109837,109839,109842,109844,109846,109848,109850,109852,109854],{"class":400,"line":401},[398,109832,1312],{"class":408},[398,109834,103149],{"class":51493},[398,109836,15197],{"class":2239},[398,109838,454],{"class":408},[398,109840,109841],{"class":513},"\"pole_hinge\"",[398,109843,54017],{"class":2239},[398,109845,454],{"class":408},[398,109847,106212],{"class":513},[398,109849,106221],{"class":2239},[398,109851,454],{"class":408},[398,109853,106226],{"class":513},[398,109855,101337],{"class":408},[19,109857,109858],{},"控制力作用在小车 slide joint 上:",[389,109860,109862],{"className":53260,"code":109861,"language":53262,"meta":316,"style":316},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[395,109863,109864],{"__ignoreMap":316},[398,109865,109866,109868,109870,109872,109874,109877,109879,109881,109883,109885,109887,109889],{"class":400,"line":401},[398,109867,1312],{"class":408},[398,109869,106267],{"class":51493},[398,109871,15197],{"class":2239},[398,109873,454],{"class":408},[398,109875,109876],{"class":513},"\"cart_motor\"",[398,109878,106277],{"class":2239},[398,109880,454],{"class":408},[398,109882,109804],{"class":513},[398,109884,106284],{"class":2239},[398,109886,454],{"class":408},[398,109888,54509],{"class":513},[398,109890,101337],{"class":408},[14,109892,109894],{"id":109893},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,109896,109897],{},"这个简化模型有两个关节：",[84,109899,109900,109911],{},[87,109901,109902],{},[90,109903,109904,109906,109908],{},[93,109905,102952],{"align":95},[93,109907,24014],{"align":95},[93,109909,109910],{"align":95},"对应状态",[101,109912,109913,109926],{},[90,109914,109915,109920,109923],{},[106,109916,109917],{"align":95},[395,109918,109919],{},"cart_x",[106,109921,109922],{"align":95},"slide",[106,109924,109925],{"align":95},"小车 x 位置",[90,109927,109928,109933,109935],{},[106,109929,109930],{"align":95},[395,109931,109932],{},"pole_hinge",[106,109934,106033],{"align":95},[106,109936,109937],{"align":95},"杆子角度",[19,109939,109940],{},"所以：",[389,109942,109945],{"className":109943,"code":109944,"language":5464,"meta":316},[5462],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[395,109946,109944],{"__ignoreMap":316},[19,109948,109949],{},"把它们拼起来就是观测：",[389,109951,109954],{"className":109952,"code":109953,"language":5464,"meta":316},[5462],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[395,109955,109953],{"__ignoreMap":316},[14,109957,109959],{"id":109958},"action-是什么","action 是什么",[19,109961,109962],{},"本章只有一个 actuator：",[389,109964,109967],{"className":109965,"code":109966,"language":5464,"meta":316},[5462],"data.ctrl[0] = action\n",[395,109968,109966],{"__ignoreMap":316},[19,109970,109971],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[14,109973,109975],{"id":109974},"reward-是什么","reward 是什么",[19,109977,109978],{},"奖励函数：",[389,109980,109982],{"className":30571,"code":109981,"language":30573,"meta":316,"style":316},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[395,109983,109984],{"__ignoreMap":316},[398,109985,109986,109988,109991,109993,109995,109997,110000,110002,110005,110007,110009,110011,110014,110016],{"class":400,"line":401},[398,109987,17323],{"class":404},[398,109989,109990],{"class":457}," float",[398,109992,409],{"class":408},[398,109994,102596],{"class":457},[398,109996,52464],{"class":404},[398,109998,109999],{"class":457}," 0.1",[398,110001,6795],{"class":404},[398,110003,110004],{"class":408}," cart_x ",[398,110006,857],{"class":404},[398,110008,110004],{"class":408},[398,110010,934],{"class":404},[398,110012,110013],{"class":408}," pole_angle ",[398,110015,857],{"class":404},[398,110017,110018],{"class":408}," pole_angle)\n",[19,110020,106419],{},[38,110022,110023,110028,110031],{},[41,110024,110025,110026,28578],{},"基础奖励是 ",[395,110027,102596],{},[41,110029,110030],{},"小车离中心越远，扣分越多。",[41,110032,110033],{},"杆子角度越大，扣分越多。",[19,110035,110036],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[343,110038,101446],{"id":101445},[389,110040,110042],{"className":30571,"code":110041,"language":30573,"meta":316,"style":316},"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",[395,110043,110044,110050,110060,110064,110068,110076,110081,110085,110089,110093,110098,110102,110107,110112,110117,110121,110126,110131,110136,110140,110144,110148,110152,110156,110161,110165,110169,110173,110177,110181,110191,110198,110202,110206,110220,110234,110247,110277,110281,110285,110297,110309,110317,110321,110334,110338,110342,110351,110355,110371,110381,110394,110407,110411,110434,110452,110456,110468,110472,110476,110486,110496,110500,110516,110557,110561,110581,110597,110601,110605,110617],{"__ignoreMap":316},[398,110045,110046,110048],{"class":400,"line":401},[398,110047,30585],{"class":404},[398,110049,101494],{"class":408},[398,110051,110052,110054,110056,110058],{"class":400,"line":317},[398,110053,30585],{"class":404},[398,110055,31573],{"class":408},[398,110057,31576],{"class":404},[398,110059,31579],{"class":408},[398,110061,110062],{"class":400,"line":320},[398,110063,2676],{"emptyLinePlaceholder":328},[398,110065,110066],{"class":400,"line":1470},[398,110067,2676],{"emptyLinePlaceholder":328},[398,110069,110070,110072,110074],{"class":400,"line":1476},[398,110071,101507],{"class":457},[398,110073,13841],{"class":404},[398,110075,101512],{"class":513},[398,110077,110078],{"class":400,"line":1490},[398,110079,110080],{"class":513},"\u003Cmujoco model=\"cartpole\">\n",[398,110082,110083],{"class":400,"line":1496},[398,110084,101522],{"class":513},[398,110086,110087],{"class":400,"line":1587},[398,110088,2676],{"emptyLinePlaceholder":328},[398,110090,110091],{"class":400,"line":1593},[398,110092,101531],{"class":513},[398,110094,110095],{"class":400,"line":1605},[398,110096,110097],{"class":513},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[398,110099,110100],{"class":400,"line":1888},[398,110101,2676],{"emptyLinePlaceholder":328},[398,110103,110104],{"class":400,"line":1893},[398,110105,110106],{"class":513},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[398,110108,110109],{"class":400,"line":1899},[398,110110,110111],{"class":513},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[398,110113,110114],{"class":400,"line":1904},[398,110115,110116],{"class":513},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[398,110118,110119],{"class":400,"line":1918},[398,110120,2676],{"emptyLinePlaceholder":328},[398,110122,110123],{"class":400,"line":1923},[398,110124,110125],{"class":513},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[398,110127,110128],{"class":400,"line":1929},[398,110129,110130],{"class":513},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[398,110132,110133],{"class":400,"line":1950},[398,110134,110135],{"class":513},"        \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",[398,110137,110138],{"class":400,"line":1955},[398,110139,106631],{"class":513},[398,110141,110142],{"class":400,"line":1969},[398,110143,101560],{"class":513},[398,110145,110146],{"class":400,"line":1974},[398,110147,101565],{"class":513},[398,110149,110150],{"class":400,"line":2003},[398,110151,2676],{"emptyLinePlaceholder":328},[398,110153,110154],{"class":400,"line":2008},[398,110155,106648],{"class":513},[398,110157,110158],{"class":400,"line":2025},[398,110159,110160],{"class":513},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[398,110162,110163],{"class":400,"line":2030},[398,110164,106658],{"class":513},[398,110166,110167],{"class":400,"line":2035},[398,110168,101570],{"class":513},[398,110170,110171],{"class":400,"line":2040},[398,110172,95891],{"class":513},[398,110174,110175],{"class":400,"line":2054},[398,110176,2676],{"emptyLinePlaceholder":328},[398,110178,110179],{"class":400,"line":2059},[398,110180,2676],{"emptyLinePlaceholder":328},[398,110182,110183,110185,110188],{"class":400,"line":2853},[398,110184,32140],{"class":404},[398,110186,110187],{"class":2239}," get_observation",[398,110189,110190],{"class":408},"(data: mujoco.MjData) -> np.ndarray:\n",[398,110192,110193,110195],{"class":400,"line":2867},[398,110194,4366],{"class":404},[398,110196,110197],{"class":408}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[398,110199,110200],{"class":400,"line":2875},[398,110201,2676],{"emptyLinePlaceholder":328},[398,110203,110204],{"class":400,"line":2880},[398,110205,2676],{"emptyLinePlaceholder":328},[398,110207,110208,110210,110213,110216,110218],{"class":400,"line":2886},[398,110209,32140],{"class":404},[398,110211,110212],{"class":2239}," compute_reward",[398,110214,110215],{"class":408},"(obs: np.ndarray) -> ",[398,110217,448],{"class":457},[398,110219,4015],{"class":408},[398,110221,110222,110225,110227,110230,110232],{"class":400,"line":2892},[398,110223,110224],{"class":408},"    cart_x ",[398,110226,454],{"class":404},[398,110228,110229],{"class":408}," obs[",[398,110231,593],{"class":457},[398,110233,33439],{"class":408},[398,110235,110236,110239,110241,110243,110245],{"class":400,"line":2897},[398,110237,110238],{"class":408},"    pole_angle ",[398,110240,454],{"class":404},[398,110242,110229],{"class":408},[398,110244,619],{"class":457},[398,110246,33439],{"class":408},[398,110248,110249,110251,110253,110255,110257,110259,110261,110263,110265,110267,110269,110271,110273,110275],{"class":400,"line":8225},[398,110250,4366],{"class":404},[398,110252,109990],{"class":457},[398,110254,409],{"class":408},[398,110256,102596],{"class":457},[398,110258,52464],{"class":404},[398,110260,109999],{"class":457},[398,110262,6795],{"class":404},[398,110264,110004],{"class":408},[398,110266,857],{"class":404},[398,110268,110004],{"class":408},[398,110270,934],{"class":404},[398,110272,110013],{"class":408},[398,110274,857],{"class":404},[398,110276,110018],{"class":408},[398,110278,110279],{"class":400,"line":8249},[398,110280,2676],{"emptyLinePlaceholder":328},[398,110282,110283],{"class":400,"line":8254},[398,110284,2676],{"emptyLinePlaceholder":328},[398,110286,110287,110289,110291,110293,110295],{"class":400,"line":8260},[398,110288,32140],{"class":404},[398,110290,2249],{"class":2239},[398,110292,101591],{"class":408},[398,110294,95879],{"class":457},[398,110296,4015],{"class":408},[398,110298,110299,110301,110303,110305,110307],{"class":400,"line":8287},[398,110300,101600],{"class":408},[398,110302,454],{"class":404},[398,110304,101605],{"class":408},[398,110306,101507],{"class":457},[398,110308,415],{"class":408},[398,110310,110311,110313,110315],{"class":400,"line":8292},[398,110312,101614],{"class":408},[398,110314,454],{"class":404},[398,110316,101619],{"class":408},[398,110318,110319],{"class":400,"line":8298},[398,110320,2676],{"emptyLinePlaceholder":328},[398,110322,110323,110325,110327,110329,110331],{"class":400,"line":8310},[398,110324,105262],{"class":408},[398,110326,619],{"class":457},[398,110328,4719],{"class":408},[398,110330,454],{"class":404},[398,110332,110333],{"class":457}," 0.1\n",[398,110335,110336],{"class":400,"line":8322},[398,110337,105275],{"class":408},[398,110339,110340],{"class":400,"line":8334},[398,110341,2676],{"emptyLinePlaceholder":328},[398,110343,110344,110347,110349],{"class":400,"line":9993},[398,110345,110346],{"class":408},"    total_reward ",[398,110348,454],{"class":404},[398,110350,104954],{"class":457},[398,110352,110353],{"class":400,"line":10018},[398,110354,2676],{"emptyLinePlaceholder":328},[398,110356,110357,110359,110361,110363,110365,110367,110369],{"class":400,"line":10041},[398,110358,3477],{"class":404},[398,110360,31809],{"class":408},[398,110362,26236],{"class":404},[398,110364,32636],{"class":457},[398,110366,409],{"class":408},[398,110368,6687],{"class":457},[398,110370,30979],{"class":408},[398,110372,110373,110376,110378],{"class":400,"line":10065},[398,110374,110375],{"class":408},"        obs ",[398,110377,454],{"class":404},[398,110379,110380],{"class":408}," get_observation(data)\n",[398,110382,110383,110386,110388,110390,110392],{"class":400,"line":10070},[398,110384,110385],{"class":408},"        pole_angle ",[398,110387,454],{"class":404},[398,110389,110229],{"class":408},[398,110391,619],{"class":457},[398,110393,33439],{"class":408},[398,110395,110396,110399,110401,110403,110405],{"class":400,"line":10075},[398,110397,110398],{"class":408},"        pole_angular_velocity ",[398,110400,454],{"class":404},[398,110402,110229],{"class":408},[398,110404,480],{"class":457},[398,110406,33439],{"class":408},[398,110408,110409],{"class":400,"line":10080},[398,110410,2676],{"emptyLinePlaceholder":328},[398,110412,110413,110416,110418,110421,110423,110425,110427,110429,110431],{"class":400,"line":10089},[398,110414,110415],{"class":408},"        action ",[398,110417,454],{"class":404},[398,110419,110420],{"class":457}," 2.0",[398,110422,6795],{"class":404},[398,110424,110013],{"class":408},[398,110426,883],{"class":404},[398,110428,62060],{"class":457},[398,110430,6795],{"class":404},[398,110432,110433],{"class":408}," pole_angular_velocity\n",[398,110435,110436,110438,110440,110442,110444,110446,110448,110450],{"class":400,"line":10094},[398,110437,110415],{"class":408},[398,110439,454],{"class":404},[398,110441,107640],{"class":408},[398,110443,934],{"class":404},[398,110445,102596],{"class":457},[398,110447,12712],{"class":408},[398,110449,102596],{"class":457},[398,110451,415],{"class":408},[398,110453,110454],{"class":400,"line":10100},[398,110455,2676],{"emptyLinePlaceholder":328},[398,110457,110458,110460,110462,110464,110466],{"class":400,"line":10121},[398,110459,106810],{"class":408},[398,110461,593],{"class":457},[398,110463,4719],{"class":408},[398,110465,454],{"class":404},[398,110467,107663],{"class":408},[398,110469,110470],{"class":400,"line":10127},[398,110471,101709],{"class":408},[398,110473,110474],{"class":400,"line":10141},[398,110475,2676],{"emptyLinePlaceholder":328},[398,110477,110478,110481,110483],{"class":400,"line":10147},[398,110479,110480],{"class":408},"        reward ",[398,110482,454],{"class":404},[398,110484,110485],{"class":408}," compute_reward(get_observation(data))\n",[398,110487,110488,110491,110493],{"class":400,"line":10174},[398,110489,110490],{"class":408},"        total_reward ",[398,110492,9754],{"class":404},[398,110494,110495],{"class":408}," reward\n",[398,110497,110498],{"class":400,"line":10183},[398,110499,2676],{"emptyLinePlaceholder":328},[398,110501,110502,110504,110506,110508,110510,110512,110514],{"class":400,"line":10189},[398,110503,2773],{"class":404},[398,110505,31809],{"class":408},[398,110507,730],{"class":404},[398,110509,6031],{"class":457},[398,110511,101752],{"class":404},[398,110513,4369],{"class":457},[398,110515,4015],{"class":408},[398,110517,110518,110520,110522,110525,110528,110531,110534,110536,110539,110542,110544,110546,110548,110550,110553,110555],{"class":400,"line":10197},[398,110519,34843],{"class":457},[398,110521,409],{"class":408},[398,110523,110524],{"class":513},"\"step:\"",[398,110526,110527],{"class":408},", step, ",[398,110529,110530],{"class":513},"\"obs:\"",[398,110532,110533],{"class":408},", np.round(obs, ",[398,110535,480],{"class":457},[398,110537,110538],{"class":408},"), ",[398,110540,110541],{"class":513},"\"action:\"",[398,110543,12712],{"class":408},[398,110545,32211],{"class":457},[398,110547,409],{"class":408},[398,110549,448],{"class":457},[398,110551,110552],{"class":408},"(action), ",[398,110554,480],{"class":457},[398,110556,30690],{"class":408},[398,110558,110559],{"class":400,"line":10202},[398,110560,2676],{"emptyLinePlaceholder":328},[398,110562,110563,110565,110567,110570,110572,110574,110577,110579],{"class":400,"line":16881},[398,110564,31492],{"class":457},[398,110566,409],{"class":408},[398,110568,110569],{"class":513},"\"total_reward:\"",[398,110571,12712],{"class":408},[398,110573,32211],{"class":457},[398,110575,110576],{"class":408},"(total_reward, ",[398,110578,480],{"class":457},[398,110580,30690],{"class":408},[398,110582,110583,110585,110587,110590,110593,110595],{"class":400,"line":16887},[398,110584,31492],{"class":457},[398,110586,409],{"class":408},[398,110588,110589],{"class":513},"\"final obs:\"",[398,110591,110592],{"class":408},", np.round(get_observation(data), ",[398,110594,480],{"class":457},[398,110596,30690],{"class":408},[398,110598,110599],{"class":400,"line":16910},[398,110600,2676],{"emptyLinePlaceholder":328},[398,110602,110603],{"class":400,"line":16916},[398,110604,2676],{"emptyLinePlaceholder":328},[398,110606,110607,110609,110611,110613,110615],{"class":400,"line":16939},[398,110608,1807],{"class":404},[398,110610,31413],{"class":457},[398,110612,101752],{"class":404},[398,110614,101755],{"class":513},[398,110616,4015],{"class":408},[398,110618,110619],{"class":400,"line":16953},[398,110620,101762],{"class":408},[19,110622,103763],{},[389,110624,110626],{"className":24099,"code":110625,"language":24101,"meta":316,"style":316},"touch ch6_cartpole.py\n",[395,110627,110628],{"__ignoreMap":316},[398,110629,110630,110632],{"class":400,"line":401},[398,110631,101476],{"class":2239},[398,110633,110634],{"class":513}," ch6_cartpole.py\n",[19,110636,110637],{},"运行：",[389,110639,110641],{"className":24099,"code":110640,"language":24101,"meta":316,"style":316},"python ch6_cartpole.py\n",[395,110642,110643],{"__ignoreMap":316},[398,110644,110645,110647],{"class":400,"line":401},[398,110646,30573],{"class":2239},[398,110648,110634],{"class":513},[14,110650,101765],{"id":101765},[19,110652,110653],{},"构造观测：",[389,110655,110657],{"className":30571,"code":110656,"language":30573,"meta":316,"style":316},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[395,110658,110659,110667],{"__ignoreMap":316},[398,110660,110661,110663,110665],{"class":400,"line":401},[398,110662,32140],{"class":404},[398,110664,110187],{"class":2239},[398,110666,110190],{"class":408},[398,110668,110669,110671],{"class":400,"line":317},[398,110670,4366],{"class":404},[398,110672,110197],{"class":408},[19,110674,110675,110678,110679,110681,110682,110684],{},[395,110676,110677],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[395,110680,104223],{}," 2 维，",[395,110683,104553],{}," 2 维，所以 obs 是 4 维。",[19,110686,110687],{},"设置初始角度：",[389,110689,110691],{"className":30571,"code":110690,"language":30573,"meta":316,"style":316},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[395,110692,110693,110705],{"__ignoreMap":316},[398,110694,110695,110697,110699,110701,110703],{"class":400,"line":401},[398,110696,104892],{"class":408},[398,110698,619],{"class":457},[398,110700,4719],{"class":408},[398,110702,454],{"class":404},[398,110704,110333],{"class":457},[398,110706,110707],{"class":400,"line":317},[398,110708,104736],{"class":408},[19,110710,110711],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,110713,110714],{},"简单反馈控制：",[389,110716,110718],{"className":30571,"code":110717,"language":30573,"meta":316,"style":316},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[395,110719,110720,110740],{"__ignoreMap":316},[398,110721,110722,110724,110726,110728,110730,110732,110734,110736,110738],{"class":400,"line":401},[398,110723,107635],{"class":408},[398,110725,454],{"class":404},[398,110727,110420],{"class":457},[398,110729,6795],{"class":404},[398,110731,110013],{"class":408},[398,110733,883],{"class":404},[398,110735,62060],{"class":457},[398,110737,6795],{"class":404},[398,110739,110433],{"class":408},[398,110741,110742,110744,110746,110748,110750,110752,110754,110756],{"class":400,"line":317},[398,110743,107635],{"class":408},[398,110745,454],{"class":404},[398,110747,107640],{"class":408},[398,110749,934],{"class":404},[398,110751,102596],{"class":457},[398,110753,12712],{"class":408},[398,110755,102596],{"class":457},[398,110757,415],{"class":408},[19,110759,110760],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,110762,110763],{},"限制动作：",[389,110765,110767],{"className":30571,"code":110766,"language":30573,"meta":316,"style":316},"np.clip(action, -1.0, 1.0)\n",[395,110768,110769],{"__ignoreMap":316},[398,110770,110771,110774,110776,110778,110780,110782],{"class":400,"line":401},[398,110772,110773],{"class":408},"np.clip(action, ",[398,110775,934],{"class":404},[398,110777,102596],{"class":457},[398,110779,12712],{"class":408},[398,110781,102596],{"class":457},[398,110783,415],{"class":408},[19,110785,110786,110787,110790],{},"因为 XML 里 ",[395,110788,110789],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[14,110792,101901],{"id":101901},[389,110794,110795],{"className":30571,"code":110656,"language":30573,"meta":316,"style":316},[395,110796,110797,110805],{"__ignoreMap":316},[398,110798,110799,110801,110803],{"class":400,"line":401},[398,110800,32140],{"class":404},[398,110802,110187],{"class":2239},[398,110804,110190],{"class":408},[398,110806,110807,110809],{"class":400,"line":317},[398,110808,4366],{"class":404},[398,110810,110197],{"class":408},[19,110812,110813,110814,110817,110818,110821,110822,110825],{},"这段定义了一个函数，用来获取当前观测。",[395,110815,110816],{},"data.qpos.copy()"," 是位置数组副本，",[395,110819,110820],{},"data.qvel.copy()"," 是速度数组副本。",[395,110823,110824],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,110827,110828],{},"在本章模型里：",[389,110830,110833],{"className":110831,"code":110832,"language":5464,"meta":316},[5462],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[395,110834,110832],{"__ignoreMap":316},[19,110836,110837],{},"所以返回的 obs 是：",[389,110839,110842],{"className":110840,"code":110841,"language":5464,"meta":316},[5462],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[395,110843,110841],{"__ignoreMap":316},[389,110845,110847],{"className":30571,"code":110846,"language":30573,"meta":316,"style":316},"def compute_reward(obs: np.ndarray) -> float:\n",[395,110848,110849],{"__ignoreMap":316},[398,110850,110851,110853,110855,110857,110859],{"class":400,"line":401},[398,110852,32140],{"class":404},[398,110854,110212],{"class":2239},[398,110856,110215],{"class":408},[398,110858,448],{"class":457},[398,110860,4015],{"class":408},[19,110862,110863,110864,110867],{},"这行定义奖励函数。输入是观测 ",[395,110865,110866],{},"obs","，输出是一个浮点数奖励。",[389,110869,110871],{"className":30571,"code":110870,"language":30573,"meta":316,"style":316},"cart_x = obs[0]\npole_angle = obs[1]\n",[395,110872,110873,110886],{"__ignoreMap":316},[398,110874,110875,110878,110880,110882,110884],{"class":400,"line":401},[398,110876,110877],{"class":408},"cart_x ",[398,110879,454],{"class":404},[398,110881,110229],{"class":408},[398,110883,593],{"class":457},[398,110885,33439],{"class":408},[398,110887,110888,110891,110893,110895,110897],{"class":400,"line":317},[398,110889,110890],{"class":408},"pole_angle ",[398,110892,454],{"class":404},[398,110894,110229],{"class":408},[398,110896,619],{"class":457},[398,110898,33439],{"class":408},[19,110900,110901,110902,110905,110906,110909],{},"数组索引从 0 开始。",[395,110903,110904],{},"obs[0]"," 是第一个元素，也就是小车位置。",[395,110907,110908],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[389,110911,110912],{"className":30571,"code":109981,"language":30573,"meta":316,"style":316},[395,110913,110914],{"__ignoreMap":316},[398,110915,110916,110918,110920,110922,110924,110926,110928,110930,110932,110934,110936,110938,110940,110942],{"class":400,"line":401},[398,110917,17323],{"class":404},[398,110919,109990],{"class":457},[398,110921,409],{"class":408},[398,110923,102596],{"class":457},[398,110925,52464],{"class":404},[398,110927,109999],{"class":457},[398,110929,6795],{"class":404},[398,110931,110004],{"class":408},[398,110933,857],{"class":404},[398,110935,110004],{"class":408},[398,110937,934],{"class":404},[398,110939,110013],{"class":408},[398,110941,857],{"class":404},[398,110943,110018],{"class":408},[19,110945,110946,110947,110950,110951,110954],{},"这行计算奖励。",[395,110948,110949],{},"cart_x * cart_x"," 是小车位置的平方，",[395,110952,110953],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[389,110956,110958],{"className":30571,"code":110957,"language":30573,"meta":316,"style":316},"data.qpos[1] = 0.1\n",[395,110959,110960],{"__ignoreMap":316},[398,110961,110962,110964,110966,110968,110970],{"class":400,"line":401},[398,110963,104892],{"class":408},[398,110965,619],{"class":457},[398,110967,4719],{"class":408},[398,110969,454],{"class":404},[398,110971,110333],{"class":457},[19,110973,110974,110975,110977,110978,110980],{},"手动设置杆子的初始角度。因为 ",[395,110976,105649],{}," 是小车位置，",[395,110979,105652],{}," 是杆子角度，所以这里改的是杆子。",[389,110982,110983],{"className":30571,"code":104736,"language":30573,"meta":316,"style":316},[395,110984,110985],{"__ignoreMap":316},[398,110986,110987],{"class":400,"line":401},[398,110988,104736],{"class":408},[19,110990,105695,110991,110993],{},[395,110992,104223],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[389,110995,110997],{"className":30571,"code":110996,"language":30573,"meta":316,"style":316},"total_reward = 0.0\n",[395,110998,110999],{"__ignoreMap":316},[398,111000,111001,111004,111006],{"class":400,"line":401},[398,111002,111003],{"class":408},"total_reward ",[398,111005,454],{"class":404},[398,111007,104954],{"class":457},[19,111009,111010],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[389,111012,111014],{"className":30571,"code":111013,"language":30573,"meta":316,"style":316},"for step in range(1000):\n",[395,111015,111016],{"__ignoreMap":316},[398,111017,111018,111020,111022,111024,111026,111028,111030],{"class":400,"line":401},[398,111019,3301],{"class":404},[398,111021,31809],{"class":408},[398,111023,26236],{"class":404},[398,111025,32636],{"class":457},[398,111027,409],{"class":408},[398,111029,6687],{"class":457},[398,111031,30979],{"class":408},[19,111033,111034,111035,111037],{},"循环 1000 步。",[395,111036,107327],{}," 是当前步数，从 0 到 999。",[389,111039,111041],{"className":30571,"code":111040,"language":30573,"meta":316,"style":316},"obs = get_observation(data)\n",[395,111042,111043],{"__ignoreMap":316},[398,111044,111045,111048,111050],{"class":400,"line":401},[398,111046,111047],{"class":408},"obs ",[398,111049,454],{"class":404},[398,111051,110380],{"class":408},[19,111053,111054,111055,28578],{},"读取当前状态，保存到 ",[395,111056,110866],{},[389,111058,111060],{"className":30571,"code":111059,"language":30573,"meta":316,"style":316},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[395,111061,111062,111074],{"__ignoreMap":316},[398,111063,111064,111066,111068,111070,111072],{"class":400,"line":401},[398,111065,110890],{"class":408},[398,111067,454],{"class":404},[398,111069,110229],{"class":408},[398,111071,619],{"class":457},[398,111073,33439],{"class":408},[398,111075,111076,111079,111081,111083,111085],{"class":400,"line":317},[398,111077,111078],{"class":408},"pole_angular_velocity ",[398,111080,454],{"class":404},[398,111082,110229],{"class":408},[398,111084,480],{"class":457},[398,111086,33439],{"class":408},[19,111088,111089,111090,111093,111094,28578],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[395,111091,111092],{},"obs[3]","？因为 obs 的顺序是 ",[395,111095,111096],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[389,111098,111100],{"className":30571,"code":111099,"language":30573,"meta":316,"style":316},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[395,111101,111102],{"__ignoreMap":316},[398,111103,111104,111106,111108,111110,111112,111114,111116,111118,111120],{"class":400,"line":401},[398,111105,107635],{"class":408},[398,111107,454],{"class":404},[398,111109,110420],{"class":457},[398,111111,6795],{"class":404},[398,111113,110013],{"class":408},[398,111115,883],{"class":404},[398,111117,62060],{"class":457},[398,111119,6795],{"class":404},[398,111121,110433],{"class":408},[19,111123,111124,111125,101211,111127,111129],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[395,111126,105453],{},[395,111128,35522],{}," 是人为设置的系数，不是固定公式。",[389,111131,111133],{"className":30571,"code":111132,"language":30573,"meta":316,"style":316},"action = np.clip(action, -1.0, 1.0)\n",[395,111134,111135],{"__ignoreMap":316},[398,111136,111137,111139,111141,111143,111145,111147,111149,111151],{"class":400,"line":401},[398,111138,107635],{"class":408},[398,111140,454],{"class":404},[398,111142,107640],{"class":408},[398,111144,934],{"class":404},[398,111146,102596],{"class":457},[398,111148,12712],{"class":408},[398,111150,102596],{"class":457},[398,111152,415],{"class":408},[19,111154,111155],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[389,111157,111158],{"className":30571,"code":109966,"language":30573,"meta":316,"style":316},[395,111159,111160],{"__ignoreMap":316},[398,111161,111162,111164,111166,111168,111170],{"class":400,"line":401},[398,111163,106064],{"class":408},[398,111165,593],{"class":457},[398,111167,4719],{"class":408},[398,111169,454],{"class":404},[398,111171,107663],{"class":408},[19,111173,111174],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[389,111176,111177],{"className":30571,"code":104698,"language":30573,"meta":316,"style":316},[395,111178,111179],{"__ignoreMap":316},[398,111180,111181],{"class":400,"line":401},[398,111182,104698],{"class":408},[19,111184,111185,111186,111188],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[395,111187,106319],{}," 计算小车和杆子的下一刻状态。",[389,111190,111192],{"className":30571,"code":111191,"language":30573,"meta":316,"style":316},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[395,111193,111194,111203],{"__ignoreMap":316},[398,111195,111196,111199,111201],{"class":400,"line":401},[398,111197,111198],{"class":408},"reward ",[398,111200,454],{"class":404},[398,111202,110485],{"class":408},[398,111204,111205,111207,111209],{"class":400,"line":317},[398,111206,111003],{"class":408},[398,111208,9754],{"class":404},[398,111210,110495],{"class":408},[19,111212,111213,111214,111216,111217,111220,111221,28578],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[395,111215,9754],{}," 是简写，",[395,111218,111219],{},"total_reward += reward"," 等价于 ",[395,111222,111223],{},"total_reward = total_reward + reward",[389,111225,111227],{"className":30571,"code":111226,"language":30573,"meta":316,"style":316},"if step % 100 == 0:\n",[395,111228,111229],{"__ignoreMap":316},[398,111230,111231,111233,111235,111237,111239,111241,111243],{"class":400,"line":401},[398,111232,1807],{"class":404},[398,111234,31809],{"class":408},[398,111236,730],{"class":404},[398,111238,6031],{"class":457},[398,111240,101752],{"class":404},[398,111242,4369],{"class":457},[398,111244,4015],{"class":408},[19,111246,111247,111249,111250,111253],{},[395,111248,730],{}," 是取余数。",[395,111251,111252],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[389,111255,111257],{"className":30571,"code":111256,"language":30573,"meta":316,"style":316},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[395,111258,111259],{"__ignoreMap":316},[398,111260,111261,111263,111265,111267,111269,111271,111273,111275,111277,111279,111281,111283,111285,111287,111289,111291],{"class":400,"line":401},[398,111262,30608],{"class":457},[398,111264,409],{"class":408},[398,111266,110524],{"class":513},[398,111268,110527],{"class":408},[398,111270,110530],{"class":513},[398,111272,110533],{"class":408},[398,111274,480],{"class":457},[398,111276,110538],{"class":408},[398,111278,110541],{"class":513},[398,111280,12712],{"class":408},[398,111282,32211],{"class":457},[398,111284,409],{"class":408},[398,111286,448],{"class":457},[398,111288,110552],{"class":408},[398,111290,480],{"class":457},[398,111292,30690],{"class":408},[19,111294,111295,111296,111299,111300,111303],{},"打印当前步数、观测和动作。",[395,111297,111298],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[395,111301,111302],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[343,111305,102509],{"id":102508},[19,111307,111308],{},"观测向量:",[389,111310,111313],{"className":111311,"code":111312,"language":5464,"meta":316},[5462],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[395,111314,111312],{"__ignoreMap":316},[19,111316,111317],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,111319,111320],{},"每隔 100 步会打印一次：",[389,111322,111325],{"className":111323,"code":111324,"language":5464,"meta":316},[5462],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[395,111326,111324],{"__ignoreMap":316},[19,111328,111329],{},"重点观察：",[38,111331,111332,111338,111343],{},[41,111333,111334,111337],{},[395,111335,111336],{},"pole_angle"," 是否越来越大。",[41,111339,111340,111342],{},[395,111341,109919],{}," 是否跑得太远。",[41,111344,111345,111346,82732,111348,28578],{},"action 是否经常被 clip 到 ",[395,111347,104108],{},[395,111349,619],{},[19,111351,111352],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[343,111354,102541],{"id":102540},[38,111356,111357,111363,111366,111372,111382,111388,111391],{},[41,111358,111359,111360,28578],{},"把初始角度改为 ",[395,111361,111362],{},"data.qpos[1] = 0.3",[41,111364,111365],{},"重新运行，观察控制是否变差。",[41,111367,111368,111369,111371],{},"把 actuator ",[395,111370,107260],{}," 改小。",[41,111373,111374,111375,111378,111379,28578],{},"打印 ",[395,111376,111377],{},"model.nq, model.nv, model.nu","，应为 ",[395,111380,111381],{},"2 2 1",[41,111383,111384,111385,111387],{},"把 reward 里的 ",[395,111386,110953],{}," 系数改大，观察总奖励变化。",[41,111389,111390],{},"把控制器改成反号，观察杆子是否更容易倒。",[41,111392,111393],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[343,111395,102646],{"id":102645},[14,111397,111398],{"id":111398},"杆子方向和预期不一致",[19,111400,102589,111401,111403,111404,111406],{},[395,111402,106432],{}," 和 capsule 的 ",[395,111405,103369],{},"，必要时用 viewer 可视化确认。",[14,111408,111409],{"id":111409},"控制器越控越倒",[19,111411,111412],{},"说明反馈符号可能反了，尝试:",[389,111414,111416],{"className":30571,"code":111415,"language":30573,"meta":316,"style":316},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[395,111417,111418],{"__ignoreMap":316},[398,111419,111420,111422,111424,111426,111428,111430,111432,111434,111436,111438],{"class":400,"line":401},[398,111421,107635],{"class":408},[398,111423,454],{"class":404},[398,111425,52464],{"class":404},[398,111427,105453],{"class":457},[398,111429,6795],{"class":404},[398,111431,110013],{"class":408},[398,111433,934],{"class":404},[398,111435,62060],{"class":457},[398,111437,6795],{"class":404},[398,111439,110433],{"class":408},[14,111441,111442],{"id":111442},"小车飞走",[19,111444,111445,111446,111448,111449,111452],{},"降低 ",[395,111447,107260],{}," 或缩小 ",[395,111450,111451],{},"action"," 的 clip 范围。",[14,111454,111456,111458],{"id":111455},"obs3-为什么是杆子角速度",[395,111457,111092],{}," 为什么是杆子角速度",[19,111460,111461],{},"因为这个模型里：",[389,111463,111466],{"className":111464,"code":111465,"language":5464,"meta":316},[5462],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[395,111467,111465],{"__ignoreMap":316},[19,111469,109940],{},[389,111471,111474],{"className":111472,"code":111473,"language":5464,"meta":316},[5462],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[395,111475,111473],{"__ignoreMap":316},[14,111477,111479],{"id":111478},"reward-变成负数是否错误","reward 变成负数是否错误",[19,111481,111482],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[343,111484,102800],{"id":102799},[19,111486,111487],{},"一个控制任务通常包含：",[38,111489,111490,111493,111501,111506,111509],{},[41,111491,111492],{},"模型：Cartpole 的 body、joint、actuator。",[41,111494,111495,111496,614,111498,111500],{},"观测：从 ",[395,111497,104223],{},[395,111499,104553],{}," 里取状态。",[41,111502,111503,111504,28578],{},"动作：写入 ",[395,111505,101269],{},[41,111507,111508],{},"奖励：根据任务目标打分。",[41,111510,111511],{},"循环：obs -> action -> step -> reward。",[19,111513,111514],{},"这就是后面 Gymnasium 环境的基本骨架。",[5403,111516,104479],{},{"title":316,"searchDepth":317,"depth":317,"links":111518},[111519,111520,111521,111526,111530,111531,111532,111540],{"id":100839,"depth":317,"text":100840},{"id":100962,"depth":317,"text":100963},{"id":101237,"depth":317,"text":101238,"children":111522},[111523,111524,111525],{"id":109893,"depth":320,"text":109894},{"id":109958,"depth":320,"text":109959},{"id":109974,"depth":320,"text":109975},{"id":101445,"depth":317,"text":101446,"children":111527},[111528,111529],{"id":101765,"depth":320,"text":101765},{"id":101901,"depth":320,"text":101901},{"id":102508,"depth":317,"text":102509},{"id":102540,"depth":317,"text":102541},{"id":102645,"depth":317,"text":102646,"children":111533},[111534,111535,111536,111537,111539],{"id":111398,"depth":320,"text":111398},{"id":111409,"depth":320,"text":111409},{"id":111442,"depth":320,"text":111442},{"id":111455,"depth":320,"text":111538},"obs[3] 为什么是杆子角速度",{"id":111478,"depth":320,"text":111479},{"id":102799,"depth":317,"text":102800},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109629,"description":316},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111547,"title":111548,"body":111549,"description":316,"extension":326,"meta":113563,"navigation":328,"path":113564,"seo":113565,"stem":113566,"__hash__":113567},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111550,"toc":113539},[111551,111554,111556,111559,111561,111578,111581,111584,111590,111593,111595,111597,111621,111623,111637,111639,111680,111682,111700,111702,111705,111711,111714,111742,111746,111752,111777,111780,111811,111818,111821,111824,111830,111833,111839,111842,111848,111852,111855,111880,111883,111885,112645,112647,112659,112661,112672,112674,112677,112694,112697,112699,112710,112713,112715,112761,112764,112777,112780,112862,112865,112867,112883,112893,112906,112909,112948,112958,112969,112979,112992,112995,113024,113027,113037,113040,113046,113063,113074,113076,113082,113099,113110,113131,113134,113146,113149,113170,113173,113181,113189,113206,113209,113278,113285,113293,113296,113309,113316,113318,113321,113327,113330,113333,113339,113345,113347,113387,113389,113395,113404,113407,113409,113429,113432,113435,113441,113445,113447,113474,113477,113480,113507,113513,113516,113519,113521,113524,113527,113533,113536],[10,111552,111548],{"id":111553},"_7控制任务reacher-机械臂到达目标",[343,111555,100840],{"id":100839},[19,111557,111558],{},"本章搭建一个二维两关节 reacher 任务。",[19,111560,104524],{},[38,111562,111563,111566,111569,111572,111575],{},[41,111564,111565],{},"两个 hinge joint",[41,111567,111568],{},"两个 motor actuator",[41,111570,111571],{},"site 作为末端点和目标点",[41,111573,111574],{},"根据末端和目标距离设计 reward",[41,111576,111577],{},"构造机械臂任务的基本形式",[19,111579,111580],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,111582,111583],{},"Reacher 任务可以理解为：",[389,111585,111588],{"className":111586,"code":111587,"language":5464,"meta":316},[5462],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[395,111589,111587],{"__ignoreMap":316},[19,111591,111592],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[343,111594,100963],{"id":100962},[19,111596,100966],{},[389,111598,111599],{"className":24099,"code":104581,"language":24101,"meta":316,"style":316},[395,111600,111601],{"__ignoreMap":316},[398,111602,111603,111605,111607,111609,111611,111613,111615,111617,111619],{"class":400,"line":401},[398,111604,24854],{"class":2239},[398,111606,26508],{"class":513},[398,111608,24111],{"class":513},[398,111610,26593],{"class":457},[398,111612,104596],{"class":513},[398,111614,100991],{"class":513},[398,111616,102694],{"class":513},[398,111618,101007],{"class":513},[398,111620,104605],{"class":513},[19,111622,103012],{},[389,111624,111625],{"className":24099,"code":101112,"language":24101,"meta":316,"style":316},[395,111626,111627],{"__ignoreMap":316},[398,111628,111629,111631,111633,111635],{"class":400,"line":401},[398,111630,24108],{"class":2239},[398,111632,24111],{"class":513},[398,111634,101123],{"class":513},[398,111636,101126],{"class":513},[19,111638,103029],{},[389,111640,111642],{"className":24099,"code":111641,"language":24101,"meta":316,"style":316},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[395,111643,111644,111661,111670],{"__ignoreMap":316},[398,111645,111646,111648,111650,111652,111655,111657,111659],{"class":400,"line":401},[398,111647,30523],{"class":2239},[398,111649,29369],{"class":513},[398,111651,25393],{"class":457},[398,111653,111654],{"class":513}," mujoco-reacher",[398,111656,101168],{"class":513},[398,111658,101171],{"class":457},[398,111660,101174],{"class":457},[398,111662,111663,111665,111667],{"class":400,"line":317},[398,111664,30523],{"class":2239},[398,111666,101181],{"class":513},[398,111668,111669],{"class":513}," mujoco-reacher\n",[398,111671,111672,111674,111676,111678],{"class":400,"line":320},[398,111673,24108],{"class":2239},[398,111675,24111],{"class":513},[398,111677,101123],{"class":513},[398,111679,101126],{"class":513},[19,111681,101197],{},[38,111683,111684,111687,111690],{},[41,111685,111686],{},"本章使用低维状态，不使用图像输入。",[41,111688,111689],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[41,111691,111692,111693,614,111695,614,111697,111699],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[395,111694,104223],{},[395,111696,104553],{},[395,111698,103873],{}," 的方法一致。",[343,111701,101238],{"id":101237},[19,111703,111704],{},"Reacher 任务核心:",[389,111706,111709],{"className":111707,"code":111708,"language":5464,"meta":316},[5462],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[395,111710,111708],{"__ignoreMap":316},[19,111712,111713],{},"读取 site 世界坐标:",[389,111715,111717],{"className":30571,"code":111716,"language":30573,"meta":316,"style":316},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[395,111718,111719,111732],{"__ignoreMap":316},[398,111720,111721,111723,111725,111727,111730],{"class":400,"line":401},[398,111722,103827],{"class":408},[398,111724,454],{"class":404},[398,111726,103598],{"class":408},[398,111728,111729],{"class":513},"\"tip\"",[398,111731,415],{"class":408},[398,111733,111734,111737,111739],{"class":400,"line":317},[398,111735,111736],{"class":408},"tip_pos ",[398,111738,454],{"class":404},[398,111740,111741],{"class":408}," data.site_xpos[site_id]\n",[14,111743,111745],{"id":111744},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,111747,111748,111749,111751],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[395,111750,104223],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[389,111753,111755],{"className":30571,"code":111754,"language":30573,"meta":316,"style":316},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[395,111756,111757,111767],{"__ignoreMap":316},[398,111758,111759,111762,111764],{"class":400,"line":401},[398,111760,111761],{"class":408},"tip ",[398,111763,454],{"class":404},[398,111765,111766],{"class":408}," data.site_xpos[tip_site_id]\n",[398,111768,111769,111772,111774],{"class":400,"line":317},[398,111770,111771],{"class":408},"target ",[398,111773,454],{"class":404},[398,111775,111776],{"class":408}," data.site_xpos[target_site_id]\n",[19,111778,111779],{},"这样 reward 就很容易写：",[389,111781,111783],{"className":30571,"code":111782,"language":30573,"meta":316,"style":316},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[395,111784,111785,111800],{"__ignoreMap":316},[398,111786,111787,111790,111792,111795,111797],{"class":400,"line":401},[398,111788,111789],{"class":408},"dist ",[398,111791,454],{"class":404},[398,111793,111794],{"class":408}," np.linalg.norm(tip ",[398,111796,934],{"class":404},[398,111798,111799],{"class":408}," target)\n",[398,111801,111802,111804,111806,111808],{"class":400,"line":317},[398,111803,111198],{"class":408},[398,111805,454],{"class":404},[398,111807,52464],{"class":404},[398,111809,111810],{"class":408},"dist\n",[19,111812,111813,111814,111817],{},"距离越小，",[395,111815,111816],{},"-dist"," 越接近 0，奖励越高。",[14,111819,111820],{"id":111820},"两关节机械臂的状态",[19,111822,111823],{},"这个模型有两个 hinge joint：",[389,111825,111828],{"className":111826,"code":111827,"language":5464,"meta":316},[5462],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[395,111829,111827],{"__ignoreMap":316},[19,111831,111832],{},"再加上末端和目标位置：",[389,111834,111837],{"className":111835,"code":111836,"language":5464,"meta":316},[5462],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[395,111838,111836],{"__ignoreMap":316},[19,111840,111841],{},"总维度：",[389,111843,111846],{"className":111844,"code":111845,"language":5464,"meta":316},[5462],"2 + 2 + 3 + 3 = 10\n",[395,111847,111845],{"__ignoreMap":316},[14,111849,111851],{"id":111850},"为什么-gravity-是-0","为什么 gravity 是 0",[19,111853,111854],{},"本章把重力设为：",[389,111856,111858],{"className":53260,"code":111857,"language":53262,"meta":316,"style":316},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[395,111859,111860],{"__ignoreMap":316},[398,111861,111862,111864,111866,111868,111870,111872,111874,111876,111878],{"class":400,"line":401},[398,111863,1312],{"class":408},[398,111865,69359],{"class":51493},[398,111867,101387],{"class":2239},[398,111869,454],{"class":408},[398,111871,101392],{"class":513},[398,111873,101395],{"class":2239},[398,111875,454],{"class":408},[398,111877,103964],{"class":513},[398,111879,101337],{"class":408},[19,111881,111882],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[343,111884,101446],{"id":101445},[389,111886,111888],{"className":30571,"code":111887,"language":30573,"meta":316,"style":316},"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",[395,111889,111890,111896,111906,111910,111914,111922,111927,111932,111936,111940,111945,111950,111954,111959,111964,111969,111973,111978,111983,111988,111993,111997,112001,112005,112009,112013,112018,112023,112027,112031,112035,112039,112043,112058,112067,112079,112102,112109,112113,112117,112127,112141,112155,112162,112166,112170,112184,112196,112208,112221,112236,112253,112257,112261,112273,112285,112293,112301,112305,112321,112326,112339,112352,112367,112371,112406,112438,112442,112446,112455,112459,112475,112485,112496,112512,112528,112544,112560,112564,112582,112602,112621,112625,112629,112641],{"__ignoreMap":316},[398,111891,111892,111894],{"class":400,"line":401},[398,111893,30585],{"class":404},[398,111895,101494],{"class":408},[398,111897,111898,111900,111902,111904],{"class":400,"line":317},[398,111899,30585],{"class":404},[398,111901,31573],{"class":408},[398,111903,31576],{"class":404},[398,111905,31579],{"class":408},[398,111907,111908],{"class":400,"line":320},[398,111909,2676],{"emptyLinePlaceholder":328},[398,111911,111912],{"class":400,"line":1470},[398,111913,2676],{"emptyLinePlaceholder":328},[398,111915,111916,111918,111920],{"class":400,"line":1476},[398,111917,101507],{"class":457},[398,111919,13841],{"class":404},[398,111921,101512],{"class":513},[398,111923,111924],{"class":400,"line":1490},[398,111925,111926],{"class":513},"\u003Cmujoco model=\"two_link_reacher\">\n",[398,111928,111929],{"class":400,"line":1496},[398,111930,111931],{"class":513},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[398,111933,111934],{"class":400,"line":1587},[398,111935,2676],{"emptyLinePlaceholder":328},[398,111937,111938],{"class":400,"line":1593},[398,111939,101531],{"class":513},[398,111941,111942],{"class":400,"line":1605},[398,111943,111944],{"class":513},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[398,111946,111947],{"class":400,"line":1888},[398,111948,111949],{"class":513},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[398,111951,111952],{"class":400,"line":1893},[398,111953,2676],{"emptyLinePlaceholder":328},[398,111955,111956],{"class":400,"line":1899},[398,111957,111958],{"class":513},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[398,111960,111961],{"class":400,"line":1904},[398,111962,111963],{"class":513},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[398,111965,111966],{"class":400,"line":1918},[398,111967,111968],{"class":513},"      \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",[398,111970,111971],{"class":400,"line":1923},[398,111972,2676],{"emptyLinePlaceholder":328},[398,111974,111975],{"class":400,"line":1929},[398,111976,111977],{"class":513},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[398,111979,111980],{"class":400,"line":1950},[398,111981,111982],{"class":513},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[398,111984,111985],{"class":400,"line":1955},[398,111986,111987],{"class":513},"        \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",[398,111989,111990],{"class":400,"line":1969},[398,111991,111992],{"class":513},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[398,111994,111995],{"class":400,"line":1974},[398,111996,106631],{"class":513},[398,111998,111999],{"class":400,"line":2003},[398,112000,101560],{"class":513},[398,112002,112003],{"class":400,"line":2008},[398,112004,101565],{"class":513},[398,112006,112007],{"class":400,"line":2025},[398,112008,2676],{"emptyLinePlaceholder":328},[398,112010,112011],{"class":400,"line":2030},[398,112012,106648],{"class":513},[398,112014,112015],{"class":400,"line":2035},[398,112016,112017],{"class":513},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[398,112019,112020],{"class":400,"line":2040},[398,112021,112022],{"class":513},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[398,112024,112025],{"class":400,"line":2054},[398,112026,106658],{"class":513},[398,112028,112029],{"class":400,"line":2059},[398,112030,101570],{"class":513},[398,112032,112033],{"class":400,"line":2853},[398,112034,95891],{"class":513},[398,112036,112037],{"class":400,"line":2867},[398,112038,2676],{"emptyLinePlaceholder":328},[398,112040,112041],{"class":400,"line":2875},[398,112042,2676],{"emptyLinePlaceholder":328},[398,112044,112045,112047,112050,112053,112055],{"class":400,"line":2880},[398,112046,32140],{"class":404},[398,112048,112049],{"class":2239}," site_position",[398,112051,112052],{"class":408},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[398,112054,1575],{"class":457},[398,112056,112057],{"class":408},") -> np.ndarray:\n",[398,112059,112060,112062,112064],{"class":400,"line":2886},[398,112061,103593],{"class":408},[398,112063,454],{"class":404},[398,112065,112066],{"class":408}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[398,112068,112069,112071,112073,112075,112077],{"class":400,"line":2892},[398,112070,3377],{"class":404},[398,112072,103642],{"class":408},[398,112074,1312],{"class":404},[398,112076,4369],{"class":457},[398,112078,4015],{"class":408},[398,112080,112081,112083,112085,112087,112089,112092,112094,112096,112098,112100],{"class":400,"line":2897},[398,112082,103625],{"class":404},[398,112084,103628],{"class":457},[398,112086,409],{"class":408},[398,112088,461],{"class":404},[398,112090,112091],{"class":513},"\"site not found: ",[398,112093,1298],{"class":457},[398,112095,80003],{"class":408},[398,112097,1348],{"class":457},[398,112099,653],{"class":513},[398,112101,415],{"class":408},[398,112103,112104,112106],{"class":400,"line":8225},[398,112105,4366],{"class":404},[398,112107,112108],{"class":408}," data.site_xpos[site_id].copy()\n",[398,112110,112111],{"class":400,"line":8249},[398,112112,2676],{"emptyLinePlaceholder":328},[398,112114,112115],{"class":400,"line":8254},[398,112116,2676],{"emptyLinePlaceholder":328},[398,112118,112119,112121,112124],{"class":400,"line":8260},[398,112120,32140],{"class":404},[398,112122,112123],{"class":2239}," get_obs",[398,112125,112126],{"class":408},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[398,112128,112129,112132,112134,112137,112139],{"class":400,"line":8287},[398,112130,112131],{"class":408},"    tip ",[398,112133,454],{"class":404},[398,112135,112136],{"class":408}," site_position(model, data, ",[398,112138,111729],{"class":513},[398,112140,415],{"class":408},[398,112142,112143,112146,112148,112150,112153],{"class":400,"line":8292},[398,112144,112145],{"class":408},"    target ",[398,112147,454],{"class":404},[398,112149,112136],{"class":408},[398,112151,112152],{"class":513},"\"target\"",[398,112154,415],{"class":408},[398,112156,112157,112159],{"class":400,"line":8298},[398,112158,4366],{"class":404},[398,112160,112161],{"class":408}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[398,112163,112164],{"class":400,"line":8310},[398,112165,2676],{"emptyLinePlaceholder":328},[398,112167,112168],{"class":400,"line":8322},[398,112169,2676],{"emptyLinePlaceholder":328},[398,112171,112172,112174,112177,112180,112182],{"class":400,"line":8334},[398,112173,32140],{"class":404},[398,112175,112176],{"class":2239}," reward",[398,112178,112179],{"class":408},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[398,112181,448],{"class":457},[398,112183,4015],{"class":408},[398,112185,112186,112188,112190,112192,112194],{"class":400,"line":9993},[398,112187,112131],{"class":408},[398,112189,454],{"class":404},[398,112191,112136],{"class":408},[398,112193,111729],{"class":513},[398,112195,415],{"class":408},[398,112197,112198,112200,112202,112204,112206],{"class":400,"line":10018},[398,112199,112145],{"class":408},[398,112201,454],{"class":404},[398,112203,112136],{"class":408},[398,112205,112152],{"class":513},[398,112207,415],{"class":408},[398,112209,112210,112213,112215,112217,112219],{"class":400,"line":10041},[398,112211,112212],{"class":408},"    dist ",[398,112214,454],{"class":404},[398,112216,111794],{"class":408},[398,112218,934],{"class":404},[398,112220,111799],{"class":408},[398,112222,112223,112226,112228,112231,112233],{"class":400,"line":10065},[398,112224,112225],{"class":408},"    control_cost ",[398,112227,454],{"class":404},[398,112229,112230],{"class":457}," 0.01",[398,112232,6795],{"class":404},[398,112234,112235],{"class":408}," np.sum(np.square(data.ctrl))\n",[398,112237,112238,112240,112242,112244,112246,112248,112250],{"class":400,"line":10070},[398,112239,4366],{"class":404},[398,112241,109990],{"class":457},[398,112243,409],{"class":408},[398,112245,934],{"class":404},[398,112247,111789],{"class":408},[398,112249,934],{"class":404},[398,112251,112252],{"class":408}," control_cost)\n",[398,112254,112255],{"class":400,"line":10075},[398,112256,2676],{"emptyLinePlaceholder":328},[398,112258,112259],{"class":400,"line":10080},[398,112260,2676],{"emptyLinePlaceholder":328},[398,112262,112263,112265,112267,112269,112271],{"class":400,"line":10089},[398,112264,32140],{"class":404},[398,112266,2249],{"class":2239},[398,112268,101591],{"class":408},[398,112270,95879],{"class":457},[398,112272,4015],{"class":408},[398,112274,112275,112277,112279,112281,112283],{"class":400,"line":10094},[398,112276,101600],{"class":408},[398,112278,454],{"class":404},[398,112280,101605],{"class":408},[398,112282,101507],{"class":457},[398,112284,415],{"class":408},[398,112286,112287,112289,112291],{"class":400,"line":10100},[398,112288,101614],{"class":408},[398,112290,454],{"class":404},[398,112292,101619],{"class":408},[398,112294,112295,112297,112299],{"class":400,"line":10121},[398,112296,110346],{"class":408},[398,112298,454],{"class":404},[398,112300,104954],{"class":457},[398,112302,112303],{"class":400,"line":10127},[398,112304,2676],{"emptyLinePlaceholder":328},[398,112306,112307,112309,112311,112313,112315,112317,112319],{"class":400,"line":10141},[398,112308,3477],{"class":404},[398,112310,31809],{"class":408},[398,112312,26236],{"class":404},[398,112314,32636],{"class":457},[398,112316,409],{"class":408},[398,112318,65267],{"class":457},[398,112320,30979],{"class":408},[398,112322,112323],{"class":400,"line":10147},[398,112324,112325],{"class":408},"        mujoco.mj_forward(model, data)\n",[398,112327,112328,112331,112333,112335,112337],{"class":400,"line":10174},[398,112329,112330],{"class":408},"        tip ",[398,112332,454],{"class":404},[398,112334,112136],{"class":408},[398,112336,111729],{"class":513},[398,112338,415],{"class":408},[398,112340,112341,112344,112346,112348,112350],{"class":400,"line":10183},[398,112342,112343],{"class":408},"        target ",[398,112345,454],{"class":404},[398,112347,112136],{"class":408},[398,112349,112152],{"class":513},[398,112351,415],{"class":408},[398,112353,112354,112357,112359,112362,112364],{"class":400,"line":10189},[398,112355,112356],{"class":408},"        error ",[398,112358,454],{"class":404},[398,112360,112361],{"class":408}," target ",[398,112363,934],{"class":404},[398,112365,112366],{"class":408}," tip\n",[398,112368,112369],{"class":400,"line":10197},[398,112370,2676],{"emptyLinePlaceholder":328},[398,112372,112373,112375,112377,112379,112381,112384,112386,112388,112391,112393,112396,112398,112400,112402,112404],{"class":400,"line":10202},[398,112374,106810],{"class":408},[398,112376,593],{"class":457},[398,112378,4719],{"class":408},[398,112380,454],{"class":404},[398,112382,112383],{"class":408}," np.clip(",[398,112385,105453],{"class":457},[398,112387,6795],{"class":404},[398,112389,112390],{"class":408}," error[",[398,112392,486],{"class":457},[398,112394,112395],{"class":408},"], ",[398,112397,934],{"class":404},[398,112399,102596],{"class":457},[398,112401,12712],{"class":408},[398,112403,102596],{"class":457},[398,112405,415],{"class":408},[398,112407,112408,112410,112412,112414,112416,112418,112420,112422,112424,112426,112428,112430,112432,112434,112436],{"class":400,"line":16881},[398,112409,106810],{"class":408},[398,112411,619],{"class":457},[398,112413,4719],{"class":408},[398,112415,454],{"class":404},[398,112417,112383],{"class":408},[398,112419,105453],{"class":457},[398,112421,6795],{"class":404},[398,112423,112390],{"class":408},[398,112425,593],{"class":457},[398,112427,112395],{"class":408},[398,112429,934],{"class":404},[398,112431,102596],{"class":457},[398,112433,12712],{"class":408},[398,112435,102596],{"class":457},[398,112437,415],{"class":408},[398,112439,112440],{"class":400,"line":16887},[398,112441,2676],{"emptyLinePlaceholder":328},[398,112443,112444],{"class":400,"line":16910},[398,112445,101709],{"class":408},[398,112447,112448,112450,112452],{"class":400,"line":16916},[398,112449,110490],{"class":408},[398,112451,9754],{"class":404},[398,112453,112454],{"class":408}," reward(model, data)\n",[398,112456,112457],{"class":400,"line":16939},[398,112458,2676],{"emptyLinePlaceholder":328},[398,112460,112461,112463,112465,112467,112469,112471,112473],{"class":400,"line":16953},[398,112462,2773],{"class":404},[398,112464,31809],{"class":408},[398,112466,730],{"class":404},[398,112468,6031],{"class":457},[398,112470,101752],{"class":404},[398,112472,4369],{"class":457},[398,112474,4015],{"class":408},[398,112476,112477,112480,112482],{"class":400,"line":16973},[398,112478,112479],{"class":408},"            obs ",[398,112481,454],{"class":404},[398,112483,112484],{"class":408}," get_obs(model, data)\n",[398,112486,112487,112489,112491,112493],{"class":400,"line":16979},[398,112488,34843],{"class":457},[398,112490,409],{"class":408},[398,112492,110524],{"class":513},[398,112494,112495],{"class":408},", step)\n",[398,112497,112498,112500,112502,112505,112508,112510],{"class":400,"line":16990},[398,112499,34843],{"class":457},[398,112501,409],{"class":408},[398,112503,112504],{"class":513},"\"  tip:\"",[398,112506,112507],{"class":408},", np.round(tip, ",[398,112509,480],{"class":457},[398,112511,30690],{"class":408},[398,112513,112514,112516,112518,112521,112524,112526],{"class":400,"line":17013},[398,112515,34843],{"class":457},[398,112517,409],{"class":408},[398,112519,112520],{"class":513},"\"  target:\"",[398,112522,112523],{"class":408},", np.round(target, ",[398,112525,480],{"class":457},[398,112527,30690],{"class":408},[398,112529,112530,112532,112534,112537,112540,112542],{"class":400,"line":17035},[398,112531,34843],{"class":457},[398,112533,409],{"class":408},[398,112535,112536],{"class":513},"\"  ctrl:\"",[398,112538,112539],{"class":408},", np.round(data.ctrl.copy(), ",[398,112541,480],{"class":457},[398,112543,30690],{"class":408},[398,112545,112546,112548,112550,112553,112556,112558],{"class":400,"line":17040},[398,112547,34843],{"class":457},[398,112549,409],{"class":408},[398,112551,112552],{"class":513},"\"  obs_dim:\"",[398,112554,112555],{"class":408},", obs.shape[",[398,112557,593],{"class":457},[398,112559,4933],{"class":408},[398,112561,112562],{"class":400,"line":17046},[398,112563,2676],{"emptyLinePlaceholder":328},[398,112565,112566,112568,112570,112572,112574,112576,112578,112580],{"class":400,"line":17060},[398,112567,31492],{"class":457},[398,112569,409],{"class":408},[398,112571,110569],{"class":513},[398,112573,12712],{"class":408},[398,112575,32211],{"class":457},[398,112577,110576],{"class":408},[398,112579,480],{"class":457},[398,112581,30690],{"class":408},[398,112583,112584,112586,112588,112591,112594,112596,112598,112600],{"class":400,"line":17073},[398,112585,31492],{"class":457},[398,112587,409],{"class":408},[398,112589,112590],{"class":513},"\"final tip:\"",[398,112592,112593],{"class":408},", np.round(site_position(model, data, ",[398,112595,111729],{"class":513},[398,112597,110538],{"class":408},[398,112599,480],{"class":457},[398,112601,30690],{"class":408},[398,112603,112604,112606,112608,112611,112613,112615,112617,112619],{"class":400,"line":17078},[398,112605,31492],{"class":457},[398,112607,409],{"class":408},[398,112609,112610],{"class":513},"\"target:\"",[398,112612,112593],{"class":408},[398,112614,112152],{"class":513},[398,112616,110538],{"class":408},[398,112618,480],{"class":457},[398,112620,30690],{"class":408},[398,112622,112623],{"class":400,"line":17092},[398,112624,2676],{"emptyLinePlaceholder":328},[398,112626,112627],{"class":400,"line":17097},[398,112628,2676],{"emptyLinePlaceholder":328},[398,112630,112631,112633,112635,112637,112639],{"class":400,"line":17103},[398,112632,1807],{"class":404},[398,112634,31413],{"class":457},[398,112636,101752],{"class":404},[398,112638,101755],{"class":513},[398,112640,4015],{"class":408},[398,112642,112643],{"class":400,"line":17108},[398,112644,101762],{"class":408},[19,112646,103763],{},[389,112648,112650],{"className":24099,"code":112649,"language":24101,"meta":316,"style":316},"touch ch7_reacher.py\n",[395,112651,112652],{"__ignoreMap":316},[398,112653,112654,112656],{"class":400,"line":401},[398,112655,101476],{"class":2239},[398,112657,112658],{"class":513}," ch7_reacher.py\n",[19,112660,110637],{},[389,112662,112664],{"className":24099,"code":112663,"language":24101,"meta":316,"style":316},"python ch7_reacher.py\n",[395,112665,112666],{"__ignoreMap":316},[398,112667,112668,112670],{"class":400,"line":401},[398,112669,30573],{"class":2239},[398,112671,112658],{"class":513},[14,112673,101765],{"id":101765},[19,112675,112676],{},"读取 site 坐标：",[389,112678,112680],{"className":30571,"code":112679,"language":30573,"meta":316,"style":316},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[395,112681,112682],{"__ignoreMap":316},[398,112683,112684,112686,112688,112690,112692],{"class":400,"line":401},[398,112685,32140],{"class":404},[398,112687,112049],{"class":2239},[398,112689,112052],{"class":408},[398,112691,1575],{"class":457},[398,112693,112057],{"class":408},[19,112695,112696],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,112698,110653],{},[389,112700,112702],{"className":30571,"code":112701,"language":30573,"meta":316,"style":316},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[395,112703,112704],{"__ignoreMap":316},[398,112705,112706,112708],{"class":400,"line":401},[398,112707,17323],{"class":404},[398,112709,112161],{"class":408},[19,112711,112712],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,112714,109978],{},[389,112716,112718],{"className":30571,"code":112717,"language":30573,"meta":316,"style":316},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[395,112719,112720,112732,112745],{"__ignoreMap":316},[398,112721,112722,112724,112726,112728,112730],{"class":400,"line":401},[398,112723,111789],{"class":408},[398,112725,454],{"class":404},[398,112727,111794],{"class":408},[398,112729,934],{"class":404},[398,112731,111799],{"class":408},[398,112733,112734,112737,112739,112741,112743],{"class":400,"line":317},[398,112735,112736],{"class":408},"control_cost ",[398,112738,454],{"class":404},[398,112740,112230],{"class":457},[398,112742,6795],{"class":404},[398,112744,112235],{"class":408},[398,112746,112747,112749,112751,112753,112755,112757,112759],{"class":400,"line":320},[398,112748,17323],{"class":404},[398,112750,109990],{"class":457},[398,112752,409],{"class":408},[398,112754,934],{"class":404},[398,112756,111789],{"class":408},[398,112758,934],{"class":404},[398,112760,112252],{"class":408},[19,112762,112763],{},"奖励由两部分组成：",[38,112765,112766,112771],{},[41,112767,112768,112770],{},[395,112769,111816],{},"：末端离目标越远，奖励越低。",[41,112772,112773,112776],{},[395,112774,112775],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,112778,112779],{},"简单控制器：",[389,112781,112783],{"className":30571,"code":112782,"language":30573,"meta":316,"style":316},"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",[395,112784,112785,112798,112830],{"__ignoreMap":316},[398,112786,112787,112790,112792,112794,112796],{"class":400,"line":401},[398,112788,112789],{"class":408},"error ",[398,112791,454],{"class":404},[398,112793,112361],{"class":408},[398,112795,934],{"class":404},[398,112797,112366],{"class":408},[398,112799,112800,112802,112804,112806,112808,112810,112812,112814,112816,112818,112820,112822,112824,112826,112828],{"class":400,"line":317},[398,112801,106064],{"class":408},[398,112803,593],{"class":457},[398,112805,4719],{"class":408},[398,112807,454],{"class":404},[398,112809,112383],{"class":408},[398,112811,105453],{"class":457},[398,112813,6795],{"class":404},[398,112815,112390],{"class":408},[398,112817,486],{"class":457},[398,112819,112395],{"class":408},[398,112821,934],{"class":404},[398,112823,102596],{"class":457},[398,112825,12712],{"class":408},[398,112827,102596],{"class":457},[398,112829,415],{"class":408},[398,112831,112832,112834,112836,112838,112840,112842,112844,112846,112848,112850,112852,112854,112856,112858,112860],{"class":400,"line":320},[398,112833,106064],{"class":408},[398,112835,619],{"class":457},[398,112837,4719],{"class":408},[398,112839,454],{"class":404},[398,112841,112383],{"class":408},[398,112843,105453],{"class":457},[398,112845,6795],{"class":404},[398,112847,112390],{"class":408},[398,112849,593],{"class":457},[398,112851,112395],{"class":408},[398,112853,934],{"class":404},[398,112855,102596],{"class":457},[398,112857,12712],{"class":408},[398,112859,102596],{"class":457},[398,112861,415],{"class":408},[19,112863,112864],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[14,112866,101901],{"id":101901},[389,112868,112869],{"className":30571,"code":112679,"language":30573,"meta":316,"style":316},[395,112870,112871],{"__ignoreMap":316},[398,112872,112873,112875,112877,112879,112881],{"class":400,"line":401},[398,112874,32140],{"class":404},[398,112876,112049],{"class":2239},[398,112878,112052],{"class":408},[398,112880,1575],{"class":457},[398,112882,112057],{"class":408},[19,112884,112885,112886,112888,112889,82732,112891,28578],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[395,112887,80003],{}," 是 site 的名字，比如 ",[395,112890,111729],{},[395,112892,112152],{},[389,112894,112896],{"className":30571,"code":112895,"language":30573,"meta":316,"style":316},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[395,112897,112898],{"__ignoreMap":316},[398,112899,112900,112902,112904],{"class":400,"line":401},[398,112901,103827],{"class":408},[398,112903,454],{"class":404},[398,112905,112066],{"class":408},[19,112907,112908],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[389,112910,112912],{"className":30571,"code":112911,"language":30573,"meta":316,"style":316},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[395,112913,112914,112926],{"__ignoreMap":316},[398,112915,112916,112918,112920,112922,112924],{"class":400,"line":401},[398,112917,1807],{"class":404},[398,112919,103642],{"class":408},[398,112921,1312],{"class":404},[398,112923,4369],{"class":457},[398,112925,4015],{"class":408},[398,112927,112928,112930,112932,112934,112936,112938,112940,112942,112944,112946],{"class":400,"line":317},[398,112929,104088],{"class":404},[398,112931,103628],{"class":457},[398,112933,409],{"class":408},[398,112935,461],{"class":404},[398,112937,112091],{"class":513},[398,112939,1298],{"class":457},[398,112941,80003],{"class":408},[398,112943,1348],{"class":457},[398,112945,653],{"class":513},[398,112947,415],{"class":408},[19,112949,112950,112951,112954,112955,112957],{},"如果 site 没找到，就主动报错。",[395,112952,112953],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[395,112956,80003],{}," 的值放进字符串里。",[389,112959,112961],{"className":30571,"code":112960,"language":30573,"meta":316,"style":316},"return data.site_xpos[site_id].copy()\n",[395,112962,112963],{"__ignoreMap":316},[398,112964,112965,112967],{"class":400,"line":401},[398,112966,17323],{"class":404},[398,112968,112108],{"class":408},[19,112970,112971,112972,112974,112975,112978],{},"返回这个 site 的世界坐标。",[395,112973,103873],{}," 里的每一行都是一个 site 的 ",[395,112976,112977],{},"(x, y, z)"," 坐标。",[389,112980,112982],{"className":30571,"code":112981,"language":30573,"meta":316,"style":316},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[395,112983,112984],{"__ignoreMap":316},[398,112985,112986,112988,112990],{"class":400,"line":401},[398,112987,32140],{"class":404},[398,112989,112123],{"class":2239},[398,112991,112126],{"class":408},[19,112993,112994],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[389,112996,112998],{"className":30571,"code":112997,"language":30573,"meta":316,"style":316},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[395,112999,113000,113012],{"__ignoreMap":316},[398,113001,113002,113004,113006,113008,113010],{"class":400,"line":401},[398,113003,111761],{"class":408},[398,113005,454],{"class":404},[398,113007,112136],{"class":408},[398,113009,111729],{"class":513},[398,113011,415],{"class":408},[398,113013,113014,113016,113018,113020,113022],{"class":400,"line":317},[398,113015,111771],{"class":408},[398,113017,454],{"class":404},[398,113019,112136],{"class":408},[398,113021,112152],{"class":513},[398,113023,415],{"class":408},[19,113025,113026],{},"分别读取末端点和目标点的世界坐标。",[389,113028,113029],{"className":30571,"code":112701,"language":30573,"meta":316,"style":316},[395,113030,113031],{"__ignoreMap":316},[398,113032,113033,113035],{"class":400,"line":401},[398,113034,17323],{"class":404},[398,113036,112161],{"class":408},[19,113038,113039],{},"把四部分拼成一个观测数组：",[389,113041,113044],{"className":113042,"code":113043,"language":5464,"meta":316},[5462],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[395,113045,113043],{"__ignoreMap":316},[389,113047,113049],{"className":30571,"code":113048,"language":30573,"meta":316,"style":316},"dist = np.linalg.norm(tip - target)\n",[395,113050,113051],{"__ignoreMap":316},[398,113052,113053,113055,113057,113059,113061],{"class":400,"line":401},[398,113054,111789],{"class":408},[398,113056,454],{"class":404},[398,113058,111794],{"class":408},[398,113060,934],{"class":404},[398,113062,111799],{"class":408},[19,113064,113065,113066,113069,113070,113073],{},"计算 tip 到 target 的距离。",[395,113067,113068],{},"tip - target"," 得到一个三维向量，",[395,113071,113072],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,113075,14910],{},[389,113077,113080],{"className":113078,"code":113079,"language":5464,"meta":316},[5462],"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",[395,113081,113079],{"__ignoreMap":316},[389,113083,113085],{"className":30571,"code":113084,"language":30573,"meta":316,"style":316},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[395,113086,113087],{"__ignoreMap":316},[398,113088,113089,113091,113093,113095,113097],{"class":400,"line":401},[398,113090,112736],{"class":408},[398,113092,454],{"class":404},[398,113094,112230],{"class":457},[398,113096,6795],{"class":404},[398,113098,112235],{"class":408},[19,113100,113101,113102,113105,113106,113109],{},"计算动作惩罚。",[395,113103,113104],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[395,113107,113108],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[389,113111,113113],{"className":30571,"code":113112,"language":30573,"meta":316,"style":316},"return float(-dist - control_cost)\n",[395,113114,113115],{"__ignoreMap":316},[398,113116,113117,113119,113121,113123,113125,113127,113129],{"class":400,"line":401},[398,113118,17323],{"class":404},[398,113120,109990],{"class":457},[398,113122,409],{"class":408},[398,113124,934],{"class":404},[398,113126,111789],{"class":408},[398,113128,934],{"class":404},[398,113130,112252],{"class":408},[19,113132,113133],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[389,113135,113136],{"className":30571,"code":110996,"language":30573,"meta":316,"style":316},[395,113137,113138],{"__ignoreMap":316},[398,113139,113140,113142,113144],{"class":400,"line":401},[398,113141,111003],{"class":408},[398,113143,454],{"class":404},[398,113145,104954],{"class":457},[19,113147,113148],{},"累计奖励变量，记录整个运行过程的总分。",[389,113150,113152],{"className":30571,"code":113151,"language":30573,"meta":316,"style":316},"for step in range(500):\n",[395,113153,113154],{"__ignoreMap":316},[398,113155,113156,113158,113160,113162,113164,113166,113168],{"class":400,"line":401},[398,113157,3301],{"class":404},[398,113159,31809],{"class":408},[398,113161,26236],{"class":404},[398,113163,32636],{"class":457},[398,113165,409],{"class":408},[398,113167,65267],{"class":457},[398,113169,30979],{"class":408},[19,113171,113172],{},"运行 500 个控制步。",[389,113174,113175],{"className":30571,"code":104736,"language":30573,"meta":316,"style":316},[395,113176,113177],{"__ignoreMap":316},[398,113178,113179],{"class":400,"line":401},[398,113180,104736],{"class":408},[19,113182,113183,113184,101211,113186,113188],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[395,113185,103424],{},[395,113187,103427],{}," 是当前状态下的坐标。",[389,113190,113192],{"className":30571,"code":113191,"language":30573,"meta":316,"style":316},"error = target - tip\n",[395,113193,113194],{"__ignoreMap":316},[398,113195,113196,113198,113200,113202,113204],{"class":400,"line":401},[398,113197,112789],{"class":408},[398,113199,454],{"class":404},[398,113201,112361],{"class":408},[398,113203,934],{"class":404},[398,113205,112366],{"class":408},[19,113207,113208],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[389,113210,113212],{"className":30571,"code":113211,"language":30573,"meta":316,"style":316},"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",[395,113213,113214,113246],{"__ignoreMap":316},[398,113215,113216,113218,113220,113222,113224,113226,113228,113230,113232,113234,113236,113238,113240,113242,113244],{"class":400,"line":401},[398,113217,106064],{"class":408},[398,113219,593],{"class":457},[398,113221,4719],{"class":408},[398,113223,454],{"class":404},[398,113225,112383],{"class":408},[398,113227,105453],{"class":457},[398,113229,6795],{"class":404},[398,113231,112390],{"class":408},[398,113233,486],{"class":457},[398,113235,112395],{"class":408},[398,113237,934],{"class":404},[398,113239,102596],{"class":457},[398,113241,12712],{"class":408},[398,113243,102596],{"class":457},[398,113245,415],{"class":408},[398,113247,113248,113250,113252,113254,113256,113258,113260,113262,113264,113266,113268,113270,113272,113274,113276],{"class":400,"line":317},[398,113249,106064],{"class":408},[398,113251,619],{"class":457},[398,113253,4719],{"class":408},[398,113255,454],{"class":404},[398,113257,112383],{"class":408},[398,113259,105453],{"class":457},[398,113261,6795],{"class":404},[398,113263,112390],{"class":408},[398,113265,593],{"class":457},[398,113267,112395],{"class":408},[398,113269,934],{"class":404},[398,113271,102596],{"class":457},[398,113273,12712],{"class":408},[398,113275,102596],{"class":457},[398,113277,415],{"class":408},[19,113279,113280,113281,113284],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[395,113282,113283],{},"error -> ctrl -> step"," 的流程。",[389,113286,113287],{"className":30571,"code":104698,"language":30573,"meta":316,"style":316},[395,113288,113289],{"__ignoreMap":316},[398,113290,113291],{"class":400,"line":401},[398,113292,104698],{"class":408},[19,113294,113295],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[389,113297,113299],{"className":30571,"code":113298,"language":30573,"meta":316,"style":316},"obs = get_obs(model, data)\n",[395,113300,113301],{"__ignoreMap":316},[398,113302,113303,113305,113307],{"class":400,"line":401},[398,113304,111047],{"class":408},[398,113306,454],{"class":404},[398,113308,112484],{"class":408},[19,113310,113311,113312,113315],{},"读取最新观测。后面打印 ",[395,113313,113314],{},"obs.shape[0]","，用来确认观测维度是 10。",[343,113317,102509],{"id":102508},[19,113319,113320],{},"观测维度为:",[389,113322,113325],{"className":113323,"code":113324,"language":5464,"meta":316},[5462],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[395,113326,113324],{"__ignoreMap":316},[19,113328,113329],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,113331,113332],{},"程序每 100 步打印：",[389,113334,113337],{"className":113335,"code":113336,"language":5464,"meta":316},[5462],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[395,113338,113336],{"__ignoreMap":316},[19,113340,113341,113342,113344],{},"如果控制有效，你应该看到最终 ",[395,113343,103424],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[343,113346,102541],{"id":102540},[38,113348,113349,113352,113355,113361,113367,113374,113384],{},[41,113350,113351],{},"修改目标点位置。",[41,113353,113354],{},"重新运行，观察最终 tip 是否变化。",[41,113356,113357,113358,113360],{},"把 gravity 改成 ",[395,113359,102782],{},"，观察控制是否变差。",[41,113362,111374,113363,111378,113365,28578],{},[395,113364,102351],{},[395,113366,486],{},[41,113368,102604,113369,102607,113371,113373],{},[395,113370,110789],{},[395,113372,107500],{},"，观察机械臂是否更难移动。",[41,113375,102604,113376,82723,113378,102607,113380,113383],{},[395,113377,103427],{},[395,113379,104339],{},[395,113381,113382],{},"0.2 0 0.6","，观察 reward 和 final tip。",[41,113385,113386],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[343,113388,102646],{"id":102645},[14,113390,113392],{"id":113391},"site-not-found",[395,113393,113394],{},"site not found",[19,113396,113397,113398,101211,113401,28578],{},"检查 XML 中是否有 ",[395,113399,113400],{},"site name=\"tip\"",[395,113402,113403],{},"site name=\"target\"",[14,113405,113406],{"id":113406},"机械臂完全不动",[19,113408,102716],{},[38,113410,113411,113416,113419,113424],{},[41,113412,113413,113415],{},[395,113414,102351],{}," 是否为 2",[41,113417,113418],{},"actuator 是否引用正确 joint",[41,113420,113421,113423],{},[395,113422,101269],{}," 是否被赋值",[41,113425,113426,113427],{},"是否执行了 ",[395,113428,100878],{},[14,113430,113431],{"id":113431},"控制效果不好",[19,113433,113434],{},"正常。本章重点不是控制器最优，而是任务结构:",[389,113436,113439],{"className":113437,"code":113438,"language":5464,"meta":316},[5462],"obs → action → mj_step → reward → next_obs\n",[395,113440,113438],{"__ignoreMap":316},[14,113442,113444],{"id":113443},"tip-坐标不变化","tip 坐标不变化",[19,113446,102768],{},[38,113448,113449,113454,113462,113471],{},[41,113450,113451,113452,28578],{},"是否每步调用了 ",[395,113453,100878],{},[41,113455,113456,113457,101211,113459,28578],{},"是否写入了 ",[395,113458,106319],{},[395,113460,113461],{},"data.ctrl[1]",[41,113463,113464,113465,614,113468,28578],{},"actuator 是否正确引用 ",[395,113466,113467],{},"joint1",[395,113469,113470],{},"joint2",[41,113472,113473],{},"控制输入是否太小。",[14,113475,113476],{"id":113476},"目标点不会动",[19,113478,113479],{},"本章的 target 是固定 site：",[389,113481,113483],{"className":53260,"code":113482,"language":53262,"meta":316,"style":316},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[395,113484,113485],{"__ignoreMap":316},[398,113486,113487,113489,113491,113493,113495,113497,113499,113501,113504],{"class":400,"line":401},[398,113488,1312],{"class":408},[398,113490,103403],{"class":51493},[398,113492,15197],{"class":2239},[398,113494,454],{"class":408},[398,113496,112152],{"class":513},[398,113498,101299],{"class":2239},[398,113500,454],{"class":408},[398,113502,113503],{"class":513},"\"0.5 0 0.4\"",[398,113505,113506],{"class":408}," ...\u002F>\n",[19,113508,113509,113510,113512],{},"它直接挂在 ",[395,113511,102034],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[14,113514,113515],{"id":113515},"机械臂不像真实机械臂",[19,113517,113518],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[343,113520,102800],{"id":102799},[19,113522,113523],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,113525,113526],{},"核心公式：",[389,113528,113531],{"className":113529,"code":113530,"language":5464,"meta":316},[5462],"distance = ||tip - target||\nreward = -distance - action_cost\n",[395,113532,113530],{"__ignoreMap":316},[19,113534,113535],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[5403,113537,113538],{},"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":316,"searchDepth":317,"depth":317,"links":113540},[113541,113542,113543,113548,113552,113553,113554,113562],{"id":100839,"depth":317,"text":100840},{"id":100962,"depth":317,"text":100963},{"id":101237,"depth":317,"text":101238,"children":113544},[113545,113546,113547],{"id":111744,"depth":320,"text":111745},{"id":111820,"depth":320,"text":111820},{"id":111850,"depth":320,"text":111851},{"id":101445,"depth":317,"text":101446,"children":113549},[113550,113551],{"id":101765,"depth":320,"text":101765},{"id":101901,"depth":320,"text":101901},{"id":102508,"depth":317,"text":102509},{"id":102540,"depth":317,"text":102541},{"id":102645,"depth":317,"text":102646,"children":113555},[113556,113557,113558,113559,113560,113561],{"id":113391,"depth":320,"text":113394},{"id":113406,"depth":320,"text":113406},{"id":113431,"depth":320,"text":113431},{"id":113443,"depth":320,"text":113444},{"id":113476,"depth":320,"text":113476},{"id":113515,"depth":320,"text":113515},{"id":102799,"depth":317,"text":102800},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111548,"description":316},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113569,"title":113570,"body":113571,"description":316,"extension":326,"meta":117033,"navigation":328,"path":117034,"seo":117035,"stem":117036,"__hash__":117037},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113572,"toc":117004},[113573,113576,113578,113581,113584,113609,113612,113618,113621,113627,113629,113631,113655,113657,113675,113677,113720,113722,113749,113751,113754,113806,113809,113815,113824,113827,113865,113868,113907,113910,113918,113925,113928,113934,113936,113990,113997,114042,114045,114049,114065,114075,114077,115338,115340,115352,115354,115365,115367,115370,115391,115394,115397,115430,115436,115439,115472,115475,115478,115519,115524,115538,115541,115554,115559,115582,115584,115599,115609,115624,115631,115651,115666,115684,115687,115704,115712,115728,115734,115766,115779,115811,115821,115856,115870,115916,115930,115972,115983,115996,116002,116035,116038,116065,116075,116115,116125,116142,116149,116167,116170,116211,116224,116239,116242,116265,116268,116280,116283,116302,116307,116328,116331,116346,116349,116383,116395,116410,116413,116438,116441,116460,116463,116495,116498,116522,116528,116558,116565,116578,116581,116583,116585,116591,116594,116597,116609,116612,116614,116668,116670,116674,116680,116689,116692,116699,116701,116724,116727,116731,116733,116751,116757,116759,116792,116795,116801,116805,116808,116828,116833,116837,116844,116864,116869,116873,116876,116896,116899,116985,116989,116992,116998,117001],[10,113574,113570],{"id":113575},"_8gymnasium-风格强化学习接口基础",[343,113577,100840],{"id":100839},[19,113579,113580],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,113582,113583],{},"你将实现:",[389,113585,113587],{"className":30571,"code":113586,"language":30573,"meta":316,"style":316},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[395,113588,113589,113599],{"__ignoreMap":316},[398,113590,113591,113594,113596],{"class":400,"line":401},[398,113592,113593],{"class":408},"obs, info ",[398,113595,454],{"class":404},[398,113597,113598],{"class":408}," env.reset()\n",[398,113600,113601,113604,113606],{"class":400,"line":317},[398,113602,113603],{"class":408},"obs, reward, terminated, truncated, info ",[398,113605,454],{"class":404},[398,113607,113608],{"class":408}," env.step(action)\n",[19,113610,113611],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,113613,113614,113615,113617],{},"前面章节的代码都是“脚本式”的：在 ",[395,113616,102488],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,113619,113620],{},"可以先记住 Gymnasium 环境的核心交互：",[389,113622,113625],{"className":113623,"code":113624,"language":5464,"meta":316},[5462],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[395,113626,113624],{"__ignoreMap":316},[343,113628,100963],{"id":100962},[19,113630,100966],{},[389,113632,113633],{"className":24099,"code":104581,"language":24101,"meta":316,"style":316},[395,113634,113635],{"__ignoreMap":316},[398,113636,113637,113639,113641,113643,113645,113647,113649,113651,113653],{"class":400,"line":401},[398,113638,24854],{"class":2239},[398,113640,26508],{"class":513},[398,113642,24111],{"class":513},[398,113644,26593],{"class":457},[398,113646,104596],{"class":513},[398,113648,100991],{"class":513},[398,113650,102694],{"class":513},[398,113652,101007],{"class":513},[398,113654,104605],{"class":513},[19,113656,103012],{},[389,113658,113660],{"className":24099,"code":113659,"language":24101,"meta":316,"style":316},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[395,113661,113662],{"__ignoreMap":316},[398,113663,113664,113666,113668,113670,113672],{"class":400,"line":401},[398,113665,24108],{"class":2239},[398,113667,24111],{"class":513},[398,113669,101123],{"class":513},[398,113671,107904],{"class":513},[398,113673,113674],{"class":513}," gymnasium\n",[19,113676,103029],{},[389,113678,113680],{"className":24099,"code":113679,"language":24101,"meta":316,"style":316},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[395,113681,113682,113699,113708],{"__ignoreMap":316},[398,113683,113684,113686,113688,113690,113693,113695,113697],{"class":400,"line":401},[398,113685,30523],{"class":2239},[398,113687,29369],{"class":513},[398,113689,25393],{"class":457},[398,113691,113692],{"class":513}," mujoco-gym-api",[398,113694,101168],{"class":513},[398,113696,101171],{"class":457},[398,113698,101174],{"class":457},[398,113700,113701,113703,113705],{"class":400,"line":317},[398,113702,30523],{"class":2239},[398,113704,101181],{"class":513},[398,113706,113707],{"class":513}," mujoco-gym-api\n",[398,113709,113710,113712,113714,113716,113718],{"class":400,"line":320},[398,113711,24108],{"class":2239},[398,113713,24111],{"class":513},[398,113715,101123],{"class":513},[398,113717,107904],{"class":513},[398,113719,113674],{"class":513},[19,113721,101197],{},[38,113723,113724,113734,113737,113743],{},[41,113725,113726,113727,113730,113731,28578],{},"本章使用 ",[395,113728,113729],{},"gymnasium","，不是旧版 ",[395,113732,113733],{},"gym",[41,113735,113736],{},"Gymnasium API 与旧 Gym API 有差异。",[41,113738,113739,113740,28578],{},"旧 Gym 常见返回值是 4 个: ",[395,113741,113742],{},"obs, reward, done, info",[41,113744,113745,113746,28578],{},"Gymnasium 返回值是 5 个: ",[395,113747,113748],{},"obs, reward, terminated, truncated, info",[343,113750,101238],{"id":101237},[19,113752,113753],{},"强化学习环境接口包含:",[84,113755,113756,113765],{},[87,113757,113758],{},[90,113759,113760,113763],{},[93,113761,113762],{"align":95},"方法",[93,113764,102889],{"align":95},[101,113766,113767,113777,113787,113797],{},[90,113768,113769,113774],{},[106,113770,113771],{"align":95},[395,113772,113773],{},"reset()",[106,113775,113776],{"align":95},"重置环境",[90,113778,113779,113784],{},[106,113780,113781],{"align":95},[395,113782,113783],{},"step(action)",[106,113785,113786],{"align":95},"执行动作",[90,113788,113789,113794],{},[106,113790,113791],{"align":95},[395,113792,113793],{},"observation_space",[106,113795,113796],{"align":95},"观测空间",[90,113798,113799,113804],{},[106,113800,113801],{"align":95},[395,113802,113803],{},"action_space",[106,113805,23932],{"align":95},[19,113807,113808],{},"一个最小环境需要完成:",[389,113810,113813],{"className":113811,"code":113812,"language":5464,"meta":316},[5462],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[395,113814,113812],{"__ignoreMap":316},[14,113816,113818,101211,113821,104831],{"id":113817},"terminated-和-truncated-的区别",[395,113819,113820],{},"terminated",[395,113822,113823],{},"truncated",[19,113825,113826],{},"Gymnasium 把“结束”拆成两个概念：",[84,113828,113829,113839],{},[87,113830,113831],{},[90,113832,113833,113835,113837],{},[93,113834,104767],{"align":95},[93,113836,100893],{"align":95},[93,113838,21464],{"align":95},[101,113840,113841,113853],{},[90,113842,113843,113847,113850],{},[106,113844,113845],{"align":95},[395,113846,113820],{},[106,113848,113849],{"align":95},"任务自然结束",[106,113851,113852],{"align":95},"机械臂到达目标、机器人摔倒",[90,113854,113855,113859,113862],{},[106,113856,113857],{"align":95},[395,113858,113823],{},[106,113860,113861],{"align":95},"因外部限制截断",[106,113863,113864],{"align":95},"达到最大步数、时间限制",[19,113866,113867],{},"本章中：",[389,113869,113871],{"className":30571,"code":113870,"language":30573,"meta":316,"style":316},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[395,113872,113873,113888],{"__ignoreMap":316},[398,113874,113875,113878,113880,113883,113885],{"class":400,"line":401},[398,113876,113877],{"class":408},"terminated ",[398,113879,454],{"class":404},[398,113881,113882],{"class":408}," dist ",[398,113884,1312],{"class":404},[398,113886,113887],{"class":457}," 0.05\n",[398,113889,113890,113893,113895,113897,113900,113902,113904],{"class":400,"line":317},[398,113891,113892],{"class":408},"truncated ",[398,113894,454],{"class":404},[398,113896,39066],{"class":457},[398,113898,113899],{"class":408},".steps ",[398,113901,1986],{"class":404},[398,113903,39066],{"class":457},[398,113905,113906],{"class":408},".max_steps\n",[19,113908,113909],{},"也就是：",[38,113911,113912,113915],{},[41,113913,113914],{},"末端距离目标小于 0.05，任务成功结束。",[41,113916,113917],{},"步数超过上限，episode 被截断。",[14,113919,113921,101211,113923],{"id":113920},"observation_space-和-action_space",[395,113922,113793],{},[395,113924,113803],{},[19,113926,113927],{},"这两个对象告诉算法：",[389,113929,113932],{"className":113930,"code":113931,"language":5464,"meta":316},[5462],"观测长什么样\n动作允许多大\n",[395,113933,113931],{"__ignoreMap":316},[19,113935,14910],{},[389,113937,113939],{"className":30571,"code":113938,"language":30573,"meta":316,"style":316},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[395,113940,113941],{"__ignoreMap":316},[398,113942,113943,113945,113948,113950,113953,113956,113959,113961,113963,113966,113968,113970,113972,113974,113976,113978,113980,113983,113985,113987],{"class":400,"line":401},[398,113944,31016],{"class":457},[398,113946,113947],{"class":408},".action_space ",[398,113949,454],{"class":404},[398,113951,113952],{"class":408}," spaces.Box(",[398,113954,113955],{"class":5493},"low",[398,113957,113958],{"class":404},"=-",[398,113960,102596],{"class":457},[398,113962,12712],{"class":408},[398,113964,113965],{"class":5493},"high",[398,113967,454],{"class":404},[398,113969,102596],{"class":457},[398,113971,12712],{"class":408},[398,113973,96156],{"class":5493},[398,113975,454],{"class":404},[398,113977,409],{"class":408},[398,113979,486],{"class":457},[398,113981,113982],{"class":408},",), ",[398,113984,93693],{"class":5493},[398,113986,454],{"class":404},[398,113988,113989],{"class":408},"np.float32)\n",[19,113991,113992,113993,113996],{},"表示动作是 2 维数组，每个值都在 ",[395,113994,113995],{},"[-1, 1]"," 范围内。",[389,113998,114000],{"className":30571,"code":113999,"language":30573,"meta":316,"style":316},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[395,114001,114002],{"__ignoreMap":316},[398,114003,114004,114006,114009,114011,114013,114015,114017,114020,114022,114024,114026,114028,114030,114032,114034,114036,114038,114040],{"class":400,"line":401},[398,114005,31016],{"class":457},[398,114007,114008],{"class":408},".observation_space ",[398,114010,454],{"class":404},[398,114012,113952],{"class":408},[398,114014,113955],{"class":5493},[398,114016,113958],{"class":404},[398,114018,114019],{"class":408},"np.inf, ",[398,114021,113965],{"class":5493},[398,114023,454],{"class":404},[398,114025,114019],{"class":408},[398,114027,96156],{"class":5493},[398,114029,454],{"class":404},[398,114031,409],{"class":408},[398,114033,848],{"class":457},[398,114035,113982],{"class":408},[398,114037,93693],{"class":5493},[398,114039,454],{"class":404},[398,114041,113989],{"class":408},[19,114043,114044],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[14,114046,114048],{"id":114047},"frame_skip-是什么","frame_skip 是什么",[389,114050,114052],{"className":30571,"code":114051,"language":30573,"meta":316,"style":316},"self.frame_skip = 5\n",[395,114053,114054],{"__ignoreMap":316},[398,114055,114056,114058,114061,114063],{"class":400,"line":401},[398,114057,31016],{"class":457},[398,114059,114060],{"class":408},".frame_skip ",[398,114062,454],{"class":404},[398,114064,54620],{"class":457},[19,114066,114067,114068,114071,114072,114074],{},"表示外部调用一次 ",[395,114069,114070],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[395,114073,101408],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[343,114076,101446],{"id":101445},[389,114078,114080],{"className":30571,"code":114079,"language":30573,"meta":316,"style":316},"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",[395,114081,114082,114094,114100,114110,114121,114125,114129,114137,114142,114146,114150,114154,114158,114162,114166,114170,114175,114179,114183,114187,114192,114196,114200,114204,114208,114212,114216,114220,114224,114228,114232,114236,114240,114244,114262,114277,114281,114294,114304,114319,114336,114340,114361,114380,114405,114419,114423,114433,114445,114455,114459,114501,114539,114543,114553,114569,114584,114603,114610,114614,114627,114642,114657,114670,114689,114705,114709,114750,114765,114780,114784,114823,114834,114847,114851,114861,114870,114874,114884,114899,114917,114921,114932,114949,114962,114966,114976,114980,114991,115002,115006,115020,115034,115050,115054,115067,115084,115099,115106,115110,115114,115126,115136,115154,115166,115178,115182,115190,115206,115215,115224,115232,115274,115287,115292,115296,115314,115318,115322,115334],{"__ignoreMap":316},[398,114083,114084,114086,114089,114091],{"class":400,"line":401},[398,114085,30585],{"class":404},[398,114087,114088],{"class":408}," gymnasium ",[398,114090,31576],{"class":404},[398,114092,114093],{"class":408}," gym\n",[398,114095,114096,114098],{"class":400,"line":317},[398,114097,30585],{"class":404},[398,114099,101494],{"class":408},[398,114101,114102,114104,114106,114108],{"class":400,"line":320},[398,114103,30585],{"class":404},[398,114105,31573],{"class":408},[398,114107,31576],{"class":404},[398,114109,31579],{"class":408},[398,114111,114112,114114,114116,114118],{"class":400,"line":1470},[398,114113,30930],{"class":404},[398,114115,114088],{"class":408},[398,114117,30585],{"class":404},[398,114119,114120],{"class":408}," spaces\n",[398,114122,114123],{"class":400,"line":1476},[398,114124,2676],{"emptyLinePlaceholder":328},[398,114126,114127],{"class":400,"line":1490},[398,114128,2676],{"emptyLinePlaceholder":328},[398,114130,114131,114133,114135],{"class":400,"line":1496},[398,114132,101507],{"class":457},[398,114134,13841],{"class":404},[398,114136,101512],{"class":513},[398,114138,114139],{"class":400,"line":1587},[398,114140,114141],{"class":513},"\u003Cmujoco model=\"gym_reacher\">\n",[398,114143,114144],{"class":400,"line":1593},[398,114145,111931],{"class":513},[398,114147,114148],{"class":400,"line":1605},[398,114149,2676],{"emptyLinePlaceholder":328},[398,114151,114152],{"class":400,"line":1888},[398,114153,101531],{"class":513},[398,114155,114156],{"class":400,"line":1893},[398,114157,111949],{"class":513},[398,114159,114160],{"class":400,"line":1899},[398,114161,2676],{"emptyLinePlaceholder":328},[398,114163,114164],{"class":400,"line":1904},[398,114165,111958],{"class":513},[398,114167,114168],{"class":400,"line":1918},[398,114169,111963],{"class":513},[398,114171,114172],{"class":400,"line":1923},[398,114173,114174],{"class":513},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[398,114176,114177],{"class":400,"line":1929},[398,114178,2676],{"emptyLinePlaceholder":328},[398,114180,114181],{"class":400,"line":1950},[398,114182,111977],{"class":513},[398,114184,114185],{"class":400,"line":1955},[398,114186,111982],{"class":513},[398,114188,114189],{"class":400,"line":1969},[398,114190,114191],{"class":513},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[398,114193,114194],{"class":400,"line":1974},[398,114195,111992],{"class":513},[398,114197,114198],{"class":400,"line":2003},[398,114199,106631],{"class":513},[398,114201,114202],{"class":400,"line":2008},[398,114203,101560],{"class":513},[398,114205,114206],{"class":400,"line":2025},[398,114207,101565],{"class":513},[398,114209,114210],{"class":400,"line":2030},[398,114211,2676],{"emptyLinePlaceholder":328},[398,114213,114214],{"class":400,"line":2035},[398,114215,106648],{"class":513},[398,114217,114218],{"class":400,"line":2040},[398,114219,112017],{"class":513},[398,114221,114222],{"class":400,"line":2054},[398,114223,112022],{"class":513},[398,114225,114226],{"class":400,"line":2059},[398,114227,106658],{"class":513},[398,114229,114230],{"class":400,"line":2853},[398,114231,101570],{"class":513},[398,114233,114234],{"class":400,"line":2867},[398,114235,95891],{"class":513},[398,114237,114238],{"class":400,"line":2875},[398,114239,2676],{"emptyLinePlaceholder":328},[398,114241,114242],{"class":400,"line":2880},[398,114243,2676],{"emptyLinePlaceholder":328},[398,114245,114246,114248,114251,114253,114255,114257,114260],{"class":400,"line":2886},[398,114247,14971],{"class":404},[398,114249,114250],{"class":2239}," ReacherEnv",[398,114252,409],{"class":408},[398,114254,113733],{"class":2239},[398,114256,960],{"class":408},[398,114258,114259],{"class":2239},"Env",[398,114261,30979],{"class":408},[398,114263,114264,114267,114269,114271,114274],{"class":400,"line":2892},[398,114265,114266],{"class":408},"    metadata ",[398,114268,454],{"class":404},[398,114270,4724],{"class":408},[398,114272,114273],{"class":513},"\"render_modes\"",[398,114275,114276],{"class":408},": []}\n",[398,114278,114279],{"class":400,"line":2897},[398,114280,2676],{"emptyLinePlaceholder":328},[398,114282,114283,114285,114287,114290,114292],{"class":400,"line":8225},[398,114284,30994],{"class":404},[398,114286,30997],{"class":457},[398,114288,114289],{"class":408},"(self) -> ",[398,114291,95879],{"class":457},[398,114293,4015],{"class":408},[398,114295,114296,114298,114300,114302],{"class":400,"line":8249},[398,114297,31010],{"class":457},[398,114299,17538],{"class":408},[398,114301,31022],{"class":457},[398,114303,2252],{"class":408},[398,114305,114306,114308,114311,114313,114315,114317],{"class":400,"line":8254},[398,114307,31038],{"class":457},[398,114309,114310],{"class":408},".model ",[398,114312,454],{"class":404},[398,114314,101605],{"class":408},[398,114316,101507],{"class":457},[398,114318,415],{"class":408},[398,114320,114321,114323,114326,114328,114331,114333],{"class":400,"line":8260},[398,114322,31038],{"class":457},[398,114324,114325],{"class":408},".data ",[398,114327,454],{"class":404},[398,114329,114330],{"class":408}," mujoco.MjData(",[398,114332,31016],{"class":457},[398,114334,114335],{"class":408},".model)\n",[398,114337,114338],{"class":400,"line":8287},[398,114339,2676],{"emptyLinePlaceholder":328},[398,114341,114342,114344,114347,114349,114352,114354,114357,114359],{"class":400,"line":8292},[398,114343,31038],{"class":457},[398,114345,114346],{"class":408},".tip_site_id ",[398,114348,454],{"class":404},[398,114350,114351],{"class":408}," mujoco.mj_name2id(",[398,114353,31016],{"class":457},[398,114355,114356],{"class":408},".model, mujoco.mjtObj.mjOBJ_SITE, ",[398,114358,111729],{"class":513},[398,114360,415],{"class":408},[398,114362,114363,114365,114368,114370,114372,114374,114376,114378],{"class":400,"line":8298},[398,114364,31038],{"class":457},[398,114366,114367],{"class":408},".target_site_id ",[398,114369,454],{"class":404},[398,114371,114351],{"class":408},[398,114373,31016],{"class":457},[398,114375,114356],{"class":408},[398,114377,112152],{"class":513},[398,114379,415],{"class":408},[398,114381,114382,114384,114386,114388,114390,114392,114395,114397,114399,114401,114403],{"class":400,"line":8310},[398,114383,2773],{"class":404},[398,114385,39066],{"class":457},[398,114387,114346],{"class":408},[398,114389,1312],{"class":404},[398,114391,4369],{"class":457},[398,114393,114394],{"class":404}," or",[398,114396,39066],{"class":457},[398,114398,114367],{"class":408},[398,114400,1312],{"class":404},[398,114402,4369],{"class":457},[398,114404,4015],{"class":408},[398,114406,114407,114410,114412,114414,114417],{"class":400,"line":8322},[398,114408,114409],{"class":404},"            raise",[398,114411,103628],{"class":457},[398,114413,409],{"class":408},[398,114415,114416],{"class":513},"\"required sites not found\"",[398,114418,415],{"class":408},[398,114420,114421],{"class":400,"line":8334},[398,114422,2676],{"emptyLinePlaceholder":328},[398,114424,114425,114427,114429,114431],{"class":400,"line":9993},[398,114426,31038],{"class":457},[398,114428,114060],{"class":408},[398,114430,454],{"class":404},[398,114432,54620],{"class":457},[398,114434,114435,114437,114440,114442],{"class":400,"line":10018},[398,114436,31038],{"class":457},[398,114438,114439],{"class":408},".max_steps ",[398,114441,454],{"class":404},[398,114443,114444],{"class":457}," 200\n",[398,114446,114447,114449,114451,114453],{"class":400,"line":10041},[398,114448,31038],{"class":457},[398,114450,113899],{"class":408},[398,114452,454],{"class":404},[398,114454,47526],{"class":457},[398,114456,114457],{"class":400,"line":10065},[398,114458,2676],{"emptyLinePlaceholder":328},[398,114460,114461,114463,114465,114467,114469,114471,114473,114475,114477,114479,114481,114483,114485,114487,114489,114491,114493,114495,114497,114499],{"class":400,"line":10070},[398,114462,31038],{"class":457},[398,114464,113947],{"class":408},[398,114466,454],{"class":404},[398,114468,113952],{"class":408},[398,114470,113955],{"class":5493},[398,114472,113958],{"class":404},[398,114474,102596],{"class":457},[398,114476,12712],{"class":408},[398,114478,113965],{"class":5493},[398,114480,454],{"class":404},[398,114482,102596],{"class":457},[398,114484,12712],{"class":408},[398,114486,96156],{"class":5493},[398,114488,454],{"class":404},[398,114490,409],{"class":408},[398,114492,486],{"class":457},[398,114494,113982],{"class":408},[398,114496,93693],{"class":5493},[398,114498,454],{"class":404},[398,114500,113989],{"class":408},[398,114502,114503,114505,114507,114509,114511,114513,114515,114517,114519,114521,114523,114525,114527,114529,114531,114533,114535,114537],{"class":400,"line":10075},[398,114504,31038],{"class":457},[398,114506,114008],{"class":408},[398,114508,454],{"class":404},[398,114510,113952],{"class":408},[398,114512,113955],{"class":5493},[398,114514,113958],{"class":404},[398,114516,114019],{"class":408},[398,114518,113965],{"class":5493},[398,114520,454],{"class":404},[398,114522,114019],{"class":408},[398,114524,96156],{"class":5493},[398,114526,454],{"class":404},[398,114528,409],{"class":408},[398,114530,848],{"class":457},[398,114532,113982],{"class":408},[398,114534,93693],{"class":5493},[398,114536,454],{"class":404},[398,114538,113989],{"class":408},[398,114540,114541],{"class":400,"line":10080},[398,114542,2676],{"emptyLinePlaceholder":328},[398,114544,114545,114547,114550],{"class":400,"line":10089},[398,114546,30994],{"class":404},[398,114548,114549],{"class":2239}," _get_obs",[398,114551,114552],{"class":408},"(self) -> np.ndarray:\n",[398,114554,114555,114557,114559,114561,114564,114566],{"class":400,"line":10094},[398,114556,112330],{"class":408},[398,114558,454],{"class":404},[398,114560,39066],{"class":457},[398,114562,114563],{"class":408},".data.site_xpos[",[398,114565,31016],{"class":457},[398,114567,114568],{"class":408},".tip_site_id].copy()\n",[398,114570,114571,114573,114575,114577,114579,114581],{"class":400,"line":10100},[398,114572,112343],{"class":408},[398,114574,454],{"class":404},[398,114576,39066],{"class":457},[398,114578,114563],{"class":408},[398,114580,31016],{"class":457},[398,114582,114583],{"class":408},".target_site_id].copy()\n",[398,114585,114586,114588,114590,114593,114595,114598,114600],{"class":400,"line":10121},[398,114587,110375],{"class":408},[398,114589,454],{"class":404},[398,114591,114592],{"class":408}," np.concatenate([",[398,114594,31016],{"class":457},[398,114596,114597],{"class":408},".data.qpos.copy(), ",[398,114599,31016],{"class":457},[398,114601,114602],{"class":408},".data.qvel.copy(), tip, target])\n",[398,114604,114605,114607],{"class":400,"line":10127},[398,114606,15029],{"class":404},[398,114608,114609],{"class":408}," obs.astype(np.float32)\n",[398,114611,114612],{"class":400,"line":10141},[398,114613,2676],{"emptyLinePlaceholder":328},[398,114615,114616,114618,114621,114623,114625],{"class":400,"line":10147},[398,114617,30994],{"class":404},[398,114619,114620],{"class":2239}," _get_reward",[398,114622,114289],{"class":408},[398,114624,448],{"class":457},[398,114626,4015],{"class":408},[398,114628,114629,114631,114633,114635,114637,114639],{"class":400,"line":10174},[398,114630,112330],{"class":408},[398,114632,454],{"class":404},[398,114634,39066],{"class":457},[398,114636,114563],{"class":408},[398,114638,31016],{"class":457},[398,114640,114641],{"class":408},".tip_site_id]\n",[398,114643,114644,114646,114648,114650,114652,114654],{"class":400,"line":10183},[398,114645,112343],{"class":408},[398,114647,454],{"class":404},[398,114649,39066],{"class":457},[398,114651,114563],{"class":408},[398,114653,31016],{"class":457},[398,114655,114656],{"class":408},".target_site_id]\n",[398,114658,114659,114662,114664,114666,114668],{"class":400,"line":10189},[398,114660,114661],{"class":408},"        dist ",[398,114663,454],{"class":404},[398,114665,111794],{"class":408},[398,114667,934],{"class":404},[398,114669,111799],{"class":408},[398,114671,114672,114675,114677,114679,114681,114684,114686],{"class":400,"line":10197},[398,114673,114674],{"class":408},"        control_cost ",[398,114676,454],{"class":404},[398,114678,112230],{"class":457},[398,114680,6795],{"class":404},[398,114682,114683],{"class":408}," np.sum(np.square(",[398,114685,31016],{"class":457},[398,114687,114688],{"class":408},".data.ctrl))\n",[398,114690,114691,114693,114695,114697,114699,114701,114703],{"class":400,"line":10202},[398,114692,15029],{"class":404},[398,114694,109990],{"class":457},[398,114696,409],{"class":408},[398,114698,934],{"class":404},[398,114700,111789],{"class":408},[398,114702,934],{"class":404},[398,114704,112252],{"class":408},[398,114706,114707],{"class":400,"line":16881},[398,114708,2676],{"emptyLinePlaceholder":328},[398,114710,114711,114713,114716,114719,114721,114724,114726,114728,114730,114732,114734,114737,114740,114742,114744,114746,114748],{"class":400,"line":16887},[398,114712,30994],{"class":404},[398,114714,114715],{"class":2239}," reset",[398,114717,114718],{"class":408},"(self, ",[398,114720,857],{"class":404},[398,114722,114723],{"class":408},", seed: ",[398,114725,412],{"class":457},[398,114727,25387],{"class":404},[398,114729,39126],{"class":457},[398,114731,13841],{"class":404},[398,114733,39126],{"class":457},[398,114735,114736],{"class":408},", options: ",[398,114738,114739],{"class":457},"dict",[398,114741,25387],{"class":404},[398,114743,39126],{"class":457},[398,114745,13841],{"class":404},[398,114747,39126],{"class":457},[398,114749,30979],{"class":408},[398,114751,114752,114754,114757,114760,114762],{"class":400,"line":16910},[398,114753,31010],{"class":457},[398,114755,114756],{"class":408},"().reset(",[398,114758,114759],{"class":5493},"seed",[398,114761,454],{"class":404},[398,114763,114764],{"class":408},"seed)\n",[398,114766,114767,114770,114772,114775,114777],{"class":400,"line":16916},[398,114768,114769],{"class":408},"        mujoco.mj_resetData(",[398,114771,31016],{"class":457},[398,114773,114774],{"class":408},".model, ",[398,114776,31016],{"class":457},[398,114778,114779],{"class":408},".data)\n",[398,114781,114782],{"class":400,"line":16939},[398,114783,2676],{"emptyLinePlaceholder":328},[398,114785,114786,114788,114791,114793,114795,114798,114800,114802,114804,114806,114808,114810,114812,114814,114816,114818,114820],{"class":400,"line":16953},[398,114787,31038],{"class":457},[398,114789,114790],{"class":408},".data.qpos[:] ",[398,114792,454],{"class":404},[398,114794,39066],{"class":457},[398,114796,114797],{"class":408},".np_random.uniform(",[398,114799,113955],{"class":5493},[398,114801,113958],{"class":404},[398,114803,86403],{"class":457},[398,114805,12712],{"class":408},[398,114807,113965],{"class":5493},[398,114809,454],{"class":404},[398,114811,86403],{"class":457},[398,114813,12712],{"class":408},[398,114815,31689],{"class":5493},[398,114817,454],{"class":404},[398,114819,31016],{"class":457},[398,114821,114822],{"class":408},".model.nq)\n",[398,114824,114825,114827,114830,114832],{"class":400,"line":16973},[398,114826,31038],{"class":457},[398,114828,114829],{"class":408},".data.qvel[:] ",[398,114831,454],{"class":404},[398,114833,104954],{"class":457},[398,114835,114836,114839,114841,114843,114845],{"class":400,"line":16979},[398,114837,114838],{"class":408},"        mujoco.mj_forward(",[398,114840,31016],{"class":457},[398,114842,114774],{"class":408},[398,114844,31016],{"class":457},[398,114846,114779],{"class":408},[398,114848,114849],{"class":400,"line":16990},[398,114850,2676],{"emptyLinePlaceholder":328},[398,114852,114853,114855,114857,114859],{"class":400,"line":17013},[398,114854,31038],{"class":457},[398,114856,113899],{"class":408},[398,114858,454],{"class":404},[398,114860,47526],{"class":457},[398,114862,114863,114865,114867],{"class":400,"line":17035},[398,114864,15029],{"class":404},[398,114866,39066],{"class":457},[398,114868,114869],{"class":408},"._get_obs(), {}\n",[398,114871,114872],{"class":400,"line":17040},[398,114873,2676],{"emptyLinePlaceholder":328},[398,114875,114876,114878,114881],{"class":400,"line":17046},[398,114877,30994],{"class":404},[398,114879,114880],{"class":2239}," step",[398,114882,114883],{"class":408},"(self, action):\n",[398,114885,114886,114888,114890,114893,114895,114897],{"class":400,"line":17060},[398,114887,110415],{"class":408},[398,114889,454],{"class":404},[398,114891,114892],{"class":408}," np.asarray(action, ",[398,114894,93693],{"class":5493},[398,114896,454],{"class":404},[398,114898,113989],{"class":408},[398,114900,114901,114903,114905,114907,114909,114912,114914],{"class":400,"line":17073},[398,114902,110415],{"class":408},[398,114904,454],{"class":404},[398,114906,107640],{"class":408},[398,114908,31016],{"class":457},[398,114910,114911],{"class":408},".action_space.low, ",[398,114913,31016],{"class":457},[398,114915,114916],{"class":408},".action_space.high)\n",[398,114918,114919],{"class":400,"line":17078},[398,114920,2676],{"emptyLinePlaceholder":328},[398,114922,114923,114925,114928,114930],{"class":400,"line":17092},[398,114924,31038],{"class":457},[398,114926,114927],{"class":408},".data.ctrl[:] ",[398,114929,454],{"class":404},[398,114931,107663],{"class":408},[398,114933,114934,114936,114938,114940,114942,114944,114946],{"class":400,"line":17097},[398,114935,3679],{"class":404},[398,114937,101694],{"class":408},[398,114939,26236],{"class":404},[398,114941,32636],{"class":457},[398,114943,409],{"class":408},[398,114945,31016],{"class":457},[398,114947,114948],{"class":408},".frame_skip):\n",[398,114950,114951,114954,114956,114958,114960],{"class":400,"line":17103},[398,114952,114953],{"class":408},"            mujoco.mj_step(",[398,114955,31016],{"class":457},[398,114957,114774],{"class":408},[398,114959,31016],{"class":457},[398,114961,114779],{"class":408},[398,114963,114964],{"class":400,"line":17108},[398,114965,2676],{"emptyLinePlaceholder":328},[398,114967,114968,114970,114972,114974],{"class":400,"line":17122},[398,114969,31038],{"class":457},[398,114971,113899],{"class":408},[398,114973,9754],{"class":404},[398,114975,55892],{"class":457},[398,114977,114978],{"class":400,"line":17127},[398,114979,2676],{"emptyLinePlaceholder":328},[398,114981,114982,114984,114986,114988],{"class":400,"line":17132},[398,114983,110375],{"class":408},[398,114985,454],{"class":404},[398,114987,39066],{"class":457},[398,114989,114990],{"class":408},"._get_obs()\n",[398,114992,114993,114995,114997,114999],{"class":400,"line":17146},[398,114994,110480],{"class":408},[398,114996,454],{"class":404},[398,114998,39066],{"class":457},[398,115000,115001],{"class":408},"._get_reward()\n",[398,115003,115004],{"class":400,"line":17158},[398,115005,2676],{"emptyLinePlaceholder":328},[398,115007,115008,115010,115012,115014,115016,115018],{"class":400,"line":17163},[398,115009,112330],{"class":408},[398,115011,454],{"class":404},[398,115013,39066],{"class":457},[398,115015,114563],{"class":408},[398,115017,31016],{"class":457},[398,115019,114641],{"class":408},[398,115021,115022,115024,115026,115028,115030,115032],{"class":400,"line":17176},[398,115023,112343],{"class":408},[398,115025,454],{"class":404},[398,115027,39066],{"class":457},[398,115029,114563],{"class":408},[398,115031,31016],{"class":457},[398,115033,114656],{"class":408},[398,115035,115036,115038,115040,115042,115045,115047],{"class":400,"line":17181},[398,115037,114661],{"class":408},[398,115039,454],{"class":404},[398,115041,109990],{"class":457},[398,115043,115044],{"class":408},"(np.linalg.norm(tip ",[398,115046,934],{"class":404},[398,115048,115049],{"class":408}," target))\n",[398,115051,115052],{"class":400,"line":17186},[398,115053,2676],{"emptyLinePlaceholder":328},[398,115055,115056,115059,115061,115063,115065],{"class":400,"line":17191},[398,115057,115058],{"class":408},"        terminated ",[398,115060,454],{"class":404},[398,115062,113882],{"class":408},[398,115064,1312],{"class":404},[398,115066,113887],{"class":457},[398,115068,115069,115072,115074,115076,115078,115080,115082],{"class":400,"line":17204},[398,115070,115071],{"class":408},"        truncated ",[398,115073,454],{"class":404},[398,115075,39066],{"class":457},[398,115077,113899],{"class":408},[398,115079,1986],{"class":404},[398,115081,39066],{"class":457},[398,115083,113906],{"class":408},[398,115085,115086,115089,115091,115093,115096],{"class":400,"line":17209},[398,115087,115088],{"class":408},"        info ",[398,115090,454],{"class":404},[398,115092,4724],{"class":408},[398,115094,115095],{"class":513},"\"distance\"",[398,115097,115098],{"class":408},": dist}\n",[398,115100,115101,115103],{"class":400,"line":32826},[398,115102,15029],{"class":404},[398,115104,115105],{"class":408}," obs, reward, terminated, truncated, info\n",[398,115107,115108],{"class":400,"line":32832},[398,115109,2676],{"emptyLinePlaceholder":328},[398,115111,115112],{"class":400,"line":32838},[398,115113,2676],{"emptyLinePlaceholder":328},[398,115115,115116,115118,115120,115122,115124],{"class":400,"line":32844},[398,115117,32140],{"class":404},[398,115119,2249],{"class":2239},[398,115121,101591],{"class":408},[398,115123,95879],{"class":457},[398,115125,4015],{"class":408},[398,115127,115128,115131,115133],{"class":400,"line":32850},[398,115129,115130],{"class":408},"    env ",[398,115132,454],{"class":404},[398,115134,115135],{"class":408}," ReacherEnv()\n",[398,115137,115138,115141,115143,115146,115148,115150,115152],{"class":400,"line":32861},[398,115139,115140],{"class":408},"    obs, info ",[398,115142,454],{"class":404},[398,115144,115145],{"class":408}," env.reset(",[398,115147,114759],{"class":5493},[398,115149,454],{"class":404},[398,115151,593],{"class":457},[398,115153,415],{"class":408},[398,115155,115156,115158,115160,115163],{"class":400,"line":32867},[398,115157,31492],{"class":457},[398,115159,409],{"class":408},[398,115161,115162],{"class":513},"\"initial obs shape:\"",[398,115164,115165],{"class":408},", obs.shape)\n",[398,115167,115168,115170,115172,115175],{"class":400,"line":32887},[398,115169,31492],{"class":457},[398,115171,409],{"class":408},[398,115173,115174],{"class":513},"\"initial info:\"",[398,115176,115177],{"class":408},", info)\n",[398,115179,115180],{"class":400,"line":32893},[398,115181,2676],{"emptyLinePlaceholder":328},[398,115183,115184,115186,115188],{"class":400,"line":32904},[398,115185,110346],{"class":408},[398,115187,454],{"class":404},[398,115189,104954],{"class":457},[398,115191,115192,115194,115196,115198,115200,115202,115204],{"class":400,"line":32910},[398,115193,3477],{"class":404},[398,115195,31809],{"class":408},[398,115197,26236],{"class":404},[398,115199,32636],{"class":457},[398,115201,409],{"class":408},[398,115203,1102],{"class":457},[398,115205,30979],{"class":408},[398,115207,115208,115210,115212],{"class":400,"line":32916},[398,115209,110415],{"class":408},[398,115211,454],{"class":404},[398,115213,115214],{"class":408}," env.action_space.sample()\n",[398,115216,115217,115220,115222],{"class":400,"line":32922},[398,115218,115219],{"class":408},"        obs, reward, terminated, truncated, info ",[398,115221,454],{"class":404},[398,115223,113608],{"class":408},[398,115225,115226,115228,115230],{"class":400,"line":32928},[398,115227,110490],{"class":408},[398,115229,9754],{"class":404},[398,115231,110495],{"class":408},[398,115233,115234,115236,115238,115240,115242,115245,115247,115249,115252,115254,115256,115259,115261,115263,115266,115268,115270,115272],{"class":400,"line":32934},[398,115235,32644],{"class":457},[398,115237,409],{"class":408},[398,115239,110524],{"class":513},[398,115241,110527],{"class":408},[398,115243,115244],{"class":513},"\"reward:\"",[398,115246,12712],{"class":408},[398,115248,32211],{"class":457},[398,115250,115251],{"class":408},"(reward, ",[398,115253,480],{"class":457},[398,115255,110538],{"class":408},[398,115257,115258],{"class":513},"\"distance:\"",[398,115260,12712],{"class":408},[398,115262,32211],{"class":457},[398,115264,115265],{"class":408},"(info[",[398,115267,115095],{"class":513},[398,115269,112395],{"class":408},[398,115271,480],{"class":457},[398,115273,30690],{"class":408},[398,115275,115276,115278,115281,115284],{"class":400,"line":32940},[398,115277,2773],{"class":404},[398,115279,115280],{"class":408}," terminated ",[398,115282,115283],{"class":404},"or",[398,115285,115286],{"class":408}," truncated:\n",[398,115288,115289],{"class":400,"line":32946},[398,115290,115291],{"class":404},"            break\n",[398,115293,115294],{"class":400,"line":32966},[398,115295,2676],{"emptyLinePlaceholder":328},[398,115297,115298,115300,115302,115304,115306,115308,115310,115312],{"class":400,"line":32972},[398,115299,31492],{"class":457},[398,115301,409],{"class":408},[398,115303,110569],{"class":513},[398,115305,12712],{"class":408},[398,115307,32211],{"class":457},[398,115309,110576],{"class":408},[398,115311,480],{"class":457},[398,115313,30690],{"class":408},[398,115315,115316],{"class":400,"line":32988},[398,115317,2676],{"emptyLinePlaceholder":328},[398,115319,115320],{"class":400,"line":32994},[398,115321,2676],{"emptyLinePlaceholder":328},[398,115323,115324,115326,115328,115330,115332],{"class":400,"line":33008},[398,115325,1807],{"class":404},[398,115327,31413],{"class":457},[398,115329,101752],{"class":404},[398,115331,101755],{"class":513},[398,115333,4015],{"class":408},[398,115335,115336],{"class":400,"line":33014},[398,115337,101762],{"class":408},[19,115339,103763],{},[389,115341,115343],{"className":24099,"code":115342,"language":24101,"meta":316,"style":316},"touch ch8_gym_env.py\n",[395,115344,115345],{"__ignoreMap":316},[398,115346,115347,115349],{"class":400,"line":401},[398,115348,101476],{"class":2239},[398,115350,115351],{"class":513}," ch8_gym_env.py\n",[19,115353,110637],{},[389,115355,115357],{"className":24099,"code":115356,"language":24101,"meta":316,"style":316},"python ch8_gym_env.py\n",[395,115358,115359],{"__ignoreMap":316},[398,115360,115361,115363],{"class":400,"line":401},[398,115362,30573],{"class":2239},[398,115364,115351],{"class":513},[14,115366,101765],{"id":101765},[19,115368,115369],{},"继承 Gymnasium 环境：",[389,115371,115373],{"className":30571,"code":115372,"language":30573,"meta":316,"style":316},"class ReacherEnv(gym.Env):\n",[395,115374,115375],{"__ignoreMap":316},[398,115376,115377,115379,115381,115383,115385,115387,115389],{"class":400,"line":401},[398,115378,14971],{"class":404},[398,115380,114250],{"class":2239},[398,115382,409],{"class":408},[398,115384,113733],{"class":2239},[398,115386,960],{"class":408},[398,115388,114259],{"class":2239},[398,115390,30979],{"class":408},[19,115392,115393],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,115395,115396],{},"初始化模型：",[389,115398,115400],{"className":30571,"code":115399,"language":30573,"meta":316,"style":316},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[395,115401,115402,115416],{"__ignoreMap":316},[398,115403,115404,115406,115408,115410,115412,115414],{"class":400,"line":401},[398,115405,31016],{"class":457},[398,115407,114310],{"class":408},[398,115409,454],{"class":404},[398,115411,101605],{"class":408},[398,115413,101507],{"class":457},[398,115415,415],{"class":408},[398,115417,115418,115420,115422,115424,115426,115428],{"class":400,"line":317},[398,115419,31016],{"class":457},[398,115421,114325],{"class":408},[398,115423,454],{"class":404},[398,115425,114330],{"class":408},[398,115427,31016],{"class":457},[398,115429,114335],{"class":408},[19,115431,115432,115433,115435],{},"这和前面章节一样，只是现在放到了类的 ",[395,115434,31022],{}," 里。",[19,115437,115438],{},"缓存 site ID：",[389,115440,115442],{"className":30571,"code":115441,"language":30573,"meta":316,"style":316},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[395,115443,115444,115458],{"__ignoreMap":316},[398,115445,115446,115448,115450,115452,115454,115456],{"class":400,"line":401},[398,115447,31016],{"class":457},[398,115449,114346],{"class":408},[398,115451,454],{"class":404},[398,115453,114351],{"class":408},[398,115455,89747],{"class":457},[398,115457,415],{"class":408},[398,115459,115460,115462,115464,115466,115468,115470],{"class":400,"line":317},[398,115461,31016],{"class":457},[398,115463,114367],{"class":408},[398,115465,454],{"class":404},[398,115467,114351],{"class":408},[398,115469,89747],{"class":457},[398,115471,415],{"class":408},[19,115473,115474],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,115476,115477],{},"reset：",[389,115479,115481],{"className":30571,"code":115480,"language":30573,"meta":316,"style":316},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[395,115482,115483],{"__ignoreMap":316},[398,115484,115485,115487,115489,115491,115493,115495,115497,115499,115501,115503,115505,115507,115509,115511,115513,115515,115517],{"class":400,"line":401},[398,115486,32140],{"class":404},[398,115488,114715],{"class":2239},[398,115490,114718],{"class":408},[398,115492,857],{"class":404},[398,115494,114723],{"class":408},[398,115496,412],{"class":457},[398,115498,25387],{"class":404},[398,115500,39126],{"class":457},[398,115502,13841],{"class":404},[398,115504,39126],{"class":457},[398,115506,114736],{"class":408},[398,115508,114739],{"class":457},[398,115510,25387],{"class":404},[398,115512,39126],{"class":457},[398,115514,13841],{"class":404},[398,115516,39126],{"class":457},[398,115518,30979],{"class":408},[19,115520,115521,115523],{},[395,115522,70249],{}," 做四件事：",[38,115525,115526,115529,115532,115535],{},[41,115527,115528],{},"设置随机种子。",[41,115530,115531],{},"重置 MuJoCo data。",[41,115533,115534],{},"随机初始化关节角。",[41,115536,115537],{},"返回初始观测和 info。",[19,115539,115540],{},"step：",[389,115542,115544],{"className":30571,"code":115543,"language":30573,"meta":316,"style":316},"def step(self, action):\n",[395,115545,115546],{"__ignoreMap":316},[398,115547,115548,115550,115552],{"class":400,"line":401},[398,115549,32140],{"class":404},[398,115551,114880],{"class":2239},[398,115553,114883],{"class":408},[19,115555,115556,115558],{},[395,115557,107327],{}," 做六件事：",[38,115560,115561,115564,115570,115573,115576,115579],{},[41,115562,115563],{},"检查并裁剪 action。",[41,115565,115566,115567,28578],{},"写入 ",[395,115568,115569],{},"self.data.ctrl",[41,115571,115572],{},"连续推进若干个 MuJoCo 物理步。",[41,115574,115575],{},"计算新观测。",[41,115577,115578],{},"计算奖励和结束条件。",[41,115580,115581],{},"返回 Gymnasium 标准五元组。",[14,115583,101901],{"id":101901},[389,115585,115587],{"className":30571,"code":115586,"language":30573,"meta":316,"style":316},"import gymnasium as gym\n",[395,115588,115589],{"__ignoreMap":316},[398,115590,115591,115593,115595,115597],{"class":400,"line":401},[398,115592,30585],{"class":404},[398,115594,114088],{"class":408},[398,115596,31576],{"class":404},[398,115598,114093],{"class":408},[19,115600,115601,115602,115604,115605,115608],{},"导入 Gymnasium，并起别名 ",[395,115603,113733],{},"。后面写 ",[395,115606,115607],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[389,115610,115612],{"className":30571,"code":115611,"language":30573,"meta":316,"style":316},"from gymnasium import spaces\n",[395,115613,115614],{"__ignoreMap":316},[398,115615,115616,115618,115620,115622],{"class":400,"line":401},[398,115617,30930],{"class":404},[398,115619,114088],{"class":408},[398,115621,30585],{"class":404},[398,115623,114120],{"class":408},[19,115625,115626,115627,115630],{},"导入空间定义工具。",[395,115628,115629],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[389,115632,115633],{"className":30571,"code":115372,"language":30573,"meta":316,"style":316},[395,115634,115635],{"__ignoreMap":316},[398,115636,115637,115639,115641,115643,115645,115647,115649],{"class":400,"line":401},[398,115638,14971],{"class":404},[398,115640,114250],{"class":2239},[398,115642,409],{"class":408},[398,115644,113733],{"class":2239},[398,115646,960],{"class":408},[398,115648,114259],{"class":2239},[398,115650,30979],{"class":408},[19,115652,115653,115654,115657,115658,115660,115661,101211,115663,115665],{},"定义一个类，名字叫 ",[395,115655,115656],{},"ReacherEnv","。括号里的 ",[395,115659,115607],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[395,115662,70249],{},[395,115664,107327],{}," 这两个核心方法。",[389,115667,115669],{"className":30571,"code":115668,"language":30573,"meta":316,"style":316},"metadata = {\"render_modes\": []}\n",[395,115670,115671],{"__ignoreMap":316},[398,115672,115673,115676,115678,115680,115682],{"class":400,"line":401},[398,115674,115675],{"class":408},"metadata ",[398,115677,454],{"class":404},[398,115679,4724],{"class":408},[398,115681,114273],{"class":513},[398,115683,114276],{"class":408},[19,115685,115686],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[389,115688,115690],{"className":30571,"code":115689,"language":30573,"meta":316,"style":316},"def __init__(self) -> None:\n",[395,115691,115692],{"__ignoreMap":316},[398,115693,115694,115696,115698,115700,115702],{"class":400,"line":401},[398,115695,32140],{"class":404},[398,115697,30997],{"class":457},[398,115699,114289],{"class":408},[398,115701,95879],{"class":457},[398,115703,4015],{"class":408},[19,115705,115706,115708,115709,28578],{},[395,115707,31022],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[395,115710,115711],{},"env = ReacherEnv()",[389,115713,115715],{"className":30571,"code":115714,"language":30573,"meta":316,"style":316},"super().__init__()\n",[395,115716,115717],{"__ignoreMap":316},[398,115718,115719,115722,115724,115726],{"class":400,"line":401},[398,115720,115721],{"class":457},"super",[398,115723,17538],{"class":408},[398,115725,31022],{"class":457},[398,115727,2252],{"class":408},[19,115729,115730,115731,115733],{},"调用父类 ",[395,115732,115607],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[389,115735,115736],{"className":30571,"code":115399,"language":30573,"meta":316,"style":316},[395,115737,115738,115752],{"__ignoreMap":316},[398,115739,115740,115742,115744,115746,115748,115750],{"class":400,"line":401},[398,115741,31016],{"class":457},[398,115743,114310],{"class":408},[398,115745,454],{"class":404},[398,115747,101605],{"class":408},[398,115749,101507],{"class":457},[398,115751,415],{"class":408},[398,115753,115754,115756,115758,115760,115762,115764],{"class":400,"line":317},[398,115755,31016],{"class":457},[398,115757,114325],{"class":408},[398,115759,454],{"class":404},[398,115761,114330],{"class":408},[398,115763,31016],{"class":457},[398,115765,114335],{"class":408},[19,115767,115768,115769,115771,115772,101211,115775,115778],{},"把 MuJoCo 模型和状态保存到 ",[395,115770,31016],{}," 上。",[395,115773,115774],{},"self.model",[395,115776,115777],{},"self.data"," 表示这个环境对象自己的模型和状态。",[389,115780,115781],{"className":30571,"code":115441,"language":30573,"meta":316,"style":316},[395,115782,115783,115797],{"__ignoreMap":316},[398,115784,115785,115787,115789,115791,115793,115795],{"class":400,"line":401},[398,115786,31016],{"class":457},[398,115788,114346],{"class":408},[398,115790,454],{"class":404},[398,115792,114351],{"class":408},[398,115794,89747],{"class":457},[398,115796,415],{"class":408},[398,115798,115799,115801,115803,115805,115807,115809],{"class":400,"line":317},[398,115800,31016],{"class":457},[398,115802,114367],{"class":408},[398,115804,454],{"class":404},[398,115806,114351],{"class":408},[398,115808,89747],{"class":457},[398,115810,415],{"class":408},[19,115812,115813,115814,101211,115817,115820],{},"提前查好 tip 和 target 的 site ID。这样 ",[395,115815,115816],{},"_get_obs",[395,115818,115819],{},"_get_reward"," 里就不用每次按名字查找。",[389,115822,115824],{"className":30571,"code":115823,"language":30573,"meta":316,"style":316},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[395,115825,115826,115836,115846],{"__ignoreMap":316},[398,115827,115828,115830,115832,115834],{"class":400,"line":401},[398,115829,31016],{"class":457},[398,115831,114060],{"class":408},[398,115833,454],{"class":404},[398,115835,54620],{"class":457},[398,115837,115838,115840,115842,115844],{"class":400,"line":317},[398,115839,31016],{"class":457},[398,115841,114439],{"class":408},[398,115843,454],{"class":404},[398,115845,114444],{"class":457},[398,115847,115848,115850,115852,115854],{"class":400,"line":320},[398,115849,31016],{"class":457},[398,115851,113899],{"class":408},[398,115853,454],{"class":404},[398,115855,47526],{"class":457},[19,115857,115858,115861,115862,115865,115866,115869],{},[395,115859,115860],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[395,115863,115864],{},"max_steps"," 是一个 episode 最多运行多少步。",[395,115867,115868],{},"steps"," 记录当前 episode 已经走了多少步。",[389,115871,115872],{"className":30571,"code":113938,"language":30573,"meta":316,"style":316},[395,115873,115874],{"__ignoreMap":316},[398,115875,115876,115878,115880,115882,115884,115886,115888,115890,115892,115894,115896,115898,115900,115902,115904,115906,115908,115910,115912,115914],{"class":400,"line":401},[398,115877,31016],{"class":457},[398,115879,113947],{"class":408},[398,115881,454],{"class":404},[398,115883,113952],{"class":408},[398,115885,113955],{"class":5493},[398,115887,113958],{"class":404},[398,115889,102596],{"class":457},[398,115891,12712],{"class":408},[398,115893,113965],{"class":5493},[398,115895,454],{"class":404},[398,115897,102596],{"class":457},[398,115899,12712],{"class":408},[398,115901,96156],{"class":5493},[398,115903,454],{"class":404},[398,115905,409],{"class":408},[398,115907,486],{"class":457},[398,115909,113982],{"class":408},[398,115911,93693],{"class":5493},[398,115913,454],{"class":404},[398,115915,113989],{"class":408},[19,115917,115918,115919,115922,115923,101211,115926,115929],{},"定义动作空间。",[395,115920,115921],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[395,115924,115925],{},"low=-1.0",[395,115927,115928],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[389,115931,115932],{"className":30571,"code":113999,"language":30573,"meta":316,"style":316},[395,115933,115934],{"__ignoreMap":316},[398,115935,115936,115938,115940,115942,115944,115946,115948,115950,115952,115954,115956,115958,115960,115962,115964,115966,115968,115970],{"class":400,"line":401},[398,115937,31016],{"class":457},[398,115939,114008],{"class":408},[398,115941,454],{"class":404},[398,115943,113952],{"class":408},[398,115945,113955],{"class":5493},[398,115947,113958],{"class":404},[398,115949,114019],{"class":408},[398,115951,113965],{"class":5493},[398,115953,454],{"class":404},[398,115955,114019],{"class":408},[398,115957,96156],{"class":5493},[398,115959,454],{"class":404},[398,115961,409],{"class":408},[398,115963,848],{"class":457},[398,115965,113982],{"class":408},[398,115967,93693],{"class":5493},[398,115969,454],{"class":404},[398,115971,113989],{"class":408},[19,115973,115974,115975,115978,115979,115982],{},"定义观测空间。",[395,115976,115977],{},"shape=(10,)"," 表示观测是 10 个数。",[395,115980,115981],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[389,115984,115986],{"className":30571,"code":115985,"language":30573,"meta":316,"style":316},"def _get_obs(self) -> np.ndarray:\n",[395,115987,115988],{"__ignoreMap":316},[398,115989,115990,115992,115994],{"class":400,"line":401},[398,115991,32140],{"class":404},[398,115993,114549],{"class":2239},[398,115995,114552],{"class":408},[19,115997,115998,115999,116001],{},"定义内部函数，用来生成观测。函数名前面的 ",[395,116000,1394],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[389,116003,116005],{"className":30571,"code":116004,"language":30573,"meta":316,"style":316},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[395,116006,116007,116021],{"__ignoreMap":316},[398,116008,116009,116011,116013,116015,116017,116019],{"class":400,"line":401},[398,116010,111761],{"class":408},[398,116012,454],{"class":404},[398,116014,39066],{"class":457},[398,116016,114563],{"class":408},[398,116018,31016],{"class":457},[398,116020,114568],{"class":408},[398,116022,116023,116025,116027,116029,116031,116033],{"class":400,"line":317},[398,116024,111771],{"class":408},[398,116026,454],{"class":404},[398,116028,39066],{"class":457},[398,116030,114563],{"class":408},[398,116032,31016],{"class":457},[398,116034,114583],{"class":408},[19,116036,116037],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[389,116039,116041],{"className":30571,"code":116040,"language":30573,"meta":316,"style":316},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[395,116042,116043,116059],{"__ignoreMap":316},[398,116044,116045,116047,116049,116051,116053,116055,116057],{"class":400,"line":401},[398,116046,111047],{"class":408},[398,116048,454],{"class":404},[398,116050,114592],{"class":408},[398,116052,31016],{"class":457},[398,116054,114597],{"class":408},[398,116056,31016],{"class":457},[398,116058,114602],{"class":408},[398,116060,116061,116063],{"class":400,"line":317},[398,116062,17323],{"class":404},[398,116064,114609],{"class":408},[19,116066,116067,116068,116071,116072,116074],{},"拼接观测，并转换成 ",[395,116069,116070],{},"float32","。很多强化学习库默认使用 ",[395,116073,116070],{},"，所以这里主动转换。",[389,116076,116077],{"className":30571,"code":115480,"language":30573,"meta":316,"style":316},[395,116078,116079],{"__ignoreMap":316},[398,116080,116081,116083,116085,116087,116089,116091,116093,116095,116097,116099,116101,116103,116105,116107,116109,116111,116113],{"class":400,"line":401},[398,116082,32140],{"class":404},[398,116084,114715],{"class":2239},[398,116086,114718],{"class":408},[398,116088,857],{"class":404},[398,116090,114723],{"class":408},[398,116092,412],{"class":457},[398,116094,25387],{"class":404},[398,116096,39126],{"class":457},[398,116098,13841],{"class":404},[398,116100,39126],{"class":457},[398,116102,114736],{"class":408},[398,116104,114739],{"class":457},[398,116106,25387],{"class":404},[398,116108,39126],{"class":457},[398,116110,13841],{"class":404},[398,116112,39126],{"class":457},[398,116114,30979],{"class":408},[19,116116,116117,116118,116120,116121,116124],{},"定义 reset。",[395,116119,114759],{}," 用来控制随机数，保证实验可以复现。",[395,116122,116123],{},"options"," 用来接收额外配置，本章暂时不用。",[389,116126,116128],{"className":30571,"code":116127,"language":30573,"meta":316,"style":316},"super().reset(seed=seed)\n",[395,116129,116130],{"__ignoreMap":316},[398,116131,116132,116134,116136,116138,116140],{"class":400,"line":401},[398,116133,115721],{"class":457},[398,116135,114756],{"class":408},[398,116137,114759],{"class":5493},[398,116139,454],{"class":404},[398,116141,114764],{"class":408},[19,116143,116144,116145,116148],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[395,116146,116147],{},"self.np_random"," 生成可复现的随机数。",[389,116150,116152],{"className":30571,"code":116151,"language":30573,"meta":316,"style":316},"mujoco.mj_resetData(self.model, self.data)\n",[395,116153,116154],{"__ignoreMap":316},[398,116155,116156,116159,116161,116163,116165],{"class":400,"line":401},[398,116157,116158],{"class":408},"mujoco.mj_resetData(",[398,116160,31016],{"class":457},[398,116162,114774],{"class":408},[398,116164,31016],{"class":457},[398,116166,114779],{"class":408},[19,116168,116169],{},"把 MuJoCo 状态重置到默认状态。",[389,116171,116173],{"className":30571,"code":116172,"language":30573,"meta":316,"style":316},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[395,116174,116175],{"__ignoreMap":316},[398,116176,116177,116179,116181,116183,116185,116187,116189,116191,116193,116195,116197,116199,116201,116203,116205,116207,116209],{"class":400,"line":401},[398,116178,31016],{"class":457},[398,116180,114790],{"class":408},[398,116182,454],{"class":404},[398,116184,39066],{"class":457},[398,116186,114797],{"class":408},[398,116188,113955],{"class":5493},[398,116190,113958],{"class":404},[398,116192,86403],{"class":457},[398,116194,12712],{"class":408},[398,116196,113965],{"class":5493},[398,116198,454],{"class":404},[398,116200,86403],{"class":457},[398,116202,12712],{"class":408},[398,116204,31689],{"class":5493},[398,116206,454],{"class":404},[398,116208,31016],{"class":457},[398,116210,114822],{"class":408},[19,116212,115534,116213,116216,116217,116220,116221,116223],{},[395,116214,116215],{},"[:]"," 表示修改整个数组。",[395,116218,116219],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[395,116222,102343],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[389,116225,116227],{"className":30571,"code":116226,"language":30573,"meta":316,"style":316},"self.data.qvel[:] = 0.0\n",[395,116228,116229],{"__ignoreMap":316},[398,116230,116231,116233,116235,116237],{"class":400,"line":401},[398,116232,31016],{"class":457},[398,116234,114829],{"class":408},[398,116236,454],{"class":404},[398,116238,104954],{"class":457},[19,116240,116241],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[389,116243,116245],{"className":30571,"code":116244,"language":30573,"meta":316,"style":316},"self.steps = 0\nreturn self._get_obs(), {}\n",[395,116246,116247,116257],{"__ignoreMap":316},[398,116248,116249,116251,116253,116255],{"class":400,"line":401},[398,116250,31016],{"class":457},[398,116252,113899],{"class":408},[398,116254,454],{"class":404},[398,116256,47526],{"class":457},[398,116258,116259,116261,116263],{"class":400,"line":317},[398,116260,17323],{"class":404},[398,116262,39066],{"class":457},[398,116264,114869],{"class":408},[19,116266,116267],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[389,116269,116270],{"className":30571,"code":115543,"language":30573,"meta":316,"style":316},[395,116271,116272],{"__ignoreMap":316},[398,116273,116274,116276,116278],{"class":400,"line":401},[398,116275,32140],{"class":404},[398,116277,114880],{"class":2239},[398,116279,114883],{"class":408},[19,116281,116282],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[389,116284,116286],{"className":30571,"code":116285,"language":30573,"meta":316,"style":316},"action = np.asarray(action, dtype=np.float32)\n",[395,116287,116288],{"__ignoreMap":316},[398,116289,116290,116292,116294,116296,116298,116300],{"class":400,"line":401},[398,116291,107635],{"class":408},[398,116293,454],{"class":404},[398,116295,114892],{"class":408},[398,116297,93693],{"class":5493},[398,116299,454],{"class":404},[398,116301,113989],{"class":408},[19,116303,116304,116305,28578],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[395,116306,116070],{},[389,116308,116310],{"className":30571,"code":116309,"language":30573,"meta":316,"style":316},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[395,116311,116312],{"__ignoreMap":316},[398,116313,116314,116316,116318,116320,116322,116324,116326],{"class":400,"line":401},[398,116315,107635],{"class":408},[398,116317,454],{"class":404},[398,116319,107640],{"class":408},[398,116321,31016],{"class":457},[398,116323,114911],{"class":408},[398,116325,31016],{"class":457},[398,116327,114916],{"class":408},[19,116329,116330],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[389,116332,116334],{"className":30571,"code":116333,"language":30573,"meta":316,"style":316},"self.data.ctrl[:] = action\n",[395,116335,116336],{"__ignoreMap":316},[398,116337,116338,116340,116342,116344],{"class":400,"line":401},[398,116339,31016],{"class":457},[398,116341,114927],{"class":408},[398,116343,454],{"class":404},[398,116345,107663],{"class":408},[19,116347,116348],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[389,116350,116352],{"className":30571,"code":116351,"language":30573,"meta":316,"style":316},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[395,116353,116354,116370],{"__ignoreMap":316},[398,116355,116356,116358,116360,116362,116364,116366,116368],{"class":400,"line":401},[398,116357,3301],{"class":404},[398,116359,101694],{"class":408},[398,116361,26236],{"class":404},[398,116363,32636],{"class":457},[398,116365,409],{"class":408},[398,116367,31016],{"class":457},[398,116369,114948],{"class":408},[398,116371,116372,116375,116377,116379,116381],{"class":400,"line":317},[398,116373,116374],{"class":408},"    mujoco.mj_step(",[398,116376,31016],{"class":457},[398,116378,114774],{"class":408},[398,116380,31016],{"class":457},[398,116382,114779],{"class":408},[19,116384,116385,116386,116389,116390,116392,116393,28578],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[395,116387,116388],{},"frame_skip=5","，所以外部调用一次 ",[395,116391,114070],{},"，内部实际执行 5 次 ",[395,116394,101408],{},[389,116396,116398],{"className":30571,"code":116397,"language":30573,"meta":316,"style":316},"self.steps += 1\n",[395,116399,116400],{"__ignoreMap":316},[398,116401,116402,116404,116406,116408],{"class":400,"line":401},[398,116403,31016],{"class":457},[398,116405,113899],{"class":408},[398,116407,9754],{"class":404},[398,116409,55892],{"class":457},[19,116411,116412],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[389,116414,116416],{"className":30571,"code":116415,"language":30573,"meta":316,"style":316},"obs = self._get_obs()\nreward = self._get_reward()\n",[395,116417,116418,116428],{"__ignoreMap":316},[398,116419,116420,116422,116424,116426],{"class":400,"line":401},[398,116421,111047],{"class":408},[398,116423,454],{"class":404},[398,116425,39066],{"class":457},[398,116427,114990],{"class":408},[398,116429,116430,116432,116434,116436],{"class":400,"line":317},[398,116431,111198],{"class":408},[398,116433,454],{"class":404},[398,116435,39066],{"class":457},[398,116437,115001],{"class":408},[19,116439,116440],{},"计算新的观测和奖励。",[389,116442,116444],{"className":30571,"code":116443,"language":30573,"meta":316,"style":316},"dist = float(np.linalg.norm(tip - target))\n",[395,116445,116446],{"__ignoreMap":316},[398,116447,116448,116450,116452,116454,116456,116458],{"class":400,"line":401},[398,116449,111789],{"class":408},[398,116451,454],{"class":404},[398,116453,109990],{"class":457},[398,116455,115044],{"class":408},[398,116457,934],{"class":404},[398,116459,115049],{"class":408},[19,116461,116462],{},"计算末端到目标的距离，并转换成 Python float。",[389,116464,116465],{"className":30571,"code":113870,"language":30573,"meta":316,"style":316},[395,116466,116467,116479],{"__ignoreMap":316},[398,116468,116469,116471,116473,116475,116477],{"class":400,"line":401},[398,116470,113877],{"class":408},[398,116472,454],{"class":404},[398,116474,113882],{"class":408},[398,116476,1312],{"class":404},[398,116478,113887],{"class":457},[398,116480,116481,116483,116485,116487,116489,116491,116493],{"class":400,"line":317},[398,116482,113892],{"class":408},[398,116484,454],{"class":404},[398,116486,39066],{"class":457},[398,116488,113899],{"class":408},[398,116490,1986],{"class":404},[398,116492,39066],{"class":457},[398,116494,113906],{"class":408},[19,116496,116497],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[389,116499,116501],{"className":30571,"code":116500,"language":30573,"meta":316,"style":316},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[395,116502,116503,116516],{"__ignoreMap":316},[398,116504,116505,116508,116510,116512,116514],{"class":400,"line":401},[398,116506,116507],{"class":408},"info ",[398,116509,454],{"class":404},[398,116511,4724],{"class":408},[398,116513,115095],{"class":513},[398,116515,115098],{"class":408},[398,116517,116518,116520],{"class":400,"line":317},[398,116519,17323],{"class":404},[398,116521,115105],{"class":408},[19,116523,116524,116527],{},[395,116525,116526],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[389,116529,116531],{"className":30571,"code":116530,"language":30573,"meta":316,"style":316},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[395,116532,116533,116542],{"__ignoreMap":316},[398,116534,116535,116538,116540],{"class":400,"line":401},[398,116536,116537],{"class":408},"env ",[398,116539,454],{"class":404},[398,116541,115135],{"class":408},[398,116543,116544,116546,116548,116550,116552,116554,116556],{"class":400,"line":317},[398,116545,113593],{"class":408},[398,116547,454],{"class":404},[398,116549,115145],{"class":408},[398,116551,114759],{"class":5493},[398,116553,454],{"class":404},[398,116555,593],{"class":457},[398,116557,415],{"class":408},[19,116559,116560,116561,116564],{},"创建环境并重置。",[395,116562,116563],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[389,116566,116568],{"className":30571,"code":116567,"language":30573,"meta":316,"style":316},"action = env.action_space.sample()\n",[395,116569,116570],{"__ignoreMap":316},[398,116571,116572,116574,116576],{"class":400,"line":401},[398,116573,107635],{"class":408},[398,116575,454],{"class":404},[398,116577,115214],{"class":408},[19,116579,116580],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[343,116582,102509],{"id":102508},[19,116584,105677],{},[389,116586,116589],{"className":116587,"code":116588,"language":5464,"meta":316},[5462],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[395,116590,116588],{"__ignoreMap":316},[19,116592,116593],{},"这个环境已经具备强化学习环境的基本结构。",[19,116595,116596],{},"主函数里使用随机动作：",[389,116598,116599],{"className":30571,"code":116567,"language":30573,"meta":316,"style":316},[395,116600,116601],{"__ignoreMap":316},[398,116602,116603,116605,116607],{"class":400,"line":401},[398,116604,107635],{"class":408},[398,116606,454],{"class":404},[398,116608,115214],{"class":408},[19,116610,116611],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[343,116613,102541],{"id":102540},[38,116615,116616,116619,116625,116634,116643,116652,116658],{},[41,116617,116618],{},"运行程序。",[41,116620,116621,116622,28578],{},"确认 ",[395,116623,116624],{},"obs.shape == (10,)",[41,116626,111374,116627,116630,116631,28578],{},[395,116628,116629],{},"env.action_space","，应类似 ",[395,116632,116633],{},"Box(-1.0, 1.0, (2,), float32)",[41,116635,105778,116636,116639,116640,28578],{},[395,116637,116638],{},"self.max_steps = 10","，确认环境会更快 ",[395,116641,116642],{},"truncated=True",[41,116644,102604,116645,102607,116648,116651],{},[395,116646,116647],{},"terminated = dist \u003C 0.05",[395,116649,116650],{},"dist \u003C 0.2","，观察是否更容易结束。",[41,116653,102604,116654,116657],{},[395,116655,116656],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[41,116659,116660,116661,116663,116664,116667],{},"在 ",[395,116662,116526],{}," 里加入 ",[395,116665,116666],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[343,116669,102646],{"id":102645},[14,116671,116673],{"id":116672},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,116675,116676,116677,116679],{},"Gymnasium 的 ",[395,116678,107327],{}," 返回 5 个值:",[389,116681,116683],{"className":30571,"code":116682,"language":30573,"meta":316,"style":316},"obs, reward, terminated, truncated, info\n",[395,116684,116685],{"__ignoreMap":316},[398,116686,116687],{"class":400,"line":401},[398,116688,116682],{"class":408},[19,116690,116691],{},"不是旧 Gym 的 4 个值。",[14,116693,116695,116698],{"id":116694},"datactrl-action-维度错误",[395,116696,116697],{},"data.ctrl[:] = action"," 维度错误",[19,116700,102716],{},[389,116702,116704],{"className":30571,"code":116703,"language":30573,"meta":316,"style":316},"print(self.model.nu)\nprint(action.shape)\n",[395,116705,116706,116717],{"__ignoreMap":316},[398,116707,116708,116710,116712,116714],{"class":400,"line":401},[398,116709,30608],{"class":457},[398,116711,409],{"class":408},[398,116713,31016],{"class":457},[398,116715,116716],{"class":408},".model.nu)\n",[398,116718,116719,116721],{"class":400,"line":317},[398,116720,30608],{"class":457},[398,116722,116723],{"class":408},"(action.shape)\n",[19,116725,116726],{},"两者必须匹配。",[14,116728,116730],{"id":116729},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,116732,102655],{},[389,116734,116736],{"className":30571,"code":116735,"language":30573,"meta":316,"style":316},"mujoco.mj_forward(self.model, self.data)\n",[395,116737,116738],{"__ignoreMap":316},[398,116739,116740,116743,116745,116747,116749],{"class":400,"line":401},[398,116741,116742],{"class":408},"mujoco.mj_forward(",[398,116744,31016],{"class":457},[398,116746,114774],{"class":408},[398,116748,31016],{"class":457},[398,116750,114779],{"class":408},[14,116752,116754,116756],{"id":116753},"observation_space-维度和-obs-不一致",[395,116755,113793],{}," 维度和 obs 不一致",[19,116758,102768],{},[389,116760,116762],{"className":30571,"code":116761,"language":30573,"meta":316,"style":316},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[395,116763,116764,116774,116781],{"__ignoreMap":316},[398,116765,116766,116768,116770,116772],{"class":400,"line":401},[398,116767,111047],{"class":408},[398,116769,454],{"class":404},[398,116771,39066],{"class":457},[398,116773,114990],{"class":408},[398,116775,116776,116778],{"class":400,"line":317},[398,116777,30608],{"class":457},[398,116779,116780],{"class":408},"(obs.shape)\n",[398,116782,116783,116785,116787,116789],{"class":400,"line":320},[398,116784,30608],{"class":457},[398,116786,409],{"class":408},[398,116788,31016],{"class":457},[398,116790,116791],{"class":408},".observation_space.shape)\n",[19,116793,116794],{},"两者必须一致。本章观测是：",[389,116796,116799],{"className":116797,"code":116798,"language":5464,"meta":316},[5462],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[395,116800,116798],{"__ignoreMap":316},[14,116802,116804],{"id":116803},"action-超过范围","action 超过范围",[19,116806,116807],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[389,116809,116810],{"className":30571,"code":116309,"language":30573,"meta":316,"style":316},[395,116811,116812],{"__ignoreMap":316},[398,116813,116814,116816,116818,116820,116822,116824,116826],{"class":400,"line":401},[398,116815,107635],{"class":408},[398,116817,454],{"class":404},[398,116819,107640],{"class":408},[398,116821,31016],{"class":457},[398,116823,114911],{"class":408},[398,116825,31016],{"class":457},[398,116827,114916],{"class":408},[19,116829,116830,116831,28578],{},"这能避免无效动作直接写入 ",[395,116832,101269],{},[14,116834,116836],{"id":116835},"忘记返回-info","忘记返回 info",[19,116838,116676,116839,101211,116841,116843],{},[395,116840,70249],{},[395,116842,107327],{}," 都会返回 info：",[389,116845,116846],{"className":30571,"code":113586,"language":30573,"meta":316,"style":316},[395,116847,116848,116856],{"__ignoreMap":316},[398,116849,116850,116852,116854],{"class":400,"line":401},[398,116851,113593],{"class":408},[398,116853,454],{"class":404},[398,116855,113598],{"class":408},[398,116857,116858,116860,116862],{"class":400,"line":317},[398,116859,113603],{"class":408},[398,116861,454],{"class":404},[398,116863,113608],{"class":408},[19,116865,116866,116867,28578],{},"即使暂时没有额外信息，也返回 ",[395,116868,32652],{},[343,116870,116872],{"id":116871},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,116874,116875],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[38,116877,116878,116881,116884,116887,116890,116893],{},[41,116879,116880],{},"更稳定的 reward。",[41,116882,116883],{},"合理的 episode 长度。",[41,116885,116886],{},"可重复的随机目标采样。",[41,116888,116889],{},"render 接口。",[41,116891,116892],{},"环境注册代码。",[41,116894,116895],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,116897,116898],{},"如果只是自己写训练循环，最小形式是：",[389,116900,116902],{"className":30571,"code":116901,"language":30573,"meta":316,"style":316},"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",[395,116903,116904,116912,116928,116932,116948,116957,116966,116976],{"__ignoreMap":316},[398,116905,116906,116908,116910],{"class":400,"line":401},[398,116907,116537],{"class":408},[398,116909,454],{"class":404},[398,116911,115135],{"class":408},[398,116913,116914,116916,116918,116920,116922,116924,116926],{"class":400,"line":317},[398,116915,113593],{"class":408},[398,116917,454],{"class":404},[398,116919,115145],{"class":408},[398,116921,114759],{"class":5493},[398,116923,454],{"class":404},[398,116925,593],{"class":457},[398,116927,415],{"class":408},[398,116929,116930],{"class":400,"line":320},[398,116931,2676],{"emptyLinePlaceholder":328},[398,116933,116934,116936,116938,116940,116942,116944,116946],{"class":400,"line":1470},[398,116935,3301],{"class":404},[398,116937,101694],{"class":408},[398,116939,26236],{"class":404},[398,116941,32636],{"class":457},[398,116943,409],{"class":408},[398,116945,6687],{"class":457},[398,116947,30979],{"class":408},[398,116949,116950,116953,116955],{"class":400,"line":1476},[398,116951,116952],{"class":408},"    action ",[398,116954,454],{"class":404},[398,116956,115214],{"class":408},[398,116958,116959,116962,116964],{"class":400,"line":1490},[398,116960,116961],{"class":408},"    obs, reward, terminated, truncated, info ",[398,116963,454],{"class":404},[398,116965,113608],{"class":408},[398,116967,116968,116970,116972,116974],{"class":400,"line":1496},[398,116969,3377],{"class":404},[398,116971,115280],{"class":408},[398,116973,115283],{"class":404},[398,116975,115286],{"class":408},[398,116977,116978,116981,116983],{"class":400,"line":1587},[398,116979,116980],{"class":408},"        obs, info ",[398,116982,454],{"class":404},[398,116984,113598],{"class":408},[343,116986,116988],{"id":116987},"_9本章小结","9.本章小结",[19,116990,116991],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[389,116993,116996],{"className":116994,"code":116995,"language":5464,"meta":316},[5462],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[395,116997,116995],{"__ignoreMap":316},[19,116999,117000],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[5403,117002,117003],{},"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":316,"searchDepth":317,"depth":317,"links":117005},[117006,117007,117008,117015,117019,117020,117021,117031,117032],{"id":100839,"depth":317,"text":100840},{"id":100962,"depth":317,"text":100963},{"id":101237,"depth":317,"text":101238,"children":117009},[117010,117012,117014],{"id":113817,"depth":320,"text":117011},"terminated 和 truncated 的区别",{"id":113920,"depth":320,"text":117013},"observation_space 和 action_space",{"id":114047,"depth":320,"text":114048},{"id":101445,"depth":317,"text":101446,"children":117016},[117017,117018],{"id":101765,"depth":320,"text":101765},{"id":101901,"depth":320,"text":101901},{"id":102508,"depth":317,"text":102509},{"id":102540,"depth":317,"text":102541},{"id":102645,"depth":317,"text":102646,"children":117022},[117023,117024,117026,117027,117029,117030],{"id":116672,"depth":320,"text":116673},{"id":116694,"depth":320,"text":117025},"data.ctrl[:] = action 维度错误",{"id":116729,"depth":320,"text":116730},{"id":116753,"depth":320,"text":117028},"observation_space 维度和 obs 不一致",{"id":116803,"depth":320,"text":116804},{"id":116835,"depth":320,"text":116836},{"id":116871,"depth":317,"text":116872},{"id":116987,"depth":317,"text":116988},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113570,"description":316},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":117039,"title":117040,"body":117041,"description":117464,"extension":326,"meta":117465,"navigation":328,"path":117466,"seo":117467,"stem":117468,"__hash__":117469},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":117042,"toc":117454},[117043,117047,117050,117053,117073,117079,117085,117095,117098,117101,117121,117124,117128,117131,117137,117140,117154,117157,117160,117234,117237,117243,117246,117269,117272,117322,117325,117331,117334,117337,117340,117359,117362,117368,117371,117374,117377,117397,117400,117403,117406,117451],[10,117044,117046],{"id":117045},"mujoco-学习","MuJoCo 学习",[19,117048,117049],{},"初版",[19,117051,117052],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[38,117054,117055,117058,117061,117070],{},[41,117056,117057],{},"MuJoCo 模型文件在描述什么。",[41,117059,117060],{},"Python 代码怎样读取和推进仿真。",[41,117062,117063,614,117065,614,117067,117069],{},[395,117064,104223],{},[395,117066,104553],{},[395,117068,104556],{}," 这些数组为什么重要。",[41,117071,117072],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,117074,117075,117076,117078],{},"默认环境为 Fedora 44、Python >= 3.10、",[395,117077,101220],{}," 官方 Python bindings。",[19,117080,117081,117082,117084],{},"注意：本文禁止使用 ",[395,117083,101205],{},"。所有示例均使用：",[389,117086,117087],{"className":30571,"code":101771,"language":30573,"meta":316,"style":316},[395,117088,117089],{"__ignoreMap":316},[398,117090,117091,117093],{"class":400,"line":401},[398,117092,30585],{"class":404},[398,117094,101494],{"class":408},[343,117096,117097],{"id":117097},"适合谁阅读",[19,117099,117100],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[38,117102,117103,117106,117109,117112],{},[41,117104,117105],{},"没学过 MuJoCo，只会一点 Python。",[41,117107,117108],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[41,117110,117111],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[41,117113,117114,117115,117117,117118,117120],{},"以前接触过 ",[395,117116,101205],{},"，现在想迁移到官方 ",[395,117119,101214],{}," Python bindings。",[19,117122,117123],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[343,117125,117127],{"id":117126},"mujoco-到底是什么","MuJoCo 到底是什么",[19,117129,117130],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[389,117132,117135],{"className":117133,"code":117134,"language":5464,"meta":316},[5462],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[395,117136,117134],{"__ignoreMap":316},[19,117138,117139],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[38,117141,117142,117145,117148,117151],{},[41,117143,117144],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[41,117146,117147],{},"快速测试控制算法，不必一开始就上真实机器人。",[41,117149,117150],{},"生成强化学习环境。",[41,117152,117153],{},"采集状态、动作、图像、奖励等训练数据。",[343,117155,117156],{"id":117156},"学习前的心智模型",[19,117158,117159],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[84,117161,117162,117174],{},[87,117163,117164],{},[90,117165,117166,117169,117172],{},[93,117167,117168],{"align":95},"部分",[93,117170,117171],{"align":95},"负责什么",[93,117173,21464],{"align":95},[101,117175,117176,117187,117199,117211,117223],{},[90,117177,117178,117181,117184],{},[106,117179,117180],{"align":95},"MJCF XML",[106,117182,117183],{"align":95},"定义世界和机器人结构",[106,117185,117186],{"align":95},"地面、盒子、关节、电机、摄像头",[90,117188,117189,117193,117196],{},[106,117190,117191],{"align":95},[395,117192,100902],{},[106,117194,117195],{"align":95},"编译后的静态模型",[106,117197,117198],{"align":95},"有几个关节、有几个电机、时间步长是多少",[90,117200,117201,117205,117208],{},[106,117202,117203],{"align":95},[395,117204,100912],{},[106,117206,117207],{"align":95},"运行中的动态状态",[106,117209,117210],{"align":95},"当前时间、位置、速度、电机输入",[90,117212,117213,117217,117220],{},[106,117214,117215],{"align":95},[395,117216,101408],{},[106,117218,117219],{"align":95},"推进一步物理仿真",[106,117221,117222],{"align":95},"根据重力、力、碰撞更新状态",[90,117224,117225,117228,117231],{},[106,117226,117227],{"align":95},"Viewer \u002F Renderer",[106,117229,117230],{"align":95},"把仿真显示出来",[106,117232,117233],{"align":95},"打开窗口或保存图片",[19,117235,117236],{},"一句话总结：",[389,117238,117241],{"className":117239,"code":117240,"language":5464,"meta":316},[5462],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[395,117242,117240],{"__ignoreMap":316},[19,117244,117245],{},"参考来源：",[67,117247,117248,117255,117262],{},[41,117249,117250,117251],{},"MuJoCo Python 官方文档：",[640,117252,117253],{"href":117253,"rel":117254},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[24142],[41,117256,117257,117258],{},"MuJoCo XML Reference：",[640,117259,117260],{"href":117260,"rel":117261},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[24142],[41,117263,117264,117265],{},"MuJoCo Overview：",[640,117266,117267],{"href":117267,"rel":117268},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[24142],[343,117270,117271],{"id":117271},"章节目录",[38,117273,117274,117280,117286,117292,117298,117304,117310,117316],{},[41,117275,117276],{},[640,117277,117279],{"href":117278},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[41,117281,117282],{},[640,117283,117285],{"href":117284},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[41,117287,117288],{},[640,117289,117291],{"href":117290},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[41,117293,117294],{},[640,117295,117297],{"href":117296},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[41,117299,117300],{},[640,117301,117303],{"href":117302},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[41,117305,117306],{},[640,117307,117309],{"href":117308},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[41,117311,117312],{},[640,117313,117315],{"href":117314},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[41,117317,117318],{},[640,117319,117321],{"href":117320},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[343,117323,117324],{"id":117324},"推荐学习路线",[389,117326,117329],{"className":117327,"code":117328,"language":5464,"meta":316},[5462],"环境安装\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",[395,117330,117328],{"__ignoreMap":316},[19,117332,117333],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[343,117335,117336],{"id":117336},"建议的目录结构",[19,117338,117339],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[389,117341,117343],{"className":24099,"code":117342,"language":24101,"meta":316,"style":316},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[395,117344,117345,117353],{"__ignoreMap":316},[398,117346,117347,117349,117351],{"class":400,"line":401},[398,117348,101459],{"class":2239},[398,117350,29409],{"class":457},[398,117352,101464],{"class":513},[398,117354,117355,117357],{"class":400,"line":317},[398,117356,101469],{"class":457},[398,117358,101464],{"class":513},[19,117360,117361],{},"每一章的代码都单独保存：",[389,117363,117366],{"className":117364,"code":117365,"language":5464,"meta":316},[5462],"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",[395,117367,117365],{"__ignoreMap":316},[19,117369,117370],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[343,117372,117373],{"id":117373},"学习方法",[19,117375,117376],{},"每章建议按这个顺序操作：",[38,117378,117379,117382,117385,117388,117391,117394],{},[41,117380,117381],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[41,117383,117384],{},"复制最小可运行代码，保存成指定文件。",[41,117386,117387],{},"运行代码，确认没有报错。",[41,117389,117390],{},"对照“运行结果说明”理解输出。",[41,117392,117393],{},"做“验证步骤”，主动改一两个参数。",[41,117395,117396],{},"遇到报错先看“常见错误与解决方案”。",[19,117398,117399],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[343,117401,117402],{"id":117402},"全局排错顺序",[19,117404,117405],{},"遇到问题时，按下面顺序查：",[38,117407,117408,117414,117420,117425,117428,117431,117438,117448],{},[41,117409,117410,117411],{},"Python 环境是否激活：",[395,117412,117413],{},"which python",[41,117415,117416,117417],{},"MuJoCo 是否能导入：",[395,117418,117419],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[41,117421,117422,117423],{},"是否误装了 ",[395,117424,101205],{},[41,117426,117427],{},"XML 标签是否闭合、属性是否拼写正确",[41,117429,117430],{},"actuator 引用的 joint 名字是否存在",[41,117432,117433,117435,117436],{},[395,117434,101269],{}," 的长度是否等于 ",[395,117437,102351],{},[41,117439,105778,117440,82732,117442,117444,117445],{},[395,117441,104223],{},[395,117443,104553],{}," 后是否调用了 ",[395,117446,117447],{},"mujoco.mj_forward",[41,117449,117450],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[5403,117452,117453],{},"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":316,"searchDepth":317,"depth":317,"links":117455},[117456,117457,117458,117459,117460,117461,117462,117463],{"id":117097,"depth":317,"text":117097},{"id":117126,"depth":317,"text":117127},{"id":117156,"depth":317,"text":117156},{"id":117271,"depth":317,"text":117271},{"id":117324,"depth":317,"text":117324},{"id":117336,"depth":317,"text":117336},{"id":117373,"depth":317,"text":117373},{"id":117402,"depth":317,"text":117402},"仿真搭建。",{"category":23656},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":117040,"description":117464},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117471,"title":117472,"body":117473,"description":23654,"extension":326,"meta":117928,"navigation":328,"path":117929,"seo":117930,"stem":117931,"__hash__":117932},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117474,"toc":117926},[117475,117478,117481,117487,117923],[10,117476,117472],{"id":117477},"_1-最常用的基本操作更新",[19,117479,117480],{},"装linux系统教程：",[19,117482,117483],{},[640,117484,117485],{"href":117485,"rel":117486},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[24142],[389,117488,117492],{"className":117489,"code":117490,"language":117491,"meta":316,"style":316},"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",[395,117493,117494,117499,117504,117513,117518,117527,117532,117552,117557,117568,117573,117582,117587,117615,117620,117639,117644,117663,117667,117672,117688,117692,117697,117727,117731,117736,117752,117756,117761,117776,117780,117785,117801,117805,117810,117822,117834,117838,117843,117860,117864,117869,117887,117891,117896,117905,117909,117914],{"__ignoreMap":316},[398,117495,117496],{"class":400,"line":401},[398,117497,117498],{"class":467},"#更新相关的知识\n",[398,117500,117501],{"class":400,"line":317},[398,117502,117503],{"class":467},"# 更新软件包列表（从服务器获取最新软件信息）\n",[398,117505,117506,117508,117511],{"class":400,"line":320},[398,117507,24854],{"class":2239},[398,117509,117510],{"class":513}," apt",[398,117512,26435],{"class":513},[398,117514,117515],{"class":400,"line":1470},[398,117516,117517],{"class":467},"# 升级所有可更新的软件包（不删除旧包）\n",[398,117519,117520,117522,117524],{"class":400,"line":1476},[398,117521,24854],{"class":2239},[398,117523,117510],{"class":513},[398,117525,117526],{"class":513}," upgrade\n",[398,117528,117529],{"class":400,"line":1490},[398,117530,117531],{"class":467},"#更新和升级软件包\n",[398,117533,117534,117536,117538,117541,117543,117545,117547,117550],{"class":400,"line":1496},[398,117535,24854],{"class":2239},[398,117537,117510],{"class":513},[398,117539,117540],{"class":513}," update",[398,117542,26383],{"class":408},[398,117544,24854],{"class":2239},[398,117546,117510],{"class":513},[398,117548,117549],{"class":513}," upgrade",[398,117551,101174],{"class":457},[398,117553,117554],{"class":400,"line":1587},[398,117555,117556],{"class":467},"#列出可更新的软件包及版本信息\n",[398,117558,117559,117562,117565],{"class":400,"line":1593},[398,117560,117561],{"class":2239},"apt",[398,117563,117564],{"class":513}," list",[398,117566,117567],{"class":457}," --upgradable\n",[398,117569,117570],{"class":400,"line":1605},[398,117571,117572],{"class":467},"#彻底升级（处理依赖关系，可能删除旧包）\n",[398,117574,117575,117577,117579],{"class":400,"line":1888},[398,117576,24854],{"class":2239},[398,117578,117510],{"class":513},[398,117580,117581],{"class":513}," full-upgrade\n",[398,117583,117584],{"class":400,"line":1893},[398,117585,117586],{"class":467},"#设置指定版本\n",[398,117588,117589,117591,117593,117595,117597,117600,117602,117604,117606,117608,117611,117613],{"class":400,"line":1899},[398,117590,24854],{"class":2239},[398,117592,117510],{"class":513},[398,117594,24111],{"class":513},[398,117596,29095],{"class":404},[398,117598,117599],{"class":513},"package_nam",[398,117601,483],{"class":408},[398,117603,1362],{"class":404},[398,117605,454],{"class":513},[398,117607,1312],{"class":404},[398,117609,117610],{"class":513},"version_numbe",[398,117612,1072],{"class":408},[398,117614,51500],{"class":404},[398,117616,117617],{"class":400,"line":1904},[398,117618,117619],{"class":467},"#只安装软件包不升级\n",[398,117621,117622,117624,117626,117628,117630,117632,117634,117636],{"class":400,"line":1918},[398,117623,24854],{"class":2239},[398,117625,117510],{"class":513},[398,117627,24111],{"class":513},[398,117629,29095],{"class":404},[398,117631,117599],{"class":513},[398,117633,483],{"class":408},[398,117635,1362],{"class":404},[398,117637,117638],{"class":457}," --no-upgrade\n",[398,117640,117641],{"class":400,"line":1923},[398,117642,117643],{"class":467},"#只升级，不存在就不安装\n",[398,117645,117646,117648,117650,117652,117654,117656,117658,117660],{"class":400,"line":1929},[398,117647,24854],{"class":2239},[398,117649,117510],{"class":513},[398,117651,24111],{"class":513},[398,117653,29095],{"class":404},[398,117655,117599],{"class":513},[398,117657,483],{"class":408},[398,117659,1362],{"class":404},[398,117661,117662],{"class":457}," --only-upgrade\n",[398,117664,117665],{"class":400,"line":1950},[398,117666,2676],{"emptyLinePlaceholder":328},[398,117668,117669],{"class":400,"line":1955},[398,117670,117671],{"class":467},"#安装指定的软件命令\n",[398,117673,117674,117676,117678,117680,117682,117684,117686],{"class":400,"line":1969},[398,117675,24854],{"class":2239},[398,117677,117510],{"class":513},[398,117679,24111],{"class":513},[398,117681,29095],{"class":404},[398,117683,117599],{"class":513},[398,117685,483],{"class":408},[398,117687,51500],{"class":404},[398,117689,117690],{"class":400,"line":1974},[398,117691,2676],{"emptyLinePlaceholder":328},[398,117693,117694],{"class":400,"line":2003},[398,117695,117696],{"class":467},"#安装多个软件包\n",[398,117698,117699,117701,117703,117705,117707,117710,117713,117715,117717,117720,117722,117724],{"class":400,"line":2008},[398,117700,24854],{"class":2239},[398,117702,117510],{"class":513},[398,117704,24111],{"class":513},[398,117706,29095],{"class":404},[398,117708,117709],{"class":513},"package_",[398,117711,117712],{"class":404},"1>",[398,117714,29095],{"class":404},[398,117716,117709],{"class":513},[398,117718,117719],{"class":404},"2>",[398,117721,29095],{"class":404},[398,117723,117709],{"class":513},[398,117725,117726],{"class":404},"3>\n",[398,117728,117729],{"class":400,"line":2025},[398,117730,2676],{"emptyLinePlaceholder":328},[398,117732,117733],{"class":400,"line":2030},[398,117734,117735],{"class":467},"#更新指定的软件命令\n",[398,117737,117738,117740,117742,117744,117746,117748,117750],{"class":400,"line":2035},[398,117739,24854],{"class":2239},[398,117741,117510],{"class":513},[398,117743,117540],{"class":513},[398,117745,29095],{"class":404},[398,117747,117599],{"class":513},[398,117749,483],{"class":408},[398,117751,51500],{"class":404},[398,117753,117754],{"class":400,"line":2040},[398,117755,2676],{"emptyLinePlaceholder":328},[398,117757,117758],{"class":400,"line":2054},[398,117759,117760],{"class":467},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[398,117762,117763,117765,117768,117770,117772,117774],{"class":400,"line":2059},[398,117764,117561],{"class":2239},[398,117766,117767],{"class":513}," show",[398,117769,29095],{"class":404},[398,117771,117599],{"class":513},[398,117773,483],{"class":408},[398,117775,51500],{"class":404},[398,117777,117778],{"class":400,"line":2853},[398,117779,2676],{"emptyLinePlaceholder":328},[398,117781,117782],{"class":400,"line":2867},[398,117783,117784],{"class":467},"#删除软件包命令\n",[398,117786,117787,117789,117791,117793,117795,117797,117799],{"class":400,"line":2875},[398,117788,24854],{"class":2239},[398,117790,117510],{"class":513},[398,117792,26272],{"class":513},[398,117794,29095],{"class":404},[398,117796,117599],{"class":513},[398,117798,483],{"class":408},[398,117800,51500],{"class":404},[398,117802,117803],{"class":400,"line":2880},[398,117804,2676],{"emptyLinePlaceholder":328},[398,117806,117807],{"class":400,"line":2886},[398,117808,117809],{"class":467},"# 清理旧版本和缓存（释放磁盘空间）\n",[398,117811,117812,117814,117816,117819],{"class":400,"line":2892},[398,117813,24854],{"class":2239},[398,117815,117510],{"class":513},[398,117817,117818],{"class":513}," autoremove",[398,117820,117821],{"class":467},"  # 删除不再需要的依赖和库文件\n",[398,117823,117824,117826,117828,117831],{"class":400,"line":2897},[398,117825,24854],{"class":2239},[398,117827,117510],{"class":513},[398,117829,117830],{"class":513}," clean",[398,117832,117833],{"class":467},"       # 清理下载的缓存包\n",[398,117835,117836],{"class":400,"line":8225},[398,117837,2676],{"emptyLinePlaceholder":328},[398,117839,117840],{"class":400,"line":8249},[398,117841,117842],{"class":467},"#移除软件包及配置文件\n",[398,117844,117845,117847,117849,117852,117854,117856,117858],{"class":400,"line":8254},[398,117846,24854],{"class":2239},[398,117848,117510],{"class":513},[398,117850,117851],{"class":513}," purge",[398,117853,29095],{"class":404},[398,117855,117599],{"class":513},[398,117857,483],{"class":408},[398,117859,51500],{"class":404},[398,117861,117862],{"class":400,"line":8260},[398,117863,2676],{"emptyLinePlaceholder":328},[398,117865,117866],{"class":400,"line":8287},[398,117867,117868],{"class":467},"#查找软件包命令\n",[398,117870,117871,117873,117875,117878,117880,117883,117885],{"class":400,"line":8292},[398,117872,24854],{"class":2239},[398,117874,117510],{"class":513},[398,117876,117877],{"class":513}," search",[398,117879,29095],{"class":404},[398,117881,117882],{"class":513},"keywor",[398,117884,716],{"class":408},[398,117886,51500],{"class":404},[398,117888,117889],{"class":400,"line":8298},[398,117890,2676],{"emptyLinePlaceholder":328},[398,117892,117893],{"class":400,"line":8310},[398,117894,117895],{"class":467},"#列出所有已安装的包\n",[398,117897,117898,117900,117902],{"class":400,"line":8322},[398,117899,117561],{"class":2239},[398,117901,117564],{"class":513},[398,117903,117904],{"class":457}," --installed\n",[398,117906,117907],{"class":400,"line":8334},[398,117908,2676],{"emptyLinePlaceholder":328},[398,117910,117911],{"class":400,"line":9993},[398,117912,117913],{"class":467},"#列出所有已安装的包的版本信息\n",[398,117915,117916,117918,117920],{"class":400,"line":10018},[398,117917,117561],{"class":2239},[398,117919,117564],{"class":513},[398,117921,117922],{"class":457}," --all-versions\n",[5403,117924,117925],{},"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":316,"searchDepth":317,"depth":317,"links":117927},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117472,"description":23654},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117934,"title":117935,"body":117936,"description":23654,"extension":326,"meta":118677,"navigation":328,"path":118678,"seo":118679,"stem":118680,"__hash__":118681},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117937,"toc":118664},[117938,117941,117945,117948,117954,117958,117962,117968,117973,117978,117983,117988,117993,117996,117999,118002,118005,118009,118012,118017,118020,118025,118028,118033,118040,118043,118046,118049,118052,118055,118066,118070,118074,118079,118084,118088,118093,118097,118102,118106,118110,118115,118118,118163,118168,118172,118176,118181,118187,118192,118202,118207,118217,118222,118227,118254,118258,118261,118266,118269,118294,118298,118303,118306,118311,118316,118336,118341,118344,118359,118363,118416,118419,118424,118428,118431,118446,118449,118452,118457,118461,118465,118468,118472,118476,118479,118484,118489,118493,118500,118508,118511,118518,118523,118528,118531,118536,118543,118548,118555,118559,118561,118566,118570,118573,118576,118581,118584,118589,118592,118597,118602,118607,118611,118616,118620,118661],[10,117939,117935],{"id":117940},"_2-linux装机教程",[343,117942,117944],{"id":117943},"_21-实体机","2.1 实体机",[19,117946,117947],{},"使用清华源：（Ubuntu24.04）",[19,117949,117950],{},[640,117951,117952],{"href":117952,"rel":117953},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[24142],[343,117955,117957],{"id":117956},"_22-普通虚拟机","2.2 普通虚拟机",[14,117959,117961],{"id":117960},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,117963,117964],{},[640,117965,117966],{"href":117966,"rel":117967},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[24142],[19,117969,117970],{},[1738,117971],{"alt":316,"src":117972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,117974,117975],{},[1738,117976],{"alt":316,"src":117977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,117979,117980],{},[1738,117981],{"alt":316,"src":117982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,117984,117985],{},[1738,117986],{"alt":316,"src":117987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,117989,117990],{},[1738,117991],{"alt":316,"src":117992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,117994,117995],{},"内存4G（4096MB）；",[19,117997,117998],{},"CPU给4个核；",[19,118000,118001],{},"硬盘动态分配60G；",[19,118003,118004],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[14,118006,118008],{"id":118007},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,118010,118011],{},"按照1.1的步骤下载Ubuntu",[19,118013,118014],{},[1738,118015],{"alt":316,"src":118016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,118018,118019],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,118021,118022],{},[1738,118023],{"alt":316,"src":118024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,118026,118027],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,118029,118030],{},[1738,118031],{"alt":316,"src":118032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,118034,118035,118036,118039],{},"选择“正常安装”(找不到都用Alt+F7)， ",[23,118037,118038],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,118041,118042],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,118044,118045],{},"将改动写入磁盘吗 继续",[19,118047,118048],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,118050,118051],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,118053,118054],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,118056,118057,118058,118061,118062,118065],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[23,118059,118060],{},"除了"," 选不发送系统信息与不升级之外， ",[23,118063,118064],{},"其它"," 都跳过或前进）",[14,118067,118069],{"id":118068},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22275,118071,118073],{"id":118072},"_2231-全屏","2.2.3.1 全屏",[19,118075,118076],{},[1738,118077],{"alt":316,"src":118078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,118080,118081],{},[1738,118082],{"alt":316,"src":118083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22275,118085,118087],{"id":118086},"_2232-文件交换","2.2.3.2 文件交换",[19,118089,118090],{},[1738,118091],{"alt":316,"src":118092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22275,118094,118096],{"id":118095},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,118098,118099],{},[1738,118100],{"alt":316,"src":118101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[343,118103,118105],{"id":118104},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[14,118107,118109],{"id":118108},"_231-简介与优缺点","2.3.1 简介与优缺点",[38,118111,118112],{},[41,118113,118114],{},"什么情况下推荐？",[19,118116,118117],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[38,118119,118120],{"start":317},[41,118121,118122,118123],{},"优缺点：",[38,118124,118125,118155],{},[41,118126,118127,118128],{},"优点：",[38,118129,118130,118133,118140,118143,118146,118149,118152],{},[41,118131,118132],{},"WSL2是最好的Linux发行版;(bushi)",[41,118134,118135,118136,118139],{},"性能损耗极低。且比在Windows上跑深度性能 ",[23,118137,118138],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[41,118141,118142],{},"非常方便调用USB设备，可以USB直通;",[41,118144,118145],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[41,118147,118148],{},"非常方便Win与WSL2互相传文件等协同操作;",[41,118150,118151],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[41,118153,118154],{},"非常方便使用Windows的VScode远程开发;",[41,118156,118157,118158],{},"缺点：",[38,118159,118160],{},[41,118161,118162],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,118164,118165],{},[1738,118166],{"alt":316,"src":118167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[14,118169,118171],{"id":118170},"_232-安装教程","2.3.2 安装教程",[22275,118173,118175],{"id":118174},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[38,118177,118178],{},[41,118179,118180],{},"方法一(图形界面)",[19,118182,118183,118184,24896],{},"用Win+R输入",[395,118185,118186],{},"appwiz.cpl",[19,118188,118189],{},[1738,118190],{"alt":316,"src":118191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,118193,118194,118195,118198,118199,26666],{},"点击OK进入 ",[23,118196,118197],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[23,118200,118201],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,118203,118204],{},[1738,118205],{"alt":316,"src":118206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,118208,118209,118210,101211,118213,118216],{},"选择 ",[23,118211,118212],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[23,118214,118215],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,118218,118219],{},[1738,118220],{"alt":316,"src":118221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[38,118223,118224],{"start":317},[41,118225,118226],{},"方法二(命令行)",[389,118228,118232],{"className":118229,"code":118230,"language":118231,"meta":316,"style":316},"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",[395,118233,118234,118239,118244,118249],{"__ignoreMap":316},[398,118235,118236],{"class":400,"line":401},[398,118237,118238],{},"# 开启 Linux 子系统\n",[398,118240,118241],{"class":400,"line":317},[398,118242,118243],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[398,118245,118246],{"class":400,"line":320},[398,118247,118248],{},"# 开启虚拟机平台\n",[398,118250,118251],{"class":400,"line":1470},[398,118252,118253],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22275,118255,118257],{"id":118256},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,118259,118260],{},"用管理员权限打开powershell",[19,118262,118263],{},[1738,118264],{"alt":316,"src":118265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,118267,118268],{},"升级WSL并设置默认版本为WSL2",[389,118270,118272],{"className":118229,"code":118271,"language":118231,"meta":316,"style":316},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[395,118273,118274,118279,118284,118289],{"__ignoreMap":316},[398,118275,118276],{"class":400,"line":401},[398,118277,118278],{},"# 更新 wsl\n",[398,118280,118281],{"class":400,"line":317},[398,118282,118283],{},"wsl --update\n",[398,118285,118286],{"class":400,"line":320},[398,118287,118288],{},"# 将 wsl 版本设置为 wsl2\n",[398,118290,118291],{"class":400,"line":1470},[398,118292,118293],{},"wsl --set-default-version 2\n",[22275,118295,118297],{"id":118296},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[38,118299,118300],{},[41,118301,118302],{},"方式一(商店下载)",[19,118304,118305],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,118307,118308],{},[1738,118309],{"alt":316,"src":118310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[38,118312,118313],{"start":317},[41,118314,118315],{},"方式二(命令行安装)",[389,118317,118319],{"className":118229,"code":118318,"language":118231,"meta":316,"style":316},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[395,118320,118321,118326,118331],{"__ignoreMap":316},[398,118322,118323],{"class":400,"line":401},[398,118324,118325],{},"# 列出可安装的 Linux 版本\n",[398,118327,118328],{"class":400,"line":317},[398,118329,118330],{},"#（需要科学手段）\n",[398,118332,118333],{"class":400,"line":320},[398,118334,118335],{},"wsl --list --online\n",[19,118337,118338],{},[1738,118339],{"alt":316,"src":118340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,118342,118343],{},"选择对应发行版并安装",[389,118345,118347],{"className":118229,"code":118346,"language":118231,"meta":316,"style":316},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[395,118348,118349,118354],{"__ignoreMap":316},[398,118350,118351],{"class":400,"line":401},[398,118352,118353],{},"# Ubuntu安装完毕后需要重启系统\n",[398,118355,118356],{"class":400,"line":317},[398,118357,118358],{},"wsl --install -d Ubuntu-24.04\n",[22275,118360,118362],{"id":118361},"_2324-查看系统状态","2.3.2.4 查看系统状态",[389,118364,118366],{"className":118229,"code":118365,"language":118231,"meta":316,"style":316},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[395,118367,118368,118373,118378,118383,118388,118392,118396,118401,118406,118411],{"__ignoreMap":316},[398,118369,118370],{"class":400,"line":401},[398,118371,118372],{},"# 查看 wsl\n",[398,118374,118375],{"class":400,"line":317},[398,118376,118377],{},"wsl -l\n",[398,118379,118380],{"class":400,"line":320},[398,118381,118382],{},"# 查看 wsl 运行版本或模式\n",[398,118384,118385],{"class":400,"line":1470},[398,118386,118387],{},"wsl -l -v\n",[398,118389,118390],{"class":400,"line":1476},[398,118391,2676],{"emptyLinePlaceholder":328},[398,118393,118394],{"class":400,"line":1490},[398,118395,2676],{"emptyLinePlaceholder":328},[398,118397,118398],{"class":400,"line":1496},[398,118399,118400],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[398,118402,118403],{"class":400,"line":1587},[398,118404,118405],{},"wsl --set-version \u003Cdistro> 2\n",[398,118407,118408],{"class":400,"line":1593},[398,118409,118410],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[398,118412,118413],{"class":400,"line":1605},[398,118414,118415],{},"wsl --unregister \u003Cdistro>\n",[19,118417,118418],{},"输出Version为2即正常",[19,118420,118421],{},[1738,118422],{"alt":316,"src":118423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22275,118425,118427],{"id":118426},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,118429,118430],{},"直接在Powershell里输入wsl命令进入子系统",[389,118432,118434],{"className":118229,"code":118433,"language":118231,"meta":316,"style":316},"# 进入子系统\nwsl\n",[395,118435,118436,118441],{"__ignoreMap":316},[398,118437,118438],{"class":400,"line":401},[398,118439,118440],{},"# 进入子系统\n",[398,118442,118443],{"class":400,"line":317},[398,118444,118445],{},"wsl\n",[19,118447,118448],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,118450,118451],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,118453,118454],{},[1738,118455],{"alt":316,"src":118456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[14,118458,118460],{"id":118459},"_233-配置各种环境","2.3.3 配置各种环境",[22275,118462,118464],{"id":118463},"_2331-换源","2.3.3.1 换源",[19,118466,118467],{},"(同实体机LINUX，往下找教程)",[22275,118469,118471],{"id":118470},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23187,118473,118475],{"id":118474},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,118477,118478],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,118480,118481],{},[1738,118482],{"alt":316,"src":118483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,118485,118486],{},[1738,118487],{"alt":316,"src":118488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23187,118490,118492],{"id":118491},"_23322-cuda","2.3.3.2.2 CUDA",[19,118494,118495,118496],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[640,118497,118498],{"href":118498,"rel":118499},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[24142],[19,118501,118502,118505],{},[1738,118503],{"alt":316,"src":118504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[1738,118506],{"alt":316,"src":118507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,118509,118510],{},"在下方的网站，选择合适的版本。",[19,118512,118513,118514],{},"WSL2 专属 CUDA 指南：",[640,118515,118516],{"href":118516,"rel":118517},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[24142],[19,118519,118520],{},[23,118521,118522],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,118524,118525],{},[1738,118526],{"alt":316,"src":118527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,118529,118530],{},"挨行敲一遍",[19,118532,118533],{},[1738,118534],{"alt":316,"src":118535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,118537,118538,118539,118542],{},"敲完后，输入",[395,118540,118541],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,118544,118545],{},[1738,118546],{"alt":316,"src":118547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,118549,118550,118551,118554],{},"（请详看下方教程的",[23,118552,118553],{},"安装CUDA的配置环境来看","如何配置环境）",[23187,118556,118558],{"id":118557},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,118560,118467],{},[19,118562,118563],{},[1738,118564],{"alt":316,"src":118565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22275,118567,118569],{"id":118568},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,118571,118572],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,118574,118575],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,118577,118578],{},[1738,118579],{"alt":316,"src":118580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,118582,118583],{},"连接WSL2",[19,118585,118586],{},[1738,118587],{"alt":316,"src":118588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,118590,118591],{},"远程开发成功。",[19,118593,118594],{},[1738,118595],{"alt":316,"src":118596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,118598,118599],{},[1738,118600],{"alt":316,"src":118601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,118603,118604],{},[1738,118605],{"alt":316,"src":118606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22275,118608,118610],{"id":118609},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,118612,118613],{},[1738,118614],{"alt":316,"src":118615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22275,118617,118619],{"id":118618},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[389,118621,118623],{"className":117489,"code":118622,"language":117491,"meta":316,"style":316},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[395,118624,118625,118633,118641,118652,118656],{"__ignoreMap":316},[398,118626,118627,118629,118631],{"class":400,"line":401},[398,118628,24854],{"class":2239},[398,118630,117510],{"class":513},[398,118632,26435],{"class":513},[398,118634,118635,118637,118639],{"class":400,"line":317},[398,118636,24854],{"class":2239},[398,118638,117510],{"class":513},[398,118640,117526],{"class":513},[398,118642,118643,118645,118647,118649],{"class":400,"line":320},[398,118644,24854],{"class":2239},[398,118646,117510],{"class":513},[398,118648,24111],{"class":513},[398,118650,118651],{"class":513}," mesa-utils\n",[398,118653,118654],{"class":400,"line":1470},[398,118655,2676],{"emptyLinePlaceholder":328},[398,118657,118658],{"class":400,"line":1476},[398,118659,118660],{"class":467},"#然后重启wsl2即可\n",[5403,118662,118663],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":316,"searchDepth":317,"depth":317,"links":118665},[118666,118667,118672],{"id":117943,"depth":317,"text":117944},{"id":117956,"depth":317,"text":117957,"children":118668},[118669,118670,118671],{"id":117960,"depth":320,"text":117961},{"id":118007,"depth":320,"text":118008},{"id":118068,"depth":320,"text":118069},{"id":118104,"depth":317,"text":118105,"children":118673},[118674,118675,118676],{"id":118108,"depth":320,"text":118109},{"id":118170,"depth":320,"text":118171},{"id":118459,"depth":320,"text":118460},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117935,"description":23654},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118683,"title":118684,"body":118685,"description":23654,"extension":326,"meta":121621,"navigation":328,"path":121622,"seo":121623,"stem":121624,"__hash__":121625},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118686,"toc":121593},[118687,118690,118694,118700,118704,118710,118714,118902,118905,118910,118914,118918,118921,118924,118930,118935,118938,118941,118946,118979,118984,118988,119065,119068,119073,119077,119080,119119,119122,119131,119149,119154,119161,119278,119283,119286,119313,119318,119322,119331,119381,119388,119392,119395,119409,119416,119450,119455,119459,119482,119485,119490,119494,119497,119500,119503,119545,119549,119552,119555,119596,119600,119604,119607,119612,119617,119620,119643,119646,119654,119659,119662,119667,119672,119675,119680,119684,119689,119712,119717,119779,119787,119792,119797,119800,119805,119808,119813,119818,119836,119841,119847,119852,119866,119870,119873,119876,119879,119922,119925,119930,120031,120034,120039,120043,120047,120084,120088,120092,120096,120142,120146,120191,120195,120202,120210,120265,120268,120345,120348,120371,120375,120378,120383,120388,120396,120399,120404,120409,120414,120417,120422,120431,120434,120439,120442,120513,120518,120521,120526,120529,120534,120537,120542,120545,120550,120555,120558,120633,120636,120649,120654,120657,120671,120674,120703,120708,120737,120740,120745,120749,120754,120763,120766,120771,120774,120779,120782,120785,120790,120793,120798,120803,120806,120811,120814,120939,120944,120974,120977,120982,120987,121004,121007,121050,121053,121080,121085,121098,121241,121245,121250,121264,121267,121318,121321,121351,121354,121370,121375,121389,121392,121459,121464,121473,121478,121481,121493,121498,121505,121529,121532,121537,121540,121559,121564,121571,121583,121590],[10,118688,118684],{"id":118689},"_3-安装必备配置",[343,118691,118693],{"id":118692},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[389,118695,118698],{"className":118696,"code":118697,"language":5464},[5462],"  打开下方网站（注意，该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",[395,118699,118697],{"__ignoreMap":316},[14,118701,118703],{"id":118702},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[389,118705,118708],{"className":118706,"code":118707,"language":5464},[5462],"  输入以下命令\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",[395,118709,118707],{"__ignoreMap":316},[14,118711,118713],{"id":118712},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[389,118715,118719],{"className":118716,"code":118717,"language":118718,"meta":316,"style":316},"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",[395,118720,118721,118729,118740,118752,118766,118770,118780,118785,118789,118793,118798,118802,118814,118818,118823,118827,118838,118842,118858,118862,118873,118877,118882,118886,118894],{"__ignoreMap":316},[398,118722,118723,118725,118727],{"class":400,"line":401},[398,118724,24854],{"class":2239},[398,118726,117510],{"class":513},[398,118728,26435],{"class":513},[398,118730,118731,118733,118735,118737],{"class":400,"line":317},[398,118732,24854],{"class":2239},[398,118734,117510],{"class":513},[398,118736,24111],{"class":513},[398,118738,118739],{"class":513}," vim\n",[398,118741,118742,118744,118747,118749],{"class":400,"line":320},[398,118743,24854],{"class":2239},[398,118745,118746],{"class":513}," rm",[398,118748,25603],{"class":457},[398,118750,118751],{"class":513}," \u002Fetc\u002Fapt\u002Fsources.list\n",[398,118753,118754,118756,118758,118760,118763],{"class":400,"line":1470},[398,118755,24854],{"class":2239},[398,118757,118746],{"class":513},[398,118759,25603],{"class":457},[398,118761,118762],{"class":513}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[398,118764,118765],{"class":457},"**\n",[398,118767,118768],{"class":400,"line":1476},[398,118769,2676],{"emptyLinePlaceholder":328},[398,118771,118772,118774,118777],{"class":400,"line":1490},[398,118773,24854],{"class":2239},[398,118775,118776],{"class":513}," vim",[398,118778,118779],{"class":513}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[398,118781,118782],{"class":400,"line":1496},[398,118783,118784],{"class":513},"```\n",[398,118786,118787],{"class":400,"line":1587},[398,118788,2676],{"emptyLinePlaceholder":328},[398,118790,118791],{"class":400,"line":1593},[398,118792,2676],{"emptyLinePlaceholder":328},[398,118794,118795],{"class":400,"line":1605},[398,118796,118797],{"class":2239},"选择好Ubuntu版本后，复制下方的内容。\n",[398,118799,118800],{"class":400,"line":1888},[398,118801,2676],{"emptyLinePlaceholder":328},[398,118803,118804,118806,118809,118812],{"class":400,"line":1893},[398,118805,628],{"class":404},[398,118807,118808],{"class":513},"[](",[398,118810,118811],{"class":2239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[398,118813,415],{"class":513},[398,118815,118816],{"class":400,"line":1899},[398,118817,2676],{"emptyLinePlaceholder":328},[398,118819,118820],{"class":400,"line":1904},[398,118821,118822],{"class":2239},"粘贴进去\n",[398,118824,118825],{"class":400,"line":1918},[398,118826,2676],{"emptyLinePlaceholder":328},[398,118828,118829,118831,118833,118836],{"class":400,"line":1923},[398,118830,628],{"class":404},[398,118832,118808],{"class":513},[398,118834,118835],{"class":2239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[398,118837,415],{"class":513},[398,118839,118840],{"class":400,"line":1929},[398,118841,2676],{"emptyLinePlaceholder":328},[398,118843,118844,118847,118850,118853,118855],{"class":400,"line":1950},[398,118845,118846],{"class":2239},"按一下ESC，然后英文冒号，输入",[398,118848,118849],{"class":513}," `",[398,118851,118852],{"class":2239},":wq!",[398,118854,1374],{"class":513},[398,118856,118857],{"class":2239},"然后回车\n",[398,118859,118860],{"class":400,"line":1955},[398,118861,2676],{"emptyLinePlaceholder":328},[398,118863,118864,118866,118868,118871],{"class":400,"line":1969},[398,118865,628],{"class":404},[398,118867,118808],{"class":513},[398,118869,118870],{"class":2239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[398,118872,415],{"class":513},[398,118874,118875],{"class":400,"line":1974},[398,118876,2676],{"emptyLinePlaceholder":328},[398,118878,118879],{"class":400,"line":2003},[398,118880,118881],{"class":2239},"输入以下命令\n",[398,118883,118884],{"class":400,"line":2008},[398,118885,2676],{"emptyLinePlaceholder":328},[398,118887,118888,118891],{"class":400,"line":2025},[398,118889,118890],{"class":513},"```",[398,118892,118893],{"class":2239},"Bash\n",[398,118895,118896,118898,118900],{"class":400,"line":2030},[398,118897,24854],{"class":2239},[398,118899,117510],{"class":513},[398,118901,26435],{"class":513},[19,118903,118904],{},"这里被替换成对应学校则成功",[19,118906,118907],{},[1738,118908],{"alt":316,"src":118909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[343,118911,118913],{"id":118912},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[14,118915,118917],{"id":118916},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,118919,118920],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,118922,118923],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,118925,118926],{},[640,118927,118928],{"href":118928,"rel":118929},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[24142],[19,118931,118932],{},[1738,118933],{"alt":316,"src":118934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,118936,118937],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,118939,118940],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,118942,118943],{},[1738,118944],{"alt":316,"src":118945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[389,118947,118949],{"className":117489,"code":118948,"language":117491,"meta":316,"style":316},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[395,118950,118951,118956,118963,118968],{"__ignoreMap":316},[398,118952,118953],{"class":400,"line":401},[398,118954,118955],{"class":467},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[398,118957,118958,118960],{"class":400,"line":317},[398,118959,101469],{"class":457},[398,118961,118962],{"class":513}," ~\u002FDownloads\n",[398,118964,118965],{"class":400,"line":320},[398,118966,118967],{"class":467},"#下方chrome安装包名不一定是这个，根据名字来看\n",[398,118969,118970,118972,118974,118976],{"class":400,"line":1470},[398,118971,24854],{"class":2239},[398,118973,117510],{"class":513},[398,118975,24111],{"class":513},[398,118977,118978],{"class":513}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,118980,118981],{},[1738,118982],{"alt":316,"src":118983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[14,118985,118987],{"id":118986},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[389,118989,118991],{"className":117489,"code":118990,"language":117491,"meta":316,"style":316},"# 老版\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",[395,118992,118993,118998,119006,119017,119022,119026,119031,119041,119049,119060],{"__ignoreMap":316},[398,118994,118995],{"class":400,"line":401},[398,118996,118997],{"class":467},"# 老版\n",[398,118999,119000,119002,119004],{"class":400,"line":317},[398,119001,24854],{"class":2239},[398,119003,117510],{"class":513},[398,119005,26435],{"class":513},[398,119007,119008,119010,119012,119014],{"class":400,"line":320},[398,119009,24854],{"class":2239},[398,119011,117510],{"class":513},[398,119013,24111],{"class":513},[398,119015,119016],{"class":513}," neofetch\n",[398,119018,119019],{"class":400,"line":1470},[398,119020,119021],{"class":2239},"neofetch\n",[398,119023,119024],{"class":400,"line":1476},[398,119025,2676],{"emptyLinePlaceholder":328},[398,119027,119028],{"class":400,"line":1490},[398,119029,119030],{"class":467},"# 新版\n",[398,119032,119033,119035,119038],{"class":400,"line":1496},[398,119034,24854],{"class":2239},[398,119036,119037],{"class":513}," add-apt-repository",[398,119039,119040],{"class":513}," ppa:zhangsongcui3371\u002Ffastfetch\n",[398,119042,119043,119045,119047],{"class":400,"line":1587},[398,119044,24854],{"class":2239},[398,119046,117510],{"class":513},[398,119048,26435],{"class":513},[398,119050,119051,119053,119055,119057],{"class":400,"line":1593},[398,119052,24854],{"class":2239},[398,119054,117510],{"class":513},[398,119056,24111],{"class":513},[398,119058,119059],{"class":513}," fastfetch\n",[398,119061,119062],{"class":400,"line":1605},[398,119063,119064],{"class":2239},"fastfetch\n",[19,119066,119067],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,119069,119070],{},[1738,119071],{"alt":316,"src":119072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[14,119074,119076],{"id":119075},"_323-移除snap应用","3.2.3 移除snap应用",[19,119078,119079],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[389,119081,119083],{"className":117489,"code":119082,"language":117491,"meta":316,"style":316},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[395,119084,119085,119097,119108],{"__ignoreMap":316},[398,119086,119087,119089,119091,119094],{"class":400,"line":401},[398,119088,24854],{"class":2239},[398,119090,26706],{"class":513},[398,119092,119093],{"class":513}," disable",[398,119095,119096],{"class":513}," snapd.service\n",[398,119098,119099,119101,119103,119105],{"class":400,"line":317},[398,119100,24854],{"class":2239},[398,119102,26706],{"class":513},[398,119104,119093],{"class":513},[398,119106,119107],{"class":513}," snapd.socket\n",[398,119109,119110,119112,119114,119116],{"class":400,"line":320},[398,119111,24854],{"class":2239},[398,119113,26706],{"class":513},[398,119115,119093],{"class":513},[398,119117,119118],{"class":513}," snapd.seeded.service\n",[19,119120,119121],{},"然后查看snap应用列表",[19,119123,119124,119125,119130],{},"根据你安装的选择不同（最小安装或普通安装），有",[640,119126,119129],{"href":119127,"rel":119128},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[24142],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[389,119132,119134],{"className":117489,"code":119133,"language":117491,"meta":316,"style":316},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[395,119135,119136,119141],{"__ignoreMap":316},[398,119137,119138],{"class":400,"line":401},[398,119139,119140],{"class":467},"# 查询当前系统上snap安装了哪些app\n",[398,119142,119143,119146],{"class":400,"line":317},[398,119144,119145],{"class":2239},"snap",[398,119147,119148],{"class":513}," list\n",[19,119150,119151],{},[1738,119152],{"alt":316,"src":119153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,119155,119156,119157,119160],{},"卸载掉图中所有应用，按照 ",[23,119158,119159],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[389,119162,119164],{"className":117489,"code":119163,"language":117491,"meta":316,"style":316},"#移除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",[395,119165,119166,119171,119183,119188,119199,119204,119215,119220,119231,119236,119240,119245,119256,119267],{"__ignoreMap":316},[398,119167,119168],{"class":400,"line":401},[398,119169,119170],{"class":467},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[398,119172,119173,119175,119178,119180],{"class":400,"line":317},[398,119174,24854],{"class":2239},[398,119176,119177],{"class":513}," snap",[398,119179,26272],{"class":513},[398,119181,119182],{"class":513}," snap-store\n",[398,119184,119185],{"class":400,"line":320},[398,119186,119187],{"class":467},"#移除firefox浏览器\n",[398,119189,119190,119192,119194,119196],{"class":400,"line":1470},[398,119191,24854],{"class":2239},[398,119193,119177],{"class":513},[398,119195,26272],{"class":513},[398,119197,119198],{"class":513}," firefox\n",[398,119200,119201],{"class":400,"line":1476},[398,119202,119203],{"class":467},"#移除gnome-42-2204\n",[398,119205,119206,119208,119210,119212],{"class":400,"line":1490},[398,119207,24854],{"class":2239},[398,119209,119177],{"class":513},[398,119211,26272],{"class":513},[398,119213,119214],{"class":513}," gnome-42-2204\n",[398,119216,119217],{"class":400,"line":1496},[398,119218,119219],{"class":467},"#移除gtk-common-themes\n",[398,119221,119222,119224,119226,119228],{"class":400,"line":1587},[398,119223,24854],{"class":2239},[398,119225,119177],{"class":513},[398,119227,26272],{"class":513},[398,119229,119230],{"class":513}," gtk-common-themes\n",[398,119232,119233],{"class":400,"line":1593},[398,119234,119235],{"class":467},"#移除其它...\n",[398,119237,119238],{"class":400,"line":1605},[398,119239,2950],{"class":408},[398,119241,119242],{"class":400,"line":1888},[398,119243,119244],{"class":467},"#移除core22,bare以及snapd\n",[398,119246,119247,119249,119251,119253],{"class":400,"line":1893},[398,119248,24854],{"class":2239},[398,119250,119177],{"class":513},[398,119252,26272],{"class":513},[398,119254,119255],{"class":513}," core22\n",[398,119257,119258,119260,119262,119264],{"class":400,"line":1899},[398,119259,24854],{"class":2239},[398,119261,119177],{"class":513},[398,119263,26272],{"class":513},[398,119265,119266],{"class":513}," bare\n",[398,119268,119269,119271,119273,119275],{"class":400,"line":1904},[398,119270,24854],{"class":2239},[398,119272,119177],{"class":513},[398,119274,26272],{"class":513},[398,119276,119277],{"class":513}," snapd\n",[19,119279,119280],{},[1738,119281],{"alt":316,"src":119282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,119284,119285],{},"输入以下命令查看是否还有snap包",[389,119287,119289],{"className":117489,"code":119288,"language":117491,"meta":316,"style":316},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[395,119290,119291,119297,119301,119305,119309],{"__ignoreMap":316},[398,119292,119293,119295],{"class":400,"line":401},[398,119294,119145],{"class":2239},[398,119296,119148],{"class":513},[398,119298,119299],{"class":400,"line":317},[398,119300,118997],{"class":467},[398,119302,119303],{"class":400,"line":320},[398,119304,119021],{"class":2239},[398,119306,119307],{"class":400,"line":1470},[398,119308,119030],{"class":467},[398,119310,119311],{"class":400,"line":1476},[398,119312,119064],{"class":2239},[19,119314,119315],{},[1738,119316],{"alt":316,"src":119317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[14,119319,119321],{"id":119320},"_324-移除snap","3.2.4 移除snap",[19,119323,119324,119325,119330],{},"在删除掉",[640,119326,119329],{"href":119327,"rel":119328},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[24142],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[389,119332,119334],{"className":117489,"code":119333,"language":117491,"meta":316,"style":316}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[395,119335,119336,119341,119354,119359,119370],{"__ignoreMap":316},[398,119337,119338],{"class":400,"line":401},[398,119339,119340],{"class":467}," #使用apt移除掉snap\n",[398,119342,119343,119345,119347,119349,119352],{"class":400,"line":317},[398,119344,24854],{"class":2239},[398,119346,117510],{"class":513},[398,119348,117818],{"class":513},[398,119350,119351],{"class":457}," --purge",[398,119353,119277],{"class":513},[398,119355,119356],{"class":400,"line":320},[398,119357,119358],{"class":467},"#移除snapd的一些目录\n",[398,119360,119361,119363,119365,119367],{"class":400,"line":1470},[398,119362,24854],{"class":2239},[398,119364,118746],{"class":513},[398,119366,25603],{"class":457},[398,119368,119369],{"class":513}," \u002Fvar\u002Fcache\u002Fsnapd\n",[398,119371,119372,119374,119376,119378],{"class":400,"line":1476},[398,119373,24854],{"class":2239},[398,119375,118746],{"class":513},[398,119377,25603],{"class":457},[398,119379,119380],{"class":513}," ~\u002Fsnap\n",[19,119382,119383,119384,119387],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[395,119385,119386],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[14,119389,119391],{"id":119390},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,119393,119394],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[389,119396,119398],{"className":117489,"code":119397,"language":117491,"meta":316,"style":316},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[395,119399,119400],{"__ignoreMap":316},[398,119401,119402,119404,119406],{"class":400,"line":401},[398,119403,24854],{"class":2239},[398,119405,118776],{"class":513},[398,119407,119408],{"class":513}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,119410,119411,119412,119415],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[395,119413,119414],{},":wq"," 回车",[389,119417,119419],{"className":117489,"code":119418,"language":117491,"meta":316,"style":316},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[395,119420,119421,119428,119442],{"__ignoreMap":316},[398,119422,119423,119426],{"class":400,"line":401},[398,119424,119425],{"class":2239},"Package:",[398,119427,119277],{"class":513},[398,119429,119430,119433,119436,119439],{"class":400,"line":317},[398,119431,119432],{"class":2239},"Pin:",[398,119434,119435],{"class":513}," release",[398,119437,119438],{"class":513}," a=",[398,119440,119441],{"class":457},"*\n",[398,119443,119444,119447],{"class":400,"line":320},[398,119445,119446],{"class":2239},"Pin-Priority:",[398,119448,119449],{"class":457}," -10\n",[19,119451,119452],{},[1738,119453],{"alt":316,"src":119454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[14,119456,119458],{"id":119457},"_326-测试是否成功","3.2.6 测试是否成功",[389,119460,119462],{"className":117489,"code":119461,"language":117491,"meta":316,"style":316},"sudo apt update\nsudo apt install firefox\n",[395,119463,119464,119472],{"__ignoreMap":316},[398,119465,119466,119468,119470],{"class":400,"line":401},[398,119467,24854],{"class":2239},[398,119469,117510],{"class":513},[398,119471,26435],{"class":513},[398,119473,119474,119476,119478,119480],{"class":400,"line":317},[398,119475,24854],{"class":2239},[398,119477,117510],{"class":513},[398,119479,24111],{"class":513},[398,119481,119198],{"class":513},[19,119483,119484],{},"这里提示snapd无法被安装，就证明成功了",[19,119486,119487],{},[1738,119488],{"alt":316,"src":119489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[14,119491,119493],{"id":119492},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,119495,119496],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,119498,119499],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,119501,119502],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[389,119504,119506],{"className":117489,"code":119505,"language":117491,"meta":316,"style":316},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[395,119507,119508,119513,119522,119527,119535],{"__ignoreMap":316},[398,119509,119510],{"class":400,"line":401},[398,119511,119512],{"class":467},"# 添加Mozilla提供的源\n",[398,119514,119515,119517,119519],{"class":400,"line":317},[398,119516,24854],{"class":2239},[398,119518,119037],{"class":513},[398,119520,119521],{"class":513}," ppa:mozillateam\u002Fppa\n",[398,119523,119524],{"class":400,"line":320},[398,119525,119526],{"class":467},"# 安装Firefox\n",[398,119528,119529,119531,119533],{"class":400,"line":1470},[398,119530,24854],{"class":2239},[398,119532,117510],{"class":513},[398,119534,26435],{"class":513},[398,119536,119537,119539,119541,119543],{"class":400,"line":1476},[398,119538,24854],{"class":2239},[398,119540,117510],{"class":513},[398,119542,24111],{"class":513},[398,119544,119198],{"class":513},[14,119546,119548],{"id":119547},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,119550,119551],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,119553,119554],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[389,119556,119558],{"className":117489,"code":119557,"language":117491,"meta":316,"style":316},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[395,119559,119560,119565,119575,119583,119587],{"__ignoreMap":316},[398,119561,119562],{"class":400,"line":401},[398,119563,119564],{"class":467},"#删掉禁止安装snap的配置文件\n",[398,119566,119567,119569,119571,119573],{"class":400,"line":317},[398,119568,24854],{"class":2239},[398,119570,118746],{"class":513},[398,119572,25603],{"class":457},[398,119574,119408],{"class":513},[398,119576,119577,119579,119581],{"class":400,"line":320},[398,119578,24854],{"class":2239},[398,119580,117510],{"class":513},[398,119582,26435],{"class":513},[398,119584,119585],{"class":400,"line":1470},[398,119586,2676],{"emptyLinePlaceholder":328},[398,119588,119589,119591,119593],{"class":400,"line":1476},[398,119590,24854],{"class":2239},[398,119592,117510],{"class":513},[398,119594,119595],{"class":513}," dist-update\n",[343,119597,119599],{"id":119598},"_33-中文输入法","3.3 中文输入法",[14,119601,119603],{"id":119602},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,119605,119606],{},"官网下载搜狗输入法",[19,119608,119609],{},[1738,119610],{"alt":316,"src":119611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,119613,119614],{},[1738,119615],{"alt":316,"src":119616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,119618,119619],{},"打开终端输入如下",[389,119621,119623],{"className":117489,"code":119622,"language":117491,"meta":316,"style":316},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[395,119624,119625,119632],{"__ignoreMap":316},[398,119626,119627,119629],{"class":400,"line":401},[398,119628,101469],{"class":457},[398,119630,119631],{"class":513}," ~\u002FDownloads\u002F\n",[398,119633,119634,119636,119638,119640],{"class":400,"line":317},[398,119635,24854],{"class":2239},[398,119637,117510],{"class":513},[398,119639,24111],{"class":513},[398,119641,119642],{"class":513}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,119644,119645],{},"打开Fcitx",[19,119647,119648,119651],{},[1738,119649],{"alt":316,"src":119650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[1738,119652],{"alt":316,"src":119653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,119655,119656],{},[1738,119657],{"alt":316,"src":119658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,119660,119661],{},"添加搜狗输入法",[19,119663,119664],{},[1738,119665],{"alt":316,"src":119666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,119668,119669],{},[1738,119670],{"alt":316,"src":119671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,119673,119674],{},"将搜狗输入法设置为唯一输入法",[19,119676,119677],{},[1738,119678],{"alt":316,"src":119679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[14,119681,119683],{"id":119682},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[38,119685,119686],{},[41,119687,119688],{},"卸载旧输入法",[389,119690,119692],{"className":118716,"code":119691,"language":118718,"meta":316,"style":316},"sudo apt purge fcitx* ibus*\n",[395,119693,119694],{"__ignoreMap":316},[398,119695,119696,119698,119700,119702,119705,119707,119710],{"class":400,"line":401},[398,119697,24854],{"class":2239},[398,119699,117510],{"class":513},[398,119701,117851],{"class":513},[398,119703,119704],{"class":513}," fcitx",[398,119706,857],{"class":457},[398,119708,119709],{"class":513}," ibus",[398,119711,119441],{"class":457},[38,119713,119714],{"start":317},[41,119715,119716],{},"安装Fcitx5",[389,119718,119720],{"className":117489,"code":119719,"language":117491,"meta":316,"style":316},"# 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",[395,119721,119722,119727,119741,119745,119750,119759,119767],{"__ignoreMap":316},[398,119723,119724],{"class":400,"line":401},[398,119725,119726],{"class":467},"# Ubuntu22.04及以上、Debian12及以上\n",[398,119728,119729,119731,119733,119735,119738],{"class":400,"line":317},[398,119730,24854],{"class":2239},[398,119732,117510],{"class":513},[398,119734,24111],{"class":513},[398,119736,119737],{"class":513}," fcitx5",[398,119739,119740],{"class":513}," fcitx5-chinese-addons\n",[398,119742,119743],{"class":400,"line":320},[398,119744,2676],{"emptyLinePlaceholder":328},[398,119746,119747],{"class":400,"line":1470},[398,119748,119749],{"class":467},"# Ubuntu20.04\n",[398,119751,119752,119754,119756],{"class":400,"line":1476},[398,119753,24854],{"class":2239},[398,119755,119037],{"class":513},[398,119757,119758],{"class":513}," ppa:zhsj\u002Ffcitx5\n",[398,119760,119761,119763,119765],{"class":400,"line":1490},[398,119762,24854],{"class":2239},[398,119764,117510],{"class":513},[398,119766,26435],{"class":513},[398,119768,119769,119771,119773,119775,119777],{"class":400,"line":1496},[398,119770,24854],{"class":2239},[398,119772,117510],{"class":513},[398,119774,24111],{"class":513},[398,119776,119737],{"class":513},[398,119778,119740],{"class":513},[38,119780,119781,119784],{"start":320},[41,119782,119783],{},"Reboot System",[41,119785,119786],{},"启动Fcitx5",[19,119788,119789],{},[1738,119790],{"alt":316,"src":119791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[38,119793,119794],{"start":1476},[41,119795,119796],{},"修改一些设置",[19,119798,119799],{},"将Pinyin和Keyboard - English US加入到左边。",[19,119801,119802],{},[1738,119803],{"alt":316,"src":119804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,119806,119807],{},"添加快捷键以便于更好切换中英文",[19,119809,119810],{},[1738,119811],{"alt":316,"src":119812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[38,119814,119815],{"start":1490},[41,119816,119817],{},"重启",[389,119819,119821],{"className":118716,"code":119820,"language":118718,"meta":316,"style":316},"sudo shutdown -r now\n",[395,119822,119823],{"__ignoreMap":316},[398,119824,119825,119827,119830,119833],{"class":400,"line":401},[398,119826,24854],{"class":2239},[398,119828,119829],{"class":513}," shutdown",[398,119831,119832],{"class":457}," -r",[398,119834,119835],{"class":513}," now\n",[38,119837,119838],{"start":1496},[41,119839,119840],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,119842,119843],{},[640,119844,119845],{"href":119845,"rel":119846},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[24142],[38,119848,119849],{"start":1587},[41,119850,119851],{},"再重启",[389,119853,119854],{"className":118716,"code":119820,"language":118718,"meta":316,"style":316},[395,119855,119856],{"__ignoreMap":316},[398,119857,119858,119860,119862,119864],{"class":400,"line":401},[398,119859,24854],{"class":2239},[398,119861,119829],{"class":513},[398,119863,119832],{"class":457},[398,119865,119835],{"class":513},[343,119867,119869],{"id":119868},"_34-pip3源替换","3.4 pip3源替换",[19,119871,119872],{},"非Debian系发行版需要做。",[19,119874,119875],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,119877,119878],{},"使用dnf的系统也可能不用做。",[389,119880,119882],{"className":117489,"code":119881,"language":117491,"meta":316,"style":316},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[395,119883,119884,119889,119896,119901,119906],{"__ignoreMap":316},[398,119885,119886],{"class":400,"line":401},[398,119887,119888],{"class":467},"# 检查是否已安装 pip\n",[398,119890,119891,119894],{"class":400,"line":317},[398,119892,119893],{"class":2239},"pip3",[398,119895,26486],{"class":457},[398,119897,119898],{"class":400,"line":320},[398,119899,119900],{"class":467},"# 如果未安装，先安装 pip3（见下方）\n",[398,119902,119903],{"class":400,"line":1470},[398,119904,119905],{"class":467},"# 配置 pip 使用清华源\n",[398,119907,119908,119910,119913,119916,119919],{"class":400,"line":1476},[398,119909,119893],{"class":2239},[398,119911,119912],{"class":513}," config",[398,119914,119915],{"class":513}," set",[398,119917,119918],{"class":513}," global.index-url",[398,119920,119921],{"class":513}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,119923,119924],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,119926,119927],{},[1738,119928],{"alt":316,"src":119929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[389,119931,119933],{"className":117489,"code":119932,"language":117491,"meta":316,"style":316},"#安装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",[395,119934,119935,119940,119948,119959,119963,119968,119987,119991,119996,120008,120012,120017],{"__ignoreMap":316},[398,119936,119937],{"class":400,"line":401},[398,119938,119939],{"class":467},"#安装pip3\n",[398,119941,119942,119944,119946],{"class":400,"line":317},[398,119943,24854],{"class":2239},[398,119945,117510],{"class":513},[398,119947,26435],{"class":513},[398,119949,119950,119952,119954,119956],{"class":400,"line":320},[398,119951,24854],{"class":2239},[398,119953,26269],{"class":513},[398,119955,24111],{"class":513},[398,119957,119958],{"class":513}," python3-pip\n",[398,119960,119961],{"class":400,"line":1470},[398,119962,2676],{"emptyLinePlaceholder":328},[398,119964,119965],{"class":400,"line":1476},[398,119966,119967],{"class":467},"#更新pip3\n",[398,119969,119970,119972,119974,119976,119978,119980,119983,119985],{"class":400,"line":1490},[398,119971,101072],{"class":2239},[398,119973,101075],{"class":457},[398,119975,101098],{"class":513},[398,119977,24111],{"class":513},[398,119979,26623],{"class":457},[398,119981,119982],{"class":513}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[398,119984,101103],{"class":457},[398,119986,101106],{"class":513},[398,119988,119989],{"class":400,"line":1496},[398,119990,2676],{"emptyLinePlaceholder":328},[398,119992,119993],{"class":400,"line":1587},[398,119994,119995],{"class":467},"#设置pip源为清华源\n",[398,119997,119998,120000,120002,120004,120006],{"class":400,"line":1593},[398,119999,119893],{"class":2239},[398,120001,119912],{"class":513},[398,120003,119915],{"class":513},[398,120005,119918],{"class":513},[398,120007,119921],{"class":513},[398,120009,120010],{"class":400,"line":1605},[398,120011,2676],{"emptyLinePlaceholder":328},[398,120013,120014],{"class":400,"line":1888},[398,120015,120016],{"class":467},"#测试\n",[398,120018,120019,120021,120023,120025,120027,120029],{"class":400,"line":1893},[398,120020,101072],{"class":2239},[398,120022,101075],{"class":457},[398,120024,101098],{"class":513},[398,120026,24111],{"class":513},[398,120028,101103],{"class":457},[398,120030,101106],{"class":513},[19,120032,120033],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,120035,120036],{},[1738,120037],{"alt":316,"src":120038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[343,120040,120042],{"id":120041},"_35-显卡驱动安装","3.5 显卡驱动安装",[14,120044,120046],{"id":120045},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[389,120048,120050],{"className":118716,"code":120049,"language":118718,"meta":316,"style":316},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[395,120051,120052,120057,120072,120077],{"__ignoreMap":316},[398,120053,120054],{"class":400,"line":401},[398,120055,120056],{"class":467},"# 如果是使用apt安装的驱动\n",[398,120058,120059,120061,120063,120065,120067,120070],{"class":400,"line":317},[398,120060,24854],{"class":2239},[398,120062,26269],{"class":513},[398,120064,26272],{"class":513},[398,120066,119351],{"class":457},[398,120068,120069],{"class":513}," nvidia",[398,120071,119441],{"class":457},[398,120073,120074],{"class":400,"line":320},[398,120075,120076],{"class":467},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[398,120078,120079,120081],{"class":400,"line":1470},[398,120080,24854],{"class":2239},[398,120082,120083],{"class":513}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[14,120085,120087],{"id":120086},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22275,120089,120091],{"id":120090},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23187,120093,120095],{"id":120094},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[389,120097,120099],{"className":118716,"code":120098,"language":118718,"meta":316,"style":316},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[395,120100,120101,120106,120117,120122,120132,120137],{"__ignoreMap":316},[398,120102,120103],{"class":400,"line":401},[398,120104,120105],{"class":467},"# 安装英伟达驱动\n",[398,120107,120108,120110,120112,120114],{"class":400,"line":317},[398,120109,24854],{"class":2239},[398,120111,117510],{"class":513},[398,120113,24111],{"class":513},[398,120115,120116],{"class":513}," nvidia-driver-版本号\n",[398,120118,120119],{"class":400,"line":320},[398,120120,120121],{"class":467},"# 重启 \n",[398,120123,120124,120126,120128,120130],{"class":400,"line":1470},[398,120125,24854],{"class":2239},[398,120127,119829],{"class":513},[398,120129,119832],{"class":457},[398,120131,119835],{"class":513},[398,120133,120134],{"class":400,"line":1476},[398,120135,120136],{"class":467},"# 检查驱动是否安装成功\n",[398,120138,120139],{"class":400,"line":1490},[398,120140,120141],{"class":2239},"nvidia-smi\n",[23187,120143,120145],{"id":120144},"_35212-debian","3.5.2.1.2 Debian",[389,120147,120149],{"className":118716,"code":120148,"language":118718,"meta":316,"style":316},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[395,120150,120151,120155,120169,120173,120183,120187],{"__ignoreMap":316},[398,120152,120153],{"class":400,"line":401},[398,120154,120105],{"class":467},[398,120156,120157,120159,120161,120163,120166],{"class":400,"line":317},[398,120158,24854],{"class":2239},[398,120160,117510],{"class":513},[398,120162,24111],{"class":513},[398,120164,120165],{"class":513}," nvidia-driver",[398,120167,120168],{"class":513}," nvidia-settings\n",[398,120170,120171],{"class":400,"line":320},[398,120172,120121],{"class":467},[398,120174,120175,120177,120179,120181],{"class":400,"line":1470},[398,120176,24854],{"class":2239},[398,120178,119829],{"class":513},[398,120180,119832],{"class":457},[398,120182,119835],{"class":513},[398,120184,120185],{"class":400,"line":1476},[398,120186,120136],{"class":467},[398,120188,120189],{"class":400,"line":1490},[398,120190,120141],{"class":2239},[22275,120192,120194],{"id":120193},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,120196,120197,120198,120201],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[23,120199,120200],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,120203,120204,120205],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23831,120206,120207],{},[23,120208,120209],{},"（也可以不禁用桌面环境，直接进行下一步。）",[389,120211,120213],{"className":118716,"code":120212,"language":118718,"meta":316,"style":316},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[395,120214,120215,120220,120230,120235,120248,120253],{"__ignoreMap":316},[398,120216,120217],{"class":400,"line":401},[398,120218,120219],{"class":467},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[398,120221,120222,120224,120227],{"class":400,"line":317},[398,120223,24854],{"class":2239},[398,120225,120226],{"class":513}," telinit",[398,120228,120229],{"class":457}," 3\n",[398,120231,120232],{"class":400,"line":320},[398,120233,120234],{"class":467},"# ubuntu 使用下方命令\n",[398,120236,120237,120239,120242,120245],{"class":400,"line":1470},[398,120238,24854],{"class":2239},[398,120240,120241],{"class":513}," service",[398,120243,120244],{"class":513}," lightdm",[398,120246,120247],{"class":513}," stop\n",[398,120249,120250],{"class":400,"line":1476},[398,120251,120252],{"class":467},"# Fedora 使用下方命令\n",[398,120254,120255,120257,120259,120262],{"class":400,"line":1490},[398,120256,24854],{"class":2239},[398,120258,26706],{"class":513},[398,120260,120261],{"class":513}," isolate",[398,120263,120264],{"class":513}," multi-user.target\n",[19,120266,120267],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[389,120269,120271],{"className":118716,"code":120270,"language":118718,"meta":316,"style":316},"# 编译环境+准备工作\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",[395,120272,120273,120278,120289,120294,120301,120306,120318,120323,120330,120335],{"__ignoreMap":316},[398,120274,120275],{"class":400,"line":401},[398,120276,120277],{"class":467},"# 编译环境+准备工作\n",[398,120279,120280,120282,120284,120286],{"class":400,"line":317},[398,120281,24854],{"class":2239},[398,120283,117510],{"class":513},[398,120285,24111],{"class":513},[398,120287,120288],{"class":513}," build-essential\n",[398,120290,120291],{"class":400,"line":320},[398,120292,120293],{"class":467},"# 进入到.run目录中\n",[398,120295,120296,120298],{"class":400,"line":1470},[398,120297,101469],{"class":457},[398,120299,120300],{"class":513}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[398,120302,120303],{"class":400,"line":1476},[398,120304,120305],{"class":467},"# 给驱动文件增加可执行权限：\n",[398,120307,120308,120310,120312,120315],{"class":400,"line":1490},[398,120309,24854],{"class":2239},[398,120311,24857],{"class":513},[398,120313,120314],{"class":513}," a+x",[398,120316,120317],{"class":513}," NVIDIA-Linux-x86_64-550.107.02.run\n",[398,120319,120320],{"class":400,"line":1496},[398,120321,120322],{"class":467},"# 然后执行安装：\n",[398,120324,120325,120327],{"class":400,"line":1587},[398,120326,24854],{"class":2239},[398,120328,120329],{"class":513}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[398,120331,120332],{"class":400,"line":1593},[398,120333,120334],{"class":467},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[398,120336,120337,120339,120342],{"class":400,"line":1605},[398,120338,24854],{"class":2239},[398,120340,120341],{"class":513}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[398,120343,120344],{"class":457},"  --no-opengl-files\n",[19,120346,120347],{},"安装完毕重启即可",[389,120349,120351],{"className":118716,"code":120350,"language":118718,"meta":316,"style":316},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[395,120352,120353,120357,120363,120367],{"__ignoreMap":316},[398,120354,120355],{"class":400,"line":401},[398,120356,120121],{"class":467},[398,120358,120359,120361],{"class":400,"line":317},[398,120360,24854],{"class":2239},[398,120362,26840],{"class":513},[398,120364,120365],{"class":400,"line":320},[398,120366,120136],{"class":467},[398,120368,120369],{"class":400,"line":1470},[398,120370,120141],{"class":2239},[14,120372,120374],{"id":120373},"_353-安装cuda","3.5.3 安装CUDA",[19,120376,120377],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,120379,120380],{},[1738,120381],{"alt":316,"src":120382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[38,120384,120385],{},[41,120386,120387],{},"先查看显卡驱动所支持的最高CUDA版本",[389,120389,120390],{"className":118716,"code":120141,"language":118718,"meta":316,"style":316},[395,120391,120392],{"__ignoreMap":316},[398,120393,120394],{"class":400,"line":401},[398,120395,120141],{"class":2239},[19,120397,120398],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,120400,120401],{},[1738,120402],{"alt":316,"src":120403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[38,120405,120406],{"start":317},[41,120407,120408],{},"下载CUDA并安装CUDA",[19,120410,118495,120411],{},[640,120412,118498],{"href":118498,"rel":120413},[24142],[19,120415,120416],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,120418,120419],{},[1738,120420],{"alt":316,"src":120421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,120423,120424,120425,120430],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[640,120426,120429],{"href":120427,"rel":120428},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[24142],"Vinci机器人队单片机教程","）",[19,120432,120433],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,120435,120436],{},[1738,120437],{"alt":316,"src":120438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,120440,120441],{},"将最下方框框里的命令敲入终端",[389,120443,120445],{"className":118716,"code":120444,"language":118718,"meta":316,"style":316},"# 在当前文件夹下创建一个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",[395,120446,120447,120452,120461,120466,120473,120478,120486,120491,120502,120507],{"__ignoreMap":316},[398,120448,120449],{"class":400,"line":401},[398,120450,120451],{"class":467},"# 在当前文件夹下创建一个ttt的子文件夹\n",[398,120453,120454,120456,120458],{"class":400,"line":317},[398,120455,101459],{"class":2239},[398,120457,29409],{"class":457},[398,120459,120460],{"class":513}," .\u002Fttt\n",[398,120462,120463],{"class":400,"line":320},[398,120464,120465],{"class":467},"# 进入ttt文件夹\n",[398,120467,120468,120470],{"class":400,"line":1470},[398,120469,101469],{"class":457},[398,120471,120472],{"class":513}," ttt\n",[398,120474,120475],{"class":400,"line":1476},[398,120476,120477],{"class":467},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[398,120479,120480,120483],{"class":400,"line":1490},[398,120481,120482],{"class":2239},"wget",[398,120484,120485],{"class":513}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[398,120487,120488],{"class":400,"line":1496},[398,120489,120490],{"class":467},"# 给予权限\n",[398,120492,120493,120495,120497,120499],{"class":400,"line":1587},[398,120494,24854],{"class":2239},[398,120496,24857],{"class":513},[398,120498,120314],{"class":513},[398,120500,120501],{"class":513}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[398,120503,120504],{"class":400,"line":1593},[398,120505,120506],{"class":467},"# 运行脚本\n",[398,120508,120509,120511],{"class":400,"line":1605},[398,120510,24854],{"class":2239},[398,120512,120501],{"class":513},[19,120514,120515],{},[1738,120516],{"alt":316,"src":120517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,120519,120520],{},"正在安装中：",[19,120522,120523],{},[1738,120524],{"alt":316,"src":120525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,120527,120528],{},"输入accept接受即可",[19,120530,120531],{},[1738,120532],{"alt":316,"src":120533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,120535,120536],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,120538,120539],{},[1738,120540],{"alt":316,"src":120541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,120543,120544],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,120546,120547],{},[1738,120548],{"alt":316,"src":120549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[38,120551,120552],{"start":320},[41,120553,120554],{},"配置环境",[19,120556,120557],{},"根据上方确认一下路径，比如我上面红色框起来的为",[389,120559,120561],{"className":118716,"code":120560,"language":118718,"meta":316,"style":316},"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",[395,120562,120563,120579,120594],{"__ignoreMap":316},[398,120564,120565,120568,120571,120574,120577],{"class":400,"line":401},[398,120566,120567],{"class":2239},"Please",[398,120569,120570],{"class":513}," make",[398,120572,120573],{"class":513}," sure",[398,120575,120576],{"class":513}," that",[398,120578,2950],{"class":408},[398,120580,120581,120583,120586,120589,120592],{"class":400,"line":317},[398,120582,52464],{"class":2239},[398,120584,120585],{"class":513},"   PATH",[398,120587,120588],{"class":513}," includes",[398,120590,120591],{"class":513}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[398,120593,2950],{"class":408},[398,120595,120596,120598,120601,120603,120606,120609,120611,120614,120617,120620,120623,120625,120628,120630],{"class":400,"line":320},[398,120597,52464],{"class":2239},[398,120599,120600],{"class":513},"   LD_LIBRARY_PATH",[398,120602,120588],{"class":513},[398,120604,120605],{"class":513}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[398,120607,120608],{"class":513}," or,",[398,120610,5486],{"class":513},[398,120612,120613],{"class":513}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[398,120615,120616],{"class":513}," to",[398,120618,120619],{"class":513}," \u002Fetc\u002Fld.so.conf",[398,120621,120622],{"class":513}," and",[398,120624,27423],{"class":513},[398,120626,120627],{"class":513}," ldconfig",[398,120629,64797],{"class":513},[398,120631,120632],{"class":513}," root\n",[19,120634,120635],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[389,120637,120639],{"className":118716,"code":120638,"language":118718,"meta":316,"style":316},"which nvcc\n",[395,120640,120641],{"__ignoreMap":316},[398,120642,120643,120646],{"class":400,"line":401},[398,120644,120645],{"class":457},"which",[398,120647,120648],{"class":513}," nvcc\n",[19,120650,120651],{},[1738,120652],{"alt":316,"src":120653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,120655,120656],{},"所以我进行以下操作：",[389,120658,120660],{"className":118716,"code":120659,"language":118718,"meta":316,"style":316},"sudo vim ~\u002F.bashrc\n",[395,120661,120662],{"__ignoreMap":316},[398,120663,120664,120666,120668],{"class":400,"line":401},[398,120665,24854],{"class":2239},[398,120667,118776],{"class":513},[398,120669,120670],{"class":513}," ~\u002F.bashrc\n",[19,120672,120673],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[389,120675,120677],{"className":118716,"code":120676,"language":118718,"meta":316,"style":316},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[395,120678,120679,120691],{"__ignoreMap":316},[398,120680,120681,120683,120686,120688],{"class":400,"line":401},[398,120682,25320],{"class":404},[398,120684,120685],{"class":408}," PATH",[398,120687,454],{"class":404},[398,120689,120690],{"class":408},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[398,120692,120693,120695,120698,120700],{"class":400,"line":317},[398,120694,25320],{"class":404},[398,120696,120697],{"class":408}," LD_LIBRARY_PATH",[398,120699,454],{"class":404},[398,120701,120702],{"class":408},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,120704,120705],{},[1738,120706],{"alt":316,"src":120707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[389,120709,120711],{"className":118716,"code":120710,"language":118718,"meta":316,"style":316},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[395,120712,120713,120718,120724,120729],{"__ignoreMap":316},[398,120714,120715],{"class":400,"line":401},[398,120716,120717],{"class":467},"# 刷新当前终端的环境变量\n",[398,120719,120720,120722],{"class":400,"line":317},[398,120721,101086],{"class":457},[398,120723,120670],{"class":513},[398,120725,120726],{"class":400,"line":320},[398,120727,120728],{"class":467},"# 验证CUDA是否安装成功\n",[398,120730,120731,120734],{"class":400,"line":1470},[398,120732,120733],{"class":2239},"nvcc",[398,120735,120736],{"class":457}," -V\n",[19,120738,120739],{},"出现下图这种则安装成功。",[19,120741,120742],{},[1738,120743],{"alt":316,"src":120744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[14,120746,120748],{"id":120747},"_354-安装cudnn","3.5.4 安装cuDNN",[38,120750,120751],{},[41,120752,120753],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,120755,120756,120757,120762],{},"前往 NVIDIA cuDNN 下载页面：",[640,120758,120761],{"href":120759,"rel":120760},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[24142],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,120764,120765],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,120767,120768],{},[1738,120769],{"alt":316,"src":120770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,120772,120773],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,120775,120776],{},[1738,120777],{"alt":316,"src":120778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,120780,120781],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,120783,120784],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,120786,120787],{},[23,120788,120789],{},"我这里选择所有Linux X86_64最通用的办法：",[19,120791,120792],{},"下载好的：",[19,120794,120795],{},[1738,120796],{"alt":316,"src":120797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[38,120799,120800],{"start":317},[41,120801,120802],{},"安装cuDNN",[19,120804,120805],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,120807,120808],{},[1738,120809],{"alt":316,"src":120810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,120812,120813],{},"解压文件，并复制到对应位置完成安装",[389,120815,120817],{"className":118716,"code":120816,"language":118718,"meta":316,"style":316},"# 解压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",[395,120818,120819,120824,120835,120840,120847,120852,120868,120882,120887,120898,120907,120911,120927],{"__ignoreMap":316},[398,120820,120821],{"class":400,"line":401},[398,120822,120823],{"class":467},"# 解压cuDNN文件\n",[398,120825,120826,120829,120832],{"class":400,"line":317},[398,120827,120828],{"class":2239},"tar",[398,120830,120831],{"class":457}," -xvf",[398,120833,120834],{"class":513}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[398,120836,120837],{"class":400,"line":320},[398,120838,120839],{"class":467},"# cd进文件夹\n",[398,120841,120842,120844],{"class":400,"line":1470},[398,120843,101469],{"class":457},[398,120845,120846],{"class":513}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[398,120848,120849],{"class":400,"line":1476},[398,120850,120851],{"class":467},"# 复制cuDNN文件到CUDA目录\n",[398,120853,120854,120856,120858,120861,120863,120866],{"class":400,"line":1490},[398,120855,24854],{"class":2239},[398,120857,28054],{"class":513},[398,120859,120860],{"class":513}," include\u002Fcudnn",[398,120862,857],{"class":457},[398,120864,120865],{"class":513},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[398,120867,2950],{"class":408},[398,120869,120870,120872,120874,120877,120879],{"class":400,"line":1496},[398,120871,24854],{"class":2239},[398,120873,28054],{"class":513},[398,120875,120876],{"class":513}," lib\u002Flibcudnn",[398,120878,857],{"class":457},[398,120880,120881],{"class":513},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[398,120883,120884],{"class":400,"line":1587},[398,120885,120886],{"class":467},"# 对比一下有没有缺文件\n",[398,120888,120889,120891,120894,120896],{"class":400,"line":1593},[398,120890,26954],{"class":2239},[398,120892,120893],{"class":513}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[398,120895,857],{"class":457},[398,120897,2950],{"class":408},[398,120899,120900,120902,120905],{"class":400,"line":1605},[398,120901,26954],{"class":2239},[398,120903,120904],{"class":513}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[398,120906,119441],{"class":457},[398,120908,120909],{"class":400,"line":1888},[398,120910,120490],{"class":467},[398,120912,120913,120915,120917,120920,120922,120924],{"class":400,"line":1893},[398,120914,24854],{"class":2239},[398,120916,24857],{"class":513},[398,120918,120919],{"class":513}," a+r",[398,120921,120893],{"class":513},[398,120923,857],{"class":457},[398,120925,120926],{"class":408},"   \n",[398,120928,120929,120931,120933,120935,120937],{"class":400,"line":1899},[398,120930,24854],{"class":2239},[398,120932,24857],{"class":513},[398,120934,120919],{"class":513},[398,120936,120904],{"class":513},[398,120938,119441],{"class":457},[38,120940,120941],{"start":320},[41,120942,120943],{},"检查是否安装成功",[389,120945,120947],{"className":118716,"code":120946,"language":118718,"meta":316,"style":316},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[395,120948,120949,120954],{"__ignoreMap":316},[398,120950,120951],{"class":400,"line":401},[398,120952,120953],{"class":467},"# 检查cuDNN版本命令\n",[398,120955,120956,120959,120962,120964,120966,120969,120972],{"class":400,"line":317},[398,120957,120958],{"class":2239},"cat",[398,120960,120961],{"class":513}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[398,120963,25387],{"class":404},[398,120965,30429],{"class":2239},[398,120967,120968],{"class":513}," CUDNN_MAJOR",[398,120970,120971],{"class":457}," -A",[398,120973,47916],{"class":457},[19,120975,120976],{},"出现下图这样的就是安装成功了",[19,120978,120979],{},[1738,120980],{"alt":316,"src":120981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[38,120983,120984],{"start":1470},[41,120985,120986],{},"软链接(一般不需要)",[389,120988,120990],{"className":118716,"code":120989,"language":118718,"meta":316,"style":316},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[395,120991,120992,120997],{"__ignoreMap":316},[398,120993,120994],{"class":400,"line":401},[398,120995,120996],{"class":467},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[398,120998,120999,121001],{"class":400,"line":317},[398,121000,24854],{"class":2239},[398,121002,121003],{"class":513}," ldconfig\n",[19,121005,121006],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[389,121008,121013],{"className":121009,"code":121010,"language":121011,"meta":121012,"style":316},"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",[395,121014,121015,121020,121025,121030,121035,121040,121045],{"__ignoreMap":316},[398,121016,121017],{"class":400,"line":401},[398,121018,121019],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[398,121021,121022],{"class":400,"line":317},[398,121023,121024],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[398,121026,121027],{"class":400,"line":320},[398,121028,121029],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[398,121031,121032],{"class":400,"line":1470},[398,121033,121034],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[398,121036,121037],{"class":400,"line":1476},[398,121038,121039],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[398,121041,121042],{"class":400,"line":1490},[398,121043,121044],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[398,121046,121047],{"class":400,"line":1496},[398,121048,121049],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,121051,121052],{},"运行下方的命令",[389,121054,121056],{"className":118716,"code":121055,"language":118718,"meta":316,"style":316},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[395,121057,121058,121063,121070,121075],{"__ignoreMap":316},[398,121059,121060],{"class":400,"line":401},[398,121061,121062],{"class":467},"# cd进入CUDA路径\n",[398,121064,121065,121067],{"class":400,"line":317},[398,121066,101469],{"class":457},[398,121068,121069],{"class":513}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[398,121071,121072],{"class":400,"line":320},[398,121073,121074],{"class":467}," # 查看本路径下的需要软链接的文件名\n",[398,121076,121077],{"class":400,"line":1470},[398,121078,121079],{"class":2239}," ls\n",[19,121081,121082],{},[1738,121083],{"alt":316,"src":121084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,121086,121087,121088,18687,121091,18687,121094,121097],{},"如上图，我需要将",[395,121089,121090],{},"libcudnn_xxx_xxxxx.so.8.9.7",[395,121092,121093],{},"libcudnn_xxx_xxxxx.so.8",[395,121095,121096],{},"libcudnn_xxx_xxxxx.so","软链接",[389,121099,121101],{"className":118716,"code":121100,"language":118718,"meta":316,"style":316},"# 创建符号链接。对于每个 .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",[395,121102,121103,121108,121124,121138,121152,121166,121180,121194,121208,121213,121219,121224],{"__ignoreMap":316},[398,121104,121105],{"class":400,"line":401},[398,121106,121107],{"class":467},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[398,121109,121110,121112,121115,121118,121121],{"class":400,"line":317},[398,121111,24854],{"class":2239},[398,121113,121114],{"class":513}," ln",[398,121116,121117],{"class":457}," -sf",[398,121119,121120],{"class":513}," libcudnn_cnn_train.so.8.9.7",[398,121122,121123],{"class":513}," libcudnn_cnn_train.so.8\n",[398,121125,121126,121128,121130,121132,121135],{"class":400,"line":320},[398,121127,24854],{"class":2239},[398,121129,121114],{"class":513},[398,121131,121117],{"class":457},[398,121133,121134],{"class":513}," libcudnn_adv_infer.so.8.9.7",[398,121136,121137],{"class":513}," libcudnn_adv_infer.so.8\n",[398,121139,121140,121142,121144,121146,121149],{"class":400,"line":1470},[398,121141,24854],{"class":2239},[398,121143,121114],{"class":513},[398,121145,121117],{"class":457},[398,121147,121148],{"class":513}," libcudnn_adv_train.so.8.9.7",[398,121150,121151],{"class":513}," libcudnn_adv_train.so.8\n",[398,121153,121154,121156,121158,121160,121163],{"class":400,"line":1476},[398,121155,24854],{"class":2239},[398,121157,121114],{"class":513},[398,121159,121117],{"class":457},[398,121161,121162],{"class":513}," libcudnn_cnn_infer.so.8.9.7",[398,121164,121165],{"class":513}," libcudnn_cnn_infer.so.8\n",[398,121167,121168,121170,121172,121174,121177],{"class":400,"line":1490},[398,121169,24854],{"class":2239},[398,121171,121114],{"class":513},[398,121173,121117],{"class":457},[398,121175,121176],{"class":513}," libcudnn.so.8.9.7",[398,121178,121179],{"class":513}," libcudnn.so.8\n",[398,121181,121182,121184,121186,121188,121191],{"class":400,"line":1496},[398,121183,24854],{"class":2239},[398,121185,121114],{"class":513},[398,121187,121117],{"class":457},[398,121189,121190],{"class":513}," libcudnn_ops_infer.so.8.9.7",[398,121192,121193],{"class":513}," libcudnn_ops_infer.so.8\n",[398,121195,121196,121198,121200,121202,121205],{"class":400,"line":1587},[398,121197,24854],{"class":2239},[398,121199,121114],{"class":513},[398,121201,121117],{"class":457},[398,121203,121204],{"class":513}," libcudnn_ops_train.so.8.9.7",[398,121206,121207],{"class":513}," libcudnn_ops_train.so.8\n",[398,121209,121210],{"class":400,"line":1593},[398,121211,121212],{"class":467},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[398,121214,121215,121217],{"class":400,"line":1605},[398,121216,24854],{"class":2239},[398,121218,121003],{"class":513},[398,121220,121221],{"class":400,"line":1888},[398,121222,121223],{"class":467},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[398,121225,121226,121228,121231,121234,121236,121239],{"class":400,"line":1893},[398,121227,26954],{"class":2239},[398,121229,121230],{"class":457}," -l",[398,121232,121233],{"class":513}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[398,121235,857],{"class":457},[398,121237,121238],{"class":513},".so",[398,121240,119441],{"class":457},[14,121242,121244],{"id":121243},"_355-常见问题","3.5.5 常见问题",[38,121246,121247],{},[41,121248,121249],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[389,121251,121253],{"className":118716,"code":121252,"language":118718,"meta":316,"style":316},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[395,121254,121255],{"__ignoreMap":316},[398,121256,121257,121259,121261],{"class":400,"line":401},[398,121258,24854],{"class":2239},[398,121260,118776],{"class":513},[398,121262,121263],{"class":513}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,121265,121266],{},"blacklist-nouveau.conf文件内容如下：",[389,121268,121270],{"className":118716,"code":121269,"language":118718,"meta":316,"style":316},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[395,121271,121272,121280,121287,121299,121309],{"__ignoreMap":316},[398,121273,121274,121277],{"class":400,"line":401},[398,121275,121276],{"class":2239},"blacklist",[398,121278,121279],{"class":513}," nouveau\n",[398,121281,121282,121284],{"class":400,"line":317},[398,121283,121276],{"class":2239},[398,121285,121286],{"class":513}," lbm-nouveau\n",[398,121288,121289,121291,121294,121297],{"class":400,"line":320},[398,121290,116123],{"class":2239},[398,121292,121293],{"class":513}," nouveau",[398,121295,121296],{"class":513}," modeset=",[398,121298,3361],{"class":457},[398,121300,121301,121304,121306],{"class":400,"line":1470},[398,121302,121303],{"class":457},"alias",[398,121305,121293],{"class":513},[398,121307,121308],{"class":513}," off\n",[398,121310,121311,121313,121316],{"class":400,"line":1476},[398,121312,121303],{"class":457},[398,121314,121315],{"class":513}," lbm-nouveau",[398,121317,121308],{"class":513},[19,121319,121320],{},"接着运行下方命令",[389,121322,121324],{"className":118716,"code":121323,"language":118718,"meta":316,"style":316},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[395,121325,121326,121336,121341],{"__ignoreMap":316},[398,121327,121328,121330,121333],{"class":400,"line":401},[398,121329,24854],{"class":2239},[398,121331,121332],{"class":513}," update-initramfs",[398,121334,121335],{"class":457}," -u\n",[398,121337,121338],{"class":400,"line":317},[398,121339,121340],{"class":2239},"或者\n",[398,121342,121343,121345,121348],{"class":400,"line":320},[398,121344,24854],{"class":2239},[398,121346,121347],{"class":513}," dracut",[398,121349,121350],{"class":457}," --force\n",[19,121352,121353],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[389,121355,121357],{"className":118716,"code":121356,"language":118718,"meta":316,"style":316},"lsmod | grep nouveau\n",[395,121358,121359],{"__ignoreMap":316},[398,121360,121361,121364,121366,121368],{"class":400,"line":401},[398,121362,121363],{"class":2239},"lsmod",[398,121365,25387],{"class":404},[398,121367,30429],{"class":2239},[398,121369,121279],{"class":513},[38,121371,121372],{"start":317},[41,121373,121374],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[389,121376,121378],{"className":118716,"code":121377,"language":118718,"meta":316,"style":316},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[395,121379,121380],{"__ignoreMap":316},[398,121381,121382,121384,121386],{"class":400,"line":401},[398,121383,24854],{"class":2239},[398,121385,118776],{"class":513},[398,121387,121388],{"class":513}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,121390,121391],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[389,121393,121395],{"className":118716,"code":121394,"language":118718,"meta":316,"style":316},"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",[395,121396,121397,121405,121413,121421,121428,121436,121446,121454],{"__ignoreMap":316},[398,121398,121399,121402],{"class":400,"line":401},[398,121400,121401],{"class":2239},"Section",[398,121403,121404],{"class":513}," \"OutputClass\"\n",[398,121406,121407,121410],{"class":400,"line":317},[398,121408,121409],{"class":2239},"   Identifier",[398,121411,121412],{"class":513}," \"nvidia\"\n",[398,121414,121415,121418],{"class":400,"line":320},[398,121416,121417],{"class":2239},"   MatchDriver",[398,121419,121420],{"class":513}," \"nvidia-drm\"\n",[398,121422,121423,121426],{"class":400,"line":1470},[398,121424,121425],{"class":2239},"   Driver",[398,121427,121412],{"class":513},[398,121429,121430,121433],{"class":400,"line":1476},[398,121431,121432],{"class":2239},"   Option",[398,121434,121435],{"class":513}," \"AllowEmptyInitialConfiguration\"\n",[398,121437,121438,121440,121443],{"class":400,"line":1490},[398,121439,121432],{"class":2239},[398,121441,121442],{"class":513}," \"PrimaryGPU\"",[398,121444,121445],{"class":513}," \"yes\"\n",[398,121447,121448,121451],{"class":400,"line":1496},[398,121449,121450],{"class":2239},"   ModulePath",[398,121452,121453],{"class":513}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[398,121455,121456],{"class":400,"line":1587},[398,121457,121458],{"class":2239},"EndSection\n",[38,121460,121461],{"start":320},[41,121462,121463],{},"安装N卡驱动提示错误",[389,121465,121467],{"className":121009,"code":121466,"language":121011,"meta":121012,"style":316},"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",[395,121468,121469],{"__ignoreMap":316},[398,121470,121471],{"class":400,"line":401},[398,121472,121466],{},[38,121474,121475],{},[41,121476,121477],{},"检查当前运行的内核版本：",[19,121479,121480],{},"运行以下命令以查看你当前正在使用的内核版本：",[389,121482,121484],{"className":117489,"code":121483,"language":117491,"meta":316,"style":316},"uname -r\n",[395,121485,121486],{"__ignoreMap":316},[398,121487,121488,121490],{"class":400,"line":401},[398,121489,70397],{"class":2239},[398,121491,121492],{"class":457}," -r\n",[38,121494,121495],{"start":317},[41,121496,121497],{},"安装内核开发文件：",[19,121499,121500,121501,121504],{},"确保你已经安装了与当前内核版本相匹配的 ",[395,121502,121503],{},"kernel-devel"," 包。运行以下命令来安装：",[389,121506,121508],{"className":117489,"code":121507,"language":117491,"meta":316,"style":316},"sudo dnf install kernel-devel-$(uname -r)\n",[395,121509,121510],{"__ignoreMap":316},[398,121511,121512,121514,121516,121518,121521,121523,121525,121527],{"class":400,"line":401},[398,121513,24854],{"class":2239},[398,121515,26508],{"class":513},[398,121517,24111],{"class":513},[398,121519,121520],{"class":513}," kernel-devel-",[398,121522,25377],{"class":408},[398,121524,70397],{"class":2239},[398,121526,119832],{"class":457},[398,121528,415],{"class":408},[19,121530,121531],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[38,121533,121534],{"start":320},[41,121535,121536],{},"安装内核源代码（如果需要）：",[19,121538,121539],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[389,121541,121543],{"className":117489,"code":121542,"language":117491,"meta":316,"style":316},"sudo dnf install kernel-headers kernel-source\n",[395,121544,121545],{"__ignoreMap":316},[398,121546,121547,121549,121551,121553,121556],{"class":400,"line":401},[398,121548,24854],{"class":2239},[398,121550,26508],{"class":513},[398,121552,24111],{"class":513},[398,121554,121555],{"class":513}," kernel-headers",[398,121557,121558],{"class":513}," kernel-source\n",[38,121560,121561],{"start":1470},[41,121562,121563],{},"检查安装：",[19,121565,121566,121567,121570],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[395,121568,121569],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[389,121572,121574],{"className":117489,"code":121573,"language":117491,"meta":316,"style":316},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[395,121575,121576],{"__ignoreMap":316},[398,121577,121578,121580],{"class":400,"line":401},[398,121579,26954],{"class":2239},[398,121581,121582],{"class":513}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,121584,121585,121586,121589],{},"如果仍然遇到问题，可以通过 ",[395,121587,121588],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[5403,121591,121592],{},"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":316,"searchDepth":317,"depth":317,"links":121594},[121595,121599,121609,121613,121614],{"id":118692,"depth":317,"text":118693,"children":121596},[121597,121598],{"id":118702,"depth":320,"text":118703},{"id":118712,"depth":320,"text":118713},{"id":118912,"depth":317,"text":118913,"children":121600},[121601,121602,121603,121604,121605,121606,121607,121608],{"id":118916,"depth":320,"text":118917},{"id":118986,"depth":320,"text":118987},{"id":119075,"depth":320,"text":119076},{"id":119320,"depth":320,"text":119321},{"id":119390,"depth":320,"text":119391},{"id":119457,"depth":320,"text":119458},{"id":119492,"depth":320,"text":119493},{"id":119547,"depth":320,"text":119548},{"id":119598,"depth":317,"text":119599,"children":121610},[121611,121612],{"id":119602,"depth":320,"text":119603},{"id":119682,"depth":320,"text":119683},{"id":119868,"depth":317,"text":119869},{"id":120041,"depth":317,"text":120042,"children":121615},[121616,121617,121618,121619,121620],{"id":120045,"depth":320,"text":120046},{"id":120086,"depth":320,"text":120087},{"id":120373,"depth":320,"text":120374},{"id":120747,"depth":320,"text":120748},{"id":121243,"depth":320,"text":121244},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118684,"description":23654},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121627,"title":121628,"body":121629,"description":23654,"extension":326,"meta":121969,"navigation":328,"path":121970,"seo":121971,"stem":121972,"__hash__":121973},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121630,"toc":121967},[121631,121634,121639,121642,121888,121893,121896,121932,121935,121964],[10,121632,121628],{"id":121633},"_4-命令教程长期积累",[38,121635,121636],{},[41,121637,121638],{},"大多数命令",[19,121640,121641],{},"常用 Linux 命令速查：",[389,121643,121645],{"className":117489,"code":121644,"language":117491,"meta":316,"style":316},"# 文件与目录\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",[395,121646,121647,121652,121659,121666,121674,121681,121688,121696,121704,121711,121718,121726,121730,121735,121742,121750,121757,121761,121766,121773,121781,121789,121797,121805,121809,121814,121822,121829,121836,121844,121852,121856,121861,121870,121879],{"__ignoreMap":316},[398,121648,121649],{"class":400,"line":401},[398,121650,121651],{"class":467},"# 文件与目录\n",[398,121653,121654,121656],{"class":400,"line":317},[398,121655,26954],{"class":2239},[398,121657,121658],{"class":467},"        # 列出目录内容\n",[398,121660,121661,121663],{"class":400,"line":320},[398,121662,101469],{"class":457},[398,121664,121665],{"class":467},"        # 切换目录\n",[398,121667,121668,121671],{"class":400,"line":1470},[398,121669,121670],{"class":457},"pwd",[398,121672,121673],{"class":467},"       # 显示当前路径\n",[398,121675,121676,121678],{"class":400,"line":1476},[398,121677,101459],{"class":2239},[398,121679,121680],{"class":467},"     # 创建目录\n",[398,121682,121683,121685],{"class":400,"line":1490},[398,121684,25600],{"class":2239},[398,121686,121687],{"class":467},"        # 删除文件或目录\n",[398,121689,121690,121693],{"class":400,"line":1496},[398,121691,121692],{"class":2239},"cp",[398,121694,121695],{"class":467},"        # 复制文件或目录\n",[398,121697,121698,121701],{"class":400,"line":1587},[398,121699,121700],{"class":2239},"mv",[398,121702,121703],{"class":467},"        # 移动\u002F重命名文件或目录\n",[398,121705,121706,121708],{"class":400,"line":1593},[398,121707,101476],{"class":2239},[398,121709,121710],{"class":467},"     # 创建空文件\n",[398,121712,121713,121715],{"class":400,"line":1605},[398,121714,120958],{"class":2239},[398,121716,121717],{"class":467},"       # 查看文件内容\n",[398,121719,121720,121723],{"class":400,"line":1888},[398,121721,121722],{"class":2239},"head\u002Ftail",[398,121724,121725],{"class":467}," # 查看文件头部\u002F尾部\n",[398,121727,121728],{"class":400,"line":1893},[398,121729,2676],{"emptyLinePlaceholder":328},[398,121731,121732],{"class":400,"line":1899},[398,121733,121734],{"class":467},"# 权限管理\n",[398,121736,121737,121739],{"class":400,"line":1904},[398,121738,24889],{"class":2239},[398,121740,121741],{"class":467},"     # 修改文件权限\n",[398,121743,121744,121747],{"class":400,"line":1918},[398,121745,121746],{"class":2239},"chown",[398,121748,121749],{"class":467},"     # 修改文件所有者\n",[398,121751,121752,121754],{"class":400,"line":1923},[398,121753,24854],{"class":2239},[398,121755,121756],{"class":467},"      # 以管理员身份执行\n",[398,121758,121759],{"class":400,"line":1929},[398,121760,2676],{"emptyLinePlaceholder":328},[398,121762,121763],{"class":400,"line":1950},[398,121764,121765],{"class":467},"# 系统信息\n",[398,121767,121768,121770],{"class":400,"line":1955},[398,121769,70397],{"class":2239},[398,121771,121772],{"class":467},"     # 系统信息\n",[398,121774,121775,121778],{"class":400,"line":1969},[398,121776,121777],{"class":2239},"df",[398,121779,121780],{"class":467},"        # 磁盘使用情况\n",[398,121782,121783,121786],{"class":400,"line":1974},[398,121784,121785],{"class":2239},"free",[398,121787,121788],{"class":467},"      # 内存使用情况\n",[398,121790,121791,121794],{"class":400,"line":2003},[398,121792,121793],{"class":2239},"top\u002Fhtop",[398,121795,121796],{"class":467},"  # 进程监控\n",[398,121798,121799,121802],{"class":400,"line":2008},[398,121800,121801],{"class":2239},"ps",[398,121803,121804],{"class":467},"        # 查看进程\n",[398,121806,121807],{"class":400,"line":2025},[398,121808,2676],{"emptyLinePlaceholder":328},[398,121810,121811],{"class":400,"line":2030},[398,121812,121813],{"class":467},"# 网络\n",[398,121815,121816,121819],{"class":400,"line":2035},[398,121817,121818],{"class":2239},"ping",[398,121820,121821],{"class":467},"      # 测试网络连通性\n",[398,121823,121824,121826],{"class":400,"line":2040},[398,121825,27042],{"class":2239},[398,121827,121828],{"class":467},"      # 发送 HTTP 请求\n",[398,121830,121831,121833],{"class":400,"line":2054},[398,121832,120482],{"class":2239},[398,121834,121835],{"class":467},"      # 下载文件\n",[398,121837,121838,121841],{"class":400,"line":2059},[398,121839,121840],{"class":2239},"ssh",[398,121842,121843],{"class":467},"       # 远程登录\n",[398,121845,121846,121849],{"class":400,"line":2853},[398,121847,121848],{"class":2239},"scp",[398,121850,121851],{"class":467},"       # 远程文件传输\n",[398,121853,121854],{"class":400,"line":2867},[398,121855,2676],{"emptyLinePlaceholder":328},[398,121857,121858],{"class":400,"line":2875},[398,121859,121860],{"class":467},"# 包管理（Debian\u002FUbuntu）\n",[398,121862,121863,121865,121867],{"class":400,"line":2880},[398,121864,117561],{"class":2239},[398,121866,117540],{"class":513},[398,121868,121869],{"class":467},"   # 更新软件源\n",[398,121871,121872,121874,121876],{"class":400,"line":2886},[398,121873,117561],{"class":2239},[398,121875,24111],{"class":513},[398,121877,121878],{"class":467},"  # 安装软件包\n",[398,121880,121881,121883,121885],{"class":400,"line":2892},[398,121882,117561],{"class":2239},[398,121884,26272],{"class":513},[398,121886,121887],{"class":467},"   # 卸载软件包\n",[38,121889,121890],{"start":317},[41,121891,121892],{},"KDE Dolphin 以root打开",[19,121894,121895],{},"kde5",[389,121897,121899],{"className":117489,"code":121898,"language":117491,"meta":316,"style":316},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[395,121900,121901],{"__ignoreMap":316},[398,121902,121903,121906,121909,121912,121914,121916,121919,121922,121924,121927,121929],{"class":400,"line":401},[398,121904,121905],{"class":2239},"pkexec",[398,121907,121908],{"class":513}," env",[398,121910,121911],{"class":513}," DISPLAY=",[398,121913,28336],{"class":408},[398,121915,28394],{"class":513},[398,121917,121918],{"class":408},"$XAUTHORITY ",[398,121920,121921],{"class":513},"KDE_SESSION_VERSION=",[398,121923,721],{"class":457},[398,121925,121926],{"class":513}," KDE_FULL_SESSION=",[398,121928,1638],{"class":457},[398,121930,121931],{"class":513}," dolphin\n",[19,121933,121934],{},"kde6",[389,121936,121938],{"className":117489,"code":121937,"language":117491,"meta":316,"style":316},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[395,121939,121940],{"__ignoreMap":316},[398,121941,121942,121944,121946,121948,121950,121952,121954,121956,121958,121960,121962],{"class":400,"line":401},[398,121943,121905],{"class":2239},[398,121945,121908],{"class":513},[398,121947,121911],{"class":513},[398,121949,28336],{"class":408},[398,121951,28394],{"class":513},[398,121953,121918],{"class":408},[398,121955,121921],{"class":513},[398,121957,746],{"class":457},[398,121959,121926],{"class":513},[398,121961,1638],{"class":457},[398,121963,121931],{"class":513},[5403,121965,121966],{},"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":316,"searchDepth":317,"depth":317,"links":121968},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121628,"description":23654},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121975,"title":121976,"body":121977,"description":23654,"extension":326,"meta":121991,"navigation":328,"path":121992,"seo":121993,"stem":121994,"__hash__":121995},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":121978,"toc":121989},[121979,121982],[10,121980,121976],{"id":121981},"_5-各种环境配置",[19,121983,121984],{},[640,121985,121988],{"href":121986,"rel":121987},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[24142],"电控组环境搭建大全",{"title":316,"searchDepth":317,"depth":317,"links":121990},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121976,"description":23654},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":121997,"title":121998,"body":121999,"description":23654,"extension":326,"meta":122347,"navigation":328,"path":122348,"seo":122349,"stem":122350,"__hash__":122351},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":122000,"toc":122339},[122001,122004,122008,122012,122016,122021,122028,122032,122325,122329,122336],[10,122002,121998],{"id":122003},"_6-拓展功能",[343,122005,122007],{"id":122006},"_61-wine","6.1 Wine",[343,122009,122011],{"id":122010},"_62-android","6.2 Android",[14,122013,122015],{"id":122014},"_621-i卡a卡","6.2.1 I卡、A卡",[38,122017,122018],{},[41,122019,122020],{},"Wayland-Waydroid(体验超级好)",[19,122022,122023,122024],{},"Waydroid 官网与安装指南：",[640,122025,122026],{"href":122026,"rel":122027},"https:\u002F\u002Fwaydro.id\u002F",[24142],[14,122029,122031],{"id":122030},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[38,122033,122034],{},[41,122035,122036,122037,122039,122040,122044,122046,122049,122054,122251],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53909,122038],{},"BlissOS 官网下载：",[640,122041,122042],{"href":122042,"rel":122043},"https:\u002F\u002Fblissos.org\u002F",[24142],[53909,122045],{},[1738,122047],{"alt":316,"src":122048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[38,122050,122051],{"start":320},[41,122052,122053],{},"比较推荐的配置",[389,122055,122057],{"className":117489,"code":122056,"language":117491,"meta":316,"style":316},"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",[395,122058,122059,122066,122076,122086,122096,122108,122118,122125,122135,122144,122153,122163,122173,122182,122192,122202,122214,122224,122233,122243],{"__ignoreMap":316},[398,122060,122061,122064],{"class":400,"line":401},[398,122062,122063],{"class":2239},"qemu-system-x86_64",[398,122065,24956],{"class":457},[398,122067,122068,122071,122074],{"class":400,"line":317},[398,122069,122070],{"class":457},"        -M",[398,122072,122073],{"class":513}," q35,vmport=off",[398,122075,24956],{"class":457},[398,122077,122078,122081,122084],{"class":400,"line":320},[398,122079,122080],{"class":457},"        -accel",[398,122082,122083],{"class":513}," kvm",[398,122085,24956],{"class":457},[398,122087,122088,122091,122094],{"class":400,"line":1470},[398,122089,122090],{"class":457},"        -cpu",[398,122092,122093],{"class":513}," qemu64,+sse3,+sse4.2",[398,122095,24956],{"class":457},[398,122097,122098,122101,122104,122106],{"class":400,"line":1476},[398,122099,122100],{"class":457},"        -smp",[398,122102,122103],{"class":513}," 8,cores=",[398,122105,695],{"class":457},[398,122107,24956],{"class":457},[398,122109,122110,122113,122116],{"class":400,"line":1490},[398,122111,122112],{"class":457},"        -m",[398,122114,122115],{"class":513}," 6G",[398,122117,24956],{"class":457},[398,122119,122120,122123],{"class":400,"line":1496},[398,122121,122122],{"class":457},"        -usb",[398,122124,24956],{"class":457},[398,122126,122127,122130,122133],{"class":400,"line":1587},[398,122128,122129],{"class":457},"        -device",[398,122131,122132],{"class":513}," virtio-tablet",[398,122134,24956],{"class":457},[398,122136,122137,122139,122142],{"class":400,"line":1593},[398,122138,122129],{"class":457},[398,122140,122141],{"class":513}," virtio-keyboard",[398,122143,24956],{"class":457},[398,122145,122146,122148,122151],{"class":400,"line":1605},[398,122147,122129],{"class":457},[398,122149,122150],{"class":513}," usb-tablet",[398,122152,24956],{"class":457},[398,122154,122155,122158,122161],{"class":400,"line":1888},[398,122156,122157],{"class":457},"        -bios",[398,122159,122160],{"class":513}," OVMF-pure-efi64.fd",[398,122162,24956],{"class":457},[398,122164,122165,122168,122171],{"class":400,"line":1893},[398,122166,122167],{"class":457},"        -net",[398,122169,122170],{"class":513}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[398,122172,24956],{"class":457},[398,122174,122175,122177,122180],{"class":400,"line":1899},[398,122176,122167],{"class":457},[398,122178,122179],{"class":513}," nic,model=virtio",[398,122181,24956],{"class":457},[398,122183,122184,122187,122190],{"class":400,"line":1904},[398,122185,122186],{"class":457},"        -audio",[398,122188,122189],{"class":513}," sdl,model=hda",[398,122191,24956],{"class":457},[398,122193,122194,122197,122200],{"class":400,"line":1918},[398,122195,122196],{"class":457},"        -display",[398,122198,122199],{"class":513}," sdl,gl=on,show-cursor=on",[398,122201,24956],{"class":457},[398,122203,122204,122206,122209,122212],{"class":400,"line":1923},[398,122205,122129],{"class":457},[398,122207,122208],{"class":513}," virtio-vga-gl,xres=1920,yres=",[398,122210,122211],{"class":457},"1080",[398,122213,24956],{"class":457},[398,122215,122216,122219,122222],{"class":400,"line":1929},[398,122217,122218],{"class":457},"        -drive",[398,122220,122221],{"class":513}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[398,122223,24956],{"class":457},[398,122225,122226,122228,122231],{"class":400,"line":1950},[398,122227,122218],{"class":457},[398,122229,122230],{"class":513}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[398,122232,24956],{"class":457},[398,122234,122235,122238,122241],{"class":400,"line":1955},[398,122236,122237],{"class":457},"        -monitor",[398,122239,122240],{"class":513}," stdio",[398,122242,24956],{"class":457},[398,122244,122245,122248],{"class":400,"line":1969},[398,122246,122247],{"class":457},"        -serial",[398,122249,122250],{"class":513}," none\n",[38,122252,122253],{"start":1476},[41,122254,122255,122256],{},"常用操作：",[38,122257,122258,122261,122317],{},[41,122259,122260],{},"全屏：Ctrl+Alt+F",[41,122262,122263,122264,122269],{},"adb调试",[38,122265,122266],{},[41,122267,122268],{},"使Linux与Android用ADB连接。",[389,122270,122272],{"className":117489,"code":122271,"language":117491,"meta":316,"style":316},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[395,122273,122274,122279,122290,122295,122307,122312],{"__ignoreMap":316},[398,122275,122276],{"class":400,"line":401},[398,122277,122278],{"class":467},"# 连接安卓\n",[398,122280,122281,122284,122287],{"class":400,"line":317},[398,122282,122283],{"class":2239},"adb",[398,122285,122286],{"class":513}," connect",[398,122288,122289],{"class":457}," 127.0.0.1\n",[398,122291,122292],{"class":400,"line":320},[398,122293,122294],{"class":467},"# 打开shell\n",[398,122296,122297,122299,122301,122304],{"class":400,"line":1470},[398,122298,122283],{"class":2239},[398,122300,27076],{"class":457},[398,122302,122303],{"class":513}," 127.0.0.1:5555",[398,122305,122306],{"class":513}," shell\n",[398,122308,122309],{"class":400,"line":1476},[398,122310,122311],{"class":467},"# 使用root权限\n",[398,122313,122314],{"class":400,"line":1490},[398,122315,122316],{"class":2239},"su\n",[41,122318,122319,122320],{},"中文输入法",[38,122321,122322],{},[41,122323,122324],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[343,122326,122328],{"id":122327},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,122330,122331,122332],{},"rEFInd 官网与文档：",[640,122333,122334],{"href":122334,"rel":122335},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[24142],[5403,122337,122338],{},"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":316,"searchDepth":317,"depth":317,"links":122340},[122341,122342,122346],{"id":122006,"depth":317,"text":122007},{"id":122010,"depth":317,"text":122011,"children":122343},[122344,122345],{"id":122014,"depth":320,"text":122015},{"id":122030,"depth":320,"text":122031},{"id":122327,"depth":317,"text":122328},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":121998,"description":23654},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122353,"title":122354,"body":122355,"description":23654,"extension":326,"meta":125654,"navigation":328,"path":125655,"seo":125656,"stem":125657,"__hash__":125658},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122356,"toc":125628},[122357,122360,122364,122367,122374,122624,122627,122699,122702,122706,122710,122715,122718,122721,122724,122729,122732,122735,122738,122743,122746,122751,122754,122757,122762,122765,122770,122773,122777,122781,122784,122789,122792,122806,122809,122812,122821,122824,122833,122836,122839,122848,122851,122860,122863,122866,122875,122878,122881,122896,122899,122902,122911,122916,122919,122922,122931,122934,122943,122946,122955,122958,122967,122972,122975,122983,122988,122991,123000,123003,123011,123016,123019,123028,123031,123034,123038,123041,123046,123049,123054,123068,123073,123078,123089,123094,123100,123105,123120,123125,123128,123133,123138,123143,123151,123156,123163,123168,123179,123184,123187,123191,123194,123197,123202,123205,123224,123229,123232,123241,123246,123249,123271,123274,123304,123307,123312,123315,123329,123334,123353,123356,123359,123364,123376,123381,123386,123389,123394,123397,123412,123415,123420,123425,123429,123434,123474,123477,123481,123487,123493,123498,123501,123508,123513,123520,123523,123526,123533,123547,123550,123610,123613,123627,123639,123642,123645,123648,123712,123715,123718,123721,123741,123744,123749,123756,123760,123763,123767,123772,123777,123781,123784,123787,123829,123834,123837,123859,123874,123876,123881,123893,123953,123955,123957,124011,124013,124015,124021,124026,124029,124034,124038,124041,124103,124108,124111,124113,124117,124129,124211,124213,124215,124269,124275,124277,124281,124286,124288,124293,124297,124317,124352,124356,124359,124362,124365,124372,124375,124387,124390,124405,124408,124427,124475,124478,124495,124498,124512,124517,124520,124529,124544,124556,124594,124599,124608,124613,124618,124644,124653,124657,124661,124666,124669,124673,124677,124682,124685,124690,124693,124698,124701,124706,124709,124713,124718,124721,124726,124729,124733,124738,124741,124746,124749,124754,124757,124761,124766,124769,124774,124777,124782,124785,124789,124794,124797,124802,124805,124810,124813,124818,124821,124826,124829,124834,124837,124841,124846,124849,124854,124861,124865,124870,124873,124878,124881,124885,124890,124893,124896,124899,124902,124905,124909,124912,124922,124927,124932,124954,124959,124964,124971,124975,124980,124983,124986,124991,124994,124997,125000,125003,125006,125009,125012,125015,125018,125021,125024,125027,125032,125037,125042,125047,125052,125057,125062,125065,125069,125072,125076,125081,125086,125091,125096,125100,125106,125114,125119,125122,125127,125142,125145,125150,125184,125199,125202,125257,125283,125295,125298,125307,125310,125325,125330,125333,125339,125344,125347,125352,125355,125360,125365,125372,125375,125390,125393,125428,125433,125441,125479,125482,125485,125490,125493,125498,125509,125543,125548,125551,125560,125565,125571,125574,125579,125588,125593,125596,125599,125604,125612,125615,125620,125625],[10,122358,122354],{"id":122359},"_7-其他操作",[343,122361,122363],{"id":122362},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,122365,122366],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,122368,122369,122370,122373],{},"进入工控机的硬盘目录，进入",[395,122371,122372],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[389,122375,122379],{"className":122376,"code":122377,"language":122378,"meta":316,"style":316},"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",[395,122380,122381,122389,122400,122407,122414,122426,122433,122445,122456,122467,122474,122481,122488,122500,122512,122519,122531,122543,122550,122562,122574,122586,122597,122604,122615],{"__ignoreMap":316},[398,122382,122383,122386],{"class":400,"line":401},[398,122384,122385],{"class":51493},"network",[398,122387,122388],{"class":408},": \n",[398,122390,122391,122394,122396,122398],{"class":400,"line":317},[398,122392,122393],{"class":51493},"  version",[398,122395,51630],{"class":408},[398,122397,486],{"class":457},[398,122399,2950],{"class":408},[398,122401,122402,122405],{"class":400,"line":320},[398,122403,122404],{"class":51493},"  wifis",[398,122406,122388],{"class":408},[398,122408,122409,122412],{"class":400,"line":1470},[398,122410,122411],{"class":51493},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[398,122413,122388],{"class":408},[398,122415,122416,122419,122421,122424],{"class":400,"line":1476},[398,122417,122418],{"class":51493},"      renderer",[398,122420,51630],{"class":408},[398,122422,122423],{"class":513},"NetworkManager",[398,122425,2950],{"class":408},[398,122427,122428,122431],{"class":400,"line":1490},[398,122429,122430],{"class":51493},"      match",[398,122432,122388],{"class":408},[398,122434,122435,122438,122440,122443],{"class":400,"line":1496},[398,122436,122437],{"class":51493},"        name",[398,122439,51630],{"class":408},[398,122441,122442],{"class":513},"\"wlan0\"",[398,122444,2950],{"class":408},[398,122446,122447,122450,122452,122454],{"class":400,"line":1587},[398,122448,122449],{"class":51493},"      dhcp4",[398,122451,51630],{"class":408},[398,122453,1638],{"class":457},[398,122455,2950],{"class":408},[398,122457,122458,122461,122463,122465],{"class":400,"line":1593},[398,122459,122460],{"class":51493},"      dhcp6",[398,122462,51630],{"class":408},[398,122464,1638],{"class":457},[398,122466,2950],{"class":408},[398,122468,122469,122472],{"class":400,"line":1605},[398,122470,122471],{"class":51493},"      access-points",[398,122473,122388],{"class":408},[398,122475,122476,122479],{"class":400,"line":1888},[398,122477,122478],{"class":513},"        \"EMIS_Vinci_Robocon_5G\"",[398,122480,122388],{"class":408},[398,122482,122483,122486],{"class":400,"line":1893},[398,122484,122485],{"class":51493},"          auth",[398,122487,122388],{"class":408},[398,122489,122490,122493,122495,122498],{"class":400,"line":1899},[398,122491,122492],{"class":51493},"            key-management",[398,122494,51630],{"class":408},[398,122496,122497],{"class":513},"\"psk\"",[398,122499,2950],{"class":408},[398,122501,122502,122505,122507,122510],{"class":400,"line":1904},[398,122503,122504],{"class":51493},"            password",[398,122506,51630],{"class":408},[398,122508,122509],{"class":513},"\"vinci666\"",[398,122511,2950],{"class":408},[398,122513,122514,122517],{"class":400,"line":1918},[398,122515,122516],{"class":51493},"          networkmanager",[398,122518,122388],{"class":408},[398,122520,122521,122524,122526,122529],{"class":400,"line":1923},[398,122522,122523],{"class":51493},"            uuid",[398,122525,51630],{"class":408},[398,122527,122528],{"class":513},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[398,122530,2950],{"class":408},[398,122532,122533,122536,122538,122541],{"class":400,"line":1929},[398,122534,122535],{"class":51493},"            name",[398,122537,51630],{"class":408},[398,122539,122540],{"class":513},"\"EMIS_Vinci_Robocon_5G\"",[398,122542,2950],{"class":408},[398,122544,122545,122548],{"class":400,"line":1950},[398,122546,122547],{"class":51493},"            passthrough",[398,122549,122388],{"class":408},[398,122551,122552,122555,122557,122560],{"class":400,"line":1955},[398,122553,122554],{"class":51493},"              wifi-security.auth-alg",[398,122556,51630],{"class":408},[398,122558,122559],{"class":513},"\"open\"",[398,122561,2950],{"class":408},[398,122563,122564,122567,122569,122572],{"class":400,"line":1969},[398,122565,122566],{"class":51493},"              ipv6.addr-gen-mode",[398,122568,51630],{"class":408},[398,122570,122571],{"class":513},"\"default\"",[398,122573,2950],{"class":408},[398,122575,122576,122579,122581,122584],{"class":400,"line":1974},[398,122577,122578],{"class":51493},"              ipv6.ip6-privacy",[398,122580,51630],{"class":408},[398,122582,122583],{"class":513},"\"-1\"",[398,122585,2950],{"class":408},[398,122587,122588,122591,122593,122595],{"class":400,"line":2003},[398,122589,122590],{"class":51493},"              proxy._",[398,122592,51630],{"class":408},[398,122594,7929],{"class":513},[398,122596,2950],{"class":408},[398,122598,122599,122602],{"class":400,"line":2008},[398,122600,122601],{"class":51493},"      networkmanager",[398,122603,122388],{"class":408},[398,122605,122606,122609,122611,122613],{"class":400,"line":2025},[398,122607,122608],{"class":51493},"        uuid",[398,122610,51630],{"class":408},[398,122612,122528],{"class":513},[398,122614,2950],{"class":408},[398,122616,122617,122619,122621],{"class":400,"line":2030},[398,122618,122437],{"class":51493},[398,122620,51630],{"class":408},[398,122622,122623],{"class":513},"\"EMIS_Vinci_Robocon_5G\"\n",[19,122625,122626],{},"将其改为新wifi的名和密码：",[389,122628,122630],{"className":122376,"code":122629,"language":122378,"meta":316,"style":316},"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",[395,122631,122632,122638,122647,122653,122660,122669,122677,122683,122689],{"__ignoreMap":316},[398,122633,122634,122636],{"class":400,"line":401},[398,122635,122385],{"class":51493},[398,122637,4015],{"class":408},[398,122639,122640,122642,122644],{"class":400,"line":317},[398,122641,122393],{"class":51493},[398,122643,51630],{"class":408},[398,122645,122646],{"class":457},"2\n",[398,122648,122649,122651],{"class":400,"line":320},[398,122650,122404],{"class":51493},[398,122652,4015],{"class":408},[398,122654,122655,122658],{"class":400,"line":1470},[398,122656,122657],{"class":51493},"    wlan0",[398,122659,4015],{"class":408},[398,122661,122662,122664,122666],{"class":400,"line":1476},[398,122663,122449],{"class":51493},[398,122665,51630],{"class":408},[398,122667,122668],{"class":457},"true\n",[398,122670,122671,122673,122675],{"class":400,"line":1490},[398,122672,122460],{"class":51493},[398,122674,51630],{"class":408},[398,122676,122668],{"class":457},[398,122678,122679,122681],{"class":400,"line":1496},[398,122680,122471],{"class":51493},[398,122682,4015],{"class":408},[398,122684,122685,122687],{"class":400,"line":1587},[398,122686,122478],{"class":513},[398,122688,4015],{"class":408},[398,122690,122691,122694,122696],{"class":400,"line":1593},[398,122692,122693],{"class":51493},"          password",[398,122695,51630],{"class":408},[398,122697,122698],{"class":513},"\"vinci666\"\n",[19,122700,122701],{},"工控机开机即可连上网。",[343,122703,122705],{"id":122704},"_72-ssh远程开发","7.2 SSH远程开发",[14,122707,122709],{"id":122708},"_721-环境准备","7.2.1 环境准备",[19,122711,122712],{},[23,122713,122714],{},"1.硬件准备",[19,122716,122717],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,122719,122720],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,122722,122723],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,122725,122726],{},[23,122727,122728],{},"2.设置固定IP",[19,122730,122731],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,122733,122734],{},"1.进入设置界面",[19,122736,122737],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,122739,122740],{},[1738,122741],{"alt":316,"src":122742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,122744,122745],{},"2.配置所连接的网络",[19,122747,122748],{},[1738,122749],{"alt":316,"src":122750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,122752,122753],{},"3.设置固定IP",[19,122755,122756],{},"查看当前IP地址。",[19,122758,122759],{},[1738,122760],{"alt":316,"src":122761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,122763,122764],{},"设置固定IP。",[19,122766,122767],{},[1738,122768],{"alt":316,"src":122769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,122771,122772],{},"至此，IP配置完毕。",[14,122774,122776],{"id":122775},"_722-环境搭建","7.2.2 环境搭建",[19,122778,122779],{},[23,122780,96],{},[19,122782,122783],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,122785,122786],{},[23,122787,122788],{},"实现",[19,122790,122791],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[38,122793,122794,122797,122800,122803],{},[41,122795,122796],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[41,122798,122799],{},"远程主机启动SSH服务；",[41,122801,122802],{},"本地主机登陆远程主机；",[41,122804,122805],{},"实现数据传输。",[19,122807,122808],{},"1.安装SSH客户端与服务端",[19,122810,122811],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[389,122813,122815],{"className":121009,"code":122814,"language":121011,"meta":121012,"style":316}," sudo apt install openssh-server\n",[395,122816,122817],{"__ignoreMap":316},[398,122818,122819],{"class":400,"line":401},[398,122820,122814],{},[19,122822,122823],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[389,122825,122827],{"className":121009,"code":122826,"language":121011,"meta":121012,"style":316},"sudo apt install openssh-client\n",[395,122828,122829],{"__ignoreMap":316},[398,122830,122831],{"class":400,"line":401},[398,122832,122826],{},[19,122834,122835],{},"2.远程主机启动SSH服务",[19,122837,122838],{},"远程主机启动 ssh 服务命令如下：",[389,122840,122842],{"className":121009,"code":122841,"language":121011,"meta":121012,"style":316},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[395,122843,122844],{"__ignoreMap":316},[398,122845,122846],{"class":400,"line":401},[398,122847,122841],{},[19,122849,122850],{},"启动后可使用如下命令查看服务是否正常运行：",[389,122852,122854],{"className":121009,"code":122853,"language":121011,"meta":121012,"style":316},"ps -e | grep ssh\n",[395,122855,122856],{"__ignoreMap":316},[398,122857,122858],{"class":400,"line":401},[398,122859,122853],{},[19,122861,122862],{},"如果启动成功，会包含 sshd 程序。",[19,122864,122865],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[389,122867,122869],{"className":121009,"code":122868,"language":121011,"meta":121012,"style":316},"sudo systemctl enable ssh\n",[395,122870,122871],{"__ignoreMap":316},[398,122872,122873],{"class":400,"line":401},[398,122874,122868],{},[19,122876,122877],{},"3.本地远程登录",[19,122879,122880],{},"登录远程主机可以调用如下命令:",[389,122882,122884],{"className":117489,"code":122883,"language":117491,"meta":316,"style":316},"ssh -X 用户名@ip地址\n",[395,122885,122886],{"__ignoreMap":316},[398,122887,122888,122890,122893],{"class":400,"line":401},[398,122889,121840],{"class":2239},[398,122891,122892],{"class":457}," -X",[398,122894,122895],{"class":513}," 用户名@ip地址\n",[19,122897,122898],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,122900,122901],{},"如果退出，可以调用exit命令：",[389,122903,122905],{"className":121009,"code":122904,"language":121011,"meta":121012,"style":316},"exit\n",[395,122906,122907],{"__ignoreMap":316},[398,122908,122909],{"class":400,"line":401},[398,122910,122904],{},[19,122912,122913],{},[23,122914,122915],{},"4.实现数据传输",[19,122917,122918],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,122920,122921],{},"上传文件指令格式如下：",[389,122923,122925],{"className":121009,"code":122924,"language":121011,"meta":121012,"style":316},"scp 本地文件路径 账号@ip:路径\n",[395,122926,122927],{"__ignoreMap":316},[398,122928,122929],{"class":400,"line":401},[398,122930,122924],{},[19,122932,122933],{},"上传文件夹指令格式如下：",[389,122935,122937],{"className":121009,"code":122936,"language":121011,"meta":121012,"style":316},"scp -r 本地文件夹路径 账号@ip:路径\n",[395,122938,122939],{"__ignoreMap":316},[398,122940,122941],{"class":400,"line":401},[398,122942,122936],{},[19,122944,122945],{},"下载文件指令格式如下：",[389,122947,122949],{"className":121009,"code":122948,"language":121011,"meta":121012,"style":316},"scp 账号@ip:路径 本地文件夹路径\n",[395,122950,122951],{"__ignoreMap":316},[398,122952,122953],{"class":400,"line":401},[398,122954,122948],{},[19,122956,122957],{},"下载文件夹指令格式如下：",[389,122959,122961],{"className":121009,"code":122960,"language":121011,"meta":121012,"style":316},"scp -r 账号@ip:路径 本地文件夹路径\n",[395,122962,122963],{"__ignoreMap":316},[398,122964,122965],{"class":400,"line":401},[398,122966,122960],{},[19,122968,122969],{},[23,122970,122971],{},"优化",[19,122973,122974],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[38,122976,122977,122980],{},[41,122978,122979],{},"本地生成密钥对；",[41,122981,122982],{},"将公钥上传至远程主机。",[19,122984,122985],{},[23,122986,122987],{},"1.生成密钥对",[19,122989,122990],{},"本地客户端生成公私钥：（一路回车默认即可）",[389,122992,122994],{"className":121009,"code":122993,"language":121011,"meta":121012,"style":316},"ssh-keygen\n",[395,122995,122996],{"__ignoreMap":316},[398,122997,122998],{"class":400,"line":401},[398,122999,122993],{},[19,123001,123002],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[38,123004,123005,123008],{},[41,123006,123007],{},"id_rsa （私钥）；",[41,123009,123010],{},"id_rsa.pub (公钥)。",[19,123012,123013],{},[23,123014,123015],{},"2.公钥上传",[19,123017,123018],{},"上传指令如下：",[389,123020,123022],{"className":121009,"code":123021,"language":121011,"meta":121012,"style":316},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[395,123023,123024],{"__ignoreMap":316},[398,123025,123026],{"class":400,"line":401},[398,123027,123021],{},[19,123029,123030],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,123032,123033],{},"以后再远程登录就无需录入密码了。",[14,123035,123037],{"id":123036},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,123039,123040],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,123042,123043],{},[23,123044,123045],{},"1.准备工作",[19,123047,123048],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,123050,123051],{},[23,123052,123053],{},"2.为VScode安装远程开发插件",[19,123055,123056,123057,123060,123061,123064,123065,28578],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[395,123058,123059],{},"扩展：商店","的搜索栏输入",[395,123062,123063],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[395,123066,123067],{},"安装",[19,123069,123070],{},[1738,123071],{"alt":316,"src":123072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,123074,123075],{},[23,123076,123077],{},"3.配置远程连接",[19,123079,123080,123081,123084,123085,123088],{},"步骤1：使用快捷键",[395,123082,123083],{},"ctrl + shift + p","打开命令输入窗口，并输入",[395,123086,123087],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,123090,123091],{},[1738,123092],{"alt":316,"src":123093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,123095,123096,123097,28578],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[395,123098,123099],{},"Add New SSH Host",[19,123101,123102],{},[1738,123103],{"alt":316,"src":123104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,123106,123107,123108,123111,123112,123115,123116,123119],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[395,123109,123110],{},"ssh +X ubuntu@192.168.43.164","，其中，",[395,123113,123114],{},"ubuntu","需要替换为你的登录用户名，",[395,123117,123118],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,123121,123122],{},[1738,123123],{"alt":316,"src":123124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,123126,123127],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,123129,123130],{},[1738,123131],{"alt":316,"src":123132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,123134,123135],{},[1738,123136],{"alt":316,"src":123137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,123139,123140],{},[23,123141,123142],{},"4.使用",[19,123144,123145,123146,123084,123148,123150],{},"步骤1：继续使用快捷键",[395,123147,123083],{},[395,123149,123087],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,123152,123153],{},[1738,123154],{"alt":316,"src":123155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,123157,123158,123159,123162],{},"或者，也可以点击侧边栏的",[395,123160,123161],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,123164,123165],{},[1738,123166],{"alt":316,"src":123167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,123169,123170,123171,123174,123175,123178],{},"步骤2：选择菜单栏的",[395,123172,123173],{},"文件","下的",[395,123176,123177],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,123180,123181],{},[1738,123182],{"alt":316,"src":123183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,123185,123186],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[343,123188,123190],{"id":123189},"_73-远程桌面","7.3 远程桌面",[19,123192,123193],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,123195,123196],{},"我们选择使用VNC来看。",[38,123198,123199],{},[41,123200,123201],{},"安装VNC服务器：",[19,123203,123204],{},"这里以TigerVNC为例进行安装：",[389,123206,123208],{"className":117489,"code":123207,"language":117491,"meta":316,"style":316},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[395,123209,123210],{"__ignoreMap":316},[398,123211,123212,123214,123216,123218,123221],{"class":400,"line":401},[398,123213,24854],{"class":2239},[398,123215,117510],{"class":513},[398,123217,24111],{"class":513},[398,123219,123220],{"class":513}," tigervnc-standalone-server",[398,123222,123223],{"class":513}," tigervnc-common\n",[38,123225,123226],{"start":317},[41,123227,123228],{},"设置VNC密码：",[19,123230,123231],{},"为VNC用户设置密码，运行以下命令：",[389,123233,123235],{"className":117489,"code":123234,"language":117491,"meta":316,"style":316},"vncpasswd\n",[395,123236,123237],{"__ignoreMap":316},[398,123238,123239],{"class":400,"line":401},[398,123240,123234],{"class":2239},[38,123242,123243],{"start":320},[41,123244,123245],{},"配置VNC启动脚本:",[19,123247,123248],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[389,123250,123252],{"className":117489,"code":123251,"language":117491,"meta":316,"style":316},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[395,123253,123254,123263],{"__ignoreMap":316},[398,123255,123256,123258,123260],{"class":400,"line":401},[398,123257,101459],{"class":2239},[398,123259,29409],{"class":457},[398,123261,123262],{"class":513}," ~\u002F.vnc\n",[398,123264,123265,123268],{"class":400,"line":317},[398,123266,123267],{"class":2239},"nano",[398,123269,123270],{"class":513}," ~\u002F.vnc\u002Fxstartup\n",[19,123272,123273],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[389,123275,123277],{"className":117489,"code":123276,"language":117491,"meta":316,"style":316},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[395,123278,123279,123284,123292,123299],{"__ignoreMap":316},[398,123280,123281],{"class":400,"line":401},[398,123282,123283],{"class":467},"#!\u002Fbin\u002Fsh\n",[398,123285,123286,123289],{"class":400,"line":317},[398,123287,123288],{"class":457},"unset",[398,123290,123291],{"class":513}," SESSION_MANAGER\n",[398,123293,123294,123296],{"class":400,"line":320},[398,123295,123288],{"class":457},[398,123297,123298],{"class":513}," DBUS_SESSION_BUS_ADDRESS\n",[398,123300,123301],{"class":400,"line":1470},[398,123302,123303],{"class":2239},"gnome-session\n",[19,123305,123306],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[38,123308,123309],{"start":1470},[41,123310,123311],{},"给予执行权限：",[19,123313,123314],{},"为xstartup文件设置执行权限：",[389,123316,123318],{"className":117489,"code":123317,"language":117491,"meta":316,"style":316},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[395,123319,123320],{"__ignoreMap":316},[398,123321,123322,123324,123327],{"class":400,"line":401},[398,123323,24889],{"class":2239},[398,123325,123326],{"class":513}," +x",[398,123328,123270],{"class":513},[38,123330,123331],{"start":1476},[41,123332,123333],{},"启动VNC服务器：",[389,123335,123337],{"className":117489,"code":123336,"language":117491,"meta":316,"style":316},"vncserver -geometry 1920x1080 -localhost=0\n",[395,123338,123339],{"__ignoreMap":316},[398,123340,123341,123344,123347,123350],{"class":400,"line":401},[398,123342,123343],{"class":2239},"vncserver",[398,123345,123346],{"class":457}," -geometry",[398,123348,123349],{"class":513}," 1920x1080",[398,123351,123352],{"class":457}," -localhost=0\n",[19,123354,123355],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,123357,123358],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[38,123360,123361],{"start":1490},[41,123362,123363],{},"查看已开启的VNC服务器：",[389,123365,123367],{"className":117489,"code":123366,"language":117491,"meta":316,"style":316},"vncserver -list\n",[395,123368,123369],{"__ignoreMap":316},[398,123370,123371,123373],{"class":400,"line":401},[398,123372,123343],{"class":2239},[398,123374,123375],{"class":457}," -list\n",[19,123377,123378],{},[1738,123379],{"alt":316,"src":123380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[38,123382,123383],{"start":1496},[41,123384,123385],{},"连接到VNC服务器：",[19,123387,123388],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[38,123390,123391],{"start":1587},[41,123392,123393],{},"停止VNC服务器：",[19,123395,123396],{},"如果需要停止VNC服务器，可以使用以下命令：",[389,123398,123400],{"className":117489,"code":123399,"language":117491,"meta":316,"style":316},"vncserver -kill :1\n",[395,123401,123402],{"__ignoreMap":316},[398,123403,123404,123406,123409],{"class":400,"line":401},[398,123405,123343],{"class":2239},[398,123407,123408],{"class":457}," -kill",[398,123410,123411],{"class":513}," :1\n",[19,123413,123414],{},"将:1替换为你实际使用的显示编号。",[19,123416,123417],{},[1738,123418],{"alt":316,"src":123419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,123421,123422],{},[1738,123423],{"alt":316,"src":123424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[343,123426,123428],{"id":123427},"_74-usb端口设置","7.4 USB端口设置",[19,123430,123431],{},[23,123432,123433],{},"首先先配置好权限",[389,123435,123437],{"className":117489,"code":123436,"language":117491,"meta":316,"style":316},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[395,123438,123439,123444,123457,123464,123469],{"__ignoreMap":316},[398,123440,123441],{"class":400,"line":401},[398,123442,123443],{"class":467},"# 将用户权限提高\n",[398,123445,123446,123448,123450,123452,123455],{"class":400,"line":317},[398,123447,24854],{"class":2239},[398,123449,26767],{"class":513},[398,123451,26770],{"class":457},[398,123453,123454],{"class":513}," dialout",[398,123456,26775],{"class":408},[398,123458,123459,123461],{"class":400,"line":320},[398,123460,26794],{"class":2239},[398,123462,123463],{"class":513}," dialout\n",[398,123465,123466],{"class":400,"line":1470},[398,123467,123468],{"class":467},"# 查看下面命令是否输出dialout（若输出才正常）\n",[398,123470,123471],{"class":400,"line":1476},[398,123472,123473],{"class":2239},"groups\n",[19,123475,123476],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[14,123478,123480],{"id":123479},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,123482,123483,123486],{},[23,123484,123485],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,123488,123489,123492],{},[23,123490,123491],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,123494,123495],{},[23,123496,123497],{},"流程如下：",[19,123499,123500],{},"（1）.查找设备idVendor和idProduct",[19,123502,123503,123504,123507],{},"接入两个USB设备，在终端调用指令",[395,123505,123506],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,123509,123510],{},[1738,123511],{"alt":316,"src":123512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,123514,123515,123516,123519],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[395,123517,123518],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,123521,123522],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,123524,123525],{},"（2）.编写映射规则",[19,123527,123528,123529,123532],{},"在",[395,123530,123531],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[389,123534,123536],{"className":117489,"code":123535,"language":117491,"meta":316,"style":316},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[395,123537,123538],{"__ignoreMap":316},[398,123539,123540,123542,123544],{"class":400,"line":401},[398,123541,24854],{"class":2239},[398,123543,118776],{"class":513},[398,123545,123546],{"class":513}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,123548,123549],{},"输入如下内容：",[389,123551,123553],{"className":117489,"code":123552,"language":117491,"meta":316,"style":316},"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",[395,123554,123555,123585],{"__ignoreMap":316},[398,123556,123557,123560,123562,123565,123568,123571,123574,123576,123579,123582],{"class":400,"line":401},[398,123558,123559],{"class":408},"KERNEL",[398,123561,454],{"class":404},[398,123563,123564],{"class":513},"=\"ttyUSB*\",",[398,123566,123567],{"class":2239}," ATTRS",[398,123569,123570],{"class":513},"{idVendor}==",[398,123572,123573],{"class":2239},"\"10c4\"",[398,123575,780],{"class":2239},[398,123577,123578],{"class":513}," ATTRS{idProduct}==\"ea60\",",[398,123580,123581],{"class":513}," MODE:=\"0777\",",[398,123583,123584],{"class":513}," SYMLINK+=\"mylidar\"\n",[398,123586,123587,123589,123591,123593,123595,123597,123600,123602,123605,123607],{"class":400,"line":317},[398,123588,123559],{"class":408},[398,123590,454],{"class":404},[398,123592,123564],{"class":513},[398,123594,123567],{"class":2239},[398,123596,123570],{"class":513},[398,123598,123599],{"class":2239},"\"1a86\"",[398,123601,780],{"class":2239},[398,123603,123604],{"class":513}," ATTRS{idProduct}==\"7523\",",[398,123606,123581],{"class":513},[398,123608,123609],{"class":513}," SYMLINK+=\"mycar\"\n",[19,123611,123612],{},"代码解释：",[67,123614,123615,123618,123621,123624],{},[41,123616,123617],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[41,123619,123620],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[41,123622,123623],{},"SYMLINK是符号连接，即绑定的别名；",[41,123625,123626],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,123628,123629,123630,123633,123636],{},"***小提示：***",[23831,123631,123632],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[395,123634,123635],{},"\u002Fetc\u002Fudev\u002Frule.d",[23831,123637,123638],{},"目录即可。",[19,123640,123641],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,123643,123644],{},"（3）.使规则生效",[19,123646,123647],{},"在终端下输入如下指令：",[389,123649,123651],{"className":117489,"code":123650,"language":117491,"meta":316,"style":316},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[395,123652,123653,123658,123670,123681,123685,123690,123703],{"__ignoreMap":316},[398,123654,123655],{"class":400,"line":401},[398,123656,123657],{"class":467},"# Ubuntu用下方命令\n",[398,123659,123660,123662,123664,123667],{"class":400,"line":317},[398,123661,24854],{"class":2239},[398,123663,120241],{"class":513},[398,123665,123666],{"class":513}," udev",[398,123668,123669],{"class":513}," reload\n",[398,123671,123672,123674,123676,123678],{"class":400,"line":320},[398,123673,24854],{"class":2239},[398,123675,120241],{"class":513},[398,123677,123666],{"class":513},[398,123679,123680],{"class":513}," restart\n",[398,123682,123683],{"class":400,"line":1470},[398,123684,2676],{"emptyLinePlaceholder":328},[398,123686,123687],{"class":400,"line":1476},[398,123688,123689],{"class":467},"#Fedora用下方命令\n",[398,123691,123692,123694,123697,123700],{"class":400,"line":1490},[398,123693,24854],{"class":2239},[398,123695,123696],{"class":513}," udevadm",[398,123698,123699],{"class":513}," control",[398,123701,123702],{"class":457}," --reload\n",[398,123704,123705,123707,123709],{"class":400,"line":1496},[398,123706,24854],{"class":2239},[398,123708,123696],{"class":513},[398,123710,123711],{"class":513}," trigger\n",[19,123713,123714],{},"再重新插拔设备即可。",[19,123716,123717],{},"（4）.测试",[19,123719,123720],{},"终端下输入如下指令",[389,123722,123724],{"className":117489,"code":123723,"language":117491,"meta":316,"style":316},"ll \u002Fdev | grep ttyUSB\n",[395,123725,123726],{"__ignoreMap":316},[398,123727,123728,123731,123734,123736,123738],{"class":400,"line":401},[398,123729,123730],{"class":2239},"ll",[398,123732,123733],{"class":513}," \u002Fdev",[398,123735,25387],{"class":404},[398,123737,30429],{"class":2239},[398,123739,123740],{"class":513}," ttyUSB\n",[19,123742,123743],{},"运行结果如下：",[19,123745,123746],{},[1738,123747],{"alt":316,"src":123748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,123750,123751,123752,123755],{},"也可以多次插拔USB设备，会发现设备端口",[395,123753,123754],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,123757,123758],{},[23,123759,118157],{},[19,123761,123762],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[14,123764,123766],{"id":123765},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,123768,123769,123771],{},[23,123770,123485],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,123773,123774,123776],{},[23,123775,123491],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,123778,123779],{},[23,123780,123497],{},[19,123782,123783],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,123785,123786],{},"调用如下指令查看第一台雷达的USB信息：",[389,123788,123790],{"className":117489,"code":123789,"language":117491,"meta":316,"style":316},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[395,123791,123792,123812],{"__ignoreMap":316},[398,123793,123794,123797,123799,123802,123805,123807,123809],{"class":400,"line":401},[398,123795,123796],{"class":2239},"udevadm",[398,123798,70014],{"class":513},[398,123800,123801],{"class":457}," --attribute-walk",[398,123803,123804],{"class":457}," --name=\u002Fdev\u002FttyUSB0",[398,123806,25387],{"class":404},[398,123808,30429],{"class":2239},[398,123810,123811],{"class":513}," KERNELS\n",[398,123813,123814,123816,123818,123820,123823,123825,123827],{"class":400,"line":317},[398,123815,123796],{"class":2239},[398,123817,70014],{"class":513},[398,123819,123801],{"class":457},[398,123821,123822],{"class":457}," --name=\u002Fdev\u002FttyACM0",[398,123824,25387],{"class":404},[398,123826,30429],{"class":2239},[398,123828,123811],{"class":513},[19,123830,123831],{},[1738,123832],{"alt":316,"src":123833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,123835,123836],{},"调用如下指令查看第二台雷达的USB信息：",[389,123838,123840],{"className":117489,"code":123839,"language":117491,"meta":316,"style":316},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[395,123841,123842],{"__ignoreMap":316},[398,123843,123844,123846,123848,123850,123853,123855,123857],{"class":400,"line":401},[398,123845,123796],{"class":2239},[398,123847,70014],{"class":513},[398,123849,123801],{"class":457},[398,123851,123852],{"class":457}," --name=\u002Fdev\u002FttyUSB1",[398,123854,25387],{"class":404},[398,123856,30429],{"class":2239},[398,123858,123811],{"class":513},[19,123860,123861,123862,123865,123866,123869,123870,123873],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[395,123863,123864],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[395,123867,123868],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[23,123871,123872],{},"唯一性标识","”。",[19,123875,123525],{},[19,123877,123528,123878,123880],{},[395,123879,123531],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[389,123882,123883],{"className":117489,"code":123535,"language":117491,"meta":316,"style":316},[395,123884,123885],{"__ignoreMap":316},[398,123886,123887,123889,123891],{"class":400,"line":401},[398,123888,24854],{"class":2239},[398,123890,118776],{"class":513},[398,123892,123546],{"class":513},[389,123894,123896],{"className":117489,"code":123895,"language":117491,"meta":316,"style":316},"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",[395,123897,123898,123927],{"__ignoreMap":316},[398,123899,123900,123902,123904,123906,123909,123911,123914,123917,123919,123922,123924],{"class":400,"line":401},[398,123901,123559],{"class":408},[398,123903,454],{"class":404},[398,123905,123564],{"class":513},[398,123907,123908],{"class":408}," KERNELS",[398,123910,454],{"class":404},[398,123912,123913],{"class":513},"=\"1-1.3:1.0\",",[398,123915,123916],{"class":2239}," MODE:",[398,123918,454],{"class":513},[398,123920,123921],{"class":2239},"\"0777\"",[398,123923,780],{"class":2239},[398,123925,123926],{"class":513}," SYMLINK+=\"rplidar_front\"\n",[398,123928,123929,123931,123933,123935,123937,123939,123942,123944,123946,123948,123950],{"class":400,"line":317},[398,123930,123559],{"class":408},[398,123932,454],{"class":404},[398,123934,123564],{"class":513},[398,123936,123908],{"class":408},[398,123938,454],{"class":404},[398,123940,123941],{"class":513},"=\"1-1.4:1.0\",",[398,123943,123916],{"class":2239},[398,123945,454],{"class":513},[398,123947,123921],{"class":2239},[398,123949,780],{"class":2239},[398,123951,123952],{"class":513}," SYMLINK+=\"rplidar_back\"\n",[19,123954,123644],{},[19,123956,123647],{},[389,123958,123959],{"className":117489,"code":123650,"language":117491,"meta":316,"style":316},[395,123960,123961,123965,123975,123985,123989,123993,124003],{"__ignoreMap":316},[398,123962,123963],{"class":400,"line":401},[398,123964,123657],{"class":467},[398,123966,123967,123969,123971,123973],{"class":400,"line":317},[398,123968,24854],{"class":2239},[398,123970,120241],{"class":513},[398,123972,123666],{"class":513},[398,123974,123669],{"class":513},[398,123976,123977,123979,123981,123983],{"class":400,"line":320},[398,123978,24854],{"class":2239},[398,123980,120241],{"class":513},[398,123982,123666],{"class":513},[398,123984,123680],{"class":513},[398,123986,123987],{"class":400,"line":1470},[398,123988,2676],{"emptyLinePlaceholder":328},[398,123990,123991],{"class":400,"line":1476},[398,123992,123689],{"class":467},[398,123994,123995,123997,123999,124001],{"class":400,"line":1490},[398,123996,24854],{"class":2239},[398,123998,123696],{"class":513},[398,124000,123699],{"class":513},[398,124002,123702],{"class":457},[398,124004,124005,124007,124009],{"class":400,"line":1496},[398,124006,24854],{"class":2239},[398,124008,123696],{"class":513},[398,124010,123711],{"class":513},[19,124012,123714],{},[19,124014,123717],{},[19,124016,123720,124017,124020],{},[395,124018,124019],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,124022,124023],{},[1738,124024],{"alt":316,"src":124025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,124027,124028],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,124030,124031,124033],{},[23,124032,118157],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[14,124035,124037],{"id":124036},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,124039,124040],{},"（1）.查看所连接的主机USB接口的信息",[389,124042,124044],{"className":117489,"code":124043,"language":117491,"meta":316,"style":316},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[395,124045,124046,124076],{"__ignoreMap":316},[398,124047,124048,124050,124052,124055,124057,124059,124061,124063,124066,124069,124071,124074],{"class":400,"line":401},[398,124049,123796],{"class":2239},[398,124051,70014],{"class":513},[398,124053,124054],{"class":457}," -a",[398,124056,29409],{"class":457},[398,124058,28615],{"class":408},[398,124060,123796],{"class":2239},[398,124062,70014],{"class":513},[398,124064,124065],{"class":457}," -q",[398,124067,124068],{"class":513}," path",[398,124070,25393],{"class":457},[398,124072,124073],{"class":513}," \u002Fdev\u002FttyACM0",[398,124075,415],{"class":408},[398,124077,124078,124080,124082,124084,124086,124088,124090,124092,124094,124096,124098,124101],{"class":400,"line":317},[398,124079,123796],{"class":2239},[398,124081,70014],{"class":513},[398,124083,124054],{"class":457},[398,124085,29409],{"class":457},[398,124087,28615],{"class":408},[398,124089,123796],{"class":2239},[398,124091,70014],{"class":513},[398,124093,124065],{"class":457},[398,124095,124068],{"class":513},[398,124097,25393],{"class":457},[398,124099,124100],{"class":513}," \u002Fdev\u002FttyUSB0",[398,124102,415],{"class":408},[19,124104,124105],{},[1738,124106],{"alt":316,"src":124107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,124109,124110],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,124112,123525],{},[19,124114,123528,124115,123880],{},[395,124116,123531],{},[389,124118,124119],{"className":117489,"code":123535,"language":117491,"meta":316,"style":316},[395,124120,124121],{"__ignoreMap":316},[398,124122,124123,124125,124127],{"class":400,"line":401},[398,124124,24854],{"class":2239},[398,124126,118776],{"class":513},[398,124128,123546],{"class":513},[389,124130,124132],{"className":117489,"code":124131,"language":117491,"meta":316,"style":316},"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",[395,124133,124134,124162,124188],{"__ignoreMap":316},[398,124135,124136,124138,124140,124143,124145,124147,124149,124151,124154,124157,124159],{"class":400,"line":401},[398,124137,123559],{"class":408},[398,124139,454],{"class":404},[398,124141,124142],{"class":513},"=\"ttyACM*\",",[398,124144,123567],{"class":2239},[398,124146,123570],{"class":513},[398,124148,123599],{"class":2239},[398,124150,780],{"class":2239},[398,124152,124153],{"class":513}," ATTRS{idProduct}==\"55d4\",",[398,124155,124156],{"class":513}," ATTRS{serial}==\"0001\",",[398,124158,123581],{"class":513},[398,124160,124161],{"class":513}," SYMLINK+=\"ttyACM_MCU\"\n",[398,124163,124164,124166,124168,124170,124172,124174,124176,124178,124180,124183,124185],{"class":400,"line":317},[398,124165,123559],{"class":408},[398,124167,454],{"class":404},[398,124169,124142],{"class":513},[398,124171,123567],{"class":2239},[398,124173,123570],{"class":513},[398,124175,123599],{"class":2239},[398,124177,780],{"class":2239},[398,124179,124153],{"class":513},[398,124181,124182],{"class":513}," ATTRS{serial}==\"0002\",",[398,124184,123581],{"class":513},[398,124186,124187],{"class":513}," SYMLINK+=\"ttyACM_Lidar\"\n",[398,124189,124190,124192,124194,124196,124198,124200,124202,124204,124206,124208],{"class":400,"line":320},[398,124191,123559],{"class":408},[398,124193,454],{"class":404},[398,124195,123564],{"class":513},[398,124197,123567],{"class":2239},[398,124199,123570],{"class":513},[398,124201,123599],{"class":2239},[398,124203,780],{"class":2239},[398,124205,123604],{"class":513},[398,124207,123581],{"class":513},[398,124209,124210],{"class":513}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,124212,123644],{},[19,124214,123647],{},[389,124216,124217],{"className":117489,"code":123650,"language":117491,"meta":316,"style":316},[395,124218,124219,124223,124233,124243,124247,124251,124261],{"__ignoreMap":316},[398,124220,124221],{"class":400,"line":401},[398,124222,123657],{"class":467},[398,124224,124225,124227,124229,124231],{"class":400,"line":317},[398,124226,24854],{"class":2239},[398,124228,120241],{"class":513},[398,124230,123666],{"class":513},[398,124232,123669],{"class":513},[398,124234,124235,124237,124239,124241],{"class":400,"line":320},[398,124236,24854],{"class":2239},[398,124238,120241],{"class":513},[398,124240,123666],{"class":513},[398,124242,123680],{"class":513},[398,124244,124245],{"class":400,"line":1470},[398,124246,2676],{"emptyLinePlaceholder":328},[398,124248,124249],{"class":400,"line":1476},[398,124250,123689],{"class":467},[398,124252,124253,124255,124257,124259],{"class":400,"line":1490},[398,124254,24854],{"class":2239},[398,124256,123696],{"class":513},[398,124258,123699],{"class":513},[398,124260,123702],{"class":457},[398,124262,124263,124265,124267],{"class":400,"line":1496},[398,124264,24854],{"class":2239},[398,124266,123696],{"class":513},[398,124268,123711],{"class":513},[19,124270,124271,124272],{},"再重新插拔设备即可，或者 ",[23,124273,124274],{},"直接重启系统。",[19,124276,123717],{},[19,124278,123720,124279,124020],{},[395,124280,124019],{},[19,124282,124283],{},[1738,124284],{"alt":316,"src":124285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,124287,124028],{},[19,124289,124290,124292],{},[23,124291,118157],{}," 一些设备可能没有串口号等。",[14,124294,124296],{"id":124295},"_744-其他注意事项","7.4.4 其他注意事项",[19,124298,124299,124300,124302,124303,124306,124307,18687,124310,124313,124314,124316],{},"并非所有的USB设备端口号都是",[395,124301,123754],{},"的格式，比如Arduino的端口号可能是",[395,124304,124305],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[395,124308,124309],{},"videon",[395,124311,124312],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[395,124315,124309],{},"端口，绑定时需要关联的也是该接口。",[19,124318,124319,124320,124323,124324,124327,124328,124330,124331,124334,124335,124338,124339,124342,124343,124342,124346,124342,124349,28578],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[395,124321,124322],{},"KERNEL==\"ttyUSB*\"","修改为",[395,124325,124326],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[395,124329,124322],{},"修改为类似于",[395,124332,124333],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[395,124336,124337],{},"video[0,2,4,6]","表示可以绑定的端口为",[395,124340,124341],{},"video0","或",[395,124344,124345],{},"video2",[395,124347,124348],{},"video4",[395,124350,124351],{},"video6",[343,124353,124355],{"id":124354},"_75-挂载内网网页","7.5 挂载内网网页",[19,124357,124358],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,124360,124361],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,124363,124364],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,124366,124367,124368],{},"Termux 下载地址（F-Droid）：",[640,124369,124370],{"href":124370,"rel":124371},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[24142],[19,124373,124374],{},"首先打开app后，先更新软件缓存：",[389,124376,124378],{"className":117489,"code":124377,"language":117491,"meta":316,"style":316},"pkg update\n",[395,124379,124380],{"__ignoreMap":316},[398,124381,124382,124385],{"class":400,"line":401},[398,124383,124384],{"class":2239},"pkg",[398,124386,26435],{"class":513},[19,124388,124389],{},"然后换源",[389,124391,124393],{"className":117489,"code":124392,"language":117491,"meta":316,"style":316},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[395,124394,124395],{"__ignoreMap":316},[398,124396,124397,124399,124402],{"class":400,"line":401},[398,124398,123267],{"class":2239},[398,124400,124401],{"class":408}," $PREFIX",[398,124403,124404],{"class":513},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,124406,124407],{},"将该文件内容替换为下面：",[389,124409,124411],{"className":117489,"code":124410,"language":117491,"meta":316,"style":316},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[395,124412,124413],{"__ignoreMap":316},[398,124414,124415,124418,124421,124424],{"class":400,"line":401},[398,124416,124417],{"class":2239},"deb",[398,124419,124420],{"class":513}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[398,124422,124423],{"class":513}," stable",[398,124425,124426],{"class":513}," main\n",[67,124428,124429,124456],{},[41,124430,124431,124432,124434,124435],{},"如果你使用的是",[395,124433,123267],{},"编辑器：",[67,124436,124437,124444,124450],{},[41,124438,124439,124440,124443],{},"按 ",[395,124441,124442],{},"Ctrl+O"," 保存文件。",[41,124445,124439,124446,124449],{},[395,124447,124448],{},"Enter"," 确认文件名。",[41,124451,124439,124452,124455],{},[395,124453,124454],{},"Ctrl+X"," 退出编辑器。",[41,124457,124431,124458,124434,124461],{},[395,124459,124460],{},"vim",[67,124462,124463,124469],{},[41,124464,124439,124465,124468],{},[395,124466,124467],{},"Esc"," 退出编辑模式。",[41,124470,124471,124472,124474],{},"输入 ",[395,124473,119414],{}," 保存并退出。",[19,124476,124477],{},"接下来重新更新软件源：",[389,124479,124481],{"className":117489,"code":124480,"language":117491,"meta":316,"style":316},"pkg update && pkg upgrade\n",[395,124482,124483],{"__ignoreMap":316},[398,124484,124485,124487,124489,124491,124493],{"class":400,"line":401},[398,124486,124384],{"class":2239},[398,124488,117540],{"class":513},[398,124490,26383],{"class":408},[398,124492,124384],{"class":2239},[398,124494,117526],{"class":513},[19,124496,124497],{},"安装python：",[389,124499,124501],{"className":117489,"code":124500,"language":117491,"meta":316,"style":316},"pkg install python\n",[395,124502,124503],{"__ignoreMap":316},[398,124504,124505,124507,124509],{"class":400,"line":401},[398,124506,124384],{"class":2239},[398,124508,24111],{"class":513},[398,124510,124511],{"class":513}," python\n",[19,124513,124514,26666],{},[23,124515,124516],{},"通过Termux访问设备存储",[19,124518,124519],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[389,124521,124523],{"className":117489,"code":124522,"language":117491,"meta":316,"style":316},"termux-setup-storage\n",[395,124524,124525],{"__ignoreMap":316},[398,124526,124527],{"class":400,"line":401},[398,124528,124522],{"class":2239},[38,124530,124531],{},[41,124532,124533,26666,124536],{},[23,124534,124535],{},"进入HTML文件所在的目录",[38,124537,124538],{},[41,124539,124540,124541,124543],{},"使用",[395,124542,101469],{},"命令进入HTML文件所在的目录：",[389,124545,124547],{"className":117489,"code":124546,"language":117491,"meta":316,"style":316},"cd ~\u002Fyour_html_folder\n",[395,124548,124549],{"__ignoreMap":316},[398,124550,124551,124553],{"class":400,"line":401},[398,124552,101469],{"class":457},[398,124554,124555],{"class":513}," ~\u002Fyour_html_folder\n",[38,124557,124558],{"start":317},[41,124559,124560,26666,124563,124568,124585],{},[23,124561,124562],{},"启动Python HTTP服务器",[38,124564,124565],{},[41,124566,124567],{},"运行以下命令启动一个简单的HTTP服务器：",[389,124569,124571],{"className":117489,"code":124570,"language":117491,"meta":316,"style":316},"python -m http.server 8000\n",[395,124572,124573],{"__ignoreMap":316},[398,124574,124575,124577,124579,124582],{"class":400,"line":401},[398,124576,30573],{"class":2239},[398,124578,101075],{"class":457},[398,124580,124581],{"class":513}," http.server",[398,124583,124584],{"class":457}," 8000\n",[38,124586,124587],{"start":320},[41,124588,124589,124590,124593],{},"这会在端口",[395,124591,124592],{},"8000","上启动一个Web服务器。",[67,124595,124596],{},[41,124597,124598],{},"启动服务器后，Termux会显示日志信息，例如：",[389,124600,124602],{"className":121009,"code":124601,"language":121011,"meta":121012,"style":316},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[395,124603,124604],{"__ignoreMap":316},[398,124605,124606],{"class":400,"line":401},[398,124607,124601],{},[67,124609,124610],{},[41,124611,124612],{},"这表示服务器已成功启动。",[19,124614,124615],{},[23,124616,124617],{},"在浏览器中访问HTML文件",[38,124619,124620],{},[41,124621,124622,26666,124625,124630],{},[23,124623,124624],{},"在同一设备上访问",[38,124626,124627],{},[41,124628,124629],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[389,124631,124634],{"className":124632,"code":124633,"language":71857,"meta":316,"style":316},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[395,124635,124636],{"__ignoreMap":316},[398,124637,124638,124641],{"class":400,"line":401},[398,124639,124640],{"class":408},"http:",[398,124642,124643],{"class":467},"\u002F\u002Flocalhost:8000\n",[67,124645,124646],{},[41,124647,124648,124649,124652],{},"如果HTML文件中有",[395,124650,124651],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[343,124654,124656],{"id":124655},"_76-linux重点知识","7.6 Linux重点知识",[14,124658,124660],{"id":124659},"_761-关于点的说明","7.6.1 关于点的说明",[19,124662,124663],{},[1738,124664],{"alt":316,"src":124665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,124667,124668],{},"一点本目录，两点上目录",[14,124670,124672],{"id":124671},"_762-目录","7.6.2 目录",[22275,124674,124676],{"id":124675},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,124678,124679],{},[23,124680,124681],{},"\u002Fboot:",[19,124683,124684],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,124686,124687],{},[23,124688,124689],{},"\u002Fetc:",[19,124691,124692],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,124694,124695],{},[23,124696,124697],{},"\u002Flib：",[19,124699,124700],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,124702,124703],{},[23,124704,124705],{},"\u002Fsys:",[19,124707,124708],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22275,124710,124712],{"id":124711},"_7622-指令集合","7.6.2.2 指令集合",[19,124714,124715],{},[23,124716,124717],{},"\u002Fbin:",[19,124719,124720],{},"为二进制文件的缩写，存放最经常使用的命令",[19,124722,124723],{},[23,124724,124725],{},"\u002Fsbin:",[19,124727,124728],{},"只有系统管理员才能使用的程序和指令",[22275,124730,124732],{"id":124731},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,124734,124735],{},[23,124736,124737],{},"\u002Fdev:",[19,124739,124740],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,124742,124743],{},[23,124744,124745],{},"\u002Fmedia:",[19,124747,124748],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,124750,124751],{},[23,124752,124753],{},"\u002Fmnt:",[19,124755,124756],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22275,124758,124760],{"id":124759},"_7624-临时文件","7.6.2.4 临时文件",[19,124762,124763],{},[23,124764,124765],{},"\u002Frun:",[19,124767,124768],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,124770,124771],{},[23,124772,124773],{},"\u002Flost+found:",[19,124775,124776],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,124778,124779],{},[23,124780,124781],{},"\u002Ftmp:",[19,124783,124784],{},"这个目录是用来存放一些临时文件的",[22275,124786,124788],{"id":124787},"_7625-账户","7.6.2.5 账户",[19,124790,124791],{},[23,124792,124793],{},"\u002Froot：",[19,124795,124796],{},"系统管理员的用户主目录",[19,124798,124799,26666],{},[23,124800,124801],{},"\u002Fhome",[19,124803,124804],{},"用户的主目录，以用户的账号命名的",[19,124806,124807,26666],{},[23,124808,124809],{},"\u002Fusr",[19,124811,124812],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,124814,124815],{},[23,124816,124817],{},"\u002Fusr\u002Fbin：",[19,124819,124820],{},"系统用户使用的应用程序与指令",[19,124822,124823],{},[23,124824,124825],{},"\u002Fusr\u002Fsbin：",[19,124827,124828],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,124830,124831],{},[23,124832,124833],{},"\u002Fusr\u002Fsrc：",[19,124835,124836],{},"内核源代码默认的放置目录",[22275,124838,124840],{"id":124839},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,124842,124843],{},[23,124844,124845],{},"\u002Fvar：",[19,124847,124848],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,124850,124851],{},[23,124852,124853],{},"\u002Fproc:",[19,124855,124856,124857,124860],{},"管理 ",[23,124858,124859],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22275,124862,124864],{"id":124863},"_7627-扩展用的","7.6.2.7 扩展用的",[19,124866,124867],{},[23,124868,124869],{},"\u002Fopt:",[19,124871,124872],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,124874,124875],{},[23,124876,124877],{},"\u002Fsrv:",[19,124879,124880],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[14,124882,124884],{"id":124883},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,124886,124887],{},[1738,124888],{"alt":316,"src":124889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,124891,124892],{},"windows-->linux:",[19,124894,124895],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,124897,124898],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,124900,124901],{},"linux传输文件到windows",[19,124903,124904],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[14,124906,124908],{"id":124907},"_764-易忘知识","7.6.4 易忘知识",[19,124910,124911],{},"操作系统内核查看",[389,124913,124914],{"className":117489,"code":121483,"language":117491,"meta":316,"style":316},[395,124915,124916],{"__ignoreMap":316},[398,124917,124918,124920],{"class":400,"line":401},[398,124919,70397],{"class":2239},[398,124921,121492],{"class":457},[19,124923,124924],{},[1738,124925],{"alt":316,"src":124926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,124928,124929],{},[1738,124930],{"alt":316,"src":124931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[389,124933,124935],{"className":117489,"code":124934,"language":117491,"meta":316,"style":316},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[395,124936,124937,124949],{"__ignoreMap":316},[398,124938,124939,124941,124944,124947],{"class":400,"line":401},[398,124940,121700],{"class":2239},[398,124942,124943],{"class":513}," mvtest",[398,124945,124946],{"class":513}," mvtest2",[398,124948,2950],{"class":408},[398,124950,124951],{"class":400,"line":317},[398,124952,124953],{"class":2239},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,124955,124956],{},[1738,124957],{"alt":316,"src":124958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,124960,124961],{},[1738,124962],{"alt":316,"src":124963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,124965,124966,124967,124970],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[395,124968,124969],{},"du -a"," 可以快速查看磁盘使用细节。",[14,124972,124974],{"id":124973},"_765-vim","7.6.5 Vim",[19,124976,124977],{},[1738,124978],{"alt":316,"src":124979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,124981,124982],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,124984,124985],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,124987,124988],{},[23,124989,124990],{},"1.命令模式：",[19,124992,124993],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,124995,124996],{},"x 删除当前光标所在处的字符",[19,124998,124999],{},"：切换到底线命令模式，以在最底一行输入命令",[19,125001,125002],{},"a 进行插入模式，在光标下一个位置输入文本",[19,125004,125005],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,125007,125008],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,125010,125011],{},"dd 剪切当前行",[19,125013,125014],{},"yy 复制当前行",[19,125016,125017],{},"p 粘贴剪贴板内容到光标下方",[19,125019,125020],{},"P 粘贴剪贴板内容到光标上方",[19,125022,125023],{},"u 撤销上一次操作",[19,125025,125026],{},"ctrl+r 重做上一次操作",[19,125028,125029,125031],{},[1197,125030],{}," 保存文件",[19,125033,125034,125036],{},[1047,125035],{}," 退出Vim编辑器",[19,125038,125039,125041],{},[1047,125040],{},"! 强制退出Vim编辑器，不保存修改",[19,125043,125044],{},[23,125045,125046],{},"2.输入模式：",[19,125048,125049],{},[1738,125050],{"alt":316,"src":125051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,125053,125054],{},[23,125055,125056],{},"3.底线命令模式：",[19,125058,125059],{},[1738,125060],{"alt":316,"src":125061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,125063,125064],{},"按下esc可以退出底线命令模式",[14,125066,125068],{"id":125067},"_766-apt","7.6.6 apt",[19,125070,125071],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[14,125073,125075],{"id":125074},"_767-home与root的区别","7.6.7 home与root的区别",[19,125077,125078],{},[1738,125079],{"alt":316,"src":125080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,125082,125083],{},[1738,125084],{"alt":316,"src":125085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,125087,125088],{},[1738,125089],{"alt":316,"src":125090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,125092,125093],{},[1738,125094],{"alt":316,"src":125095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[14,125097,125099],{"id":125098},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,125101,125102],{},[640,125103,125104],{"href":125104,"rel":125105},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[24142],[38,125107,125108,125111],{},[41,125109,125110],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[41,125112,125113],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,125115,125116],{},[1738,125117],{"alt":316,"src":125118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,125120,125121],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,125123,125124],{},[1738,125125],{"alt":316,"src":125126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[389,125128,125130],{"className":121009,"code":125129,"language":121011,"meta":121012,"style":316},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[395,125131,125132,125137],{"__ignoreMap":316},[398,125133,125134],{"class":400,"line":401},[398,125135,125136],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[398,125138,125139],{"class":400,"line":317},[398,125140,125141],{},".\u002Fpycharm.sh\n",[19,125143,125144],{},"3️⃣创建.desktop文件",[19,125146,125147],{},[23,125148,125149],{},"原理：",[67,125151,125152,125162],{},[41,125153,125154,125155,125161],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[23,125156,125157,125160],{},[395,125158,125159],{},".desktop"," 文件"," 来识别应用。",[41,125163,125164,125166,125167],{},[395,125165,125159],{}," 文件相当于一个“应用注册表”，告诉系统：",[67,125168,125169,125172,125175,125178,125181],{},[41,125170,125171],{},"应用名字（Name）",[41,125173,125174],{},"图标（Icon）",[41,125176,125177],{},"执行命令（Exec）",[41,125179,125180],{},"分类（Categories）",[41,125182,125183],{},"是否需要终端（Terminal）",[389,125185,125187],{"className":121009,"code":125186,"language":121011,"meta":121012,"style":316},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[395,125188,125189,125194],{"__ignoreMap":316},[398,125190,125191],{"class":400,"line":401},[398,125192,125193],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[398,125195,125196],{"class":400,"line":317},[398,125197,125198],{},"nano pycharm.desktop\n",[19,125200,125201],{},"nano是一个命令行下的编辑器，也可以使用vim",[389,125203,125205],{"className":121009,"code":125204,"language":121011,"meta":121012,"style":316},"[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",[395,125206,125207,125212,125217,125222,125227,125232,125237,125242,125247,125252],{"__ignoreMap":316},[398,125208,125209],{"class":400,"line":401},[398,125210,125211],{},"[Desktop Entry]\n",[398,125213,125214],{"class":400,"line":317},[398,125215,125216],{},"Version=1.0\n",[398,125218,125219],{"class":400,"line":320},[398,125220,125221],{},"Type=Application\n",[398,125223,125224],{"class":400,"line":1470},[398,125225,125226],{},"Name=PyCharm\n",[398,125228,125229],{"class":400,"line":1476},[398,125230,125231],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[398,125233,125234],{"class":400,"line":1490},[398,125235,125236],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[398,125238,125239],{"class":400,"line":1496},[398,125240,125241],{},"Comment=JetBrains PyCharm IDE\n",[398,125243,125244],{"class":400,"line":1587},[398,125245,125246],{},"Categories=Development;IDE;\n",[398,125248,125249],{"class":400,"line":1593},[398,125250,125251],{},"Terminal=false\n",[398,125253,125254],{"class":400,"line":1605},[398,125255,125256],{},"StartupWMClass=jetbrains-pycharm\n",[67,125258,125259,125265,125271,125277],{},[41,125260,125261,125264],{},[395,125262,125263],{},"Exec"," → 点击图标时执行的命令",[41,125266,125267,125270],{},[395,125268,125269],{},"Icon"," → 显示在菜单和桌面上的图标",[41,125272,125273,125276],{},[395,125274,125275],{},"Terminal=false"," → 不打开终端",[41,125278,125279,125282],{},[395,125280,125281],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125284,125285,125286],"blockquote",{},[19,125287,125288,125289,125291,125292],{},"可以理解成 ",[395,125290,125159],{}," 文件是 Linux 的 ",[23,125293,125294],{},"快捷方式配置文件",[19,125296,125297],{},"4️⃣设置可执行权限",[389,125299,125301],{"className":121009,"code":125300,"language":121011,"meta":121012,"style":316},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[395,125302,125303],{"__ignoreMap":316},[398,125304,125305],{"class":400,"line":401},[398,125306,125300],{},[19,125308,125309],{},"5️⃣桌面图标启动的话如下：",[389,125311,125313],{"className":121009,"code":125312,"language":121011,"meta":121012,"style":316},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[395,125314,125315,125320],{"__ignoreMap":316},[398,125316,125317],{"class":400,"line":401},[398,125318,125319],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[398,125321,125322],{"class":400,"line":317},[398,125323,125324],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[38,125326,125327],{"start":320},[41,125328,125329],{},"下载Appimage文件实现软件的安装",[19,125331,125332],{},"1️⃣先下载appimage",[19,125334,125335],{},[640,125336,125337],{"href":125337,"rel":125338},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[24142],[19,125340,125341],{},[1738,125342],{"alt":316,"src":125343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,125345,125346],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,125348,125349],{},[1738,125350],{"alt":316,"src":125351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,125353,125354],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,125356,125357],{},[1738,125358],{"alt":316,"src":125359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,125361,125362],{},[1738,125363],{"alt":316,"src":125364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,125366,125367,125368,125371],{},"3️⃣给他们放在",[395,125369,125370],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,125373,125374],{},"4️⃣给软件执行权限",[389,125376,125378],{"className":121009,"code":125377,"language":121011,"meta":121012,"style":316},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[395,125379,125380,125385],{"__ignoreMap":316},[398,125381,125382],{"class":400,"line":401},[398,125383,125384],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[398,125386,125387],{"class":400,"line":317},[398,125388,125389],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,125391,125392],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[389,125394,125396],{"className":117489,"code":125395,"language":117491,"meta":316,"style":316},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[395,125397,125398,125405,125412,125418],{"__ignoreMap":316},[398,125399,125400,125402],{"class":400,"line":401},[398,125401,101469],{"class":457},[398,125403,125404],{"class":513}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[398,125406,125407,125409],{"class":400,"line":317},[398,125408,101476],{"class":2239},[398,125410,125411],{"class":513}," .\u002Fqqmusic.desktop\n",[398,125413,125414,125416],{"class":400,"line":320},[398,125415,124460],{"class":2239},[398,125417,125411],{"class":513},[398,125419,125420,125422,125424,125426],{"class":400,"line":1470},[398,125421,24854],{"class":2239},[398,125423,24857],{"class":513},[398,125425,123326],{"class":513},[398,125427,125411],{"class":513},[19,125429,125430,125432],{},[395,125431,101476],{},"：一个 Linux 命令，主要功能是：",[67,125434,125435,125438],{},[41,125436,125437],{},"如果文件不存在，就创建一个新的空文件",[41,125439,125440],{},"如果文件已存在，就更新该文件的最后修改时间",[389,125442,125444],{"className":121009,"code":125443,"language":121011,"meta":121012,"style":316},"[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",[395,125445,125446,125450,125455,125460,125465,125469,125474],{"__ignoreMap":316},[398,125447,125448],{"class":400,"line":401},[398,125449,125211],{},[398,125451,125452],{"class":400,"line":317},[398,125453,125454],{},"Name=QQ音乐\n",[398,125456,125457],{"class":400,"line":320},[398,125458,125459],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[398,125461,125462],{"class":400,"line":1470},[398,125463,125464],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[398,125466,125467],{"class":400,"line":1476},[398,125468,125221],{},[398,125470,125471],{"class":400,"line":1490},[398,125472,125473],{},"Categories=Audio;Music;Player;\n",[398,125475,125476],{"class":400,"line":1496},[398,125477,125478],{},"Comment=QQ Music Client for Linux\n",[19,125480,125481],{},"将文件复制进去",[19,125483,125484],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,125486,125487],{},[1738,125488],{"alt":316,"src":125489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,125491,125492],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,125494,125495],{},[1738,125496],{"alt":316,"src":125497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,125499,125500,125501,125504,125505,125508],{},"如果你用的不是KDE，那么也可以直接修改",[395,125502,125503],{},"qqmuic.desktop","：在exec的末尾加上",[395,125506,125507],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[389,125510,125512],{"className":121009,"code":125511,"language":121011,"meta":121012,"style":316},"[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",[395,125513,125514,125518,125522,125527,125531,125535,125539],{"__ignoreMap":316},[398,125515,125516],{"class":400,"line":401},[398,125517,125211],{},[398,125519,125520],{"class":400,"line":317},[398,125521,125454],{},[398,125523,125524],{"class":400,"line":320},[398,125525,125526],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[398,125528,125529],{"class":400,"line":1470},[398,125530,125464],{},[398,125532,125533],{"class":400,"line":1476},[398,125534,125221],{},[398,125536,125537],{"class":400,"line":1490},[398,125538,125473],{},[398,125540,125541],{"class":400,"line":1496},[398,125542,125478],{},[19,125544,125545],{},[1738,125546],{"alt":316,"src":125547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,125549,125550],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[389,125552,125554],{"className":121009,"code":125553,"language":121011,"meta":121012,"style":316},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[395,125555,125556],{"__ignoreMap":316},[398,125557,125558],{"class":400,"line":401},[398,125559,125553],{},[38,125561,125562],{"start":1470},[41,125563,125564],{},"去Flathub上安装软件",[19,125566,125567],{},[640,125568,125569],{"href":125569,"rel":125570},"https:\u002F\u002Fflathub.org\u002F",[24142],[19,125572,125573],{},"1️⃣去上面的官网搜索软件+下载软件",[19,125575,125576],{},[1738,125577],{"alt":316,"src":125578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[389,125580,125582],{"className":121009,"code":125581,"language":121011,"meta":121012,"style":316},"flatpak install flathub com.obsproject.Studio\n",[395,125583,125584],{"__ignoreMap":316},[398,125585,125586],{"class":400,"line":401},[398,125587,125581],{},[19,125589,125590],{},[1738,125591],{"alt":316,"src":125592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,125594,125595],{},"2️⃣运行软件",[19,125597,125598],{},"a.官方方式：",[19,125600,125601],{},[1738,125602],{"alt":316,"src":125603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[389,125605,125606],{"className":121009,"code":125581,"language":121011,"meta":121012,"style":316},[395,125607,125608],{"__ignoreMap":316},[398,125609,125610],{"class":400,"line":401},[398,125611,125581],{},[19,125613,125614],{},"b.当普通软件运行：",[19,125616,125617],{},[1738,125618],{"alt":316,"src":125619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,125621,125622],{},[1738,125623],{"alt":316,"src":125624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[5403,125626,125627],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":316,"searchDepth":317,"depth":317,"links":125629},[125630,125631,125636,125637,125643,125644],{"id":122362,"depth":317,"text":122363},{"id":122704,"depth":317,"text":122705,"children":125632},[125633,125634,125635],{"id":122708,"depth":320,"text":122709},{"id":122775,"depth":320,"text":122776},{"id":123036,"depth":320,"text":123037},{"id":123189,"depth":317,"text":123190},{"id":123427,"depth":317,"text":123428,"children":125638},[125639,125640,125641,125642],{"id":123479,"depth":320,"text":123480},{"id":123765,"depth":320,"text":123766},{"id":124036,"depth":320,"text":124037},{"id":124295,"depth":320,"text":124296},{"id":124354,"depth":317,"text":124355},{"id":124655,"depth":317,"text":124656,"children":125645},[125646,125647,125648,125649,125650,125651,125652,125653],{"id":124659,"depth":320,"text":124660},{"id":124671,"depth":320,"text":124672},{"id":124883,"depth":320,"text":124884},{"id":124907,"depth":320,"text":124908},{"id":124973,"depth":320,"text":124974},{"id":125067,"depth":320,"text":125068},{"id":125074,"depth":320,"text":125075},{"id":125098,"depth":320,"text":125099},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122354,"description":23654},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125660,"title":125661,"body":125662,"description":23654,"extension":326,"meta":125666,"navigation":328,"path":125667,"seo":125668,"stem":125669,"__hash__":125670},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125663,"toc":125664},[],{"title":316,"searchDepth":317,"depth":317,"links":125665},[],{"category":30456},"\u002Fwiki\u002F2025-01-27-linux",{"title":125661,"description":23654},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125672,"title":125673,"body":125674,"description":125678,"extension":326,"meta":126069,"navigation":328,"path":126070,"seo":126071,"stem":126072,"__hash__":126073},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125675,"toc":126067},[125676,125679,125683,125700,125703,125756,125760,125762,125802,125811,125815,125818,126059,126064],[19,125677,125678],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125680,125682],{"id":125681},"_1ubuntu环境配置","1.Ubuntu环境配置",[38,125684,125685,125688,125691,125694,125697],{},[41,125686,125687],{},"ubuntu环境换源",[41,125689,125690],{},"安装cuda",[41,125692,125693],{},"安装miniconda",[41,125695,125696],{},"安装pytorch",[41,125698,125699],{},"安装genesis",[19,125701,125702],{},"参考链接：",[389,125704,125706],{"className":24099,"code":125705,"language":24101,"meta":316,"style":316},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[395,125707,125708],{"__ignoreMap":316},[398,125709,125710,125713,125716,125719,125721,125724,125727,125729,125732,125735,125737,125740,125743,125745,125748,125751,125753],{"class":400,"line":401},[398,125711,125712],{"class":2239},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[398,125714,125715],{"class":513},"=blogdetail",[398,125717,125718],{"class":408},"&sharetype",[398,125720,454],{"class":404},[398,125722,125723],{"class":513},"blogdetail",[398,125725,125726],{"class":408},"&sharerId",[398,125728,454],{"class":404},[398,125730,125731],{"class":513},"144728092",[398,125733,125734],{"class":408},"&sharerefer",[398,125736,454],{"class":404},[398,125738,125739],{"class":513},"PC",[398,125741,125742],{"class":408},"&sharesource",[398,125744,454],{"class":404},[398,125746,125747],{"class":513},"qq_69379513",[398,125749,125750],{"class":408},"&sharefrom",[398,125752,454],{"class":404},[398,125754,125755],{"class":513},"from_link\n",[10,125757,125759],{"id":125758},"_2genesis-报错issue","2.Genesis 报错issue",[19,125761,125702],{},[389,125763,125764],{"className":24099,"code":125705,"language":24101,"meta":316,"style":316},[395,125765,125766],{"__ignoreMap":316},[398,125767,125768,125770,125772,125774,125776,125778,125780,125782,125784,125786,125788,125790,125792,125794,125796,125798,125800],{"class":400,"line":401},[398,125769,125712],{"class":2239},[398,125771,125715],{"class":513},[398,125773,125718],{"class":408},[398,125775,454],{"class":404},[398,125777,125723],{"class":513},[398,125779,125726],{"class":408},[398,125781,454],{"class":404},[398,125783,125731],{"class":513},[398,125785,125734],{"class":408},[398,125787,454],{"class":404},[398,125789,125739],{"class":513},[398,125791,125742],{"class":408},[398,125793,454],{"class":404},[398,125795,125747],{"class":513},[398,125797,125750],{"class":408},[398,125799,454],{"class":404},[398,125801,125755],{"class":513},[389,125803,125805],{"className":24099,"code":125804,"language":24101,"meta":316,"style":316},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[395,125806,125807],{"__ignoreMap":316},[398,125808,125809],{"class":400,"line":401},[398,125810,125804],{"class":2239},[10,125812,125814],{"id":125813},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,125816,125817],{},"hello_robot.py",[389,125819,125821],{"className":30571,"code":125820,"language":30573,"meta":316,"style":316},"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",[395,125822,125823,125829,125844,125848,125860,125872,125876,125889,125893,125912,125922,125932,125946,125950,125954,125959,125963,125973,125980,125994,126001,126011,126016,126020,126038,126043,126047,126054],{"__ignoreMap":316},[398,125824,125825,125827],{"class":400,"line":401},[398,125826,30585],{"class":404},[398,125828,45498],{"class":408},[398,125830,125831,125834,125837,125839,125841],{"class":400,"line":317},[398,125832,125833],{"class":408},"os.environ[",[398,125835,125836],{"class":513},"'PYOPENGL_PLATFORM'",[398,125838,4719],{"class":408},[398,125840,454],{"class":404},[398,125842,125843],{"class":513}," 'glx'\n",[398,125845,125846],{"class":400,"line":320},[398,125847,2676],{"emptyLinePlaceholder":328},[398,125849,125850,125852,125855,125857],{"class":400,"line":1470},[398,125851,30585],{"class":404},[398,125853,125854],{"class":408}," genesis ",[398,125856,31576],{"class":404},[398,125858,125859],{"class":408}," gs\n",[398,125861,125862,125864,125867,125869],{"class":400,"line":1476},[398,125863,30930],{"class":404},[398,125865,125866],{"class":408}," pynput ",[398,125868,30585],{"class":404},[398,125870,125871],{"class":408}," keyboard\n",[398,125873,125874],{"class":400,"line":1490},[398,125875,2676],{"emptyLinePlaceholder":328},[398,125877,125878,125881,125884,125886],{"class":400,"line":1496},[398,125879,125880],{"class":408},"gs.init(",[398,125882,125883],{"class":5493},"backend",[398,125885,454],{"class":404},[398,125887,125888],{"class":408},"gs.gpu)\n",[398,125890,125891],{"class":400,"line":1587},[398,125892,2676],{"emptyLinePlaceholder":328},[398,125894,125895,125898,125900,125903,125906,125908,125910],{"class":400,"line":1593},[398,125896,125897],{"class":408},"scene ",[398,125899,454],{"class":404},[398,125901,125902],{"class":408}," gs.Scene(",[398,125904,125905],{"class":5493},"show_viewer",[398,125907,454],{"class":404},[398,125909,31669],{"class":457},[398,125911,415],{"class":408},[398,125913,125914,125917,125919],{"class":400,"line":1605},[398,125915,125916],{"class":408},"plane ",[398,125918,454],{"class":404},[398,125920,125921],{"class":408}," scene.add_entity(gs.morphs.Plane())\n",[398,125923,125924,125927,125929],{"class":400,"line":1888},[398,125925,125926],{"class":408},"franka ",[398,125928,454],{"class":404},[398,125930,125931],{"class":408}," scene.add_entity(\n",[398,125933,125934,125937,125939,125941,125944],{"class":400,"line":1893},[398,125935,125936],{"class":408},"    gs.morphs.MJCF(",[398,125938,45547],{"class":5493},[398,125940,454],{"class":404},[398,125942,125943],{"class":513},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[398,125945,38240],{"class":408},[398,125947,125948],{"class":400,"line":1899},[398,125949,415],{"class":408},[398,125951,125952],{"class":400,"line":1904},[398,125953,2676],{"emptyLinePlaceholder":328},[398,125955,125956],{"class":400,"line":1918},[398,125957,125958],{"class":408},"scene.build()\n",[398,125960,125961],{"class":400,"line":1923},[398,125962,2676],{"emptyLinePlaceholder":328},[398,125964,125965,125967,125970],{"class":400,"line":1929},[398,125966,32140],{"class":404},[398,125968,125969],{"class":2239}," on_press",[398,125971,125972],{"class":408},"(key):\n",[398,125974,125975,125978],{"class":400,"line":1950},[398,125976,125977],{"class":404},"    try",[398,125979,4015],{"class":408},[398,125981,125982,125984,125987,125989,125992],{"class":400,"line":1955},[398,125983,2773],{"class":404},[398,125985,125986],{"class":408}," key.char ",[398,125988,3225],{"class":404},[398,125990,125991],{"class":513}," 'q'",[398,125993,4015],{"class":408},[398,125995,125996,125998],{"class":400,"line":1969},[398,125997,16009],{"class":404},[398,125999,126000],{"class":457}," False\n",[398,126002,126003,126006,126009],{"class":400,"line":1974},[398,126004,126005],{"class":404},"    except",[398,126007,126008],{"class":457}," AttributeError",[398,126010,4015],{"class":408},[398,126012,126013],{"class":400,"line":2003},[398,126014,126015],{"class":404},"        pass\n",[398,126017,126018],{"class":400,"line":2008},[398,126019,2676],{"emptyLinePlaceholder":328},[398,126021,126022,126025,126027,126030,126033,126035],{"class":400,"line":2025},[398,126023,126024],{"class":408},"listener ",[398,126026,454],{"class":404},[398,126028,126029],{"class":408}," keyboard.Listener(",[398,126031,126032],{"class":5493},"on_press",[398,126034,454],{"class":404},[398,126036,126037],{"class":408},"on_press)\n",[398,126039,126040],{"class":400,"line":2030},[398,126041,126042],{"class":408},"listener.start()\n",[398,126044,126045],{"class":400,"line":2035},[398,126046,2676],{"emptyLinePlaceholder":328},[398,126048,126049,126051],{"class":400,"line":2040},[398,126050,108856],{"class":404},[398,126052,126053],{"class":408}," listener.running:\n",[398,126055,126056],{"class":400,"line":2054},[398,126057,126058],{"class":408},"    scene.step()\n",[19,126060,126061],{},[1738,126062],{"alt":316,"src":126063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[5403,126065,126066],{},"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":316,"searchDepth":317,"depth":317,"links":126068},[],{"category":23656},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125673,"description":125678},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":126075,"title":126076,"body":126077,"description":23654,"extension":326,"meta":126092,"navigation":328,"path":126093,"seo":126094,"stem":126095,"__hash__":126096},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":126078,"toc":126089},[126079,126082,126086],[10,126080,126076],{"id":126081},"_1-基础知识",[343,126083,126085],{"id":126084},"_11-js的组成","1.1 js的组成",[19,126087,126088],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":316,"searchDepth":317,"depth":317,"links":126090},[126091],{"id":126084,"depth":317,"text":126085},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":126076,"description":23654},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":126098,"title":126099,"body":126100,"description":23654,"extension":326,"meta":126239,"navigation":328,"path":126240,"seo":126241,"stem":126242,"__hash__":126243},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":126101,"toc":126227},[126102,126105,126109,126112,126116,126126,126130,126133,126136,126139,126143,126150,126156,126160,126166,126177,126181,126184,126188,126191,126195,126198,126202,126205,126209,126212,126215,126218,126221,126224],[10,126103,126099],{"id":126104},"_2-vscode必备内容",[343,126106,126108],{"id":126107},"_21-标签分类","2.1 标签分类",[19,126110,126111],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[343,126113,126115],{"id":126114},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,126117,126118,126119,126121,126122,126125],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[395,126120,628],{}," 然后按 ",[395,126123,126124],{},"Tab","，快速自动生成基本结构。",[343,126127,126129],{"id":126128},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,126131,126132],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,126134,126135],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,126137,126138],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[343,126140,126142],{"id":126141},"_24-视图缩放","2.4 视图缩放",[19,126144,126145,126146,126149],{},"缩放视图 ",[395,126147,126148],{},"ctrl+"," 可实现代码增大。",[19,126151,126152,126155],{},[395,126153,126154],{},"ctrl-"," 可实现代码减小。",[343,126157,126159],{"id":126158},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,126161,126162,126163,28578],{},"VSCode 新建文件快捷键为 ",[395,126164,126165],{},"ctrl+N",[19,126167,126168,126169,126172,126173,126176],{},"保存快捷键为 ",[395,126170,126171],{},"ctrl+S","，将文本保存为 ",[395,126174,126175],{},".html"," 文件。",[343,126178,126180],{"id":126179},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,126182,126183],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[343,126185,126187],{"id":126186},"_27-vscode-icons","2.7 vscode-icons",[19,126189,126190],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[343,126192,126194],{"id":126193},"_28-easy-less","2.8 Easy LESS",[19,126196,126197],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[343,126199,126201],{"id":126200},"_29-会了吧插件","2.9 会了吧插件",[19,126203,126204],{},"会了吧插件可以展示代码中英语单词的意思。",[343,126206,126208],{"id":126207},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,126210,126211],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,126213,126214],{},"②选定多个相同的单词:ctrl+D",[19,126216,126217],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,126219,126220],{},"④全局替换某些单词:ctrl+h",[19,126222,126223],{},"⑤快速定位到某一行:ctrl+g",[19,126225,126226],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":316,"searchDepth":317,"depth":317,"links":126228},[126229,126230,126231,126232,126233,126234,126235,126236,126237,126238],{"id":126107,"depth":317,"text":126108},{"id":126114,"depth":317,"text":126115},{"id":126128,"depth":317,"text":126129},{"id":126141,"depth":317,"text":126142},{"id":126158,"depth":317,"text":126159},{"id":126179,"depth":317,"text":126180},{"id":126186,"depth":317,"text":126187},{"id":126193,"depth":317,"text":126194},{"id":126200,"depth":317,"text":126201},{"id":126207,"depth":317,"text":126208},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":126099,"description":23654},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126245,"title":126246,"body":126247,"description":23654,"extension":326,"meta":126406,"navigation":328,"path":126407,"seo":126408,"stem":126409,"__hash__":126410},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126248,"toc":126398},[126249,126252,126256,126266,126272,126278,126282,126291,126295,126300,126303,126306,126310,126313,126323,126332,126341,126350,126360,126367,126372,126377,126390],[10,126250,126246],{"id":126251},"_3-html文本与容器标签",[343,126253,126255],{"id":126254},"_31-标题标签","3.1 标题标签",[19,126257,126258,126261,126262,126265],{},[395,126259,126260],{},"\u003Ch1>","我是一级标签",[395,126263,126264],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,126267,126268,126261,126270],{},[395,126269,126260],{},[395,126271,126264],{},[19,126273,123528,126274,126277],{},[395,126275,126276],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[343,126279,126281],{"id":126280},"_32-段落标签","3.2 段落标签",[19,126283,126284,126287,126288],{},[395,126285,126286],{},"\u003Cp>","....",[395,126289,126290],{},"\u003C\u002Fp>",[343,126292,126294],{"id":126293},"_33-换行标签","3.3 换行标签",[19,126296,126297],{},[395,126298,126299],{},"\u003Cbr \u002F>",[19,126301,126302],{},"具有强制换行的作用",[19,126304,126305],{},"单标签",[343,126307,126309],{"id":126308},"_34-文本格式化标签","3.4 文本格式化标签",[19,126311,126312],{},"提供粗体、斜体和下划线等效果",[19,126314,126315,126316,82732,126319,126322],{},"加粗：",[395,126317,126318],{},"\u003Cstrong>...\u003C\u002Fstrong>",[395,126320,126321],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,126324,126325,126326,82732,126329,126322],{},"斜体：",[395,126327,126328],{},"\u003Cem>...\u003C\u002Fem>",[395,126330,126331],{},"\u003Ci>...\u003C\u002Fi>",[19,126333,126334,126335,82732,126338,126322],{},"删除线：",[395,126336,126337],{},"\u003Cdel>...\u003C\u002Fdel>",[395,126339,126340],{},"\u003Cs>...\u003C\u002Fs>",[19,126342,126343,126344,82732,126347,126322],{},"下划线：",[395,126345,126346],{},"\u003Cins>...\u003C\u002Fins>",[395,126348,126349],{},"\u003Cu>...\u003C\u002Fu>",[343,126351,126353,126354,18687,126357,102886],{"id":126352},"_35-div和span标签","3.5 ",[395,126355,126356],{},"\u003Cdiv>",[395,126358,126359],{},"\u003Cspan>",[19,126361,126362,101211,126364,126366],{},[395,126363,126356],{},[395,126365,126359],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,126368,126369],{},[395,126370,126371],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,126373,126374],{},[395,126375,126376],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,126378,126379,126380,126382,126383,126385,126386,126389],{},"两者特点：①",[395,126381,126356],{}," 标签用来布局，但一行通常只放一个 ",[395,126384,126356],{},"。可以理解为一个大盒子，独占一行，在 ",[395,126387,126388],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,126391,77442,126392,126394,126395,126397],{},[395,126393,126359],{}," 标签也可用于布局，一行可以放多个 ",[395,126396,126359],{},"，可理解为小盒子。",{"title":316,"searchDepth":317,"depth":317,"links":126399},[126400,126401,126402,126403,126404],{"id":126254,"depth":317,"text":126255},{"id":126280,"depth":317,"text":126281},{"id":126293,"depth":317,"text":126294},{"id":126308,"depth":317,"text":126309},{"id":126352,"depth":317,"text":126405},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126246,"description":23654},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126412,"title":126413,"body":126414,"description":23654,"extension":326,"meta":126611,"navigation":328,"path":126612,"seo":126613,"stem":126614,"__hash__":126615},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126415,"toc":126603},[126416,126419,126423,126426,126432,126439,126445,126451,126454,126457,126460,126463,126466,126469,126472,126476,126479,126482,126485,126491,126497,126503,126510,126514,126520,126526,126529,126532,126538,126544,126550,126553,126556,126560,126563,126573,126579,126583,126592,126596,126599],[10,126417,126413],{"id":126418},"_4-html图像与链接",[343,126420,126422],{"id":126421},"_41-图像标签","4.1 图像标签",[19,126424,126425],{},"（1）标签",[19,126427,126428,126431],{},[395,126429,126430],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,126433,126434,126435,126438],{},"src是",[395,126436,126437],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,126440,126441,126442],{},"alt:文本，替换文本。图像不能显示的文字 ",[395,126443,126444],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,126446,126447,126448],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[395,126449,126450],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,126452,126453],{},"width:像素，设置图像的宽度",[19,126455,126456],{},"height:像素，设置图像的高度",[19,126458,126459],{},"border：像素，设置图像的边框粗细",[19,126461,126462],{},"（2）图像标签属性的注意点：",[19,126464,126465],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,126467,126468],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,126470,126471],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[343,126473,126475],{"id":126474},"_42-路径注意要点","4.2 路径注意要点：",[19,126477,126478],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,126480,126481],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,126483,126484],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,126486,126487,126488],{},"①同一级路径：图像文件位于HTML文件同一级，如",[395,126489,126490],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,126492,126493,126494],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[395,126495,126496],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,126498,126499,126500],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[395,126501,126502],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,126504,126505,126506,653],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[640,126507,126508],{"href":126508,"rel":126509},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[24142],[343,126511,126513],{"id":126512},"_43-超链接标签","4.3 超链接标签",[19,126515,126516,126519],{},[395,126517,126518],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,126521,126522,126523],{},"①语法格式：",[395,126524,126525],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,126527,126528],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,126530,126531],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,126533,126534,126535],{},"③链接分类：外部链接：",[395,126536,126537],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,126539,126540,126541],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[395,126542,126543],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,126545,126546,126547],{},"空链接：如果当时没有确定链接目标时，",[395,126548,126549],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,126551,126552],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,126554,126555],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[343,126557,126559],{"id":126558},"_44-锚点链接","4.4 锚点链接",[19,126561,126562],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,126564,126565,126566,126569,126570],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[395,126567,126568],{},"\u003Ca href=\"#two\">","第二级",[395,126571,126572],{},"\u003C\u002Fa>",[19,126574,126575,126576],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[395,126577,126578],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[343,126580,126582],{"id":126581},"_45-注释标签","4.5 注释标签",[19,126584,126585,126588,126589],{},[395,126586,126587],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[395,126590,126591],{},"ctrl+\u002F",[343,126593,126595],{"id":126594},"_46-特殊字符","4.6 特殊字符",[19,126597,126598],{},"可以实现添加多个空格",[1738,126600],{"style":126601,"src":126602},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":316,"searchDepth":317,"depth":317,"links":126604},[126605,126606,126607,126608,126609,126610],{"id":126421,"depth":317,"text":126422},{"id":126474,"depth":317,"text":126475},{"id":126512,"depth":317,"text":126513},{"id":126558,"depth":317,"text":126559},{"id":126581,"depth":317,"text":126582},{"id":126594,"depth":317,"text":126595},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126413,"description":23654},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126617,"title":126618,"body":126619,"description":23654,"extension":326,"meta":126912,"navigation":328,"path":126913,"seo":126914,"stem":126915,"__hash__":126916},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126620,"toc":126903},[126621,126624,126628,126631,126634,126637,126640,126643,126646,126649,126652,126655,126675,126681,126685,126688,126691,126694,126697,126700,126703,126707,126710,126713,126716,126719,126732,126737,126740,126743,126758,126761,126764,126767,126770,126773,126777,126780,126787,126790,126793,126796,126799,126802,126808,126811,126814,126820,126823,126826,126829,126835,126838,126841,126855,126862,126865,126868,126875,126884,126887,126890,126893,126897,126900],[10,126622,126618],{"id":126623},"_5-html表格列表与表单",[343,126625,126627],{"id":126626},"_51-表格标签","5.1 表格标签",[19,126629,126630],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,126632,126633],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,126635,126636],{},"②表格基本语法：",[1738,126638],{"style":126601,"src":126639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,126641,126642],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[1738,126644],{"style":126601,"src":126645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,126647,126648],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[1738,126650],{"style":126601,"src":126651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,126653,126654],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,126656,126657,126660,126661,126663,126664,126667,126668,126670,126671,126674],{},[395,126658,126659],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[395,126662,126659],{},"内部必须拥有",[395,126665,126666],{},"\u003Ctr>","标签，一般位于第一行，",[395,126669,126659],{},"比",[395,126672,126673],{},"\u003Cth>","范围广",[19,126676,126677,126680],{},[395,126678,126679],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[343,126682,126684],{"id":126683},"_52-合并单元格","5.2 合并单元格",[19,126686,126687],{},"（1）合并单元格方式：",[19,126689,126690],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,126692,126693],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,126695,126696],{},"（2）目标单元格：",[19,126698,126699],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,126701,126702],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[343,126704,126706],{"id":126705},"_53-列表标签","5.3 列表标签",[19,126708,126709],{},"（1）分类：无序列表、有序列表、自定义列表",[19,126711,126712],{},"①无序列表：",[1738,126714],{"style":126601,"src":126715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,126717,126718],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,126720,126721,126724,126725,126728,126729,126731],{},[395,126722,126723],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[395,126726,126727],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[395,126730,126723],{},"中输入其他标签或文字是不对的",[19,126733,126734,126736],{},[395,126735,126727],{},"之间相当于一个容器，可以容纳所有元素",[19,126738,126739],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,126741,126742],{},"在css中去除前边的小圆点采用如下代码:",[389,126744,126748],{"className":126745,"code":126746,"language":126747,"meta":316,"style":316},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[395,126749,126750],{"__ignoreMap":316},[398,126751,126752,126755],{"class":400,"line":401},[398,126753,126754],{"class":51493},"list-style",[398,126756,126757],{"class":408},": none;\n",[19,126759,126760],{},"②有序列表：",[1738,126762],{"style":126601,"src":126763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,126765,126766],{},"③自定义列表：",[1738,126768],{"style":126601,"src":126769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[1738,126771],{"style":126601,"src":126772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[343,126774,126776],{"id":126775},"_54-表单标签","5.4 表单标签",[19,126778,126779],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,126781,126782,126783,126786],{},"（1）表单域：包含单元素的区域，",[395,126784,126785],{},"\u003Cform>","标签可以实现信息的收集和传递。",[1738,126788],{"style":126601,"src":126789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,126791,126792],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,126794,126795],{},"表单元素提交必须有name属性",[19,126797,126798],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,126800,126801],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,126803,77419,126804,126807],{},[395,126805,126806],{},"\u003Cinput>","输入表单元素",[1738,126809],{"style":126601,"src":126810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[1738,126812],{"style":126601,"src":126813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,126815,126816,126817],{},"单选按钮：",[395,126818,126819],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[1738,126821],{"style":126601,"src":126822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,126824,126825],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[1738,126827],{"style":126601,"src":126828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,126830,126831,126834],{},[23,126832,126833],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,126836,126837],{},"②select下拉表单元素：可以节约页面控件",[1738,126839],{"style":126601,"src":126840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,126842,126843,14072,126845,126848,126849,126851,126852,126854],{},[23,126844,438],{},[395,126846,126847],{},"\u003Cselect>","中至少包含一对",[395,126850,102907],{},"；在",[395,126853,102907],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,126856,126857,126858,126861],{},"③",[395,126859,126860],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[1738,126863],{"style":126601,"src":126864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,126866,126867],{},"3行20列",[343,126869,126871,126872,102886],{"id":126870},"_55-lable标签","5.5 ",[395,126873,126874],{},"\u003Clable>",[19,126876,126877,126878,126880,126881,126883],{},"它不是表单标签，但常常与表单标签搭配使用，",[395,126879,126874],{},"标签用于绑定一个表单标签，当点击",[395,126882,126874],{},"标签内的文本",[19,126885,126886],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[1738,126888],{"style":126601,"src":126889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[1738,126891],{"style":126601,"src":126892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[343,126894,126896],{"id":126895},"_56-实例","5.6 实例",[1738,126898],{"style":126601,"src":126899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[5403,126901,126902],{},"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":316,"searchDepth":317,"depth":317,"links":126904},[126905,126906,126907,126908,126909,126911],{"id":126626,"depth":317,"text":126627},{"id":126683,"depth":317,"text":126684},{"id":126705,"depth":317,"text":126706},{"id":126775,"depth":317,"text":126776},{"id":126870,"depth":317,"text":126910},"5.5 \u003Clable>标签",{"id":126895,"depth":317,"text":126896},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126618,"description":23654},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126918,"title":126919,"body":126920,"description":23654,"extension":326,"meta":127469,"navigation":328,"path":127470,"seo":127471,"stem":127472,"__hash__":127473},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126921,"toc":127444},[126922,126925,126929,126932,126935,126939,126942,126945,126948,126951,126954,126957,126960,126964,126967,126971,126974,126977,126980,126984,126987,126990,126993,126999,127002,127005,127008,127011,127014,127017,127020,127053,127057,127060,127063,127066,127070,127073,127076,127079,127082,127085,127089,127092,127095,127098,127102,127105,127109,127112,127116,127119,127124,127128,127131,127135,127138,127141,127144,127147,127174,127177,127181,127184,127187,127192,127195,127198,127202,127205,127210,127213,127216,127219,127223,127226,127229,127232,127236,127239,127242,127245,127249,127253,127256,127296,127299,127303,127310,127313,127317,127320,127366,127370,127373,127376,127379,127407,127411,127414,127441],[10,126923,126919],{"id":126924},"_6-css语法与文本样式",[343,126926,126928],{"id":126927},"_61-css语法规范","6.1 css语法规范",[19,126930,126931],{},"由两部分组成，选择器及一条或多条声明",[1738,126933],{"style":126601,"src":126934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,126936,126937],{},[23,126938,438],{},[19,126940,126941],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,126943,126944],{},"②属性与属性值以“键值对”的形式出现",[19,126946,126947],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,126949,126950],{},"④属性和属性值之间用英文“;”分开",[1738,126952],{"style":126601,"src":126953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[1738,126955],{"style":126601,"src":126956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[1738,126958],{"style":126601,"src":126959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[343,126961,126963],{"id":126962},"_62-css选择器","6.2 css选择器",[19,126965,126966],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[14,126968,126970],{"id":126969},"_621-标签选择器","6.2.1 标签选择器",[19,126972,126973],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,126975,126976],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[1738,126978],{"style":126601,"src":126979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[14,126981,126983],{"id":126982},"_622-类选择器","6.2.2 类选择器",[19,126985,126986],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,126988,126989],{},"②样例",[1738,126991],{"style":126601,"src":126992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,126994,126995,126996,126998],{},"③ ",[23,126997,126833],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,127000,127001],{},"可以理解为给这个标签起了个名字，来表示；",[19,127003,127004],{},"长名称或词组可以使用横线来为选择器命名；",[19,127006,127007],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,127009,127010],{},"命名要有意义；",[1738,127012],{"style":126601,"src":127013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,127015,127016],{},"类选择器也可以指定特殊的元素p.center{}",[19,127018,127019],{},"p.center和.center都对",[389,127021,127023],{"className":126745,"code":127022,"language":126747,"meta":316,"style":316},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[395,127024,127025,127030,127039,127049],{"__ignoreMap":316},[398,127026,127027],{"class":400,"line":401},[398,127028,127029],{"class":467},"\u002F* 类选择器指定特殊元素 *\u002F\n",[398,127031,127032,127034,127037],{"class":400,"line":317},[398,127033,19],{"class":51493},[398,127035,127036],{"class":2239},".center",[398,127038,15849],{"class":408},[398,127040,127041,127043,127045,127047],{"class":400,"line":320},[398,127042,70719],{"class":457},[398,127044,51630],{"class":408},[398,127046,51785],{"class":457},[398,127048,1566],{"class":408},[398,127050,127051],{"class":400,"line":1470},[398,127052,1841],{"class":408},[14,127054,127056],{"id":127055},"_623-多类名使用","6.2.3 多类名使用",[19,127058,127059],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[1738,127061],{"style":126601,"src":127062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,127064,127065],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[14,127067,127069],{"id":127068},"_624-id选择器","6.2.4 id选择器",[19,127071,127072],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,127074,127075],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[1738,127077],{"style":126601,"src":127078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,127080,127081],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,127083,127084],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[14,127086,127088],{"id":127087},"_625-通配符选择器","6.2.5 通配符选择器",[19,127090,127091],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,127093,127094],{},"* {",[19,127096,127097],{},"color=\"red\"}",[14,127099,127101],{"id":127100},"_626-总结","6.2.6 总结",[1738,127103],{"style":126601,"src":127104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[343,127106,127108],{"id":127107},"_63-css字体属性","6.3 css字体属性",[19,127110,127111],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[14,127113,127115],{"id":127114},"_631-字体系列","6.3.1 字体系列",[19,127117,127118],{},"font-family: '宋体';",[19,127120,127121,127123],{},[23,127122,438],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[14,127125,127127],{"id":127126},"_632-字体大小","6.3.2 字体大小",[19,127129,127130],{},"font-size: 20px",[19,127132,127133,26666],{},[23,127134,126833],{},[19,127136,127137],{},"①px（像素）大小是网页的最常用单位",[19,127139,127140],{},"②谷歌浏览器默认为16px",[19,127142,127143],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,127145,127146],{},"④可以给body指定整个页面的大小：会自动引用",[389,127148,127150],{"className":126745,"code":127149,"language":126747,"meta":316,"style":316},"body {\n  font-size: 16px;\n}\n",[395,127151,127152,127158,127170],{"__ignoreMap":316},[398,127153,127154,127156],{"class":400,"line":401},[398,127155,51993],{"class":51493},[398,127157,15849],{"class":408},[398,127159,127160,127162,127164,127166,127168],{"class":400,"line":317},[398,127161,70819],{"class":457},[398,127163,51630],{"class":408},[398,127165,1003],{"class":457},[398,127167,51685],{"class":404},[398,127169,1566],{"class":408},[398,127171,127172],{"class":400,"line":320},[398,127173,1841],{"class":408},[19,127175,127176],{},"⑤标题标签比较特殊，需要单独指定大小",[14,127178,127180],{"id":127179},"_633-字体粗细","6.3.3 字体粗细",[19,127182,127183],{},"font-weight: bold;",[19,127185,127186],{},"font-weight: 100；",[19,127188,127189,127191],{},[23,127190,438],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,127193,127194],{},"font-weight= 400;",[19,127196,127197],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[14,127199,127201],{"id":127200},"_634-文字样式","6.3.4 文字样式",[19,127203,127204],{},"font-style: normal；",[19,127206,127207,26666],{},[23,127208,127209],{},"属性值",[19,127211,127212],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,127214,127215],{},"②italic：浏览器会显示斜体的字体样式",[1738,127217],{"style":126601,"src":127218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[14,127220,127222],{"id":127221},"_635-字体符合属性","6.3.5 字体符合属性",[1738,127224],{"style":126601,"src":127225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[1738,127227],{"style":126601,"src":127228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,127230,127231],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,127233,127234,26666],{},[23,127235,126833],{},[19,127237,127238],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,127240,127241],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,127243,127244],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[343,127246,127248],{"id":127247},"_64-css-test文本属性","6.4 css test文本属性",[14,127250,127252],{"id":127251},"_641-文本颜色","6.4.1 文本颜色",[19,127254,127255],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[389,127257,127259],{"className":126745,"code":127258,"language":126747,"meta":316,"style":316},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[395,127260,127261,127266,127272,127282,127287,127292],{"__ignoreMap":316},[398,127262,127263],{"class":400,"line":401},[398,127264,127265],{"class":467},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[398,127267,127268,127270],{"class":400,"line":317},[398,127269,19],{"class":51493},[398,127271,15849],{"class":408},[398,127273,127274,127276,127278,127280],{"class":400,"line":320},[398,127275,71098],{"class":457},[398,127277,51630],{"class":408},[398,127279,57614],{"class":457},[398,127281,1566],{"class":408},[398,127283,127284],{"class":400,"line":1470},[398,127285,127286],{"class":467},"  \u002F* color: #ff0000; *\u002F\n",[398,127288,127289],{"class":400,"line":1476},[398,127290,127291],{"class":467},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[398,127293,127294],{"class":400,"line":1490},[398,127295,1841],{"class":408},[1738,127297],{"style":126601,"src":127298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[14,127300,127302],{"id":127301},"_642-对齐文本","6.4.2 对齐文本",[19,127304,127305,127306,127309],{},"text-align属于用于设置元素内文本内容的 ",[23,127307,127308],{},"水平对齐"," 方式",[19,127311,127312],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[14,127314,127316],{"id":127315},"_643-装饰文本","6.4.3 装饰文本",[19,127318,127319],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[389,127321,127323],{"className":126745,"code":127322,"language":126747,"meta":316,"style":316},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[395,127324,127325,127331,127341,127345,127351,127362],{"__ignoreMap":316},[398,127326,127327,127329],{"class":400,"line":401},[398,127328,640],{"class":51493},[398,127330,15849],{"class":408},[398,127332,127333,127335,127337,127339],{"class":400,"line":317},[398,127334,70695],{"class":457},[398,127336,51630],{"class":408},[398,127338,54930],{"class":457},[398,127340,1566],{"class":408},[398,127342,127343],{"class":400,"line":320},[398,127344,1841],{"class":408},[398,127346,127347,127349],{"class":400,"line":1470},[398,127348,19],{"class":51493},[398,127350,15849],{"class":408},[398,127352,127353,127355,127357,127360],{"class":400,"line":1476},[398,127354,70695],{"class":457},[398,127356,51630],{"class":408},[398,127358,127359],{"class":457},"underline",[398,127361,1566],{"class":408},[398,127363,127364],{"class":400,"line":1490},[398,127365,1841],{"class":408},[14,127367,127369],{"id":127368},"_644-文本缩进","6.4.4 文本缩进",[19,127371,127372],{},"实现文本的第一行首行缩进自己指定的距离",[19,127374,127375],{},"20px往右边走；-20px往左边走",[19,127377,127378],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[389,127380,127382],{"className":126745,"code":127381,"language":126747,"meta":316,"style":316},"p {\n  text-indent: 2em;\n}\n",[395,127383,127384,127390,127403],{"__ignoreMap":316},[398,127385,127386,127388],{"class":400,"line":401},[398,127387,19],{"class":51493},[398,127389,15849],{"class":408},[398,127391,127392,127395,127397,127399,127401],{"class":400,"line":317},[398,127393,127394],{"class":457},"  text-indent",[398,127396,51630],{"class":408},[398,127398,486],{"class":457},[398,127400,23831],{"class":404},[398,127402,1566],{"class":408},[398,127404,127405],{"class":400,"line":320},[398,127406,1841],{"class":408},[14,127408,127410],{"id":127409},"_645-行间距","6.4.5 行间距",[19,127412,127413],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[389,127415,127417],{"className":126745,"code":127416,"language":126747,"meta":316,"style":316},"p {\n  line-height: 1.6;\n}\n",[395,127418,127419,127425,127437],{"__ignoreMap":316},[398,127420,127421,127423],{"class":400,"line":401},[398,127422,19],{"class":51493},[398,127424,15849],{"class":408},[398,127426,127427,127430,127432,127435],{"class":400,"line":317},[398,127428,127429],{"class":457},"  line-height",[398,127431,51630],{"class":408},[398,127433,127434],{"class":457},"1.6",[398,127436,1566],{"class":408},[398,127438,127439],{"class":400,"line":320},[398,127440,1841],{"class":408},[5403,127442,127443],{},"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":316,"searchDepth":317,"depth":317,"links":127445},[127446,127447,127455,127462],{"id":126927,"depth":317,"text":126928},{"id":126962,"depth":317,"text":126963,"children":127448},[127449,127450,127451,127452,127453,127454],{"id":126969,"depth":320,"text":126970},{"id":126982,"depth":320,"text":126983},{"id":127055,"depth":320,"text":127056},{"id":127068,"depth":320,"text":127069},{"id":127087,"depth":320,"text":127088},{"id":127100,"depth":320,"text":127101},{"id":127107,"depth":317,"text":127108,"children":127456},[127457,127458,127459,127460,127461],{"id":127114,"depth":320,"text":127115},{"id":127126,"depth":320,"text":127127},{"id":127179,"depth":320,"text":127180},{"id":127200,"depth":320,"text":127201},{"id":127221,"depth":320,"text":127222},{"id":127247,"depth":317,"text":127248,"children":127463},[127464,127465,127466,127467,127468],{"id":127251,"depth":320,"text":127252},{"id":127301,"depth":320,"text":127302},{"id":127315,"depth":320,"text":127316},{"id":127368,"depth":320,"text":127369},{"id":127409,"depth":320,"text":127410},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126919,"description":23654},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127475,"title":127476,"body":127477,"description":23654,"extension":326,"meta":128126,"navigation":328,"path":128127,"seo":128128,"stem":128129,"__hash__":128130},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127478,"toc":128107},[127479,127482,127486,127490,127550,127554,127564,127567,127570,127574,127599,127603,127606,127609,127612,127615,127618,127622,127625,127628,127670,127673,127699,127705,127708,127712,127716,127722,127725,127728,127731,127734,127737,127740,127785,127789,127792,127795,127799,127803,127832,127835,127840,127843,127846,127849,127852,127856,127860,127863,127865,127868,127872,127875,127879,127882,127885,127888,127892,127896,127902,127912,127915,127918,127921,127924,127927,128050,128058,128066,128104],[10,127480,127476],{"id":127481},"_7-css引入方式与选择器进阶",[343,127483,127485],{"id":127484},"_71-css引入方式","7.1 css引入方式",[14,127487,127489],{"id":127488},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[389,127491,127495],{"className":127492,"code":127493,"language":127494,"meta":316,"style":316},"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",[395,127496,127497,127505,127512,127524,127537,127542],{"__ignoreMap":316},[398,127498,127499,127501,127503],{"class":400,"line":401},[398,127500,1312],{"class":408},[398,127502,5403],{"class":51493},[398,127504,51500],{"class":408},[398,127506,127507,127510],{"class":400,"line":317},[398,127508,127509],{"class":51493},"  h1",[398,127511,15849],{"class":408},[398,127513,127514,127517,127519,127522],{"class":400,"line":320},[398,127515,127516],{"class":457},"    color",[398,127518,51630],{"class":408},[398,127520,127521],{"class":457},"blue",[398,127523,1566],{"class":408},[398,127525,127526,127529,127531,127533,127535],{"class":400,"line":1470},[398,127527,127528],{"class":457},"    font-size",[398,127530,51630],{"class":408},[398,127532,1202],{"class":457},[398,127534,51685],{"class":404},[398,127536,1566],{"class":408},[398,127538,127539],{"class":400,"line":1476},[398,127540,127541],{"class":408},"  }\n",[398,127543,127544,127546,127548],{"class":400,"line":1490},[398,127545,51978],{"class":408},[398,127547,5403],{"class":51493},[398,127549,51500],{"class":408},[19,127551,127552,26666],{},[23,127553,126833],{},[19,127555,77419,127556,127559,127560,127563],{},[395,127557,127558],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[395,127561,127562],{},"\u003Chead>","标签中",[19,127565,127566],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,127568,127569],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[14,127571,127573],{"id":127572},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[389,127575,127577],{"className":127492,"code":127576,"language":127494,"meta":316,"style":316},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[395,127578,127579],{"__ignoreMap":316},[398,127580,127581,127583,127585,127587,127589,127592,127595,127597],{"class":400,"line":401},[398,127582,1312],{"class":408},[398,127584,19],{"class":51493},[398,127586,62819],{"class":2239},[398,127588,454],{"class":408},[398,127590,127591],{"class":513},"\"color: red; font-size: 16px;\"",[398,127593,127594],{"class":408},">这是一个段落\u003C\u002F",[398,127596,19],{"class":51493},[398,127598,51500],{"class":408},[19,127600,127601,26666],{},[23,127602,126833],{},[19,127604,127605],{},"①style其实就是标签的属性",[19,127607,127608],{},"②在双引号中间，写法要符合css规范",[19,127610,127611],{},"③可以控制当前的标签设置样式",[19,127613,127614],{},"④书写繁琐，简单时才用",[19,127616,127617],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[14,127619,127621],{"id":127620},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,127623,127624],{},"使用最多，单独建一个css文件，然后html引用",[19,127626,127627],{},"①css文件部分： style.css",[389,127629,127631],{"className":126745,"code":127630,"language":126747,"meta":316,"style":316},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[395,127632,127633,127638,127644,127654,127666],{"__ignoreMap":316},[398,127634,127635],{"class":400,"line":401},[398,127636,127637],{"class":467},"\u002F* style.css *\u002F\n",[398,127639,127640,127642],{"class":400,"line":317},[398,127641,10],{"class":51493},[398,127643,15849],{"class":408},[398,127645,127646,127648,127650,127652],{"class":400,"line":320},[398,127647,71098],{"class":457},[398,127649,51630],{"class":408},[398,127651,127521],{"class":457},[398,127653,1566],{"class":408},[398,127655,127656,127658,127660,127662,127664],{"class":400,"line":1470},[398,127657,70819],{"class":457},[398,127659,51630],{"class":408},[398,127661,1202],{"class":457},[398,127663,51685],{"class":404},[398,127665,1566],{"class":408},[398,127667,127668],{"class":400,"line":1476},[398,127669,1841],{"class":408},[19,127671,127672],{},"②html部分",[389,127674,127676],{"className":127492,"code":127675,"language":127494,"meta":316,"style":316},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[395,127677,127678],{"__ignoreMap":316},[398,127679,127680,127682,127684,127686,127688,127690,127692,127694,127697],{"class":400,"line":401},[398,127681,1312],{"class":408},[398,127683,69198],{"class":51493},[398,127685,69201],{"class":2239},[398,127687,454],{"class":408},[398,127689,69206],{"class":513},[398,127691,61250],{"class":2239},[398,127693,454],{"class":408},[398,127695,127696],{"class":513},"\"style.css\"",[398,127698,51500],{"class":408},[19,127700,127701,127704],{},[395,127702,127703],{},"\u003Chr>","水平线标签（但是不常用！）",[19,127706,127707],{},"ctrl+0回到页面原来大小",[343,127709,127711],{"id":127710},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[14,127713,127715],{"id":127714},"_721-快速生成html","7.2.1 快速生成html",[19,127717,127718,127719],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[395,127720,127721],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,127723,127724],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,127726,127727],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,127729,127730],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,127732,127733],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,127735,127736],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,127738,127739],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[389,127741,127743],{"className":127492,"code":127742,"language":127494,"meta":316,"style":316},"\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",[395,127744,127745,127750,127755,127760,127765,127770,127775,127780],{"__ignoreMap":316},[398,127746,127747],{"class":400,"line":401},[398,127748,127749],{"class":467},"\u003C!-- Emmet 语法示例 -->\n",[398,127751,127752],{"class":400,"line":317},[398,127753,127754],{"class":467},"\u003C!-- div*3        → 生成3个div -->\n",[398,127756,127757],{"class":400,"line":320},[398,127758,127759],{"class":467},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[398,127761,127762],{"class":400,"line":1470},[398,127763,127764],{"class":467},"\u003C!-- div+p        → 兄弟div和p -->\n",[398,127766,127767],{"class":400,"line":1476},[398,127768,127769],{"class":467},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[398,127771,127772],{"class":400,"line":1490},[398,127773,127774],{"class":467},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[398,127776,127777],{"class":400,"line":1496},[398,127778,127779],{"class":467},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[398,127781,127782],{"class":400,"line":1587},[398,127783,127784],{"class":467},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[14,127786,127788],{"id":127787},"_722-快速生成css","7.2.2 快速生成css",[19,127790,127791],{},"简写开头",[19,127793,127794],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[343,127796,127798],{"id":127797},"_73-css复合选择器","7.3 css复合选择器",[14,127800,127802],{"id":127801},"_731-后代选择器","7.3.1 后代选择器",[389,127804,127806],{"className":126745,"code":127805,"language":126747,"meta":316,"style":316},".parent .child {\n  color: blue;\n}\n",[395,127807,127808,127818,127828],{"__ignoreMap":316},[398,127809,127810,127813,127816],{"class":400,"line":401},[398,127811,127812],{"class":2239},".parent",[398,127814,127815],{"class":2239}," .child",[398,127817,15849],{"class":408},[398,127819,127820,127822,127824,127826],{"class":400,"line":317},[398,127821,71098],{"class":457},[398,127823,51630],{"class":408},[398,127825,127521],{"class":457},[398,127827,1566],{"class":408},[398,127829,127830],{"class":400,"line":320},[398,127831,1841],{"class":408},[19,127833,127834],{},"元素1 元素2 {样式声明}",[19,127836,127837],{},[23,127838,127839],{},"注意点:",[19,127841,127842],{},"①元素1和元素2中间用空格隔开",[19,127844,127845],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,127847,127848],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,127850,127851],{},"④元素1和元素2可以是任意基础选择器",[14,127853,127855],{"id":127854},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,127857,127858],{},[23,127859,127839],{},[19,127861,127862],{},"①元素1和元素2中间用大于号隔开",[19,127864,127845],{},[19,127866,127867],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[14,127869,127871],{"id":127870},"_733-并集选择器","7.3.3 并集选择器",[19,127873,127874],{},"元素1，元素2 {样式声明}",[19,127876,127877],{},[23,127878,127839],{},[19,127880,127881],{},"①元素1和元素2中间用逗号隔开",[19,127883,127884],{},"②逗号可以理解为和的意思",[19,127886,127887],{},"③并集选择器通常用于集体声明",[14,127889,127891],{"id":127890},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,127893,127894],{},[23,127895,127839],{},[19,127897,127898,127899,127901],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69198,127900],{},"－:visited－:hover－:active。",[19,127903,127904,127905,127908,127909,78],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127906,127907],"hover",{}," 、 ",[127910,127911],"first-child",{},[19,127913,127914],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,127916,127917],{},"link对没访问的进行设置",[19,127919,127920],{},"vistied对已访问的进行改变",[19,127922,127923],{},"hover鼠标经过就会变",[19,127925,127926],{},"active常按(点)就会变",[389,127928,127930],{"className":126745,"code":127929,"language":126747,"meta":316,"style":316},"\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",[395,127931,127932,127937,127946,127956,127966,127970,127979,127990,127994,128002,128012,128022,128026,128035,128046],{"__ignoreMap":316},[398,127933,127934],{"class":400,"line":401},[398,127935,127936],{"class":467},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[398,127938,127939,127941,127944],{"class":400,"line":317},[398,127940,640],{"class":51493},[398,127942,127943],{"class":2239},":link",[398,127945,15849],{"class":408},[398,127947,127948,127950,127952,127954],{"class":400,"line":320},[398,127949,71098],{"class":457},[398,127951,51630],{"class":408},[398,127953,62562],{"class":457},[398,127955,1566],{"class":408},[398,127957,127958,127960,127962,127964],{"class":400,"line":1470},[398,127959,70695],{"class":457},[398,127961,51630],{"class":408},[398,127963,54930],{"class":457},[398,127965,1566],{"class":408},[398,127967,127968],{"class":400,"line":1476},[398,127969,1841],{"class":408},[398,127971,127972,127974,127977],{"class":400,"line":1490},[398,127973,640],{"class":51493},[398,127975,127976],{"class":2239},":visited",[398,127978,15849],{"class":408},[398,127980,127981,127983,127985,127988],{"class":400,"line":1496},[398,127982,71098],{"class":457},[398,127984,51630],{"class":408},[398,127986,127987],{"class":457},"purple",[398,127989,1566],{"class":408},[398,127991,127992],{"class":400,"line":1587},[398,127993,1841],{"class":408},[398,127995,127996,127998,128000],{"class":400,"line":1593},[398,127997,640],{"class":51493},[398,127999,61133],{"class":2239},[398,128001,15849],{"class":408},[398,128003,128004,128006,128008,128010],{"class":400,"line":1605},[398,128005,71098],{"class":457},[398,128007,51630],{"class":408},[398,128009,55082],{"class":457},[398,128011,1566],{"class":408},[398,128013,128014,128016,128018,128020],{"class":400,"line":1888},[398,128015,70695],{"class":457},[398,128017,51630],{"class":408},[398,128019,127359],{"class":457},[398,128021,1566],{"class":408},[398,128023,128024],{"class":400,"line":1893},[398,128025,1841],{"class":408},[398,128027,128028,128030,128033],{"class":400,"line":1899},[398,128029,640],{"class":51493},[398,128031,128032],{"class":2239},":active",[398,128034,15849],{"class":408},[398,128036,128037,128039,128041,128044],{"class":400,"line":1904},[398,128038,71098],{"class":457},[398,128040,51630],{"class":408},[398,128042,128043],{"class":457},"green",[398,128045,1566],{"class":408},[398,128047,128048],{"class":400,"line":1918},[398,128049,1841],{"class":408},[14,128051,128053,128054,128057],{"id":128052},"_735-伪类选择器","7.3.5 ",[128055,128056],"focus",{},"伪类选择器",[19,128059,128060,128062,128063,128065],{},[128055,128061],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[395,128064,126806],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[389,128067,128069],{"className":126745,"code":128068,"language":126747,"meta":316,"style":316},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[395,128070,128071,128079,128090,128100],{"__ignoreMap":316},[398,128072,128073,128075,128077],{"class":400,"line":401},[398,128074,54014],{"class":51493},[398,128076,62093],{"class":2239},[398,128078,15849],{"class":408},[398,128080,128081,128084,128086,128088],{"class":400,"line":317},[398,128082,128083],{"class":457},"  border-color",[398,128085,51630],{"class":408},[398,128087,55082],{"class":457},[398,128089,1566],{"class":408},[398,128091,128092,128094,128096,128098],{"class":400,"line":320},[398,128093,70991],{"class":457},[398,128095,51630],{"class":408},[398,128097,54930],{"class":457},[398,128099,1566],{"class":408},[398,128101,128102],{"class":400,"line":1470},[398,128103,1841],{"class":408},[5403,128105,128106],{},"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":316,"searchDepth":317,"depth":317,"links":128108},[128109,128114,128118],{"id":127484,"depth":317,"text":127485,"children":128110},[128111,128112,128113],{"id":127488,"depth":320,"text":127489},{"id":127572,"depth":320,"text":127573},{"id":127620,"depth":320,"text":127621},{"id":127710,"depth":317,"text":127711,"children":128115},[128116,128117],{"id":127714,"depth":320,"text":127715},{"id":127787,"depth":320,"text":127788},{"id":127797,"depth":317,"text":127798,"children":128119},[128120,128121,128122,128123,128124],{"id":127801,"depth":320,"text":127802},{"id":127854,"depth":320,"text":127855},{"id":127870,"depth":320,"text":127871},{"id":127890,"depth":320,"text":127891},{"id":128052,"depth":320,"text":128125},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127476,"description":23654},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128132,"title":128133,"body":128134,"description":23654,"extension":326,"meta":130057,"navigation":328,"path":130058,"seo":130059,"stem":130060,"__hash__":130061},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128135,"toc":130031},[128136,128139,128143,128152,128156,128182,128187,128190,128193,128196,128199,128203,128206,128216,128224,128228,128263,128268,128271,128274,128277,128280,128284,128287,128296,128300,128313,128318,128321,128324,128327,128331,128334,128338,128341,128396,128399,128430,128433,128487,128491,128494,128660,128783,128786,128789,128792,128795,128799,128802,128806,128809,128812,128816,128819,128850,128877,128905,128908,128912,128938,128981,128985,129079,129082,129109,129112,129115,129118,129121,129124,129127,129130,129133,129136,129140,129197,129224,129228,129276,129280,129321,129323,129326,129329,129332,129335,129339,129431,129434,129437,129440,129444,129567,129768,129772,129776,129779,129782,129785,129789,129792,129795,129820,129823,129826,129829,129832,129835,129839,129847,129909,129912,129970,129973,129976,129979,129982,129985,129988,129991,130028],[10,128137,128133],{"id":128138},"_8-css显示模式与背景特性",[343,128140,128142],{"id":128141},"_81-css元素显示模式","8.1 css元素显示模式",[19,128144,128145,128146,128148,128149,128151],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[395,128147,126356],{},"自己占一行，比如一行可以放多个",[395,128150,126359],{},"，HTML 元素一般分为块元素和行内元素两种类型",[14,128153,128155],{"id":128154},"_811-块元素","8.1.1 块元素",[19,128157,128158,128159,128161,128162,614,128165,614,128167,614,128169,614,128172,614,128175,128178,128179,128181],{},"常见的块元素有",[395,128160,126260],{},"~",[395,128163,128164],{},"\u003Ch6>",[395,128166,126286],{},[395,128168,126356],{},[395,128170,128171],{},"\u003Cul>",[395,128173,128174],{},"\u003Col>",[395,128176,128177],{},"\u003Cli>","等，其中 ",[395,128180,126356],{}," 标签是最典型的块元素",[19,128183,128184],{},[23,128185,128186],{},"块级元素的特点：",[19,128188,128189],{},"① 比较霸道，自己独占一行。",[19,128191,128192],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,128194,128195],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,128197,128198],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,128200,128201],{},[23,128202,438],{},[19,128204,128205],{},"①文字类的元素内不能使用块级元素",[19,128207,77442,128208,128210,128211,128213,128214],{},[395,128209,126286],{}," 标签主要用于存放文字，因此 ",[395,128212,126286],{}," 里面不能放块级元素，特别是不能放",[395,128215,126356],{},[19,128217,128218,128219,128161,128221,128223],{},"⑥同理， ",[395,128220,126260],{},[395,128222,128164],{},"等都是文字类块级标签，里面也不能放其他块级元素",[14,128225,128227],{"id":128226},"_812-行内元素","8.1.2 行内元素",[19,128229,128230,128231,614,128233,614,128236,614,128239,614,128242,614,128245,614,128248,614,128251,614,128254,614,128257,128259,128260,128262],{},"常见的行内元素有 ",[395,128232,126518],{},[395,128234,128235],{},"\u003Cstrong>",[395,128237,128238],{},"\u003Cb>",[395,128240,128241],{},"\u003Cem>",[395,128243,128244],{},"\u003Ci>",[395,128246,128247],{},"\u003Cdel>",[395,128249,128250],{},"\u003Cs>",[395,128252,128253],{},"\u003Cins>",[395,128255,128256],{},"\u003Cu>",[395,128258,126359],{}," 等，其中 ",[395,128261,126359],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,128264,128265],{},[23,128266,128267],{},"特点：",[19,128269,128270],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,128272,128273],{},"② 高、宽直接设置是无效的。",[19,128275,128276],{},"③ 默认宽度就是它本身内容的宽度。",[19,128278,128279],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,128281,128282],{},[23,128283,438],{},[19,128285,128286],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,128288,128289,128290,128292,128293,128295],{},"②特殊情况链接 ",[395,128291,126518],{}," 里面可以放块级元素，但是给 ",[395,128294,126518],{}," 转换一下块级模式最安全",[14,128297,128299],{"id":128298},"_813-行内块元素","8.1.3 行内块元素",[19,128301,128302,128303,614,128306,614,128309,128312],{},"在行内元素中有几个特殊的标签 —— ",[395,128304,128305],{},"\u003Cimg \u002F>",[395,128307,128308],{},"\u003Cinput \u002F>",[395,128310,128311],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,128314,128315],{},[23,128316,128317],{},"行内块元素的特点：",[19,128319,128320],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,128322,128323],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,128325,128326],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[14,128328,128330],{"id":128329},"_814-总结","8.1.4 总结",[1738,128332],{"style":126601,"src":128333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[14,128335,128337],{"id":128336},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,128339,128340],{},"①转换为块元素：display:block;",[389,128342,128344],{"className":126745,"code":128343,"language":126747,"meta":316,"style":316},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[395,128345,128346,128351,128357,128368,128380,128392],{"__ignoreMap":316},[398,128347,128348],{"class":400,"line":401},[398,128349,128350],{"class":467},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[398,128352,128353,128355],{"class":400,"line":317},[398,128354,640],{"class":51493},[398,128356,15849],{"class":408},[398,128358,128359,128362,128364,128366],{"class":400,"line":320},[398,128360,128361],{"class":457},"  display",[398,128363,51630],{"class":408},[398,128365,61062],{"class":457},[398,128367,1566],{"class":408},[398,128369,128370,128372,128374,128376,128378],{"class":400,"line":1470},[398,128371,70761],{"class":457},[398,128373,51630],{"class":408},[398,128375,713],{"class":457},[398,128377,51685],{"class":404},[398,128379,1566],{"class":408},[398,128381,128382,128384,128386,128388,128390],{"class":400,"line":1476},[398,128383,70981],{"class":457},[398,128385,51630],{"class":408},[398,128387,803],{"class":457},[398,128389,51685],{"class":404},[398,128391,1566],{"class":408},[398,128393,128394],{"class":400,"line":1490},[398,128395,1841],{"class":408},[19,128397,128398],{},"②转换为行内元素：display:inline;",[389,128400,128402],{"className":126745,"code":128401,"language":126747,"meta":316,"style":316},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[395,128403,128404,128409,128415,128426],{"__ignoreMap":316},[398,128405,128406],{"class":400,"line":401},[398,128407,128408],{"class":467},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[398,128410,128411,128413],{"class":400,"line":317},[398,128412,51804],{"class":51493},[398,128414,15849],{"class":408},[398,128416,128417,128419,128421,128424],{"class":400,"line":320},[398,128418,128361],{"class":457},[398,128420,51630],{"class":408},[398,128422,128423],{"class":457},"inline",[398,128425,1566],{"class":408},[398,128427,128428],{"class":400,"line":1470},[398,128429,1841],{"class":408},[19,128431,128432],{},"③转换为行内块：display:inline-block;",[389,128434,128436],{"className":126745,"code":128435,"language":126747,"meta":316,"style":316},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[395,128437,128438,128443,128449,128459,128471,128483],{"__ignoreMap":316},[398,128439,128440],{"class":400,"line":401},[398,128441,128442],{"class":467},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[398,128444,128445,128447],{"class":400,"line":317},[398,128446,398],{"class":51493},[398,128448,15849],{"class":408},[398,128450,128451,128453,128455,128457],{"class":400,"line":320},[398,128452,128361],{"class":457},[398,128454,51630],{"class":408},[398,128456,72576],{"class":457},[398,128458,1566],{"class":408},[398,128460,128461,128463,128465,128467,128469],{"class":400,"line":1470},[398,128462,70761],{"class":457},[398,128464,51630],{"class":408},[398,128466,1014],{"class":457},[398,128468,51685],{"class":404},[398,128470,1566],{"class":408},[398,128472,128473,128475,128477,128479,128481],{"class":400,"line":1476},[398,128474,70981],{"class":457},[398,128476,51630],{"class":408},[398,128478,1353],{"class":457},[398,128480,51685],{"class":404},[398,128482,1566],{"class":408},[398,128484,128485],{"class":400,"line":1490},[398,128486,1841],{"class":408},[14,128488,128490],{"id":128489},"_816-小米侧边栏","8.1.6 小米侧边栏",[1738,128492],{"style":126601,"src":128493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[389,128495,128497],{"className":127492,"code":128496,"language":127494,"meta":316,"style":316},"\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",[395,128498,128499,128504,128519,128538,128557,128576,128595,128614,128633,128652],{"__ignoreMap":316},[398,128500,128501],{"class":400,"line":401},[398,128502,128503],{"class":467},"\u003C!-- 小米侧边栏案例 -->\n",[398,128505,128506,128508,128510,128512,128514,128517],{"class":400,"line":317},[398,128507,1312],{"class":408},[398,128509,51804],{"class":51493},[398,128511,53679],{"class":2239},[398,128513,454],{"class":408},[398,128515,128516],{"class":513},"\"sidebar\"",[398,128518,51500],{"class":408},[398,128520,128521,128523,128525,128527,128529,128531,128534,128536],{"class":400,"line":320},[398,128522,52337],{"class":408},[398,128524,640],{"class":51493},[398,128526,61250],{"class":2239},[398,128528,454],{"class":408},[398,128530,61255],{"class":513},[398,128532,128533],{"class":408},">手机 电话卡\u003C\u002F",[398,128535,640],{"class":51493},[398,128537,51500],{"class":408},[398,128539,128540,128542,128544,128546,128548,128550,128553,128555],{"class":400,"line":1470},[398,128541,52337],{"class":408},[398,128543,640],{"class":51493},[398,128545,61250],{"class":2239},[398,128547,454],{"class":408},[398,128549,61255],{"class":513},[398,128551,128552],{"class":408},">电视 盒子\u003C\u002F",[398,128554,640],{"class":51493},[398,128556,51500],{"class":408},[398,128558,128559,128561,128563,128565,128567,128569,128572,128574],{"class":400,"line":1476},[398,128560,52337],{"class":408},[398,128562,640],{"class":51493},[398,128564,61250],{"class":2239},[398,128566,454],{"class":408},[398,128568,61255],{"class":513},[398,128570,128571],{"class":408},">笔记本 平板\u003C\u002F",[398,128573,640],{"class":51493},[398,128575,51500],{"class":408},[398,128577,128578,128580,128582,128584,128586,128588,128591,128593],{"class":400,"line":1490},[398,128579,52337],{"class":408},[398,128581,640],{"class":51493},[398,128583,61250],{"class":2239},[398,128585,454],{"class":408},[398,128587,61255],{"class":513},[398,128589,128590],{"class":408},">出行 穿戴\u003C\u002F",[398,128592,640],{"class":51493},[398,128594,51500],{"class":408},[398,128596,128597,128599,128601,128603,128605,128607,128610,128612],{"class":400,"line":1496},[398,128598,52337],{"class":408},[398,128600,640],{"class":51493},[398,128602,61250],{"class":2239},[398,128604,454],{"class":408},[398,128606,61255],{"class":513},[398,128608,128609],{"class":408},">智能 路由器\u003C\u002F",[398,128611,640],{"class":51493},[398,128613,51500],{"class":408},[398,128615,128616,128618,128620,128622,128624,128626,128629,128631],{"class":400,"line":1587},[398,128617,52337],{"class":408},[398,128619,640],{"class":51493},[398,128621,61250],{"class":2239},[398,128623,454],{"class":408},[398,128625,61255],{"class":513},[398,128627,128628],{"class":408},">健康 儿童\u003C\u002F",[398,128630,640],{"class":51493},[398,128632,51500],{"class":408},[398,128634,128635,128637,128639,128641,128643,128645,128648,128650],{"class":400,"line":1593},[398,128636,52337],{"class":408},[398,128638,640],{"class":51493},[398,128640,61250],{"class":2239},[398,128642,454],{"class":408},[398,128644,61255],{"class":513},[398,128646,128647],{"class":408},">耳机 音响\u003C\u002F",[398,128649,640],{"class":51493},[398,128651,51500],{"class":408},[398,128653,128654,128656,128658],{"class":400,"line":1605},[398,128655,51978],{"class":408},[398,128657,51804],{"class":51493},[398,128659,51500],{"class":408},[389,128661,128663],{"className":126745,"code":128662,"language":126747,"meta":316,"style":316},".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",[395,128664,128665,128674,128684,128697,128709,128721,128733,128743,128754,128758,128768,128779],{"__ignoreMap":316},[398,128666,128667,128670,128672],{"class":400,"line":401},[398,128668,128669],{"class":2239},".sidebar",[398,128671,1674],{"class":51493},[398,128673,15849],{"class":408},[398,128675,128676,128678,128680,128682],{"class":400,"line":317},[398,128677,128361],{"class":457},[398,128679,51630],{"class":408},[398,128681,61062],{"class":457},[398,128683,1566],{"class":408},[398,128685,128686,128688,128690,128693,128695],{"class":400,"line":320},[398,128687,70761],{"class":457},[398,128689,51630],{"class":408},[398,128691,128692],{"class":457},"234",[398,128694,51685],{"class":404},[398,128696,1566],{"class":408},[398,128698,128699,128701,128703,128705,128707],{"class":400,"line":1470},[398,128700,70981],{"class":457},[398,128702,51630],{"class":408},[398,128704,854],{"class":457},[398,128706,51685],{"class":404},[398,128708,1566],{"class":408},[398,128710,128711,128713,128715,128717,128719],{"class":400,"line":1476},[398,128712,127429],{"class":457},[398,128714,51630],{"class":408},[398,128716,854],{"class":457},[398,128718,51685],{"class":404},[398,128720,1566],{"class":408},[398,128722,128723,128725,128727,128729,128731],{"class":400,"line":1490},[398,128724,71016],{"class":457},[398,128726,51630],{"class":408},[398,128728,1353],{"class":457},[398,128730,51685],{"class":404},[398,128732,1566],{"class":408},[398,128734,128735,128737,128739,128741],{"class":400,"line":1496},[398,128736,71098],{"class":457},[398,128738,51630],{"class":408},[398,128740,61035],{"class":457},[398,128742,1566],{"class":408},[398,128744,128745,128747,128749,128752],{"class":400,"line":1587},[398,128746,71071],{"class":457},[398,128748,51630],{"class":408},[398,128750,128751],{"class":457},"#55585a",[398,128753,1566],{"class":408},[398,128755,128756],{"class":400,"line":1593},[398,128757,1841],{"class":408},[398,128759,128760,128762,128764,128766],{"class":400,"line":1605},[398,128761,128669],{"class":2239},[398,128763,1674],{"class":51493},[398,128765,61133],{"class":2239},[398,128767,15849],{"class":408},[398,128769,128770,128772,128774,128777],{"class":400,"line":1888},[398,128771,71071],{"class":457},[398,128773,51630],{"class":408},[398,128775,128776],{"class":457},"#ff6700",[398,128778,1566],{"class":408},[398,128780,128781],{"class":400,"line":1893},[398,128782,1841],{"class":408},[1738,128784],{"style":126601,"src":128785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,128787,128788],{},"行高=盒子高度：实现文字的垂直居中",[19,128790,128791],{},"原理讲解：",[1738,128793],{"style":126601,"src":128794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[343,128796,128798],{"id":128797},"_82-css背景","8.2 css背景",[19,128800,128801],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[14,128803,128805],{"id":128804},"_821-背景颜色","8.2.1 背景颜色",[19,128807,128808],{},"background-color:颜色值;",[19,128810,128811],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[14,128813,128815],{"id":128814},"_822-背景图片","8.2.2 背景图片",[19,128817,128818],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[389,128820,128822],{"className":126745,"code":128821,"language":126747,"meta":316,"style":316},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[395,128823,128824,128830,128846],{"__ignoreMap":316},[398,128825,128826,128828],{"class":400,"line":401},[398,128827,51804],{"class":51493},[398,128829,15849],{"class":408},[398,128831,128832,128835,128837,128839,128841,128844],{"class":400,"line":317},[398,128833,128834],{"class":457},"  background-image",[398,128836,51630],{"class":408},[398,128838,61919],{"class":457},[398,128840,409],{"class":408},[398,128842,128843],{"class":5493},"images\u002Fbg.png",[398,128845,2995],{"class":408},[398,128847,128848],{"class":400,"line":320},[398,128849,1841],{"class":408},[84,128851,128852,128861],{},[87,128853,128854],{},[90,128855,128856,128859],{},[93,128857,128858],{"align":95},"参数值",[93,128860,102889],{"align":95},[101,128862,128863,128870],{},[90,128864,128865,128867],{},[106,128866,54930],{"align":95},[106,128868,128869],{"align":95},"无背景图（默认的）",[90,128871,128872,128874],{},[106,128873,61919],{"align":95},[106,128875,128876],{"align":95},"使用绝对或相对地址指定背景图像",[389,128878,128879],{"className":126745,"code":128821,"language":126747,"meta":316,"style":316},[395,128880,128881,128887,128901],{"__ignoreMap":316},[398,128882,128883,128885],{"class":400,"line":401},[398,128884,51804],{"class":51493},[398,128886,15849],{"class":408},[398,128888,128889,128891,128893,128895,128897,128899],{"class":400,"line":317},[398,128890,128834],{"class":457},[398,128892,51630],{"class":408},[398,128894,61919],{"class":457},[398,128896,409],{"class":408},[398,128898,128843],{"class":5493},[398,128900,2995],{"class":408},[398,128902,128903],{"class":400,"line":320},[398,128904,1841],{"class":408},[19,128906,128907],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[14,128909,128911],{"id":128910},"_823-背景平铺","8.2.3 背景平铺",[389,128913,128915],{"className":126745,"code":128914,"language":126747,"meta":316,"style":316},"div {\n  background-repeat: no-repeat;\n}\n",[395,128916,128917,128923,128934],{"__ignoreMap":316},[398,128918,128919,128921],{"class":400,"line":401},[398,128920,51804],{"class":51493},[398,128922,15849],{"class":408},[398,128924,128925,128928,128930,128932],{"class":400,"line":317},[398,128926,128927],{"class":457},"  background-repeat",[398,128929,51630],{"class":408},[398,128931,61929],{"class":457},[398,128933,1566],{"class":408},[398,128935,128936],{"class":400,"line":320},[398,128937,1841],{"class":408},[84,128939,128940,128948],{},[87,128941,128942],{},[90,128943,128944,128946],{},[93,128945,128858],{"align":95},[93,128947,102889],{"align":95},[101,128949,128950,128958,128965,128973],{},[90,128951,128952,128955],{},[106,128953,128954],{"align":95},"repeat",[106,128956,128957],{"align":95},"背景图像在纵向和横向上平铺（默认的）",[90,128959,128960,128962],{},[106,128961,61929],{"align":95},[106,128963,128964],{"align":95},"背景图像不平铺",[90,128966,128967,128970],{},[106,128968,128969],{"align":95},"repeat-x",[106,128971,128972],{"align":95},"背景图像在横向上平铺",[90,128974,128975,128978],{},[106,128976,128977],{"align":95},"repeat-y",[106,128979,128980],{"align":95},"背景图像在纵向平铺",[14,128982,128984],{"id":128983},"_824-背景图片位置","8.2.4 背景图片位置",[389,128986,128988],{"className":126745,"code":128987,"language":126747,"meta":316,"style":316},"\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",[395,128989,128990,128995,129001,129015,129019,129024,129030,129046,129050,129055,129061,129075],{"__ignoreMap":316},[398,128991,128992],{"class":400,"line":401},[398,128993,128994],{"class":467},"\u002F* 方位名词 *\u002F\n",[398,128996,128997,128999],{"class":400,"line":317},[398,128998,51804],{"class":51493},[398,129000,15849],{"class":408},[398,129002,129003,129006,129008,129010,129013],{"class":400,"line":320},[398,129004,129005],{"class":457},"  background-position",[398,129007,51630],{"class":408},[398,129009,51785],{"class":457},[398,129011,129012],{"class":457}," top",[398,129014,1566],{"class":408},[398,129016,129017],{"class":400,"line":1470},[398,129018,1841],{"class":408},[398,129020,129021],{"class":400,"line":1476},[398,129022,129023],{"class":467},"\u002F* 精确单位 *\u002F\n",[398,129025,129026,129028],{"class":400,"line":1490},[398,129027,51804],{"class":51493},[398,129029,15849],{"class":408},[398,129031,129032,129034,129036,129038,129040,129042,129044],{"class":400,"line":1496},[398,129033,129005],{"class":457},[398,129035,51630],{"class":408},[398,129037,1102],{"class":457},[398,129039,51685],{"class":404},[398,129041,57697],{"class":457},[398,129043,51685],{"class":404},[398,129045,1566],{"class":408},[398,129047,129048],{"class":400,"line":1587},[398,129049,1841],{"class":408},[398,129051,129052],{"class":400,"line":1593},[398,129053,129054],{"class":467},"\u002F* 混合单位 *\u002F\n",[398,129056,129057,129059],{"class":400,"line":1605},[398,129058,51804],{"class":51493},[398,129060,15849],{"class":408},[398,129062,129063,129065,129067,129069,129071,129073],{"class":400,"line":1888},[398,129064,129005],{"class":457},[398,129066,51630],{"class":408},[398,129068,1102],{"class":457},[398,129070,51685],{"class":404},[398,129072,17421],{"class":457},[398,129074,1566],{"class":408},[398,129076,129077],{"class":400,"line":1893},[398,129078,1841],{"class":408},[19,129080,129081],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[84,129083,129084,129092],{},[87,129085,129086],{},[90,129087,129088,129090],{},[93,129089,128858],{"align":95},[93,129091,214],{"align":95},[101,129093,129094,129101],{},[90,129095,129096,129098],{},[106,129097,52161],{"align":95},[106,129099,129100],{"align":95},"百分数|由浮点数和单位标识符组成的长度值",[90,129102,129103,129106],{},[106,129104,129105],{"align":95},"position",[106,129107,129108],{"align":95},"top|center|bottom|left|center|right 方位名词",[19,129110,129111],{},"其他说明：",[19,129113,129114],{},"①参数是方位名词",[19,129116,129117],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,129119,129120],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,129122,129123],{},"②参数是精确单位",[19,129125,129126],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,129128,129129],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,129131,129132],{},"③参数是混合单位",[19,129134,129135],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[14,129137,129139],{"id":129138},"_825-背景图片固定","8.2.5 背景图片固定",[389,129141,129143],{"className":126745,"code":129142,"language":126747,"meta":316,"style":316},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[395,129144,129145,129150,129156,129168,129172,129177,129183,129193],{"__ignoreMap":316},[398,129146,129147],{"class":400,"line":401},[398,129148,129149],{"class":467},"\u002F* 背景滚动（默认） *\u002F\n",[398,129151,129152,129154],{"class":400,"line":317},[398,129153,51804],{"class":51493},[398,129155,15849],{"class":408},[398,129157,129158,129161,129163,129166],{"class":400,"line":320},[398,129159,129160],{"class":457},"  background-attachment",[398,129162,51630],{"class":408},[398,129164,129165],{"class":457},"scroll",[398,129167,1566],{"class":408},[398,129169,129170],{"class":400,"line":1470},[398,129171,1841],{"class":408},[398,129173,129174],{"class":400,"line":1476},[398,129175,129176],{"class":467},"\u002F* 背景固定 *\u002F\n",[398,129178,129179,129181],{"class":400,"line":1490},[398,129180,51804],{"class":51493},[398,129182,15849],{"class":408},[398,129184,129185,129187,129189,129191],{"class":400,"line":1496},[398,129186,129160],{"class":457},[398,129188,51630],{"class":408},[398,129190,86426],{"class":457},[398,129192,1566],{"class":408},[398,129194,129195],{"class":400,"line":1587},[398,129196,1841],{"class":408},[84,129198,129199,129208],{},[87,129200,129201],{},[90,129202,129203,129206],{},[93,129204,129205],{"align":95},"参数",[93,129207,102889],{"align":95},[101,129209,129210,129217],{},[90,129211,129212,129214],{},[106,129213,129165],{"align":95},[106,129215,129216],{"align":95},"背景图像是随对象内容滚动",[90,129218,129219,129221],{},[106,129220,86426],{"align":95},[106,129222,129223],{"align":95},"背景图像固定",[14,129225,129227],{"id":129226},"_826-背景样式合写","8.2.6 背景样式合写",[389,129229,129231],{"className":126745,"code":129230,"language":126747,"meta":316,"style":316},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[395,129232,129233,129238,129244,129272],{"__ignoreMap":316},[398,129234,129235],{"class":400,"line":401},[398,129236,129237],{"class":467},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[398,129239,129240,129242],{"class":400,"line":317},[398,129241,51804],{"class":51493},[398,129243,15849],{"class":408},[398,129245,129246,129248,129250,129252,129255,129257,129259,129261,129263,129266,129268,129270],{"class":400,"line":320},[398,129247,70804],{"class":457},[398,129249,51630],{"class":408},[398,129251,61035],{"class":457},[398,129253,129254],{"class":457}," url",[398,129256,409],{"class":408},[398,129258,128843],{"class":5493},[398,129260,13991],{"class":408},[398,129262,61929],{"class":457},[398,129264,129265],{"class":457}," fixed",[398,129267,17421],{"class":457},[398,129269,129012],{"class":457},[398,129271,1566],{"class":408},[398,129273,129274],{"class":400,"line":1470},[398,129275,1841],{"class":408},[14,129277,129279],{"id":129278},"_827-背景色半透明","8.2.7 背景色半透明",[389,129281,129283],{"className":126745,"code":129282,"language":126747,"meta":316,"style":316},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[395,129284,129285,129291,129317],{"__ignoreMap":316},[398,129286,129287,129289],{"class":400,"line":401},[398,129288,51804],{"class":51493},[398,129290,15849],{"class":408},[398,129292,129293,129295,129297,129299,129301,129303,129305,129307,129309,129311,129313,129315],{"class":400,"line":317},[398,129294,70804],{"class":457},[398,129296,51630],{"class":408},[398,129298,55303],{"class":457},[398,129300,409],{"class":408},[398,129302,593],{"class":457},[398,129304,12712],{"class":408},[398,129306,593],{"class":457},[398,129308,12712],{"class":408},[398,129310,593],{"class":457},[398,129312,12712],{"class":408},[398,129314,100714],{"class":457},[398,129316,2995],{"class":408},[398,129318,129319],{"class":400,"line":320},[398,129320,1841],{"class":408},[19,129322,99589],{},[19,129324,129325],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,129327,129328],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,129330,129331],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,129333,129334],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[14,129336,129338],{"id":129337},"_828-总结","8.2.8 总结",[84,129340,129341,129352],{},[87,129342,129343],{},[90,129344,129345,129348,129350],{},[93,129346,129347],{"align":95},"属性",[93,129349,102889],{"align":95},[93,129351,556],{"align":95},[101,129353,129354,129365,129376,129387,129398,129409,129420],{},[90,129355,129356,129359,129362],{},[106,129357,129358],{"align":95},"background-color",[106,129360,129361],{"align":95},"背景颜色",[106,129363,129364],{"align":95},"预定义的颜色值\u002F十六进制\u002FRGB代码",[90,129366,129367,129370,129373],{},[106,129368,129369],{"align":95},"background-image",[106,129371,129372],{"align":95},"背景图片",[106,129374,129375],{"align":95},"url(图片路径)",[90,129377,129378,129381,129384],{},[106,129379,129380],{"align":95},"background-repeat",[106,129382,129383],{"align":95},"是否平铺",[106,129385,129386],{"align":95},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[90,129388,129389,129392,129395],{},[106,129390,129391],{"align":95},"background-position",[106,129393,129394],{"align":95},"背景位置",[106,129396,129397],{"align":95},"length\u002Fposition 分别是x和y坐标",[90,129399,129400,129403,129406],{},[106,129401,129402],{"align":95},"background-attachment",[106,129404,129405],{"align":95},"背景附着",[106,129407,129408],{"align":95},"scroll(背景滚动) \u002Ffixed (背景固定)",[90,129410,129411,129414,129417],{},[106,129412,129413],{"align":95},"背景简写",[106,129415,129416],{"align":95},"书写更简单",[106,129418,129419],{"align":95},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[90,129421,129422,129425,129428],{},[106,129423,129424],{"align":95},"背景半透明",[106,129426,129427],{"align":95},"背景颜色半透明",[106,129429,129430],{"align":95},"background: rgba(0,0,0.3); 后面必须是4个值",[19,129432,129433],{},"颜色渐变：",[1738,129435],{"style":126601,"src":129436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[1738,129438],{"style":126601,"src":129439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[14,129441,129443],{"id":129442},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[389,129445,129447],{"className":127492,"code":129446,"language":127494,"meta":316,"style":316},"\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",[395,129448,129449,129464,129483,129502,129521,129540,129559],{"__ignoreMap":316},[398,129450,129451,129453,129455,129457,129459,129462],{"class":400,"line":401},[398,129452,1312],{"class":408},[398,129454,51804],{"class":51493},[398,129456,53679],{"class":2239},[398,129458,454],{"class":408},[398,129460,129461],{"class":513},"\"nav\"",[398,129463,51500],{"class":408},[398,129465,129466,129468,129470,129472,129474,129476,129479,129481],{"class":400,"line":317},[398,129467,52337],{"class":408},[398,129469,640],{"class":51493},[398,129471,61250],{"class":2239},[398,129473,454],{"class":408},[398,129475,61255],{"class":513},[398,129477,129478],{"class":408},">五彩导航1\u003C\u002F",[398,129480,640],{"class":51493},[398,129482,51500],{"class":408},[398,129484,129485,129487,129489,129491,129493,129495,129498,129500],{"class":400,"line":320},[398,129486,52337],{"class":408},[398,129488,640],{"class":51493},[398,129490,61250],{"class":2239},[398,129492,454],{"class":408},[398,129494,61255],{"class":513},[398,129496,129497],{"class":408},">五彩导航2\u003C\u002F",[398,129499,640],{"class":51493},[398,129501,51500],{"class":408},[398,129503,129504,129506,129508,129510,129512,129514,129517,129519],{"class":400,"line":1470},[398,129505,52337],{"class":408},[398,129507,640],{"class":51493},[398,129509,61250],{"class":2239},[398,129511,454],{"class":408},[398,129513,61255],{"class":513},[398,129515,129516],{"class":408},">五彩导航3\u003C\u002F",[398,129518,640],{"class":51493},[398,129520,51500],{"class":408},[398,129522,129523,129525,129527,129529,129531,129533,129536,129538],{"class":400,"line":1476},[398,129524,52337],{"class":408},[398,129526,640],{"class":51493},[398,129528,61250],{"class":2239},[398,129530,454],{"class":408},[398,129532,61255],{"class":513},[398,129534,129535],{"class":408},">五彩导航4\u003C\u002F",[398,129537,640],{"class":51493},[398,129539,51500],{"class":408},[398,129541,129542,129544,129546,129548,129550,129552,129555,129557],{"class":400,"line":1490},[398,129543,52337],{"class":408},[398,129545,640],{"class":51493},[398,129547,61250],{"class":2239},[398,129549,454],{"class":408},[398,129551,61255],{"class":513},[398,129553,129554],{"class":408},">五彩导航5\u003C\u002F",[398,129556,640],{"class":51493},[398,129558,51500],{"class":408},[398,129560,129561,129563,129565],{"class":400,"line":1496},[398,129562,51978],{"class":408},[398,129564,51804],{"class":51493},[398,129566,51500],{"class":408},[389,129568,129570],{"className":126745,"code":129569,"language":126747,"meta":316,"style":316},".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",[395,129571,129572,129581,129591,129603,129615,129625,129637,129647,129651,129676,129699,129722,129745],{"__ignoreMap":316},[398,129573,129574,129577,129579],{"class":400,"line":401},[398,129575,129576],{"class":2239},".nav",[398,129578,1674],{"class":51493},[398,129580,15849],{"class":408},[398,129582,129583,129585,129587,129589],{"class":400,"line":317},[398,129584,128361],{"class":457},[398,129586,51630],{"class":408},[398,129588,72576],{"class":457},[398,129590,1566],{"class":408},[398,129592,129593,129595,129597,129599,129601],{"class":400,"line":320},[398,129594,70761],{"class":457},[398,129596,51630],{"class":408},[398,129598,1219],{"class":457},[398,129600,51685],{"class":404},[398,129602,1566],{"class":408},[398,129604,129605,129607,129609,129611,129613],{"class":400,"line":1470},[398,129606,70981],{"class":457},[398,129608,51630],{"class":408},[398,129610,1258],{"class":457},[398,129612,51685],{"class":404},[398,129614,1566],{"class":408},[398,129616,129617,129619,129621,129623],{"class":400,"line":1476},[398,129618,70719],{"class":457},[398,129620,51630],{"class":408},[398,129622,51785],{"class":457},[398,129624,1566],{"class":408},[398,129626,129627,129629,129631,129633,129635],{"class":400,"line":1490},[398,129628,127429],{"class":457},[398,129630,51630],{"class":408},[398,129632,1258],{"class":457},[398,129634,51685],{"class":404},[398,129636,1566],{"class":408},[398,129638,129639,129641,129643,129645],{"class":400,"line":1496},[398,129640,71098],{"class":457},[398,129642,51630],{"class":408},[398,129644,61035],{"class":457},[398,129646,1566],{"class":408},[398,129648,129649],{"class":400,"line":1587},[398,129650,1841],{"class":408},[398,129652,129653,129655,129657,129660,129662,129664,129667,129669,129671,129673],{"class":400,"line":1593},[398,129654,129576],{"class":2239},[398,129656,1674],{"class":51493},[398,129658,129659],{"class":2239},":nth-child",[398,129661,409],{"class":408},[398,129663,619],{"class":457},[398,129665,129666],{"class":408},") { ",[398,129668,129358],{"class":457},[398,129670,51630],{"class":408},[398,129672,128776],{"class":457},[398,129674,129675],{"class":408},"; }\n",[398,129677,129678,129680,129682,129684,129686,129688,129690,129692,129694,129697],{"class":400,"line":1605},[398,129679,129576],{"class":2239},[398,129681,1674],{"class":51493},[398,129683,129659],{"class":2239},[398,129685,409],{"class":408},[398,129687,486],{"class":457},[398,129689,129666],{"class":408},[398,129691,129358],{"class":457},[398,129693,51630],{"class":408},[398,129695,129696],{"class":457},"#ff0000",[398,129698,129675],{"class":408},[398,129700,129701,129703,129705,129707,129709,129711,129713,129715,129717,129720],{"class":400,"line":1888},[398,129702,129576],{"class":2239},[398,129704,1674],{"class":51493},[398,129706,129659],{"class":2239},[398,129708,409],{"class":408},[398,129710,480],{"class":457},[398,129712,129666],{"class":408},[398,129714,129358],{"class":457},[398,129716,51630],{"class":408},[398,129718,129719],{"class":457},"#00a4ff",[398,129721,129675],{"class":408},[398,129723,129724,129726,129728,129730,129732,129734,129736,129738,129740,129743],{"class":400,"line":1893},[398,129725,129576],{"class":2239},[398,129727,1674],{"class":51493},[398,129729,129659],{"class":2239},[398,129731,409],{"class":408},[398,129733,695],{"class":457},[398,129735,129666],{"class":408},[398,129737,129358],{"class":457},[398,129739,51630],{"class":408},[398,129741,129742],{"class":457},"#ff00ff",[398,129744,129675],{"class":408},[398,129746,129747,129749,129751,129753,129755,129757,129759,129761,129763,129766],{"class":400,"line":1899},[398,129748,129576],{"class":2239},[398,129750,1674],{"class":51493},[398,129752,129659],{"class":2239},[398,129754,409],{"class":408},[398,129756,721],{"class":457},[398,129758,129666],{"class":408},[398,129760,129358],{"class":457},[398,129762,51630],{"class":408},[398,129764,129765],{"class":457},"#00ff00",[398,129767,129675],{"class":408},[343,129769,129771],{"id":129770},"_83-css三大特性","8.3 css三大特性",[14,129773,129775],{"id":129774},"_831-层叠性","8.3.1 层叠性",[19,129777,129778],{},"为了解决样式冲突问题",[19,129780,129781],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,129783,129784],{},"   ②样式不冲突，不会层叠",[14,129786,129788],{"id":129787},"_832-继承性","8.3.2 继承性",[19,129790,129791],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,129793,129794],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[389,129796,129798],{"className":126745,"code":129797,"language":126747,"meta":316,"style":316},"p {\n  color: #333;\n}\n",[395,129799,129800,129806,129816],{"__ignoreMap":316},[398,129801,129802,129804],{"class":400,"line":401},[398,129803,19],{"class":51493},[398,129805,15849],{"class":408},[398,129807,129808,129810,129812,129814],{"class":400,"line":317},[398,129809,71098],{"class":457},[398,129811,51630],{"class":408},[398,129813,62562],{"class":457},[398,129815,1566],{"class":408},[398,129817,129818],{"class":400,"line":320},[398,129819,1841],{"class":408},[1738,129821],{"style":126601,"src":129822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,129824,129825],{},"解释：①行高可以跟单位也可以不跟单位",[19,129827,129828],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,129830,129831],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,129833,129834],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[14,129836,129838],{"id":129837},"_833-优先级","8.3.3 优先级",[38,129840,129841,129844],{},[41,129842,129843],{},"选择器相同，则执行层叠性",[41,129845,129846],{},"选择器不同，则根据选择器权重执行",[84,129848,129849,129859],{},[87,129850,129851],{},[90,129852,129853,129856],{},[93,129854,129855],{"align":95},"选择器",[93,129857,129858],{"align":95},"选择器权重",[101,129860,129861,129869,129877,129885,129893,129901],{},[90,129862,129863,129866],{},[106,129864,129865],{"align":95},"继承 或者*",[106,129867,129868],{"align":95},"0，0，0，0",[90,129870,129871,129874],{},[106,129872,129873],{"align":95},"标签选择器",[106,129875,129876],{"align":95},"0，0，0，1",[90,129878,129879,129882],{},[106,129880,129881],{"align":95},"类选择器，伪类选择器",[106,129883,129884],{"align":95},"0，0，1，0",[90,129886,129887,129890],{},[106,129888,129889],{"align":95},"ID选择器",[106,129891,129892],{"align":95},"0，1，0，0",[90,129894,129895,129898],{},[106,129896,129897],{"align":95},"行内样式",[106,129899,129900],{"align":95},"1，0，0，0",[90,129902,129903,129906],{},[106,129904,129905],{"align":95},"！important",[106,129907,129908],{"align":95},"无穷大",[19,129910,129911],{},"! important用法：",[389,129913,129915],{"className":126745,"code":129914,"language":126747,"meta":316,"style":316},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[395,129916,129917,129922,129928,129941,129945,129950,129956,129966],{"__ignoreMap":316},[398,129918,129919],{"class":400,"line":401},[398,129920,129921],{"class":467},"\u002F* !important 拥有最高优先级 *\u002F\n",[398,129923,129924,129926],{"class":400,"line":317},[398,129925,51804],{"class":51493},[398,129927,15849],{"class":408},[398,129929,129930,129932,129934,129936,129939],{"class":400,"line":320},[398,129931,71098],{"class":457},[398,129933,51630],{"class":408},[398,129935,51838],{"class":457},[398,129937,129938],{"class":404}," !important",[398,129940,1566],{"class":408},[398,129942,129943],{"class":400,"line":1470},[398,129944,1841],{"class":408},[398,129946,129947],{"class":400,"line":1476},[398,129948,129949],{"class":467},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[398,129951,129952,129954],{"class":400,"line":1490},[398,129953,51804],{"class":51493},[398,129955,15849],{"class":408},[398,129957,129958,129960,129962,129964],{"class":400,"line":1496},[398,129959,71098],{"class":457},[398,129961,51630],{"class":408},[398,129963,57614],{"class":457},[398,129965,1566],{"class":408},[398,129967,129968],{"class":400,"line":1587},[398,129969,1841],{"class":408},[19,129971,129972],{},"优先级注意点：",[19,129974,129975],{},"①权重是有4组数字组成,但是不会有进位",[19,129977,129978],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,129980,129981],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,129983,129984],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,129986,129987],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,129989,129990],{},"⑥复合选择器",[84,129992,129993,130003],{},[87,129994,129995],{},[90,129996,129997,130000],{},[93,129998,129999],{"align":95},"div ul li",[93,130001,130002],{"align":95},"0,0,0,3",[101,130004,130005,130013,130021],{},[90,130006,130007,130010],{},[106,130008,130009],{"align":95},".nav ul li",[106,130011,130012],{"align":95},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[90,130014,130015,130018],{},[106,130016,130017],{"align":95},"a:hover",[106,130019,130020],{"align":95},"0,0,1,1",[90,130022,130023,130026],{},[106,130024,130025],{"align":95},".nav a",[106,130027,130020],{"align":95},[5403,130029,130030],{},"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":316,"searchDepth":317,"depth":317,"links":130032},[130033,130041,130052],{"id":128141,"depth":317,"text":128142,"children":130034},[130035,130036,130037,130038,130039,130040],{"id":128154,"depth":320,"text":128155},{"id":128226,"depth":320,"text":128227},{"id":128298,"depth":320,"text":128299},{"id":128329,"depth":320,"text":128330},{"id":128336,"depth":320,"text":128337},{"id":128489,"depth":320,"text":128490},{"id":128797,"depth":317,"text":128798,"children":130042},[130043,130044,130045,130046,130047,130048,130049,130050,130051],{"id":128804,"depth":320,"text":128805},{"id":128814,"depth":320,"text":128815},{"id":128910,"depth":320,"text":128911},{"id":128983,"depth":320,"text":128984},{"id":129138,"depth":320,"text":129139},{"id":129226,"depth":320,"text":129227},{"id":129278,"depth":320,"text":129279},{"id":129337,"depth":320,"text":129338},{"id":129442,"depth":320,"text":129443},{"id":129770,"depth":317,"text":129771,"children":130053},[130054,130055,130056],{"id":129774,"depth":320,"text":129775},{"id":129787,"depth":320,"text":129788},{"id":129837,"depth":320,"text":129838},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128133,"description":23654},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":130063,"title":130064,"body":130065,"description":23654,"extension":326,"meta":131655,"navigation":328,"path":131656,"seo":131657,"stem":131658,"__hash__":131659},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":130066,"toc":131634},[130067,130070,130074,130077,130080,130083,130086,130089,130092,130095,130099,130107,130144,130180,130183,130197,130202,130236,130239,130332,130337,130340,130370,130373,130378,130386,130390,130397,130443,130487,130492,130495,130498,130501,130504,130507,130510,130512,130515,130519,130524,130568,130573,130576,130579,130616,130621,130624,130627,130630,130633,130665,130668,130671,130674,130706,130709,130712,130715,130719,130722,130754,130757,130761,130781,130784,130792,130795,130799,130804,130807,130839,130844,130847,130885,130889,130894,130897,130900,130931,130934,130951,130956,131008,131068,131073,131127,131165,131169,131173,131176,131180,131188,131191,131193,131204,131209,131257,131291,131294,131297,131300,131303,131347,131350,131353,131356,131359,131362,131365,131409,131412,131415,131418,131421,131424,131427,131433,131436,131480,131483,131486,131489,131492,131495,131539,131542,131544,131547,131551,131555,131593,131597,131600,131603,131607,131615,131619,131622,131625,131628,131631],[10,130068,130064],{"id":130069},"_9-css盒模型浮动与切图",[343,130071,130073],{"id":130072},"_91-盒子模型","9.1 盒子模型",[19,130075,130076],{},"利用盒子来设计网页",[19,130078,130079],{},"盒子包含：边框、外边距、内边距、实际内容",[19,130081,130082],{},"网页布局设置：",[19,130084,130085],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,130087,130088],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,130090,130091],{},"③往盒子里装内容",[1738,130093],{"style":126601,"src":130094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[14,130096,130098],{"id":130097},"_911-边框border","9.1.1 边框（border）",[38,130100,130101,130104],{},[41,130102,130103],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[41,130105,130106],{},"语法",[389,130108,130110],{"className":126745,"code":130109,"language":126747,"meta":316,"style":316},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[395,130111,130112,130117,130123,130140],{"__ignoreMap":316},[398,130113,130114],{"class":400,"line":401},[398,130115,130116],{"class":467},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[398,130118,130119,130121],{"class":400,"line":317},[398,130120,51804],{"class":51493},[398,130122,15849],{"class":408},[398,130124,130125,130127,130129,130131,130133,130135,130138],{"class":400,"line":320},[398,130126,71089],{"class":457},[398,130128,51630],{"class":408},[398,130130,619],{"class":457},[398,130132,51685],{"class":404},[398,130134,51714],{"class":457},[398,130136,130137],{"class":457}," #ccc",[398,130139,1566],{"class":408},[398,130141,130142],{"class":400,"line":1470},[398,130143,1841],{"class":408},[84,130145,130146,130154],{},[87,130147,130148],{},[90,130149,130150,130152],{},[93,130151,129347],{"align":95},[93,130153,102889],{"align":95},[101,130155,130156,130164,130172],{},[90,130157,130158,130161],{},[106,130159,130160],{"align":95},"border-width",[106,130162,130163],{"align":95},"定义边框粗细，单位是px",[90,130165,130166,130169],{},[106,130167,130168],{"align":95},"border-style",[106,130170,130171],{"align":95},"边框的样式",[90,130173,130174,130177],{},[106,130175,130176],{"align":95},"border-color",[106,130178,130179],{"align":95},"边框的颜色",[19,130181,130182],{},"边框样式 border-style 可以设置如下值：",[67,130184,130185,130188,130191,130194],{},[41,130186,130187],{},"none：没有边框即忽略所有边框的宽度（默认值）",[41,130189,130190],{},"solid：边框为单实线(最为常用的)",[41,130192,130193],{},"dashed：边框为虚线",[41,130195,130196],{},"dotted：边框为点线",[38,130198,130199],{"start":320},[41,130200,130201],{},"边框的合写分写",[389,130203,130204],{"className":126745,"code":130109,"language":126747,"meta":316,"style":316},[395,130205,130206,130210,130216,130232],{"__ignoreMap":316},[398,130207,130208],{"class":400,"line":401},[398,130209,130116],{"class":467},[398,130211,130212,130214],{"class":400,"line":317},[398,130213,51804],{"class":51493},[398,130215,15849],{"class":408},[398,130217,130218,130220,130222,130224,130226,130228,130230],{"class":400,"line":320},[398,130219,71089],{"class":457},[398,130221,51630],{"class":408},[398,130223,619],{"class":457},[398,130225,51685],{"class":404},[398,130227,51714],{"class":457},[398,130229,130137],{"class":457},[398,130231,1566],{"class":408},[398,130233,130234],{"class":400,"line":1470},[398,130235,1841],{"class":408},[19,130237,130238],{},"边框分开写法：",[389,130240,130242],{"className":126745,"code":130241,"language":126747,"meta":316,"style":316},"\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",[395,130243,130244,130249,130255,130273,130291,130310,130328],{"__ignoreMap":316},[398,130245,130246],{"class":400,"line":401},[398,130247,130248],{"class":467},"\u002F* 边框分开写法 *\u002F\n",[398,130250,130251,130253],{"class":400,"line":317},[398,130252,51804],{"class":51493},[398,130254,15849],{"class":408},[398,130256,130257,130260,130262,130264,130266,130268,130271],{"class":400,"line":320},[398,130258,130259],{"class":457},"  border-top",[398,130261,51630],{"class":408},[398,130263,619],{"class":457},[398,130265,51685],{"class":404},[398,130267,51714],{"class":457},[398,130269,130270],{"class":457}," #000",[398,130272,1566],{"class":408},[398,130274,130275,130278,130280,130282,130284,130286,130289],{"class":400,"line":1470},[398,130276,130277],{"class":457},"  border-right",[398,130279,51630],{"class":408},[398,130281,486],{"class":457},[398,130283,51685],{"class":404},[398,130285,62434],{"class":457},[398,130287,130288],{"class":457}," #333",[398,130290,1566],{"class":408},[398,130292,130293,130296,130298,130300,130302,130305,130308],{"class":400,"line":1476},[398,130294,130295],{"class":457},"  border-bottom",[398,130297,51630],{"class":408},[398,130299,480],{"class":457},[398,130301,51685],{"class":404},[398,130303,130304],{"class":457}," dotted",[398,130306,130307],{"class":457}," #666",[398,130309,1566],{"class":408},[398,130311,130312,130315,130317,130319,130321,130323,130326],{"class":400,"line":1490},[398,130313,130314],{"class":457},"  border-left",[398,130316,51630],{"class":408},[398,130318,619],{"class":457},[398,130320,51685],{"class":404},[398,130322,51714],{"class":457},[398,130324,130325],{"class":457}," #999",[398,130327,1566],{"class":408},[398,130329,130330],{"class":400,"line":1496},[398,130331,1841],{"class":408},[38,130333,130334],{"start":1470},[41,130335,130336],{},"表格的细线边框",[19,130338,130339],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[389,130341,130343],{"className":126745,"code":130342,"language":126747,"meta":316,"style":316},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[395,130344,130345,130350,130356,130366],{"__ignoreMap":316},[398,130346,130347],{"class":400,"line":401},[398,130348,130349],{"class":467},"\u002F* 表格细线边框合并 *\u002F\n",[398,130351,130352,130354],{"class":400,"line":317},[398,130353,84],{"class":51493},[398,130355,15849],{"class":408},[398,130357,130358,130360,130362,130364],{"class":400,"line":320},[398,130359,70771],{"class":457},[398,130361,51630],{"class":408},[398,130363,65228],{"class":457},[398,130365,1566],{"class":408},[398,130367,130368],{"class":400,"line":1470},[398,130369,1841],{"class":408},[19,130371,130372],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[38,130374,130375],{"start":1476},[41,130376,130377],{},"解决边框额外增加盒子的实际大小的方法：",[67,130379,130380,130383],{},[41,130381,130382],{},"测量盒子大小的时候,不量边框",[41,130384,130385],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[14,130387,130389],{"id":130388},"_912-内边距","9.1.2 内边距",[38,130391,130392,130395],{},[41,130393,130394],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[41,130396,130106],{},[84,130398,130399,130409],{},[87,130400,130401],{},[90,130402,130403,130406],{},[93,130404,130405],{"align":95},"值的个数",[93,130407,130408],{"align":95},"表达意思",[101,130410,130411,130419,130427,130435],{},[90,130412,130413,130416],{},[106,130414,130415],{"align":95},"padding: 5px;",[106,130417,130418],{"align":95},"1个值，代表上下左右都有5个元素",[90,130420,130421,130424],{},[106,130422,130423],{"align":95},"padding: 5px 10px;",[106,130425,130426],{"align":95},"2个值，代表上下内边距为5像素，左右内边距为10像素",[90,130428,130429,130432],{},[106,130430,130431],{"align":95},"padding: 5px 10px 20px;",[106,130433,130434],{"align":95},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[90,130436,130437,130440],{},[106,130438,130439],{"align":95},"padding: 5px 10px 20px 30px;",[106,130441,130442],{"align":95},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[84,130444,130445,130453],{},[87,130446,130447],{},[90,130448,130449,130451],{},[93,130450,129347],{"align":95},[93,130452,102889],{"align":95},[101,130454,130455,130463,130471,130479],{},[90,130456,130457,130460],{},[106,130458,130459],{"align":95},"padding-left",[106,130461,130462],{"align":95},"左内边距",[90,130464,130465,130468],{},[106,130466,130467],{"align":95},"padding-right",[106,130469,130470],{"align":95},"右内边距",[90,130472,130473,130476],{},[106,130474,130475],{"align":95},"padding-top",[106,130477,130478],{"align":95},"上内边距",[90,130480,130481,130484],{},[106,130482,130483],{"align":95},"padding-bottom",[106,130485,130486],{"align":95},"下内边距",[38,130488,130489],{"start":320},[41,130490,130491],{},"内边距会影响盒子的实际大小",[19,130493,130494],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,130496,130497],{},"①内容和边框有了距离，添加了内边距",[19,130499,130500],{},"②padding影响了盒子实际大小",[19,130502,130503],{},"内边距对盒子大小的影响：",[19,130505,130506],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,130508,130509],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,130511,95413],{},[19,130513,130514],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[14,130516,130518],{"id":130517},"_913-外边距","9.1.3 外边距",[38,130520,130521],{},[41,130522,130523],{},"控制盒子与盒子之间的距离",[84,130525,130526,130534],{},[87,130527,130528],{},[90,130529,130530,130532],{},[93,130531,129347],{"align":95},[93,130533,102889],{"align":95},[101,130535,130536,130544,130552,130560],{},[90,130537,130538,130541],{},[106,130539,130540],{"align":95},"margin-left",[106,130542,130543],{"align":95},"左外边距",[90,130545,130546,130549],{},[106,130547,130548],{"align":95},"margin-right",[106,130550,130551],{"align":95},"右外边距",[90,130553,130554,130557],{},[106,130555,130556],{"align":95},"margin-top",[106,130558,130559],{"align":95},"上外边距",[90,130561,130562,130565],{},[106,130563,130564],{"align":95},"margin-bottom",[106,130566,130567],{"align":95},"下外边距",[38,130569,130570],{"start":317},[41,130571,130572],{},"外边距可以让块级盒子水平居中的两个条件：",[19,130574,130575],{},"①盒子必须指定了宽度（width）",[19,130577,130578],{},"②盒子左右的外边距都设置为 auto",[389,130580,130582],{"className":126745,"code":130581,"language":126747,"meta":316,"style":316},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[395,130583,130584,130589,130596,130612],{"__ignoreMap":316},[398,130585,130586],{"class":400,"line":401},[398,130587,130588],{"class":467},"\u002F* margin 复合写法（同上） *\u002F\n",[398,130590,130591,130594],{"class":400,"line":317},[398,130592,130593],{"class":2239},".box",[398,130595,15849],{"class":408},[398,130597,130598,130600,130602,130604,130606,130609],{"class":400,"line":320},[398,130599,70663],{"class":457},[398,130601,51630],{"class":408},[398,130603,593],{"class":457},[398,130605,51749],{"class":457},[398,130607,130608],{"class":408},";  ",[398,130610,130611],{"class":467},"\u002F* 块级盒子水平居中 *\u002F\n",[398,130613,130614],{"class":400,"line":1470},[398,130615,1841],{"class":408},[38,130617,130618],{"start":320},[41,130619,130620],{},"外边距塌陷问题",[19,130622,130623],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[1738,130625],{"style":126601,"src":130626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,130628,130629],{},"解决方案：",[19,130631,130632],{},"①可以为父亲元素定义上边距",[389,130634,130635],{"className":126745,"code":130581,"language":126747,"meta":316,"style":316},[395,130636,130637,130641,130647,130661],{"__ignoreMap":316},[398,130638,130639],{"class":400,"line":401},[398,130640,130588],{"class":467},[398,130642,130643,130645],{"class":400,"line":317},[398,130644,130593],{"class":2239},[398,130646,15849],{"class":408},[398,130648,130649,130651,130653,130655,130657,130659],{"class":400,"line":320},[398,130650,70663],{"class":457},[398,130652,51630],{"class":408},[398,130654,593],{"class":457},[398,130656,51749],{"class":457},[398,130658,130608],{"class":408},[398,130660,130611],{"class":467},[398,130662,130663],{"class":400,"line":1470},[398,130664,1841],{"class":408},[19,130666,130667],{},"②可以为父亲元素定义上内边距",[19,130669,130670],{},"③可以为父亲元素添加overflow:hidden",[1738,130672],{"style":126601,"src":130673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[389,130675,130676],{"className":126745,"code":130581,"language":126747,"meta":316,"style":316},[395,130677,130678,130682,130688,130702],{"__ignoreMap":316},[398,130679,130680],{"class":400,"line":401},[398,130681,130588],{"class":467},[398,130683,130684,130686],{"class":400,"line":317},[398,130685,130593],{"class":2239},[398,130687,15849],{"class":408},[398,130689,130690,130692,130694,130696,130698,130700],{"class":400,"line":320},[398,130691,70663],{"class":457},[398,130693,51630],{"class":408},[398,130695,593],{"class":457},[398,130697,51749],{"class":457},[398,130699,130608],{"class":408},[398,130701,130611],{"class":467},[398,130703,130704],{"class":400,"line":1470},[398,130705,1841],{"class":408},[1738,130707],{"style":126601,"src":130708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,130710,130711],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,130713,130714],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[14,130716,130718],{"id":130717},"_914-清除内外边距","9.1.4 清除内外边距",[19,130720,130721],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[389,130723,130724],{"className":126745,"code":130581,"language":126747,"meta":316,"style":316},[395,130725,130726,130730,130736,130750],{"__ignoreMap":316},[398,130727,130728],{"class":400,"line":401},[398,130729,130588],{"class":467},[398,130731,130732,130734],{"class":400,"line":317},[398,130733,130593],{"class":2239},[398,130735,15849],{"class":408},[398,130737,130738,130740,130742,130744,130746,130748],{"class":400,"line":320},[398,130739,70663],{"class":457},[398,130741,51630],{"class":408},[398,130743,593],{"class":457},[398,130745,51749],{"class":457},[398,130747,130608],{"class":408},[398,130749,130611],{"class":467},[398,130751,130752],{"class":400,"line":1470},[398,130753,1841],{"class":408},[19,130755,130756],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[14,130758,130760],{"id":130759},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[67,130762,130763,130766,130769,130772,130775,130778],{},[41,130764,130765],{},"文件→打开 ：可以打开我们要测量的图片",[41,130767,130768],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[41,130770,130771],{},"右击标尺，把里面的单位改为像素",[41,130773,130774],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[41,130776,130777],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[41,130779,130780],{},"用选区拖动 可以测量大小",[1738,130782],{"style":126601,"src":130783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[67,130785,130786,130789],{},[41,130787,130788],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[41,130790,130791],{},"吸管取色工具",[1738,130793],{"style":126601,"src":130794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[14,130796,130798],{"id":130797},"_916-案例","9.1.6 案例",[38,130800,130801],{},[41,130802,130803],{},"小米商品",[1738,130805],{"style":126601,"src":130806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[389,130808,130809],{"className":126745,"code":130581,"language":126747,"meta":316,"style":316},[395,130810,130811,130815,130821,130835],{"__ignoreMap":316},[398,130812,130813],{"class":400,"line":401},[398,130814,130588],{"class":467},[398,130816,130817,130819],{"class":400,"line":317},[398,130818,130593],{"class":2239},[398,130820,15849],{"class":408},[398,130822,130823,130825,130827,130829,130831,130833],{"class":400,"line":320},[398,130824,70663],{"class":457},[398,130826,51630],{"class":408},[398,130828,593],{"class":457},[398,130830,51749],{"class":457},[398,130832,130608],{"class":408},[398,130834,130611],{"class":467},[398,130836,130837],{"class":400,"line":1470},[398,130838,1841],{"class":408},[38,130840,130841],{"start":317},[41,130842,130843],{},"快报模块",[1738,130845],{"style":126601,"src":130846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[389,130848,130850],{"className":127492,"code":130849,"language":127494,"meta":316,"style":316},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[395,130851,130852,130857,130872,130877],{"__ignoreMap":316},[398,130853,130854],{"class":400,"line":401},[398,130855,130856],{"class":467},"\u003C!-- HTML 代码示例 -->\n",[398,130858,130859,130861,130863,130865,130867,130870],{"class":400,"line":317},[398,130860,1312],{"class":408},[398,130862,51804],{"class":51493},[398,130864,53679],{"class":2239},[398,130866,454],{"class":408},[398,130868,130869],{"class":513},"\"example\"",[398,130871,51500],{"class":408},[398,130873,130874],{"class":400,"line":320},[398,130875,130876],{"class":408},"  示例内容\n",[398,130878,130879,130881,130883],{"class":400,"line":1470},[398,130880,51978],{"class":408},[398,130882,51804],{"class":51493},[398,130884,51500],{"class":408},[14,130886,130888],{"id":130887},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[38,130890,130891],{},[41,130892,130893],{},"圆角边框",[19,130895,130896],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[1738,130898],{"style":126601,"src":130899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[389,130901,130903],{"className":126745,"code":130902,"language":126747,"meta":316,"style":316},"div {\n  border: 1px solid #ccc;\n}\n",[395,130904,130905,130911,130927],{"__ignoreMap":316},[398,130906,130907,130909],{"class":400,"line":401},[398,130908,51804],{"class":51493},[398,130910,15849],{"class":408},[398,130912,130913,130915,130917,130919,130921,130923,130925],{"class":400,"line":317},[398,130914,71089],{"class":457},[398,130916,51630],{"class":408},[398,130918,619],{"class":457},[398,130920,51685],{"class":404},[398,130922,51714],{"class":457},[398,130924,130137],{"class":457},[398,130926,1566],{"class":408},[398,130928,130929],{"class":400,"line":320},[398,130930,1841],{"class":408},[19,130932,130933],{},"解释:",[67,130935,130936,130939,130942,130945,130948],{},[41,130937,130938],{},"参数值可以为数值或百分比的形式",[41,130940,130941],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[41,130943,130944],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[41,130946,130947],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[41,130949,130950],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[38,130952,130953],{"start":317},[41,130954,130955],{},"盒子阴影",[389,130957,130959],{"className":126745,"code":130958,"language":126747,"meta":316,"style":316},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[395,130960,130961,130967,131004],{"__ignoreMap":316},[398,130962,130963,130965],{"class":400,"line":401},[398,130964,51804],{"class":51493},[398,130966,15849],{"class":408},[398,130968,130969,130972,130974,130976,130978,130980,130982,130984,130986,130988,130990,130992,130994,130996,130998,131000,131002],{"class":400,"line":317},[398,130970,130971],{"class":457},"  box-shadow",[398,130973,51630],{"class":408},[398,130975,593],{"class":457},[398,130977,15032],{"class":457},[398,130979,51685],{"class":404},[398,130981,2314],{"class":457},[398,130983,51685],{"class":404},[398,130985,78960],{"class":457},[398,130987,409],{"class":408},[398,130989,593],{"class":457},[398,130991,12712],{"class":408},[398,130993,593],{"class":457},[398,130995,12712],{"class":408},[398,130997,593],{"class":457},[398,130999,12712],{"class":408},[398,131001,86403],{"class":457},[398,131003,2995],{"class":408},[398,131005,131006],{"class":400,"line":320},[398,131007,1841],{"class":408},[84,131009,131010,131018],{},[87,131011,131012],{},[90,131013,131014,131016],{},[93,131015,556],{"align":95},[93,131017,27682],{"align":95},[101,131019,131020,131028,131036,131044,131052,131060],{},[90,131021,131022,131025],{},[106,131023,131024],{"align":95},"h-shadow",[106,131026,131027],{"align":95},"必需,水平阴影的位置,允许负值",[90,131029,131030,131033],{},[106,131031,131032],{"align":95},"v-shadow",[106,131034,131035],{"align":95},"必需,垂直阴影的位置,允许负值",[90,131037,131038,131041],{},[106,131039,131040],{"align":95},"blur",[106,131042,131043],{"align":95},"可选,模糊距离,就是影子的虚实",[90,131045,131046,131049],{},[106,131047,131048],{"align":95},"spread",[106,131050,131051],{"align":95},"可选,阴影尺寸",[90,131053,131054,131057],{},[106,131055,131056],{"align":95},"color",[106,131058,131059],{"align":95},"可选,阴影的颜色",[90,131061,131062,131065],{},[106,131063,131064],{"align":95},"inset",[106,131066,131067],{"align":95},"可选,将外部阴影(outset)改为内部阴影",[38,131069,131070],{"start":320},[41,131071,131072],{},"文字阴影",[389,131074,131076],{"className":126745,"code":131075,"language":126747,"meta":316,"style":316},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[395,131077,131078,131084,131123],{"__ignoreMap":316},[398,131079,131080,131082],{"class":400,"line":401},[398,131081,19],{"class":51493},[398,131083,15849],{"class":408},[398,131085,131086,131089,131091,131093,131095,131097,131099,131101,131103,131105,131107,131109,131111,131113,131115,131117,131119,131121],{"class":400,"line":317},[398,131087,131088],{"class":457},"  text-shadow",[398,131090,51630],{"class":408},[398,131092,619],{"class":457},[398,131094,51685],{"class":404},[398,131096,25396],{"class":457},[398,131098,51685],{"class":404},[398,131100,15032],{"class":457},[398,131102,51685],{"class":404},[398,131104,78960],{"class":457},[398,131106,409],{"class":408},[398,131108,593],{"class":457},[398,131110,12712],{"class":408},[398,131112,593],{"class":457},[398,131114,12712],{"class":408},[398,131116,593],{"class":457},[398,131118,12712],{"class":408},[398,131120,100714],{"class":457},[398,131122,2995],{"class":408},[398,131124,131125],{"class":400,"line":320},[398,131126,1841],{"class":408},[84,131128,131129,131137],{},[87,131130,131131],{},[90,131132,131133,131135],{},[93,131134,556],{"align":95},[93,131136,27682],{"align":95},[101,131138,131139,131145,131152,131159],{},[90,131140,131141,131143],{},[106,131142,131024],{"align":95},[106,131144,131027],{"align":95},[90,131146,131147,131149],{},[106,131148,131032],{"align":95},[106,131150,131151],{"align":95},"必需,垂直阴影位置,允许负值",[90,131153,131154,131156],{},[106,131155,131040],{"align":95},[106,131157,131158],{"align":95},"可选,模糊的距离",[90,131160,131161,131163],{},[106,131162,131056],{"align":95},[106,131164,131059],{"align":95},[343,131166,131168],{"id":131167},"_92-浮动","9.2 浮动",[14,131170,131172],{"id":131171},"_921-浮动介绍","9.2.1 浮动介绍",[19,131174,131175],{},"在16.2中详细介绍",[14,131177,131179],{"id":131178},"_922-清除浮动","9.2.2 清除浮动",[38,131181,131182,131185],{},[41,131183,131184],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[41,131186,131187],{},"清除浮动的本质",[19,131189,131190],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,131192,9302],{},[67,131194,131195,131198,131201],{},[41,131196,131197],{},"如果父盒子本身有高度，则不需要清除浮动",[41,131199,131200],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[41,131202,131203],{},"父级有了高度，就不会影响下面的标准流了",[38,131205,131206],{"start":320},[41,131207,131208],{},"清除浮动样式",[389,131210,131212],{"className":126745,"code":131211,"language":126747,"meta":316,"style":316},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[395,131213,131214,131221,131232,131236,131243,131253],{"__ignoreMap":316},[398,131215,131216,131219],{"class":400,"line":401},[398,131217,131218],{"class":2239},".left",[398,131220,15849],{"class":408},[398,131222,131223,131226,131228,131230],{"class":400,"line":317},[398,131224,131225],{"class":457},"  float",[398,131227,51630],{"class":408},[398,131229,95],{"class":457},[398,131231,1566],{"class":408},[398,131233,131234],{"class":400,"line":320},[398,131235,1841],{"class":408},[398,131237,131238,131241],{"class":400,"line":1470},[398,131239,131240],{"class":2239},".right",[398,131242,15849],{"class":408},[398,131244,131245,131247,131249,131251],{"class":400,"line":1476},[398,131246,131225],{"class":457},[398,131248,51630],{"class":408},[398,131250,72715],{"class":457},[398,131252,1566],{"class":408},[398,131254,131255],{"class":400,"line":1490},[398,131256,1841],{"class":408},[84,131258,131259,131267],{},[87,131260,131261],{},[90,131262,131263,131265],{},[93,131264,127209],{"align":95},[93,131266,27682],{"align":95},[101,131268,131269,131276,131283],{},[90,131270,131271,131273],{},[106,131272,95],{"align":95},[106,131274,131275],{"align":95},"不允许左侧有浮动元素（清除左侧浮动的影响）",[90,131277,131278,131280],{},[106,131279,72715],{"align":95},[106,131281,131282],{"align":95},"不允许右侧有浮动元素（清除右侧浮动的影响）",[90,131284,131285,131288],{},[106,131286,131287],{"align":95},"both",[106,131289,131290],{"align":95},"同时清除左右侧浮动的影响",[19,131292,131293],{},"法一",[19,131295,131296],{},"额外标签法也称为隔墙法",[19,131298,131299],{},"使用方式：",[19,131301,131302],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[389,131304,131305],{"className":126745,"code":131211,"language":126747,"meta":316,"style":316},[395,131306,131307,131313,131323,131327,131333,131343],{"__ignoreMap":316},[398,131308,131309,131311],{"class":400,"line":401},[398,131310,131218],{"class":2239},[398,131312,15849],{"class":408},[398,131314,131315,131317,131319,131321],{"class":400,"line":317},[398,131316,131225],{"class":457},[398,131318,51630],{"class":408},[398,131320,95],{"class":457},[398,131322,1566],{"class":408},[398,131324,131325],{"class":400,"line":320},[398,131326,1841],{"class":408},[398,131328,131329,131331],{"class":400,"line":1470},[398,131330,131240],{"class":2239},[398,131332,15849],{"class":408},[398,131334,131335,131337,131339,131341],{"class":400,"line":1476},[398,131336,131225],{"class":457},[398,131338,51630],{"class":408},[398,131340,72715],{"class":457},[398,131342,1566],{"class":408},[398,131344,131345],{"class":400,"line":1490},[398,131346,1841],{"class":408},[19,131348,131349],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,131351,131352],{},"优点： 通俗易懂，书写方便",[19,131354,131355],{},"缺点： 添加许多无意义的标签，结构化较差",[19,131357,131358],{},"注意： 要求这个新的空标签必须是块级元素。",[19,131360,131361],{},"法二",[19,131363,131364],{},"父级添加overflow属性",[389,131366,131367],{"className":126745,"code":131211,"language":126747,"meta":316,"style":316},[395,131368,131369,131375,131385,131389,131395,131405],{"__ignoreMap":316},[398,131370,131371,131373],{"class":400,"line":401},[398,131372,131218],{"class":2239},[398,131374,15849],{"class":408},[398,131376,131377,131379,131381,131383],{"class":400,"line":317},[398,131378,131225],{"class":457},[398,131380,51630],{"class":408},[398,131382,95],{"class":457},[398,131384,1566],{"class":408},[398,131386,131387],{"class":400,"line":320},[398,131388,1841],{"class":408},[398,131390,131391,131393],{"class":400,"line":1470},[398,131392,131240],{"class":2239},[398,131394,15849],{"class":408},[398,131396,131397,131399,131401,131403],{"class":400,"line":1476},[398,131398,131225],{"class":457},[398,131400,51630],{"class":408},[398,131402,72715],{"class":457},[398,131404,1566],{"class":408},[398,131406,131407],{"class":400,"line":1490},[398,131408,1841],{"class":408},[19,131410,131411],{},"overflow: hidden;",[19,131413,131414],{},"优点：代码简洁",[19,131416,131417],{},"缺点：无法显示溢出的部分",[19,131419,131420],{},"注意：是给父元素添加代码",[19,131422,131423],{},"法三",[19,131425,131426],{},"父级添加after伪元素",[19,131428,131429,131432],{},[131430,131431],"after",{}," 方式是额外标签法的升级版",[19,131434,131435],{},"使用的时候复制就可以",[389,131437,131438],{"className":126745,"code":131211,"language":126747,"meta":316,"style":316},[395,131439,131440,131446,131456,131460,131466,131476],{"__ignoreMap":316},[398,131441,131442,131444],{"class":400,"line":401},[398,131443,131218],{"class":2239},[398,131445,15849],{"class":408},[398,131447,131448,131450,131452,131454],{"class":400,"line":317},[398,131449,131225],{"class":457},[398,131451,51630],{"class":408},[398,131453,95],{"class":457},[398,131455,1566],{"class":408},[398,131457,131458],{"class":400,"line":320},[398,131459,1841],{"class":408},[398,131461,131462,131464],{"class":400,"line":1470},[398,131463,131240],{"class":2239},[398,131465,15849],{"class":408},[398,131467,131468,131470,131472,131474],{"class":400,"line":1476},[398,131469,131225],{"class":457},[398,131471,51630],{"class":408},[398,131473,72715],{"class":457},[398,131475,1566],{"class":408},[398,131477,131478],{"class":400,"line":1490},[398,131479,1841],{"class":408},[19,131481,131482],{},"优点：没有增加标签，结构更简单",[19,131484,131485],{},"缺点：照顾低版本浏览器",[19,131487,131488],{},"代表网站： 百度、淘宝网、网易等",[19,131490,131491],{},"法四",[19,131493,131494],{},"父级添加双伪元素",[389,131496,131497],{"className":126745,"code":131211,"language":126747,"meta":316,"style":316},[395,131498,131499,131505,131515,131519,131525,131535],{"__ignoreMap":316},[398,131500,131501,131503],{"class":400,"line":401},[398,131502,131218],{"class":2239},[398,131504,15849],{"class":408},[398,131506,131507,131509,131511,131513],{"class":400,"line":317},[398,131508,131225],{"class":457},[398,131510,51630],{"class":408},[398,131512,95],{"class":457},[398,131514,1566],{"class":408},[398,131516,131517],{"class":400,"line":320},[398,131518,1841],{"class":408},[398,131520,131521,131523],{"class":400,"line":1470},[398,131522,131240],{"class":2239},[398,131524,15849],{"class":408},[398,131526,131527,131529,131531,131533],{"class":400,"line":1476},[398,131528,131225],{"class":457},[398,131530,51630],{"class":408},[398,131532,72715],{"class":457},[398,131534,1566],{"class":408},[398,131536,131537],{"class":400,"line":1490},[398,131538,1841],{"class":408},[19,131540,131541],{},"优点：代码更简洁",[19,131543,131485],{},[19,131545,131546],{},"代表网站：小米、腾讯等",[343,131548,131550],{"id":131549},"_93-ps切图","9.3 PS切图",[14,131552,131554],{"id":131553},"_931-常见图片格式","9.3.1 常见图片格式",[84,131556,131557,131567],{},[87,131558,131559],{},[90,131560,131561,131564],{},[93,131562,131563],{"align":95},"jpg图像格式",[93,131565,131566],{"align":95},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[101,131568,131569,131577,131585],{},[90,131570,131571,131574],{},[106,131572,131573],{"align":95},"gif图像格式",[106,131575,131576],{"align":95},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[90,131578,131579,131582],{},[106,131580,131581],{"align":95},"png图像格式",[106,131583,131584],{"align":95},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[90,131586,131587,131590],{},[106,131588,131589],{"align":95},"PSD图像格式",[106,131591,131592],{"align":95},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[14,131594,131596],{"id":131595},"_932-图层切图","9.3.2 图层切图",[19,131598,131599],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,131601,131602],{},"按住shift选中两个图层->图层菜单->合并图层",[14,131604,131606],{"id":131605},"_933-切片切图","9.3.3 切片切图",[67,131608,131609,131612],{},[41,131610,131611],{},"利用切片工具手动划出",[41,131613,131614],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[14,131616,131618],{"id":131617},"_934-切图步骤","9.3.4 切图步骤",[19,131620,131621],{},"用切片工具选中：",[1738,131623],{"style":126601,"src":131624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,131626,131627],{},"文件 -> 导出",[1738,131629],{"style":126601,"src":131630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[5403,131632,131633],{},"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":316,"searchDepth":317,"depth":317,"links":131635},[131636,131645,131649],{"id":130072,"depth":317,"text":130073,"children":131637},[131638,131639,131640,131641,131642,131643,131644],{"id":130097,"depth":320,"text":130098},{"id":130388,"depth":320,"text":130389},{"id":130517,"depth":320,"text":130518},{"id":130717,"depth":320,"text":130718},{"id":130759,"depth":320,"text":130760},{"id":130797,"depth":320,"text":130798},{"id":130887,"depth":320,"text":130888},{"id":131167,"depth":317,"text":131168,"children":131646},[131647,131648],{"id":131171,"depth":320,"text":131172},{"id":131178,"depth":320,"text":131179},{"id":131549,"depth":317,"text":131550,"children":131650},[131651,131652,131653,131654],{"id":131553,"depth":320,"text":131554},{"id":131595,"depth":320,"text":131596},{"id":131605,"depth":320,"text":131606},{"id":131617,"depth":320,"text":131618},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":130064,"description":23654},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131661,"title":131662,"body":131663,"description":23654,"extension":326,"meta":132304,"navigation":328,"path":132305,"seo":132306,"stem":132307,"__hash__":132308},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131664,"toc":132292},[131665,131668,131672,131698,131732,131736,131740,131743,131785,131792,131802,131810,131812,131815,131818,131821,131828,131842,131846,131849,131878,131882,131885,131899,131903,131906,131934,131938,131941,131967,131971,131976,132009,132014,132042,132046,132063,132109,132114,132158,132175,132282,132290],[10,131666,131662],{"id":131667},"_10-css规范与学成在线案例",[343,131669,131671],{"id":131670},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[38,131673,131674,131680,131686,131692],{},[41,131675,131676,131679],{},[23,131677,131678],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[41,131681,131682,131685],{},[23,131683,131684],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[41,131687,131688,131691],{},[23,131689,131690],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[41,131693,131694,131697],{},[23,131695,131696],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[389,131699,131700],{"className":126745,"code":130109,"language":126747,"meta":316,"style":316},[395,131701,131702,131706,131712,131728],{"__ignoreMap":316},[398,131703,131704],{"class":400,"line":401},[398,131705,130116],{"class":467},[398,131707,131708,131710],{"class":400,"line":317},[398,131709,51804],{"class":51493},[398,131711,15849],{"class":408},[398,131713,131714,131716,131718,131720,131722,131724,131726],{"class":400,"line":320},[398,131715,71089],{"class":457},[398,131717,51630],{"class":408},[398,131719,619],{"class":457},[398,131721,51685],{"class":404},[398,131723,51714],{"class":457},[398,131725,130137],{"class":457},[398,131727,1566],{"class":408},[398,131729,131730],{"class":400,"line":1470},[398,131731,1841],{"class":408},[343,131733,131735],{"id":131734},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[14,131737,131739],{"id":131738},"_1021-header头部制作","10.2.1 header头部制作",[1738,131741],{"style":126601,"src":131742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[67,131744,131745,131752,131759,131765,131772,131779],{},[41,131746,131747,131748,131751],{},"1号是版心盒子 ",[23,131749,131750],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[41,131753,131754,131755,131758],{},"版心盒子 里面包含 2号盒子 ",[23,131756,131757],{},"logo"," 图标",[41,131760,131761,131762,131764],{},"版心盒子 里面包含 3号盒子 ",[23,131763,53906],{}," 导航栏",[41,131766,131767,131768,131771],{},"版心盒子 里面包含 4号盒子 ",[23,131769,131770],{},"search"," 搜索框",[41,131773,131774,131775,131778],{},"版心盒子 里面包含 5号盒子 ",[23,131776,131777],{},"user"," 个人信息",[41,131780,131781,131782],{},"注意，要求里面的 ",[23,131783,131784],{},"4个子盒子 必须都浮动",[38,131786,131787],{},[41,131788,131789],{},[23,131790,131791],{},"导航栏注意点:",[19,131793,131794,131795,131798,131799],{},"实际开发中， ",[23,131796,131797],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[23,131800,131801],{},"用 li 包含链接(li+a)的做法",[67,131803,131804,131807],{},[41,131805,131806],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[41,131808,131809],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,131811,9302],{},[19,131813,131814],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,131816,131817],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,131819,131820],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[38,131822,131823],{"start":317},[41,131824,131825],{},[23,131826,131827],{},"4号盒子search的细节：",[67,131829,131830,131833,131836],{},[41,131831,131832],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[41,131834,131835],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[41,131837,131838,131841],{},[395,131839,131840],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[14,131843,131845],{"id":131844},"_1022-banner制作","10.2.2 banner制作",[1738,131847],{"style":126601,"src":131848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[67,131850,131851,131858,131864,131871],{},[41,131852,131853,131854,131857],{},"1号盒子是通栏的大盒子 ",[23,131855,131856],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[41,131859,131860,131861,131863],{},"2号盒子是版心 ",[23,131862,1197],{}," ， 要水平居中对齐",[41,131865,131866,131867,131870],{},"3号盒子版心内，左对齐 ",[23,131868,131869],{},"subnav"," 侧导航栏",[41,131872,131873,131874,131877],{},"4号盒子版心内，右对齐 ",[23,131875,131876],{},"course"," 课程",[14,131879,131881],{"id":131880},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[1738,131883],{"style":126601,"src":131884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[67,131886,131887,131890,131893,131896],{},[41,131888,131889],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[41,131891,131892],{},"1号盒子是标题 H3 左侧浮动",[41,131894,131895],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[41,131897,131898],{},"3号盒子 右浮动 mod 修改",[14,131900,131902],{"id":131901},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[1738,131904],{"style":126601,"src":131905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[67,131907,131908,131914,131921,131928,131931],{},[41,131909,131910,131911,131913],{},"1号盒子为最大的盒子 ",[23,131912,53907],{}," 版心水平居中对齐",[41,131915,131916,131917,131920],{},"2号盒子为上面部分 ",[23,131918,131919],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[41,131922,131923,131924,131927],{},"3号盒子为底下部分 ",[23,131925,131926],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[41,131929,131930],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[41,131932,131933],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[14,131935,131937],{"id":131936},"_1025-底部模块制作","10.2.5 底部模块制作",[1738,131939],{"style":126601,"src":131940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[67,131942,131943,131950,131953,131960],{},[41,131944,131945,131946,131949],{},"1号盒子通栏大盒子 底部 ",[23,131947,131948],{},"footer"," 给高度 底色是白色",[41,131951,131952],{},"2号盒子版心水平居中",[41,131954,131955,131956,131959],{},"3号盒子版权 ",[23,131957,131958],{},"copyright"," 左对齐",[41,131961,131962,131963,131966],{},"4号盒子 链接组 ",[23,131964,131965],{},"links"," 右对齐",[14,131968,131970],{"id":131969},"_1026-代码模块","10.2.6 代码模块",[38,131972,131973],{},[41,131974,131975],{},"html部分",[389,131977,131979],{"className":127492,"code":131978,"language":127494,"meta":316,"style":316},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[395,131980,131981],{"__ignoreMap":316},[398,131982,131983,131985,131987,131989,131991,131994,131997,131999,132002,132005,132007],{"class":400,"line":401},[398,131984,1312],{"class":408},[398,131986,640],{"class":51493},[398,131988,61250],{"class":2239},[398,131990,454],{"class":408},[398,131992,131993],{"class":513},"\"https:\u002F\u002Fexample.com\"",[398,131995,131996],{"class":2239}," target",[398,131998,454],{"class":408},[398,132000,132001],{"class":513},"\"_blank\"",[398,132003,132004],{"class":408},">链接文字\u003C\u002F",[398,132006,640],{"class":51493},[398,132008,51500],{"class":408},[38,132010,132011],{"start":317},[41,132012,132013],{},"css部分",[389,132015,132016],{"className":127492,"code":131978,"language":127494,"meta":316,"style":316},[395,132017,132018],{"__ignoreMap":316},[398,132019,132020,132022,132024,132026,132028,132030,132032,132034,132036,132038,132040],{"class":400,"line":401},[398,132021,1312],{"class":408},[398,132023,640],{"class":51493},[398,132025,61250],{"class":2239},[398,132027,454],{"class":408},[398,132029,131993],{"class":513},[398,132031,131996],{"class":2239},[398,132033,454],{"class":408},[398,132035,132001],{"class":513},[398,132037,132004],{"class":408},[398,132039,640],{"class":51493},[398,132041,51500],{"class":408},[14,132043,132045],{"id":132044},"_1027-收获","10.2.7 收获",[38,132047,132048,132051,132054,132057,132060],{},[41,132049,132050],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[41,132052,132053],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[41,132055,132056],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[41,132058,132059],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[41,132061,132062],{},"遗忘代码",[389,132064,132066],{"className":126745,"code":132065,"language":126747,"meta":316,"style":316},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[395,132067,132068,132090,132095,132105],{"__ignoreMap":316},[398,132069,132070,132072,132074,132076,132078,132080,132082,132084,132086,132088],{"class":400,"line":401},[398,132071,51804],{"class":51493},[398,132073,12712],{"class":408},[398,132075,19],{"class":51493},[398,132077,12712],{"class":408},[398,132079,10],{"class":51493},[398,132081,12712],{"class":408},[398,132083,67],{"class":51493},[398,132085,12712],{"class":408},[398,132087,41],{"class":51493},[398,132089,15849],{"class":408},[398,132091,132092],{"class":400,"line":317},[398,132093,132094],{"class":467},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[398,132096,132097,132099,132101,132103],{"class":400,"line":320},[398,132098,128361],{"class":457},[398,132100,51630],{"class":408},[398,132102,61062],{"class":457},[398,132104,1566],{"class":408},[398,132106,132107],{"class":400,"line":1470},[398,132108,1841],{"class":408},[38,132110,132111],{"start":1490},[41,132112,132113],{},"html引css的程序",[389,132115,132116],{"className":126745,"code":132065,"language":126747,"meta":316,"style":316},[395,132117,132118,132140,132144,132154],{"__ignoreMap":316},[398,132119,132120,132122,132124,132126,132128,132130,132132,132134,132136,132138],{"class":400,"line":401},[398,132121,51804],{"class":51493},[398,132123,12712],{"class":408},[398,132125,19],{"class":51493},[398,132127,12712],{"class":408},[398,132129,10],{"class":51493},[398,132131,12712],{"class":408},[398,132133,67],{"class":51493},[398,132135,12712],{"class":408},[398,132137,41],{"class":51493},[398,132139,15849],{"class":408},[398,132141,132142],{"class":400,"line":317},[398,132143,132094],{"class":467},[398,132145,132146,132148,132150,132152],{"class":400,"line":320},[398,132147,128361],{"class":457},[398,132149,51630],{"class":408},[398,132151,61062],{"class":457},[398,132153,1566],{"class":408},[398,132155,132156],{"class":400,"line":1470},[398,132157,1841],{"class":408},[38,132159,132160,132163,132166,132169,132172],{"start":1496},[41,132161,132162],{},"浮动的盒子不会有外边距合并问题",[41,132164,132165],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[41,132167,132168],{},"ctrl+g快速定位行；shift+alt多个光标",[41,132170,132171],{},"学习上方各个模块的选择器起名方法，以后就这样用",[41,132173,132174],{},"在写选择器时尽量写全一些，例如",[389,132176,132178],{"className":126745,"code":132177,"language":126747,"meta":316,"style":316},"\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",[395,132179,132180,132185,132201,132206,132221,132226,132241,132246,132261,132266],{"__ignoreMap":316},[398,132181,132182],{"class":400,"line":401},[398,132183,132184],{"class":467},"\u002F* 静态定位（默认） *\u002F\n",[398,132186,132187,132190,132192,132194,132196,132199],{"class":400,"line":317},[398,132188,132189],{"class":2239},".static",[398,132191,80000],{"class":408},[398,132193,129105],{"class":457},[398,132195,51630],{"class":408},[398,132197,132198],{"class":457},"static",[398,132200,129675],{"class":408},[398,132202,132203],{"class":400,"line":320},[398,132204,132205],{"class":467},"\u002F* 相对定位 *\u002F\n",[398,132207,132208,132211,132213,132215,132217,132219],{"class":400,"line":1470},[398,132209,132210],{"class":2239},".relative",[398,132212,80000],{"class":408},[398,132214,129105],{"class":457},[398,132216,51630],{"class":408},[398,132218,54957],{"class":457},[398,132220,129675],{"class":408},[398,132222,132223],{"class":400,"line":1476},[398,132224,132225],{"class":467},"\u002F* 绝对定位 *\u002F\n",[398,132227,132228,132231,132233,132235,132237,132239],{"class":400,"line":1490},[398,132229,132230],{"class":2239},".absolute",[398,132232,80000],{"class":408},[398,132234,129105],{"class":457},[398,132236,51630],{"class":408},[398,132238,55024],{"class":457},[398,132240,129675],{"class":408},[398,132242,132243],{"class":400,"line":1496},[398,132244,132245],{"class":467},"\u002F* 固定定位 *\u002F\n",[398,132247,132248,132251,132253,132255,132257,132259],{"class":400,"line":1587},[398,132249,132250],{"class":2239},".fixed",[398,132252,80000],{"class":408},[398,132254,129105],{"class":457},[398,132256,51630],{"class":408},[398,132258,86426],{"class":457},[398,132260,129675],{"class":408},[398,132262,132263],{"class":400,"line":1593},[398,132264,132265],{"class":467},"\u002F* 粘性定位 *\u002F\n",[398,132267,132268,132271,132273,132275,132277,132280],{"class":400,"line":1605},[398,132269,132270],{"class":2239},".sticky",[398,132272,80000],{"class":408},[398,132274,129105],{"class":457},[398,132276,51630],{"class":408},[398,132278,132279],{"class":457},"sticky",[398,132281,129675],{"class":408},[38,132283,132284,132287],{"start":1893},[41,132285,132286],{},"一定要用好注释",[41,132288,132289],{},"浮动的盒子不会有外边距合并的问题",[5403,132291,131633],{},{"title":316,"searchDepth":317,"depth":317,"links":132293},[132294,132295],{"id":131670,"depth":317,"text":131671},{"id":131734,"depth":317,"text":131735,"children":132296},[132297,132298,132299,132300,132301,132302,132303],{"id":131738,"depth":320,"text":131739},{"id":131844,"depth":320,"text":131845},{"id":131880,"depth":320,"text":131881},{"id":131901,"depth":320,"text":131902},{"id":131936,"depth":320,"text":131937},{"id":131969,"depth":320,"text":131970},{"id":132044,"depth":320,"text":132045},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131662,"description":23654},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132310,"title":132311,"body":132312,"description":23654,"extension":326,"meta":133798,"navigation":328,"path":133799,"seo":133800,"stem":133801,"__hash__":133802},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132313,"toc":133790},[132314,132317,132321,132325,132336,132340,132357,132401,132434,132437,132454,132457,132460,132504,132508,132512,132515,132518,132522,132525,132536,132599,132640,132643,132658,132712,132720,132723,132734,132788,132814,132817,132830,132884,132916,132970,132993,133047,133050,133053,133060,133114,133135,133189,133192,133195,133280,133288,133345,133368,133372,133375,133393,133397,133416,133470,133508,133512,133515,133518,133540,133544,133552,133555,133560,133571,133574,133578,133592,133636,133639,133643,133646,133651,133677,133682,133759,133762,133766,133769,133772,133775,133778,133781,133784,133787],[10,132315,132311],{"id":132316},"_11-传统布局与定位体系",[343,132318,132320],{"id":132319},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[14,132322,132324],{"id":132323},"_1111-普通流标准流","11.1.1 普通流（标准流）",[67,132326,132327,132330,132333],{},[41,132328,132329],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[41,132331,132332],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[41,132334,132335],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[14,132337,132339],{"id":132338},"_1112-浮动","11.1.2 浮动",[67,132341,132342,132345,132348,132351,132354],{},[41,132343,132344],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[41,132346,132347],{},"浮动可以改变元素标签默认的排列方式",[41,132349,132350],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[41,132352,132353],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[41,132355,132356],{},"在使用行内块转换时盒子之间是有空隙的",[389,132358,132359],{"className":126745,"code":131211,"language":126747,"meta":316,"style":316},[395,132360,132361,132367,132377,132381,132387,132397],{"__ignoreMap":316},[398,132362,132363,132365],{"class":400,"line":401},[398,132364,131218],{"class":2239},[398,132366,15849],{"class":408},[398,132368,132369,132371,132373,132375],{"class":400,"line":317},[398,132370,131225],{"class":457},[398,132372,51630],{"class":408},[398,132374,95],{"class":457},[398,132376,1566],{"class":408},[398,132378,132379],{"class":400,"line":320},[398,132380,1841],{"class":408},[398,132382,132383,132385],{"class":400,"line":1470},[398,132384,131240],{"class":2239},[398,132386,15849],{"class":408},[398,132388,132389,132391,132393,132395],{"class":400,"line":1476},[398,132390,131225],{"class":457},[398,132392,51630],{"class":408},[398,132394,72715],{"class":457},[398,132396,1566],{"class":408},[398,132398,132399],{"class":400,"line":1490},[398,132400,1841],{"class":408},[84,132402,132403,132411],{},[87,132404,132405],{},[90,132406,132407,132409],{},[93,132408,127209],{"align":95},[93,132410,27682],{"align":95},[101,132412,132413,132420,132427],{},[90,132414,132415,132417],{},[106,132416,54930],{"align":95},[106,132418,132419],{"align":95},"元素不浮动（默认值）",[90,132421,132422,132424],{},[106,132423,95],{"align":95},[106,132425,132426],{"align":95},"元素向左浮动",[90,132428,132429,132431],{},[106,132430,72715],{"align":95},[106,132432,132433],{"align":95},"元素向右浮动",[19,132435,132436],{},"浮动重点：",[67,132438,132439,132442,132445,132448,132451],{},[41,132440,132441],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[41,132443,132444],{},"浮动的元素会一行内显示并且元素顶部对齐",[41,132446,132447],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[41,132449,132450],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[41,132452,132453],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,132455,132456],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,132458,132459],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[389,132461,132462],{"className":126745,"code":131211,"language":126747,"meta":316,"style":316},[395,132463,132464,132470,132480,132484,132490,132500],{"__ignoreMap":316},[398,132465,132466,132468],{"class":400,"line":401},[398,132467,131218],{"class":2239},[398,132469,15849],{"class":408},[398,132471,132472,132474,132476,132478],{"class":400,"line":317},[398,132473,131225],{"class":457},[398,132475,51630],{"class":408},[398,132477,95],{"class":457},[398,132479,1566],{"class":408},[398,132481,132482],{"class":400,"line":320},[398,132483,1841],{"class":408},[398,132485,132486,132488],{"class":400,"line":1470},[398,132487,131240],{"class":2239},[398,132489,15849],{"class":408},[398,132491,132492,132494,132496,132498],{"class":400,"line":1476},[398,132493,131225],{"class":457},[398,132495,51630],{"class":408},[398,132497,72715],{"class":457},[398,132499,1566],{"class":408},[398,132501,132502],{"class":400,"line":1490},[398,132503,1841],{"class":408},[14,132505,132507],{"id":132506},"_1113-定位","11.1.3 定位",[22275,132509,132511],{"id":132510},"_11131-使用场景","11.1.3.1 使用场景",[19,132513,132514],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,132516,132517],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22275,132519,132521],{"id":132520},"_11132-定位组成","11.1.3.2 定位组成",[19,132523,132524],{},"定位 = 定位模式 + 边偏移",[38,132526,132527],{},[41,132528,132529,132532,132533],{},[23,132530,132531],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[23,132534,132535],{},"定位模式",[389,132537,132539],{"className":126745,"code":132538,"language":126747,"meta":316,"style":316},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[395,132540,132541,132547,132561,132578,132595],{"__ignoreMap":316},[398,132542,132543,132545],{"class":400,"line":401},[398,132544,130593],{"class":2239},[398,132546,15849],{"class":408},[398,132548,132549,132552,132554,132556,132558],{"class":400,"line":317},[398,132550,132551],{"class":457},"  position",[398,132553,51630],{"class":408},[398,132555,54957],{"class":457},[398,132557,130608],{"class":408},[398,132559,132560],{"class":467},"\u002F* 定位模式 *\u002F\n",[398,132562,132563,132566,132568,132570,132572,132575],{"class":400,"line":320},[398,132564,132565],{"class":457},"  top",[398,132567,51630],{"class":408},[398,132569,848],{"class":457},[398,132571,51685],{"class":404},[398,132573,132574],{"class":408},";           ",[398,132576,132577],{"class":467},"\u002F* 边偏移：上 *\u002F\n",[398,132579,132580,132583,132585,132587,132589,132592],{"class":400,"line":1470},[398,132581,132582],{"class":457},"  left",[398,132584,51630],{"class":408},[398,132586,1102],{"class":457},[398,132588,51685],{"class":404},[398,132590,132591],{"class":408},";          ",[398,132593,132594],{"class":467},"\u002F* 边偏移：左 *\u002F\n",[398,132596,132597],{"class":400,"line":1476},[398,132598,1841],{"class":408},[84,132600,132601,132610],{},[87,132602,132603],{},[90,132604,132605,132607],{},[93,132606,556],{"align":95},[93,132608,132609],{"align":95},"语义",[101,132611,132612,132619,132626,132633],{},[90,132613,132614,132616],{},[106,132615,132198],{"align":95},[106,132617,132618],{"align":95},"静态定位",[90,132620,132621,132623],{},[106,132622,54957],{"align":95},[106,132624,132625],{"align":95},"相对定位",[90,132627,132628,132630],{},[106,132629,55024],{"align":95},[106,132631,132632],{"align":95},"绝对定位",[90,132634,132635,132637],{},[106,132636,86426],{"align":95},[106,132638,132639],{"align":95},"固定定位",[19,132641,132642],{},"（1）静态定位：",[67,132644,132645,132656],{},[41,132646,132647,132648,132651,132652,132655],{},"静态定位是元素的 ",[23,132649,132650],{},"默认定位方式"," ， ",[23,132653,132654],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[41,132657,5458],{},[389,132659,132660],{"className":126745,"code":132538,"language":126747,"meta":316,"style":316},[395,132661,132662,132668,132680,132694,132708],{"__ignoreMap":316},[398,132663,132664,132666],{"class":400,"line":401},[398,132665,130593],{"class":2239},[398,132667,15849],{"class":408},[398,132669,132670,132672,132674,132676,132678],{"class":400,"line":317},[398,132671,132551],{"class":457},[398,132673,51630],{"class":408},[398,132675,54957],{"class":457},[398,132677,130608],{"class":408},[398,132679,132560],{"class":467},[398,132681,132682,132684,132686,132688,132690,132692],{"class":400,"line":320},[398,132683,132565],{"class":457},[398,132685,51630],{"class":408},[398,132687,848],{"class":457},[398,132689,51685],{"class":404},[398,132691,132574],{"class":408},[398,132693,132577],{"class":467},[398,132695,132696,132698,132700,132702,132704,132706],{"class":400,"line":1470},[398,132697,132582],{"class":457},[398,132699,51630],{"class":408},[398,132701,1102],{"class":457},[398,132703,51685],{"class":404},[398,132705,132591],{"class":408},[398,132707,132594],{"class":467},[398,132709,132710],{"class":400,"line":1476},[398,132711,1841],{"class":408},[67,132713,132714,132717],{},[41,132715,132716],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[41,132718,132719],{},"静态定位在布局时我们几乎不用的",[19,132721,132722],{},"（2）相对定位",[67,132724,132725,132732],{},[41,132726,132727,132728,132731],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[23,132729,132730],{},"原来的位置"," 来说的（自恋型）",[41,132733,5458],{},[389,132735,132736],{"className":126745,"code":132538,"language":126747,"meta":316,"style":316},[395,132737,132738,132744,132756,132770,132784],{"__ignoreMap":316},[398,132739,132740,132742],{"class":400,"line":401},[398,132741,130593],{"class":2239},[398,132743,15849],{"class":408},[398,132745,132746,132748,132750,132752,132754],{"class":400,"line":317},[398,132747,132551],{"class":457},[398,132749,51630],{"class":408},[398,132751,54957],{"class":457},[398,132753,130608],{"class":408},[398,132755,132560],{"class":467},[398,132757,132758,132760,132762,132764,132766,132768],{"class":400,"line":320},[398,132759,132565],{"class":457},[398,132761,51630],{"class":408},[398,132763,848],{"class":457},[398,132765,51685],{"class":404},[398,132767,132574],{"class":408},[398,132769,132577],{"class":467},[398,132771,132772,132774,132776,132778,132780,132782],{"class":400,"line":1470},[398,132773,132582],{"class":457},[398,132775,51630],{"class":408},[398,132777,1102],{"class":457},[398,132779,51685],{"class":404},[398,132781,132591],{"class":408},[398,132783,132594],{"class":467},[398,132785,132786],{"class":400,"line":1476},[398,132787,1841],{"class":408},[67,132789,132790],{},[41,132791,132792,132793,132795,132796,132798,132799,132802,132803,132806,132807,132809,132810,132813],{},"相对定位的特点：",[53909,132794],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53909,132797],{},"  ② ",[23,132800,132801],{},"原来"," 在标准流的 ",[23,132804,132805],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53909,132808],{},"  ③因此， ",[23,132811,132812],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,132815,132816],{},"（3）绝对定位",[67,132818,132819,132828],{},[41,132820,132821,132823,132824,132827],{},[23,132822,132632],{}," 是元素在移动位置的时候，是相对于它 ",[23,132825,132826],{},"祖先元素"," 来说的（拼爹型）",[41,132829,5458],{},[389,132831,132832],{"className":126745,"code":132538,"language":126747,"meta":316,"style":316},[395,132833,132834,132840,132852,132866,132880],{"__ignoreMap":316},[398,132835,132836,132838],{"class":400,"line":401},[398,132837,130593],{"class":2239},[398,132839,15849],{"class":408},[398,132841,132842,132844,132846,132848,132850],{"class":400,"line":317},[398,132843,132551],{"class":457},[398,132845,51630],{"class":408},[398,132847,54957],{"class":457},[398,132849,130608],{"class":408},[398,132851,132560],{"class":467},[398,132853,132854,132856,132858,132860,132862,132864],{"class":400,"line":320},[398,132855,132565],{"class":457},[398,132857,51630],{"class":408},[398,132859,848],{"class":457},[398,132861,51685],{"class":404},[398,132863,132574],{"class":408},[398,132865,132577],{"class":467},[398,132867,132868,132870,132872,132874,132876,132878],{"class":400,"line":1470},[398,132869,132582],{"class":457},[398,132871,51630],{"class":408},[398,132873,1102],{"class":457},[398,132875,51685],{"class":404},[398,132877,132591],{"class":408},[398,132879,132594],{"class":467},[398,132881,132882],{"class":400,"line":1476},[398,132883,1841],{"class":408},[67,132885,132886,132901,132910,132913],{},[41,132887,132888,132889,132891,132892,132894,132895,132897,132898,132900],{},"绝对定位的特点：",[53909,132890],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53909,132893],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53909,132896],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53909,132899],{},"  (4)固定定位",[41,132902,132903,132905,132906,132909],{},[23,132904,132639],{}," 是元素 ",[23,132907,132908],{},"固定于浏览器可视区的位置"," 。（认死理型）",[41,132911,132912],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[41,132914,132915],{},"语法:",[389,132917,132918],{"className":126745,"code":132538,"language":126747,"meta":316,"style":316},[395,132919,132920,132926,132938,132952,132966],{"__ignoreMap":316},[398,132921,132922,132924],{"class":400,"line":401},[398,132923,130593],{"class":2239},[398,132925,15849],{"class":408},[398,132927,132928,132930,132932,132934,132936],{"class":400,"line":317},[398,132929,132551],{"class":457},[398,132931,51630],{"class":408},[398,132933,54957],{"class":457},[398,132935,130608],{"class":408},[398,132937,132560],{"class":467},[398,132939,132940,132942,132944,132946,132948,132950],{"class":400,"line":320},[398,132941,132565],{"class":457},[398,132943,51630],{"class":408},[398,132945,848],{"class":457},[398,132947,51685],{"class":404},[398,132949,132574],{"class":408},[398,132951,132577],{"class":467},[398,132953,132954,132956,132958,132960,132962,132964],{"class":400,"line":1470},[398,132955,132582],{"class":457},[398,132957,51630],{"class":408},[398,132959,1102],{"class":457},[398,132961,51685],{"class":404},[398,132963,132591],{"class":408},[398,132965,132594],{"class":467},[398,132967,132968],{"class":400,"line":1476},[398,132969,1841],{"class":408},[67,132971,132972,132981],{},[41,132973,132974,132975,132977,132978,132980],{},"特点:",[53909,132976],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53909,132979],{},"  ②固定定位不再占有原先的位置,完全脱标",[41,132982,132983,132984,132986,132987,132989,132990,132992],{},"固定在版心位置的方法:",[53909,132985],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53909,132988],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53909,132991],{},"  实例：",[389,132994,132995],{"className":126745,"code":132538,"language":126747,"meta":316,"style":316},[395,132996,132997,133003,133015,133029,133043],{"__ignoreMap":316},[398,132998,132999,133001],{"class":400,"line":401},[398,133000,130593],{"class":2239},[398,133002,15849],{"class":408},[398,133004,133005,133007,133009,133011,133013],{"class":400,"line":317},[398,133006,132551],{"class":457},[398,133008,51630],{"class":408},[398,133010,54957],{"class":457},[398,133012,130608],{"class":408},[398,133014,132560],{"class":467},[398,133016,133017,133019,133021,133023,133025,133027],{"class":400,"line":320},[398,133018,132565],{"class":457},[398,133020,51630],{"class":408},[398,133022,848],{"class":457},[398,133024,51685],{"class":404},[398,133026,132574],{"class":408},[398,133028,132577],{"class":467},[398,133030,133031,133033,133035,133037,133039,133041],{"class":400,"line":1470},[398,133032,132582],{"class":457},[398,133034,51630],{"class":408},[398,133036,1102],{"class":457},[398,133038,51685],{"class":404},[398,133040,132591],{"class":408},[398,133042,132594],{"class":467},[398,133044,133045],{"class":400,"line":1476},[398,133046,1841],{"class":408},[1738,133048],{"style":126601,"src":133049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,133051,133052],{},"(5)粘性定位",[67,133054,133055,133058],{},[41,133056,133057],{},"粘性定位可以被认为是相对定位和固定定位的混合",[41,133059,5458],{},[389,133061,133062],{"className":126745,"code":132538,"language":126747,"meta":316,"style":316},[395,133063,133064,133070,133082,133096,133110],{"__ignoreMap":316},[398,133065,133066,133068],{"class":400,"line":401},[398,133067,130593],{"class":2239},[398,133069,15849],{"class":408},[398,133071,133072,133074,133076,133078,133080],{"class":400,"line":317},[398,133073,132551],{"class":457},[398,133075,51630],{"class":408},[398,133077,54957],{"class":457},[398,133079,130608],{"class":408},[398,133081,132560],{"class":467},[398,133083,133084,133086,133088,133090,133092,133094],{"class":400,"line":320},[398,133085,132565],{"class":457},[398,133087,51630],{"class":408},[398,133089,848],{"class":457},[398,133091,51685],{"class":404},[398,133093,132574],{"class":408},[398,133095,132577],{"class":467},[398,133097,133098,133100,133102,133104,133106,133108],{"class":400,"line":1470},[398,133099,132582],{"class":457},[398,133101,51630],{"class":408},[398,133103,1102],{"class":457},[398,133105,51685],{"class":404},[398,133107,132591],{"class":408},[398,133109,132594],{"class":467},[398,133111,133112],{"class":400,"line":1476},[398,133113,1841],{"class":408},[67,133115,133116],{},[41,133117,133118,133119,133121,133122,133124,133125,133127,133128,133131,133132,133134],{},"粘性定位的特点：",[53909,133120],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53909,133123],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53909,133126],{},"  ③必须添加 top 、left、right、bottom ",[23,133129,133130],{},"其中一个"," 才有效",[53909,133133],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[389,133136,133137],{"className":126745,"code":132538,"language":126747,"meta":316,"style":316},[395,133138,133139,133145,133157,133171,133185],{"__ignoreMap":316},[398,133140,133141,133143],{"class":400,"line":401},[398,133142,130593],{"class":2239},[398,133144,15849],{"class":408},[398,133146,133147,133149,133151,133153,133155],{"class":400,"line":317},[398,133148,132551],{"class":457},[398,133150,51630],{"class":408},[398,133152,54957],{"class":457},[398,133154,130608],{"class":408},[398,133156,132560],{"class":467},[398,133158,133159,133161,133163,133165,133167,133169],{"class":400,"line":320},[398,133160,132565],{"class":457},[398,133162,51630],{"class":408},[398,133164,848],{"class":457},[398,133166,51685],{"class":404},[398,133168,132574],{"class":408},[398,133170,132577],{"class":467},[398,133172,133173,133175,133177,133179,133181,133183],{"class":400,"line":1470},[398,133174,132582],{"class":457},[398,133176,51630],{"class":408},[398,133178,1102],{"class":457},[398,133180,51685],{"class":404},[398,133182,132591],{"class":408},[398,133184,132594],{"class":467},[398,133186,133187],{"class":400,"line":1476},[398,133188,1841],{"class":408},[1738,133190],{"style":126601,"src":133191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,133193,133194],{},"(6)总结",[84,133196,133197,133212],{},[87,133198,133199],{},[90,133200,133201,133203,133206,133209],{},[93,133202,132535],{"align":95},[93,133204,133205],{"align":95},"是否脱标",[93,133207,133208],{"align":95},"移动位置",[93,133210,133211],{"align":95},"是否常用",[101,133213,133214,133227,133241,133255,133268],{},[90,133215,133216,133219,133221,133224],{},[106,133217,133218],{"align":95},"Static 静态定位",[106,133220,104871],{"align":95},[106,133222,133223],{"align":95},"不能使用边偏移",[106,133225,133226],{"align":95},"很少",[90,133228,133229,133232,133235,133238],{},[106,133230,133231],{"align":95},"Relative 相对定位",[106,133233,133234],{"align":95},"否(占有位置)",[106,133236,133237],{"align":95},"相对于自身位置移动",[106,133239,133240],{"align":95},"基本单独使用",[90,133242,133243,133246,133249,133252],{},[106,133244,133245],{"align":95},"Absolute 绝对定位",[106,133247,133248],{"align":95},"是(不占有位置)",[106,133250,133251],{"align":95},"带有定位的父级",[106,133253,133254],{"align":95},"要和定位父级元素搭配使用",[90,133256,133257,133260,133262,133265],{},[106,133258,133259],{"align":95},"Fixed 固定定位",[106,133261,133248],{"align":95},[106,133263,133264],{"align":95},"浏览器可视区",[106,133266,133267],{"align":95},"单独使用,不需要父级",[90,133269,133270,133273,133275,133277],{},[106,133271,133272],{"align":95},"Sticky 粘性定位",[106,133274,133234],{"align":95},[106,133276,133264],{"align":95},[106,133278,133279],{"align":95},"当前阶段少",[38,133281,133282],{"start":317},[41,133283,133284,133287],{},[23,133285,133286],{},"边偏移"," 则决定了该元素的最终位置",[84,133289,133290,133301],{},[87,133291,133292],{},[90,133293,133294,133297,133299],{},[93,133295,133296],{"align":95},"边偏移属性",[93,133298,27685],{"align":95},[93,133300,27682],{"align":95},[101,133302,133303,133314,133325,133335],{},[90,133304,133305,133308,133311],{},[106,133306,133307],{"align":95},"top",[106,133309,133310],{"align":95},"top: 80px;",[106,133312,133313],{"align":95},"顶端偏移量，定义元素相对于父元素上边线的距离",[90,133315,133316,133319,133322],{},[106,133317,133318],{"align":95},"bottom",[106,133320,133321],{"align":95},"bottom: 80px ;",[106,133323,133324],{"align":95},"底部偏移量，定义元素相对于其父元素下边线的距离",[90,133326,133327,133329,133332],{},[106,133328,95],{"align":95},[106,133330,133331],{"align":95},"left: 80px ;",[106,133333,133334],{"align":95},"左侧偏移量，定义元素相对于其父元素左边线的距离",[90,133336,133337,133339,133342],{},[106,133338,72715],{"align":95},[106,133340,133341],{"align":95},"right: 80px ;",[106,133343,133344],{"align":95},"右侧偏移量，定义元素相对于其父元素右边线的距离",[67,133346,133347],{},[41,133348,9302,133349,133351,133352,133354,133355,133357,133358,133361,133362,133364,133365,133367],{},[53909,133350],{},"  ① ",[23,133353,133286],{}," 需要和 ",[23,133356,132535],{}," 联合使用， ",[23,133359,133360],{},"单独使用无效"," ；",[53909,133363],{},"  ②top和bottom不要同时使用",[53909,133366],{},"  ③left和right不要同时使用",[22275,133369,133371],{"id":133370},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,133373,133374],{},"子级是绝对定位的话，父级要用相对定位",[67,133376,133377,133380,133383,133386],{},[41,133378,133379],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[41,133381,133382],{},"父盒子需要加定位限制子盒子在父盒子内显示",[41,133384,133385],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[41,133387,133388,133389,133392],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[23,133390,133391],{},"子绝父绝"," 也会遇到",[22275,133394,133396],{"id":133395},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[67,133398,133399,133414],{},[41,133400,133401,133402,133405,133406,133409,133410,133413],{},"在使用 ",[23,133403,133404],{},"定位"," 布局时，可能会 ",[23,133407,133408],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[23,133411,133412],{},"z-index"," 来控制盒子的前后次序 (z轴)",[41,133415,5458],{},[389,133417,133418],{"className":126745,"code":132538,"language":126747,"meta":316,"style":316},[395,133419,133420,133426,133438,133452,133466],{"__ignoreMap":316},[398,133421,133422,133424],{"class":400,"line":401},[398,133423,130593],{"class":2239},[398,133425,15849],{"class":408},[398,133427,133428,133430,133432,133434,133436],{"class":400,"line":317},[398,133429,132551],{"class":457},[398,133431,51630],{"class":408},[398,133433,54957],{"class":457},[398,133435,130608],{"class":408},[398,133437,132560],{"class":467},[398,133439,133440,133442,133444,133446,133448,133450],{"class":400,"line":320},[398,133441,132565],{"class":457},[398,133443,51630],{"class":408},[398,133445,848],{"class":457},[398,133447,51685],{"class":404},[398,133449,132574],{"class":408},[398,133451,132577],{"class":467},[398,133453,133454,133456,133458,133460,133462,133464],{"class":400,"line":1470},[398,133455,132582],{"class":457},[398,133457,51630],{"class":408},[398,133459,1102],{"class":457},[398,133461,51685],{"class":404},[398,133463,132591],{"class":408},[398,133465,132594],{"class":467},[398,133467,133468],{"class":400,"line":1476},[398,133469,1841],{"class":408},[67,133471,133472],{},[41,133473,133474,133475,133351,133477,133479,133480,127908,133483,82732,133486,133488,133489,133491,133492,133495,133496,133361,133499,133501,133502,133505,133507],{},"z-index的特性",[53909,133476],{},[23,133478,127209],{}," ： ",[23,133481,133482],{},"正整数",[23,133484,133485],{},"负整数",[23,133487,593],{}," ，默认值是 0，数值越大，盒子越靠上；",[53909,133490],{},"  ②如果 ",[23,133493,133494],{},"属性值相同"," ，则按照书写顺序， ",[23,133497,133498],{},"后来居上",[53909,133500],{},"  ③数字后面 ",[23,133503,133504],{},"不能加单位",[53909,133506],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22275,133509,133511],{"id":133510},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,133513,133514],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,133516,133517],{},"方法:",[67,133519,133520,133530],{},[41,133521,133522,133523,133526,133527],{},"left: 50%; 让 ",[23,133524,133525],{},"盒子的左侧"," 移动到 ",[23,133528,133529],{},"父级元素的水平中心位置",[41,133531,133532,133533,133536,133537],{},"margin-left: -100px; 让盒子 ",[23,133534,133535],{},"向左"," 移动 ",[23,133538,133539],{},"自身宽度的一半",[22275,133541,133543],{"id":133542},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[38,133545,133546,133549],{},[41,133547,133548],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[41,133550,133551],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,133553,133554],{},"也就是说绝对定位和固定定位和浮动类似",[38,133556,133557],{"start":320},[41,133558,133559],{},"display 是显示模式， 可以改变显示模式有以下方式:",[67,133561,133562,133565,133568],{},[41,133563,133564],{},"可以用inline-block 转换为行内块",[41,133566,133567],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[41,133569,133570],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,133572,133573],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22275,133575,133577],{"id":133576},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[38,133579,133580,133583,133586,133589],{},[41,133581,133582],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[41,133584,133585],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[41,133587,133588],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[41,133590,133591],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[389,133593,133594],{"className":126745,"code":131211,"language":126747,"meta":316,"style":316},[395,133595,133596,133602,133612,133616,133622,133632],{"__ignoreMap":316},[398,133597,133598,133600],{"class":400,"line":401},[398,133599,131218],{"class":2239},[398,133601,15849],{"class":408},[398,133603,133604,133606,133608,133610],{"class":400,"line":317},[398,133605,131225],{"class":457},[398,133607,51630],{"class":408},[398,133609,95],{"class":457},[398,133611,1566],{"class":408},[398,133613,133614],{"class":400,"line":320},[398,133615,1841],{"class":408},[398,133617,133618,133620],{"class":400,"line":1470},[398,133619,131240],{"class":2239},[398,133621,15849],{"class":408},[398,133623,133624,133626,133628,133630],{"class":400,"line":1476},[398,133625,131225],{"class":457},[398,133627,51630],{"class":408},[398,133629,72715],{"class":457},[398,133631,1566],{"class":408},[398,133633,133634],{"class":400,"line":1490},[398,133635,1841],{"class":408},[1738,133637],{"style":126601,"src":133638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22275,133640,133642],{"id":133641},"_11138-轮播图","11.1.3.8 轮播图",[1738,133644],{"style":126601,"src":133645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[38,133647,133648],{},[41,133649,133650],{},"制作顺序:",[67,133652,133653,133656,133659,133668],{},[41,133654,133655],{},"大盒子我们类名为： tb-promo 淘宝广告",[41,133657,133658],{},"里面先放一张图片",[41,133660,133661,133662,133664,133665,133667],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53909,133663],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53909,133666],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[41,133669,133670,133671,133673,133674,133676],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53909,133672],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53909,133675],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[38,133678,133679],{"start":317},[41,133680,133681],{},"代码模块",[389,133683,133685],{"className":126745,"code":133684,"language":126747,"meta":316,"style":316},"\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",[395,133686,133687,133692,133699,133709,133719,133729,133733,133738,133745,133755],{"__ignoreMap":316},[398,133688,133689],{"class":400,"line":401},[398,133690,133691],{"class":467},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[398,133693,133694,133697],{"class":400,"line":317},[398,133695,133696],{"class":2239},".son",[398,133698,15849],{"class":408},[398,133700,133701,133703,133705,133707],{"class":400,"line":320},[398,133702,132551],{"class":457},[398,133704,51630],{"class":408},[398,133706,55024],{"class":457},[398,133708,1566],{"class":408},[398,133710,133711,133713,133715,133717],{"class":400,"line":1470},[398,133712,132565],{"class":457},[398,133714,51630],{"class":408},[398,133716,593],{"class":457},[398,133718,1566],{"class":408},[398,133720,133721,133723,133725,133727],{"class":400,"line":1476},[398,133722,132582],{"class":457},[398,133724,51630],{"class":408},[398,133726,593],{"class":457},[398,133728,1566],{"class":408},[398,133730,133731],{"class":400,"line":1490},[398,133732,1841],{"class":408},[398,133734,133735],{"class":400,"line":1496},[398,133736,133737],{"class":467},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[398,133739,133740,133743],{"class":400,"line":1587},[398,133741,133742],{"class":2239},".father",[398,133744,15849],{"class":408},[398,133746,133747,133749,133751,133753],{"class":400,"line":1593},[398,133748,132551],{"class":457},[398,133750,51630],{"class":408},[398,133752,54957],{"class":457},[398,133754,1566],{"class":408},[398,133756,133757],{"class":400,"line":1605},[398,133758,1841],{"class":408},[19,133760,133761],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[14,133763,133765],{"id":133764},"_1114-定位数值的移动","11.1.4 定位数值的移动",[1738,133767],{"style":126601,"src":133768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,133770,133771],{},"✨ 黄金口诀：",[19,133773,133774],{},"\"TOP正下负上，LEFT正右负左\"",[19,133776,133777],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,133779,133780],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,133782,133783],{},"✨ 简单记：",[19,133785,133786],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[5403,133788,133789],{},"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":316,"searchDepth":317,"depth":317,"links":133791},[133792],{"id":132319,"depth":317,"text":132320,"children":133793},[133794,133795,133796,133797],{"id":132323,"depth":320,"text":132324},{"id":132338,"depth":320,"text":132339},{"id":132506,"depth":320,"text":132507},{"id":133764,"depth":320,"text":133765},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132311,"description":23654},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133804,"title":133805,"body":133806,"description":23654,"extension":326,"meta":135229,"navigation":328,"path":135230,"seo":135231,"stem":135232,"__hash__":135233},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133807,"toc":135208},[133808,133811,133815,133823,133827,133832,133840,133852,133856,133861,133869,133880,133884,133889,133930,133938,133942,133945,133948,133951,134045,134048,134142,134145,134239,134242,134245,134280,134283,134286,134316,134319,134322,134325,134328,134331,134334,134337,134407,134410,134414,134418,134459,134463,134469,134472,134475,134479,134482,134485,134488,134569,134572,134575,134579,134583,134586,134589,134592,134595,134598,134604,134613,134617,134636,134640,134650,134653,134656,134659,134662,134665,134668,134671,134674,134683,134687,134696,134699,134704,134757,134762,134928,134931,134934,134939,134942,134945,134948,134951,134956,135104,135107,135110,135115,135118,135123,135157,135160,135163,135167,135170,135177,135180,135183,135186,135189,135192,135195,135198,135202,135205],[10,133809,133805],{"id":133810},"_12-显示隐藏与图形资源",[343,133812,133814],{"id":133813},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[67,133816,133817,133820],{},[41,133818,133819],{},"目的:让一个元素在页面中消失或者显示出来",[41,133821,133822],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[14,133824,133826],{"id":133825},"_1211-display-显示","12.1.1 display 显示",[38,133828,133829],{},[41,133830,133831],{},"display 设置或检索对象是否及如何显示",[67,133833,133834,133837],{},[41,133835,133836],{},"display: none;隐藏对象",[41,133838,133839],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[38,133841,133842,133849],{"start":317},[41,133843,133844,133845,133848],{},"特点： display 隐藏元素后， ",[23,133846,133847],{},"不再占"," 有原来的位置",[41,133850,133851],{},"在js中使用非常的广泛",[14,133853,133855],{"id":133854},"_1212-visibility可见性","12.1.2 visibility可见性",[38,133857,133858],{},[41,133859,133860],{},"visibility 属性用于指定一个元素应可见还是隐藏",[67,133862,133863,133866],{},[41,133864,133865],{},"visibility： visible；元素可见",[41,133867,133868],{},"visibility：hidden；元素隐藏",[38,133870,133871,133874,133877],{"start":317},[41,133872,133873],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[41,133875,133876],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[41,133878,133879],{},"隐藏后继续占有原有位置",[14,133881,133883],{"id":133882},"_1213-overflow溢出","12.1.3 overflow溢出",[67,133885,133886],{},[41,133887,133888],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[84,133890,133891,133899],{},[87,133892,133893],{},[90,133894,133895,133897],{},[93,133896,127209],{"align":95},[93,133898,27682],{"align":95},[101,133900,133901,133909,133916,133923],{},[90,133902,133903,133906],{},[106,133904,133905],{"align":95},"visible",[106,133907,133908],{"align":95},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[90,133910,133911,133913],{},[106,133912,61907],{"align":95},[106,133914,133915],{"align":95},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[90,133917,133918,133920],{},[106,133919,129165],{"align":95},[106,133921,133922],{"align":95},"不管超出内容否，总是显示滚动条",[90,133924,133925,133927],{},[106,133926,72856],{"align":95},[106,133928,133929],{"align":95},"超出自动显示滚动条，不超出不显示滚动条",[67,133931,133932,133935],{},[41,133933,133934],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[41,133936,133937],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[14,133939,133941],{"id":133940},"_1214-案例收获","12.1.4 案例收获",[1738,133943],{"style":126601,"src":133944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,133946,133947],{},"问题：没做出来动态效果，使用hover没实现",[19,133949,133950],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[389,133952,133953],{"className":126745,"code":132177,"language":126747,"meta":316,"style":316},[395,133954,133955,133959,133973,133977,133991,133995,134009,134013,134027,134031],{"__ignoreMap":316},[398,133956,133957],{"class":400,"line":401},[398,133958,132184],{"class":467},[398,133960,133961,133963,133965,133967,133969,133971],{"class":400,"line":317},[398,133962,132189],{"class":2239},[398,133964,80000],{"class":408},[398,133966,129105],{"class":457},[398,133968,51630],{"class":408},[398,133970,132198],{"class":457},[398,133972,129675],{"class":408},[398,133974,133975],{"class":400,"line":320},[398,133976,132205],{"class":467},[398,133978,133979,133981,133983,133985,133987,133989],{"class":400,"line":1470},[398,133980,132210],{"class":2239},[398,133982,80000],{"class":408},[398,133984,129105],{"class":457},[398,133986,51630],{"class":408},[398,133988,54957],{"class":457},[398,133990,129675],{"class":408},[398,133992,133993],{"class":400,"line":1476},[398,133994,132225],{"class":467},[398,133996,133997,133999,134001,134003,134005,134007],{"class":400,"line":1490},[398,133998,132230],{"class":2239},[398,134000,80000],{"class":408},[398,134002,129105],{"class":457},[398,134004,51630],{"class":408},[398,134006,55024],{"class":457},[398,134008,129675],{"class":408},[398,134010,134011],{"class":400,"line":1496},[398,134012,132245],{"class":467},[398,134014,134015,134017,134019,134021,134023,134025],{"class":400,"line":1587},[398,134016,132250],{"class":2239},[398,134018,80000],{"class":408},[398,134020,129105],{"class":457},[398,134022,51630],{"class":408},[398,134024,86426],{"class":457},[398,134026,129675],{"class":408},[398,134028,134029],{"class":400,"line":1593},[398,134030,132265],{"class":467},[398,134032,134033,134035,134037,134039,134041,134043],{"class":400,"line":1605},[398,134034,132270],{"class":2239},[398,134036,80000],{"class":408},[398,134038,129105],{"class":457},[398,134040,51630],{"class":408},[398,134042,132279],{"class":457},[398,134044,129675],{"class":408},[19,134046,134047],{},"完整代码：",[389,134049,134050],{"className":126745,"code":132177,"language":126747,"meta":316,"style":316},[395,134051,134052,134056,134070,134074,134088,134092,134106,134110,134124,134128],{"__ignoreMap":316},[398,134053,134054],{"class":400,"line":401},[398,134055,132184],{"class":467},[398,134057,134058,134060,134062,134064,134066,134068],{"class":400,"line":317},[398,134059,132189],{"class":2239},[398,134061,80000],{"class":408},[398,134063,129105],{"class":457},[398,134065,51630],{"class":408},[398,134067,132198],{"class":457},[398,134069,129675],{"class":408},[398,134071,134072],{"class":400,"line":320},[398,134073,132205],{"class":467},[398,134075,134076,134078,134080,134082,134084,134086],{"class":400,"line":1470},[398,134077,132210],{"class":2239},[398,134079,80000],{"class":408},[398,134081,129105],{"class":457},[398,134083,51630],{"class":408},[398,134085,54957],{"class":457},[398,134087,129675],{"class":408},[398,134089,134090],{"class":400,"line":1476},[398,134091,132225],{"class":467},[398,134093,134094,134096,134098,134100,134102,134104],{"class":400,"line":1490},[398,134095,132230],{"class":2239},[398,134097,80000],{"class":408},[398,134099,129105],{"class":457},[398,134101,51630],{"class":408},[398,134103,55024],{"class":457},[398,134105,129675],{"class":408},[398,134107,134108],{"class":400,"line":1496},[398,134109,132245],{"class":467},[398,134111,134112,134114,134116,134118,134120,134122],{"class":400,"line":1587},[398,134113,132250],{"class":2239},[398,134115,80000],{"class":408},[398,134117,129105],{"class":457},[398,134119,51630],{"class":408},[398,134121,86426],{"class":457},[398,134123,129675],{"class":408},[398,134125,134126],{"class":400,"line":1593},[398,134127,132265],{"class":467},[398,134129,134130,134132,134134,134136,134138,134140],{"class":400,"line":1605},[398,134131,132270],{"class":2239},[398,134133,80000],{"class":408},[398,134135,129105],{"class":457},[398,134137,51630],{"class":408},[398,134139,132279],{"class":457},[398,134141,129675],{"class":408},[19,134143,134144],{},"分布思路重点详解：",[389,134146,134147],{"className":126745,"code":132177,"language":126747,"meta":316,"style":316},[395,134148,134149,134153,134167,134171,134185,134189,134203,134207,134221,134225],{"__ignoreMap":316},[398,134150,134151],{"class":400,"line":401},[398,134152,132184],{"class":467},[398,134154,134155,134157,134159,134161,134163,134165],{"class":400,"line":317},[398,134156,132189],{"class":2239},[398,134158,80000],{"class":408},[398,134160,129105],{"class":457},[398,134162,51630],{"class":408},[398,134164,132198],{"class":457},[398,134166,129675],{"class":408},[398,134168,134169],{"class":400,"line":320},[398,134170,132205],{"class":467},[398,134172,134173,134175,134177,134179,134181,134183],{"class":400,"line":1470},[398,134174,132210],{"class":2239},[398,134176,80000],{"class":408},[398,134178,129105],{"class":457},[398,134180,51630],{"class":408},[398,134182,54957],{"class":457},[398,134184,129675],{"class":408},[398,134186,134187],{"class":400,"line":1476},[398,134188,132225],{"class":467},[398,134190,134191,134193,134195,134197,134199,134201],{"class":400,"line":1490},[398,134192,132230],{"class":2239},[398,134194,80000],{"class":408},[398,134196,129105],{"class":457},[398,134198,51630],{"class":408},[398,134200,55024],{"class":457},[398,134202,129675],{"class":408},[398,134204,134205],{"class":400,"line":1496},[398,134206,132245],{"class":467},[398,134208,134209,134211,134213,134215,134217,134219],{"class":400,"line":1587},[398,134210,132250],{"class":2239},[398,134212,80000],{"class":408},[398,134214,129105],{"class":457},[398,134216,51630],{"class":408},[398,134218,86426],{"class":457},[398,134220,129675],{"class":408},[398,134222,134223],{"class":400,"line":1593},[398,134224,132265],{"class":467},[398,134226,134227,134229,134231,134233,134235,134237],{"class":400,"line":1605},[398,134228,132270],{"class":2239},[398,134230,80000],{"class":408},[398,134232,129105],{"class":457},[398,134234,51630],{"class":408},[398,134236,132279],{"class":457},[398,134238,129675],{"class":408},[1738,134240],{"style":126601,"src":134241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,134243,134244],{},"图片太大，盒子太小，此时需要修改图片的大小",[389,134246,134248],{"className":127492,"code":134247,"language":127494,"meta":316,"style":316},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[395,134249,134250],{"__ignoreMap":316},[398,134251,134252,134254,134256,134258,134260,134263,134265,134267,134270,134273,134275,134278],{"class":400,"line":401},[398,134253,1312],{"class":408},[398,134255,1738],{"class":51493},[398,134257,55432],{"class":2239},[398,134259,454],{"class":408},[398,134261,134262],{"class":513},"\"images\u002Fpic.jpg\"",[398,134264,55440],{"class":2239},[398,134266,454],{"class":408},[398,134268,134269],{"class":513},"\"描述文字\"",[398,134271,134272],{"class":2239}," title",[398,134274,454],{"class":408},[398,134276,134277],{"class":513},"\"悬停提示\"",[398,134279,51500],{"class":408},[1738,134281],{"style":126601,"src":134282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,134284,134285],{},"制造遮罩层",[389,134287,134288],{"className":127492,"code":134247,"language":127494,"meta":316,"style":316},[395,134289,134290],{"__ignoreMap":316},[398,134291,134292,134294,134296,134298,134300,134302,134304,134306,134308,134310,134312,134314],{"class":400,"line":401},[398,134293,1312],{"class":408},[398,134295,1738],{"class":51493},[398,134297,55432],{"class":2239},[398,134299,454],{"class":408},[398,134301,134262],{"class":513},[398,134303,55440],{"class":2239},[398,134305,454],{"class":408},[398,134307,134269],{"class":513},[398,134309,134272],{"class":2239},[398,134311,454],{"class":408},[398,134313,134277],{"class":513},[398,134315,51500],{"class":408},[19,134317,134318],{},"此时是这样的为标准流",[1738,134320],{"style":126601,"src":134321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,134323,134324],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,134326,134327],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,134329,134330],{},"让他在中间，用center(background-position)",[19,134332,134333],{},"将需要变的尽可能放到一个盒子中",[19,134335,134336],{},"放大盒子上内部盒子发生变化",[389,134338,134340],{"className":126745,"code":134339,"language":126747,"meta":316,"style":316},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[395,134341,134342,134348,134358,134362,134369,134379,134391,134403],{"__ignoreMap":316},[398,134343,134344,134346],{"class":400,"line":401},[398,134345,127812],{"class":2239},[398,134347,15849],{"class":408},[398,134349,134350,134352,134354,134356],{"class":400,"line":317},[398,134351,132551],{"class":457},[398,134353,51630],{"class":408},[398,134355,54957],{"class":457},[398,134357,1566],{"class":408},[398,134359,134360],{"class":400,"line":320},[398,134361,1841],{"class":408},[398,134363,134364,134367],{"class":400,"line":1470},[398,134365,134366],{"class":2239},".child",[398,134368,15849],{"class":408},[398,134370,134371,134373,134375,134377],{"class":400,"line":1476},[398,134372,132551],{"class":457},[398,134374,51630],{"class":408},[398,134376,55024],{"class":457},[398,134378,1566],{"class":408},[398,134380,134381,134383,134385,134387,134389],{"class":400,"line":1490},[398,134382,132565],{"class":457},[398,134384,51630],{"class":408},[398,134386,1058],{"class":457},[398,134388,730],{"class":404},[398,134390,1566],{"class":408},[398,134392,134393,134395,134397,134399,134401],{"class":400,"line":1496},[398,134394,132582],{"class":457},[398,134396,51630],{"class":408},[398,134398,1058],{"class":457},[398,134400,730],{"class":404},[398,134402,1566],{"class":408},[398,134404,134405],{"class":400,"line":1587},[398,134406,1841],{"class":408},[19,134408,134409],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[343,134411,134413],{"id":134412},"_122-精灵图","12.2 精灵图",[14,134415,134417],{"id":134416},"_1221-理解","12.2.1 理解",[38,134419,134420,134438],{},[41,134421,134422,134423,132651,134426,134429,134430,134433,134434,134437],{},"目的： ",[23,134424,134425],{},"为了有效地减少服务器接收和发送请求的次数",[23,134427,134428],{},"提高"," 页面的 ",[23,134431,134432],{},"加载速度"," ，出现了 ",[23,134435,134436],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[41,134439,134440,134441,134443,134444,134446,134447,134449,134450,134452,134453,134455,134456,134458],{},"使用精灵图核心：",[53909,134442],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53909,134445],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53909,134448],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53909,134451],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53909,134454],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53909,134457],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[14,134460,134462],{"id":134461},"_1222-扒图","12.2.2 扒图",[389,134464,134467],{"className":134465,"code":134466,"language":5464},[5462],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[395,134468,134466],{"__ignoreMap":316},[1738,134470],{"style":126601,"src":134471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[1738,134473],{"style":126601,"src":134474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[14,134476,134478],{"id":134477},"_1223-精灵图的实现","12.2.3 精灵图的实现",[1738,134480],{"style":126601,"src":134481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,134483,134484],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[1738,134486],{"style":126601,"src":134487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[389,134489,134491],{"className":126745,"code":134490,"language":126747,"meta":316,"style":316},"\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",[395,134492,134493,134498,134505,134517,134529,134548,134565],{"__ignoreMap":316},[398,134494,134495],{"class":400,"line":401},[398,134496,134497],{"class":467},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[398,134499,134500,134503],{"class":400,"line":317},[398,134501,134502],{"class":2239},".icon",[398,134504,15849],{"class":408},[398,134506,134507,134509,134511,134513,134515],{"class":400,"line":320},[398,134508,70761],{"class":457},[398,134510,51630],{"class":408},[398,134512,1102],{"class":457},[398,134514,51685],{"class":404},[398,134516,1566],{"class":408},[398,134518,134519,134521,134523,134525,134527],{"class":400,"line":1470},[398,134520,70981],{"class":457},[398,134522,51630],{"class":408},[398,134524,1102],{"class":457},[398,134526,51685],{"class":404},[398,134528,1566],{"class":408},[398,134530,134531,134533,134535,134537,134539,134542,134544,134546],{"class":400,"line":1476},[398,134532,70804],{"class":457},[398,134534,51630],{"class":408},[398,134536,61919],{"class":457},[398,134538,409],{"class":408},[398,134540,134541],{"class":5493},"sprites.png",[398,134543,13991],{"class":408},[398,134545,61929],{"class":457},[398,134547,1566],{"class":408},[398,134549,134550,134552,134554,134556,134558,134561,134563],{"class":400,"line":1490},[398,134551,129005],{"class":457},[398,134553,51630],{"class":408},[398,134555,51956],{"class":457},[398,134557,51685],{"class":404},[398,134559,134560],{"class":457}," -20",[398,134562,51685],{"class":404},[398,134564,1566],{"class":408},[398,134566,134567],{"class":400,"line":1496},[398,134568,1841],{"class":408},[1738,134570],{"style":126601,"src":134571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,134573,134574],{},"在前端中坐标轴的正方向是右和下",[343,134576,134578],{"id":134577},"_123-字体图标","12.3 字体图标",[14,134580,134582],{"id":134581},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,134584,134585],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,134587,134588],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,134590,134591],{},"1.图片文件还是比较大的。",[19,134593,134594],{},"2.图片本身放大和缩小会失真。",[19,134596,134597],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,134599,134600,134601,78],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[23,134602,134603],{},"字体图标 iconfont",[19,134605,134606,134609,134610,28578],{},[23,134607,134608],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[23,134611,134612],{},"展示的是图标，本质属于字体",[14,134614,134616],{"id":134615},"_1232-字体图标的优点","12.3.2 字体图标的优点",[67,134618,134619,134624,134627,134630,134633],{},[41,134620,134621,134623],{},[23,134622,221],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[41,134625,134626],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[41,134628,134629],{},"兼容性：几乎支持所有的浏览器，请放心使用",[41,134631,134632],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[41,134634,134635],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[14,134637,134639],{"id":134638},"_1233-字体库下载网站","12.3.3 字体库下载网站",[67,134641,134642],{},[41,134643,134644,134645],{},"icomoon字体库：",[640,134646,134649],{"href":134647,"rel":134648},"http:\u002F\u002Ficomoon.io\u002F",[24142],"http:\u002F\u002Ficomoon.io",[19,134651,134652],{},"进去之后点icomoon app",[1738,134654],{"style":126601,"src":134655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,134657,134658],{},"可以对其编辑：",[1738,134660],{"style":126601,"src":134661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,134663,134664],{},"生成字体：",[1738,134666],{"style":126601,"src":134667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,134669,134670],{},"下载：",[1738,134672],{"style":126601,"src":134673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[67,134675,134676],{},[41,134677,134678,134679],{},"阿里iconfont字体库： ",[640,134680,134681],{"href":134681,"rel":134682},"http:\u002F\u002Fwww.iconfont.cn\u002F",[24142],[14,134684,134686],{"id":134685},"_1234-字体图标的引入","12.3.4 字体图标的引入",[38,134688,134689],{},[41,134690,134691,134692,134695],{},"把下载包里面的 ",[23,134693,134694],{},"fonts"," 文件夹放入页面根目录下",[1738,134697],{"style":126601,"src":134698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[38,134700,134701],{"start":317},[41,134702,134703],{},"字体文件格式",[84,134705,134706,134715],{},[87,134707,134708],{},[90,134709,134710,134713],{},[93,134711,134712],{"align":95},"格式",[93,134714,24017],{"align":95},[101,134716,134717,134727,134737,134747],{},[90,134718,134719,134724],{},[106,134720,134721],{"align":95},[23,134722,134723],{},".ttf",[106,134725,134726],{"align":95},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[90,134728,134729,134734],{},[106,134730,134731],{"align":95},[23,134732,134733],{},".woff",[106,134735,134736],{"align":95},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[90,134738,134739,134744],{},[106,134740,134741],{"align":95},[23,134742,134743],{},".eot",[106,134745,134746],{"align":95},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[90,134748,134749,134754],{},[106,134750,134751],{"align":95},[23,134752,134753],{},"svg",[106,134755,134756],{"align":95},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[38,134758,134759],{"start":320},[41,134760,134761],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[389,134763,134765],{"className":126745,"code":134764,"language":126747,"meta":316,"style":316},"\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",[395,134766,134767,134772,134779,134791,134807,134832,134853,134873,134893,134897,134903,134913,134924],{"__ignoreMap":316},[398,134768,134769],{"class":400,"line":401},[398,134770,134771],{"class":467},"\u002F* 引入字体图标 *\u002F\n",[398,134773,134774,134777],{"class":400,"line":317},[398,134775,134776],{"class":404},"@font-face",[398,134778,15849],{"class":408},[398,134780,134781,134784,134786,134789],{"class":400,"line":320},[398,134782,134783],{"class":457},"  font-family",[398,134785,51630],{"class":408},[398,134787,134788],{"class":513},"'icomoon'",[398,134790,1566],{"class":408},[398,134792,134793,134796,134798,134800,134802,134805],{"class":400,"line":1470},[398,134794,134795],{"class":457},"  src",[398,134797,51630],{"class":408},[398,134799,61919],{"class":457},[398,134801,409],{"class":408},[398,134803,134804],{"class":513},"'fonts\u002Ficomoon.eot'",[398,134806,2995],{"class":408},[398,134808,134809,134811,134813,134815,134817,134820,134822,134825,134827,134830],{"class":400,"line":1476},[398,134810,134795],{"class":457},[398,134812,51630],{"class":408},[398,134814,61919],{"class":457},[398,134816,409],{"class":408},[398,134818,134819],{"class":513},"'fonts\u002Ficomoon.eot?#iefix'",[398,134821,13991],{"class":408},[398,134823,134824],{"class":457},"format",[398,134826,409],{"class":408},[398,134828,134829],{"class":513},"'embedded-opentype'",[398,134831,38240],{"class":408},[398,134833,134834,134837,134839,134842,134844,134846,134848,134851],{"class":400,"line":1490},[398,134835,134836],{"class":457},"       url",[398,134838,409],{"class":408},[398,134840,134841],{"class":513},"'fonts\u002Ficomoon.woff'",[398,134843,13991],{"class":408},[398,134845,134824],{"class":457},[398,134847,409],{"class":408},[398,134849,134850],{"class":513},"'woff'",[398,134852,38240],{"class":408},[398,134854,134855,134857,134859,134862,134864,134866,134868,134871],{"class":400,"line":1496},[398,134856,134836],{"class":457},[398,134858,409],{"class":408},[398,134860,134861],{"class":513},"'fonts\u002Ficomoon.ttf'",[398,134863,13991],{"class":408},[398,134865,134824],{"class":457},[398,134867,409],{"class":408},[398,134869,134870],{"class":513},"'truetype'",[398,134872,38240],{"class":408},[398,134874,134875,134877,134879,134882,134884,134886,134888,134891],{"class":400,"line":1587},[398,134876,134836],{"class":457},[398,134878,409],{"class":408},[398,134880,134881],{"class":513},"'fonts\u002Ficomoon.svg#icomoon'",[398,134883,13991],{"class":408},[398,134885,134824],{"class":457},[398,134887,409],{"class":408},[398,134889,134890],{"class":513},"'svg'",[398,134892,2995],{"class":408},[398,134894,134895],{"class":400,"line":1593},[398,134896,1841],{"class":408},[398,134898,134899,134901],{"class":400,"line":1605},[398,134900,134502],{"class":2239},[398,134902,15849],{"class":408},[398,134904,134905,134907,134909,134911],{"class":400,"line":1888},[398,134906,134783],{"class":457},[398,134908,51630],{"class":408},[398,134910,134788],{"class":513},[398,134912,1566],{"class":408},[398,134914,134915,134918,134920,134922],{"class":400,"line":1893},[398,134916,134917],{"class":457},"  font-style",[398,134919,51630],{"class":408},[398,134921,64034],{"class":457},[398,134923,1566],{"class":408},[398,134925,134926],{"class":400,"line":1899},[398,134927,1841],{"class":408},[19,134929,134930],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[1738,134932],{"style":126601,"src":134933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[38,134935,134936],{"start":1470},[41,134937,134938],{},"添加字体",[1738,134940],{"style":126601,"src":134941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,134943,134944],{},"复制：",[1738,134946],{"style":126601,"src":134947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,134949,134950],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[38,134952,134953],{"start":1476},[41,134954,134955],{},"代码展示：",[389,134957,134958],{"className":126745,"code":134764,"language":126747,"meta":316,"style":316},[395,134959,134960,134964,134970,134980,134994,135016,135034,135052,135070,135074,135080,135090,135100],{"__ignoreMap":316},[398,134961,134962],{"class":400,"line":401},[398,134963,134771],{"class":467},[398,134965,134966,134968],{"class":400,"line":317},[398,134967,134776],{"class":404},[398,134969,15849],{"class":408},[398,134971,134972,134974,134976,134978],{"class":400,"line":320},[398,134973,134783],{"class":457},[398,134975,51630],{"class":408},[398,134977,134788],{"class":513},[398,134979,1566],{"class":408},[398,134981,134982,134984,134986,134988,134990,134992],{"class":400,"line":1470},[398,134983,134795],{"class":457},[398,134985,51630],{"class":408},[398,134987,61919],{"class":457},[398,134989,409],{"class":408},[398,134991,134804],{"class":513},[398,134993,2995],{"class":408},[398,134995,134996,134998,135000,135002,135004,135006,135008,135010,135012,135014],{"class":400,"line":1476},[398,134997,134795],{"class":457},[398,134999,51630],{"class":408},[398,135001,61919],{"class":457},[398,135003,409],{"class":408},[398,135005,134819],{"class":513},[398,135007,13991],{"class":408},[398,135009,134824],{"class":457},[398,135011,409],{"class":408},[398,135013,134829],{"class":513},[398,135015,38240],{"class":408},[398,135017,135018,135020,135022,135024,135026,135028,135030,135032],{"class":400,"line":1490},[398,135019,134836],{"class":457},[398,135021,409],{"class":408},[398,135023,134841],{"class":513},[398,135025,13991],{"class":408},[398,135027,134824],{"class":457},[398,135029,409],{"class":408},[398,135031,134850],{"class":513},[398,135033,38240],{"class":408},[398,135035,135036,135038,135040,135042,135044,135046,135048,135050],{"class":400,"line":1496},[398,135037,134836],{"class":457},[398,135039,409],{"class":408},[398,135041,134861],{"class":513},[398,135043,13991],{"class":408},[398,135045,134824],{"class":457},[398,135047,409],{"class":408},[398,135049,134870],{"class":513},[398,135051,38240],{"class":408},[398,135053,135054,135056,135058,135060,135062,135064,135066,135068],{"class":400,"line":1587},[398,135055,134836],{"class":457},[398,135057,409],{"class":408},[398,135059,134881],{"class":513},[398,135061,13991],{"class":408},[398,135063,134824],{"class":457},[398,135065,409],{"class":408},[398,135067,134890],{"class":513},[398,135069,2995],{"class":408},[398,135071,135072],{"class":400,"line":1593},[398,135073,1841],{"class":408},[398,135075,135076,135078],{"class":400,"line":1605},[398,135077,134502],{"class":2239},[398,135079,15849],{"class":408},[398,135081,135082,135084,135086,135088],{"class":400,"line":1888},[398,135083,134783],{"class":457},[398,135085,51630],{"class":408},[398,135087,134788],{"class":513},[398,135089,1566],{"class":408},[398,135091,135092,135094,135096,135098],{"class":400,"line":1893},[398,135093,134917],{"class":457},[398,135095,51630],{"class":408},[398,135097,64034],{"class":457},[398,135099,1566],{"class":408},[398,135101,135102],{"class":400,"line":1899},[398,135103,1841],{"class":408},[1738,135105],{"style":126601,"src":135106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,135108,135109],{},"更加细节展示：",[38,135111,135112],{},[41,135113,135114],{},"html 标签内添加小图标",[1738,135116],{"style":126601,"src":135117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[38,135119,135120],{"start":317},[41,135121,135122],{},"给标签定义字体",[389,135124,135125],{"className":127492,"code":130849,"language":127494,"meta":316,"style":316},[395,135126,135127,135131,135145,135149],{"__ignoreMap":316},[398,135128,135129],{"class":400,"line":401},[398,135130,130856],{"class":467},[398,135132,135133,135135,135137,135139,135141,135143],{"class":400,"line":317},[398,135134,1312],{"class":408},[398,135136,51804],{"class":51493},[398,135138,53679],{"class":2239},[398,135140,454],{"class":408},[398,135142,130869],{"class":513},[398,135144,51500],{"class":408},[398,135146,135147],{"class":400,"line":320},[398,135148,130876],{"class":408},[398,135150,135151,135153,135155],{"class":400,"line":1470},[398,135152,51978],{"class":408},[398,135154,51804],{"class":51493},[398,135156,51500],{"class":408},[19,135158,135159],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[1738,135161],{"style":126601,"src":135162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[14,135164,135166],{"id":135165},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,135168,135169],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,135171,135172,135173,135176],{},"把压缩包里面的 ",[23,135174,135175],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,135178,135179],{},"打开网站，点下方：",[1738,135181],{"style":126601,"src":135182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[1738,135184],{"style":126601,"src":135185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[1738,135187],{"style":126601,"src":135188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,135190,135191],{},"点yes重新加载",[19,135193,135194],{},"然后重复之前的操作就可以实现了",[19,135196,135197],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[14,135199,135201],{"id":135200},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[1738,135203],{"style":126601,"src":135204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[5403,135206,135207],{},"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":316,"searchDepth":317,"depth":317,"links":135209},[135210,135216,135221],{"id":133813,"depth":317,"text":133814,"children":135211},[135212,135213,135214,135215],{"id":133825,"depth":320,"text":133826},{"id":133854,"depth":320,"text":133855},{"id":133882,"depth":320,"text":133883},{"id":133940,"depth":320,"text":133941},{"id":134412,"depth":317,"text":134413,"children":135217},[135218,135219,135220],{"id":134416,"depth":320,"text":134417},{"id":134461,"depth":320,"text":134462},{"id":134477,"depth":320,"text":134478},{"id":134577,"depth":317,"text":134578,"children":135222},[135223,135224,135225,135226,135227,135228],{"id":134581,"depth":320,"text":134582},{"id":134615,"depth":320,"text":134616},{"id":134638,"depth":320,"text":134639},{"id":134685,"depth":320,"text":134686},{"id":135165,"depth":320,"text":135166},{"id":135200,"depth":320,"text":135201},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133805,"description":23654},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135235,"title":135236,"body":135237,"description":23654,"extension":326,"meta":136464,"navigation":328,"path":136465,"seo":136466,"stem":136467,"__hash__":136468},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135238,"toc":136445},[135239,135242,135246,135249,135263,135331,135361,135364,135368,135372,135474,135521,135525,135528,135531,135565,135568,135571,135574,135577,135580,135583,135586,135588,135591,135594,135597,135600,135603,135606,135609,135637,135640,135644,135647,135654,135657,135660,135686,135689,135693,135696,135699,135706,135710,135713,135715,135747,135750,135753,135765,135771,135774,135777,135780,135782,135786,135789,135792,135795,135840,135844,135846,135849,135856,135898,135901,135905,135910,135924,135928,135931,135934,135937,135940,135943,135977,135980,135983,136037,136040,136043,136046,136049,136101,136104,136107,136156,136160,136162,136165,136168,136171,136174,136177,136235,136238,136244,136247,136250,136282,136285,136289,136293,136296,136328,136332,136335,136379,136383,136386,136389,136392,136395,136398,136401,136404,136406,136409,136411,136414,136417,136420,136423,136428,136431,136433,136436,136439,136442],[10,135240,135236],{"id":135241},"_13-界面样式与布局技巧",[343,135243,135245],{"id":135244},"_131-css三角","13.1 css三角",[19,135247,135248],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[67,135250,135251,135254,135257,135260],{},[41,135252,135253],{},"用css 边框可以模拟三角效果",[41,135255,135256],{},"宽度高度为0",[41,135258,135259],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[41,135261,135262],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[389,135264,135266],{"className":126745,"code":135265,"language":126747,"meta":316,"style":316},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[395,135267,135268,135273,135280,135290,135300,135316,135327],{"__ignoreMap":316},[398,135269,135270],{"class":400,"line":401},[398,135271,135272],{"class":467},"\u002F* CSS 实现三角形 *\u002F\n",[398,135274,135275,135278],{"class":400,"line":317},[398,135276,135277],{"class":2239},".triangle",[398,135279,15849],{"class":408},[398,135281,135282,135284,135286,135288],{"class":400,"line":320},[398,135283,70761],{"class":457},[398,135285,51630],{"class":408},[398,135287,593],{"class":457},[398,135289,1566],{"class":408},[398,135291,135292,135294,135296,135298],{"class":400,"line":1470},[398,135293,70981],{"class":457},[398,135295,51630],{"class":408},[398,135297,593],{"class":457},[398,135299,1566],{"class":408},[398,135301,135302,135304,135306,135308,135310,135312,135314],{"class":400,"line":1476},[398,135303,71089],{"class":457},[398,135305,51630],{"class":408},[398,135307,848],{"class":457},[398,135309,51685],{"class":404},[398,135311,51714],{"class":457},[398,135313,64184],{"class":457},[398,135315,1566],{"class":408},[398,135317,135318,135321,135323,135325],{"class":400,"line":1490},[398,135319,135320],{"class":457},"  border-bottom-color",[398,135322,51630],{"class":408},[398,135324,62562],{"class":457},[398,135326,1566],{"class":408},[398,135328,135329],{"class":400,"line":1496},[398,135330,1841],{"class":408},[389,135332,135333],{"className":126745,"code":130902,"language":126747,"meta":316,"style":316},[395,135334,135335,135341,135357],{"__ignoreMap":316},[398,135336,135337,135339],{"class":400,"line":401},[398,135338,51804],{"class":51493},[398,135340,15849],{"class":408},[398,135342,135343,135345,135347,135349,135351,135353,135355],{"class":400,"line":317},[398,135344,71089],{"class":457},[398,135346,51630],{"class":408},[398,135348,619],{"class":457},[398,135350,51685],{"class":404},[398,135352,51714],{"class":457},[398,135354,130137],{"class":457},[398,135356,1566],{"class":408},[398,135358,135359],{"class":400,"line":320},[398,135360,1841],{"class":408},[1738,135362],{"style":126601,"src":135363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[343,135365,135367],{"id":135366},"_132-css用户界面样式","13.2 css用户界面样式",[14,135369,135371],{"id":135370},"_1321-鼠标样式","13.2.1 鼠标样式",[389,135373,135375],{"className":126745,"code":135374,"language":126747,"meta":316,"style":316},"\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",[395,135376,135377,135382,135401,135419,135438,135455],{"__ignoreMap":316},[398,135378,135379],{"class":400,"line":401},[398,135380,135381],{"class":467},"\u002F* 鼠标样式 *\u002F\n",[398,135383,135384,135386,135388,135391,135393,135395,135398],{"class":400,"line":317},[398,135385,51804],{"class":51493},[398,135387,80000],{"class":408},[398,135389,135390],{"class":457},"cursor",[398,135392,51630],{"class":408},[398,135394,62223],{"class":457},[398,135396,135397],{"class":408},"; }   ",[398,135399,135400],{"class":467},"\u002F* 手型 *\u002F\n",[398,135402,135403,135405,135407,135409,135411,135414,135416],{"class":400,"line":320},[398,135404,51804],{"class":51493},[398,135406,80000],{"class":408},[398,135408,135390],{"class":457},[398,135410,51630],{"class":408},[398,135412,135413],{"class":457},"default",[398,135415,135397],{"class":408},[398,135417,135418],{"class":467},"\u002F* 默认 *\u002F\n",[398,135420,135421,135423,135425,135427,135429,135432,135435],{"class":400,"line":1470},[398,135422,51804],{"class":51493},[398,135424,80000],{"class":408},[398,135426,135390],{"class":457},[398,135428,51630],{"class":408},[398,135430,135431],{"class":457},"move",[398,135433,135434],{"class":408},"; }      ",[398,135436,135437],{"class":467},"\u002F* 移动 *\u002F\n",[398,135439,135440,135442,135444,135446,135448,135450,135452],{"class":400,"line":1476},[398,135441,51804],{"class":51493},[398,135443,80000],{"class":408},[398,135445,135390],{"class":457},[398,135447,51630],{"class":408},[398,135449,5464],{"class":457},[398,135451,135434],{"class":408},[398,135453,135454],{"class":467},"\u002F* 文本 *\u002F\n",[398,135456,135457,135459,135461,135463,135465,135468,135471],{"class":400,"line":1490},[398,135458,51804],{"class":51493},[398,135460,80000],{"class":408},[398,135462,135390],{"class":457},[398,135464,51630],{"class":408},[398,135466,135467],{"class":457},"not-allowed",[398,135469,135470],{"class":408},"; } ",[398,135472,135473],{"class":467},"\u002F* 禁止 *\u002F\n",[84,135475,135476,135484],{},[87,135477,135478],{},[90,135479,135480,135482],{},[93,135481,127209],{"align":95},[93,135483,27682],{"align":95},[101,135485,135486,135493,135500,135507,135514],{},[90,135487,135488,135490],{},[106,135489,135413],{"align":95},[106,135491,135492],{"align":95},"小白 默认",[90,135494,135495,135497],{},[106,135496,62223],{"align":95},[106,135498,135499],{"align":95},"小手",[90,135501,135502,135504],{},[106,135503,135431],{"align":95},[106,135505,135506],{"align":95},"移动",[90,135508,135509,135511],{},[106,135510,5464],{"align":95},[106,135512,135513],{"align":95},"文本",[90,135515,135516,135518],{},[106,135517,135467],{"align":95},[106,135519,135520],{"align":95},"禁止",[14,135522,135524],{"id":135523},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,135526,135527],{},"去除表单轮廓线",[19,135529,135530],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[389,135532,135533],{"className":126745,"code":130109,"language":126747,"meta":316,"style":316},[395,135534,135535,135539,135545,135561],{"__ignoreMap":316},[398,135536,135537],{"class":400,"line":401},[398,135538,130116],{"class":467},[398,135540,135541,135543],{"class":400,"line":317},[398,135542,51804],{"class":51493},[398,135544,15849],{"class":408},[398,135546,135547,135549,135551,135553,135555,135557,135559],{"class":400,"line":320},[398,135548,71089],{"class":457},[398,135550,51630],{"class":408},[398,135552,619],{"class":457},[398,135554,51685],{"class":404},[398,135556,51714],{"class":457},[398,135558,130137],{"class":457},[398,135560,1566],{"class":408},[398,135562,135563],{"class":400,"line":1470},[398,135564,1841],{"class":408},[19,135566,135567],{},"文本域：",[1738,135569],{"style":126601,"src":135570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,135572,135573],{},"此时会有一个空白区域",[1738,135575],{"style":126601,"src":135576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,135578,135579],{},"写在同一行就不会出现这个问题",[1738,135581],{"style":126601,"src":135582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,135584,135585],{},"文本域是行内块元素，一定记住！！！",[19,135587,98426],{},[1738,135589],{"style":126601,"src":135590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,135592,135593],{},"文本域尽量放在一行",[19,135595,135596],{},"知识回顾：cols是列，rols是行",[1738,135598],{"style":126601,"src":135599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,135601,135602],{},"它可以进行拖动，显然这是我们不愿意看到的",[1738,135604],{"style":126601,"src":135605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,135607,135608],{},"使用resize进行解决",[389,135610,135612],{"className":126745,"code":135611,"language":126747,"meta":316,"style":316},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[395,135613,135614,135620,135633],{"__ignoreMap":316},[398,135615,135616,135618],{"class":400,"line":401},[398,135617,54014],{"class":51493},[398,135619,15849],{"class":408},[398,135621,135622,135624,135626,135628,135630],{"class":400,"line":317},[398,135623,70991],{"class":457},[398,135625,51630],{"class":408},[398,135627,54930],{"class":457},[398,135629,130608],{"class":408},[398,135631,135632],{"class":467},"\u002F* 取消表单轮廓线 *\u002F\n",[398,135634,135635],{"class":400,"line":320},[398,135636,1841],{"class":408},[19,135638,135639],{},"此时就无法通过右下方实现拖动了",[14,135641,135643],{"id":135642},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,135645,135646],{},"实现一个盒子中的文字和图片对齐",[19,135648,135649,135650,135653],{},"用于设置一个元素的 ",[23,135651,135652],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,135655,135656],{},"图片和文字默认是基线对齐",[1738,135658],{"style":126601,"src":135659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[389,135661,135662],{"className":126745,"code":135611,"language":126747,"meta":316,"style":316},[395,135663,135664,135670,135682],{"__ignoreMap":316},[398,135665,135666,135668],{"class":400,"line":401},[398,135667,54014],{"class":51493},[398,135669,15849],{"class":408},[398,135671,135672,135674,135676,135678,135680],{"class":400,"line":317},[398,135673,70991],{"class":457},[398,135675,51630],{"class":408},[398,135677,54930],{"class":457},[398,135679,130608],{"class":408},[398,135681,135632],{"class":467},[398,135683,135684],{"class":400,"line":320},[398,135685,1841],{"class":408},[1738,135687],{"style":126601,"src":135688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22275,135690,135692],{"id":135691},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,135694,135695],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[1738,135697],{"style":126601,"src":135698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,135700,135701,135702,135705],{},"此时可以给图片、表单这些行内块元素的 ",[23,135703,135704],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22275,135707,135709],{"id":135708},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,135711,135712],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,135714,14910],{},[389,135716,135718],{"className":126745,"code":135717,"language":126747,"meta":316,"style":316},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[395,135719,135720,135725,135731,135743],{"__ignoreMap":316},[398,135721,135722],{"class":400,"line":401},[398,135723,135724],{"class":467},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[398,135726,135727,135729],{"class":400,"line":317},[398,135728,1738],{"class":51493},[398,135730,15849],{"class":408},[398,135732,135733,135736,135738,135741],{"class":400,"line":320},[398,135734,135735],{"class":457},"  vertical-align",[398,135737,51630],{"class":408},[398,135739,135740],{"class":457},"middle",[398,135742,1566],{"class":408},[398,135744,135745],{"class":400,"line":1470},[398,135746,1841],{"class":408},[1738,135748],{"style":126601,"src":135749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,135751,135752],{},"主要解决方法有两种：",[38,135754,135755],{},[41,135756,135757,135760,135761,135764],{},[23,135758,135759],{},"给图片"," 添加 ",[23,135762,135763],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,135766,135767,135768],{},"2.把图片转换为块级元素 ",[23,135769,135770],{},"display: block",[19,135772,135773],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,135775,135776],{},"img {",[19,135778,135779],{},"vertical-align:middle;",[19,135781,1348],{},[14,135783,135785],{"id":135784},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,135787,135788],{},"效果：",[1738,135790],{"style":126601,"src":135791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,135793,135794],{},"单行文本溢出显示省略号--必须满足三个条件：",[389,135796,135798],{"className":126745,"code":135797,"language":126747,"meta":316,"style":316},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[395,135799,135800,135805,135811,135821,135826,135836],{"__ignoreMap":316},[398,135801,135802],{"class":400,"line":401},[398,135803,135804],{"class":467},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[398,135806,135807,135809],{"class":400,"line":317},[398,135808,1738],{"class":51493},[398,135810,15849],{"class":408},[398,135812,135813,135815,135817,135819],{"class":400,"line":320},[398,135814,135735],{"class":457},[398,135816,51630],{"class":408},[398,135818,135740],{"class":457},[398,135820,1566],{"class":408},[398,135822,135823],{"class":400,"line":1470},[398,135824,135825],{"class":467},"  \u002F* 或 *\u002F\n",[398,135827,135828,135830,135832,135834],{"class":400,"line":1476},[398,135829,128361],{"class":457},[398,135831,51630],{"class":408},[398,135833,61062],{"class":457},[398,135835,1566],{"class":408},[398,135837,135838],{"class":400,"line":1490},[398,135839,1841],{"class":408},[14,135841,135843],{"id":135842},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,135845,135788],{},[1738,135847],{"style":126601,"src":135848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,135850,135851,135852,135855],{},"多行文本溢出显示省略号， ",[23,135853,135854],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[389,135857,135858],{"className":126745,"code":135797,"language":126747,"meta":316,"style":316},[395,135859,135860,135864,135870,135880,135884,135894],{"__ignoreMap":316},[398,135861,135862],{"class":400,"line":401},[398,135863,135804],{"class":467},[398,135865,135866,135868],{"class":400,"line":317},[398,135867,1738],{"class":51493},[398,135869,15849],{"class":408},[398,135871,135872,135874,135876,135878],{"class":400,"line":320},[398,135873,135735],{"class":457},[398,135875,51630],{"class":408},[398,135877,135740],{"class":457},[398,135879,1566],{"class":408},[398,135881,135882],{"class":400,"line":1470},[398,135883,135825],{"class":467},[398,135885,135886,135888,135890,135892],{"class":400,"line":1476},[398,135887,128361],{"class":457},[398,135889,51630],{"class":408},[398,135891,61062],{"class":457},[398,135893,1566],{"class":408},[398,135895,135896],{"class":400,"line":1490},[398,135897,1841],{"class":408},[19,135899,135900],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[343,135902,135904],{"id":135903},"_133-常见布局技巧","13.3 常见布局技巧",[19,135906,135907],{},[23,135908,135909],{},"巧妙利用一个技术更快更好的布局：",[38,135911,135912,135915,135918,135921],{},[41,135913,135914],{},"margin负值的运用",[41,135916,135917],{},"文字围绕浮动元素",[41,135919,135920],{},"行内块的巧妙运用",[41,135922,135923],{},"CSS三角强化",[14,135925,135927],{"id":135926},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,135929,135930],{},"应用场景：",[1738,135932],{"style":126601,"src":135933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[1738,135935],{"style":126601,"src":135936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,135938,135939],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,135941,135942],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[389,135944,135945],{"className":126745,"code":130109,"language":126747,"meta":316,"style":316},[395,135946,135947,135951,135957,135973],{"__ignoreMap":316},[398,135948,135949],{"class":400,"line":401},[398,135950,130116],{"class":467},[398,135952,135953,135955],{"class":400,"line":317},[398,135954,51804],{"class":51493},[398,135956,15849],{"class":408},[398,135958,135959,135961,135963,135965,135967,135969,135971],{"class":400,"line":320},[398,135960,71089],{"class":457},[398,135962,51630],{"class":408},[398,135964,619],{"class":457},[398,135966,51685],{"class":404},[398,135968,51714],{"class":457},[398,135970,130137],{"class":457},[398,135972,1566],{"class":408},[398,135974,135975],{"class":400,"line":1470},[398,135976,1841],{"class":408},[1738,135978],{"style":126601,"src":135979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,135981,135982],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[389,135984,135986],{"className":126745,"code":135985,"language":126747,"meta":316,"style":316},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[395,135987,135988,135993,135999,136009,136021,136033],{"__ignoreMap":316},[398,135989,135990],{"class":400,"line":401},[398,135991,135992],{"class":467},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[398,135994,135995,135997],{"class":400,"line":317},[398,135996,130593],{"class":2239},[398,135998,15849],{"class":408},[398,136000,136001,136003,136005,136007],{"class":400,"line":320},[398,136002,132551],{"class":457},[398,136004,51630],{"class":408},[398,136006,54957],{"class":457},[398,136008,1566],{"class":408},[398,136010,136011,136013,136015,136017,136019],{"class":400,"line":1470},[398,136012,132565],{"class":457},[398,136014,51630],{"class":408},[398,136016,848],{"class":457},[398,136018,51685],{"class":404},[398,136020,1566],{"class":408},[398,136022,136023,136025,136027,136029,136031],{"class":400,"line":1476},[398,136024,132582],{"class":457},[398,136026,51630],{"class":408},[398,136028,1102],{"class":457},[398,136030,51685],{"class":404},[398,136032,1566],{"class":408},[398,136034,136035],{"class":400,"line":1490},[398,136036,1841],{"class":408},[19,136038,136039],{},"加上上述代码会发现：",[1738,136041],{"style":126601,"src":136042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,136044,136045],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,136047,136048],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[389,136050,136051],{"className":126745,"code":135985,"language":126747,"meta":316,"style":316},[395,136052,136053,136057,136063,136073,136085,136097],{"__ignoreMap":316},[398,136054,136055],{"class":400,"line":401},[398,136056,135992],{"class":467},[398,136058,136059,136061],{"class":400,"line":317},[398,136060,130593],{"class":2239},[398,136062,15849],{"class":408},[398,136064,136065,136067,136069,136071],{"class":400,"line":320},[398,136066,132551],{"class":457},[398,136068,51630],{"class":408},[398,136070,54957],{"class":457},[398,136072,1566],{"class":408},[398,136074,136075,136077,136079,136081,136083],{"class":400,"line":1470},[398,136076,132565],{"class":457},[398,136078,51630],{"class":408},[398,136080,848],{"class":457},[398,136082,51685],{"class":404},[398,136084,1566],{"class":408},[398,136086,136087,136089,136091,136093,136095],{"class":400,"line":1476},[398,136088,132582],{"class":457},[398,136090,51630],{"class":408},[398,136092,1102],{"class":457},[398,136094,51685],{"class":404},[398,136096,1566],{"class":408},[398,136098,136099],{"class":400,"line":1490},[398,136100,1841],{"class":408},[19,136102,136103],{},"解决方式2：",[19,136105,136106],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[389,136108,136110],{"className":126745,"code":136109,"language":126747,"meta":316,"style":316},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[395,136111,136112,136118,136128,136140,136152],{"__ignoreMap":316},[398,136113,136114,136116],{"class":400,"line":401},[398,136115,51804],{"class":51493},[398,136117,15849],{"class":408},[398,136119,136120,136122,136124,136126],{"class":400,"line":317},[398,136121,132551],{"class":457},[398,136123,51630],{"class":408},[398,136125,54957],{"class":457},[398,136127,1566],{"class":408},[398,136129,136130,136132,136134,136136,136138],{"class":400,"line":320},[398,136131,132565],{"class":457},[398,136133,51630],{"class":408},[398,136135,848],{"class":457},[398,136137,51685],{"class":404},[398,136139,1566],{"class":408},[398,136141,136142,136144,136146,136148,136150],{"class":400,"line":1470},[398,136143,132582],{"class":457},[398,136145,51630],{"class":408},[398,136147,1102],{"class":457},[398,136149,51685],{"class":404},[398,136151,1566],{"class":408},[398,136153,136154],{"class":400,"line":1476},[398,136155,1841],{"class":408},[14,136157,136159],{"id":136158},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,136161,135930],{},[1738,136163],{"style":126601,"src":136164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,136166,136167],{},"实现结构图：",[1738,136169],{"style":126601,"src":136170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,136172,136173],{},"巧妙运用浮动元素不会压住文字的特性",[19,136175,136176],{},"代码显示：",[389,136178,136180],{"className":126745,"code":136179,"language":126747,"meta":316,"style":316},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[395,136181,136182,136188,136198,136202,136207,136211,136217,136231],{"__ignoreMap":316},[398,136183,136184,136186],{"class":400,"line":401},[398,136185,130593],{"class":2239},[398,136187,15849],{"class":408},[398,136189,136190,136192,136194,136196],{"class":400,"line":317},[398,136191,131225],{"class":457},[398,136193,51630],{"class":408},[398,136195,95],{"class":457},[398,136197,1566],{"class":408},[398,136199,136200],{"class":400,"line":320},[398,136201,1841],{"class":408},[398,136203,136204],{"class":400,"line":1470},[398,136205,136206],{"class":408},"```Css\n",[398,136208,136209],{"class":400,"line":1476},[398,136210,130588],{"class":467},[398,136212,136213,136215],{"class":400,"line":1490},[398,136214,130593],{"class":2239},[398,136216,15849],{"class":408},[398,136218,136219,136221,136223,136225,136227,136229],{"class":400,"line":1496},[398,136220,70663],{"class":457},[398,136222,51630],{"class":408},[398,136224,593],{"class":457},[398,136226,51749],{"class":457},[398,136228,130608],{"class":408},[398,136230,130611],{"class":467},[398,136232,136233],{"class":400,"line":1587},[398,136234,1841],{"class":408},[19,136236,136237],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[389,136239,136242],{"className":136240,"code":136241,"language":5464},[5462],"\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",[395,136243,136241],{"__ignoreMap":316},[1738,136245],{"style":126601,"src":136246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,136248,136249],{},"最终展示结果：",[389,136251,136252],{"className":126745,"code":130581,"language":126747,"meta":316,"style":316},[395,136253,136254,136258,136264,136278],{"__ignoreMap":316},[398,136255,136256],{"class":400,"line":401},[398,136257,130588],{"class":467},[398,136259,136260,136262],{"class":400,"line":317},[398,136261,130593],{"class":2239},[398,136263,15849],{"class":408},[398,136265,136266,136268,136270,136272,136274,136276],{"class":400,"line":320},[398,136267,70663],{"class":457},[398,136269,51630],{"class":408},[398,136271,593],{"class":457},[398,136273,51749],{"class":457},[398,136275,130608],{"class":408},[398,136277,130611],{"class":467},[398,136279,136280],{"class":400,"line":1470},[398,136281,1841],{"class":408},[1738,136283],{"style":126601,"src":136284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[343,136286,136288],{"id":136287},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[14,136290,136292],{"id":136291},"_1341-原理","13.4.1 原理",[1738,136294],{"style":126601,"src":136295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[389,136297,136298],{"className":126745,"code":130581,"language":126747,"meta":316,"style":316},[395,136299,136300,136304,136310,136324],{"__ignoreMap":316},[398,136301,136302],{"class":400,"line":401},[398,136303,130588],{"class":467},[398,136305,136306,136308],{"class":400,"line":317},[398,136307,130593],{"class":2239},[398,136309,15849],{"class":408},[398,136311,136312,136314,136316,136318,136320,136322],{"class":400,"line":320},[398,136313,70663],{"class":457},[398,136315,51630],{"class":408},[398,136317,593],{"class":457},[398,136319,51749],{"class":457},[398,136321,130608],{"class":408},[398,136323,130611],{"class":467},[398,136325,136326],{"class":400,"line":1470},[398,136327,1841],{"class":408},[14,136329,136331],{"id":136330},"_1342-实例","13.4.2 实例",[1738,136333],{"style":126601,"src":136334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[389,136336,136337],{"className":126745,"code":131211,"language":126747,"meta":316,"style":316},[395,136338,136339,136345,136355,136359,136365,136375],{"__ignoreMap":316},[398,136340,136341,136343],{"class":400,"line":401},[398,136342,131218],{"class":2239},[398,136344,15849],{"class":408},[398,136346,136347,136349,136351,136353],{"class":400,"line":317},[398,136348,131225],{"class":457},[398,136350,51630],{"class":408},[398,136352,95],{"class":457},[398,136354,1566],{"class":408},[398,136356,136357],{"class":400,"line":320},[398,136358,1841],{"class":408},[398,136360,136361,136363],{"class":400,"line":1470},[398,136362,131240],{"class":2239},[398,136364,15849],{"class":408},[398,136366,136367,136369,136371,136373],{"class":400,"line":1476},[398,136368,131225],{"class":457},[398,136370,51630],{"class":408},[398,136372,72715],{"class":457},[398,136374,1566],{"class":408},[398,136376,136377],{"class":400,"line":1490},[398,136378,1841],{"class":408},[343,136380,136382],{"id":136381},"_135-css的初始化","13.5 css的初始化",[19,136384,136385],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,136387,136388],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,136390,136391],{},"每个网页都必须首先进行 CSS初始化。",[19,136393,136394],{},"这里我们以 京东CSS初始化代码为例。",[19,136396,136397],{},"在网页右键查看网页源代码",[19,136399,136400],{},"找到css的link引入语句",[19,136402,136403],{},"然后ctrl+f 输入body",[19,136405,77419],{},[1738,136407],{"style":126601,"src":136408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,136410,77442],{},[1738,136412],{"style":126601,"src":136413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,136415,136416],{},"③打开了网页上传压缩的代码",[1738,136418],{"style":126601,"src":136419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,136421,136422],{},"④从body前可以查看这个网页的初始化代码",[19,136424,136425],{},[23,136426,136427],{},"Unicode编码字体：",[19,136429,136430],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,136432,83400],{},[19,136434,136435],{},"黑体 \\9ED1\\4F53",[19,136437,136438],{},"宋体 \\5B8B\\4F53",[19,136440,136441],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[5403,136443,136444],{},"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":316,"searchDepth":317,"depth":317,"links":136446},[136447,136448,136455,136459,136463],{"id":135244,"depth":317,"text":135245},{"id":135366,"depth":317,"text":135367,"children":136449},[136450,136451,136452,136453,136454],{"id":135370,"depth":320,"text":135371},{"id":135523,"depth":320,"text":135524},{"id":135642,"depth":320,"text":135643},{"id":135784,"depth":320,"text":135785},{"id":135842,"depth":320,"text":135843},{"id":135903,"depth":317,"text":135904,"children":136456},[136457,136458],{"id":135926,"depth":320,"text":135927},{"id":136158,"depth":320,"text":136159},{"id":136287,"depth":317,"text":136288,"children":136460},[136461,136462],{"id":136291,"depth":320,"text":136292},{"id":136330,"depth":320,"text":136331},{"id":136381,"depth":317,"text":136382},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135236,"description":23654},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136470,"title":136471,"body":136472,"description":23654,"extension":326,"meta":138158,"navigation":328,"path":138159,"seo":138160,"stem":138161,"__hash__":138162},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136473,"toc":138147},[136474,136477,136481,136485,136488,136495,136498,136501,136539,136542,136544,136558,136562,136571,136575,136580,136583,136586,136589,136624,136629,136632,136662,136665,136670,136673,136676,136706,136709,136763,136766,136770,136775,136787,136790,136794,136824,136827,136832,136835,136865,136868,136872,136889,136893,136897,136900,136933,136936,136940,136943,136946,136949,136952,136955,137066,137069,137072,137075,137177,137180,137184,137188,137192,137195,137235,137238,137240,137256,137260,137263,137268,137349,137352,137355,137481,137486,137489,137497,137500,137505,137590,137593,137597,137600,137603,137607,137627,137632,137716,137719,137724,137727,137730,137808,137811,137814,137817,137820,137823,137828,137831,137834,137906,137909,137914,137917,138014,138017,138023,138026,138029,138032,138035,138038,138041,138044,138047,138051,138056,138059,138092,138097,138100,138141,138144],[10,136475,136471],{"id":136476},"_14-html5与css3新特性",[343,136478,136480],{"id":136479},"_141-html5的新特性","14.1 HTML5的新特性",[14,136482,136484],{"id":136483},"_1411-基本标签","14.1.1 基本标签",[19,136486,136487],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,136489,136490,136491,136494],{},"这些新特性都有兼容性问题，基本是 ",[23,136492,136493],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,136496,136497],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,136499,136500],{},"现在使用的是新特性：",[67,136502,136503,136509,136515,136521,136527,136533],{},[41,136504,136505,136508],{},[395,136506,136507],{},"\u003Cheader>"," 头部标签",[41,136510,136511,136514],{},[395,136512,136513],{},"\u003Cnav>"," 导航标签",[41,136516,136517,136520],{},[395,136518,136519],{},"\u003Carticle>"," 内容标签",[41,136522,136523,136526],{},[395,136524,136525],{},"\u003Csection>"," 定义文档某个区域",[41,136528,136529,136532],{},[395,136530,136531],{},"\u003Caside>"," 侧边栏标签",[41,136534,136535,136538],{},[395,136536,136537],{},"\u003Cfooter>"," 尾部标签",[1738,136540],{"style":126601,"src":136541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,136543,438],{},[67,136545,136546,136549,136552,136555],{},[41,136547,136548],{},"这种语义化标准主要是针对搜索引擎的",[41,136550,136551],{},"这些标签页面中可以经常使用",[41,136553,136554],{},"在IE9中，需要把这些元素转换为块级元素",[41,136556,136557],{},"移动端更喜欢使用这些标签",[14,136559,136561],{"id":136560},"_1412-多媒体标签","14.1.2 多媒体标签",[19,136563,136564,136565,136567,136568,136570],{},"音频 ",[23,136566,28367],{}," 和视频 ",[23,136569,28376],{}," 两个标签",[22275,136572,136574],{"id":136573},"_14121-视频标签-video","14.1.2.1 视频标签- video",[38,136576,136577],{},[41,136578,136579],{},"支持格式：",[1738,136581],{"style":126601,"src":136582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,136584,136585],{},"尽量使用MP4，兼容性好",[19,136587,136588],{},"用MP4就可以",[389,136590,136592],{"className":127492,"code":136591,"language":127494,"meta":316,"style":316},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[395,136593,136594],{"__ignoreMap":316},[398,136595,136596,136598,136600,136602,136604,136607,136609,136612,136615,136618,136620,136622],{"class":400,"line":401},[398,136597,1312],{"class":408},[398,136599,28376],{"class":51493},[398,136601,55432],{"class":2239},[398,136603,454],{"class":408},[398,136605,136606],{"class":513},"\"movie.mp4\"",[398,136608,92616],{"class":2239},[398,136610,136611],{"class":2239}," autoplay",[398,136613,136614],{"class":2239}," muted",[398,136616,136617],{"class":2239}," loop",[398,136619,55507],{"class":408},[398,136621,28376],{"class":51493},[398,136623,51500],{"class":408},[38,136625,136626],{"start":317},[41,136627,136628],{},"兼容写法",[19,136630,136631],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[389,136633,136634],{"className":127492,"code":136591,"language":127494,"meta":316,"style":316},[395,136635,136636],{"__ignoreMap":316},[398,136637,136638,136640,136642,136644,136646,136648,136650,136652,136654,136656,136658,136660],{"class":400,"line":401},[398,136639,1312],{"class":408},[398,136641,28376],{"class":51493},[398,136643,55432],{"class":2239},[398,136645,454],{"class":408},[398,136647,136606],{"class":513},[398,136649,92616],{"class":2239},[398,136651,136611],{"class":2239},[398,136653,136614],{"class":2239},[398,136655,136617],{"class":2239},[398,136657,55507],{"class":408},[398,136659,28376],{"class":51493},[398,136661,51500],{"class":408},[19,136663,136664],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[38,136666,136667],{"start":320},[41,136668,136669],{},"video常用属性",[1738,136671],{"style":126601,"src":136672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,136674,136675],{},"poster属性后面是跟的等待加载图片的地址",[389,136677,136678],{"className":127492,"code":134247,"language":127494,"meta":316,"style":316},[395,136679,136680],{"__ignoreMap":316},[398,136681,136682,136684,136686,136688,136690,136692,136694,136696,136698,136700,136702,136704],{"class":400,"line":401},[398,136683,1312],{"class":408},[398,136685,1738],{"class":51493},[398,136687,55432],{"class":2239},[398,136689,454],{"class":408},[398,136691,134262],{"class":513},[398,136693,55440],{"class":2239},[398,136695,454],{"class":408},[398,136697,134269],{"class":513},[398,136699,134272],{"class":2239},[398,136701,454],{"class":408},[398,136703,134277],{"class":513},[398,136705,51500],{"class":408},[19,136707,136708],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[389,136710,136712],{"className":126745,"code":136711,"language":126747,"meta":316,"style":316},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[395,136713,136714,136719,136725,136749,136754,136759],{"__ignoreMap":316},[398,136715,136716],{"class":400,"line":401},[398,136717,136718],{"class":467},"\u002F* 2D 位移 *\u002F\n",[398,136720,136721,136723],{"class":400,"line":317},[398,136722,51804],{"class":51493},[398,136724,15849],{"class":408},[398,136726,136727,136730,136732,136735,136737,136739,136741,136743,136745,136747],{"class":400,"line":320},[398,136728,136729],{"class":457},"  transform",[398,136731,51630],{"class":408},[398,136733,136734],{"class":457},"translate",[398,136736,409],{"class":408},[398,136738,713],{"class":457},[398,136740,51685],{"class":404},[398,136742,12712],{"class":408},[398,136744,1058],{"class":457},[398,136746,51685],{"class":404},[398,136748,2995],{"class":408},[398,136750,136751],{"class":400,"line":1470},[398,136752,136753],{"class":467},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[398,136755,136756],{"class":400,"line":1476},[398,136757,136758],{"class":467},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[398,136760,136761],{"class":400,"line":1490},[398,136762,1841],{"class":408},[19,136764,136765],{},"muted:自动静音属性",[22275,136767,136769],{"id":136768},"_14122-音频标签audio","14.1.2.2 音频标签audio",[38,136771,136772],{},[41,136773,136774],{},"基本使用",[19,136776,136777,136778,136783,136784],{},"当前 ",[23,136779,136780],{},[395,136781,136782],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[23,136785,136786],{},"mp3格式",[1738,136788],{"style":126601,"src":136789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[38,136791,136792],{"start":317},[41,136793,136628],{},[389,136795,136796],{"className":127492,"code":136591,"language":127494,"meta":316,"style":316},[395,136797,136798],{"__ignoreMap":316},[398,136799,136800,136802,136804,136806,136808,136810,136812,136814,136816,136818,136820,136822],{"class":400,"line":401},[398,136801,1312],{"class":408},[398,136803,28376],{"class":51493},[398,136805,55432],{"class":2239},[398,136807,454],{"class":408},[398,136809,136606],{"class":513},[398,136811,92616],{"class":2239},[398,136813,136611],{"class":2239},[398,136815,136614],{"class":2239},[398,136817,136617],{"class":2239},[398,136819,55507],{"class":408},[398,136821,28376],{"class":51493},[398,136823,51500],{"class":408},[19,136825,136826],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[38,136828,136829],{"start":320},[41,136830,136831],{},"常用属性",[1738,136833],{"style":126601,"src":136834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[389,136836,136837],{"className":127492,"code":136591,"language":127494,"meta":316,"style":316},[395,136838,136839],{"__ignoreMap":316},[398,136840,136841,136843,136845,136847,136849,136851,136853,136855,136857,136859,136861,136863],{"class":400,"line":401},[398,136842,1312],{"class":408},[398,136844,28376],{"class":51493},[398,136846,55432],{"class":2239},[398,136848,454],{"class":408},[398,136850,136606],{"class":513},[398,136852,92616],{"class":2239},[398,136854,136611],{"class":2239},[398,136856,136614],{"class":2239},[398,136858,136617],{"class":2239},[398,136860,55507],{"class":408},[398,136862,28376],{"class":51493},[398,136864,51500],{"class":408},[19,136866,136867],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22275,136869,136871],{"id":136870},"_14123-总结","14.1.2.3 总结",[67,136873,136874,136877,136880,136883,136886],{},[41,136875,136876],{},"音频标签和视频标签使用方式基本一致",[41,136878,136879],{},"浏览器支持情况不同",[41,136881,136882],{},"谷歌浏览器把音频和视频自动播放禁止了",[41,136884,136885],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[41,136887,136888],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[14,136890,136892],{"id":136891},"_1413-表单元素","14.1.3 表单元素",[22275,136894,136896],{"id":136895},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[1738,136898],{"style":126601,"src":136899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[389,136901,136903],{"className":127492,"code":136902,"language":127494,"meta":316,"style":316},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[395,136904,136905],{"__ignoreMap":316},[398,136906,136907,136909,136911,136913,136915,136917,136919,136921,136924,136926,136928,136931],{"class":400,"line":401},[398,136908,1312],{"class":408},[398,136910,54014],{"class":51493},[398,136912,54017],{"class":2239},[398,136914,454],{"class":408},[398,136916,62892],{"class":513},[398,136918,15197],{"class":2239},[398,136920,454],{"class":408},[398,136922,136923],{"class":513},"\"username\"",[398,136925,61213],{"class":2239},[398,136927,454],{"class":408},[398,136929,136930],{"class":513},"\"请输入用户名\"",[398,136932,51500],{"class":408},[1738,136934],{"style":126601,"src":136935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22275,136937,136939],{"id":136938},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[1738,136941],{"style":126601,"src":136942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,136944,136945],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,136947,136948],{},"快捷操作：",[1738,136950],{"style":126601,"src":136951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,136953,136954],{},"例子1：",[389,136956,136958],{"className":127492,"code":136957,"language":127494,"meta":316,"style":316},"\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",[395,136959,136960,136983,137010,137039,137058],{"__ignoreMap":316},[398,136961,136962,136964,136966,136968,136970,136973,136976,136978,136981],{"class":400,"line":401},[398,136963,1312],{"class":408},[398,136965,66818],{"class":51493},[398,136967,66821],{"class":2239},[398,136969,454],{"class":408},[398,136971,136972],{"class":513},"\"\u002Fsubmit\"",[398,136974,136975],{"class":2239}," method",[398,136977,454],{"class":408},[398,136979,136980],{"class":513},"\"post\"",[398,136982,51500],{"class":408},[398,136984,136985,136987,136989,136991,136993,136995,136997,136999,137001,137003,137005,137008],{"class":400,"line":317},[398,136986,52337],{"class":408},[398,136988,54014],{"class":51493},[398,136990,54017],{"class":2239},[398,136992,454],{"class":408},[398,136994,62892],{"class":513},[398,136996,15197],{"class":2239},[398,136998,454],{"class":408},[398,137000,136923],{"class":513},[398,137002,61213],{"class":2239},[398,137004,454],{"class":408},[398,137006,137007],{"class":513},"\"用户名\"",[398,137009,51500],{"class":408},[398,137011,137012,137014,137016,137018,137020,137023,137025,137027,137030,137032,137034,137037],{"class":400,"line":320},[398,137013,52337],{"class":408},[398,137015,54014],{"class":51493},[398,137017,54017],{"class":2239},[398,137019,454],{"class":408},[398,137021,137022],{"class":513},"\"password\"",[398,137024,15197],{"class":2239},[398,137026,454],{"class":408},[398,137028,137029],{"class":513},"\"pwd\"",[398,137031,61213],{"class":2239},[398,137033,454],{"class":408},[398,137035,137036],{"class":513},"\"密码\"",[398,137038,51500],{"class":408},[398,137040,137041,137043,137045,137047,137049,137051,137054,137056],{"class":400,"line":1470},[398,137042,52337],{"class":408},[398,137044,54080],{"class":51493},[398,137046,54017],{"class":2239},[398,137048,454],{"class":408},[398,137050,66841],{"class":513},[398,137052,137053],{"class":408},">提交\u003C\u002F",[398,137055,54080],{"class":51493},[398,137057,51500],{"class":408},[398,137059,137060,137062,137064],{"class":400,"line":1476},[398,137061,51978],{"class":408},[398,137063,66818],{"class":51493},[398,137065,51500],{"class":408},[1738,137067],{"style":126601,"src":137068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,137070,137071],{},"value是表单域的内容",[19,137073,137074],{},"例子2：",[389,137076,137077],{"className":127492,"code":136957,"language":127494,"meta":316,"style":316},[395,137078,137079,137099,137125,137151,137169],{"__ignoreMap":316},[398,137080,137081,137083,137085,137087,137089,137091,137093,137095,137097],{"class":400,"line":401},[398,137082,1312],{"class":408},[398,137084,66818],{"class":51493},[398,137086,66821],{"class":2239},[398,137088,454],{"class":408},[398,137090,136972],{"class":513},[398,137092,136975],{"class":2239},[398,137094,454],{"class":408},[398,137096,136980],{"class":513},[398,137098,51500],{"class":408},[398,137100,137101,137103,137105,137107,137109,137111,137113,137115,137117,137119,137121,137123],{"class":400,"line":317},[398,137102,52337],{"class":408},[398,137104,54014],{"class":51493},[398,137106,54017],{"class":2239},[398,137108,454],{"class":408},[398,137110,62892],{"class":513},[398,137112,15197],{"class":2239},[398,137114,454],{"class":408},[398,137116,136923],{"class":513},[398,137118,61213],{"class":2239},[398,137120,454],{"class":408},[398,137122,137007],{"class":513},[398,137124,51500],{"class":408},[398,137126,137127,137129,137131,137133,137135,137137,137139,137141,137143,137145,137147,137149],{"class":400,"line":320},[398,137128,52337],{"class":408},[398,137130,54014],{"class":51493},[398,137132,54017],{"class":2239},[398,137134,454],{"class":408},[398,137136,137022],{"class":513},[398,137138,15197],{"class":2239},[398,137140,454],{"class":408},[398,137142,137029],{"class":513},[398,137144,61213],{"class":2239},[398,137146,454],{"class":408},[398,137148,137036],{"class":513},[398,137150,51500],{"class":408},[398,137152,137153,137155,137157,137159,137161,137163,137165,137167],{"class":400,"line":1470},[398,137154,52337],{"class":408},[398,137156,54080],{"class":51493},[398,137158,54017],{"class":2239},[398,137160,454],{"class":408},[398,137162,66841],{"class":513},[398,137164,137053],{"class":408},[398,137166,54080],{"class":51493},[398,137168,51500],{"class":408},[398,137170,137171,137173,137175],{"class":400,"line":1476},[398,137172,51978],{"class":408},[398,137174,66818],{"class":51493},[398,137176,51500],{"class":408},[1738,137178],{"style":126601,"src":137179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[343,137181,137183],{"id":137182},"_142-css新特性","14.2 CSS新特性",[14,137185,137187],{"id":137186},"_1421-新增选择器","14.2.1 新增选择器",[22275,137189,137191],{"id":137190},"_14211-属性选择器","14.2.1.1 属性选择器",[1738,137193],{"style":126601,"src":137194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[389,137196,137198],{"className":126745,"code":137197,"language":126747,"meta":316,"style":316},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[395,137199,137200,137215,137231],{"__ignoreMap":316},[398,137201,137202,137204,137206,137208,137210,137212],{"class":400,"line":401},[398,137203,54014],{"class":51493},[398,137205,1292],{"class":408},[398,137207,103300],{"class":2239},[398,137209,454],{"class":404},[398,137211,62892],{"class":513},[398,137213,137214],{"class":408},"] {\n",[398,137216,137217,137219,137221,137223,137225,137227,137229],{"class":400,"line":317},[398,137218,71089],{"class":457},[398,137220,51630],{"class":408},[398,137222,619],{"class":457},[398,137224,51685],{"class":404},[398,137226,51714],{"class":457},[398,137228,130325],{"class":457},[398,137230,1566],{"class":408},[398,137232,137233],{"class":400,"line":320},[398,137234,1841],{"class":408},[1738,137236],{"style":126601,"src":137237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,137239,438],{},[67,137241,137242,137245,137248,137251],{},[41,137243,137244],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[41,137246,137247],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[41,137249,137250],{},"属性选择器也可以选择出来自定义的属性",[41,137252,137253,137255],{},[23,137254,9302],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22275,137257,137259],{"id":137258},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[1738,137261],{"style":126601,"src":137262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[38,137264,137265],{},[41,137266,137267],{},"fist-child",[389,137269,137271],{"className":126745,"code":137270,"language":126747,"meta":316,"style":316},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[395,137272,137273,137278,137293,137313,137331],{"__ignoreMap":316},[398,137274,137275],{"class":400,"line":401},[398,137276,137277],{"class":467},"\u002F* 属性选择器 *\u002F\n",[398,137279,137280,137282,137284,137286,137288,137290],{"class":400,"line":317},[398,137281,54014],{"class":51493},[398,137283,1292],{"class":408},[398,137285,103300],{"class":2239},[398,137287,454],{"class":404},[398,137289,62892],{"class":513},[398,137291,137292],{"class":408},"] { }\n",[398,137294,137295,137297,137299,137301,137304,137307,137310],{"class":400,"line":320},[398,137296,54014],{"class":51493},[398,137298,1292],{"class":408},[398,137300,14971],{"class":2239},[398,137302,137303],{"class":404},"^=",[398,137305,137306],{"class":513},"\"icon\"",[398,137308,137309],{"class":408},"] { }  ",[398,137311,137312],{"class":467},"\u002F* 以 icon 开头 *\u002F\n",[398,137314,137315,137317,137319,137321,137324,137326,137328],{"class":400,"line":1470},[398,137316,54014],{"class":51493},[398,137318,1292],{"class":408},[398,137320,14971],{"class":2239},[398,137322,137323],{"class":404},"$=",[398,137325,137306],{"class":513},[398,137327,137309],{"class":408},[398,137329,137330],{"class":467},"\u002F* 以 icon 结尾 *\u002F\n",[398,137332,137333,137335,137337,137339,137342,137344,137346],{"class":400,"line":1476},[398,137334,54014],{"class":51493},[398,137336,1292],{"class":408},[398,137338,14971],{"class":2239},[398,137340,137341],{"class":404},"*=",[398,137343,137306],{"class":513},[398,137345,137309],{"class":408},[398,137347,137348],{"class":467},"\u002F* 包含 icon *\u002F\n",[19,137350,137351],{},"ul的第一个儿子文本为红色",[19,137353,137354],{},"一定要在冒号前加空格，不然就是选中所有的了",[389,137356,137358],{"className":126745,"code":137357,"language":126747,"meta":316,"style":316},".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",[395,137359,137360,137366,137376,137380,137384,137389,137402,137415,137431,137448,137465],{"__ignoreMap":316},[398,137361,137362,137364],{"class":400,"line":401},[398,137363,127036],{"class":2239},[398,137365,15849],{"class":408},[398,137367,137368,137370,137372,137374],{"class":400,"line":317},[398,137369,71098],{"class":457},[398,137371,51630],{"class":408},[398,137373,57614],{"class":457},[398,137375,1566],{"class":408},[398,137377,137378],{"class":400,"line":320},[398,137379,1841],{"class":408},[398,137381,137382],{"class":400,"line":1470},[398,137383,136206],{"class":408},[398,137385,137386],{"class":400,"line":1476},[398,137387,137388],{"class":467},"\u002F* 结构伪类选择器 *\u002F\n",[398,137390,137391,137393,137396,137399],{"class":400,"line":1490},[398,137392,41],{"class":51493},[398,137394,137395],{"class":2239},":first-child",[398,137397,137398],{"class":408}," { }           ",[398,137400,137401],{"class":467},"\u002F* 第一个 *\u002F\n",[398,137403,137404,137406,137409,137412],{"class":400,"line":1496},[398,137405,41],{"class":51493},[398,137407,137408],{"class":2239},":last-child",[398,137410,137411],{"class":408}," { }            ",[398,137413,137414],{"class":467},"\u002F* 最后一个 *\u002F\n",[398,137416,137417,137419,137421,137423,137425,137428],{"class":400,"line":1587},[398,137418,41],{"class":51493},[398,137420,129659],{"class":2239},[398,137422,409],{"class":408},[398,137424,486],{"class":457},[398,137426,137427],{"class":408},") { }          ",[398,137429,137430],{"class":467},"\u002F* 第2个 *\u002F\n",[398,137432,137433,137435,137437,137439,137442,137445],{"class":400,"line":1593},[398,137434,41],{"class":51493},[398,137436,129659],{"class":2239},[398,137438,409],{"class":408},[398,137440,137441],{"class":457},"2n",[398,137443,137444],{"class":408},") { }         ",[398,137446,137447],{"class":467},"\u002F* 偶数 *\u002F\n",[398,137449,137450,137452,137454,137456,137459,137462],{"class":400,"line":1605},[398,137451,41],{"class":51493},[398,137453,129659],{"class":2239},[398,137455,409],{"class":408},[398,137457,137458],{"class":457},"2n+1",[398,137460,137461],{"class":408},") { }       ",[398,137463,137464],{"class":467},"\u002F* 奇数 *\u002F\n",[398,137466,137467,137469,137471,137473,137476,137478],{"class":400,"line":1888},[398,137468,41],{"class":51493},[398,137470,129659],{"class":2239},[398,137472,409],{"class":408},[398,137474,137475],{"class":457},"-n+3",[398,137477,137461],{"class":408},[398,137479,137480],{"class":467},"\u002F* 前3个 *\u002F\n",[51804,137482,137485],{"className":137483},[137484],"example","\n  示例内容\n",[19,137487,137488],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[67,137490,137491],{},[41,137492,137493,137496],{},[395,137494,137495],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,137498,137499],{},"也就是说它选择的是熊大",[38,137501,137502],{"start":1490},[41,137503,137504],{},"权重",[389,137506,137508],{"className":126745,"code":137507,"language":126747,"meta":316,"style":316},"\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",[395,137509,137510,137514,137524,137534,137548,137562,137576],{"__ignoreMap":316},[398,137511,137512],{"class":400,"line":401},[398,137513,137388],{"class":467},[398,137515,137516,137518,137520,137522],{"class":400,"line":317},[398,137517,41],{"class":51493},[398,137519,137395],{"class":2239},[398,137521,137398],{"class":408},[398,137523,137401],{"class":467},[398,137525,137526,137528,137530,137532],{"class":400,"line":320},[398,137527,41],{"class":51493},[398,137529,137408],{"class":2239},[398,137531,137411],{"class":408},[398,137533,137414],{"class":467},[398,137535,137536,137538,137540,137542,137544,137546],{"class":400,"line":1470},[398,137537,41],{"class":51493},[398,137539,129659],{"class":2239},[398,137541,409],{"class":408},[398,137543,486],{"class":457},[398,137545,137427],{"class":408},[398,137547,137430],{"class":467},[398,137549,137550,137552,137554,137556,137558,137560],{"class":400,"line":1476},[398,137551,41],{"class":51493},[398,137553,129659],{"class":2239},[398,137555,409],{"class":408},[398,137557,137441],{"class":457},[398,137559,137444],{"class":408},[398,137561,137447],{"class":467},[398,137563,137564,137566,137568,137570,137572,137574],{"class":400,"line":1490},[398,137565,41],{"class":51493},[398,137567,129659],{"class":2239},[398,137569,409],{"class":408},[398,137571,137458],{"class":457},[398,137573,137461],{"class":408},[398,137575,137464],{"class":467},[398,137577,137578,137580,137582,137584,137586,137588],{"class":400,"line":1496},[398,137579,41],{"class":51493},[398,137581,129659],{"class":2239},[398,137583,409],{"class":408},[398,137585,137475],{"class":457},[398,137587,137461],{"class":408},[398,137589,137480],{"class":467},[19,137591,137592],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22275,137594,137596],{"id":137595},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,137598,137599],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[1738,137601],{"style":126601,"src":137602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[38,137604,137605],{},[41,137606,438],{},[67,137608,137609,137612,137615,137618,137621,137624],{},[41,137610,137611],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[41,137613,137614],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[41,137616,137617],{},"语法： element::before {}",[41,137619,137620],{},"before 和 after 必须有 content 属性",[41,137622,137623],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[41,137625,137626],{},"伪元素选择器和标签选择器一样，权重为 1",[38,137628,137629],{"start":317},[41,137630,137631],{},"实例",[389,137633,137634],{"className":126745,"code":137507,"language":126747,"meta":316,"style":316},[395,137635,137636,137640,137650,137660,137674,137688,137702],{"__ignoreMap":316},[398,137637,137638],{"class":400,"line":401},[398,137639,137388],{"class":467},[398,137641,137642,137644,137646,137648],{"class":400,"line":317},[398,137643,41],{"class":51493},[398,137645,137395],{"class":2239},[398,137647,137398],{"class":408},[398,137649,137401],{"class":467},[398,137651,137652,137654,137656,137658],{"class":400,"line":320},[398,137653,41],{"class":51493},[398,137655,137408],{"class":2239},[398,137657,137411],{"class":408},[398,137659,137414],{"class":467},[398,137661,137662,137664,137666,137668,137670,137672],{"class":400,"line":1470},[398,137663,41],{"class":51493},[398,137665,129659],{"class":2239},[398,137667,409],{"class":408},[398,137669,486],{"class":457},[398,137671,137427],{"class":408},[398,137673,137430],{"class":467},[398,137675,137676,137678,137680,137682,137684,137686],{"class":400,"line":1476},[398,137677,41],{"class":51493},[398,137679,129659],{"class":2239},[398,137681,409],{"class":408},[398,137683,137441],{"class":457},[398,137685,137444],{"class":408},[398,137687,137447],{"class":467},[398,137689,137690,137692,137694,137696,137698,137700],{"class":400,"line":1490},[398,137691,41],{"class":51493},[398,137693,129659],{"class":2239},[398,137695,409],{"class":408},[398,137697,137458],{"class":457},[398,137699,137461],{"class":408},[398,137701,137464],{"class":467},[398,137703,137704,137706,137708,137710,137712,137714],{"class":400,"line":1496},[398,137705,41],{"class":51493},[398,137707,129659],{"class":2239},[398,137709,409],{"class":408},[398,137711,137475],{"class":457},[398,137713,137461],{"class":408},[398,137715,137480],{"class":467},[1738,137717],{"style":126601,"src":137718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[38,137720,137721],{"start":320},[41,137722,137723],{},"使用场景1",[1738,137725],{"style":126601,"src":137726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,137728,137729],{},"不需要再加盒子来整红色那部分了",[389,137731,137733],{"className":126745,"code":137732,"language":126747,"meta":316,"style":316},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[395,137734,137735,137740,137749,137760,137770,137774,137783,137794,137804],{"__ignoreMap":316},[398,137736,137737],{"class":400,"line":401},[398,137738,137739],{"class":467},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[398,137741,137742,137744,137747],{"class":400,"line":317},[398,137743,51804],{"class":51493},[398,137745,137746],{"class":2239},"::before",[398,137748,15849],{"class":408},[398,137750,137751,137754,137756,137758],{"class":400,"line":320},[398,137752,137753],{"class":457},"  content",[398,137755,51630],{"class":408},[398,137757,7929],{"class":513},[398,137759,1566],{"class":408},[398,137761,137762,137764,137766,137768],{"class":400,"line":1470},[398,137763,128361],{"class":457},[398,137765,51630],{"class":408},[398,137767,61062],{"class":457},[398,137769,1566],{"class":408},[398,137771,137772],{"class":400,"line":1476},[398,137773,1841],{"class":408},[398,137775,137776,137778,137781],{"class":400,"line":1490},[398,137777,51804],{"class":51493},[398,137779,137780],{"class":2239},"::after",[398,137782,15849],{"class":408},[398,137784,137785,137787,137789,137792],{"class":400,"line":1496},[398,137786,137753],{"class":457},[398,137788,51630],{"class":408},[398,137790,137791],{"class":513},"\"→\"",[398,137793,1566],{"class":408},[398,137795,137796,137798,137800,137802],{"class":400,"line":1587},[398,137797,71098],{"class":457},[398,137799,51630],{"class":408},[398,137801,62263],{"class":457},[398,137803,1566],{"class":408},[398,137805,137806],{"class":400,"line":1593},[398,137807,1841],{"class":408},[1738,137809],{"style":126601,"src":137810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,137812,137813],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[1738,137815],{"style":126601,"src":137816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,137818,137819],{},"但是在引用时需要先转义一下",[19,137821,137822],{},"content='\\e930'",[38,137824,137825],{"start":1470},[41,137826,137827],{},"使用场景2",[19,137829,137830],{},"仿土豆效果",[19,137832,137833],{},"通过使用伪元素选择器可以减少body中盒子的数量",[389,137835,137836],{"className":126745,"code":137732,"language":126747,"meta":316,"style":316},[395,137837,137838,137842,137850,137860,137870,137874,137882,137892,137902],{"__ignoreMap":316},[398,137839,137840],{"class":400,"line":401},[398,137841,137739],{"class":467},[398,137843,137844,137846,137848],{"class":400,"line":317},[398,137845,51804],{"class":51493},[398,137847,137746],{"class":2239},[398,137849,15849],{"class":408},[398,137851,137852,137854,137856,137858],{"class":400,"line":320},[398,137853,137753],{"class":457},[398,137855,51630],{"class":408},[398,137857,7929],{"class":513},[398,137859,1566],{"class":408},[398,137861,137862,137864,137866,137868],{"class":400,"line":1470},[398,137863,128361],{"class":457},[398,137865,51630],{"class":408},[398,137867,61062],{"class":457},[398,137869,1566],{"class":408},[398,137871,137872],{"class":400,"line":1476},[398,137873,1841],{"class":408},[398,137875,137876,137878,137880],{"class":400,"line":1490},[398,137877,51804],{"class":51493},[398,137879,137780],{"class":2239},[398,137881,15849],{"class":408},[398,137883,137884,137886,137888,137890],{"class":400,"line":1496},[398,137885,137753],{"class":457},[398,137887,51630],{"class":408},[398,137889,137791],{"class":513},[398,137891,1566],{"class":408},[398,137893,137894,137896,137898,137900],{"class":400,"line":1587},[398,137895,71098],{"class":457},[398,137897,51630],{"class":408},[398,137899,62263],{"class":457},[398,137901,1566],{"class":408},[398,137903,137904],{"class":400,"line":1593},[398,137905,1841],{"class":408},[1738,137907],{"style":126601,"src":137908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[38,137910,137911],{"start":1476},[41,137912,137913],{},"使用场景3",[19,137915,137916],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[389,137918,137920],{"className":126745,"code":137919,"language":126747,"meta":316,"style":316},".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",[395,137921,137922,137928,137938,137942,137946,137950,137958,137968,137978,137982,137990,138000,138010],{"__ignoreMap":316},[398,137923,137924,137926],{"class":400,"line":401},[398,137925,130593],{"class":2239},[398,137927,15849],{"class":408},[398,137929,137930,137932,137934,137936],{"class":400,"line":317},[398,137931,131225],{"class":457},[398,137933,51630],{"class":408},[398,137935,95],{"class":457},[398,137937,1566],{"class":408},[398,137939,137940],{"class":400,"line":320},[398,137941,1841],{"class":408},[398,137943,137944],{"class":400,"line":1470},[398,137945,136206],{"class":408},[398,137947,137948],{"class":400,"line":1476},[398,137949,137739],{"class":467},[398,137951,137952,137954,137956],{"class":400,"line":1490},[398,137953,51804],{"class":51493},[398,137955,137746],{"class":2239},[398,137957,15849],{"class":408},[398,137959,137960,137962,137964,137966],{"class":400,"line":1496},[398,137961,137753],{"class":457},[398,137963,51630],{"class":408},[398,137965,7929],{"class":513},[398,137967,1566],{"class":408},[398,137969,137970,137972,137974,137976],{"class":400,"line":1587},[398,137971,128361],{"class":457},[398,137973,51630],{"class":408},[398,137975,61062],{"class":457},[398,137977,1566],{"class":408},[398,137979,137980],{"class":400,"line":1593},[398,137981,1841],{"class":408},[398,137983,137984,137986,137988],{"class":400,"line":1605},[398,137985,51804],{"class":51493},[398,137987,137780],{"class":2239},[398,137989,15849],{"class":408},[398,137991,137992,137994,137996,137998],{"class":400,"line":1888},[398,137993,137753],{"class":457},[398,137995,51630],{"class":408},[398,137997,137791],{"class":513},[398,137999,1566],{"class":408},[398,138001,138002,138004,138006,138008],{"class":400,"line":1893},[398,138003,71098],{"class":457},[398,138005,51630],{"class":408},[398,138007,62263],{"class":457},[398,138009,1566],{"class":408},[398,138011,138012],{"class":400,"line":1899},[398,138013,1841],{"class":408},[19,138015,138016],{},"div {\nmargin: 0 auto;\n}",[389,138018,138021],{"className":138019,"code":138020,"language":5464},[5462],"\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",[395,138022,138020],{"__ignoreMap":316},[19,138024,138025],{},"如果想让多个元素都发生变化",[19,138027,138028],{},"不能如下操作：",[19,138030,138031],{},"transition: width 2s ease 0.5s;",[19,138033,138034],{},"transition: height 2s ease 0.5s;不对！！！",[19,138036,138037],{},"上方会样式冲突，导致不显示任何过渡效果",[19,138039,138040],{},"使用如下：加逗号隔开",[19,138042,138043],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,138045,138046],{},"transition all 2s ease;",[14,138048,138050],{"id":138049},"_1426-过渡练习","14.2.6 过渡练习",[38,138052,138053],{},[41,138054,138055],{},"进度条",[1738,138057],{"style":126601,"src":138058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[389,138060,138062],{"className":126745,"code":138061,"language":126747,"meta":316,"style":316},"div {\n  transition: all 0.3s ease;\n}\n",[395,138063,138064,138070,138088],{"__ignoreMap":316},[398,138065,138066,138068],{"class":400,"line":401},[398,138067,51804],{"class":51493},[398,138069,15849],{"class":408},[398,138071,138072,138075,138077,138079,138082,138084,138086],{"class":400,"line":317},[398,138073,138074],{"class":457},"  transition",[398,138076,51630],{"class":408},[398,138078,28314],{"class":457},[398,138080,138081],{"class":457}," 0.3",[398,138083,1097],{"class":404},[398,138085,78873],{"class":457},[398,138087,1566],{"class":408},[398,138089,138090],{"class":400,"line":320},[398,138091,1841],{"class":408},[38,138093,138094],{"start":317},[41,138095,138096],{},"小米logo",[19,138098,138099],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[389,138101,138103],{"className":126745,"code":138102,"language":126747,"meta":316,"style":316},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[395,138104,138105,138110,138116,138132,138137],{"__ignoreMap":316},[398,138106,138107],{"class":400,"line":401},[398,138108,138109],{"class":467},"\u002F* CSS3 过渡 *\u002F\n",[398,138111,138112,138114],{"class":400,"line":317},[398,138113,51804],{"class":51493},[398,138115,15849],{"class":408},[398,138117,138118,138120,138122,138124,138126,138128,138130],{"class":400,"line":320},[398,138119,138074],{"class":457},[398,138121,51630],{"class":408},[398,138123,28314],{"class":457},[398,138125,138081],{"class":457},[398,138127,1097],{"class":404},[398,138129,78873],{"class":457},[398,138131,1566],{"class":408},[398,138133,138134],{"class":400,"line":1470},[398,138135,138136],{"class":467},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[398,138138,138139],{"class":400,"line":1476},[398,138140,1841],{"class":408},[19,138142,138143],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[5403,138145,138146],{},"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":316,"searchDepth":317,"depth":317,"links":138148},[138149,138154],{"id":136479,"depth":317,"text":136480,"children":138150},[138151,138152,138153],{"id":136483,"depth":320,"text":136484},{"id":136560,"depth":320,"text":136561},{"id":136891,"depth":320,"text":136892},{"id":137182,"depth":317,"text":137183,"children":138155},[138156,138157],{"id":137186,"depth":320,"text":137187},{"id":138049,"depth":320,"text":138050},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136471,"description":23654},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138164,"title":138165,"body":138166,"description":23654,"extension":326,"meta":139910,"navigation":328,"path":139911,"seo":139912,"stem":139913,"__hash__":139914},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138167,"toc":139891},[138168,138171,138175,138178,138184,138190,138194,138196,138199,138202,138205,138208,138211,138214,138217,138221,138225,138228,138231,138234,138238,138241,138244,138249,138252,138255,138258,138262,138265,138274,138277,138280,138284,138287,138290,138295,138302,138316,138324,138331,138336,138339,138342,138345,138352,138356,138362,138368,138371,138374,138379,138385,138387,138395,138400,138403,138409,138411,138416,138421,138424,138426,138431,138434,138439,138444,138478,138482,138486,138489,138493,138496,138582,138585,138622,138625,138661,138665,138670,138683,138737,138739,138767,138769,138797,138803,138817,138819,138863,138865,138909,138912,138919,138930,138932,138959,138961,138987,138994,139010,139012,139106,139108,139202,139209,139212,139217,139223,139297,139300,139302,139338,139340,139376,139379,139386,139405,139408,139411,139413,139438,139440,139464,139467,139470,139500,139504,139507,139570,139572,139638,139640,139704,139707,139739,139741,139767,139769,139795,139798,139829,139831,139857,139859,139885,139888],[10,138169,138165],{"id":138170},"_15-品优购项目上篇-搭建与公共模块",[343,138172,138174],{"id":138173},"_151-项目规划","15.1 项目规划",[1738,138176],{"style":126601,"src":138177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,138179,138180,138183],{},[23,138181,138182],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,138185,138186,138189],{},[23,138187,138188],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[343,138191,138193],{"id":138192},"_152-项目介绍","15.2 项目介绍",[19,138195,138182],{},[1738,138197],{"style":126601,"src":138198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,138200,138201],{},"主页：",[1738,138203],{"style":126601,"src":138204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,138206,138207],{},"列表页：",[1738,138209],{"style":126601,"src":138210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,138212,138213],{},"注册页：",[1738,138215],{"style":126601,"src":138216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[343,138218,138220],{"id":138219},"_153-项目搭建工作","15.3 项目搭建工作",[14,138222,138224],{"id":138223},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[1738,138226],{"style":126601,"src":138227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,138229,138230],{},"经常更换的图片要放到upload文件夹中",[19,138232,138233],{},"不经常换的放到images文件夹中",[14,138235,138237],{"id":138236},"_1532-创建文件如下","15.3.2 创建文件如下",[1738,138239],{"style":126601,"src":138240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[1738,138242],{"style":126601,"src":138243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,138245,138246],{},[23,138247,138248],{},"初始化样式：",[19,138250,138251],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,138253,138254],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,138256,138257],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[14,138259,138261],{"id":138260},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,138263,138264],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,138266,138267,138268,138273],{},"这里最典型的应用就是 ",[23,138269,138270],{},[395,138271,138272],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[1738,138275],{"style":126601,"src":138276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,138278,138279],{},"通过link方法来引入",[14,138281,138283],{"id":138282},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[1738,138285],{"style":126601,"src":138286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,138288,138289],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[38,138291,138292],{},[41,138293,138294],{},"制作favicon图标",[19,138296,138297,138298,138301],{},"①把品优购图标切成 ",[395,138299,138300],{},"png"," 图片",[19,138303,138304,138305,138307,138308,138311,138312],{},"②把 ",[395,138306,138300],{}," 图片转换为 ",[395,138309,138310],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[640,138313,138314],{"href":138314,"rel":138315},"http:\u002F\u002Fwww.bitbug.net\u002F",[24142],[38,138317,138318,138321],{"start":317},[41,138319,138320],{},"favicon图标放到网站根目录下",[41,138322,138323],{},"HTML页面引入favicon",[19,138325,138326,138327,138330],{},"在html 页面里面的 ",[395,138328,138329],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,138332,138333],{},[395,138334,138335],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,138337,138338],{},"复制这行代码或者在生成这个的网站进行复制",[1738,138340],{"style":126601,"src":138341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,138343,138344],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,138346,138347,138348],{},"例如:",[640,138349,138350],{"href":138350,"rel":138351},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[24142],[14,138353,138355],{"id":138354},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,138357,138358,138361],{},[23,138359,138360],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,138363,138364,138367],{},[23,138365,138366],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,138369,138370],{},"页面必须有三个标签用来符合 SEO 优化",[1738,138372],{"style":126601,"src":138373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[38,138375,138376],{},[41,138377,138378],{},"title网站标题",[19,138380,138381,138384],{},[23,138382,138383],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,138386,68983],{},[67,138388,138389,138392],{},[41,138390,138391],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[41,138393,138394],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[38,138396,138397],{"start":317},[41,138398,138399],{},"description网站描述",[19,138401,138402],{},"简要说明我们网站主要是做什么的",[19,138404,138405,138408],{},[23,138406,138407],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,138410,68983],{},[19,138412,138413],{},[395,138414,138415],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[38,138417,138418],{"start":320},[41,138419,138420],{},"keywords关键词",[19,138422,138423],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,138425,68983],{},[19,138427,138428],{},[395,138429,138430],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,138432,138433],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,138435,138436],{},[23,138437,138438],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[38,138440,138441],{"start":1470},[41,138442,138443],{},"代码总结",[389,138445,138446],{"className":127492,"code":130849,"language":127494,"meta":316,"style":316},[395,138447,138448,138452,138466,138470],{"__ignoreMap":316},[398,138449,138450],{"class":400,"line":401},[398,138451,130856],{"class":467},[398,138453,138454,138456,138458,138460,138462,138464],{"class":400,"line":317},[398,138455,1312],{"class":408},[398,138457,51804],{"class":51493},[398,138459,53679],{"class":2239},[398,138461,454],{"class":408},[398,138463,130869],{"class":513},[398,138465,51500],{"class":408},[398,138467,138468],{"class":400,"line":320},[398,138469,130876],{"class":408},[398,138471,138472,138474,138476],{"class":400,"line":1470},[398,138473,51978],{"class":408},[398,138475,51804],{"class":51493},[398,138477,51500],{"class":408},[343,138479,138481],{"id":138480},"_154-项目公共部分制作","15.4 项目公共部分制作",[14,138483,138485],{"id":138484},"_1541-常用模块类命名","15.4.1 常用模块类命名",[1738,138487],{"style":126601,"src":138488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[14,138490,138492],{"id":138491},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,138494,138495],{},"布局思路：",[67,138497,138498,138501,138504,138526,138559],{},[41,138499,138500],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[41,138502,138503],{},"里面包含版心的盒子",[41,138505,138506,138507],{},"版心盒子里面包含 1 号左侧盒子左浮动",[67,138508,138509,138517,138523],{},[41,138510,138511,138512,21777,138514,138516],{},"1 号盒子 里面包含一个",[395,138513,67],{},[395,138515,67],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[41,138518,138519,138520,138522],{},"里面的内容是水平排列，所以需要给",[395,138521,41],{},"设置浮动",[41,138524,138525],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[41,138527,138528,138529],{},"版心盒子里面包含 2 号右侧盒子右浮动",[67,138530,138531,138545,138550],{},[41,138532,138533,138534,21777,138536,138538,138539,138541,138542,138544],{},"2 号盒子 里面包含一个",[395,138535,67],{},[395,138537,67],{},"包裹",[395,138540,41],{},"，中间的",[395,138543,1323],{},"可以用样式去设置，也可以用字符 |",[41,138546,138547,138548,138522],{},"里面内容水平排列，给",[395,138549,41],{},[41,138551,138552,138553,138555,138556,138558],{},"找到里面所有偶数的 ",[395,138554,41],{}," 设置样式（偶数的 ",[395,138557,41],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[41,138560,138561,138562],{},"需要用到字体图标",[67,138563,138564,138570,138573,138576,138579],{},[41,138565,138566,138567],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[395,138568,138569],{},"arrow-icon",[41,138571,138572],{},"先要引入字体图片的资源",[41,138574,138575],{},"在样式里面利用 font-face 来进行声明",[41,138577,138578],{},"在伪元素的 content属性设置 图标的编码",[41,138580,138581],{},"给伪元素设置font-family属性",[19,138583,138584],{},"结构实例代码：",[389,138586,138588],{"className":126745,"code":138587,"language":126747,"meta":316,"style":316},"div::before {\n  content: \"\";\n  display: block;\n}\n",[395,138589,138590,138598,138608,138618],{"__ignoreMap":316},[398,138591,138592,138594,138596],{"class":400,"line":401},[398,138593,51804],{"class":51493},[398,138595,137746],{"class":2239},[398,138597,15849],{"class":408},[398,138599,138600,138602,138604,138606],{"class":400,"line":317},[398,138601,137753],{"class":457},[398,138603,51630],{"class":408},[398,138605,7929],{"class":513},[398,138607,1566],{"class":408},[398,138609,138610,138612,138614,138616],{"class":400,"line":320},[398,138611,128361],{"class":457},[398,138613,51630],{"class":408},[398,138615,61062],{"class":457},[398,138617,1566],{"class":408},[398,138619,138620],{"class":400,"line":1470},[398,138621,1841],{"class":408},[19,138623,138624],{},"样式实例代码：",[389,138626,138627],{"className":126745,"code":138587,"language":126747,"meta":316,"style":316},[395,138628,138629,138637,138647,138657],{"__ignoreMap":316},[398,138630,138631,138633,138635],{"class":400,"line":401},[398,138632,51804],{"class":51493},[398,138634,137746],{"class":2239},[398,138636,15849],{"class":408},[398,138638,138639,138641,138643,138645],{"class":400,"line":317},[398,138640,137753],{"class":457},[398,138642,51630],{"class":408},[398,138644,7929],{"class":513},[398,138646,1566],{"class":408},[398,138648,138649,138651,138653,138655],{"class":400,"line":320},[398,138650,128361],{"class":457},[398,138652,51630],{"class":408},[398,138654,61062],{"class":457},[398,138656,1566],{"class":408},[398,138658,138659],{"class":400,"line":1470},[398,138660,1841],{"class":408},[14,138662,138664],{"id":138663},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[67,138666,138667],{},[41,138668,138669],{},"header 盒子必须要有高度",[19,138671,138672,138673,138675,138676],{},"1 号盒子是 ",[395,138674,131757],{}," 标志定位，在正常开发过程中， ",[23,138677,138678,138679,138682],{},"logo的布局其实是有讲究的，需要进行 ",[395,138680,138681],{},"logoSEO","的优化 （★★★）",[67,138684,138685,138693,138701,138728],{},[41,138686,138687,138689,138690,138692],{},[395,138688,131757],{}," 里面首先放一个 ",[395,138691,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[41,138694,138695,138697,138698,138700],{},[395,138696,10],{}," 里面再放一个链接，可以返回首页的，把 ",[395,138699,131757],{}," 的背景图片给链接即可",[41,138702,138703,138704],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[67,138705,138706,138721],{},[41,138707,138708,138709,138712,138713,138716,138717,138720],{},"方法1：",[395,138710,138711],{},"text-indent"," 移到盒子外面（",[395,138714,138715],{},"text-indent: -9999px",") ，然后 ",[395,138718,138719],{},"overflow:hidden"," ，淘宝的做法",[41,138722,138723,138724,138727],{},"方法2：直接给 ",[395,138725,138726],{},"font-size: 0;"," 就看不到文字了，京东的做法",[41,138729,138730,138731,138733,138734,138736],{},"最后给链接一个 ",[395,138732,51600],{}," 属性，这样鼠标放到 ",[395,138735,131757],{}," 上就可以看到提示文字了",[19,138738,138584],{},[389,138740,138741],{"className":127492,"code":131978,"language":127494,"meta":316,"style":316},[395,138742,138743],{"__ignoreMap":316},[398,138744,138745,138747,138749,138751,138753,138755,138757,138759,138761,138763,138765],{"class":400,"line":401},[398,138746,1312],{"class":408},[398,138748,640],{"class":51493},[398,138750,61250],{"class":2239},[398,138752,454],{"class":408},[398,138754,131993],{"class":513},[398,138756,131996],{"class":2239},[398,138758,454],{"class":408},[398,138760,132001],{"class":513},[398,138762,132004],{"class":408},[398,138764,640],{"class":51493},[398,138766,51500],{"class":408},[19,138768,138624],{},[389,138770,138771],{"className":127492,"code":131978,"language":127494,"meta":316,"style":316},[395,138772,138773],{"__ignoreMap":316},[398,138774,138775,138777,138779,138781,138783,138785,138787,138789,138791,138793,138795],{"class":400,"line":401},[398,138776,1312],{"class":408},[398,138778,640],{"class":51493},[398,138780,61250],{"class":2239},[398,138782,454],{"class":408},[398,138784,131993],{"class":513},[398,138786,131996],{"class":2239},[398,138788,454],{"class":408},[398,138790,132001],{"class":513},[398,138792,132004],{"class":408},[398,138794,640],{"class":51493},[398,138796,51500],{"class":408},[19,138798,138799,138800,138802],{},"2 号盒子是 ",[395,138801,131770],{}," 搜索模块定位",[67,138804,138805,138808,138811,138814],{},[41,138806,138807],{},"search盒子利用定位的方式放在对应的位置",[41,138809,138810],{},"search盒子设置绝对定位，header盒子设置相对定位",[41,138812,138813],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[41,138815,138816],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,138818,138584],{},[389,138820,138821],{"className":126745,"code":132065,"language":126747,"meta":316,"style":316},[395,138822,138823,138845,138849,138859],{"__ignoreMap":316},[398,138824,138825,138827,138829,138831,138833,138835,138837,138839,138841,138843],{"class":400,"line":401},[398,138826,51804],{"class":51493},[398,138828,12712],{"class":408},[398,138830,19],{"class":51493},[398,138832,12712],{"class":408},[398,138834,10],{"class":51493},[398,138836,12712],{"class":408},[398,138838,67],{"class":51493},[398,138840,12712],{"class":408},[398,138842,41],{"class":51493},[398,138844,15849],{"class":408},[398,138846,138847],{"class":400,"line":317},[398,138848,132094],{"class":467},[398,138850,138851,138853,138855,138857],{"class":400,"line":320},[398,138852,128361],{"class":457},[398,138854,51630],{"class":408},[398,138856,61062],{"class":457},[398,138858,1566],{"class":408},[398,138860,138861],{"class":400,"line":1470},[398,138862,1841],{"class":408},[19,138864,138624],{},[389,138866,138867],{"className":126745,"code":132065,"language":126747,"meta":316,"style":316},[395,138868,138869,138891,138895,138905],{"__ignoreMap":316},[398,138870,138871,138873,138875,138877,138879,138881,138883,138885,138887,138889],{"class":400,"line":401},[398,138872,51804],{"class":51493},[398,138874,12712],{"class":408},[398,138876,19],{"class":51493},[398,138878,12712],{"class":408},[398,138880,10],{"class":51493},[398,138882,12712],{"class":408},[398,138884,67],{"class":51493},[398,138886,12712],{"class":408},[398,138888,41],{"class":51493},[398,138890,15849],{"class":408},[398,138892,138893],{"class":400,"line":317},[398,138894,132094],{"class":467},[398,138896,138897,138899,138901,138903],{"class":400,"line":320},[398,138898,128361],{"class":457},[398,138900,51630],{"class":408},[398,138902,61062],{"class":457},[398,138904,1566],{"class":408},[398,138906,138907],{"class":400,"line":1470},[398,138908,1841],{"class":408},[19,138910,138911],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,138913,138914,138915,138918],{},"3 号盒子是 ",[395,138916,138917],{},"hotwords"," 热词模块定位",[67,138920,138921,138924,138927],{},[41,138922,138923],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[41,138925,138926],{},"给里面所有的a标签设置 左右10px的外边距",[41,138928,138929],{},"给第一个a标签设置文字变红色（#c81623）",[19,138931,138584],{},[389,138933,138935],{"className":126745,"code":138934,"language":126747,"meta":316,"style":316},"div {\n  margin: 0 auto;\n}\n",[395,138936,138937,138943,138955],{"__ignoreMap":316},[398,138938,138939,138941],{"class":400,"line":401},[398,138940,51804],{"class":51493},[398,138942,15849],{"class":408},[398,138944,138945,138947,138949,138951,138953],{"class":400,"line":317},[398,138946,70663],{"class":457},[398,138948,51630],{"class":408},[398,138950,593],{"class":457},[398,138952,51749],{"class":457},[398,138954,1566],{"class":408},[398,138956,138957],{"class":400,"line":320},[398,138958,1841],{"class":408},[19,138960,138624],{},[389,138962,138963],{"className":126745,"code":138934,"language":126747,"meta":316,"style":316},[395,138964,138965,138971,138983],{"__ignoreMap":316},[398,138966,138967,138969],{"class":400,"line":401},[398,138968,51804],{"class":51493},[398,138970,15849],{"class":408},[398,138972,138973,138975,138977,138979,138981],{"class":400,"line":317},[398,138974,70663],{"class":457},[398,138976,51630],{"class":408},[398,138978,593],{"class":457},[398,138980,51749],{"class":457},[398,138982,1566],{"class":408},[398,138984,138985],{"class":400,"line":320},[398,138986,1841],{"class":408},[19,138988,138989,138990,138993],{},"4 号盒子是 ",[395,138991,138992],{},"shopcar"," 购物车模块",[67,138995,138996,139001,139004,139007],{},[41,138997,123528,138998,139000],{},[395,138999,138992],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[41,139002,139003],{},"count 统计部分用绝对定位做",[41,139005,139006],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[41,139008,139009],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,139011,138584],{},[389,139013,139014],{"className":126745,"code":132177,"language":126747,"meta":316,"style":316},[395,139015,139016,139020,139034,139038,139052,139056,139070,139074,139088,139092],{"__ignoreMap":316},[398,139017,139018],{"class":400,"line":401},[398,139019,132184],{"class":467},[398,139021,139022,139024,139026,139028,139030,139032],{"class":400,"line":317},[398,139023,132189],{"class":2239},[398,139025,80000],{"class":408},[398,139027,129105],{"class":457},[398,139029,51630],{"class":408},[398,139031,132198],{"class":457},[398,139033,129675],{"class":408},[398,139035,139036],{"class":400,"line":320},[398,139037,132205],{"class":467},[398,139039,139040,139042,139044,139046,139048,139050],{"class":400,"line":1470},[398,139041,132210],{"class":2239},[398,139043,80000],{"class":408},[398,139045,129105],{"class":457},[398,139047,51630],{"class":408},[398,139049,54957],{"class":457},[398,139051,129675],{"class":408},[398,139053,139054],{"class":400,"line":1476},[398,139055,132225],{"class":467},[398,139057,139058,139060,139062,139064,139066,139068],{"class":400,"line":1490},[398,139059,132230],{"class":2239},[398,139061,80000],{"class":408},[398,139063,129105],{"class":457},[398,139065,51630],{"class":408},[398,139067,55024],{"class":457},[398,139069,129675],{"class":408},[398,139071,139072],{"class":400,"line":1496},[398,139073,132245],{"class":467},[398,139075,139076,139078,139080,139082,139084,139086],{"class":400,"line":1587},[398,139077,132250],{"class":2239},[398,139079,80000],{"class":408},[398,139081,129105],{"class":457},[398,139083,51630],{"class":408},[398,139085,86426],{"class":457},[398,139087,129675],{"class":408},[398,139089,139090],{"class":400,"line":1593},[398,139091,132265],{"class":467},[398,139093,139094,139096,139098,139100,139102,139104],{"class":400,"line":1605},[398,139095,132270],{"class":2239},[398,139097,80000],{"class":408},[398,139099,129105],{"class":457},[398,139101,51630],{"class":408},[398,139103,132279],{"class":457},[398,139105,129675],{"class":408},[19,139107,138624],{},[389,139109,139110],{"className":126745,"code":132177,"language":126747,"meta":316,"style":316},[395,139111,139112,139116,139130,139134,139148,139152,139166,139170,139184,139188],{"__ignoreMap":316},[398,139113,139114],{"class":400,"line":401},[398,139115,132184],{"class":467},[398,139117,139118,139120,139122,139124,139126,139128],{"class":400,"line":317},[398,139119,132189],{"class":2239},[398,139121,80000],{"class":408},[398,139123,129105],{"class":457},[398,139125,51630],{"class":408},[398,139127,132198],{"class":457},[398,139129,129675],{"class":408},[398,139131,139132],{"class":400,"line":320},[398,139133,132205],{"class":467},[398,139135,139136,139138,139140,139142,139144,139146],{"class":400,"line":1470},[398,139137,132210],{"class":2239},[398,139139,80000],{"class":408},[398,139141,129105],{"class":457},[398,139143,51630],{"class":408},[398,139145,54957],{"class":457},[398,139147,129675],{"class":408},[398,139149,139150],{"class":400,"line":1476},[398,139151,132225],{"class":467},[398,139153,139154,139156,139158,139160,139162,139164],{"class":400,"line":1490},[398,139155,132230],{"class":2239},[398,139157,80000],{"class":408},[398,139159,129105],{"class":457},[398,139161,51630],{"class":408},[398,139163,55024],{"class":457},[398,139165,129675],{"class":408},[398,139167,139168],{"class":400,"line":1496},[398,139169,132245],{"class":467},[398,139171,139172,139174,139176,139178,139180,139182],{"class":400,"line":1587},[398,139173,132250],{"class":2239},[398,139175,80000],{"class":408},[398,139177,129105],{"class":457},[398,139179,51630],{"class":408},[398,139181,86426],{"class":457},[398,139183,129675],{"class":408},[398,139185,139186],{"class":400,"line":1593},[398,139187,132265],{"class":467},[398,139189,139190,139192,139194,139196,139198,139200],{"class":400,"line":1605},[398,139191,132270],{"class":2239},[398,139193,80000],{"class":408},[398,139195,129105],{"class":457},[398,139197,51630],{"class":408},[398,139199,132279],{"class":457},[398,139201,129675],{"class":408},[14,139203,139205,139206,139208],{"id":139204},"_1544-nav导航模块制作","15.4.4 ",[395,139207,53906],{},"导航模块制作",[1738,139210],{"style":126601,"src":139211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,139213,139214,139216],{},[395,139215,53906],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,139218,139219,139220],{},"1 号盒子左侧浮动，",[395,139221,139222],{},"dropdown",[67,139224,139225,139235,139243,139249,139257,139267,139275,139286],{},[41,139226,139227,139228,101211,139231,139234],{},"1号盒子有讲究，根据相关性 里面包含 ",[395,139229,139230],{},".dt",[395,139232,139233],{},".dd"," 两个盒子",[41,139236,139237,139239,139240,139242],{},[395,139238,139230],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[395,139241,139233],{}," 挤到下面去了",[41,139244,139245,139246,139248],{},"给 ",[395,139247,139233],{}," 盒子设置宽度 和 高度，以及背景颜色",[41,139250,139245,139251,139253,139254,120430],{},[395,139252,139233],{}," 盒子里面定义 无序列表 （",[395,139255,139256],{},"ul > li > a",[41,139258,139259,139260,139262,139263,139266],{},"每个 ",[395,139261,41],{}," 都有一个高度（",[395,139264,139265],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[41,139268,139245,139269,139271,139272,120430],{},[395,139270,41],{}," 里面的a设置文字大小（",[395,139273,139274],{},"14px",[41,139276,139245,139277,139279,139280,139282,139283,139285],{},[395,139278,41],{}," 设置 ",[395,139281,127906],{},"，当鼠标移入的时候，让",[395,139284,41],{},"的背景变成白色，让里面的文字变成红色",[41,139287,139288,139290,139291,139293,139294,139296],{},[395,139289,41],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[395,139292,41],{},"的右侧，那么给",[395,139295,41],{},"设置相对定位",[19,139298,139299],{},"一定要注意相关性",[19,139301,138584],{},[389,139303,139304],{"className":126745,"code":138587,"language":126747,"meta":316,"style":316},[395,139305,139306,139314,139324,139334],{"__ignoreMap":316},[398,139307,139308,139310,139312],{"class":400,"line":401},[398,139309,51804],{"class":51493},[398,139311,137746],{"class":2239},[398,139313,15849],{"class":408},[398,139315,139316,139318,139320,139322],{"class":400,"line":317},[398,139317,137753],{"class":457},[398,139319,51630],{"class":408},[398,139321,7929],{"class":513},[398,139323,1566],{"class":408},[398,139325,139326,139328,139330,139332],{"class":400,"line":320},[398,139327,128361],{"class":457},[398,139329,51630],{"class":408},[398,139331,61062],{"class":457},[398,139333,1566],{"class":408},[398,139335,139336],{"class":400,"line":1470},[398,139337,1841],{"class":408},[19,139339,138624],{},[389,139341,139342],{"className":126745,"code":138587,"language":126747,"meta":316,"style":316},[395,139343,139344,139352,139362,139372],{"__ignoreMap":316},[398,139345,139346,139348,139350],{"class":400,"line":401},[398,139347,51804],{"class":51493},[398,139349,137746],{"class":2239},[398,139351,15849],{"class":408},[398,139353,139354,139356,139358,139360],{"class":400,"line":317},[398,139355,137753],{"class":457},[398,139357,51630],{"class":408},[398,139359,7929],{"class":513},[398,139361,1566],{"class":408},[398,139363,139364,139366,139368,139370],{"class":400,"line":320},[398,139365,128361],{"class":457},[398,139367,51630],{"class":408},[398,139369,61062],{"class":457},[398,139371,1566],{"class":408},[398,139373,139374],{"class":400,"line":1470},[398,139375,1841],{"class":408},[19,139377,139378],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,139380,139381,139382,139385],{},"2 号盒子左侧浮动，",[395,139383,139384],{},"navitems"," 导航栏组",[67,139387,139388,139393,139402],{},[41,139389,139390,139391],{},"里面结构是 ",[395,139392,139256],{},[41,139394,139395,139396,139398,139399,139401],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[395,139397,640],{},"左右的",[395,139400,31076],{},"把两侧撑开",[41,139403,139404],{},"让文字垂直居中（行高等于高度）",[1738,139406],{"style":126601,"src":139407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,139409,139410],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,139412,138584],{},[389,139414,139416],{"className":126745,"code":139415,"language":126747,"meta":316,"style":316},".box {\n  float: left;\n}\n",[395,139417,139418,139424,139434],{"__ignoreMap":316},[398,139419,139420,139422],{"class":400,"line":401},[398,139421,130593],{"class":2239},[398,139423,15849],{"class":408},[398,139425,139426,139428,139430,139432],{"class":400,"line":317},[398,139427,131225],{"class":457},[398,139429,51630],{"class":408},[398,139431,95],{"class":457},[398,139433,1566],{"class":408},[398,139435,139436],{"class":400,"line":320},[398,139437,1841],{"class":408},[19,139439,138624],{},[389,139441,139442],{"className":126745,"code":139415,"language":126747,"meta":316,"style":316},[395,139443,139444,139450,139460],{"__ignoreMap":316},[398,139445,139446,139448],{"class":400,"line":401},[398,139447,130593],{"class":2239},[398,139449,15849],{"class":408},[398,139451,139452,139454,139456,139458],{"class":400,"line":317},[398,139453,131225],{"class":457},[398,139455,51630],{"class":408},[398,139457,95],{"class":457},[398,139459,1566],{"class":408},[398,139461,139462],{"class":400,"line":320},[398,139463,1841],{"class":408},[19,139465,139466],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[1738,139468],{"style":126601,"src":139469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[389,139471,139472],{"className":126745,"code":130902,"language":126747,"meta":316,"style":316},[395,139473,139474,139480,139496],{"__ignoreMap":316},[398,139475,139476,139478],{"class":400,"line":401},[398,139477,51804],{"class":51493},[398,139479,15849],{"class":408},[398,139481,139482,139484,139486,139488,139490,139492,139494],{"class":400,"line":317},[398,139483,71089],{"class":457},[398,139485,51630],{"class":408},[398,139487,619],{"class":457},[398,139489,51685],{"class":404},[398,139491,51714],{"class":457},[398,139493,130137],{"class":457},[398,139495,1566],{"class":408},[398,139497,139498],{"class":400,"line":320},[398,139499,1841],{"class":408},[14,139501,139503],{"id":139502},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[1738,139505],{"style":126601,"src":139506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[67,139508,139509,139514,139519],{},[41,139510,139511,139513],{},[395,139512,131948],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[41,139515,139516,139518],{},[395,139517,131948],{}," 里面有一个大的版心",[41,139520,139521,139522,139525,139526],{},"版心里面包含 1 号盒子，",[395,139523,139524],{},"mod_service"," 是服务模块，mod 是模块的意思",[67,139527,139528,139533,139546,139562,139567],{},[41,139529,139245,139530,139532],{},[395,139531,139524],{}," 设置高度（80px）和下边框",[41,139534,139535,139536,139539,139540,139542,139543,139545],{},"在里面定义 ",[395,139537,139538],{},"ul > li"," ,每个",[395,139541,41],{}," 宽度是300px 高度是 50px，给每个",[395,139544,41],{},"设置35px的左内边距",[41,139547,139548,139549,139551,139552,139554,139555,139557,139558,18687,139560,120430],{},"在每个",[395,139550,41],{},"里面，放一个 ",[395,139553,23187],{},"（里面放图标），一个",[395,139556,51804],{},"（里面放",[395,139559,51804],{},[395,139561,19],{},[41,139563,139245,139564,139566],{},[395,139565,23187],{},"设置浮动，让h5与这个div左右排列",[41,139568,139569],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,139571,138584],{},[389,139573,139575],{"className":126745,"code":139574,"language":126747,"meta":316,"style":316},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[395,139576,139577,139583,139595,139607,139634],{"__ignoreMap":316},[398,139578,139579,139581],{"class":400,"line":401},[398,139580,134502],{"class":2239},[398,139582,15849],{"class":408},[398,139584,139585,139587,139589,139591,139593],{"class":400,"line":317},[398,139586,70761],{"class":457},[398,139588,51630],{"class":408},[398,139590,1102],{"class":457},[398,139592,51685],{"class":404},[398,139594,1566],{"class":408},[398,139596,139597,139599,139601,139603,139605],{"class":400,"line":320},[398,139598,70981],{"class":457},[398,139600,51630],{"class":408},[398,139602,1102],{"class":457},[398,139604,51685],{"class":404},[398,139606,1566],{"class":408},[398,139608,139609,139611,139613,139615,139617,139619,139621,139623,139626,139628,139630,139632],{"class":400,"line":1470},[398,139610,70804],{"class":457},[398,139612,51630],{"class":408},[398,139614,61919],{"class":457},[398,139616,409],{"class":408},[398,139618,134541],{"class":5493},[398,139620,13991],{"class":408},[398,139622,61929],{"class":457},[398,139624,139625],{"class":457}," -10",[398,139627,51685],{"class":404},[398,139629,134560],{"class":457},[398,139631,51685],{"class":404},[398,139633,1566],{"class":408},[398,139635,139636],{"class":400,"line":1476},[398,139637,1841],{"class":408},[19,139639,138624],{},[389,139641,139642],{"className":126745,"code":139574,"language":126747,"meta":316,"style":316},[395,139643,139644,139650,139662,139674,139700],{"__ignoreMap":316},[398,139645,139646,139648],{"class":400,"line":401},[398,139647,134502],{"class":2239},[398,139649,15849],{"class":408},[398,139651,139652,139654,139656,139658,139660],{"class":400,"line":317},[398,139653,70761],{"class":457},[398,139655,51630],{"class":408},[398,139657,1102],{"class":457},[398,139659,51685],{"class":404},[398,139661,1566],{"class":408},[398,139663,139664,139666,139668,139670,139672],{"class":400,"line":320},[398,139665,70981],{"class":457},[398,139667,51630],{"class":408},[398,139669,1102],{"class":457},[398,139671,51685],{"class":404},[398,139673,1566],{"class":408},[398,139675,139676,139678,139680,139682,139684,139686,139688,139690,139692,139694,139696,139698],{"class":400,"line":1470},[398,139677,70804],{"class":457},[398,139679,51630],{"class":408},[398,139681,61919],{"class":457},[398,139683,409],{"class":408},[398,139685,134541],{"class":5493},[398,139687,13991],{"class":408},[398,139689,61929],{"class":457},[398,139691,139625],{"class":457},[398,139693,51685],{"class":404},[398,139695,134560],{"class":457},[398,139697,51685],{"class":404},[398,139699,1566],{"class":408},[398,139701,139702],{"class":400,"line":1476},[398,139703,1841],{"class":408},[19,139705,139706],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[67,139708,139709,139712,139718,139724,139736],{},[41,139710,139711],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[41,139713,139714,139715,120430],{},"里面的布局利用 自定义列表来实现（",[395,139716,139717],{},"dl > dt + dd",[41,139719,139245,139720,139723],{},[395,139721,139722],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[41,139725,139245,139726,139729,139730,18687,139732,139735],{},[395,139727,139728],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[395,139731,139728],{},[395,139733,139734],{},"dd","之间有些距离",[41,139737,139738],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,139740,138584],{},[389,139742,139743],{"className":126745,"code":138934,"language":126747,"meta":316,"style":316},[395,139744,139745,139751,139763],{"__ignoreMap":316},[398,139746,139747,139749],{"class":400,"line":401},[398,139748,51804],{"class":51493},[398,139750,15849],{"class":408},[398,139752,139753,139755,139757,139759,139761],{"class":400,"line":317},[398,139754,70663],{"class":457},[398,139756,51630],{"class":408},[398,139758,593],{"class":457},[398,139760,51749],{"class":457},[398,139762,1566],{"class":408},[398,139764,139765],{"class":400,"line":320},[398,139766,1841],{"class":408},[19,139768,138624],{},[389,139770,139771],{"className":126745,"code":138934,"language":126747,"meta":316,"style":316},[395,139772,139773,139779,139791],{"__ignoreMap":316},[398,139774,139775,139777],{"class":400,"line":401},[398,139776,51804],{"class":51493},[398,139778,15849],{"class":408},[398,139780,139781,139783,139785,139787,139789],{"class":400,"line":317},[398,139782,70663],{"class":457},[398,139784,51630],{"class":408},[398,139786,593],{"class":457},[398,139788,51749],{"class":457},[398,139790,1566],{"class":408},[398,139792,139793],{"class":400,"line":320},[398,139794,1841],{"class":408},[19,139796,139797],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[67,139799,139800,139809,139812,139823],{},[41,139801,139802,139803,139805,139806,139808],{},"分为上下两块，上面是 ",[395,139804,131965],{}," 友情链接，下面是 ",[395,139807,131958],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[41,139810,139811],{},"把内容分别复制到相应模块中",[41,139813,139245,139814,139816,139817,139819,139820,139822],{},[395,139815,131965],{}," 设置 15px 的下外边距，给",[395,139818,131965],{}," 里面 的 ",[395,139821,640],{}," 标签设置 左右 3px 的外边距",[41,139824,139825,139826,139828],{},"给",[395,139827,131958],{}," 设置 20px 的行高",[19,139830,138584],{},[389,139832,139833],{"className":126745,"code":138934,"language":126747,"meta":316,"style":316},[395,139834,139835,139841,139853],{"__ignoreMap":316},[398,139836,139837,139839],{"class":400,"line":401},[398,139838,51804],{"class":51493},[398,139840,15849],{"class":408},[398,139842,139843,139845,139847,139849,139851],{"class":400,"line":317},[398,139844,70663],{"class":457},[398,139846,51630],{"class":408},[398,139848,593],{"class":457},[398,139850,51749],{"class":457},[398,139852,1566],{"class":408},[398,139854,139855],{"class":400,"line":320},[398,139856,1841],{"class":408},[19,139858,138624],{},[389,139860,139861],{"className":126745,"code":138934,"language":126747,"meta":316,"style":316},[395,139862,139863,139869,139881],{"__ignoreMap":316},[398,139864,139865,139867],{"class":400,"line":401},[398,139866,51804],{"class":51493},[398,139868,15849],{"class":408},[398,139870,139871,139873,139875,139877,139879],{"class":400,"line":317},[398,139872,70663],{"class":457},[398,139874,51630],{"class":408},[398,139876,593],{"class":457},[398,139878,51749],{"class":457},[398,139880,1566],{"class":408},[398,139882,139883],{"class":400,"line":320},[398,139884,1841],{"class":408},[19,139886,139887],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[5403,139889,139890],{},"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":316,"searchDepth":317,"depth":317,"links":139892},[139893,139894,139895,139902],{"id":138173,"depth":317,"text":138174},{"id":138192,"depth":317,"text":138193},{"id":138219,"depth":317,"text":138220,"children":139896},[139897,139898,139899,139900,139901],{"id":138223,"depth":320,"text":138224},{"id":138236,"depth":320,"text":138237},{"id":138260,"depth":320,"text":138261},{"id":138282,"depth":320,"text":138283},{"id":138354,"depth":320,"text":138355},{"id":138480,"depth":317,"text":138481,"children":139903},[139904,139905,139906,139907,139909],{"id":138484,"depth":320,"text":138485},{"id":138491,"depth":320,"text":138492},{"id":138663,"depth":320,"text":138664},{"id":139204,"depth":320,"text":139908},"15.4.4 nav导航模块制作",{"id":139502,"depth":320,"text":139503},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138165,"description":23654},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139916,"title":139917,"body":139918,"description":23654,"extension":326,"meta":142320,"navigation":328,"path":142321,"seo":142322,"stem":142323,"__hash__":142324},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139919,"toc":142297},[139920,139923,139927,139931,139943,139946,139949,139952,139963,139965,139989,139991,140015,140020,140023,140025,140061,140063,140099,140102,140107,140110,140113,140116,140146,140153,140156,140166,140168,140202,140205,140239,140245,140262,140264,140300,140302,140338,140343,140368,140370,140396,140398,140422,140429,140432,140496,140498,140540,140542,140582,140589,140594,140596,140626,140628,140658,140662,140665,140672,140684,140686,140712,140714,140738,140741,140743,140767,140773,140783,140785,140815,140817,140847,140854,140895,140897,140933,140935,140971,140975,140978,140981,140984,140990,140995,140998,141021,141024,141048,141051,141075,141080,141083,141086,141089,141092,141095,141169,141171,141201,141203,141233,141236,141239,141271,141275,141279,141293,141302,141305,141310,141312,141406,141408,141502,141525,141527,141551,141553,141577,141584,141587,141597,141599,141623,141628,141636,141638,141668,141673,141713,141715,141741,141743,141769,141773,141776,141781,141784,141788,141796,141803,141811,141813,141843,141845,141875,141883,141886,141889,141891,141921,141923,141953,141956,141961,141963,141987,141989,142013,142016,142101,142103,142127,142129,142153,142157,142159,142183,142185,142219,142223,142237,142240,142245,142248,142253,142256,142286,142294],[10,139921,139917],{"id":139922},"_16-品优购项目下篇-主体与页面开发",[343,139924,139926],{"id":139925},"_161-项目主体模块制作","16.1 项目主体模块制作",[14,139928,139930],{"id":139929},"_1611-首页制作","16.1.1 首页制作",[19,139932,139933,139935,139936,139938,139939,139942],{},[23,139934,102251],{}," 主体模块是 ",[23,139937,74251],{}," 里面专有的，注意需要新的样式文件 ",[23,139940,139941],{},"index.css，"," 就不要写在common.css中了",[1738,139944],{"style":126601,"src":139945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[1738,139947],{"style":126601,"src":139948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,139950,139951],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[67,139953,139954,139957,139960],{},[41,139955,139956],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[41,139958,139959],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[41,139961,139962],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,139964,138584],{},[389,139966,139967],{"className":126745,"code":139415,"language":126747,"meta":316,"style":316},[395,139968,139969,139975,139985],{"__ignoreMap":316},[398,139970,139971,139973],{"class":400,"line":401},[398,139972,130593],{"class":2239},[398,139974,15849],{"class":408},[398,139976,139977,139979,139981,139983],{"class":400,"line":317},[398,139978,131225],{"class":457},[398,139980,51630],{"class":408},[398,139982,95],{"class":457},[398,139984,1566],{"class":408},[398,139986,139987],{"class":400,"line":320},[398,139988,1841],{"class":408},[19,139990,138624],{},[389,139992,139993],{"className":126745,"code":139415,"language":126747,"meta":316,"style":316},[395,139994,139995,140001,140011],{"__ignoreMap":316},[398,139996,139997,139999],{"class":400,"line":401},[398,139998,130593],{"class":2239},[398,140000,15849],{"class":408},[398,140002,140003,140005,140007,140009],{"class":400,"line":317},[398,140004,131225],{"class":457},[398,140006,51630],{"class":408},[398,140008,95],{"class":457},[398,140010,1566],{"class":408},[398,140012,140013],{"class":400,"line":320},[398,140014,1841],{"class":408},[38,140016,140017],{},[41,140018,140019],{},"左侧focus模块制作",[1738,140021],{"style":126601,"src":140022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,140024,138584],{},[389,140026,140027],{"className":126745,"code":128068,"language":126747,"meta":316,"style":316},[395,140028,140029,140037,140047,140057],{"__ignoreMap":316},[398,140030,140031,140033,140035],{"class":400,"line":401},[398,140032,54014],{"class":51493},[398,140034,62093],{"class":2239},[398,140036,15849],{"class":408},[398,140038,140039,140041,140043,140045],{"class":400,"line":317},[398,140040,128083],{"class":457},[398,140042,51630],{"class":408},[398,140044,55082],{"class":457},[398,140046,1566],{"class":408},[398,140048,140049,140051,140053,140055],{"class":400,"line":320},[398,140050,70991],{"class":457},[398,140052,51630],{"class":408},[398,140054,54930],{"class":457},[398,140056,1566],{"class":408},[398,140058,140059],{"class":400,"line":1470},[398,140060,1841],{"class":408},[19,140062,138624],{},[389,140064,140065],{"className":126745,"code":128068,"language":126747,"meta":316,"style":316},[395,140066,140067,140075,140085,140095],{"__ignoreMap":316},[398,140068,140069,140071,140073],{"class":400,"line":401},[398,140070,54014],{"class":51493},[398,140072,62093],{"class":2239},[398,140074,15849],{"class":408},[398,140076,140077,140079,140081,140083],{"class":400,"line":317},[398,140078,128083],{"class":457},[398,140080,51630],{"class":408},[398,140082,55082],{"class":457},[398,140084,1566],{"class":408},[398,140086,140087,140089,140091,140093],{"class":400,"line":320},[398,140088,70991],{"class":457},[398,140090,51630],{"class":408},[398,140092,54930],{"class":457},[398,140094,1566],{"class":408},[398,140096,140097],{"class":400,"line":1470},[398,140098,1841],{"class":408},[19,140100,140101],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[38,140103,140104],{"start":317},[41,140105,140106],{},"右侧newsflash模块制作",[1738,140108],{"style":126601,"src":140109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,140111,140112],{},"右侧的模块 分为上中下三个盒子",[19,140114,140115],{},"结构代码：",[389,140117,140118],{"className":127492,"code":134247,"language":127494,"meta":316,"style":316},[395,140119,140120],{"__ignoreMap":316},[398,140121,140122,140124,140126,140128,140130,140132,140134,140136,140138,140140,140142,140144],{"class":400,"line":401},[398,140123,1312],{"class":408},[398,140125,1738],{"class":51493},[398,140127,55432],{"class":2239},[398,140129,454],{"class":408},[398,140131,134262],{"class":513},[398,140133,55440],{"class":2239},[398,140135,454],{"class":408},[398,140137,134269],{"class":513},[398,140139,134272],{"class":2239},[398,140141,454],{"class":408},[398,140143,134277],{"class":513},[398,140145,51500],{"class":408},[19,140147,140148,140149,140152],{},"1 号盒子为 ",[395,140150,140151],{},"news"," 新闻模块 高度为 165px",[1738,140154],{"style":126601,"src":140155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,140157,140158,140159,140162,140163],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[395,140160,140161],{},"news-hd","，下面是 ",[395,140164,140165],{},"news-bd",[19,140167,140115],{},[389,140169,140170],{"className":127492,"code":130849,"language":127494,"meta":316,"style":316},[395,140171,140172,140176,140190,140194],{"__ignoreMap":316},[398,140173,140174],{"class":400,"line":401},[398,140175,130856],{"class":467},[398,140177,140178,140180,140182,140184,140186,140188],{"class":400,"line":317},[398,140179,1312],{"class":408},[398,140181,51804],{"class":51493},[398,140183,53679],{"class":2239},[398,140185,454],{"class":408},[398,140187,130869],{"class":513},[398,140189,51500],{"class":408},[398,140191,140192],{"class":400,"line":320},[398,140193,130876],{"class":408},[398,140195,140196,140198,140200],{"class":400,"line":1470},[398,140197,51978],{"class":408},[398,140199,51804],{"class":51493},[398,140201,51500],{"class":408},[19,140203,140204],{},"样式代码：",[389,140206,140207],{"className":127492,"code":130849,"language":127494,"meta":316,"style":316},[395,140208,140209,140213,140227,140231],{"__ignoreMap":316},[398,140210,140211],{"class":400,"line":401},[398,140212,130856],{"class":467},[398,140214,140215,140217,140219,140221,140223,140225],{"class":400,"line":317},[398,140216,1312],{"class":408},[398,140218,51804],{"class":51493},[398,140220,53679],{"class":2239},[398,140222,454],{"class":408},[398,140224,130869],{"class":513},[398,140226,51500],{"class":408},[398,140228,140229],{"class":400,"line":320},[398,140230,130876],{"class":408},[398,140232,140233,140235,140237],{"class":400,"line":1470},[398,140234,51978],{"class":408},[398,140236,51804],{"class":51493},[398,140238,51500],{"class":408},[19,140240,140241,140242,140244],{},"上面是",[395,140243,140161],{},"，设置高度是 33px，设置下边框",[67,140246,140247,140253],{},[41,140248,140249,140250,140252],{},"里面放一个",[395,140251,23187],{}," 标题",[41,140254,140255,140256,140258,140259,140261],{},"放一个a",[395,140257,102886],{},"，内容是 更多，然后让 ",[395,140260,640],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,140263,140115],{},[389,140265,140266],{"className":126745,"code":138587,"language":126747,"meta":316,"style":316},[395,140267,140268,140276,140286,140296],{"__ignoreMap":316},[398,140269,140270,140272,140274],{"class":400,"line":401},[398,140271,51804],{"class":51493},[398,140273,137746],{"class":2239},[398,140275,15849],{"class":408},[398,140277,140278,140280,140282,140284],{"class":400,"line":317},[398,140279,137753],{"class":457},[398,140281,51630],{"class":408},[398,140283,7929],{"class":513},[398,140285,1566],{"class":408},[398,140287,140288,140290,140292,140294],{"class":400,"line":320},[398,140289,128361],{"class":457},[398,140291,51630],{"class":408},[398,140293,61062],{"class":457},[398,140295,1566],{"class":408},[398,140297,140298],{"class":400,"line":1470},[398,140299,1841],{"class":408},[19,140301,140204],{},[389,140303,140304],{"className":126745,"code":138587,"language":126747,"meta":316,"style":316},[395,140305,140306,140314,140324,140334],{"__ignoreMap":316},[398,140307,140308,140310,140312],{"class":400,"line":401},[398,140309,51804],{"class":51493},[398,140311,137746],{"class":2239},[398,140313,15849],{"class":408},[398,140315,140316,140318,140320,140322],{"class":400,"line":317},[398,140317,137753],{"class":457},[398,140319,51630],{"class":408},[398,140321,7929],{"class":513},[398,140323,1566],{"class":408},[398,140325,140326,140328,140330,140332],{"class":400,"line":320},[398,140327,128361],{"class":457},[398,140329,51630],{"class":408},[398,140331,61062],{"class":457},[398,140333,1566],{"class":408},[398,140335,140336],{"class":400,"line":1470},[398,140337,1841],{"class":408},[19,140339,140340,140341],{},"下面是",[395,140342,140165],{},[67,140344,140345,140353],{},[41,140346,140347,140348,101211,140350,140352],{},"里面包含 ",[395,140349,67],{},[395,140351,41],{}," 还有链接",[41,140354,139825,140355,140357,140358,140360,140361,140364,140365],{},[395,140356,41],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[395,140359,131411],{}," 2.设置 ",[395,140362,140363],{},"white-space: nowrap;"," 3. 设置 ",[395,140366,140367],{},"text-overflow: ellipsis;",[19,140369,140115],{},[389,140371,140373],{"className":126745,"code":140372,"language":126747,"meta":316,"style":316},"div {\n  overflow: hidden;\n}\n",[395,140374,140375,140381,140392],{"__ignoreMap":316},[398,140376,140377,140379],{"class":400,"line":401},[398,140378,51804],{"class":51493},[398,140380,15849],{"class":408},[398,140382,140383,140386,140388,140390],{"class":400,"line":317},[398,140384,140385],{"class":457},"  overflow",[398,140387,51630],{"class":408},[398,140389,61907],{"class":457},[398,140391,1566],{"class":408},[398,140393,140394],{"class":400,"line":320},[398,140395,1841],{"class":408},[19,140397,140204],{},[389,140399,140400],{"className":126745,"code":140372,"language":126747,"meta":316,"style":316},[395,140401,140402,140408,140418],{"__ignoreMap":316},[398,140403,140404,140406],{"class":400,"line":401},[398,140405,51804],{"class":51493},[398,140407,15849],{"class":408},[398,140409,140410,140412,140414,140416],{"class":400,"line":317},[398,140411,140385],{"class":457},[398,140413,51630],{"class":408},[398,140415,61907],{"class":457},[398,140417,1566],{"class":408},[398,140419,140420],{"class":400,"line":320},[398,140421,1841],{"class":408},[19,140423,140424,140425,140428],{},"2 号盒子为 ",[395,140426,140427],{},"lifeservice"," 生活服务模块 高度为 209px",[1738,140430],{"style":126601,"src":140431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[67,140433,140434,140437,140447,140471,140482],{},[41,140435,140436],{},"设置边框（左右下边框）",[41,140438,140439,140440,140443,140444,140446],{},"里面的内容 是 ",[395,140441,140442],{},"ul > 12*li","，给",[395,140445,41],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[41,140448,140449,140450],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[67,140451,140452,140457,140466],{},[41,140453,140454,140456],{},[395,140455,140427],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[41,140458,140459,140460,140462,140463,140465],{},"可以让 ",[395,140461,140427],{}," 里面的 ",[395,140464,67],{}," 宽度为 252，就可以装的下 4 个 小 li",[41,140467,140468,140470],{},[395,140469,140427],{}," 盒子 overflow 隐藏多余的部分就可以了",[41,140472,116660,140473,140475,140476,140478,140479,140481],{},[395,140474,41],{}," 里面放一个 ",[395,140477,843],{},"（里面放图标），下面的文本用 ",[395,140480,19],{}," 标签包裹",[41,140483,139245,140484,140486,140487,140489,140490,139279,140492,140495],{},[395,140485,843],{}," 设置 24px宽和28px的高（注意 ",[395,140488,843],{}," 是行内元素， 转成行内块），给 ",[395,140491,41],{},[395,140493,140494],{},"text-align:center"," 让里面内容居中显示",[19,140497,140115],{},[389,140499,140501],{"className":126745,"code":140500,"language":126747,"meta":316,"style":316},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[395,140502,140503,140521,140526,140536],{"__ignoreMap":316},[398,140504,140505,140507,140509,140511,140513,140515,140517,140519],{"class":400,"line":401},[398,140506,398],{"class":51493},[398,140508,12712],{"class":408},[398,140510,640],{"class":51493},[398,140512,12712],{"class":408},[398,140514,23831],{"class":51493},[398,140516,12712],{"class":408},[398,140518,23],{"class":51493},[398,140520,15849],{"class":408},[398,140522,140523],{"class":400,"line":317},[398,140524,140525],{"class":467},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[398,140527,140528,140530,140532,140534],{"class":400,"line":320},[398,140529,128361],{"class":457},[398,140531,51630],{"class":408},[398,140533,128423],{"class":457},[398,140535,1566],{"class":408},[398,140537,140538],{"class":400,"line":1470},[398,140539,1841],{"class":408},[19,140541,140204],{},[389,140543,140544],{"className":126745,"code":140500,"language":126747,"meta":316,"style":316},[395,140545,140546,140564,140568,140578],{"__ignoreMap":316},[398,140547,140548,140550,140552,140554,140556,140558,140560,140562],{"class":400,"line":401},[398,140549,398],{"class":51493},[398,140551,12712],{"class":408},[398,140553,640],{"class":51493},[398,140555,12712],{"class":408},[398,140557,23831],{"class":51493},[398,140559,12712],{"class":408},[398,140561,23],{"class":51493},[398,140563,15849],{"class":408},[398,140565,140566],{"class":400,"line":317},[398,140567,140525],{"class":467},[398,140569,140570,140572,140574,140576],{"class":400,"line":320},[398,140571,128361],{"class":457},[398,140573,51630],{"class":408},[398,140575,128423],{"class":457},[398,140577,1566],{"class":408},[398,140579,140580],{"class":400,"line":1470},[398,140581,1841],{"class":408},[19,140583,140584,140585,140588],{},"3 号盒子为 ",[395,140586,140587],{},"bargain"," 特价商品",[67,140590,140591],{},[41,140592,140593],{},"这个比较简单，直接插入一张图片即可",[19,140595,140115],{},[389,140597,140598],{"className":127492,"code":134247,"language":127494,"meta":316,"style":316},[395,140599,140600],{"__ignoreMap":316},[398,140601,140602,140604,140606,140608,140610,140612,140614,140616,140618,140620,140622,140624],{"class":400,"line":401},[398,140603,1312],{"class":408},[398,140605,1738],{"class":51493},[398,140607,55432],{"class":2239},[398,140609,454],{"class":408},[398,140611,134262],{"class":513},[398,140613,55440],{"class":2239},[398,140615,454],{"class":408},[398,140617,134269],{"class":513},[398,140619,134272],{"class":2239},[398,140621,454],{"class":408},[398,140623,134277],{"class":513},[398,140625,51500],{"class":408},[19,140627,140204],{},[389,140629,140630],{"className":127492,"code":134247,"language":127494,"meta":316,"style":316},[395,140631,140632],{"__ignoreMap":316},[398,140633,140634,140636,140638,140640,140642,140644,140646,140648,140650,140652,140654,140656],{"class":400,"line":401},[398,140635,1312],{"class":408},[398,140637,1738],{"class":51493},[398,140639,55432],{"class":2239},[398,140641,454],{"class":408},[398,140643,134262],{"class":513},[398,140645,55440],{"class":2239},[398,140647,454],{"class":408},[398,140649,134269],{"class":513},[398,140651,134272],{"class":2239},[398,140653,454],{"class":408},[398,140655,134277],{"class":513},[398,140657,51500],{"class":408},[14,140659,140661],{"id":140660},"_1612-推荐模块制作","16.1.2 推荐模块制作",[1738,140663],{"style":126601,"src":140664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,140666,140667,140668,140671],{},"大盒子 ",[395,140669,140670],{},"recom"," 推荐模块 recommend",[67,140673,140674],{},[41,140675,140676,140677,140679,140680,140683],{},"给这个 ",[395,140678,140670],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[395,140681,140682],{},"#ebebeb","），设置距离上边 12px",[19,140685,140115],{},[389,140687,140689],{"className":126745,"code":140688,"language":126747,"meta":316,"style":316},"div {\n  background-color: #f0f0f0;\n}\n",[395,140690,140691,140697,140708],{"__ignoreMap":316},[398,140692,140693,140695],{"class":400,"line":401},[398,140694,51804],{"class":51493},[398,140696,15849],{"class":408},[398,140698,140699,140701,140703,140706],{"class":400,"line":317},[398,140700,71071],{"class":457},[398,140702,51630],{"class":408},[398,140704,140705],{"class":457},"#f0f0f0",[398,140707,1566],{"class":408},[398,140709,140710],{"class":400,"line":320},[398,140711,1841],{"class":408},[19,140713,140204],{},[389,140715,140716],{"className":126745,"code":140688,"language":126747,"meta":316,"style":316},[395,140717,140718,140724,140734],{"__ignoreMap":316},[398,140719,140720,140722],{"class":400,"line":401},[398,140721,51804],{"class":51493},[398,140723,15849],{"class":408},[398,140725,140726,140728,140730,140732],{"class":400,"line":317},[398,140727,71071],{"class":457},[398,140729,51630],{"class":408},[398,140731,140705],{"class":457},[398,140733,1566],{"class":408},[398,140735,140736],{"class":400,"line":320},[398,140737,1841],{"class":408},[19,140739,140740],{},"里面包含 2 个盒子， 浮动即可",[19,140742,140115],{},[389,140744,140745],{"className":126745,"code":139415,"language":126747,"meta":316,"style":316},[395,140746,140747,140753,140763],{"__ignoreMap":316},[398,140748,140749,140751],{"class":400,"line":401},[398,140750,130593],{"class":2239},[398,140752,15849],{"class":408},[398,140754,140755,140757,140759,140761],{"class":400,"line":317},[398,140756,131225],{"class":457},[398,140758,51630],{"class":408},[398,140760,95],{"class":457},[398,140762,1566],{"class":408},[398,140764,140765],{"class":400,"line":320},[398,140766,1841],{"class":408},[19,140768,140769,140770],{},"1 号盒子 ",[395,140771,140772],{},"recom_hd",[67,140774,140775,140778],{},[41,140776,140777],{},"设置宽度205px，高度163px",[41,140779,140249,140780,140782],{},[395,140781,1738],{},"标签，插入图片即可",[19,140784,140115],{},[389,140786,140787],{"className":127492,"code":134247,"language":127494,"meta":316,"style":316},[395,140788,140789],{"__ignoreMap":316},[398,140790,140791,140793,140795,140797,140799,140801,140803,140805,140807,140809,140811,140813],{"class":400,"line":401},[398,140792,1312],{"class":408},[398,140794,1738],{"class":51493},[398,140796,55432],{"class":2239},[398,140798,454],{"class":408},[398,140800,134262],{"class":513},[398,140802,55440],{"class":2239},[398,140804,454],{"class":408},[398,140806,134269],{"class":513},[398,140808,134272],{"class":2239},[398,140810,454],{"class":408},[398,140812,134277],{"class":513},[398,140814,51500],{"class":408},[19,140816,140204],{},[389,140818,140819],{"className":127492,"code":134247,"language":127494,"meta":316,"style":316},[395,140820,140821],{"__ignoreMap":316},[398,140822,140823,140825,140827,140829,140831,140833,140835,140837,140839,140841,140843,140845],{"class":400,"line":401},[398,140824,1312],{"class":408},[398,140826,1738],{"class":51493},[398,140828,55432],{"class":2239},[398,140830,454],{"class":408},[398,140832,134262],{"class":513},[398,140834,55440],{"class":2239},[398,140836,454],{"class":408},[398,140838,134269],{"class":513},[398,140840,134272],{"class":2239},[398,140842,454],{"class":408},[398,140844,134277],{"class":513},[398,140846,51500],{"class":408},[19,140848,140849,140850,140853],{},"2 号盒子 ",[395,140851,140852],{},"recom_bd"," ，注意里面的小竖线",[67,140855,140856,140867,140870,140875,140880],{},[41,140857,140858,140859,140861,140862,140864,140865],{},"右侧结构里面放 ",[395,140860,67],{}," 包含 4个 ",[395,140863,41],{},"，每个li里面包含一个",[395,140866,1738],{},[41,140868,140869],{},"直接利用切片工具把里面的内容当成一张图片",[41,140871,139245,140872,140874],{},[395,140873,41],{}," 设置浮动",[41,140876,139245,140877,140879],{},[395,140878,1738],{}," 设置宽高，宽度 248px，高度 163px",[41,140881,140882,140883,140443,140886,140888,140889,140891,140892],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[395,140884,140885],{},"top 10px",[395,140887,41],{},"设置相对定位（注意，最后一个",[395,140890,41],{},"不用设置伪元素），可以利用 ",[395,140893,140894],{},"nth-child(-n+3){...}",[19,140896,140115],{},[389,140898,140899],{"className":126745,"code":138587,"language":126747,"meta":316,"style":316},[395,140900,140901,140909,140919,140929],{"__ignoreMap":316},[398,140902,140903,140905,140907],{"class":400,"line":401},[398,140904,51804],{"class":51493},[398,140906,137746],{"class":2239},[398,140908,15849],{"class":408},[398,140910,140911,140913,140915,140917],{"class":400,"line":317},[398,140912,137753],{"class":457},[398,140914,51630],{"class":408},[398,140916,7929],{"class":513},[398,140918,1566],{"class":408},[398,140920,140921,140923,140925,140927],{"class":400,"line":320},[398,140922,128361],{"class":457},[398,140924,51630],{"class":408},[398,140926,61062],{"class":457},[398,140928,1566],{"class":408},[398,140930,140931],{"class":400,"line":1470},[398,140932,1841],{"class":408},[19,140934,140204],{},[389,140936,140937],{"className":126745,"code":138587,"language":126747,"meta":316,"style":316},[395,140938,140939,140947,140957,140967],{"__ignoreMap":316},[398,140940,140941,140943,140945],{"class":400,"line":401},[398,140942,51804],{"class":51493},[398,140944,137746],{"class":2239},[398,140946,15849],{"class":408},[398,140948,140949,140951,140953,140955],{"class":400,"line":317},[398,140950,137753],{"class":457},[398,140952,51630],{"class":408},[398,140954,7929],{"class":513},[398,140956,1566],{"class":408},[398,140958,140959,140961,140963,140965],{"class":400,"line":320},[398,140960,128361],{"class":457},[398,140962,51630],{"class":408},[398,140964,61062],{"class":457},[398,140966,1566],{"class":408},[398,140968,140969],{"class":400,"line":1470},[398,140970,1841],{"class":408},[14,140972,140974],{"id":140973},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[1738,140976],{"style":126601,"src":140977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,140979,140980],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,140982,140983],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,140985,140986,140989],{},[395,140987,140988],{},"box_hd"," 制作",[19,140991,140769,140992,140994],{},[395,140993,140988],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[1738,140996],{"style":126601,"src":140997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[67,140999,141000,141005,141010,141013],{},[41,141001,141002,141004],{},[395,141003,140988],{}," 给 30px 的高度，2个像素的下边框",[41,141006,141007,141008],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[395,141009,139256],{},[41,141011,141012],{},"左侧盒左浮动，右侧盒子右浮动",[41,141014,141015,141017,141018,141020],{},[395,141016,640],{},"标签之间的距离用左右的",[395,141019,31076],{},"撑开即可",[19,141022,141023],{},"结构代码",[389,141025,141026],{"className":126745,"code":139415,"language":126747,"meta":316,"style":316},[395,141027,141028,141034,141044],{"__ignoreMap":316},[398,141029,141030,141032],{"class":400,"line":401},[398,141031,130593],{"class":2239},[398,141033,15849],{"class":408},[398,141035,141036,141038,141040,141042],{"class":400,"line":317},[398,141037,131225],{"class":457},[398,141039,51630],{"class":408},[398,141041,95],{"class":457},[398,141043,1566],{"class":408},[398,141045,141046],{"class":400,"line":320},[398,141047,1841],{"class":408},[19,141049,141050],{},"样式代码",[389,141052,141053],{"className":126745,"code":139415,"language":126747,"meta":316,"style":316},[395,141054,141055,141061,141071],{"__ignoreMap":316},[398,141056,141057,141059],{"class":400,"line":401},[398,141058,130593],{"class":2239},[398,141060,15849],{"class":408},[398,141062,141063,141065,141067,141069],{"class":400,"line":317},[398,141064,131225],{"class":457},[398,141066,51630],{"class":408},[398,141068,95],{"class":457},[398,141070,1566],{"class":408},[398,141072,141073],{"class":400,"line":320},[398,141074,1841],{"class":408},[19,141076,141077,140989],{},[395,141078,141079],{},"box_bd",[19,141081,141082],{},"2 号盒子 box_bd，不要给高度",[1738,141084],{"style":126601,"src":141085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,141087,141088],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,141090,141091],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,141093,141094],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[67,141096,141097,141109,141125],{},[41,141098,141099,141101,141102,141105,141106,141108],{},[395,141100,141079],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[395,141103,141104],{},"tab_content","，在",[395,141107,141104],{}," 里面包裹tab选项卡对应的内容",[41,141110,141111,141112,141115,141116,141118,141119,141121,141122,141124],{},"内容被一个大盒子包裹（",[395,141113,141114],{},"tab_list_item","），里面是 ",[395,141117,67],{}," 包裹 5个 ",[395,141120,41],{},"，每个",[395,141123,41],{},"设置对应的宽度，然后设置浮动",[41,141126,141127,141128,141130,141131,141133,141134],{},"而这5个",[395,141129,41],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[395,141132,41],{},"设置",[67,141135,141136,141154,141157],{},[41,141137,141138,141139,141141,141142,141144,141145,141147,141148,141150,141151,141153],{},"第一个小 ",[395,141140,41],{}," 分为上下结构，上面是 ",[395,141143,67],{}," 包裹 ",[395,141146,41],{}," ，",[395,141149,41],{},"里面包裹 ",[395,141152,640],{},"，下面插入一张图片",[41,141155,141156],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[41,141158,141159,141160,141162,141163,141165,141166,141168],{},"后面的小 ",[395,141161,41],{}," 里面先放一个",[395,141164,640],{},"标签，然后在",[395,141167,640],{},"标签里面插入图片即可",[19,141170,141023],{},[389,141172,141173],{"className":127492,"code":134247,"language":127494,"meta":316,"style":316},[395,141174,141175],{"__ignoreMap":316},[398,141176,141177,141179,141181,141183,141185,141187,141189,141191,141193,141195,141197,141199],{"class":400,"line":401},[398,141178,1312],{"class":408},[398,141180,1738],{"class":51493},[398,141182,55432],{"class":2239},[398,141184,454],{"class":408},[398,141186,134262],{"class":513},[398,141188,55440],{"class":2239},[398,141190,454],{"class":408},[398,141192,134269],{"class":513},[398,141194,134272],{"class":2239},[398,141196,454],{"class":408},[398,141198,134277],{"class":513},[398,141200,51500],{"class":408},[19,141202,141050],{},[389,141204,141205],{"className":127492,"code":134247,"language":127494,"meta":316,"style":316},[395,141206,141207],{"__ignoreMap":316},[398,141208,141209,141211,141213,141215,141217,141219,141221,141223,141225,141227,141229,141231],{"class":400,"line":401},[398,141210,1312],{"class":408},[398,141212,1738],{"class":51493},[398,141214,55432],{"class":2239},[398,141216,454],{"class":408},[398,141218,134262],{"class":513},[398,141220,55440],{"class":2239},[398,141222,454],{"class":408},[398,141224,134269],{"class":513},[398,141226,134272],{"class":2239},[398,141228,454],{"class":408},[398,141230,134277],{"class":513},[398,141232,51500],{"class":408},[19,141234,141235],{},"tab栏切换需求！！！！！！介绍：",[1738,141237],{"style":126601,"src":141238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[67,141240,141241,141249,141255,141258],{},[41,141242,141243,141246,141247],{},[395,141244,141245],{},"tab","栏的布局是 ",[395,141248,139256],{},[41,141250,141251,141252,141254],{},"有多少个",[395,141253,141245],{},"选项卡，那么对应就有多少个内容",[41,141256,141257],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[41,141259,141260,141261,141264,141265,141267,141268,141270],{},"等后面我们学习了",[395,141262,141263],{},"js","之后，我们就会配合",[395,141266,141263],{},"来实现，",[395,141269,141245],{},"栏的切换",[343,141272,141274],{"id":141273},"_162-列表制作","16.2 列表制作",[14,141276,141278],{"id":141277},"_1621-准备工作","16.2.1 准备工作",[67,141280,141281,141284,141287,141290],{},[41,141282,141283],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[41,141285,141286],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[41,141288,141289],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[41,141291,141292],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[14,141294,141296,141297,101211,141299,141301],{"id":141295},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[395,141298,131750],{},[395,141300,53906],{}," 修改",[1738,141303],{"style":126601,"src":141304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[67,141306,141307],{},[41,141308,141309],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,141311,140115],{},[389,141313,141314],{"className":126745,"code":132177,"language":126747,"meta":316,"style":316},[395,141315,141316,141320,141334,141338,141352,141356,141370,141374,141388,141392],{"__ignoreMap":316},[398,141317,141318],{"class":400,"line":401},[398,141319,132184],{"class":467},[398,141321,141322,141324,141326,141328,141330,141332],{"class":400,"line":317},[398,141323,132189],{"class":2239},[398,141325,80000],{"class":408},[398,141327,129105],{"class":457},[398,141329,51630],{"class":408},[398,141331,132198],{"class":457},[398,141333,129675],{"class":408},[398,141335,141336],{"class":400,"line":320},[398,141337,132205],{"class":467},[398,141339,141340,141342,141344,141346,141348,141350],{"class":400,"line":1470},[398,141341,132210],{"class":2239},[398,141343,80000],{"class":408},[398,141345,129105],{"class":457},[398,141347,51630],{"class":408},[398,141349,54957],{"class":457},[398,141351,129675],{"class":408},[398,141353,141354],{"class":400,"line":1476},[398,141355,132225],{"class":467},[398,141357,141358,141360,141362,141364,141366,141368],{"class":400,"line":1490},[398,141359,132230],{"class":2239},[398,141361,80000],{"class":408},[398,141363,129105],{"class":457},[398,141365,51630],{"class":408},[398,141367,55024],{"class":457},[398,141369,129675],{"class":408},[398,141371,141372],{"class":400,"line":1496},[398,141373,132245],{"class":467},[398,141375,141376,141378,141380,141382,141384,141386],{"class":400,"line":1587},[398,141377,132250],{"class":2239},[398,141379,80000],{"class":408},[398,141381,129105],{"class":457},[398,141383,51630],{"class":408},[398,141385,86426],{"class":457},[398,141387,129675],{"class":408},[398,141389,141390],{"class":400,"line":1593},[398,141391,132265],{"class":467},[398,141393,141394,141396,141398,141400,141402,141404],{"class":400,"line":1605},[398,141395,132270],{"class":2239},[398,141397,80000],{"class":408},[398,141399,129105],{"class":457},[398,141401,51630],{"class":408},[398,141403,132279],{"class":457},[398,141405,129675],{"class":408},[19,141407,140204],{},[389,141409,141410],{"className":126745,"code":132177,"language":126747,"meta":316,"style":316},[395,141411,141412,141416,141430,141434,141448,141452,141466,141470,141484,141488],{"__ignoreMap":316},[398,141413,141414],{"class":400,"line":401},[398,141415,132184],{"class":467},[398,141417,141418,141420,141422,141424,141426,141428],{"class":400,"line":317},[398,141419,132189],{"class":2239},[398,141421,80000],{"class":408},[398,141423,129105],{"class":457},[398,141425,51630],{"class":408},[398,141427,132198],{"class":457},[398,141429,129675],{"class":408},[398,141431,141432],{"class":400,"line":320},[398,141433,132205],{"class":467},[398,141435,141436,141438,141440,141442,141444,141446],{"class":400,"line":1470},[398,141437,132210],{"class":2239},[398,141439,80000],{"class":408},[398,141441,129105],{"class":457},[398,141443,51630],{"class":408},[398,141445,54957],{"class":457},[398,141447,129675],{"class":408},[398,141449,141450],{"class":400,"line":1476},[398,141451,132225],{"class":467},[398,141453,141454,141456,141458,141460,141462,141464],{"class":400,"line":1490},[398,141455,132230],{"class":2239},[398,141457,80000],{"class":408},[398,141459,129105],{"class":457},[398,141461,51630],{"class":408},[398,141463,55024],{"class":457},[398,141465,129675],{"class":408},[398,141467,141468],{"class":400,"line":1496},[398,141469,132245],{"class":467},[398,141471,141472,141474,141476,141478,141480,141482],{"class":400,"line":1587},[398,141473,132250],{"class":2239},[398,141475,80000],{"class":408},[398,141477,129105],{"class":457},[398,141479,51630],{"class":408},[398,141481,86426],{"class":457},[398,141483,129675],{"class":408},[398,141485,141486],{"class":400,"line":1593},[398,141487,132265],{"class":467},[398,141489,141490,141492,141494,141496,141498,141500],{"class":400,"line":1605},[398,141491,132270],{"class":2239},[398,141493,80000],{"class":408},[398,141495,129105],{"class":457},[398,141497,51630],{"class":408},[398,141499,132279],{"class":457},[398,141501,129675],{"class":408},[67,141503,141504,141515],{},[41,141505,141506,141507,141510,141511,101211,141513],{},"1 号盒子左侧浮动 ",[395,141508,141509],{},"sk_list"," 里面包含 ",[395,141512,67],{},[395,141514,41],{},[41,141516,141517,141518,141510,141521,101211,141523],{},"2 号盒子左侧浮动 ",[395,141519,141520],{},"sk_con",[395,141522,67],{},[395,141524,41],{},[19,141526,140115],{},[389,141528,141529],{"className":126745,"code":139415,"language":126747,"meta":316,"style":316},[395,141530,141531,141537,141547],{"__ignoreMap":316},[398,141532,141533,141535],{"class":400,"line":401},[398,141534,130593],{"class":2239},[398,141536,15849],{"class":408},[398,141538,141539,141541,141543,141545],{"class":400,"line":317},[398,141540,131225],{"class":457},[398,141542,51630],{"class":408},[398,141544,95],{"class":457},[398,141546,1566],{"class":408},[398,141548,141549],{"class":400,"line":320},[398,141550,1841],{"class":408},[19,141552,140204],{},[389,141554,141555],{"className":126745,"code":139415,"language":126747,"meta":316,"style":316},[395,141556,141557,141563,141573],{"__ignoreMap":316},[398,141558,141559,141561],{"class":400,"line":401},[398,141560,130593],{"class":2239},[398,141562,15849],{"class":408},[398,141564,141565,141567,141569,141571],{"class":400,"line":317},[398,141566,131225],{"class":457},[398,141568,51630],{"class":408},[398,141570,95],{"class":457},[398,141572,1566],{"class":408},[398,141574,141575],{"class":400,"line":320},[398,141576,1841],{"class":408},[14,141578,141580,141581],{"id":141579},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[395,141582,141583],{},"sk_container",[1738,141585],{"style":126601,"src":141586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[67,141588,141589,141594],{},[41,141590,140769,141591,141593],{},[395,141592,141583],{}," 给宽度 1200，不要给高度",[41,141595,141596],{},"一定不要忘记清除浮动",[19,141598,140115],{},[389,141600,141601],{"className":126745,"code":139415,"language":126747,"meta":316,"style":316},[395,141602,141603,141609,141619],{"__ignoreMap":316},[398,141604,141605,141607],{"class":400,"line":401},[398,141606,130593],{"class":2239},[398,141608,15849],{"class":408},[398,141610,141611,141613,141615,141617],{"class":400,"line":317},[398,141612,131225],{"class":457},[398,141614,51630],{"class":408},[398,141616,95],{"class":457},[398,141618,1566],{"class":408},[398,141620,141621],{"class":400,"line":320},[398,141622,1841],{"class":408},[38,141624,141625],{},[41,141626,141627],{},"sk_hd制作",[67,141629,141630],{},[41,141631,140849,141632,141635],{},[395,141633,141634],{},"sk_hd"," ，插入图片即可",[19,141637,140115],{},[389,141639,141640],{"className":127492,"code":134247,"language":127494,"meta":316,"style":316},[395,141641,141642],{"__ignoreMap":316},[398,141643,141644,141646,141648,141650,141652,141654,141656,141658,141660,141662,141664,141666],{"class":400,"line":401},[398,141645,1312],{"class":408},[398,141647,1738],{"class":51493},[398,141649,55432],{"class":2239},[398,141651,454],{"class":408},[398,141653,134262],{"class":513},[398,141655,55440],{"class":2239},[398,141657,454],{"class":408},[398,141659,134269],{"class":513},[398,141661,134272],{"class":2239},[398,141663,454],{"class":408},[398,141665,134277],{"class":513},[398,141667,51500],{"class":408},[38,141669,141670],{"start":317},[41,141671,141672],{},"sk_bd制作",[67,141674,141675],{},[41,141676,141677,141678,141681,141682,101211,141684,141686],{},"3 号盒子 ",[395,141679,141680],{},"sk_bd"," ，里面包含很多的 ",[395,141683,67],{},[395,141685,41],{},[67,141687,141688,141697],{},[41,141689,141690,141691,141693,141694,141696],{},"当鼠标移入到 ",[395,141692,41],{}," 上面的时候显示红色的边框，在这里先给 ",[395,141695,41],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[41,141698,141699,141700,141702,141703,141705,141706,141709,141710,141712],{},"由于给每个 ",[395,141701,41],{}," 都设置了外边距，导致一行的最后一个 ",[395,141704,41],{}," 掉了下来，在这里我们利用 ",[395,141707,141708],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[395,141711,41],{},"，去掉外边距就好了",[19,141714,140115],{},[389,141716,141717],{"className":126745,"code":138934,"language":126747,"meta":316,"style":316},[395,141718,141719,141725,141737],{"__ignoreMap":316},[398,141720,141721,141723],{"class":400,"line":401},[398,141722,51804],{"class":51493},[398,141724,15849],{"class":408},[398,141726,141727,141729,141731,141733,141735],{"class":400,"line":317},[398,141728,70663],{"class":457},[398,141730,51630],{"class":408},[398,141732,593],{"class":457},[398,141734,51749],{"class":457},[398,141736,1566],{"class":408},[398,141738,141739],{"class":400,"line":320},[398,141740,1841],{"class":408},[19,141742,140204],{},[389,141744,141745],{"className":126745,"code":138934,"language":126747,"meta":316,"style":316},[395,141746,141747,141753,141765],{"__ignoreMap":316},[398,141748,141749,141751],{"class":400,"line":401},[398,141750,51804],{"class":51493},[398,141752,15849],{"class":408},[398,141754,141755,141757,141759,141761,141763],{"class":400,"line":317},[398,141756,70663],{"class":457},[398,141758,51630],{"class":408},[398,141760,593],{"class":457},[398,141762,51749],{"class":457},[398,141764,1566],{"class":408},[398,141766,141767],{"class":400,"line":320},[398,141768,1841],{"class":408},[343,141770,141772],{"id":141771},"_163-注册页面制作","16.3 注册页面制作",[1738,141774],{"style":126601,"src":141775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,141777,141778,141780],{},[23,141779,9302],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[1738,141782],{"style":126601,"src":141783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[14,141785,141787],{"id":141786},"_1631-准备工作","16.3.1 准备工作",[67,141789,141790,141793],{},[41,141791,141792],{},"创建register.html，引入 base.css，引入favicon图标",[41,141794,141795],{},"创建register.css ，在html页面进行引入",[14,141797,141799,141800,141802],{"id":141798},"_1632-header-头部实现","16.3.2 ",[395,141801,131750],{}," 头部实现",[67,141804,141805,141808],{},[41,141806,141807],{},"整个内容用 版心 进行包裹",[41,141809,141810],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,141812,140115],{},[389,141814,141815],{"className":127492,"code":134247,"language":127494,"meta":316,"style":316},[395,141816,141817],{"__ignoreMap":316},[398,141818,141819,141821,141823,141825,141827,141829,141831,141833,141835,141837,141839,141841],{"class":400,"line":401},[398,141820,1312],{"class":408},[398,141822,1738],{"class":51493},[398,141824,55432],{"class":2239},[398,141826,454],{"class":408},[398,141828,134262],{"class":513},[398,141830,55440],{"class":2239},[398,141832,454],{"class":408},[398,141834,134269],{"class":513},[398,141836,134272],{"class":2239},[398,141838,454],{"class":408},[398,141840,134277],{"class":513},[398,141842,51500],{"class":408},[19,141844,140204],{},[389,141846,141847],{"className":127492,"code":134247,"language":127494,"meta":316,"style":316},[395,141848,141849],{"__ignoreMap":316},[398,141850,141851,141853,141855,141857,141859,141861,141863,141865,141867,141869,141871,141873],{"class":400,"line":401},[398,141852,1312],{"class":408},[398,141854,1738],{"class":51493},[398,141856,55432],{"class":2239},[398,141858,454],{"class":408},[398,141860,134262],{"class":513},[398,141862,55440],{"class":2239},[398,141864,454],{"class":408},[398,141866,134269],{"class":513},[398,141868,134272],{"class":2239},[398,141870,454],{"class":408},[398,141872,134277],{"class":513},[398,141874,51500],{"class":408},[14,141876,141878,141879,141882],{"id":141877},"_1633-registerarea-主体模块实现","16.3.3 ",[395,141880,141881],{},"registerarea"," 主体模块实现",[1738,141884],{"style":126601,"src":141885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,141887,141888],{},"整个大盒子 高度为 522px，设置4个边框",[19,141890,140115],{},[389,141892,141893],{"className":126745,"code":130902,"language":126747,"meta":316,"style":316},[395,141894,141895,141901,141917],{"__ignoreMap":316},[398,141896,141897,141899],{"class":400,"line":401},[398,141898,51804],{"class":51493},[398,141900,15849],{"class":408},[398,141902,141903,141905,141907,141909,141911,141913,141915],{"class":400,"line":317},[398,141904,71089],{"class":457},[398,141906,51630],{"class":408},[398,141908,619],{"class":457},[398,141910,51685],{"class":404},[398,141912,51714],{"class":457},[398,141914,130137],{"class":457},[398,141916,1566],{"class":408},[398,141918,141919],{"class":400,"line":320},[398,141920,1841],{"class":408},[19,141922,140204],{},[389,141924,141925],{"className":126745,"code":130902,"language":126747,"meta":316,"style":316},[395,141926,141927,141933,141949],{"__ignoreMap":316},[398,141928,141929,141931],{"class":400,"line":401},[398,141930,51804],{"class":51493},[398,141932,15849],{"class":408},[398,141934,141935,141937,141939,141941,141943,141945,141947],{"class":400,"line":317},[398,141936,71089],{"class":457},[398,141938,51630],{"class":408},[398,141940,619],{"class":457},[398,141942,51685],{"class":404},[398,141944,51714],{"class":457},[398,141946,130137],{"class":457},[398,141948,1566],{"class":408},[398,141950,141951],{"class":400,"line":320},[398,141952,1841],{"class":408},[19,141954,141955],{},"1号盒子 是一个 h3 标签，放标题",[67,141957,141958],{},[41,141959,141960],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,141962,140115],{},[389,141964,141965],{"className":126745,"code":139415,"language":126747,"meta":316,"style":316},[395,141966,141967,141973,141983],{"__ignoreMap":316},[398,141968,141969,141971],{"class":400,"line":401},[398,141970,130593],{"class":2239},[398,141972,15849],{"class":408},[398,141974,141975,141977,141979,141981],{"class":400,"line":317},[398,141976,131225],{"class":457},[398,141978,51630],{"class":408},[398,141980,95],{"class":457},[398,141982,1566],{"class":408},[398,141984,141985],{"class":400,"line":320},[398,141986,1841],{"class":408},[19,141988,140204],{},[389,141990,141991],{"className":126745,"code":139415,"language":126747,"meta":316,"style":316},[395,141992,141993,141999,142009],{"__ignoreMap":316},[398,141994,141995,141997],{"class":400,"line":401},[398,141996,130593],{"class":2239},[398,141998,15849],{"class":408},[398,142000,142001,142003,142005,142007],{"class":400,"line":317},[398,142002,131225],{"class":457},[398,142004,51630],{"class":408},[398,142006,95],{"class":457},[398,142008,1566],{"class":408},[398,142010,142011],{"class":400,"line":320},[398,142012,1841],{"class":408},[19,142014,142015],{},"2号盒子 里面放注册的内容",[67,142017,142018,142021,142030,142044,142057,142060,142063,142081,142095],{},[41,142019,142020],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[41,142022,142023,142024,142026,142027,142029],{},"里面的内容利用 ",[395,142025,67],{}," 包含 ",[395,142028,41],{}," 来实现的（不需要用表格）",[41,142031,139259,142032,142034,142035,142037,142038,142040,142041,142043],{},[395,142033,41],{}," 里面，左侧放 ",[395,142036,33801],{}," 标签， 中间放",[395,142039,54014],{}," 标签， 右侧放 ",[395,142042,398],{}," 提示信息",[41,142045,142046,142047,142049,142050,142052,142053,142056],{},"左侧 ",[395,142048,33801],{},"里面的文字都是右对齐，我们可以给",[395,142051,33801],{},"设置一个宽度（88px），然后利用",[395,142054,142055],{},"text-align"," 来设置右对齐",[41,142058,142059],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[41,142061,142062],{},"右侧 span修饰一下文字颜色",[41,142064,142065,142066],{},"提示信息的样式优化",[67,142067,142068,142071,142074],{},[41,142069,142070],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[41,142072,142073],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[41,142075,142076,142077,142080],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[395,142078,142079],{},"vertical-algin"," 来设置 图片与文字对齐方式",[41,142082,142083,142084],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[67,142085,142086,142092],{},[41,142087,142088,142089,142091],{},"设置 ",[395,142090,23831],{}," 的 左右 12px 的内边距，设置一下文字颜色",[41,142093,142094],{},"分别设置 背景颜色",[41,142096,142097,142098,142100],{},"同意协议 和 完成注册 都是用 ",[395,142099,41],{}," 进行包裹",[19,142102,140115],{},[389,142104,142105],{"className":126745,"code":140688,"language":126747,"meta":316,"style":316},[395,142106,142107,142113,142123],{"__ignoreMap":316},[398,142108,142109,142111],{"class":400,"line":401},[398,142110,51804],{"class":51493},[398,142112,15849],{"class":408},[398,142114,142115,142117,142119,142121],{"class":400,"line":317},[398,142116,71071],{"class":457},[398,142118,51630],{"class":408},[398,142120,140705],{"class":457},[398,142122,1566],{"class":408},[398,142124,142125],{"class":400,"line":320},[398,142126,1841],{"class":408},[19,142128,140204],{},[389,142130,142131],{"className":126745,"code":140688,"language":126747,"meta":316,"style":316},[395,142132,142133,142139,142149],{"__ignoreMap":316},[398,142134,142135,142137],{"class":400,"line":401},[398,142136,51804],{"class":51493},[398,142138,15849],{"class":408},[398,142140,142141,142143,142145,142147],{"class":400,"line":317},[398,142142,71071],{"class":457},[398,142144,51630],{"class":408},[398,142146,140705],{"class":457},[398,142148,1566],{"class":408},[398,142150,142151],{"class":400,"line":320},[398,142152,1841],{"class":408},[14,142154,142156],{"id":142155},"_1634-底部实现","16.3.4 底部实现",[19,142158,140115],{},[389,142160,142161],{"className":126745,"code":140688,"language":126747,"meta":316,"style":316},[395,142162,142163,142169,142179],{"__ignoreMap":316},[398,142164,142165,142167],{"class":400,"line":401},[398,142166,51804],{"class":51493},[398,142168,15849],{"class":408},[398,142170,142171,142173,142175,142177],{"class":400,"line":317},[398,142172,71071],{"class":457},[398,142174,51630],{"class":408},[398,142176,140705],{"class":457},[398,142178,1566],{"class":408},[398,142180,142181],{"class":400,"line":320},[398,142182,1841],{"class":408},[19,142184,140204],{},[389,142186,142187],{"className":127492,"code":130849,"language":127494,"meta":316,"style":316},[395,142188,142189,142193,142207,142211],{"__ignoreMap":316},[398,142190,142191],{"class":400,"line":401},[398,142192,130856],{"class":467},[398,142194,142195,142197,142199,142201,142203,142205],{"class":400,"line":317},[398,142196,1312],{"class":408},[398,142198,51804],{"class":51493},[398,142200,53679],{"class":2239},[398,142202,454],{"class":408},[398,142204,130869],{"class":513},[398,142206,51500],{"class":408},[398,142208,142209],{"class":400,"line":320},[398,142210,130876],{"class":408},[398,142212,142213,142215,142217],{"class":400,"line":1470},[398,142214,51978],{"class":408},[398,142216,51804],{"class":51493},[398,142218,51500],{"class":408},[343,142220,142222],{"id":142221},"_164-项目总结","16.4 项目总结",[38,142224,142225,142228,142231,142234],{},[41,142226,142227],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[41,142229,142230],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[41,142232,142233],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[41,142235,142236],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[1738,142238],{"style":126601,"src":142239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[38,142241,142242],{"start":1476},[41,142243,142244],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[1738,142246],{"style":126601,"src":142247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[38,142249,142250],{"start":1490},[41,142251,142252],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[1738,142254],{"style":126601,"src":142255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[389,142257,142258],{"className":127492,"code":136902,"language":127494,"meta":316,"style":316},[395,142259,142260],{"__ignoreMap":316},[398,142261,142262,142264,142266,142268,142270,142272,142274,142276,142278,142280,142282,142284],{"class":400,"line":401},[398,142263,1312],{"class":408},[398,142265,54014],{"class":51493},[398,142267,54017],{"class":2239},[398,142269,454],{"class":408},[398,142271,62892],{"class":513},[398,142273,15197],{"class":2239},[398,142275,454],{"class":408},[398,142277,136923],{"class":513},[398,142279,61213],{"class":2239},[398,142281,454],{"class":408},[398,142283,136930],{"class":513},[398,142285,51500],{"class":408},[38,142287,142288,142291],{"start":1496},[41,142289,142290],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[41,142292,142293],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[5403,142295,142296],{},"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":316,"searchDepth":317,"depth":317,"links":142298},[142299,142304,142311,142319],{"id":139925,"depth":317,"text":139926,"children":142300},[142301,142302,142303],{"id":139929,"depth":320,"text":139930},{"id":140660,"depth":320,"text":140661},{"id":140973,"depth":320,"text":140974},{"id":141273,"depth":317,"text":141274,"children":142305},[142306,142307,142309],{"id":141277,"depth":320,"text":141278},{"id":141295,"depth":320,"text":142308},"16.2.2 列表页 header 和 nav 修改",{"id":141579,"depth":320,"text":142310},"16.2.3 列表页主体 sk_container",{"id":141771,"depth":317,"text":141772,"children":142312},[142313,142314,142316,142318],{"id":141786,"depth":320,"text":141787},{"id":141798,"depth":320,"text":142315},"16.3.2 header 头部实现",{"id":141877,"depth":320,"text":142317},"16.3.3 registerarea 主体模块实现",{"id":142155,"depth":320,"text":142156},{"id":142221,"depth":317,"text":142222},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139917,"description":23654},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142326,"title":142327,"body":142328,"description":23654,"extension":326,"meta":142436,"navigation":328,"path":142437,"seo":142438,"stem":142439,"__hash__":142440},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142329,"toc":142431},[142330,142333,142337,142340,142343,142352,142361,142365,142370,142377,142395,142398,142401,142404,142407,142410,142413,142416,142419,142422,142425,142428],[10,142331,142327],{"id":142332},"_17-web服务器与网站发布",[343,142334,142336],{"id":142335},"_171-web服务器","17.1 Web服务器",[19,142338,142339],{},"把自己网站上传到服务器上，可以让其他人访问",[1738,142341],{"style":126601,"src":142342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,142344,142345,142348,142349],{},[23,142346,142347],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[23,142350,142351],{},"Web 服务器等",[19,142353,142354,142355,101211,142358,78],{},"根据服务器在网络中所在的位置不同，又可分为 ",[23,142356,142357],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[23,142359,142360],{},"远程服务器",[14,142362,142364],{"id":142363},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,142366,142367],{},[23,142368,142369],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,142371,142372,142373],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[640,142374,142375],{"href":142375,"rel":142376},"http:\u002F\u002Ffree.3v.do\u002F",[24142],[67,142378,142379,142382,142385,142392],{},[41,142380,142381],{},"去免费空间网站注册账号。",[41,142383,142384],{},"记录下主机名、用户名、密码、域名。",[41,142386,142387,142388,142391],{},"利用 ",[395,142389,142390],{},"utftp"," 软件 上传网站到远程服务器",[41,142393,142394],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,142396,142397],{},"使用软件上传，对上传软件文件进行解压",[1738,142399],{"style":126601,"src":142400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[1738,142402],{"style":126601,"src":142403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,142405,142406],{},"输入刚刚申请的服务器账号信息：",[1738,142408],{"style":126601,"src":142409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[1738,142411],{"style":126601,"src":142412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[1738,142414],{"style":126601,"src":142415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[1738,142417],{"style":126601,"src":142418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,142420,142421],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[1738,142423],{"style":126601,"src":142424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,142426,142427],{},"浏览器输入域名即可访问",[19,142429,142430],{},"首页一定必须是index",{"title":316,"searchDepth":317,"depth":317,"links":142432},[142433],{"id":142335,"depth":317,"text":142336,"children":142434},[142435],{"id":142363,"depth":320,"text":142364},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142327,"description":23654},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142442,"title":142443,"body":142444,"description":23654,"extension":326,"meta":143371,"navigation":328,"path":143372,"seo":143373,"stem":143374,"__hash__":143375},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142445,"toc":143354},[142446,142449,142453,142456,142459,142470,142473,142477,142481,142486,142489,142492,142495,142498,142502,142528,142532,142536,142539,142542,142546,142579,142583,142586,142589,142653,142657,142661,142664,142667,142670,142674,142719,142723,142726,142756,142760,142764,142767,142770,142774,142777,142846,142849,142957,142959,142965,142969,142972,142975,143071,143074,143078,143102,143106,143109,143113,143116,143120,143123,143126,143129,143132,143136,143139,143142,143146,143150,143153,143156,143159,143162,143166,143169,143173,143176,143179,143224,143228,143232,143235,143238,143241,143273,143277,143280,143314,143318,143321,143351],[10,142447,142443],{"id":142448},"_18-2d动画与3d转换",[343,142450,142452],{"id":142451},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,142454,142455],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,142457,142458],{},"转换（transform）你可以简单理解为变形",[67,142460,142461,142464,142467],{},[41,142462,142463],{},"移动：translate",[41,142465,142466],{},"旋转：rotate",[41,142468,142469],{},"缩放：scale",[1738,142471],{"style":126601,"src":142472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[14,142474,142476],{"id":142475},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22275,142478,142480],{"id":142479},"_18111-translate介绍","18.1.1.1 translate介绍",[19,142482,142483,142484],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[23,142485,133404],{},[1738,142487],{"style":126601,"src":142488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,142490,142491],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,142493,142494],{},"对于行内元素无效",[19,142496,142497],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22275,142499,142501],{"id":142500},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[389,142503,142504],{"className":126745,"code":138934,"language":126747,"meta":316,"style":316},[395,142505,142506,142512,142524],{"__ignoreMap":316},[398,142507,142508,142510],{"class":400,"line":401},[398,142509,51804],{"class":51493},[398,142511,15849],{"class":408},[398,142513,142514,142516,142518,142520,142522],{"class":400,"line":317},[398,142515,70663],{"class":457},[398,142517,51630],{"class":408},[398,142519,593],{"class":457},[398,142521,51749],{"class":457},[398,142523,1566],{"class":408},[398,142525,142526],{"class":400,"line":320},[398,142527,1841],{"class":408},[14,142529,142531],{"id":142530},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22275,142533,142535],{"id":142534},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,142537,142538],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[1738,142540],{"style":126601,"src":142541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22275,142543,142545],{"id":142544},"_18122-旋转效果","18.1.2.2 旋转效果",[389,142547,142549],{"className":126745,"code":142548,"language":126747,"meta":316,"style":316},"div {\n  transform: rotate(45deg);\n}\n",[395,142550,142551,142557,142575],{"__ignoreMap":316},[398,142552,142553,142555],{"class":400,"line":401},[398,142554,51804],{"class":51493},[398,142556,15849],{"class":408},[398,142558,142559,142561,142563,142566,142568,142570,142573],{"class":400,"line":317},[398,142560,136729],{"class":457},[398,142562,51630],{"class":408},[398,142564,142565],{"class":457},"rotate",[398,142567,409],{"class":408},[398,142569,931],{"class":457},[398,142571,142572],{"class":404},"deg",[398,142574,2995],{"class":408},[398,142576,142577],{"class":400,"line":320},[398,142578,1841],{"class":408},[22275,142580,142582],{"id":142581},"_18123-三角做法","18.1.2.3 三角做法",[19,142584,142585],{},"该下标当经过最外层大盒子时会实现向上反转",[1738,142587],{"style":126601,"src":142588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[389,142590,142591],{"className":126745,"code":135265,"language":126747,"meta":316,"style":316},[395,142592,142593,142597,142603,142613,142623,142639,142649],{"__ignoreMap":316},[398,142594,142595],{"class":400,"line":401},[398,142596,135272],{"class":467},[398,142598,142599,142601],{"class":400,"line":317},[398,142600,135277],{"class":2239},[398,142602,15849],{"class":408},[398,142604,142605,142607,142609,142611],{"class":400,"line":320},[398,142606,70761],{"class":457},[398,142608,51630],{"class":408},[398,142610,593],{"class":457},[398,142612,1566],{"class":408},[398,142614,142615,142617,142619,142621],{"class":400,"line":1470},[398,142616,70981],{"class":457},[398,142618,51630],{"class":408},[398,142620,593],{"class":457},[398,142622,1566],{"class":408},[398,142624,142625,142627,142629,142631,142633,142635,142637],{"class":400,"line":1476},[398,142626,71089],{"class":457},[398,142628,51630],{"class":408},[398,142630,848],{"class":457},[398,142632,51685],{"class":404},[398,142634,51714],{"class":457},[398,142636,64184],{"class":457},[398,142638,1566],{"class":408},[398,142640,142641,142643,142645,142647],{"class":400,"line":1490},[398,142642,135320],{"class":457},[398,142644,51630],{"class":408},[398,142646,62562],{"class":457},[398,142648,1566],{"class":408},[398,142650,142651],{"class":400,"line":1496},[398,142652,1841],{"class":408},[14,142654,142656],{"id":142655},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22275,142658,142660],{"id":142659},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,142662,142663],{},"设置中心点",[1738,142665],{"style":126601,"src":142666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,142668,142669],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22275,142671,142673],{"id":142672},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[389,142675,142677],{"className":126745,"code":142676,"language":126747,"meta":316,"style":316},"\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",[395,142678,142679,142684,142690,142705,142710,142715],{"__ignoreMap":316},[398,142680,142681],{"class":400,"line":401},[398,142682,142683],{"class":467},"\u002F* 转换中心点 *\u002F\n",[398,142685,142686,142688],{"class":400,"line":317},[398,142687,51804],{"class":51493},[398,142689,15849],{"class":408},[398,142691,142692,142695,142697,142699,142701,142703],{"class":400,"line":320},[398,142693,142694],{"class":457},"  transform-origin",[398,142696,51630],{"class":408},[398,142698,51785],{"class":457},[398,142700,17421],{"class":457},[398,142702,130608],{"class":408},[398,142704,135418],{"class":467},[398,142706,142707],{"class":400,"line":1470},[398,142708,142709],{"class":467},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[398,142711,142712],{"class":400,"line":1476},[398,142713,142714],{"class":467},"  \u002F* transform-origin: left top; *\u002F\n",[398,142716,142717],{"class":400,"line":1490},[398,142718,1841],{"class":408},[22275,142720,142722],{"id":142721},"_18133-旋转案例","18.1.3.3 旋转案例",[1738,142724],{"style":126601,"src":142725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[389,142727,142728],{"className":126745,"code":142548,"language":126747,"meta":316,"style":316},[395,142729,142730,142736,142752],{"__ignoreMap":316},[398,142731,142732,142734],{"class":400,"line":401},[398,142733,51804],{"class":51493},[398,142735,15849],{"class":408},[398,142737,142738,142740,142742,142744,142746,142748,142750],{"class":400,"line":317},[398,142739,136729],{"class":457},[398,142741,51630],{"class":408},[398,142743,142565],{"class":457},[398,142745,409],{"class":408},[398,142747,931],{"class":457},[398,142749,142572],{"class":404},[398,142751,2995],{"class":408},[398,142753,142754],{"class":400,"line":320},[398,142755,1841],{"class":408},[14,142757,142759],{"id":142758},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22275,142761,142763],{"id":142762},"_18141-scale介绍","18.1.4.1 scale介绍",[19,142765,142766],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[1738,142768],{"style":126601,"src":142769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22275,142771,142773],{"id":142772},"_18142-分页按钮","18.1.4.2 分页按钮",[1738,142775],{"style":126601,"src":142776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[389,142778,142780],{"className":126745,"code":142779,"language":126747,"meta":316,"style":316},"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",[395,142781,142782,142788,142804,142808,142812,142817,142823,142837,142842],{"__ignoreMap":316},[398,142783,142784,142786],{"class":400,"line":401},[398,142785,51804],{"class":51493},[398,142787,15849],{"class":408},[398,142789,142790,142792,142794,142797,142799,142802],{"class":400,"line":317},[398,142791,136729],{"class":457},[398,142793,51630],{"class":408},[398,142795,142796],{"class":457},"scale",[398,142798,409],{"class":408},[398,142800,142801],{"class":457},"1.2",[398,142803,2995],{"class":408},[398,142805,142806],{"class":400,"line":320},[398,142807,1841],{"class":408},[398,142809,142810],{"class":400,"line":1470},[398,142811,136206],{"class":408},[398,142813,142814],{"class":400,"line":1476},[398,142815,142816],{"class":467},"\u002F* 2D 缩放 *\u002F\n",[398,142818,142819,142821],{"class":400,"line":1490},[398,142820,51804],{"class":51493},[398,142822,15849],{"class":408},[398,142824,142825,142827,142829,142831,142833,142835],{"class":400,"line":1496},[398,142826,136729],{"class":457},[398,142828,51630],{"class":408},[398,142830,142796],{"class":457},[398,142832,409],{"class":408},[398,142834,142801],{"class":457},[398,142836,2995],{"class":408},[398,142838,142839],{"class":400,"line":1587},[398,142840,142841],{"class":467},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[398,142843,142844],{"class":400,"line":1593},[398,142845,1841],{"class":408},[19,142847,142848],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[389,142850,142852],{"className":126745,"code":142851,"language":126747,"meta":316,"style":316},"\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",[395,142853,142854,142859,142869,142890,142911,142915,142920,142926,142953],{"__ignoreMap":316},[398,142855,142856],{"class":400,"line":401},[398,142857,142858],{"class":467},"\u002F* 定义动画 *\u002F\n",[398,142860,142861,142864,142867],{"class":400,"line":317},[398,142862,142863],{"class":404},"@keyframes",[398,142865,142866],{"class":5493}," move",[398,142868,15849],{"class":408},[398,142870,142871,142874,142876,142878,142880,142883,142885,142887],{"class":400,"line":320},[398,142872,142873],{"class":2239},"  0%",[398,142875,80000],{"class":408},[398,142877,48327],{"class":457},[398,142879,51630],{"class":408},[398,142881,142882],{"class":457},"translateX",[398,142884,409],{"class":408},[398,142886,593],{"class":457},[398,142888,142889],{"class":408},"); }\n",[398,142891,142892,142895,142897,142899,142901,142903,142905,142907,142909],{"class":400,"line":1470},[398,142893,142894],{"class":2239},"  100%",[398,142896,80000],{"class":408},[398,142898,48327],{"class":457},[398,142900,51630],{"class":408},[398,142902,142882],{"class":457},[398,142904,409],{"class":408},[398,142906,713],{"class":457},[398,142908,51685],{"class":404},[398,142910,142889],{"class":408},[398,142912,142913],{"class":400,"line":1476},[398,142914,1841],{"class":408},[398,142916,142917],{"class":400,"line":1490},[398,142918,142919],{"class":467},"\u002F* 调用动画 *\u002F\n",[398,142921,142922,142924],{"class":400,"line":1496},[398,142923,51804],{"class":51493},[398,142925,15849],{"class":408},[398,142927,142928,142931,142933,142935,142937,142939,142941,142943,142945,142948,142951],{"class":400,"line":1587},[398,142929,142930],{"class":457},"  animation",[398,142932,51630],{"class":408},[398,142934,135431],{"class":457},[398,142936,25396],{"class":457},[398,142938,1097],{"class":404},[398,142940,78873],{"class":457},[398,142942,4369],{"class":457},[398,142944,1097],{"class":404},[398,142946,142947],{"class":457}," infinite",[398,142949,142950],{"class":457}," alternate",[398,142952,1566],{"class":408},[398,142954,142955],{"class":400,"line":1593},[398,142956,1841],{"class":408},[19,142958,142848],{},[389,142960,142963],{"className":142961,"code":142962,"language":5464},[5462],"\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",[395,142964,142962],{"__ignoreMap":316},[22275,142966,142968],{"id":142967},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,142970,142971],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[1738,142973],{"style":126601,"src":142974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[389,142976,142977],{"className":126745,"code":142851,"language":126747,"meta":316,"style":316},[395,142978,142979,142983,142991,143009,143029,143033,143037,143043,143067],{"__ignoreMap":316},[398,142980,142981],{"class":400,"line":401},[398,142982,142858],{"class":467},[398,142984,142985,142987,142989],{"class":400,"line":317},[398,142986,142863],{"class":404},[398,142988,142866],{"class":5493},[398,142990,15849],{"class":408},[398,142992,142993,142995,142997,142999,143001,143003,143005,143007],{"class":400,"line":320},[398,142994,142873],{"class":2239},[398,142996,80000],{"class":408},[398,142998,48327],{"class":457},[398,143000,51630],{"class":408},[398,143002,142882],{"class":457},[398,143004,409],{"class":408},[398,143006,593],{"class":457},[398,143008,142889],{"class":408},[398,143010,143011,143013,143015,143017,143019,143021,143023,143025,143027],{"class":400,"line":1470},[398,143012,142894],{"class":2239},[398,143014,80000],{"class":408},[398,143016,48327],{"class":457},[398,143018,51630],{"class":408},[398,143020,142882],{"class":457},[398,143022,409],{"class":408},[398,143024,713],{"class":457},[398,143026,51685],{"class":404},[398,143028,142889],{"class":408},[398,143030,143031],{"class":400,"line":1476},[398,143032,1841],{"class":408},[398,143034,143035],{"class":400,"line":1490},[398,143036,142919],{"class":467},[398,143038,143039,143041],{"class":400,"line":1496},[398,143040,51804],{"class":51493},[398,143042,15849],{"class":408},[398,143044,143045,143047,143049,143051,143053,143055,143057,143059,143061,143063,143065],{"class":400,"line":1587},[398,143046,142930],{"class":457},[398,143048,51630],{"class":408},[398,143050,135431],{"class":457},[398,143052,25396],{"class":457},[398,143054,1097],{"class":404},[398,143056,78873],{"class":457},[398,143058,4369],{"class":457},[398,143060,1097],{"class":404},[398,143062,142947],{"class":457},[398,143064,142950],{"class":457},[398,143066,1566],{"class":408},[398,143068,143069],{"class":400,"line":1593},[398,143070,1841],{"class":408},[19,143072,143073],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[14,143075,143077],{"id":143076},"_1823-知识点回顾","18.2.3 知识点回顾",[389,143079,143080],{"className":126745,"code":128914,"language":126747,"meta":316,"style":316},[395,143081,143082,143088,143098],{"__ignoreMap":316},[398,143083,143084,143086],{"class":400,"line":401},[398,143085,51804],{"class":51493},[398,143087,15849],{"class":408},[398,143089,143090,143092,143094,143096],{"class":400,"line":317},[398,143091,128927],{"class":457},[398,143093,51630],{"class":408},[398,143095,61929],{"class":457},[398,143097,1566],{"class":408},[398,143099,143100],{"class":400,"line":320},[398,143101,1841],{"class":408},[343,143103,143105],{"id":143104},"_183-3d-转换","18.3 3D 转换",[19,143107,143108],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[14,143110,143112],{"id":143111},"_1831-坐标轴认识","18.3.1 坐标轴认识",[1738,143114],{"style":126601,"src":143115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[14,143117,143119],{"id":143118},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[1738,143121],{"style":126601,"src":143122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,143124,143125],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,143127,143128],{},"translate3d的效果需要搭配透视perspective来使用",[1738,143130],{"style":126601,"src":143131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[14,143133,143135],{"id":143134},"_1833-透视-perspective","18.3.3 透视 perspective",[1738,143137],{"style":126601,"src":143138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,143140,143141],{},"透视写在父盒子上，单位为像素",[14,143143,143145],{"id":143144},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22275,143147,143149],{"id":143148},"_18341-分开解释","18.3.4.1 分开解释",[1738,143151],{"style":126601,"src":143152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[1738,143154],{"style":126601,"src":143155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[1738,143157],{"style":126601,"src":143158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,143160,143161],{},"总结来说就是左手原则",[22275,143163,143165],{"id":143164},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[1738,143167],{"style":126601,"src":143168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[14,143170,143172],{"id":143171},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[1738,143174],{"style":126601,"src":143175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[1738,143177],{"style":126601,"src":143178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[389,143180,143182],{"className":126745,"code":143181,"language":126747,"meta":316,"style":316},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[395,143183,143184,143190,143203,143220],{"__ignoreMap":316},[398,143185,143186,143188],{"class":400,"line":401},[398,143187,51804],{"class":51493},[398,143189,15849],{"class":408},[398,143191,143192,143195,143197,143199,143201],{"class":400,"line":317},[398,143193,143194],{"class":457},"  perspective",[398,143196,51630],{"class":408},[398,143198,65267],{"class":457},[398,143200,51685],{"class":404},[398,143202,1566],{"class":408},[398,143204,143205,143207,143209,143212,143214,143216,143218],{"class":400,"line":320},[398,143206,136729],{"class":457},[398,143208,51630],{"class":408},[398,143210,143211],{"class":457},"rotateX",[398,143213,409],{"class":408},[398,143215,931],{"class":457},[398,143217,142572],{"class":404},[398,143219,2995],{"class":408},[398,143221,143222],{"class":400,"line":1470},[398,143223,1841],{"class":408},[14,143225,143227],{"id":143226},"_1836-案例","18.3.6 案例",[22275,143229,143231],{"id":143230},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[1738,143233],{"style":126601,"src":143234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[1738,143236],{"style":126601,"src":143237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[1738,143239],{"style":126601,"src":143240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[389,143242,143244],{"className":126745,"code":143243,"language":126747,"meta":316,"style":316},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[395,143245,143246,143251,143257,143269],{"__ignoreMap":316},[398,143247,143248],{"class":400,"line":401},[398,143249,143250],{"class":467},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[398,143252,143253,143255],{"class":400,"line":317},[398,143254,133742],{"class":2239},[398,143256,15849],{"class":408},[398,143258,143259,143261,143263,143265,143267],{"class":400,"line":320},[398,143260,143194],{"class":457},[398,143262,51630],{"class":408},[398,143264,65267],{"class":457},[398,143266,51685],{"class":404},[398,143268,1566],{"class":408},[398,143270,143271],{"class":400,"line":1470},[398,143272,1841],{"class":408},[22275,143274,143276],{"id":143275},"_18362-3d导航栏","18.3.6.2 3D导航栏",[1738,143278],{"style":126601,"src":143279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[389,143281,143282],{"className":127492,"code":130849,"language":127494,"meta":316,"style":316},[395,143283,143284,143288,143302,143306],{"__ignoreMap":316},[398,143285,143286],{"class":400,"line":401},[398,143287,130856],{"class":467},[398,143289,143290,143292,143294,143296,143298,143300],{"class":400,"line":317},[398,143291,1312],{"class":408},[398,143293,51804],{"class":51493},[398,143295,53679],{"class":2239},[398,143297,454],{"class":408},[398,143299,130869],{"class":513},[398,143301,51500],{"class":408},[398,143303,143304],{"class":400,"line":320},[398,143305,130876],{"class":408},[398,143307,143308,143310,143312],{"class":400,"line":1470},[398,143309,51978],{"class":408},[398,143311,51804],{"class":51493},[398,143313,51500],{"class":408},[22275,143315,143317],{"id":143316},"_18363-旋转木马","18.3.6.3 旋转木马",[1738,143319],{"style":126601,"src":143320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[389,143322,143323],{"className":126745,"code":142548,"language":126747,"meta":316,"style":316},[395,143324,143325,143331,143347],{"__ignoreMap":316},[398,143326,143327,143329],{"class":400,"line":401},[398,143328,51804],{"class":51493},[398,143330,15849],{"class":408},[398,143332,143333,143335,143337,143339,143341,143343,143345],{"class":400,"line":317},[398,143334,136729],{"class":457},[398,143336,51630],{"class":408},[398,143338,142565],{"class":457},[398,143340,409],{"class":408},[398,143342,931],{"class":457},[398,143344,142572],{"class":404},[398,143346,2995],{"class":408},[398,143348,143349],{"class":400,"line":320},[398,143350,1841],{"class":408},[5403,143352,143353],{},"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":316,"searchDepth":317,"depth":317,"links":143355},[143356,143363],{"id":142451,"depth":317,"text":142452,"children":143357},[143358,143359,143360,143361,143362],{"id":142475,"depth":320,"text":142476},{"id":142530,"depth":320,"text":142531},{"id":142655,"depth":320,"text":142656},{"id":142758,"depth":320,"text":142759},{"id":143076,"depth":320,"text":143077},{"id":143104,"depth":317,"text":143105,"children":143364},[143365,143366,143367,143368,143369,143370],{"id":143111,"depth":320,"text":143112},{"id":143118,"depth":320,"text":143119},{"id":143134,"depth":320,"text":143135},{"id":143144,"depth":320,"text":143145},{"id":143171,"depth":320,"text":143172},{"id":143226,"depth":320,"text":143227},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142443,"description":23654},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143377,"title":143378,"body":143379,"description":23654,"extension":326,"meta":143582,"navigation":328,"path":143583,"seo":143584,"stem":143585,"__hash__":143586},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143380,"toc":143571},[143381,143384,143388,143391,143394,143398,143401,143404,143407,143411,143414,143418,143421,143425,143428,143432,143446,143450,143475,143478,143481,143498,143502,143506,143509,143512,143516,143519,143522,143540,143544,143547,143561,143565,143568],[10,143382,143378],{"id":143383},"_19-移动端基础-前缀现状与视口",[343,143385,143387],{"id":143386},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[1738,143389],{"style":126601,"src":143390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,143392,143393],{},"意思就是加个前缀，增加兼容性",[343,143395,143397],{"id":143396},"_192-移动端现状认识","19.2 移动端现状认识",[1738,143399],{"style":126601,"src":143400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,143402,143403],{},"调试方法：",[1738,143405],{"style":126601,"src":143406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[343,143408,143410],{"id":143409},"_193-视口","19.3 视口",[19,143412,143413],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[14,143415,143417],{"id":143416},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[1738,143419],{"style":126601,"src":143420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[14,143422,143424],{"id":143423},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[1738,143426],{"style":126601,"src":143427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[14,143429,143431],{"id":143430},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[67,143433,143434,143437,143440,143443],{},[41,143435,143436],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[41,143438,143439],{},"理想视口，对设备来讲，是最理想的视口尺寸",[41,143441,143442],{},"需要手动添写meta视口标签通知浏览器操作",[41,143444,143445],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[14,143447,143449],{"id":143448},"_1934-meta视口标签","19.3.4 meta视口标签",[389,143451,143453],{"className":127492,"code":143452,"language":127494,"meta":316,"style":316},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[395,143454,143455],{"__ignoreMap":316},[398,143456,143457,143459,143461,143463,143465,143467,143469,143471,143473],{"class":400,"line":401},[398,143458,1312],{"class":408},[398,143460,51537],{"class":51493},[398,143462,15197],{"class":2239},[398,143464,454],{"class":408},[398,143466,51584],{"class":513},[398,143468,51564],{"class":2239},[398,143470,454],{"class":408},[398,143472,51591],{"class":513},[398,143474,51500],{"class":408},[1738,143476],{"style":126601,"src":143477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,143479,143480],{},"标准视口设置：",[38,143482,143483,143486,143489,143492,143495],{},[41,143484,143485],{},"视口宽度和设备保持一致",[41,143487,143488],{},"视口的默认缩放比例1.0",[41,143490,143491],{},"不允许用户自行缩放",[41,143493,143494],{},"最大允许的缩放比例1.0",[41,143496,143497],{},"最小允许的缩放比例1.0",[14,143499,143501],{"id":143500},"_1935-二倍图","19.3.5 二倍图",[22275,143503,143505],{"id":143504},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[1738,143507],{"style":126601,"src":143508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[1738,143510],{"style":126601,"src":143511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22275,143513,143515],{"id":143514},"_19352-多倍图","19.3.5.2 多倍图",[1738,143517],{"style":126601,"src":143518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,143520,143521],{},"二倍图法，代码如下：",[389,143523,143525],{"className":126745,"code":143524,"language":126747,"meta":316,"style":316},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[395,143526,143527,143532],{"__ignoreMap":316},[398,143528,143529],{"class":400,"line":401},[398,143530,143531],{"class":467},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[398,143533,143534,143537],{"class":400,"line":317},[398,143535,143536],{"class":51493},"background-size",[398,143538,143539],{"class":408},": 50% 50%;\n",[22275,143541,143543],{"id":143542},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[1738,143545],{"style":126601,"src":143546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[38,143548,143549,143552,143555,143558],{},[41,143550,143551],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[41,143553,143554],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[41,143556,143557],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[41,143559,143560],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22275,143562,143564],{"id":143563},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[1738,143566],{"style":126601,"src":143567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[5403,143569,143570],{},"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":316,"searchDepth":317,"depth":317,"links":143572},[143573,143574,143575],{"id":143386,"depth":317,"text":143387},{"id":143396,"depth":317,"text":143397},{"id":143409,"depth":317,"text":143410,"children":143576},[143577,143578,143579,143580,143581],{"id":143416,"depth":320,"text":143417},{"id":143423,"depth":320,"text":143424},{"id":143430,"depth":320,"text":143431},{"id":143448,"depth":320,"text":143449},{"id":143500,"depth":320,"text":143501},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143378,"description":23654},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143588,"title":143589,"body":143590,"description":23654,"extension":326,"meta":144467,"navigation":328,"path":144468,"seo":144469,"stem":144470,"__hash__":144471},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143591,"toc":144451},[143592,143595,143599,143606,143609,143616,143619,143624,143627,143631,143635,143642,143645,143648,143652,143655,143658,143661,143664,143667,143671,143674,143678,143680,143683,143686,143689,143692,143694,143697,143699,143729,143731,143761,143765,143768,143772,143775,143792,143795,143798,143874,143876,143879,143882,143885,143888,143890,143893,143896,143900,143922,143925,143928,143932,143935,143941,143944,143948,143951,143954,143958,143961,143964,143967,143971,143974,143977,143980,143983,143987,143990,143994,144001,144004,144007,144010,144013,144023,144026,144029,144036,144039,144043,144046,144049,144053,144056,144059,144062,144107,144110,144113,144116,144118,144247,144249,144287,144290,144293,144295,144413,144415,144449],[10,143593,143589],{"id":143594},"_20-移动端布局实战上篇",[343,143596,143598],{"id":143597},"_201-移动端主流方案","20.1 移动端主流方案",[38,143600,143601],{},[41,143602,143603],{},[23,143604,143605],{},"单独移动端页面（主流）",[1738,143607],{"style":126601,"src":143608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[38,143610,143611],{"start":317},[41,143612,143613],{},[23,143614,143615],{},"响应式兼容PC移动端",[1738,143617],{"style":126601,"src":143618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[38,143620,143621],{"start":320},[41,143622,143623],{},"两种页面选型布局方式",[1738,143625],{"style":126601,"src":143626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[343,143628,143630],{"id":143629},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[14,143632,143634],{"id":143633},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,143636,143637,143638],{},"官网地址： ",[640,143639,143640],{"href":143640,"rel":143641},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[24142],[1738,143643],{"style":126601,"src":143644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[1738,143646],{"style":126601,"src":143647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[14,143649,143651],{"id":143650},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[1738,143653],{"style":126601,"src":143654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[1738,143656],{"style":126601,"src":143657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,143659,143660],{},"去除高亮：",[19,143662,143663],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,143665,143666],{},"-webkit- tap-highlight-color: transparent;",[343,143668,143670],{"id":143669},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[1738,143672],{"style":126601,"src":143673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[343,143675,143677],{"id":143676},"_204-流式布局案例","20.4 流式布局案例",[19,143679,438],{},[19,143681,143682],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,143684,143685],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,143687,143688],{},"图片格式：",[1738,143690],{"style":126601,"src":143691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,143693,135788],{},[1738,143695],{"style":126601,"src":143696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,143698,140115],{},[389,143700,143701],{"className":127492,"code":134247,"language":127494,"meta":316,"style":316},[395,143702,143703],{"__ignoreMap":316},[398,143704,143705,143707,143709,143711,143713,143715,143717,143719,143721,143723,143725,143727],{"class":400,"line":401},[398,143706,1312],{"class":408},[398,143708,1738],{"class":51493},[398,143710,55432],{"class":2239},[398,143712,454],{"class":408},[398,143714,134262],{"class":513},[398,143716,55440],{"class":2239},[398,143718,454],{"class":408},[398,143720,134269],{"class":513},[398,143722,134272],{"class":2239},[398,143724,454],{"class":408},[398,143726,134277],{"class":513},[398,143728,51500],{"class":408},[19,143730,140204],{},[389,143732,143733],{"className":127492,"code":134247,"language":127494,"meta":316,"style":316},[395,143734,143735],{"__ignoreMap":316},[398,143736,143737,143739,143741,143743,143745,143747,143749,143751,143753,143755,143757,143759],{"class":400,"line":401},[398,143738,1312],{"class":408},[398,143740,1738],{"class":51493},[398,143742,55432],{"class":2239},[398,143744,454],{"class":408},[398,143746,134262],{"class":513},[398,143748,55440],{"class":2239},[398,143750,454],{"class":408},[398,143752,134269],{"class":513},[398,143754,134272],{"class":2239},[398,143756,454],{"class":408},[398,143758,134277],{"class":513},[398,143760,51500],{"class":408},[343,143762,143764],{"id":143763},"_205-flex布局","20.5 flex布局",[1738,143766],{"style":126601,"src":143767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[14,143769,143771],{"id":143770},"_2051-布局原理","20.5.1 布局原理",[19,143773,143774],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[67,143776,143777,143780,143783,143786,143789],{},[41,143778,143779],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[41,143781,143782],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[41,143784,143785],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[41,143787,143788],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[41,143790,143791],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,143793,143794],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,143796,143797],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[389,143799,143801],{"className":126745,"code":143800,"language":126747,"meta":316,"style":316},"\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",[395,143802,143803,143808,143815,143825,143837,143848,143859,143870],{"__ignoreMap":316},[398,143804,143805],{"class":400,"line":401},[398,143806,143807],{"class":467},"\u002F* Flex 弹性布局 *\u002F\n",[398,143809,143810,143813],{"class":400,"line":317},[398,143811,143812],{"class":2239},".container",[398,143814,15849],{"class":408},[398,143816,143817,143819,143821,143823],{"class":400,"line":320},[398,143818,128361],{"class":457},[398,143820,51630],{"class":408},[398,143822,51670],{"class":457},[398,143824,1566],{"class":408},[398,143826,143827,143830,143832,143835],{"class":400,"line":1470},[398,143828,143829],{"class":457},"  flex-direction",[398,143831,51630],{"class":408},[398,143833,143834],{"class":457},"row",[398,143836,1566],{"class":408},[398,143838,143839,143842,143844,143846],{"class":400,"line":1476},[398,143840,143841],{"class":457},"  justify-content",[398,143843,51630],{"class":408},[398,143845,51861],{"class":457},[398,143847,1566],{"class":408},[398,143849,143850,143853,143855,143857],{"class":400,"line":1490},[398,143851,143852],{"class":457},"  align-items",[398,143854,51630],{"class":408},[398,143856,51785],{"class":457},[398,143858,1566],{"class":408},[398,143860,143861,143864,143866,143868],{"class":400,"line":1496},[398,143862,143863],{"class":457},"  flex-wrap",[398,143865,51630],{"class":408},[398,143867,78803],{"class":457},[398,143869,1566],{"class":408},[398,143871,143872],{"class":400,"line":1587},[398,143873,1841],{"class":408},[19,143875,70646],{},[19,143877,143878],{},".form-item .male-label {",[19,143880,143881],{},"   margin-right: 20px;",[19,143883,143884],{},"   display: inline-flex;",[19,143886,143887],{},"   align-items: center;",[19,143889,1348],{},[1738,143891],{"style":126601,"src":143892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[1738,143894],{"style":126601,"src":143895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[14,143897,143899],{"id":143898},"_2052-常见父项属性","20.5.2 常见父项属性",[38,143901,143902,143905,143908,143911,143914,143917,143920],{},[41,143903,143904],{},"flex-direction：设置主轴的方向",[41,143906,143907],{},"justify-content：设置主轴上的子元素排列方式",[41,143909,143910],{},"flex-wrap：设置子元素是否换行",[41,143912,143913],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[41,143915,143916],{},"align-items：设置侧轴上的子元素排列方式（单行）",[41,143918,143919],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[41,143921,143904],{},[1738,143923],{"style":126601,"src":143924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[1738,143926],{"style":126601,"src":143927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[38,143929,143930],{"start":317},[41,143931,143907],{},[1738,143933],{"style":126601,"src":143934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,143936,143937,143940],{},[395,143938,143939],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,143942,143943],{},"跟着主轴走",[38,143945,143946],{"start":320},[41,143947,143910],{},[1738,143949],{"style":126601,"src":143950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,143952,143953],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[38,143955,143956],{"start":1470},[41,143957,143913],{},[1738,143959],{"style":126601,"src":143960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,143962,143963],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,143965,143966],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[38,143968,143969],{"start":1476},[41,143970,143916],{},[1738,143972],{"style":126601,"src":143973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,143975,143976],{},"align-items与align-content之间的区别：",[19,143978,143979],{},"单找items，多找content",[1738,143981],{"style":126601,"src":143982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[38,143984,143985],{"start":1490},[41,143986,143919],{},[1738,143988],{"style":126601,"src":143989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[14,143991,143993],{"id":143992},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[38,143995,143996],{},[41,143997,143998],{},[23,143999,144000],{},"flex 属性",[19,144002,144003],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[1738,144005],{"style":126601,"src":144006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,144008,144009],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,144011,144012],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[38,144014,144015],{"start":317},[41,144016,144017,14072,144020],{},[23,144018,144019],{},"align-self",[23,144021,144022],{},"控制子项自己在侧轴上的排列方式",[1738,144024],{"style":126601,"src":144025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,144027,144028],{},"单个子盒子在父盒子侧轴上的排列方式",[38,144030,144031],{"start":320},[41,144032,144033,144035],{},[23,144034,95490],{}," 属性定义项目的排列顺序",[1738,144037],{"style":126601,"src":144038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[14,144040,144042],{"id":144041},"_2054-背景线性渐变","20.5.4 背景线性渐变",[1738,144044],{"style":126601,"src":144045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,144047,144048],{},"必须要添加浏览器的私有前缀",[14,144050,144052],{"id":144051},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,144054,144055],{},"学到最重要的知识：",[19,144057,144058],{},"flex处理这样的布局思路",[1738,144060],{"style":126601,"src":144061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[389,144063,144065],{"className":126745,"code":144064,"language":126747,"meta":316,"style":316},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[395,144066,144067,144073,144083,144093,144103],{"__ignoreMap":316},[398,144068,144069,144071],{"class":400,"line":401},[398,144070,143812],{"class":2239},[398,144072,15849],{"class":408},[398,144074,144075,144077,144079,144081],{"class":400,"line":317},[398,144076,128361],{"class":457},[398,144078,51630],{"class":408},[398,144080,51670],{"class":457},[398,144082,1566],{"class":408},[398,144084,144085,144087,144089,144091],{"class":400,"line":320},[398,144086,143841],{"class":457},[398,144088,51630],{"class":408},[398,144090,51785],{"class":457},[398,144092,1566],{"class":408},[398,144094,144095,144097,144099,144101],{"class":400,"line":1470},[398,144096,143852],{"class":457},[398,144098,51630],{"class":408},[398,144100,51785],{"class":457},[398,144102,1566],{"class":408},[398,144104,144105],{"class":400,"line":1476},[398,144106,1841],{"class":408},[19,144108,144109],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,144111,144112],{},"使用属性选择器",[1738,144114],{"style":126601,"src":144115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,144117,69082],{},[389,144119,144121],{"className":127492,"code":144120,"language":127494,"meta":316,"style":316},"\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",[395,144122,144123,144128,144142,144147,144167,144172,144191,144196,144215,144220,144239],{"__ignoreMap":316},[398,144124,144125],{"class":400,"line":401},[398,144126,144127],{"class":467},"\u003C!-- 携程网移动端案例结构 -->\n",[398,144129,144130,144132,144134,144136,144138,144140],{"class":400,"line":317},[398,144131,1312],{"class":408},[398,144133,51804],{"class":51493},[398,144135,53679],{"class":2239},[398,144137,454],{"class":408},[398,144139,92516],{"class":513},[398,144141,51500],{"class":408},[398,144143,144144],{"class":400,"line":320},[398,144145,144146],{"class":467},"  \u003C!-- 搜索栏 -->\n",[398,144148,144149,144151,144153,144155,144157,144160,144163,144165],{"class":400,"line":1470},[398,144150,52337],{"class":408},[398,144152,51804],{"class":51493},[398,144154,53679],{"class":2239},[398,144156,454],{"class":408},[398,144158,144159],{"class":513},"\"search-index\"",[398,144161,144162],{"class":408},">...\u003C\u002F",[398,144164,51804],{"class":51493},[398,144166,51500],{"class":408},[398,144168,144169],{"class":400,"line":1476},[398,144170,144171],{"class":467},"  \u003C!-- 焦点图 -->\n",[398,144173,144174,144176,144178,144180,144182,144185,144187,144189],{"class":400,"line":1490},[398,144175,52337],{"class":408},[398,144177,51804],{"class":51493},[398,144179,53679],{"class":2239},[398,144181,454],{"class":408},[398,144183,144184],{"class":513},"\"focus\"",[398,144186,144162],{"class":408},[398,144188,51804],{"class":51493},[398,144190,51500],{"class":408},[398,144192,144193],{"class":400,"line":1496},[398,144194,144195],{"class":467},"  \u003C!-- 主导航 -->\n",[398,144197,144198,144200,144202,144204,144206,144209,144211,144213],{"class":400,"line":1587},[398,144199,52337],{"class":408},[398,144201,51804],{"class":51493},[398,144203,53679],{"class":2239},[398,144205,454],{"class":408},[398,144207,144208],{"class":513},"\"local-nav\"",[398,144210,144162],{"class":408},[398,144212,51804],{"class":51493},[398,144214,51500],{"class":408},[398,144216,144217],{"class":400,"line":1593},[398,144218,144219],{"class":467},"  \u003C!-- 子导航 -->\n",[398,144221,144222,144224,144226,144228,144230,144233,144235,144237],{"class":400,"line":1605},[398,144223,52337],{"class":408},[398,144225,51804],{"class":51493},[398,144227,53679],{"class":2239},[398,144229,454],{"class":408},[398,144231,144232],{"class":513},"\"nav-common\"",[398,144234,144162],{"class":408},[398,144236,51804],{"class":51493},[398,144238,51500],{"class":408},[398,144240,144241,144243,144245],{"class":400,"line":1888},[398,144242,51978],{"class":408},[398,144244,51804],{"class":51493},[398,144246,51500],{"class":408},[19,144248,70646],{},[389,144250,144251],{"className":126745,"code":137197,"language":126747,"meta":316,"style":316},[395,144252,144253,144267,144283],{"__ignoreMap":316},[398,144254,144255,144257,144259,144261,144263,144265],{"class":400,"line":401},[398,144256,54014],{"class":51493},[398,144258,1292],{"class":408},[398,144260,103300],{"class":2239},[398,144262,454],{"class":404},[398,144264,62892],{"class":513},[398,144266,137214],{"class":408},[398,144268,144269,144271,144273,144275,144277,144279,144281],{"class":400,"line":317},[398,144270,71089],{"class":457},[398,144272,51630],{"class":408},[398,144274,619],{"class":457},[398,144276,51685],{"class":404},[398,144278,51714],{"class":457},[398,144280,130325],{"class":457},[398,144282,1566],{"class":408},[398,144284,144285],{"class":400,"line":320},[398,144286,1841],{"class":408},[19,144288,144289],{},"总代码和效果展示：",[1738,144291],{"style":126601,"src":144292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,144294,69082],{},[389,144296,144297],{"className":127492,"code":144120,"language":127494,"meta":316,"style":316},[395,144298,144299,144303,144317,144321,144339,144343,144361,144365,144383,144387,144405],{"__ignoreMap":316},[398,144300,144301],{"class":400,"line":401},[398,144302,144127],{"class":467},[398,144304,144305,144307,144309,144311,144313,144315],{"class":400,"line":317},[398,144306,1312],{"class":408},[398,144308,51804],{"class":51493},[398,144310,53679],{"class":2239},[398,144312,454],{"class":408},[398,144314,92516],{"class":513},[398,144316,51500],{"class":408},[398,144318,144319],{"class":400,"line":320},[398,144320,144146],{"class":467},[398,144322,144323,144325,144327,144329,144331,144333,144335,144337],{"class":400,"line":1470},[398,144324,52337],{"class":408},[398,144326,51804],{"class":51493},[398,144328,53679],{"class":2239},[398,144330,454],{"class":408},[398,144332,144159],{"class":513},[398,144334,144162],{"class":408},[398,144336,51804],{"class":51493},[398,144338,51500],{"class":408},[398,144340,144341],{"class":400,"line":1476},[398,144342,144171],{"class":467},[398,144344,144345,144347,144349,144351,144353,144355,144357,144359],{"class":400,"line":1490},[398,144346,52337],{"class":408},[398,144348,51804],{"class":51493},[398,144350,53679],{"class":2239},[398,144352,454],{"class":408},[398,144354,144184],{"class":513},[398,144356,144162],{"class":408},[398,144358,51804],{"class":51493},[398,144360,51500],{"class":408},[398,144362,144363],{"class":400,"line":1496},[398,144364,144195],{"class":467},[398,144366,144367,144369,144371,144373,144375,144377,144379,144381],{"class":400,"line":1587},[398,144368,52337],{"class":408},[398,144370,51804],{"class":51493},[398,144372,53679],{"class":2239},[398,144374,454],{"class":408},[398,144376,144208],{"class":513},[398,144378,144162],{"class":408},[398,144380,51804],{"class":51493},[398,144382,51500],{"class":408},[398,144384,144385],{"class":400,"line":1593},[398,144386,144219],{"class":467},[398,144388,144389,144391,144393,144395,144397,144399,144401,144403],{"class":400,"line":1605},[398,144390,52337],{"class":408},[398,144392,51804],{"class":51493},[398,144394,53679],{"class":2239},[398,144396,454],{"class":408},[398,144398,144232],{"class":513},[398,144400,144162],{"class":408},[398,144402,51804],{"class":51493},[398,144404,51500],{"class":408},[398,144406,144407,144409,144411],{"class":400,"line":1888},[398,144408,51978],{"class":408},[398,144410,51804],{"class":51493},[398,144412,51500],{"class":408},[19,144414,70646],{},[389,144416,144417],{"className":127492,"code":130849,"language":127494,"meta":316,"style":316},[395,144418,144419,144423,144437,144441],{"__ignoreMap":316},[398,144420,144421],{"class":400,"line":401},[398,144422,130856],{"class":467},[398,144424,144425,144427,144429,144431,144433,144435],{"class":400,"line":317},[398,144426,1312],{"class":408},[398,144428,51804],{"class":51493},[398,144430,53679],{"class":2239},[398,144432,454],{"class":408},[398,144434,130869],{"class":513},[398,144436,51500],{"class":408},[398,144438,144439],{"class":400,"line":320},[398,144440,130876],{"class":408},[398,144442,144443,144445,144447],{"class":400,"line":1470},[398,144444,51978],{"class":408},[398,144446,51804],{"class":51493},[398,144448,51500],{"class":408},[5403,144450,138146],{},{"title":316,"searchDepth":317,"depth":317,"links":144452},[144453,144454,144458,144459,144460],{"id":143597,"depth":317,"text":143598},{"id":143629,"depth":317,"text":143630,"children":144455},[144456,144457],{"id":143633,"depth":320,"text":143634},{"id":143650,"depth":320,"text":143651},{"id":143669,"depth":317,"text":143670},{"id":143676,"depth":317,"text":143677},{"id":143763,"depth":317,"text":143764,"children":144461},[144462,144463,144464,144465,144466],{"id":143770,"depth":320,"text":143771},{"id":143898,"depth":320,"text":143899},{"id":143992,"depth":320,"text":143993},{"id":144041,"depth":320,"text":144042},{"id":144051,"depth":320,"text":144052},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143589,"description":23654},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144473,"title":144474,"body":144475,"description":23654,"extension":326,"meta":145702,"navigation":328,"path":145703,"seo":145704,"stem":145705,"__hash__":145706},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144476,"toc":145680},[144477,144480,144484,144488,144491,144494,144498,144503,144506,144509,144512,144515,144518,144575,144578,144583,144586,144589,144593,144604,144608,144611,144614,144621,144626,144630,144633,144639,144642,144646,144649,144656,144659,144662,144669,144672,144679,144682,144685,144692,144695,144698,144700,144717,144721,144724,144727,144730,144734,144737,144740,144743,144746,144749,144752,144754,144757,144760,144822,144825,144935,144942,144948,144951,144954,144958,144961,144965,144970,144973,144980,144983,144989,144994,144997,145000,145003,145006,145009,145012,145015,145018,145074,145076,145102,145106,145109,145112,145115,145123,145126,145129,145133,145189,145192,145196,145202,145213,145216,145221,145224,145227,145233,145236,145239,145242,145245,145248,145251,145254,145257,145282,145288,145291,145294,145297,145300,145303,145306,145311,145314,145317,145320,145328,145331,145338,145341,145344,145346,145370,145372,145375,145378,145381,145384,145387,145390,145393,145427,145430,145433,145467,145474,145477,145480,145483,145486,145489,145492,145499,145502,145505,145508,145511,145518,145521,145524,145531,145534,145537,145541,145544,145547,145550,145553,145556,145559,145562,145565,145567,145591,145593,145617,145621,145632,145635,145638,145641,145644,145647,145650,145653,145656,145659,145662,145665,145668,145671,145674,145677],[10,144478,144474],{"id":144479},"_21-移动端布局实战下篇",[343,144481,144483],{"id":144482},"_211-rem适配布局","21.1 rem适配布局",[14,144485,144487],{"id":144486},"_2111-rem单位","21.1.1 rem单位",[1738,144489],{"style":126601,"src":144490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,144492,144493],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[14,144495,144497],{"id":144496},"_2112-媒体查询","21.1.2 媒体查询",[38,144499,144500],{},[41,144501,144502],{},"参数介绍",[1738,144504],{"style":126601,"src":144505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[1738,144507],{"style":126601,"src":144508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[1738,144510],{"style":126601,"src":144511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[1738,144513],{"style":126601,"src":144514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[1738,144516],{"style":126601,"src":144517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[389,144519,144521],{"className":126745,"code":144520,"language":126747,"meta":316,"style":316},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[395,144522,144523,144528,144547,144554,144567,144571],{"__ignoreMap":316},[398,144524,144525],{"class":400,"line":401},[398,144526,144527],{"class":467},"\u002F* 媒体查询 *\u002F\n",[398,144529,144530,144533,144535,144538,144540,144543,144545],{"class":400,"line":317},[398,144531,144532],{"class":404},"@media",[398,144534,1934],{"class":408},[398,144536,144537],{"class":457},"max-width",[398,144539,51630],{"class":408},[398,144541,144542],{"class":457},"768",[398,144544,51685],{"class":404},[398,144546,12719],{"class":408},[398,144548,144549,144552],{"class":400,"line":320},[398,144550,144551],{"class":2239},"  .container",[398,144553,15849],{"class":408},[398,144555,144556,144559,144561,144563,144565],{"class":400,"line":1470},[398,144557,144558],{"class":457},"    width",[398,144560,51630],{"class":408},[398,144562,713],{"class":457},[398,144564,730],{"class":404},[398,144566,1566],{"class":408},[398,144568,144569],{"class":400,"line":1476},[398,144570,127541],{"class":408},[398,144572,144573],{"class":400,"line":1490},[398,144574,1841],{"class":408},[19,144576,144577],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[38,144579,144580],{"start":317},[41,144581,144582],{},"引入资源",[1738,144584],{"style":126601,"src":144585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,144587,144588],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[14,144590,144592],{"id":144591},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[67,144594,144595,144598,144601],{},[41,144596,144597],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[41,144599,144600],{},"媒体查询可以根据不同设备宽度来修改样式",[41,144602,144603],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[343,144605,144607],{"id":144606},"_212-less基础","21.2 Less基础",[19,144609,144610],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,144612,144613],{},"Less可以解决该问题，它是css的扩展语言",[19,144615,144616,144617],{},"Less中文网址： ",[640,144618,144619],{"href":144619,"rel":144620},"http:\u002F\u002Flesscss.cn\u002F",[24142],[19,144622,144623],{},[23,144624,144625],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[14,144627,144629],{"id":144628},"_2121-less安装","21.2.1 less安装",[19,144631,144632],{},"如果使用vscode，则无需进行下方安装步骤",[19,144634,144635],{},[640,144636,144637],{"href":144637,"rel":144638},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[24142],[1738,144640],{"style":126601,"src":144641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[14,144643,144645],{"id":144644},"_2122-less使用","21.2.2 less使用",[19,144647,144648],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[38,144650,144651],{},[41,144652,144653],{},[23,144654,144655],{},"Less 变量",[1738,144657],{"style":126601,"src":144658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[1738,144660],{"style":126601,"src":144661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[38,144663,144664],{"start":317},[41,144665,144666],{},[23,144667,144668],{},"Less 编译",[1738,144670],{"style":126601,"src":144671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[38,144673,144674],{"start":320},[41,144675,144676],{},[23,144677,144678],{},"Less 嵌套",[1738,144680],{"style":126601,"src":144681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[1738,144683],{"style":126601,"src":144684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[38,144686,144687],{"start":1470},[41,144688,144689],{},[23,144690,144691],{},"Less 运算",[1738,144693],{"style":126601,"src":144694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,144696,144697],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,144699,438],{},[67,144701,144702,144705,144708,144711,144714],{},[41,144703,144704],{},"乘号（*）和除号（\u002F）的写法",[41,144706,144707],{},"运算符中间左右有个空格隔开 1px + 5",[41,144709,144710],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[41,144712,144713],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[41,144715,144716],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[343,144718,144720],{"id":144719},"_213-rem-适配方案","21.3 rem 适配方案",[19,144722,144723],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,144725,144726],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[1738,144728],{"style":126601,"src":144729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[14,144731,144733],{"id":144732},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,144735,144736],{},"rem + 媒体查询 + less 技术",[1738,144738],{"style":126601,"src":144739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,144741,144742],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,144744,144745],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[1738,144747],{"style":126601,"src":144748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,144750,144751],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,144753,14910],{},[1738,144755],{"style":126601,"src":144756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,144758,144759],{},"index.html:",[389,144761,144763],{"className":126745,"code":144762,"language":126747,"meta":316,"style":316},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[395,144764,144765,144770,144776,144792,144796,144802,144818],{"__ignoreMap":316},[398,144766,144767],{"class":400,"line":401},[398,144768,144769],{"class":467},"\u002F* rem 适配方案 *\u002F\n",[398,144771,144772,144774],{"class":400,"line":317},[398,144773,50828],{"class":51493},[398,144775,15849],{"class":408},[398,144777,144778,144780,144782,144785,144787,144789],{"class":400,"line":320},[398,144779,70819],{"class":457},[398,144781,51630],{"class":408},[398,144783,144784],{"class":457},"62.5",[398,144786,730],{"class":404},[398,144788,130608],{"class":408},[398,144790,144791],{"class":467},"\u002F* 1rem = 10px *\u002F\n",[398,144793,144794],{"class":400,"line":1470},[398,144795,1841],{"class":408},[398,144797,144798,144800],{"class":400,"line":1476},[398,144799,130593],{"class":2239},[398,144801,15849],{"class":408},[398,144803,144804,144806,144808,144810,144813,144815],{"class":400,"line":1490},[398,144805,70761],{"class":457},[398,144807,51630],{"class":408},[398,144809,848],{"class":457},[398,144811,144812],{"class":404},"rem",[398,144814,130608],{"class":408},[398,144816,144817],{"class":467},"\u002F* 100px *\u002F\n",[398,144819,144820],{"class":400,"line":1496},[398,144821,1841],{"class":408},[19,144823,144824],{},"common.less",[389,144826,144828],{"className":126745,"code":144827,"language":126747,"meta":316,"style":316},"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",[395,144829,144830,144836,144851,144855,144861,144875,144879,144883,144887,144893,144907,144911,144917,144931],{"__ignoreMap":316},[398,144831,144832,144834],{"class":400,"line":401},[398,144833,50828],{"class":51493},[398,144835,15849],{"class":408},[398,144837,144838,144840,144842,144844,144846,144848],{"class":400,"line":317},[398,144839,70819],{"class":457},[398,144841,51630],{"class":408},[398,144843,144784],{"class":457},[398,144845,730],{"class":404},[398,144847,26260],{"class":408},[398,144849,144850],{"class":467},"\u002F* 10px *\u002F\n",[398,144852,144853],{"class":400,"line":320},[398,144854,1841],{"class":408},[398,144856,144857,144859],{"class":400,"line":1470},[398,144858,51804],{"class":51493},[398,144860,15849],{"class":408},[398,144862,144863,144865,144867,144869,144871,144873],{"class":400,"line":1476},[398,144864,70761],{"class":457},[398,144866,51630],{"class":408},[398,144868,848],{"class":457},[398,144870,144812],{"class":404},[398,144872,26260],{"class":408},[398,144874,144817],{"class":467},[398,144876,144877],{"class":400,"line":1490},[398,144878,1841],{"class":408},[398,144880,144881],{"class":400,"line":1496},[398,144882,136206],{"class":408},[398,144884,144885],{"class":400,"line":1587},[398,144886,144769],{"class":467},[398,144888,144889,144891],{"class":400,"line":1593},[398,144890,50828],{"class":51493},[398,144892,15849],{"class":408},[398,144894,144895,144897,144899,144901,144903,144905],{"class":400,"line":1605},[398,144896,70819],{"class":457},[398,144898,51630],{"class":408},[398,144900,144784],{"class":457},[398,144902,730],{"class":404},[398,144904,130608],{"class":408},[398,144906,144791],{"class":467},[398,144908,144909],{"class":400,"line":1888},[398,144910,1841],{"class":408},[398,144912,144913,144915],{"class":400,"line":1893},[398,144914,130593],{"class":2239},[398,144916,15849],{"class":408},[398,144918,144919,144921,144923,144925,144927,144929],{"class":400,"line":1899},[398,144920,70761],{"class":457},[398,144922,51630],{"class":408},[398,144924,848],{"class":457},[398,144926,144812],{"class":404},[398,144928,130608],{"class":408},[398,144930,144817],{"class":467},[398,144932,144933],{"class":400,"line":1904},[398,144934,1841],{"class":408},[19,144936,144937,144938,144941],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23831,144939,144940],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[389,144943,144946],{"className":144944,"code":144945,"language":5464},[5462],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[395,144947,144945],{"__ignoreMap":316},[19,144949,144950],{},"less保存时会自动变成.css文件",[19,144952,144953],{},"好好搞懂上述代码写法",[14,144955,144957],{"id":144956},"_2132-样式导入样式","21.3.2 样式导入样式",[1738,144959],{"style":126601,"src":144960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[14,144962,144964],{"id":144963},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[38,144966,144967],{},[41,144968,144969],{},"准备工作",[1738,144971],{"style":126601,"src":144972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,144974,144975,144976],{},"github地址：",[640,144977,144978],{"href":144978,"rel":144979},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[24142],[19,144981,144982],{},"下载之后，将index.js文件拖到项目中就可以了",[19,144984,144985,144986],{},"js文件引入到index.html中使用的是",[395,144987,144988],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[38,144990,144991],{"start":317},[41,144992,144993],{},"vscode插件",[1738,144995],{"style":126601,"src":144996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,144998,144999],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,145001,145002],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[1738,145004],{"style":126601,"src":145005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,145007,145008],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[1738,145010],{"style":126601,"src":145011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,145013,145014],{},"修改成75就可以，alt+z为快捷键",[19,145016,145017],{},"index.css：",[389,145019,145020],{"className":126745,"code":144762,"language":126747,"meta":316,"style":316},[395,145021,145022,145026,145032,145046,145050,145056,145070],{"__ignoreMap":316},[398,145023,145024],{"class":400,"line":401},[398,145025,144769],{"class":467},[398,145027,145028,145030],{"class":400,"line":317},[398,145029,50828],{"class":51493},[398,145031,15849],{"class":408},[398,145033,145034,145036,145038,145040,145042,145044],{"class":400,"line":320},[398,145035,70819],{"class":457},[398,145037,51630],{"class":408},[398,145039,144784],{"class":457},[398,145041,730],{"class":404},[398,145043,130608],{"class":408},[398,145045,144791],{"class":467},[398,145047,145048],{"class":400,"line":1470},[398,145049,1841],{"class":408},[398,145051,145052,145054],{"class":400,"line":1476},[398,145053,130593],{"class":2239},[398,145055,15849],{"class":408},[398,145057,145058,145060,145062,145064,145066,145068],{"class":400,"line":1490},[398,145059,70761],{"class":457},[398,145061,51630],{"class":408},[398,145063,848],{"class":457},[398,145065,144812],{"class":404},[398,145067,130608],{"class":408},[398,145069,144817],{"class":467},[398,145071,145072],{"class":400,"line":1496},[398,145073,1841],{"class":408},[19,145075,144759],{},[389,145077,145078],{"className":126745,"code":127149,"language":126747,"meta":316,"style":316},[395,145079,145080,145086,145098],{"__ignoreMap":316},[398,145081,145082,145084],{"class":400,"line":401},[398,145083,51993],{"class":51493},[398,145085,15849],{"class":408},[398,145087,145088,145090,145092,145094,145096],{"class":400,"line":317},[398,145089,70819],{"class":457},[398,145091,51630],{"class":408},[398,145093,1003],{"class":457},[398,145095,51685],{"class":404},[398,145097,1566],{"class":408},[398,145099,145100],{"class":400,"line":320},[398,145101,1841],{"class":408},[343,145103,145105],{"id":145104},"_214-响应式开发","21.4 响应式开发",[19,145107,145108],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[1738,145110],{"style":126601,"src":145111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,145113,145114],{},"做法：",[67,145116,145117,145120],{},[41,145118,145119],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[41,145121,145122],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[1738,145124],{"style":126601,"src":145125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,145127,145128],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[14,145130,145132],{"id":145131},"_2141-简单代码示范","21.4.1 简单代码示范",[389,145134,145135],{"className":126745,"code":144762,"language":126747,"meta":316,"style":316},[395,145136,145137,145141,145147,145161,145165,145171,145185],{"__ignoreMap":316},[398,145138,145139],{"class":400,"line":401},[398,145140,144769],{"class":467},[398,145142,145143,145145],{"class":400,"line":317},[398,145144,50828],{"class":51493},[398,145146,15849],{"class":408},[398,145148,145149,145151,145153,145155,145157,145159],{"class":400,"line":320},[398,145150,70819],{"class":457},[398,145152,51630],{"class":408},[398,145154,144784],{"class":457},[398,145156,730],{"class":404},[398,145158,130608],{"class":408},[398,145160,144791],{"class":467},[398,145162,145163],{"class":400,"line":1470},[398,145164,1841],{"class":408},[398,145166,145167,145169],{"class":400,"line":1476},[398,145168,130593],{"class":2239},[398,145170,15849],{"class":408},[398,145172,145173,145175,145177,145179,145181,145183],{"class":400,"line":1490},[398,145174,70761],{"class":457},[398,145176,51630],{"class":408},[398,145178,848],{"class":457},[398,145180,144812],{"class":404},[398,145182,130608],{"class":408},[398,145184,144817],{"class":467},[398,145186,145187],{"class":400,"line":1496},[398,145188,1841],{"class":408},[19,145190,145191],{},"父盒子一般命名为container",[14,145193,145195],{"id":145194},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,145197,145198,145199],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[23,145200,145201],{},"使得 Web 开发更加快捷",[67,145203,145204],{},[41,145205,145206,145207],{},"官网：",[23,145208,145209],{},[640,145210,145211],{"href":145211,"rel":145212},"http:\u002F\u002Fgetbootstrap.com\u002F",[24142],[19,145214,145215],{},"可以直接去官网拿现成的东西",[38,145217,145218],{},[41,145219,145220],{},"Bootstrap的使用",[19,145222,145223],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,145225,145226],{},"Bootstrap 使用四步曲：",[19,145228,145229,145232],{},[23,145230,145231],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[1738,145234],{"style":126601,"src":145235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,145237,145238],{},"打开Bootstrap官网，然后下载",[1738,145240],{"style":126601,"src":145241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[1738,145243],{"style":126601,"src":145244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,145246,145247],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,145249,145250],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,145252,145253],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[1738,145255],{"style":126601,"src":145256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[389,145258,145260],{"className":126745,"code":145259,"language":126747,"meta":316,"style":316},".center {\n  color: red;\n}\n",[395,145261,145262,145268,145278],{"__ignoreMap":316},[398,145263,145264,145266],{"class":400,"line":401},[398,145265,127036],{"class":2239},[398,145267,15849],{"class":408},[398,145269,145270,145272,145274,145276],{"class":400,"line":317},[398,145271,71098],{"class":457},[398,145273,51630],{"class":408},[398,145275,57614],{"class":457},[398,145277,1566],{"class":408},[398,145279,145280],{"class":400,"line":320},[398,145281,1841],{"class":408},[19,145283,145284,145287],{},[395,145285,145286],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[1738,145289],{"style":126601,"src":145290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[1738,145292],{"style":126601,"src":145293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[1738,145295],{"style":126601,"src":145296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,145298,145299],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[1738,145301],{"style":126601,"src":145302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,145304,145305],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[38,145307,145308],{"start":317},[41,145309,145310],{},"布局容器",[1738,145312],{"style":126601,"src":145313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,145315,145316],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,145318,145319],{},"container-fluid用于移动式布局比较方便",[38,145321,145322],{"start":320},[41,145323,145324,145325],{},"bootstrap ",[23,145326,145327],{},"栅格系统原理",[1738,145329],{"style":126601,"src":145330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[38,145332,145333],{"start":1470},[41,145334,145335],{},[23,145336,145337],{},"栅格选项参数",[1738,145339],{"style":126601,"src":145340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,145342,145343],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,145345,14910],{},[389,145347,145348],{"className":126745,"code":145259,"language":126747,"meta":316,"style":316},[395,145349,145350,145356,145366],{"__ignoreMap":316},[398,145351,145352,145354],{"class":400,"line":401},[398,145353,127036],{"class":2239},[398,145355,15849],{"class":408},[398,145357,145358,145360,145362,145364],{"class":400,"line":317},[398,145359,71098],{"class":457},[398,145361,51630],{"class":408},[398,145363,57614],{"class":457},[398,145365,1566],{"class":408},[398,145367,145368],{"class":400,"line":320},[398,145369,1841],{"class":408},[19,145371,135788],{},[1738,145373],{"style":126601,"src":145374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,145376,145377],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,145379,145380],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,145382,145383],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,145385,145386],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,145388,145389],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,145391,145392],{},"汇总展示说明：",[389,145394,145395],{"className":127492,"code":130849,"language":127494,"meta":316,"style":316},[395,145396,145397,145401,145415,145419],{"__ignoreMap":316},[398,145398,145399],{"class":400,"line":401},[398,145400,130856],{"class":467},[398,145402,145403,145405,145407,145409,145411,145413],{"class":400,"line":317},[398,145404,1312],{"class":408},[398,145406,51804],{"class":51493},[398,145408,53679],{"class":2239},[398,145410,454],{"class":408},[398,145412,130869],{"class":513},[398,145414,51500],{"class":408},[398,145416,145417],{"class":400,"line":320},[398,145418,130876],{"class":408},[398,145420,145421,145423,145425],{"class":400,"line":1470},[398,145422,51978],{"class":408},[398,145424,51804],{"class":51493},[398,145426,51500],{"class":408},[1738,145428],{"style":126601,"src":145429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,145431,145432],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[389,145434,145435],{"className":127492,"code":130849,"language":127494,"meta":316,"style":316},[395,145436,145437,145441,145455,145459],{"__ignoreMap":316},[398,145438,145439],{"class":400,"line":401},[398,145440,130856],{"class":467},[398,145442,145443,145445,145447,145449,145451,145453],{"class":400,"line":317},[398,145444,1312],{"class":408},[398,145446,51804],{"class":51493},[398,145448,53679],{"class":2239},[398,145450,454],{"class":408},[398,145452,130869],{"class":513},[398,145454,51500],{"class":408},[398,145456,145457],{"class":400,"line":320},[398,145458,130876],{"class":408},[398,145460,145461,145463,145465],{"class":400,"line":1470},[398,145462,51978],{"class":408},[398,145464,51804],{"class":51493},[398,145466,51500],{"class":408},[38,145468,145469],{"start":1476},[41,145470,145471],{},[23,145472,145473],{},"列嵌套",[1738,145475],{"style":126601,"src":145476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,145478,145479],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,145481,145482],{},"没加row内部这样：",[1738,145484],{"style":126601,"src":145485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,145487,145488],{},"加上row之后内部为：",[1738,145490],{"style":126601,"src":145491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[38,145493,145494],{"start":1490},[41,145495,145496],{},[23,145497,145498],{},"列偏移",[1738,145500],{"style":126601,"src":145501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,145503,145504],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,145506,145507],{},"要加偏移量，即偏移份数",[19,145509,145510],{},"偏移的份数=12-两个盒子的份数",[38,145512,145513],{"start":1496},[41,145514,145515],{},[23,145516,145517],{},"列排序",[1738,145519],{"style":126601,"src":145520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,145522,145523],{},"pull拉左；push推右",[38,145525,145526],{"start":1587},[41,145527,145528],{},[23,145529,145530],{},"响应式工具",[1738,145532],{"style":126601,"src":145533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,145535,145536],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[14,145538,145540],{"id":145539},"_2143-响应式小项目","21.4.3 响应式小项目",[19,145542,145543],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,145545,145546],{},"ul {",[19,145548,145549],{},"list-style: none;",[19,145551,145552],{},"margin:0;",[19,145554,145555],{},"padding:0; }",[1738,145557],{"style":126601,"src":145558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[1738,145560],{"style":126601,"src":145561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,145563,145564],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,145566,69082],{},[389,145568,145569],{"className":126745,"code":139415,"language":126747,"meta":316,"style":316},[395,145570,145571,145577,145587],{"__ignoreMap":316},[398,145572,145573,145575],{"class":400,"line":401},[398,145574,130593],{"class":2239},[398,145576,15849],{"class":408},[398,145578,145579,145581,145583,145585],{"class":400,"line":317},[398,145580,131225],{"class":457},[398,145582,51630],{"class":408},[398,145584,95],{"class":457},[398,145586,1566],{"class":408},[398,145588,145589],{"class":400,"line":320},[398,145590,1841],{"class":408},[19,145592,70646],{},[389,145594,145595],{"className":126745,"code":139415,"language":126747,"meta":316,"style":316},[395,145596,145597,145603,145613],{"__ignoreMap":316},[398,145598,145599,145601],{"class":400,"line":401},[398,145600,130593],{"class":2239},[398,145602,15849],{"class":408},[398,145604,145605,145607,145609,145611],{"class":400,"line":317},[398,145606,131225],{"class":457},[398,145608,51630],{"class":408},[398,145610,95],{"class":457},[398,145612,1566],{"class":408},[398,145614,145615],{"class":400,"line":320},[398,145616,1841],{"class":408},[343,145618,145620],{"id":145619},"_215-swiper-插件使用","21.5 swiper 插件使用",[67,145622,145623,145626,145629],{},[41,145624,145625],{},"下载需要的css和js文件html页面中 引入相关文件",[41,145627,145628],{},"官网找到类似案例，复制html结构，css样式 js 语法",[41,145630,145631],{},"根据需求定制修改模块",[1738,145633],{"style":126601,"src":145634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,145636,145637],{},"解压后将这两部分放到项目中",[1738,145639],{"style":126601,"src":145640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,145642,145643],{},"这个插件可以帮助我们实现轮播图效果",[19,145645,145646],{},"用法：",[1738,145648],{"style":126601,"src":145649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,145651,145652],{},"找到自己喜欢的",[1738,145654],{"style":126601,"src":145655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,145657,145658],{},"右键，查看网页源代码",[1738,145660],{"style":126601,"src":145661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,145663,145664],{},"复制人家的结构内容",[19,145666,145667],{},"然后去看API文档：",[1738,145669],{"style":126601,"src":145670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,145672,145673],{},"可以看看如何修改样式",[19,145675,145676],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[5403,145678,145679],{},"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":316,"searchDepth":317,"depth":317,"links":145681},[145682,145687,145691,145696,145701],{"id":144482,"depth":317,"text":144483,"children":145683},[145684,145685,145686],{"id":144486,"depth":320,"text":144487},{"id":144496,"depth":320,"text":144497},{"id":144591,"depth":320,"text":144592},{"id":144606,"depth":317,"text":144607,"children":145688},[145689,145690],{"id":144628,"depth":320,"text":144629},{"id":144644,"depth":320,"text":144645},{"id":144719,"depth":317,"text":144720,"children":145692},[145693,145694,145695],{"id":144732,"depth":320,"text":144733},{"id":144956,"depth":320,"text":144957},{"id":144963,"depth":320,"text":144964},{"id":145104,"depth":317,"text":145105,"children":145697},[145698,145699,145700],{"id":145131,"depth":320,"text":145132},{"id":145194,"depth":320,"text":145195},{"id":145539,"depth":320,"text":145540},{"id":145619,"depth":317,"text":145620},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144474,"description":23654},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145708,"title":145709,"body":145710,"description":23654,"extension":326,"meta":145930,"navigation":328,"path":145931,"seo":145932,"stem":145933,"__hash__":145934},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145711,"toc":145926},[145712,145715,145719,145722,145737,145742,145745,145750,145785,145790,145802,145807,145820,145825,145842,145847,145867,145872,145890,145893,145896,145899,145902,145906,145909,145912,145915,145918,145921,145924],[10,145713,145709],{"id":145714},"_22-代码提交与新型相对单位",[343,145716,145718],{"id":145717},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,145720,145721],{},"法1：",[38,145723,145724,145731,145734],{},[41,145725,145726,145727],{},"登录网站注册：",[640,145728,145729],{"href":145729,"rel":145730},"https:\u002F\u002Fgitee.com\u002F",[24142],[41,145732,145733],{},"码云创建新的仓库",[41,145735,145736],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[67,145738,145739],{},[41,145740,145741],{},"在网站根目录右键-- Git Bash Here",[1738,145743],{"style":126601,"src":145744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[67,145746,145747],{},[41,145748,145749],{},"如果是第一次利用git提交，请配置好全局选项",[389,145751,145753],{"className":117489,"code":145752,"language":117491,"meta":316,"style":316},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[395,145754,145755,145771],{"__ignoreMap":316},[398,145756,145757,145760,145762,145765,145768],{"class":400,"line":401},[398,145758,145759],{"class":2239},"git",[398,145761,119912],{"class":513},[398,145763,145764],{"class":457}," --global",[398,145766,145767],{"class":513}," user.name",[398,145769,145770],{"class":513}," \"你的名字\"\n",[398,145772,145773,145775,145777,145779,145782],{"class":400,"line":317},[398,145774,145759],{"class":2239},[398,145776,119912],{"class":513},[398,145778,145764],{"class":457},[398,145780,145781],{"class":513}," user.email",[398,145783,145784],{"class":513}," \"你的邮箱\"\n",[67,145786,145787],{},[41,145788,145789],{},"初始化仓库",[389,145791,145793],{"className":117489,"code":145792,"language":117491,"meta":316,"style":316},"git init\n",[395,145794,145795],{"__ignoreMap":316},[398,145796,145797,145799],{"class":400,"line":401},[398,145798,145759],{"class":2239},[398,145800,145801],{"class":513}," init\n",[67,145803,145804],{},[41,145805,145806],{},"把本地文件放到暂存区",[389,145808,145810],{"className":117489,"code":145809,"language":117491,"meta":316,"style":316},"git add .\n",[395,145811,145812],{"__ignoreMap":316},[398,145813,145814,145816,145818],{"class":400,"line":401},[398,145815,145759],{"class":2239},[398,145817,5486],{"class":513},[398,145819,28934],{"class":513},[67,145821,145822],{},[41,145823,145824],{},"把本地文件放到本地仓库里面",[389,145826,145828],{"className":117489,"code":145827,"language":117491,"meta":316,"style":316},"git commit -m \"first commit\"\n",[395,145829,145830],{"__ignoreMap":316},[398,145831,145832,145834,145837,145839],{"class":400,"line":401},[398,145833,145759],{"class":2239},[398,145835,145836],{"class":513}," commit",[398,145838,101075],{"class":457},[398,145840,145841],{"class":513}," \"first commit\"\n",[67,145843,145844],{},[41,145845,145846],{},"链接远程仓库",[389,145848,145850],{"className":117489,"code":145849,"language":117491,"meta":316,"style":316},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[395,145851,145852],{"__ignoreMap":316},[398,145853,145854,145856,145859,145861,145864],{"class":400,"line":401},[398,145855,145759],{"class":2239},[398,145857,145858],{"class":513}," remote",[398,145860,5486],{"class":513},[398,145862,145863],{"class":513}," origin",[398,145865,145866],{"class":513}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[67,145868,145869],{},[41,145870,145871],{},"把本地仓库的文件推送到远程仓库 push",[389,145873,145875],{"className":117489,"code":145874,"language":117491,"meta":316,"style":316},"git push -u origin master\n",[395,145876,145877],{"__ignoreMap":316},[398,145878,145879,145881,145883,145885,145887],{"class":400,"line":401},[398,145880,145759],{"class":2239},[398,145882,29209],{"class":513},[398,145884,28483],{"class":457},[398,145886,145863],{"class":513},[398,145888,145889],{"class":513}," master\n",[1738,145891],{"style":126601,"src":145892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,145894,145895],{},"上方方法暂未实现，后边学完git后在整",[19,145897,145898],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[1738,145900],{"style":126601,"src":145901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[343,145903,145905],{"id":145904},"_222-新型相对单位","22.2 新型相对单位",[1738,145907],{"style":126601,"src":145908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[1738,145910],{"style":126601,"src":145911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,145913,145914],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,145916,145917],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[1738,145919],{"style":126601,"src":145920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,145922,145923],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[5403,145925,24235],{},{"title":316,"searchDepth":317,"depth":317,"links":145927},[145928,145929],{"id":145717,"depth":317,"text":145718},{"id":145904,"depth":317,"text":145905},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145709,"description":23654},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145936,"title":145937,"body":145938,"description":145942,"extension":326,"meta":145943,"navigation":328,"path":145944,"seo":145945,"stem":145946,"__hash__":145947},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145939,"toc":145940},[],{"title":316,"searchDepth":317,"depth":317,"links":145941},[],"自己正经开始学编程的第一门语言！",{"category":93032},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145937,"description":145942},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145949,"title":145950,"body":145951,"description":23654,"extension":326,"meta":147098,"navigation":328,"path":147099,"seo":147100,"stem":147101,"__hash__":147102},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145952,"toc":147074},[145953,145956,145960,145963,145966,145991,145994,146000,146004,146007,146034,146037,146077,146080,146092,146095,146101,146105,146109,146136,146153,146160,146164,146167,146193,146196,146200,146203,146243,146246,146263,146269,146273,146278,146322,146325,146343,146346,146414,146418,146425,146428,146443,146446,146455,146458,146469,146472,146481,146484,146501,146504,146519,146523,146527,146530,146532,146552,146556,146559,146562,146573,146576,146582,146586,146592,146619,146622,146634,146637,146648,146651,146657,146661,146667,146717,146720,146762,146765,146798,146801,146835,146839,146842,146862,146865,146901,146904,146917,146921,146925,146931,146934,146947,146951,146954,146960,146963,146967,146970,146973,147022,147026,147042,147048,147055,147061,147071],[10,145954,145950],{"id":145955},"_1-python环境与第一个程序",[343,145957,145959],{"id":145958},"_11-什么是python","1.1 什么是Python",[19,145961,145962],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,145964,145965],{},"理解 Python 时抓住三个关键词：",[38,145967,145968,145971,145974],{},[41,145969,145970],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[41,145972,145973],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[41,145975,145976,145977,614,145980,614,145983,614,145986,614,145988,28578],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[395,145978,145979],{},"os",[395,145981,145982],{},"sys",[395,145984,145985],{},"json",[395,145987,58053],{},[395,145989,145990],{},"datetime",[19,145992,145993],{},"Python 程序的运行链路：",[389,145995,145998],{"className":145996,"code":145997,"language":5464,"meta":316},[5462],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[395,145999,145997],{"__ignoreMap":316},[343,146001,146003],{"id":146002},"_12-python解释器","1.2 Python解释器",[19,146005,146006],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[389,146008,146010],{"className":24099,"code":146009,"language":24101,"meta":316,"style":316},"python --version\npython3 --version\npython\npython3\n",[395,146011,146012,146018,146024,146029],{"__ignoreMap":316},[398,146013,146014,146016],{"class":400,"line":401},[398,146015,30573],{"class":2239},[398,146017,26486],{"class":457},[398,146019,146020,146022],{"class":400,"line":317},[398,146021,101072],{"class":2239},[398,146023,26486],{"class":457},[398,146025,146026],{"class":400,"line":320},[398,146027,146028],{"class":2239},"python\n",[398,146030,146031],{"class":400,"line":1470},[398,146032,146033],{"class":2239},"python3\n",[19,146035,146036],{},"进入交互模式后，可以直接输入表达式：",[389,146038,146040],{"className":30571,"code":146039,"language":30573,"meta":316,"style":316},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[395,146041,146042,146053,146058,146072],{"__ignoreMap":316},[398,146043,146044,146047,146049,146051],{"class":400,"line":401},[398,146045,146046],{"class":404},">>>",[398,146048,25396],{"class":457},[398,146050,45759],{"class":404},[398,146052,47916],{"class":457},[398,146054,146055],{"class":400,"line":317},[398,146056,146057],{"class":457},"3\n",[398,146059,146060,146062,146065,146067,146070],{"class":400,"line":320},[398,146061,146046],{"class":404},[398,146063,146064],{"class":457}," print",[398,146066,409],{"class":408},[398,146068,146069],{"class":513},"\"hello python\"",[398,146071,415],{"class":408},[398,146073,146074],{"class":400,"line":1470},[398,146075,146076],{"class":408},"hello python\n",[19,146078,146079],{},"退出交互模式：",[389,146081,146083],{"className":30571,"code":146082,"language":30573,"meta":316,"style":316},"exit()\n",[395,146084,146085],{"__ignoreMap":316},[398,146086,146087,146090],{"class":400,"line":401},[398,146088,146089],{"class":457},"exit",[398,146091,2252],{"class":408},[19,146093,146094],{},"或使用快捷键：",[389,146096,146099],{"className":146097,"code":146098,"language":5464,"meta":316},[5462],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[395,146100,146098],{"__ignoreMap":316},[343,146102,146104],{"id":146103},"_13-安装python","1.3 安装Python",[14,146106,146108],{"id":146107},"_131-windows安装","1.3.1 Windows安装",[38,146110,146111,146118,146121,146127,146133],{},[41,146112,146113,146114],{},"打开 Python 官网：",[640,146115,146116],{"href":146116,"rel":146117},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[24142],[41,146119,146120],{},"下载 Windows Installer。",[41,146122,146123,146124,28578],{},"安装时勾选 ",[395,146125,146126],{},"Add Python to PATH",[41,146128,146129,146130,28578],{},"点击 ",[395,146131,146132],{},"Install Now",[41,146134,146135],{},"安装完成后打开命令提示符验证：",[389,146137,146139],{"className":24099,"code":146138,"language":24101,"meta":316,"style":316},"python --version\npip --version\n",[395,146140,146141,146147],{"__ignoreMap":316},[398,146142,146143,146145],{"class":400,"line":401},[398,146144,30573],{"class":2239},[398,146146,26486],{"class":457},[398,146148,146149,146151],{"class":400,"line":317},[398,146150,24108],{"class":2239},[398,146152,26486],{"class":457},[19,146154,146155,146156,146159],{},"如果提示 ",[395,146157,146158],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[14,146161,146163],{"id":146162},"_132-macos安装","1.3.2 macOS安装",[19,146165,146166],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[389,146168,146170],{"className":24099,"code":146169,"language":24101,"meta":316,"style":316},"brew install python\npython3 --version\npip3 --version\n",[395,146171,146172,146181,146187],{"__ignoreMap":316},[398,146173,146174,146177,146179],{"class":400,"line":401},[398,146175,146176],{"class":2239},"brew",[398,146178,24111],{"class":513},[398,146180,124511],{"class":513},[398,146182,146183,146185],{"class":400,"line":317},[398,146184,101072],{"class":2239},[398,146186,26486],{"class":457},[398,146188,146189,146191],{"class":400,"line":320},[398,146190,119893],{"class":2239},[398,146192,26486],{"class":457},[19,146194,146195],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[14,146197,146199],{"id":146198},"_133-linux安装","1.3.3 Linux安装",[19,146201,146202],{},"Ubuntu\u002FDebian：",[389,146204,146206],{"className":24099,"code":146205,"language":24101,"meta":316,"style":316},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[395,146207,146208,146216,146231,146237],{"__ignoreMap":316},[398,146209,146210,146212,146214],{"class":400,"line":401},[398,146211,24854],{"class":2239},[398,146213,117510],{"class":513},[398,146215,26435],{"class":513},[398,146217,146218,146220,146222,146224,146226,146228],{"class":400,"line":317},[398,146219,24854],{"class":2239},[398,146221,117510],{"class":513},[398,146223,24111],{"class":513},[398,146225,104596],{"class":513},[398,146227,100991],{"class":513},[398,146229,146230],{"class":513}," python3-venv\n",[398,146232,146233,146235],{"class":400,"line":320},[398,146234,101072],{"class":2239},[398,146236,26486],{"class":457},[398,146238,146239,146241],{"class":400,"line":1470},[398,146240,119893],{"class":2239},[398,146242,26486],{"class":457},[19,146244,146245],{},"Fedora：",[389,146247,146249],{"className":24099,"code":146248,"language":24101,"meta":316,"style":316},"sudo dnf install python3 python3-pip\n",[395,146250,146251],{"__ignoreMap":316},[398,146252,146253,146255,146257,146259,146261],{"class":400,"line":401},[398,146254,24854],{"class":2239},[398,146256,26508],{"class":513},[398,146258,24111],{"class":513},[398,146260,104596],{"class":513},[398,146262,119958],{"class":513},[19,146264,146265,146266,146268],{},"Linux 上通常使用 ",[395,146267,101072],{}," 命令，避免和系统旧版本 Python 冲突。",[343,146270,146272],{"id":146271},"_14-pip包管理器","1.4 pip包管理器",[19,146274,146275,146277],{},[395,146276,24108],{}," 用来安装第三方库。",[389,146279,146281],{"className":24099,"code":146280,"language":24101,"meta":316,"style":316},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[395,146282,146283,146292,146301,146309,146315],{"__ignoreMap":316},[398,146284,146285,146287,146289],{"class":400,"line":401},[398,146286,24108],{"class":2239},[398,146288,24111],{"class":513},[398,146290,146291],{"class":513}," requests\n",[398,146293,146294,146296,146299],{"class":400,"line":317},[398,146295,24108],{"class":2239},[398,146297,146298],{"class":513}," uninstall",[398,146300,146291],{"class":513},[398,146302,146303,146305,146307],{"class":400,"line":320},[398,146304,24108],{"class":2239},[398,146306,117767],{"class":513},[398,146308,146291],{"class":513},[398,146310,146311,146313],{"class":400,"line":1470},[398,146312,24108],{"class":2239},[398,146314,119148],{"class":513},[398,146316,146317,146319],{"class":400,"line":1476},[398,146318,24108],{"class":2239},[398,146320,146321],{"class":513}," freeze\n",[19,146323,146324],{},"国内网络较慢时可以临时使用镜像：",[389,146326,146328],{"className":24099,"code":146327,"language":24101,"meta":316,"style":316},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[395,146329,146330],{"__ignoreMap":316},[398,146331,146332,146334,146336,146339,146341],{"class":400,"line":401},[398,146333,24108],{"class":2239},[398,146335,24111],{"class":513},[398,146337,146338],{"class":513}," requests",[398,146340,26623],{"class":457},[398,146342,119921],{"class":513},[19,146344,146345],{},"常见第三方库：",[84,146347,146348,146357],{},[87,146349,146350],{},[90,146351,146352,146355],{},[93,146353,146354],{},"库",[93,146356,102889],{},[101,146358,146359,146367,146374,146382,146390,146398,146406],{},[90,146360,146361,146364],{},[106,146362,146363],{},"requests",[106,146365,146366],{},"网络请求",[90,146368,146369,146371],{},[106,146370,100819],{},[106,146372,146373],{},"数值计算",[90,146375,146376,146379],{},[106,146377,146378],{},"pandas",[106,146380,146381],{},"表格数据处理",[90,146383,146384,146387],{},[106,146385,146386],{},"matplotlib",[106,146388,146389],{},"绘图",[90,146391,146392,146395],{},[106,146393,146394],{},"pyecharts",[106,146396,146397],{},"ECharts 图表",[90,146399,146400,146403],{},[106,146401,146402],{},"flask",[106,146404,146405],{},"Web 后端",[90,146407,146408,146411],{},[106,146409,146410],{},"pytest",[106,146412,146413],{},"自动化测试",[343,146415,146417],{"id":146416},"_15-虚拟环境","1.5 虚拟环境",[19,146419,146420,146421,146424],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[395,146422,146423],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,146426,146427],{},"创建虚拟环境：",[389,146429,146431],{"className":24099,"code":146430,"language":24101,"meta":316,"style":316},"python -m venv .venv\n",[395,146432,146433],{"__ignoreMap":316},[398,146434,146435,146437,146439,146441],{"class":400,"line":401},[398,146436,30573],{"class":2239},[398,146438,101075],{"class":457},[398,146440,101078],{"class":513},[398,146442,101081],{"class":513},[19,146444,146445],{},"Windows 激活：",[389,146447,146449],{"className":24099,"code":146448,"language":24101,"meta":316,"style":316},".venv\\Scripts\\activate\n",[395,146450,146451],{"__ignoreMap":316},[398,146452,146453],{"class":400,"line":401},[398,146454,146448],{"class":2239},[19,146456,146457],{},"macOS\u002FLinux 激活：",[389,146459,146461],{"className":24099,"code":146460,"language":24101,"meta":316,"style":316},"source .venv\u002Fbin\u002Factivate\n",[395,146462,146463],{"__ignoreMap":316},[398,146464,146465,146467],{"class":400,"line":401},[398,146466,101086],{"class":457},[398,146468,101089],{"class":513},[19,146470,146471],{},"退出虚拟环境：",[389,146473,146475],{"className":24099,"code":146474,"language":24101,"meta":316,"style":316},"deactivate\n",[395,146476,146477],{"__ignoreMap":316},[398,146478,146479],{"class":400,"line":401},[398,146480,146474],{"class":2239},[19,146482,146483],{},"保存依赖：",[389,146485,146487],{"className":24099,"code":146486,"language":24101,"meta":316,"style":316},"pip freeze > requirements.txt\n",[395,146488,146489],{"__ignoreMap":316},[398,146490,146491,146493,146496,146498],{"class":400,"line":401},[398,146492,24108],{"class":2239},[398,146494,146495],{"class":513}," freeze",[398,146497,26415],{"class":404},[398,146499,146500],{"class":513}," requirements.txt\n",[19,146502,146503],{},"安装依赖：",[389,146505,146507],{"className":24099,"code":146506,"language":24101,"meta":316,"style":316},"pip install -r requirements.txt\n",[395,146508,146509],{"__ignoreMap":316},[398,146510,146511,146513,146515,146517],{"class":400,"line":401},[398,146512,24108],{"class":2239},[398,146514,24111],{"class":513},[398,146516,119832],{"class":457},[398,146518,146500],{"class":513},[343,146520,146522],{"id":146521},"_16-开发工具","1.6 开发工具",[14,146524,146526],{"id":146525},"_161-pycharm","1.6.1 PyCharm",[19,146528,146529],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,146531,122255],{},[38,146533,146534,146537,146540,146546,146549],{},[41,146535,146536],{},"New Project：创建项目。",[41,146538,146539],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[41,146541,146542,146543,126176],{},"New Python File：创建 ",[395,146544,146545],{},".py",[41,146547,146548],{},"Run：运行当前文件。",[41,146550,146551],{},"Debug：断点调试。",[14,146553,146555],{"id":146554},"_162-vs-code","1.6.2 VS Code",[19,146557,146558],{},"VS Code 轻量，适合后续多语言开发。",[19,146560,146561],{},"建议安装插件：",[38,146563,146564,146567,146570],{},[41,146565,146566],{},"Python。",[41,146568,146569],{},"Pylance。",[41,146571,146572],{},"Jupyter。",[19,146574,146575],{},"选择解释器：",[389,146577,146580],{"className":146578,"code":146579,"language":5464,"meta":316},[5462],"Ctrl + Shift + P -> Python: Select Interpreter\n",[395,146581,146579],{"__ignoreMap":316},[343,146583,146585],{"id":146584},"_17-第一个python程序","1.7 第一个Python程序",[19,146587,146588,146589,24896],{},"创建文件 ",[395,146590,146591],{},"hello.py",[389,146593,146595],{"className":30571,"code":146594,"language":30573,"meta":316,"style":316},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[395,146596,146597,146608],{"__ignoreMap":316},[398,146598,146599,146601,146603,146606],{"class":400,"line":401},[398,146600,30608],{"class":457},[398,146602,409],{"class":408},[398,146604,146605],{"class":513},"\"Hello World\"",[398,146607,415],{"class":408},[398,146609,146610,146612,146614,146617],{"class":400,"line":317},[398,146611,30608],{"class":457},[398,146613,409],{"class":408},[398,146615,146616],{"class":513},"\"你好，Python\"",[398,146618,415],{"class":408},[19,146620,146621],{},"在终端运行：",[389,146623,146625],{"className":24099,"code":146624,"language":24101,"meta":316,"style":316},"python hello.py\n",[395,146626,146627],{"__ignoreMap":316},[398,146628,146629,146631],{"class":400,"line":401},[398,146630,30573],{"class":2239},[398,146632,146633],{"class":513}," hello.py\n",[19,146635,146636],{},"或：",[389,146638,146640],{"className":24099,"code":146639,"language":24101,"meta":316,"style":316},"python3 hello.py\n",[395,146641,146642],{"__ignoreMap":316},[398,146643,146644,146646],{"class":400,"line":401},[398,146645,101072],{"class":2239},[398,146647,146633],{"class":513},[19,146649,146650],{},"输出：",[389,146652,146655],{"className":146653,"code":146654,"language":5464,"meta":316},[5462],"Hello World\n你好，Python\n",[395,146656,146654],{"__ignoreMap":316},[343,146658,146660],{"id":146659},"_18-print函数","1.8 print函数",[19,146662,146663,146666],{},[395,146664,146665],{},"print()"," 用来输出内容。",[389,146668,146670],{"className":30571,"code":146669,"language":30573,"meta":316,"style":316},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[395,146671,146672,146682,146692,146702],{"__ignoreMap":316},[398,146673,146674,146676,146678,146680],{"class":400,"line":401},[398,146675,30608],{"class":457},[398,146677,409],{"class":408},[398,146679,6121],{"class":513},[398,146681,415],{"class":408},[398,146683,146684,146686,146688,146690],{"class":400,"line":317},[398,146685,30608],{"class":457},[398,146687,409],{"class":408},[398,146689,713],{"class":457},[398,146691,415],{"class":408},[398,146693,146694,146696,146698,146700],{"class":400,"line":320},[398,146695,30608],{"class":457},[398,146697,409],{"class":408},[398,146699,458],{"class":457},[398,146701,415],{"class":408},[398,146703,146704,146706,146708,146711,146713,146715],{"class":400,"line":1470},[398,146705,30608],{"class":457},[398,146707,409],{"class":408},[398,146709,146710],{"class":513},"\"年龄:\"",[398,146712,12712],{"class":408},[398,146714,1052],{"class":457},[398,146716,415],{"class":408},[19,146718,146719],{},"多个内容用逗号隔开，默认中间加空格：",[389,146721,146723],{"className":30571,"code":146722,"language":30573,"meta":316,"style":316},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[395,146724,146725,146735,146745],{"__ignoreMap":316},[398,146726,146727,146730,146732],{"class":400,"line":401},[398,146728,146729],{"class":408},"name ",[398,146731,454],{"class":404},[398,146733,146734],{"class":513}," \"张三\"\n",[398,146736,146737,146740,146742],{"class":400,"line":317},[398,146738,146739],{"class":408},"age ",[398,146741,454],{"class":404},[398,146743,146744],{"class":457}," 18\n",[398,146746,146747,146749,146751,146754,146757,146759],{"class":400,"line":320},[398,146748,30608],{"class":457},[398,146750,409],{"class":408},[398,146752,146753],{"class":513},"\"姓名:\"",[398,146755,146756],{"class":408},", name, ",[398,146758,146710],{"class":513},[398,146760,146761],{"class":408},", age)\n",[19,146763,146764],{},"修改分隔符：",[389,146766,146768],{"className":30571,"code":146767,"language":30573,"meta":316,"style":316},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[395,146769,146770],{"__ignoreMap":316},[398,146771,146772,146774,146776,146779,146781,146783,146785,146787,146789,146792,146794,146796],{"class":400,"line":401},[398,146773,30608],{"class":457},[398,146775,409],{"class":408},[398,146777,146778],{"class":513},"\"2024\"",[398,146780,12712],{"class":408},[398,146782,54509],{"class":513},[398,146784,12712],{"class":408},[398,146786,54509],{"class":513},[398,146788,12712],{"class":408},[398,146790,146791],{"class":5493},"sep",[398,146793,454],{"class":404},[398,146795,32676],{"class":513},[398,146797,415],{"class":408},[19,146799,146800],{},"修改结尾符：",[389,146802,146804],{"className":30571,"code":146803,"language":30573,"meta":316,"style":316},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[395,146805,146806,146824],{"__ignoreMap":316},[398,146807,146808,146810,146812,146814,146816,146818,146820,146822],{"class":400,"line":401},[398,146809,30608],{"class":457},[398,146811,409],{"class":408},[398,146813,6121],{"class":513},[398,146815,12712],{"class":408},[398,146817,45994],{"class":5493},[398,146819,454],{"class":404},[398,146821,4635],{"class":513},[398,146823,415],{"class":408},[398,146825,146826,146828,146830,146833],{"class":400,"line":317},[398,146827,30608],{"class":457},[398,146829,409],{"class":408},[398,146831,146832],{"class":513},"\"python\"",[398,146834,415],{"class":408},[343,146836,146838],{"id":146837},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,146840,146841],{},"交互运行适合临时验证：",[389,146843,146845],{"className":30571,"code":146844,"language":30573,"meta":316,"style":316},">>> 10 * 3\n30\n",[395,146846,146847,146857],{"__ignoreMap":316},[398,146848,146849,146851,146853,146855],{"class":400,"line":401},[398,146850,146046],{"class":404},[398,146852,2314],{"class":457},[398,146854,6795],{"class":404},[398,146856,120229],{"class":457},[398,146858,146859],{"class":400,"line":317},[398,146860,146861],{"class":457},"30\n",[19,146863,146864],{},"脚本运行适合保存程序：",[389,146866,146868],{"className":30571,"code":146867,"language":30573,"meta":316,"style":316},"price = 8\ncount = 5\nprint(price * count)\n",[395,146869,146870,146880,146889],{"__ignoreMap":316},[398,146871,146872,146875,146877],{"class":400,"line":401},[398,146873,146874],{"class":408},"price ",[398,146876,454],{"class":404},[398,146878,146879],{"class":457}," 8\n",[398,146881,146882,146885,146887],{"class":400,"line":317},[398,146883,146884],{"class":408},"count ",[398,146886,454],{"class":404},[398,146888,54620],{"class":457},[398,146890,146891,146893,146896,146898],{"class":400,"line":320},[398,146892,30608],{"class":457},[398,146894,146895],{"class":408},"(price ",[398,146897,857],{"class":404},[398,146899,146900],{"class":408}," count)\n",[19,146902,146903],{},"实际学习中推荐：",[38,146905,146906,146909,146914],{},[41,146907,146908],{},"临时试一个语法，用交互模式。",[41,146910,146911,146912,126176],{},"写完整练习，用 ",[395,146913,146545],{},[41,146915,146916],{},"写项目，用独立目录和虚拟环境。",[343,146918,146920],{"id":146919},"_110-常见错误","1.10 常见错误",[14,146922,146924],{"id":146923},"_1101-命令找不到","1.10.1 命令找不到",[389,146926,146929],{"className":146927,"code":146928,"language":5464,"meta":316},[5462],"python: command not found\n",[395,146930,146928],{"__ignoreMap":316},[19,146932,146933],{},"原因：",[38,146935,146936,146939,146942],{},[41,146937,146938],{},"没安装 Python。",[41,146940,146941],{},"PATH 没配置。",[41,146943,146944,146945,28578],{},"Linux\u002FmacOS 应该使用 ",[395,146946,101072],{},[14,146948,146950],{"id":146949},"_1102-文件名冲突","1.10.2 文件名冲突",[19,146952,146953],{},"不要把文件命名为：",[389,146955,146958],{"className":146956,"code":146957,"language":5464,"meta":316},[5462],"random.py\njson.py\ntime.py\nrequests.py\n",[395,146959,146957],{"__ignoreMap":316},[19,146961,146962],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[14,146964,146966],{"id":146965},"_1103-中文乱码","1.10.3 中文乱码",[19,146968,146969],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,146971,146972],{},"如果读写文件出现乱码，要明确指定编码：",[389,146974,146976],{"className":30571,"code":146975,"language":30573,"meta":316,"style":316},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[395,146977,146978,147012],{"__ignoreMap":316},[398,146979,146980,146982,146985,146987,146990,146992,146995,146997,147000,147002,147005,147007,147009],{"class":400,"line":401},[398,146981,108026],{"class":404},[398,146983,146984],{"class":457}," open",[398,146986,409],{"class":408},[398,146988,146989],{"class":513},"\"data.txt\"",[398,146991,12712],{"class":408},[398,146993,146994],{"class":513},"\"r\"",[398,146996,12712],{"class":408},[398,146998,146999],{"class":5493},"encoding",[398,147001,454],{"class":404},[398,147003,147004],{"class":513},"\"utf-8\"",[398,147006,13991],{"class":408},[398,147008,31576],{"class":404},[398,147010,147011],{"class":408}," f:\n",[398,147013,147014,147017,147019],{"class":400,"line":317},[398,147015,147016],{"class":408},"    content ",[398,147018,454],{"class":404},[398,147020,147021],{"class":408}," f.read()\n",[343,147023,147025],{"id":147024},"_111-本章练习","1.11 本章练习",[38,147027,147028,147031,147037],{},[41,147029,147030],{},"安装 Python，并在终端输出版本号。",[41,147032,147033,147034,147036],{},"新建 ",[395,147035,146591],{},"，输出自己的姓名、年龄、学习目标。",[41,147038,104559,147039,147041],{},[395,147040,146665],{}," 输出下面格式：",[389,147043,147046],{"className":147044,"code":147045,"language":5464,"meta":316},[5462],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[395,147047,147045],{"__ignoreMap":316},[38,147049,147050],{"start":1470},[41,147051,104559,147052,147054],{},[395,147053,146791],{}," 输出日期：",[389,147056,147059],{"className":147057,"code":147058,"language":5464,"meta":316},[5462],"2024-10-10\n",[395,147060,147058],{"__ignoreMap":316},[38,147062,147063],{"start":1476},[41,147064,104559,147065,147067,147068,147070],{},[395,147066,45994],{}," 让两次 ",[395,147069,146665],{}," 输出在同一行。",[5403,147072,147073],{},"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":316,"searchDepth":317,"depth":317,"links":147075},[147076,147077,147078,147083,147084,147085,147089,147090,147091,147092,147097],{"id":145958,"depth":317,"text":145959},{"id":146002,"depth":317,"text":146003},{"id":146103,"depth":317,"text":146104,"children":147079},[147080,147081,147082],{"id":146107,"depth":320,"text":146108},{"id":146162,"depth":320,"text":146163},{"id":146198,"depth":320,"text":146199},{"id":146271,"depth":317,"text":146272},{"id":146416,"depth":317,"text":146417},{"id":146521,"depth":317,"text":146522,"children":147086},[147087,147088],{"id":146525,"depth":320,"text":146526},{"id":146554,"depth":320,"text":146555},{"id":146584,"depth":317,"text":146585},{"id":146659,"depth":317,"text":146660},{"id":146837,"depth":317,"text":146838},{"id":146919,"depth":317,"text":146920,"children":147093},[147094,147095,147096],{"id":146923,"depth":320,"text":146924},{"id":146949,"depth":320,"text":146950},{"id":146965,"depth":320,"text":146966},{"id":147024,"depth":317,"text":147025},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145950,"description":23654},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":147104,"title":147105,"body":147106,"description":23654,"extension":326,"meta":149510,"navigation":328,"path":149511,"seo":149512,"stem":149513,"__hash__":149514},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":147107,"toc":149495},[147108,147111,147115,147118,147121,147138,147141,147183,147186,147190,147193,147196,147233,147236,147270,147273,147365,147369,147383,147386,147413,147416,147420,147523,147530,147533,147550,147554,147561,147750,147753,147826,147830,147833,147917,147920,147952,147956,148160,148163,148167,148173,148275,148278,148534,148538,148541,148544,148558,148560,148746,148750,149112,149118,149122,149125,149249,149252,149431,149434,149438,149471,149475,149492],[10,147109,147105],{"id":147110},"_10-json与pyecharts折线图",[343,147112,147114],{"id":147113},"_101-数据可视化","10.1 数据可视化",[19,147116,147117],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,147119,147120],{},"常见图表：",[38,147122,147123,147126,147129,147132,147135],{},[41,147124,147125],{},"折线图：看趋势。",[41,147127,147128],{},"柱状图：看分类对比。",[41,147130,147131],{},"饼图：看占比。",[41,147133,147134],{},"地图：看地域分布。",[41,147136,147137],{},"散点图：看两个变量之间的关系。",[19,147139,147140],{},"Python 可视化常用库：",[84,147142,147143,147151],{},[87,147144,147145],{},[90,147146,147147,147149],{},[93,147148,146354],{},[93,147150,24017],{},[101,147152,147153,147160,147168,147175],{},[90,147154,147155,147157],{},[106,147156,146386],{},[106,147158,147159],{},"基础、经典、可定制",[90,147161,147162,147165],{},[106,147163,147164],{},"seaborn",[106,147166,147167],{},"统计图表更美观",[90,147169,147170,147172],{},[106,147171,146394],{},[106,147173,147174],{},"生成交互式网页图表",[90,147176,147177,147180],{},[106,147178,147179],{},"plotly",[106,147181,147182],{},"交互图表能力强",[19,147184,147185],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[343,147187,147189],{"id":147188},"_102-json回顾","10.2 JSON回顾",[19,147191,147192],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,147194,147195],{},"Python 字典：",[389,147197,147199],{"className":30571,"code":147198,"language":30573,"meta":316,"style":316},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[395,147200,147201,147209,147220,147229],{"__ignoreMap":316},[398,147202,147203,147205,147207],{"class":400,"line":401},[398,147204,101851],{"class":408},[398,147206,454],{"class":404},[398,147208,15849],{"class":408},[398,147210,147211,147214,147216,147218],{"class":400,"line":317},[398,147212,147213],{"class":513},"    \"name\"",[398,147215,51630],{"class":408},[398,147217,69462],{"class":513},[398,147219,31659],{"class":408},[398,147221,147222,147225,147227],{"class":400,"line":320},[398,147223,147224],{"class":513},"    \"value\"",[398,147226,51630],{"class":408},[398,147228,97651],{"class":457},[398,147230,147231],{"class":400,"line":1470},[398,147232,1841],{"class":408},[19,147234,147235],{},"JSON 字符串：",[389,147237,147240],{"className":147238,"code":147239,"language":145985,"meta":316,"style":316},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[395,147241,147242,147246,147257,147266],{"__ignoreMap":316},[398,147243,147244],{"class":400,"line":401},[398,147245,1822],{"class":408},[398,147247,147248,147251,147253,147255],{"class":400,"line":317},[398,147249,147250],{"class":457},"  \"name\"",[398,147252,51630],{"class":408},[398,147254,69462],{"class":513},[398,147256,31659],{"class":408},[398,147258,147259,147262,147264],{"class":400,"line":320},[398,147260,147261],{"class":457},"  \"value\"",[398,147263,51630],{"class":408},[398,147265,97651],{"class":457},[398,147267,147268],{"class":400,"line":1470},[398,147269,1841],{"class":408},[19,147271,147272],{},"Python 与 JSON 的转换：",[389,147274,147276],{"className":30571,"code":147275,"language":30573,"meta":316,"style":316},"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",[395,147277,147278,147285,147289,147314,147318,147337,147344,147348,147358],{"__ignoreMap":316},[398,147279,147280,147282],{"class":400,"line":401},[398,147281,30585],{"class":404},[398,147283,147284],{"class":408}," json\n",[398,147286,147287],{"class":400,"line":317},[398,147288,2676],{"emptyLinePlaceholder":328},[398,147290,147291,147293,147295,147297,147299,147301,147303,147305,147308,147310,147312],{"class":400,"line":320},[398,147292,101851],{"class":408},[398,147294,454],{"class":404},[398,147296,4724],{"class":408},[398,147298,62872],{"class":513},[398,147300,51630],{"class":408},[398,147302,69462],{"class":513},[398,147304,12712],{"class":408},[398,147306,147307],{"class":513},"\"value\"",[398,147309,51630],{"class":408},[398,147311,713],{"class":457},[398,147313,1841],{"class":408},[398,147315,147316],{"class":400,"line":1470},[398,147317,2676],{"emptyLinePlaceholder":328},[398,147319,147320,147323,147325,147328,147331,147333,147335],{"class":400,"line":1476},[398,147321,147322],{"class":408},"json_text ",[398,147324,454],{"class":404},[398,147326,147327],{"class":408}," json.dumps(data, ",[398,147329,147330],{"class":5493},"ensure_ascii",[398,147332,454],{"class":404},[398,147334,34180],{"class":457},[398,147336,415],{"class":408},[398,147338,147339,147341],{"class":400,"line":1490},[398,147340,30608],{"class":457},[398,147342,147343],{"class":408},"(json_text)\n",[398,147345,147346],{"class":400,"line":1496},[398,147347,2676],{"emptyLinePlaceholder":328},[398,147349,147350,147353,147355],{"class":400,"line":1587},[398,147351,147352],{"class":408},"new_data ",[398,147354,454],{"class":404},[398,147356,147357],{"class":408}," json.loads(json_text)\n",[398,147359,147360,147362],{"class":400,"line":1593},[398,147361,30608],{"class":457},[398,147363,147364],{"class":408},"(new_data)\n",[343,147366,147368],{"id":147367},"_103-安装pyecharts","10.3 安装pyecharts",[389,147370,147372],{"className":24099,"code":147371,"language":24101,"meta":316,"style":316},"pip install pyecharts\n",[395,147373,147374],{"__ignoreMap":316},[398,147375,147376,147378,147380],{"class":400,"line":401},[398,147377,24108],{"class":2239},[398,147379,24111],{"class":513},[398,147381,147382],{"class":513}," pyecharts\n",[19,147384,147385],{},"验证：",[389,147387,147389],{"className":30571,"code":147388,"language":30573,"meta":316,"style":316},"import pyecharts\n\nprint(pyecharts.__version__)\n",[395,147390,147391,147397,147401],{"__ignoreMap":316},[398,147392,147393,147395],{"class":400,"line":401},[398,147394,30585],{"class":404},[398,147396,147382],{"class":408},[398,147398,147399],{"class":400,"line":317},[398,147400,2676],{"emptyLinePlaceholder":328},[398,147402,147403,147405,147408,147411],{"class":400,"line":320},[398,147404,30608],{"class":457},[398,147406,147407],{"class":408},"(pyecharts.",[398,147409,147410],{"class":457},"__version__",[398,147412,415],{"class":408},[19,147414,147415],{},"如果使用虚拟环境，要先激活环境再安装。",[343,147417,147419],{"id":147418},"_104-第一个折线图","10.4 第一个折线图",[389,147421,147423],{"className":30571,"code":147422,"language":30573,"meta":316,"style":316},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[395,147424,147425,147437,147441,147451,147481,147513],{"__ignoreMap":316},[398,147426,147427,147429,147432,147434],{"class":400,"line":401},[398,147428,30930],{"class":404},[398,147430,147431],{"class":408}," pyecharts.charts ",[398,147433,30585],{"class":404},[398,147435,147436],{"class":408}," Line\n",[398,147438,147439],{"class":400,"line":317},[398,147440,2676],{"emptyLinePlaceholder":328},[398,147442,147443,147446,147448],{"class":400,"line":320},[398,147444,147445],{"class":408},"line ",[398,147447,454],{"class":404},[398,147449,147450],{"class":408}," Line()\n",[398,147452,147453,147456,147459,147461,147464,147466,147469,147471,147474,147476,147479],{"class":400,"line":1470},[398,147454,147455],{"class":408},"line.add_xaxis([",[398,147457,147458],{"class":513},"\"周一\"",[398,147460,12712],{"class":408},[398,147462,147463],{"class":513},"\"周二\"",[398,147465,12712],{"class":408},[398,147467,147468],{"class":513},"\"周三\"",[398,147470,12712],{"class":408},[398,147472,147473],{"class":513},"\"周四\"",[398,147475,12712],{"class":408},[398,147477,147478],{"class":513},"\"周五\"",[398,147480,4933],{"class":408},[398,147482,147483,147486,147489,147491,147493,147495,147497,147499,147501,147503,147506,147508,147511],{"class":400,"line":1476},[398,147484,147485],{"class":408},"line.add_yaxis(",[398,147487,147488],{"class":513},"\"销售额\"",[398,147490,77711],{"class":408},[398,147492,713],{"class":457},[398,147494,12712],{"class":408},[398,147496,1219],{"class":457},[398,147498,12712],{"class":408},[398,147500,1264],{"class":457},[398,147502,12712],{"class":408},[398,147504,147505],{"class":457},"150",[398,147507,12712],{"class":408},[398,147509,147510],{"class":457},"180",[398,147512,4933],{"class":408},[398,147514,147515,147518,147521],{"class":400,"line":1490},[398,147516,147517],{"class":408},"line.render(",[398,147519,147520],{"class":513},"\"line.html\"",[398,147522,415],{"class":408},[19,147524,147525,147526,147529],{},"运行后会生成 ",[395,147527,147528],{},"line.html","，用浏览器打开即可看到图表。",[19,147531,147532],{},"核心步骤：",[38,147534,147535,147538,147541,147544,147547],{},[41,147536,147537],{},"导入图表类。",[41,147539,147540],{},"创建图表对象。",[41,147542,147543],{},"添加 x 轴数据。",[41,147545,147546],{},"添加 y 轴数据。",[41,147548,147549],{},"渲染为 HTML。",[343,147551,147553],{"id":147552},"_105-全局配置","10.5 全局配置",[19,147555,147556,147557,147560],{},"常用配置在 ",[395,147558,147559],{},"pyecharts.options"," 中。",[389,147562,147564],{"className":30571,"code":147563,"language":30573,"meta":316,"style":316},"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",[395,147565,147566,147583,147593,147597,147605,147629,147657,147662,147681,147700,147718,147738,147742],{"__ignoreMap":316},[398,147567,147568,147570,147573,147575,147578,147580],{"class":400,"line":401},[398,147569,30930],{"class":404},[398,147571,147572],{"class":408}," pyecharts ",[398,147574,30585],{"class":404},[398,147576,147577],{"class":408}," options ",[398,147579,31576],{"class":404},[398,147581,147582],{"class":408}," opts\n",[398,147584,147585,147587,147589,147591],{"class":400,"line":317},[398,147586,30930],{"class":404},[398,147588,147431],{"class":408},[398,147590,30585],{"class":404},[398,147592,147436],{"class":408},[398,147594,147595],{"class":400,"line":320},[398,147596,2676],{"emptyLinePlaceholder":328},[398,147598,147599,147601,147603],{"class":400,"line":1470},[398,147600,147445],{"class":408},[398,147602,454],{"class":404},[398,147604,147450],{"class":408},[398,147606,147607,147609,147611,147613,147615,147617,147619,147621,147623,147625,147627],{"class":400,"line":1476},[398,147608,147455],{"class":408},[398,147610,147458],{"class":513},[398,147612,12712],{"class":408},[398,147614,147463],{"class":513},[398,147616,12712],{"class":408},[398,147618,147468],{"class":513},[398,147620,12712],{"class":408},[398,147622,147473],{"class":513},[398,147624,12712],{"class":408},[398,147626,147478],{"class":513},[398,147628,4933],{"class":408},[398,147630,147631,147633,147635,147637,147639,147641,147643,147645,147647,147649,147651,147653,147655],{"class":400,"line":1490},[398,147632,147485],{"class":408},[398,147634,147488],{"class":513},[398,147636,77711],{"class":408},[398,147638,713],{"class":457},[398,147640,12712],{"class":408},[398,147642,1219],{"class":457},[398,147644,12712],{"class":408},[398,147646,1264],{"class":457},[398,147648,12712],{"class":408},[398,147650,147505],{"class":457},[398,147652,12712],{"class":408},[398,147654,147510],{"class":457},[398,147656,4933],{"class":408},[398,147658,147659],{"class":400,"line":1496},[398,147660,147661],{"class":408},"line.set_global_opts(\n",[398,147663,147664,147667,147669,147672,147674,147676,147679],{"class":400,"line":1587},[398,147665,147666],{"class":5493},"    title_opts",[398,147668,454],{"class":404},[398,147670,147671],{"class":408},"opts.TitleOpts(",[398,147673,51600],{"class":5493},[398,147675,454],{"class":404},[398,147677,147678],{"class":513},"\"一周销售额\"",[398,147680,38240],{"class":408},[398,147682,147683,147686,147688,147691,147693,147695,147698],{"class":400,"line":1593},[398,147684,147685],{"class":5493},"    xaxis_opts",[398,147687,454],{"class":404},[398,147689,147690],{"class":408},"opts.AxisOpts(",[398,147692,80003],{"class":5493},[398,147694,454],{"class":404},[398,147696,147697],{"class":513},"\"日期\"",[398,147699,38240],{"class":408},[398,147701,147702,147705,147707,147709,147711,147713,147716],{"class":400,"line":1605},[398,147703,147704],{"class":5493},"    yaxis_opts",[398,147706,454],{"class":404},[398,147708,147690],{"class":408},[398,147710,80003],{"class":5493},[398,147712,454],{"class":404},[398,147714,147715],{"class":513},"\"金额\"",[398,147717,38240],{"class":408},[398,147719,147720,147723,147725,147728,147731,147733,147736],{"class":400,"line":1888},[398,147721,147722],{"class":5493},"    tooltip_opts",[398,147724,454],{"class":404},[398,147726,147727],{"class":408},"opts.TooltipOpts(",[398,147729,147730],{"class":5493},"trigger",[398,147732,454],{"class":404},[398,147734,147735],{"class":513},"\"axis\"",[398,147737,38240],{"class":408},[398,147739,147740],{"class":400,"line":1893},[398,147741,415],{"class":408},[398,147743,147744,147746,147748],{"class":400,"line":1899},[398,147745,147517],{"class":408},[398,147747,147520],{"class":513},[398,147749,415],{"class":408},[19,147751,147752],{},"常见全局配置：",[84,147754,147755,147764],{},[87,147756,147757],{},[90,147758,147759,147762],{},[93,147760,147761],{},"配置",[93,147763,102889],{},[101,147765,147766,147776,147786,147796,147806,147816],{},[90,147767,147768,147773],{},[106,147769,147770],{},[395,147771,147772],{},"TitleOpts",[106,147774,147775],{},"标题",[90,147777,147778,147783],{},[106,147779,147780],{},[395,147781,147782],{},"LegendOpts",[106,147784,147785],{},"图例",[90,147787,147788,147793],{},[106,147789,147790],{},[395,147791,147792],{},"TooltipOpts",[106,147794,147795],{},"提示框",[90,147797,147798,147803],{},[106,147799,147800],{},[395,147801,147802],{},"AxisOpts",[106,147804,147805],{},"坐标轴",[90,147807,147808,147813],{},[106,147809,147810],{},[395,147811,147812],{},"VisualMapOpts",[106,147814,147815],{},"视觉映射",[90,147817,147818,147823],{},[106,147819,147820],{},[395,147821,147822],{},"DataZoomOpts",[106,147824,147825],{},"区域缩放",[343,147827,147829],{"id":147828},"_106-系列配置","10.6 系列配置",[19,147831,147832],{},"系列配置作用于某一组数据。",[389,147834,147836],{"className":30571,"code":147835,"language":30573,"meta":316,"style":316},"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",[395,147837,147838,147843,147854,147883,147894,147913],{"__ignoreMap":316},[398,147839,147840],{"class":400,"line":401},[398,147841,147842],{"class":408},"line.add_yaxis(\n",[398,147844,147845,147848,147850,147852],{"class":400,"line":317},[398,147846,147847],{"class":5493},"    series_name",[398,147849,454],{"class":404},[398,147851,147488],{"class":513},[398,147853,31659],{"class":408},[398,147855,147856,147859,147861,147863,147865,147867,147869,147871,147873,147875,147877,147879,147881],{"class":400,"line":320},[398,147857,147858],{"class":5493},"    y_axis",[398,147860,454],{"class":404},[398,147862,1292],{"class":408},[398,147864,713],{"class":457},[398,147866,12712],{"class":408},[398,147868,1219],{"class":457},[398,147870,12712],{"class":408},[398,147872,1264],{"class":457},[398,147874,12712],{"class":408},[398,147876,147505],{"class":457},[398,147878,12712],{"class":408},[398,147880,147510],{"class":457},[398,147882,88029],{"class":408},[398,147884,147885,147888,147890,147892],{"class":400,"line":1470},[398,147886,147887],{"class":5493},"    is_smooth",[398,147889,454],{"class":404},[398,147891,31669],{"class":457},[398,147893,31659],{"class":408},[398,147895,147896,147899,147901,147904,147907,147909,147911],{"class":400,"line":1476},[398,147897,147898],{"class":5493},"    label_opts",[398,147900,454],{"class":404},[398,147902,147903],{"class":408},"opts.LabelOpts(",[398,147905,147906],{"class":5493},"is_show",[398,147908,454],{"class":404},[398,147910,31669],{"class":457},[398,147912,38240],{"class":408},[398,147914,147915],{"class":400,"line":1490},[398,147916,415],{"class":408},[19,147918,147919],{},"常用参数：",[38,147921,147922,147928,147934,147940,147946],{},[41,147923,147924,147927],{},[395,147925,147926],{},"series_name","：系列名称。",[41,147929,147930,147933],{},[395,147931,147932],{},"y_axis","：y 轴数据。",[41,147935,147936,147939],{},[395,147937,147938],{},"is_smooth","：是否平滑曲线。",[41,147941,147942,147945],{},[395,147943,147944],{},"label_opts","：标签配置。",[41,147947,147948,147951],{},[395,147949,147950],{},"symbol_size","：标记点大小。",[343,147953,147955],{"id":147954},"_107-多条折线","10.7 多条折线",[389,147957,147959],{"className":30571,"code":147958,"language":30573,"meta":316,"style":316},"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",[395,147960,147961,147975,147985,147989,148018,148022,148030,148035,148073,148110,148114,148131,148147,148151],{"__ignoreMap":316},[398,147962,147963,147965,147967,147969,147971,147973],{"class":400,"line":401},[398,147964,30930],{"class":404},[398,147966,147572],{"class":408},[398,147968,30585],{"class":404},[398,147970,147577],{"class":408},[398,147972,31576],{"class":404},[398,147974,147582],{"class":408},[398,147976,147977,147979,147981,147983],{"class":400,"line":317},[398,147978,30930],{"class":404},[398,147980,147431],{"class":408},[398,147982,30585],{"class":404},[398,147984,147436],{"class":408},[398,147986,147987],{"class":400,"line":320},[398,147988,2676],{"emptyLinePlaceholder":328},[398,147990,147991,147994,147996,147998,148000,148002,148004,148006,148008,148010,148012,148014,148016],{"class":400,"line":1470},[398,147992,147993],{"class":408},"dates ",[398,147995,454],{"class":404},[398,147997,52419],{"class":408},[398,147999,147458],{"class":513},[398,148001,12712],{"class":408},[398,148003,147463],{"class":513},[398,148005,12712],{"class":408},[398,148007,147468],{"class":513},[398,148009,12712],{"class":408},[398,148011,147473],{"class":513},[398,148013,12712],{"class":408},[398,148015,147478],{"class":513},[398,148017,33439],{"class":408},[398,148019,148020],{"class":400,"line":1476},[398,148021,2676],{"emptyLinePlaceholder":328},[398,148023,148024,148026,148028],{"class":400,"line":1490},[398,148025,147445],{"class":408},[398,148027,454],{"class":404},[398,148029,147450],{"class":408},[398,148031,148032],{"class":400,"line":1496},[398,148033,148034],{"class":408},"line.add_xaxis(dates)\n",[398,148036,148037,148039,148042,148044,148046,148048,148051,148053,148055,148057,148059,148061,148063,148065,148067,148069,148071],{"class":400,"line":1587},[398,148038,147485],{"class":408},[398,148040,148041],{"class":513},"\"线上销售\"",[398,148043,77711],{"class":408},[398,148045,713],{"class":457},[398,148047,12712],{"class":408},[398,148049,148050],{"class":457},"130",[398,148052,12712],{"class":408},[398,148054,1219],{"class":457},[398,148056,12712],{"class":408},[398,148058,21325],{"class":457},[398,148060,12712],{"class":408},[398,148062,1998],{"class":457},[398,148064,112395],{"class":408},[398,148066,147938],{"class":5493},[398,148068,454],{"class":404},[398,148070,31669],{"class":457},[398,148072,415],{"class":408},[398,148074,148075,148077,148080,148082,148084,148086,148088,148090,148092,148094,148096,148098,148100,148102,148104,148106,148108],{"class":400,"line":1593},[398,148076,147485],{"class":408},[398,148078,148079],{"class":513},"\"线下销售\"",[398,148081,77711],{"class":408},[398,148083,1014],{"class":457},[398,148085,12712],{"class":408},[398,148087,1264],{"class":457},[398,148089,12712],{"class":408},[398,148091,713],{"class":457},[398,148093,12712],{"class":408},[398,148095,1219],{"class":457},[398,148097,12712],{"class":408},[398,148099,147505],{"class":457},[398,148101,112395],{"class":408},[398,148103,147938],{"class":5493},[398,148105,454],{"class":404},[398,148107,31669],{"class":457},[398,148109,415],{"class":408},[398,148111,148112],{"class":400,"line":1605},[398,148113,147661],{"class":408},[398,148115,148116,148118,148120,148122,148124,148126,148129],{"class":400,"line":1888},[398,148117,147666],{"class":5493},[398,148119,454],{"class":404},[398,148121,147671],{"class":408},[398,148123,51600],{"class":5493},[398,148125,454],{"class":404},[398,148127,148128],{"class":513},"\"线上线下销售趋势\"",[398,148130,38240],{"class":408},[398,148132,148133,148135,148137,148139,148141,148143,148145],{"class":400,"line":1893},[398,148134,147722],{"class":5493},[398,148136,454],{"class":404},[398,148138,147727],{"class":408},[398,148140,147730],{"class":5493},[398,148142,454],{"class":404},[398,148144,147735],{"class":513},[398,148146,38240],{"class":408},[398,148148,148149],{"class":400,"line":1899},[398,148150,415],{"class":408},[398,148152,148153,148155,148158],{"class":400,"line":1904},[398,148154,147517],{"class":408},[398,148156,148157],{"class":513},"\"sales.html\"",[398,148159,415],{"class":408},[19,148161,148162],{},"多条折线适合比较不同指标或不同地区。",[343,148164,148166],{"id":148165},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,148168,148169,148170,24896],{},"假设 ",[395,148171,148172],{},"sales.json",[389,148174,148176],{"className":147238,"code":148175,"language":145985,"meta":316,"style":316},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[395,148177,148178,148183,148215,148243,148271],{"__ignoreMap":316},[398,148179,148180],{"class":400,"line":401},[398,148181,148182],{"class":408},"[\n",[398,148184,148185,148188,148191,148193,148195,148197,148200,148202,148204,148206,148209,148211,148213],{"class":400,"line":317},[398,148186,148187],{"class":408},"  {",[398,148189,148190],{"class":457},"\"date\"",[398,148192,51630],{"class":408},[398,148194,147458],{"class":513},[398,148196,12712],{"class":408},[398,148198,148199],{"class":457},"\"online\"",[398,148201,51630],{"class":408},[398,148203,713],{"class":457},[398,148205,12712],{"class":408},[398,148207,148208],{"class":457},"\"offline\"",[398,148210,51630],{"class":408},[398,148212,1014],{"class":457},[398,148214,5206],{"class":408},[398,148216,148217,148219,148221,148223,148225,148227,148229,148231,148233,148235,148237,148239,148241],{"class":400,"line":320},[398,148218,148187],{"class":408},[398,148220,148190],{"class":457},[398,148222,51630],{"class":408},[398,148224,147463],{"class":513},[398,148226,12712],{"class":408},[398,148228,148199],{"class":457},[398,148230,51630],{"class":408},[398,148232,148050],{"class":457},[398,148234,12712],{"class":408},[398,148236,148208],{"class":457},[398,148238,51630],{"class":408},[398,148240,1264],{"class":457},[398,148242,5206],{"class":408},[398,148244,148245,148247,148249,148251,148253,148255,148257,148259,148261,148263,148265,148267,148269],{"class":400,"line":1470},[398,148246,148187],{"class":408},[398,148248,148190],{"class":457},[398,148250,51630],{"class":408},[398,148252,147468],{"class":513},[398,148254,12712],{"class":408},[398,148256,148199],{"class":457},[398,148258,51630],{"class":408},[398,148260,1219],{"class":457},[398,148262,12712],{"class":408},[398,148264,148208],{"class":457},[398,148266,51630],{"class":408},[398,148268,713],{"class":457},[398,148270,1841],{"class":408},[398,148272,148273],{"class":400,"line":1476},[398,148274,33439],{"class":408},[19,148276,148277],{},"读取并绘图：",[389,148279,148281],{"className":30571,"code":148280,"language":30573,"meta":316,"style":316},"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",[395,148282,148283,148289,148303,148313,148317,148349,148362,148366,148374,148383,148392,148396,148408,148417,148426,148435,148439,148447,148451,148468,148485,148489,148506,148522,148526],{"__ignoreMap":316},[398,148284,148285,148287],{"class":400,"line":401},[398,148286,30585],{"class":404},[398,148288,147284],{"class":408},[398,148290,148291,148293,148295,148297,148299,148301],{"class":400,"line":317},[398,148292,30930],{"class":404},[398,148294,147572],{"class":408},[398,148296,30585],{"class":404},[398,148298,147577],{"class":408},[398,148300,31576],{"class":404},[398,148302,147582],{"class":408},[398,148304,148305,148307,148309,148311],{"class":400,"line":320},[398,148306,30930],{"class":404},[398,148308,147431],{"class":408},[398,148310,30585],{"class":404},[398,148312,147436],{"class":408},[398,148314,148315],{"class":400,"line":1470},[398,148316,2676],{"emptyLinePlaceholder":328},[398,148318,148319,148321,148323,148325,148328,148330,148332,148334,148336,148338,148340,148342,148344,148347],{"class":400,"line":1476},[398,148320,108026],{"class":404},[398,148322,146984],{"class":457},[398,148324,409],{"class":408},[398,148326,148327],{"class":513},"\"sales.json\"",[398,148329,12712],{"class":408},[398,148331,146994],{"class":513},[398,148333,12712],{"class":408},[398,148335,146999],{"class":5493},[398,148337,454],{"class":404},[398,148339,147004],{"class":513},[398,148341,13991],{"class":408},[398,148343,31576],{"class":404},[398,148345,148346],{"class":5493}," file",[398,148348,4015],{"class":408},[398,148350,148351,148353,148355,148358,148360],{"class":400,"line":1490},[398,148352,101614],{"class":408},[398,148354,454],{"class":404},[398,148356,148357],{"class":408}," json.load(",[398,148359,45547],{"class":5493},[398,148361,415],{"class":408},[398,148363,148364],{"class":400,"line":1496},[398,148365,2676],{"emptyLinePlaceholder":328},[398,148367,148368,148370,148372],{"class":400,"line":1587},[398,148369,147993],{"class":408},[398,148371,454],{"class":404},[398,148373,52031],{"class":408},[398,148375,148376,148379,148381],{"class":400,"line":1593},[398,148377,148378],{"class":408},"online_sales ",[398,148380,454],{"class":404},[398,148382,52031],{"class":408},[398,148384,148385,148388,148390],{"class":400,"line":1605},[398,148386,148387],{"class":408},"offline_sales ",[398,148389,454],{"class":404},[398,148391,52031],{"class":408},[398,148393,148394],{"class":400,"line":1888},[398,148395,2676],{"emptyLinePlaceholder":328},[398,148397,148398,148400,148403,148405],{"class":400,"line":1893},[398,148399,3301],{"class":404},[398,148401,148402],{"class":408}," item ",[398,148404,26236],{"class":404},[398,148406,148407],{"class":408}," data:\n",[398,148409,148410,148413,148415],{"class":400,"line":1899},[398,148411,148412],{"class":408},"    dates.append(item[",[398,148414,148190],{"class":513},[398,148416,4933],{"class":408},[398,148418,148419,148422,148424],{"class":400,"line":1904},[398,148420,148421],{"class":408},"    online_sales.append(item[",[398,148423,148199],{"class":513},[398,148425,4933],{"class":408},[398,148427,148428,148431,148433],{"class":400,"line":1918},[398,148429,148430],{"class":408},"    offline_sales.append(item[",[398,148432,148208],{"class":513},[398,148434,4933],{"class":408},[398,148436,148437],{"class":400,"line":1923},[398,148438,2676],{"emptyLinePlaceholder":328},[398,148440,148441,148443,148445],{"class":400,"line":1929},[398,148442,147445],{"class":408},[398,148444,454],{"class":404},[398,148446,147450],{"class":408},[398,148448,148449],{"class":400,"line":1950},[398,148450,148034],{"class":408},[398,148452,148453,148455,148457,148460,148462,148464,148466],{"class":400,"line":1955},[398,148454,147485],{"class":408},[398,148456,148041],{"class":513},[398,148458,148459],{"class":408},", online_sales, ",[398,148461,147938],{"class":5493},[398,148463,454],{"class":404},[398,148465,31669],{"class":457},[398,148467,415],{"class":408},[398,148469,148470,148472,148474,148477,148479,148481,148483],{"class":400,"line":1969},[398,148471,147485],{"class":408},[398,148473,148079],{"class":513},[398,148475,148476],{"class":408},", offline_sales, ",[398,148478,147938],{"class":5493},[398,148480,454],{"class":404},[398,148482,31669],{"class":457},[398,148484,415],{"class":408},[398,148486,148487],{"class":400,"line":1974},[398,148488,147661],{"class":408},[398,148490,148491,148493,148495,148497,148499,148501,148504],{"class":400,"line":2003},[398,148492,147666],{"class":5493},[398,148494,454],{"class":404},[398,148496,147671],{"class":408},[398,148498,51600],{"class":5493},[398,148500,454],{"class":404},[398,148502,148503],{"class":513},"\"销售趋势\"",[398,148505,38240],{"class":408},[398,148507,148508,148510,148512,148514,148516,148518,148520],{"class":400,"line":2008},[398,148509,147722],{"class":5493},[398,148511,454],{"class":404},[398,148513,147727],{"class":408},[398,148515,147730],{"class":5493},[398,148517,454],{"class":404},[398,148519,147735],{"class":513},[398,148521,38240],{"class":408},[398,148523,148524],{"class":400,"line":2025},[398,148525,415],{"class":408},[398,148527,148528,148530,148532],{"class":400,"line":2030},[398,148529,147517],{"class":408},[398,148531,148157],{"class":513},[398,148533,415],{"class":408},[343,148535,148537],{"id":148536},"_109-数据清洗","10.9 数据清洗",[19,148539,148540],{},"真实数据经常不整齐，需要清洗。",[19,148542,148543],{},"常见问题：",[38,148545,148546,148549,148552,148555],{},[41,148547,148548],{},"数字是字符串。",[41,148550,148551],{},"字段缺失。",[41,148553,148554],{},"空值。",[41,148556,148557],{},"日期格式不统一。",[19,148559,15412],{},[389,148561,148563],{"className":30571,"code":148562,"language":30573,"meta":316,"style":316},"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",[395,148564,148565,148574,148597,148617,148638,148642,148646,148654,148663,148667,148678,148692,148701,148706,148710,148718,148728,148732,148739],{"__ignoreMap":316},[398,148566,148567,148570,148572],{"class":400,"line":401},[398,148568,148569],{"class":408},"raw_data ",[398,148571,454],{"class":404},[398,148573,55640],{"class":408},[398,148575,148576,148579,148581,148583,148585,148587,148590,148592,148595],{"class":400,"line":317},[398,148577,148578],{"class":408},"    {",[398,148580,148190],{"class":513},[398,148582,51630],{"class":408},[398,148584,147458],{"class":513},[398,148586,12712],{"class":408},[398,148588,148589],{"class":513},"\"sales\"",[398,148591,51630],{"class":408},[398,148593,148594],{"class":513},"\"100\"",[398,148596,5206],{"class":408},[398,148598,148599,148601,148603,148605,148607,148609,148611,148613,148615],{"class":400,"line":320},[398,148600,148578],{"class":408},[398,148602,148190],{"class":513},[398,148604,51630],{"class":408},[398,148606,147463],{"class":513},[398,148608,12712],{"class":408},[398,148610,148589],{"class":513},[398,148612,51630],{"class":408},[398,148614,7929],{"class":513},[398,148616,5206],{"class":408},[398,148618,148619,148621,148623,148625,148627,148629,148631,148633,148636],{"class":400,"line":1470},[398,148620,148578],{"class":408},[398,148622,148190],{"class":513},[398,148624,51630],{"class":408},[398,148626,147468],{"class":513},[398,148628,12712],{"class":408},[398,148630,148589],{"class":513},[398,148632,51630],{"class":408},[398,148634,148635],{"class":513},"\"120\"",[398,148637,5206],{"class":408},[398,148639,148640],{"class":400,"line":1476},[398,148641,33439],{"class":408},[398,148643,148644],{"class":400,"line":1490},[398,148645,2676],{"emptyLinePlaceholder":328},[398,148647,148648,148650,148652],{"class":400,"line":1496},[398,148649,147993],{"class":408},[398,148651,454],{"class":404},[398,148653,52031],{"class":408},[398,148655,148656,148659,148661],{"class":400,"line":1587},[398,148657,148658],{"class":408},"sales ",[398,148660,454],{"class":404},[398,148662,52031],{"class":408},[398,148664,148665],{"class":400,"line":1593},[398,148666,2676],{"emptyLinePlaceholder":328},[398,148668,148669,148671,148673,148675],{"class":400,"line":1605},[398,148670,3301],{"class":404},[398,148672,148402],{"class":408},[398,148674,26236],{"class":404},[398,148676,148677],{"class":408}," raw_data:\n",[398,148679,148680,148683,148685,148688,148690],{"class":400,"line":1888},[398,148681,148682],{"class":408},"    value ",[398,148684,454],{"class":404},[398,148686,148687],{"class":408}," item.get(",[398,148689,148589],{"class":513},[398,148691,415],{"class":408},[398,148693,148694,148696,148698],{"class":400,"line":1893},[398,148695,3377],{"class":404},[398,148697,39123],{"class":404},[398,148699,148700],{"class":408}," value:\n",[398,148702,148703],{"class":400,"line":1899},[398,148704,148705],{"class":404},"        continue\n",[398,148707,148708],{"class":400,"line":1904},[398,148709,2676],{"emptyLinePlaceholder":328},[398,148711,148712,148714,148716],{"class":400,"line":1918},[398,148713,148412],{"class":408},[398,148715,148190],{"class":513},[398,148717,4933],{"class":408},[398,148719,148720,148723,148725],{"class":400,"line":1923},[398,148721,148722],{"class":408},"    sales.append(",[398,148724,412],{"class":457},[398,148726,148727],{"class":408},"(value))\n",[398,148729,148730],{"class":400,"line":1929},[398,148731,2676],{"emptyLinePlaceholder":328},[398,148733,148734,148736],{"class":400,"line":1950},[398,148735,30608],{"class":457},[398,148737,148738],{"class":408},"(dates)\n",[398,148740,148741,148743],{"class":400,"line":1955},[398,148742,30608],{"class":457},[398,148744,148745],{"class":408},"(sales)\n",[343,148747,148749],{"id":148748},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[389,148751,148753],{"className":30571,"code":148752,"language":30573,"meta":316,"style":316},"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",[395,148754,148755,148769,148779,148783,148791,148812,148834,148856,148878,148900,148904,148908,148930,148951,148955,148963,148967,148971,148981,148990,149000,149016,149020,149024,149041,149057,149073,149089,149099,149103],{"__ignoreMap":316},[398,148756,148757,148759,148761,148763,148765,148767],{"class":400,"line":401},[398,148758,30930],{"class":404},[398,148760,147572],{"class":408},[398,148762,30585],{"class":404},[398,148764,147577],{"class":408},[398,148766,31576],{"class":404},[398,148768,147582],{"class":408},[398,148770,148771,148773,148775,148777],{"class":400,"line":317},[398,148772,30930],{"class":404},[398,148774,147431],{"class":408},[398,148776,30585],{"class":404},[398,148778,147436],{"class":408},[398,148780,148781],{"class":400,"line":320},[398,148782,2676],{"emptyLinePlaceholder":328},[398,148784,148785,148787,148789],{"class":400,"line":1470},[398,148786,148658],{"class":408},[398,148788,454],{"class":404},[398,148790,55640],{"class":408},[398,148792,148793,148795,148797,148799,148802,148804,148806,148808,148810],{"class":400,"line":1476},[398,148794,148578],{"class":408},[398,148796,148190],{"class":513},[398,148798,51630],{"class":408},[398,148800,148801],{"class":513},"\"2024-10-01\"",[398,148803,12712],{"class":408},[398,148805,84277],{"class":513},[398,148807,51630],{"class":408},[398,148809,92216],{"class":457},[398,148811,5206],{"class":408},[398,148813,148814,148816,148818,148820,148823,148825,148827,148829,148832],{"class":400,"line":1490},[398,148815,148578],{"class":408},[398,148817,148190],{"class":513},[398,148819,51630],{"class":408},[398,148821,148822],{"class":513},"\"2024-10-02\"",[398,148824,12712],{"class":408},[398,148826,84277],{"class":513},[398,148828,51630],{"class":408},[398,148830,148831],{"class":457},"1800",[398,148833,5206],{"class":408},[398,148835,148836,148838,148840,148842,148845,148847,148849,148851,148854],{"class":400,"line":1496},[398,148837,148578],{"class":408},[398,148839,148190],{"class":513},[398,148841,51630],{"class":408},[398,148843,148844],{"class":513},"\"2024-10-03\"",[398,148846,12712],{"class":408},[398,148848,84277],{"class":513},[398,148850,51630],{"class":408},[398,148852,148853],{"class":457},"1500",[398,148855,5206],{"class":408},[398,148857,148858,148860,148862,148864,148867,148869,148871,148873,148876],{"class":400,"line":1587},[398,148859,148578],{"class":408},[398,148861,148190],{"class":513},[398,148863,51630],{"class":408},[398,148865,148866],{"class":513},"\"2024-10-04\"",[398,148868,12712],{"class":408},[398,148870,84277],{"class":513},[398,148872,51630],{"class":408},[398,148874,148875],{"class":457},"2100",[398,148877,5206],{"class":408},[398,148879,148880,148882,148884,148886,148889,148891,148893,148895,148898],{"class":400,"line":1593},[398,148881,148578],{"class":408},[398,148883,148190],{"class":513},[398,148885,51630],{"class":408},[398,148887,148888],{"class":513},"\"2024-10-05\"",[398,148890,12712],{"class":408},[398,148892,84277],{"class":513},[398,148894,51630],{"class":408},[398,148896,148897],{"class":457},"2600",[398,148899,5206],{"class":408},[398,148901,148902],{"class":400,"line":1605},[398,148903,33439],{"class":408},[398,148905,148906],{"class":400,"line":1888},[398,148907,2676],{"emptyLinePlaceholder":328},[398,148909,148910,148912,148914,148917,148919,148921,148923,148925,148927],{"class":400,"line":1893},[398,148911,147993],{"class":408},[398,148913,454],{"class":404},[398,148915,148916],{"class":408}," [item[",[398,148918,148190],{"class":513},[398,148920,4719],{"class":408},[398,148922,3301],{"class":404},[398,148924,148402],{"class":408},[398,148926,26236],{"class":404},[398,148928,148929],{"class":408}," sales]\n",[398,148931,148932,148935,148937,148939,148941,148943,148945,148947,148949],{"class":400,"line":1899},[398,148933,148934],{"class":408},"amounts ",[398,148936,454],{"class":404},[398,148938,148916],{"class":408},[398,148940,84277],{"class":513},[398,148942,4719],{"class":408},[398,148944,3301],{"class":404},[398,148946,148402],{"class":408},[398,148948,26236],{"class":404},[398,148950,148929],{"class":408},[398,148952,148953],{"class":400,"line":1904},[398,148954,2676],{"emptyLinePlaceholder":328},[398,148956,148957,148959,148961],{"class":400,"line":1918},[398,148958,147445],{"class":408},[398,148960,454],{"class":404},[398,148962,147450],{"class":408},[398,148964,148965],{"class":400,"line":1923},[398,148966,148034],{"class":408},[398,148968,148969],{"class":400,"line":1929},[398,148970,147842],{"class":408},[398,148972,148973,148975,148977,148979],{"class":400,"line":1950},[398,148974,147847],{"class":5493},[398,148976,454],{"class":404},[398,148978,147488],{"class":513},[398,148980,31659],{"class":408},[398,148982,148983,148985,148987],{"class":400,"line":1955},[398,148984,147858],{"class":5493},[398,148986,454],{"class":404},[398,148988,148989],{"class":408},"amounts,\n",[398,148991,148992,148994,148996,148998],{"class":400,"line":1969},[398,148993,147887],{"class":5493},[398,148995,454],{"class":404},[398,148997,31669],{"class":457},[398,148999,31659],{"class":408},[398,149001,149002,149004,149006,149008,149010,149012,149014],{"class":400,"line":1974},[398,149003,147898],{"class":5493},[398,149005,454],{"class":404},[398,149007,147903],{"class":408},[398,149009,147906],{"class":5493},[398,149011,454],{"class":404},[398,149013,31669],{"class":457},[398,149015,38240],{"class":408},[398,149017,149018],{"class":400,"line":2003},[398,149019,415],{"class":408},[398,149021,149022],{"class":400,"line":2008},[398,149023,147661],{"class":408},[398,149025,149026,149028,149030,149032,149034,149036,149039],{"class":400,"line":2025},[398,149027,147666],{"class":5493},[398,149029,454],{"class":404},[398,149031,147671],{"class":408},[398,149033,51600],{"class":5493},[398,149035,454],{"class":404},[398,149037,149038],{"class":513},"\"每日销售额\"",[398,149040,38240],{"class":408},[398,149042,149043,149045,149047,149049,149051,149053,149055],{"class":400,"line":2030},[398,149044,147685],{"class":5493},[398,149046,454],{"class":404},[398,149048,147690],{"class":408},[398,149050,80003],{"class":5493},[398,149052,454],{"class":404},[398,149054,147697],{"class":513},[398,149056,38240],{"class":408},[398,149058,149059,149061,149063,149065,149067,149069,149071],{"class":400,"line":2035},[398,149060,147704],{"class":5493},[398,149062,454],{"class":404},[398,149064,147690],{"class":408},[398,149066,80003],{"class":5493},[398,149068,454],{"class":404},[398,149070,147715],{"class":513},[398,149072,38240],{"class":408},[398,149074,149075,149077,149079,149081,149083,149085,149087],{"class":400,"line":2040},[398,149076,147722],{"class":5493},[398,149078,454],{"class":404},[398,149080,147727],{"class":408},[398,149082,147730],{"class":5493},[398,149084,454],{"class":404},[398,149086,147735],{"class":513},[398,149088,38240],{"class":408},[398,149090,149091,149094,149096],{"class":400,"line":2054},[398,149092,149093],{"class":5493},"    datazoom_opts",[398,149095,454],{"class":404},[398,149097,149098],{"class":408},"[opts.DataZoomOpts()],\n",[398,149100,149101],{"class":400,"line":2059},[398,149102,415],{"class":408},[398,149104,149105,149107,149110],{"class":400,"line":2853},[398,149106,147517],{"class":408},[398,149108,149109],{"class":513},"\"daily_sales.html\"",[398,149111,415],{"class":408},[19,149113,149114,149117],{},[395,149115,149116],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[343,149119,149121],{"id":149120},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,149123,149124],{},"如果数据结构如下：",[389,149126,149128],{"className":30571,"code":149127,"language":30573,"meta":316,"style":316},"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",[395,149129,149130,149138,149146,149168,149189,149194,149201,149221,149241,149245],{"__ignoreMap":316},[398,149131,149132,149134,149136],{"class":400,"line":401},[398,149133,101851],{"class":408},[398,149135,454],{"class":404},[398,149137,15849],{"class":408},[398,149139,149140,149143],{"class":400,"line":317},[398,149141,149142],{"class":513},"    \"北京\"",[398,149144,149145],{"class":408},": [\n",[398,149147,149148,149150,149152,149154,149157,149159,149162,149164,149166],{"class":400,"line":320},[398,149149,5193],{"class":408},[398,149151,148190],{"class":513},[398,149153,51630],{"class":408},[398,149155,149156],{"class":513},"\"2024-01-01\"",[398,149158,12712],{"class":408},[398,149160,149161],{"class":513},"\"confirm\"",[398,149163,51630],{"class":408},[398,149165,848],{"class":457},[398,149167,5206],{"class":408},[398,149169,149170,149172,149174,149176,149179,149181,149183,149185,149187],{"class":400,"line":1470},[398,149171,5193],{"class":408},[398,149173,148190],{"class":513},[398,149175,51630],{"class":408},[398,149177,149178],{"class":513},"\"2024-01-02\"",[398,149180,12712],{"class":408},[398,149182,149161],{"class":513},[398,149184,51630],{"class":408},[398,149186,900],{"class":457},[398,149188,5206],{"class":408},[398,149190,149191],{"class":400,"line":1476},[398,149192,149193],{"class":408},"    ],\n",[398,149195,149196,149199],{"class":400,"line":1490},[398,149197,149198],{"class":513},"    \"上海\"",[398,149200,149145],{"class":408},[398,149202,149203,149205,149207,149209,149211,149213,149215,149217,149219],{"class":400,"line":1496},[398,149204,5193],{"class":408},[398,149206,148190],{"class":513},[398,149208,51630],{"class":408},[398,149210,149156],{"class":513},[398,149212,12712],{"class":408},[398,149214,149161],{"class":513},[398,149216,51630],{"class":408},[398,149218,797],{"class":457},[398,149220,5206],{"class":408},[398,149222,149223,149225,149227,149229,149231,149233,149235,149237,149239],{"class":400,"line":1587},[398,149224,5193],{"class":408},[398,149226,148190],{"class":513},[398,149228,51630],{"class":408},[398,149230,149178],{"class":513},[398,149232,12712],{"class":408},[398,149234,149161],{"class":513},[398,149236,51630],{"class":408},[398,149238,925],{"class":457},[398,149240,5206],{"class":408},[398,149242,149243],{"class":400,"line":1593},[398,149244,149193],{"class":408},[398,149246,149247],{"class":400,"line":1605},[398,149248,1841],{"class":408},[19,149250,149251],{},"绘制多地区趋势：",[389,149253,149255],{"className":30571,"code":149254,"language":30573,"meta":316,"style":316},"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",[395,149256,149257,149271,149281,149285,149310,149314,149322,149326,149330,149342,149364,149377,149381,149385,149402,149418,149422],{"__ignoreMap":316},[398,149258,149259,149261,149263,149265,149267,149269],{"class":400,"line":401},[398,149260,30930],{"class":404},[398,149262,147572],{"class":408},[398,149264,30585],{"class":404},[398,149266,147577],{"class":408},[398,149268,31576],{"class":404},[398,149270,147582],{"class":408},[398,149272,149273,149275,149277,149279],{"class":400,"line":317},[398,149274,30930],{"class":404},[398,149276,147431],{"class":408},[398,149278,30585],{"class":404},[398,149280,147436],{"class":408},[398,149282,149283],{"class":400,"line":320},[398,149284,2676],{"emptyLinePlaceholder":328},[398,149286,149287,149289,149291,149293,149295,149297,149299,149301,149303,149306,149308],{"class":400,"line":1470},[398,149288,147993],{"class":408},[398,149290,454],{"class":404},[398,149292,148916],{"class":408},[398,149294,148190],{"class":513},[398,149296,4719],{"class":408},[398,149298,3301],{"class":404},[398,149300,148402],{"class":408},[398,149302,26236],{"class":404},[398,149304,149305],{"class":408}," data[",[398,149307,69462],{"class":513},[398,149309,77720],{"class":408},[398,149311,149312],{"class":400,"line":1476},[398,149313,2676],{"emptyLinePlaceholder":328},[398,149315,149316,149318,149320],{"class":400,"line":1490},[398,149317,147445],{"class":408},[398,149319,454],{"class":404},[398,149321,147450],{"class":408},[398,149323,149324],{"class":400,"line":1496},[398,149325,148034],{"class":408},[398,149327,149328],{"class":400,"line":1587},[398,149329,2676],{"emptyLinePlaceholder":328},[398,149331,149332,149334,149337,149339],{"class":400,"line":1593},[398,149333,3301],{"class":404},[398,149335,149336],{"class":408}," city, records ",[398,149338,26236],{"class":404},[398,149340,149341],{"class":408}," data.items():\n",[398,149343,149344,149347,149349,149351,149353,149355,149357,149359,149361],{"class":400,"line":1605},[398,149345,149346],{"class":408},"    values ",[398,149348,454],{"class":404},[398,149350,148916],{"class":408},[398,149352,149161],{"class":513},[398,149354,4719],{"class":408},[398,149356,3301],{"class":404},[398,149358,148402],{"class":408},[398,149360,26236],{"class":404},[398,149362,149363],{"class":408}," records]\n",[398,149365,149366,149369,149371,149373,149375],{"class":400,"line":1888},[398,149367,149368],{"class":408},"    line.add_yaxis(city, values, ",[398,149370,147938],{"class":5493},[398,149372,454],{"class":404},[398,149374,31669],{"class":457},[398,149376,415],{"class":408},[398,149378,149379],{"class":400,"line":1893},[398,149380,2676],{"emptyLinePlaceholder":328},[398,149382,149383],{"class":400,"line":1899},[398,149384,147661],{"class":408},[398,149386,149387,149389,149391,149393,149395,149397,149400],{"class":400,"line":1904},[398,149388,147666],{"class":5493},[398,149390,454],{"class":404},[398,149392,147671],{"class":408},[398,149394,51600],{"class":5493},[398,149396,454],{"class":404},[398,149398,149399],{"class":513},"\"多地区趋势图\"",[398,149401,38240],{"class":408},[398,149403,149404,149406,149408,149410,149412,149414,149416],{"class":400,"line":1918},[398,149405,147722],{"class":5493},[398,149407,454],{"class":404},[398,149409,147727],{"class":408},[398,149411,147730],{"class":5493},[398,149413,454],{"class":404},[398,149415,147735],{"class":513},[398,149417,38240],{"class":408},[398,149419,149420],{"class":400,"line":1923},[398,149421,415],{"class":408},[398,149423,149424,149426,149429],{"class":400,"line":1929},[398,149425,147517],{"class":408},[398,149427,149428],{"class":513},"\"trend.html\"",[398,149430,415],{"class":408},[19,149432,149433],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[343,149435,149437],{"id":149436},"_1012-易错点","10.12 易错点",[38,149439,149440,149446,149452,149462,149468],{},[41,149441,149442,149445],{},[395,149443,149444],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[41,149447,149448,149451],{},[395,149449,149450],{},"render()"," 生成的是 HTML，不是图片。",[41,149453,149454,149455,149458,149459,28578],{},"JSON 字符串用 ",[395,149456,149457],{},"json.loads()","，JSON 文件用 ",[395,149460,149461],{},"json.load()",[41,149463,149464,149465,28578],{},"中文 JSON 保存时加 ",[395,149466,149467],{},"ensure_ascii=False",[41,149469,149470],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[343,149472,149474],{"id":149473},"_1013-本章练习","10.13 本章练习",[38,149476,149477,149480,149483,149486,149489],{},[41,149478,149479],{},"安装 pyecharts 并生成第一个折线图。",[41,149481,149482],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[41,149484,149485],{},"绘制两条折线，对比线上和线下销售额。",[41,149487,149488],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[41,149490,149491],{},"对含有空值的销售数据进行清洗后再绘图。",[5403,149493,149494],{},"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":316,"searchDepth":317,"depth":317,"links":149496},[149497,149498,149499,149500,149501,149502,149503,149504,149505,149506,149507,149508,149509],{"id":147113,"depth":317,"text":147114},{"id":147188,"depth":317,"text":147189},{"id":147367,"depth":317,"text":147368},{"id":147418,"depth":317,"text":147419},{"id":147552,"depth":317,"text":147553},{"id":147828,"depth":317,"text":147829},{"id":147954,"depth":317,"text":147955},{"id":148165,"depth":317,"text":148166},{"id":148536,"depth":317,"text":148537},{"id":148748,"depth":317,"text":148749},{"id":149120,"depth":317,"text":149121},{"id":149436,"depth":317,"text":149437},{"id":149473,"depth":317,"text":149474},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":147105,"description":23654},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149516,"title":149517,"body":149518,"description":23654,"extension":326,"meta":151878,"navigation":328,"path":151879,"seo":151880,"stem":151881,"__hash__":151882},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149519,"toc":151855},[149520,149523,149527,149530,149533,149609,149612,149703,149706,149710,149713,149757,149770,149774,149777,149844,149847,149851,149854,149938,149946,149950,149955,150096,150099,150110,150116,150122,150236,150240,150243,150246,150499,150502,150506,150509,150613,150616,150620,150771,150775,150782,150895,150899,150902,151008,151011,151015,151018,151049,151052,151157,151160,151164,151168,151178,151246,151250,151257,151321,151324,151328,151334,151430,151439,151443,151767,151776,151780,151808,151812,151852],[10,149521,149517],{"id":149522},"_11-面向对象基础",[343,149524,149526],{"id":149525},"_111-什么是面向对象","11.1 什么是面向对象",[19,149528,149529],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,149531,149532],{},"面向过程：",[389,149534,149536],{"className":30571,"code":149535,"language":30573,"meta":316,"style":316},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[395,149537,149538,149547,149555,149559,149569,149600,149604],{"__ignoreMap":316},[398,149539,149540,149542,149544],{"class":400,"line":401},[398,149541,146729],{"class":408},[398,149543,454],{"class":404},[398,149545,149546],{"class":513}," \"小明\"\n",[398,149548,149549,149551,149553],{"class":400,"line":317},[398,149550,146739],{"class":408},[398,149552,454],{"class":404},[398,149554,146744],{"class":457},[398,149556,149557],{"class":400,"line":320},[398,149558,2676],{"emptyLinePlaceholder":328},[398,149560,149561,149563,149566],{"class":400,"line":1470},[398,149562,32140],{"class":404},[398,149564,149565],{"class":2239}," introduce",[398,149567,149568],{"class":408},"(name, age):\n",[398,149570,149571,149573,149575,149577,149580,149582,149584,149586,149589,149591,149593,149595,149598],{"class":400,"line":1476},[398,149572,31492],{"class":457},[398,149574,409],{"class":408},[398,149576,461],{"class":404},[398,149578,149579],{"class":513},"\"我叫",[398,149581,1298],{"class":457},[398,149583,80003],{"class":408},[398,149585,1348],{"class":457},[398,149587,149588],{"class":513},"，今年",[398,149590,1298],{"class":457},[398,149592,70414],{"class":408},[398,149594,1348],{"class":457},[398,149596,149597],{"class":513},"岁\"",[398,149599,415],{"class":408},[398,149601,149602],{"class":400,"line":1490},[398,149603,2676],{"emptyLinePlaceholder":328},[398,149605,149606],{"class":400,"line":1496},[398,149607,149608],{"class":408},"introduce(name, age)\n",[19,149610,149611],{},"面向对象：",[389,149613,149615],{"className":30571,"code":149614,"language":30573,"meta":316,"style":316},"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",[395,149616,149617,149625,149633,149662,149666,149670,149680,149689,149698],{"__ignoreMap":316},[398,149618,149619,149621,149623],{"class":400,"line":401},[398,149620,14971],{"class":404},[398,149622,8175],{"class":2239},[398,149624,4015],{"class":408},[398,149626,149627,149629,149631],{"class":400,"line":317},[398,149628,30994],{"class":404},[398,149630,149565],{"class":2239},[398,149632,31000],{"class":408},[398,149634,149635,149637,149639,149641,149643,149646,149648,149650,149652,149654,149656,149658,149660],{"class":400,"line":320},[398,149636,32644],{"class":457},[398,149638,409],{"class":408},[398,149640,461],{"class":404},[398,149642,149579],{"class":513},[398,149644,149645],{"class":457},"{self",[398,149647,80494],{"class":408},[398,149649,1348],{"class":457},[398,149651,149588],{"class":513},[398,149653,149645],{"class":457},[398,149655,80506],{"class":408},[398,149657,1348],{"class":457},[398,149659,149597],{"class":513},[398,149661,415],{"class":408},[398,149663,149664],{"class":400,"line":1470},[398,149665,2676],{"emptyLinePlaceholder":328},[398,149667,149668],{"class":400,"line":1476},[398,149669,2676],{"emptyLinePlaceholder":328},[398,149671,149672,149675,149677],{"class":400,"line":1490},[398,149673,149674],{"class":408},"student ",[398,149676,454],{"class":404},[398,149678,149679],{"class":408}," Student()\n",[398,149681,149682,149685,149687],{"class":400,"line":1496},[398,149683,149684],{"class":408},"student.name ",[398,149686,454],{"class":404},[398,149688,149546],{"class":513},[398,149690,149691,149694,149696],{"class":400,"line":1587},[398,149692,149693],{"class":408},"student.age ",[398,149695,454],{"class":404},[398,149697,146744],{"class":457},[398,149699,149700],{"class":400,"line":1593},[398,149701,149702],{"class":408},"student.introduce()\n",[19,149704,149705],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[343,149707,149709],{"id":149708},"_112-类和对象","11.2 类和对象",[19,149711,149712],{},"类是模板，对象是根据模板创建出来的具体实例。",[389,149714,149716],{"className":30571,"code":149715,"language":30573,"meta":316,"style":316},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[395,149717,149718,149726,149731,149735,149739,149748],{"__ignoreMap":316},[398,149719,149720,149722,149724],{"class":400,"line":401},[398,149721,14971],{"class":404},[398,149723,8175],{"class":2239},[398,149725,4015],{"class":408},[398,149727,149728],{"class":400,"line":317},[398,149729,149730],{"class":404},"    pass\n",[398,149732,149733],{"class":400,"line":320},[398,149734,2676],{"emptyLinePlaceholder":328},[398,149736,149737],{"class":400,"line":1470},[398,149738,2676],{"emptyLinePlaceholder":328},[398,149740,149741,149744,149746],{"class":400,"line":1476},[398,149742,149743],{"class":408},"student1 ",[398,149745,454],{"class":404},[398,149747,149679],{"class":408},[398,149749,149750,149753,149755],{"class":400,"line":1490},[398,149751,149752],{"class":408},"student2 ",[398,149754,454],{"class":404},[398,149756,149679],{"class":408},[19,149758,149759,149762,149763,101211,149766,149769],{},[395,149760,149761],{},"Student"," 是类，",[395,149764,149765],{},"student1",[395,149767,149768],{},"student2"," 是对象。",[343,149771,149773],{"id":149772},"_113-属性","11.3 属性",[19,149775,149776],{},"属性是对象保存的数据。",[389,149778,149780],{"className":30571,"code":149779,"language":30573,"meta":316,"style":316},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[395,149781,149782,149790,149794,149798,149802,149810,149818,149826,149830,149837],{"__ignoreMap":316},[398,149783,149784,149786,149788],{"class":400,"line":401},[398,149785,14971],{"class":404},[398,149787,8175],{"class":2239},[398,149789,4015],{"class":408},[398,149791,149792],{"class":400,"line":317},[398,149793,149730],{"class":404},[398,149795,149796],{"class":400,"line":320},[398,149797,2676],{"emptyLinePlaceholder":328},[398,149799,149800],{"class":400,"line":1470},[398,149801,2676],{"emptyLinePlaceholder":328},[398,149803,149804,149806,149808],{"class":400,"line":1476},[398,149805,149674],{"class":408},[398,149807,454],{"class":404},[398,149809,149679],{"class":408},[398,149811,149812,149814,149816],{"class":400,"line":1490},[398,149813,149684],{"class":408},[398,149815,454],{"class":404},[398,149817,149546],{"class":513},[398,149819,149820,149822,149824],{"class":400,"line":1496},[398,149821,149693],{"class":408},[398,149823,454],{"class":404},[398,149825,146744],{"class":457},[398,149827,149828],{"class":400,"line":1587},[398,149829,2676],{"emptyLinePlaceholder":328},[398,149831,149832,149834],{"class":400,"line":1593},[398,149833,30608],{"class":457},[398,149835,149836],{"class":408},"(student.name)\n",[398,149838,149839,149841],{"class":400,"line":1605},[398,149840,30608],{"class":457},[398,149842,149843],{"class":408},"(student.age)\n",[19,149845,149846],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[343,149848,149850],{"id":149849},"_114-方法","11.4 方法",[19,149852,149853],{},"类中的函数叫方法。",[389,149855,149856],{"className":30571,"code":149614,"language":30573,"meta":316,"style":316},[395,149857,149858,149866,149874,149902,149906,149910,149918,149926,149934],{"__ignoreMap":316},[398,149859,149860,149862,149864],{"class":400,"line":401},[398,149861,14971],{"class":404},[398,149863,8175],{"class":2239},[398,149865,4015],{"class":408},[398,149867,149868,149870,149872],{"class":400,"line":317},[398,149869,30994],{"class":404},[398,149871,149565],{"class":2239},[398,149873,31000],{"class":408},[398,149875,149876,149878,149880,149882,149884,149886,149888,149890,149892,149894,149896,149898,149900],{"class":400,"line":320},[398,149877,32644],{"class":457},[398,149879,409],{"class":408},[398,149881,461],{"class":404},[398,149883,149579],{"class":513},[398,149885,149645],{"class":457},[398,149887,80494],{"class":408},[398,149889,1348],{"class":457},[398,149891,149588],{"class":513},[398,149893,149645],{"class":457},[398,149895,80506],{"class":408},[398,149897,1348],{"class":457},[398,149899,149597],{"class":513},[398,149901,415],{"class":408},[398,149903,149904],{"class":400,"line":1470},[398,149905,2676],{"emptyLinePlaceholder":328},[398,149907,149908],{"class":400,"line":1476},[398,149909,2676],{"emptyLinePlaceholder":328},[398,149911,149912,149914,149916],{"class":400,"line":1490},[398,149913,149674],{"class":408},[398,149915,454],{"class":404},[398,149917,149679],{"class":408},[398,149919,149920,149922,149924],{"class":400,"line":1496},[398,149921,149684],{"class":408},[398,149923,454],{"class":404},[398,149925,149546],{"class":513},[398,149927,149928,149930,149932],{"class":400,"line":1587},[398,149929,149693],{"class":408},[398,149931,454],{"class":404},[398,149933,146744],{"class":457},[398,149935,149936],{"class":400,"line":1593},[398,149937,149702],{"class":408},[19,149939,149940,149942,149943,149945],{},[395,149941,31016],{}," 表示当前对象。调用方法时不需要手动传入 ",[395,149944,31016],{},"，Python 会自动传。",[343,149947,149949],{"id":149948},"_115-构造方法__init__","11.5 构造方法__init__",[19,149951,149952,149954],{},[395,149953,31022],{}," 在对象创建时自动执行，用于初始化属性。",[389,149956,149958],{"className":30571,"code":149957,"language":30573,"meta":316,"style":316},"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",[395,149959,149960,149968,149977,149989,150001,150012,150016,150024,150062,150066,150070,150092],{"__ignoreMap":316},[398,149961,149962,149964,149966],{"class":400,"line":401},[398,149963,14971],{"class":404},[398,149965,8175],{"class":2239},[398,149967,4015],{"class":408},[398,149969,149970,149972,149974],{"class":400,"line":317},[398,149971,30994],{"class":404},[398,149973,30997],{"class":457},[398,149975,149976],{"class":408},"(self, name, age, score):\n",[398,149978,149979,149981,149984,149986],{"class":400,"line":320},[398,149980,31038],{"class":457},[398,149982,149983],{"class":408},".name ",[398,149985,454],{"class":404},[398,149987,149988],{"class":408}," name\n",[398,149990,149991,149993,149996,149998],{"class":400,"line":1470},[398,149992,31038],{"class":457},[398,149994,149995],{"class":408},".age ",[398,149997,454],{"class":404},[398,149999,150000],{"class":408}," age\n",[398,150002,150003,150005,150008,150010],{"class":400,"line":1476},[398,150004,31038],{"class":457},[398,150006,150007],{"class":408},".score ",[398,150009,454],{"class":404},[398,150011,1855],{"class":408},[398,150013,150014],{"class":400,"line":1490},[398,150015,2676],{"emptyLinePlaceholder":328},[398,150017,150018,150020,150022],{"class":400,"line":1496},[398,150019,30994],{"class":404},[398,150021,149565],{"class":2239},[398,150023,31000],{"class":408},[398,150025,150026,150028,150030,150032,150034,150036,150038,150040,150042,150044,150046,150048,150051,150053,150056,150058,150060],{"class":400,"line":1587},[398,150027,32644],{"class":457},[398,150029,409],{"class":408},[398,150031,461],{"class":404},[398,150033,149579],{"class":513},[398,150035,149645],{"class":457},[398,150037,80494],{"class":408},[398,150039,1348],{"class":457},[398,150041,149588],{"class":513},[398,150043,149645],{"class":457},[398,150045,80506],{"class":408},[398,150047,1348],{"class":457},[398,150049,150050],{"class":513},"岁，成绩",[398,150052,149645],{"class":457},[398,150054,150055],{"class":408},".score",[398,150057,1348],{"class":457},[398,150059,653],{"class":513},[398,150061,415],{"class":408},[398,150063,150064],{"class":400,"line":1593},[398,150065,2676],{"emptyLinePlaceholder":328},[398,150067,150068],{"class":400,"line":1605},[398,150069,2676],{"emptyLinePlaceholder":328},[398,150071,150072,150074,150076,150079,150082,150084,150086,150088,150090],{"class":400,"line":1888},[398,150073,149674],{"class":408},[398,150075,454],{"class":404},[398,150077,150078],{"class":408}," Student(",[398,150080,150081],{"class":513},"\"小明\"",[398,150083,12712],{"class":408},[398,150085,1052],{"class":457},[398,150087,12712],{"class":408},[398,150089,1391],{"class":457},[398,150091,415],{"class":408},[398,150093,150094],{"class":400,"line":1893},[398,150095,149702],{"class":408},[19,150097,150098],{},"构造方法的好处：",[38,150100,150101,150104,150107],{},[41,150102,150103],{},"创建对象时必须提供必要数据。",[41,150105,150106],{},"属性初始化集中，不容易漏。",[41,150108,150109],{},"对象状态更完整。",[343,150111,150113,150114],{"id":150112},"_116-str","11.6 ",[23,150115,1575],{},[19,150117,150118,150119,28578],{},"直接打印对象时，默认输出不直观。可以定义 ",[395,150120,150121],{},"__str__",[389,150123,150125],{"className":30571,"code":150124,"language":30573,"meta":316,"style":316},"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",[395,150126,150127,150135,150144,150154,150164,150168,150177,150205,150209,150213,150229],{"__ignoreMap":316},[398,150128,150129,150131,150133],{"class":400,"line":401},[398,150130,14971],{"class":404},[398,150132,8175],{"class":2239},[398,150134,4015],{"class":408},[398,150136,150137,150139,150141],{"class":400,"line":317},[398,150138,30994],{"class":404},[398,150140,30997],{"class":457},[398,150142,150143],{"class":408},"(self, name, age):\n",[398,150145,150146,150148,150150,150152],{"class":400,"line":320},[398,150147,31038],{"class":457},[398,150149,149983],{"class":408},[398,150151,454],{"class":404},[398,150153,149988],{"class":408},[398,150155,150156,150158,150160,150162],{"class":400,"line":1470},[398,150157,31038],{"class":457},[398,150159,149995],{"class":408},[398,150161,454],{"class":404},[398,150163,150000],{"class":408},[398,150165,150166],{"class":400,"line":1476},[398,150167,2676],{"emptyLinePlaceholder":328},[398,150169,150170,150172,150175],{"class":400,"line":1490},[398,150171,30994],{"class":404},[398,150173,150174],{"class":457}," __str__",[398,150176,31000],{"class":408},[398,150178,150179,150181,150184,150187,150189,150191,150193,150196,150198,150200,150202],{"class":400,"line":1496},[398,150180,15029],{"class":404},[398,150182,150183],{"class":404}," f",[398,150185,150186],{"class":513},"\"Student(name=",[398,150188,149645],{"class":457},[398,150190,80494],{"class":408},[398,150192,1348],{"class":457},[398,150194,150195],{"class":513},", age=",[398,150197,149645],{"class":457},[398,150199,80506],{"class":408},[398,150201,1348],{"class":457},[398,150203,150204],{"class":513},")\"\n",[398,150206,150207],{"class":400,"line":1587},[398,150208,2676],{"emptyLinePlaceholder":328},[398,150210,150211],{"class":400,"line":1593},[398,150212,2676],{"emptyLinePlaceholder":328},[398,150214,150215,150217,150219,150221,150223,150225,150227],{"class":400,"line":1605},[398,150216,149674],{"class":408},[398,150218,454],{"class":404},[398,150220,150078],{"class":408},[398,150222,150081],{"class":513},[398,150224,12712],{"class":408},[398,150226,1052],{"class":457},[398,150228,415],{"class":408},[398,150230,150231,150233],{"class":400,"line":1888},[398,150232,30608],{"class":457},[398,150234,150235],{"class":408},"(student)\n",[343,150237,150239],{"id":150238},"_117-封装","11.7 封装",[19,150241,150242],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,150244,150245],{},"Python 中以双下划线开头的属性通常视为私有属性。",[389,150247,150249],{"className":30571,"code":150248,"language":30573,"meta":316,"style":316},"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",[395,150250,150251,150260,150269,150281,150293,150297,150306,150315,150319,150329,150342,150353,150358,150369,150373,150382,150394,150405,150409,150422,150433,150437,150448,150452,150456,150474,150483,150492],{"__ignoreMap":316},[398,150252,150253,150255,150258],{"class":400,"line":401},[398,150254,14971],{"class":404},[398,150256,150257],{"class":2239}," Account",[398,150259,4015],{"class":408},[398,150261,150262,150264,150266],{"class":400,"line":317},[398,150263,30994],{"class":404},[398,150265,30997],{"class":457},[398,150267,150268],{"class":408},"(self, owner, balance):\n",[398,150270,150271,150273,150276,150278],{"class":400,"line":320},[398,150272,31038],{"class":457},[398,150274,150275],{"class":408},".owner ",[398,150277,454],{"class":404},[398,150279,150280],{"class":408}," owner\n",[398,150282,150283,150285,150288,150290],{"class":400,"line":1470},[398,150284,31038],{"class":457},[398,150286,150287],{"class":408},".__balance ",[398,150289,454],{"class":404},[398,150291,150292],{"class":408}," balance\n",[398,150294,150295],{"class":400,"line":1476},[398,150296,2676],{"emptyLinePlaceholder":328},[398,150298,150299,150301,150304],{"class":400,"line":1490},[398,150300,30994],{"class":404},[398,150302,150303],{"class":2239}," get_balance",[398,150305,31000],{"class":408},[398,150307,150308,150310,150312],{"class":400,"line":1496},[398,150309,15029],{"class":404},[398,150311,39066],{"class":457},[398,150313,150314],{"class":408},".__balance\n",[398,150316,150317],{"class":400,"line":1587},[398,150318,2676],{"emptyLinePlaceholder":328},[398,150320,150321,150323,150326],{"class":400,"line":1593},[398,150322,30994],{"class":404},[398,150324,150325],{"class":2239}," deposit",[398,150327,150328],{"class":408},"(self, money):\n",[398,150330,150331,150333,150336,150338,150340],{"class":400,"line":1605},[398,150332,2773],{"class":404},[398,150334,150335],{"class":408}," money ",[398,150337,1864],{"class":404},[398,150339,4369],{"class":457},[398,150341,4015],{"class":408},[398,150343,150344,150346,150348,150351],{"class":400,"line":1888},[398,150345,34843],{"class":457},[398,150347,409],{"class":408},[398,150349,150350],{"class":513},"\"存款金额必须大于0\"",[398,150352,415],{"class":408},[398,150354,150355],{"class":400,"line":1893},[398,150356,150357],{"class":404},"            return\n",[398,150359,150360,150362,150364,150366],{"class":400,"line":1899},[398,150361,31038],{"class":457},[398,150363,150287],{"class":408},[398,150365,9754],{"class":404},[398,150367,150368],{"class":408}," money\n",[398,150370,150371],{"class":400,"line":1904},[398,150372,2676],{"emptyLinePlaceholder":328},[398,150374,150375,150377,150380],{"class":400,"line":1918},[398,150376,30994],{"class":404},[398,150378,150379],{"class":2239}," withdraw",[398,150381,150328],{"class":408},[398,150383,150384,150386,150388,150390,150392],{"class":400,"line":1923},[398,150385,2773],{"class":404},[398,150387,150335],{"class":408},[398,150389,1864],{"class":404},[398,150391,4369],{"class":457},[398,150393,4015],{"class":408},[398,150395,150396,150398,150400,150403],{"class":400,"line":1929},[398,150397,34843],{"class":457},[398,150399,409],{"class":408},[398,150401,150402],{"class":513},"\"取款金额必须大于0\"",[398,150404,415],{"class":408},[398,150406,150407],{"class":400,"line":1950},[398,150408,150357],{"class":404},[398,150410,150411,150413,150415,150417,150419],{"class":400,"line":1955},[398,150412,2773],{"class":404},[398,150414,150335],{"class":408},[398,150416,1362],{"class":404},[398,150418,39066],{"class":457},[398,150420,150421],{"class":408},".__balance:\n",[398,150423,150424,150426,150428,150431],{"class":400,"line":1969},[398,150425,34843],{"class":457},[398,150427,409],{"class":408},[398,150429,150430],{"class":513},"\"余额不足\"",[398,150432,415],{"class":408},[398,150434,150435],{"class":400,"line":1974},[398,150436,150357],{"class":404},[398,150438,150439,150441,150443,150446],{"class":400,"line":2003},[398,150440,31038],{"class":457},[398,150442,150287],{"class":408},[398,150444,150445],{"class":404},"-=",[398,150447,150368],{"class":408},[398,150449,150450],{"class":400,"line":2008},[398,150451,2676],{"emptyLinePlaceholder":328},[398,150453,150454],{"class":400,"line":2025},[398,150455,2676],{"emptyLinePlaceholder":328},[398,150457,150458,150461,150463,150466,150468,150470,150472],{"class":400,"line":2030},[398,150459,150460],{"class":408},"account ",[398,150462,454],{"class":404},[398,150464,150465],{"class":408}," Account(",[398,150467,150081],{"class":513},[398,150469,12712],{"class":408},[398,150471,6687],{"class":457},[398,150473,415],{"class":408},[398,150475,150476,150479,150481],{"class":400,"line":2035},[398,150477,150478],{"class":408},"account.deposit(",[398,150480,1998],{"class":457},[398,150482,415],{"class":408},[398,150484,150485,150488,150490],{"class":400,"line":2040},[398,150486,150487],{"class":408},"account.withdraw(",[398,150489,713],{"class":457},[398,150491,415],{"class":408},[398,150493,150494,150496],{"class":400,"line":2054},[398,150495,30608],{"class":457},[398,150497,150498],{"class":408},"(account.get_balance())\n",[19,150500,150501],{},"封装的意义是避免外部随意修改内部状态。",[343,150503,150505],{"id":150504},"_118-继承","11.8 继承",[19,150507,150508],{},"继承可以让子类复用父类的属性和方法。",[389,150510,150512],{"className":30571,"code":150511,"language":30573,"meta":316,"style":316},"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",[395,150513,150514,150523,150532,150543,150547,150551,150565,150574,150585,150589,150593,150603,150608],{"__ignoreMap":316},[398,150515,150516,150518,150521],{"class":400,"line":401},[398,150517,14971],{"class":404},[398,150519,150520],{"class":2239}," Animal",[398,150522,4015],{"class":408},[398,150524,150525,150527,150530],{"class":400,"line":317},[398,150526,30994],{"class":404},[398,150528,150529],{"class":2239}," eat",[398,150531,31000],{"class":408},[398,150533,150534,150536,150538,150541],{"class":400,"line":320},[398,150535,32644],{"class":457},[398,150537,409],{"class":408},[398,150539,150540],{"class":513},"\"吃东西\"",[398,150542,415],{"class":408},[398,150544,150545],{"class":400,"line":1470},[398,150546,2676],{"emptyLinePlaceholder":328},[398,150548,150549],{"class":400,"line":1476},[398,150550,2676],{"emptyLinePlaceholder":328},[398,150552,150553,150555,150558,150560,150563],{"class":400,"line":1490},[398,150554,14971],{"class":404},[398,150556,150557],{"class":2239}," Dog",[398,150559,409],{"class":408},[398,150561,150562],{"class":2239},"Animal",[398,150564,30979],{"class":408},[398,150566,150567,150569,150572],{"class":400,"line":1496},[398,150568,30994],{"class":404},[398,150570,150571],{"class":2239}," bark",[398,150573,31000],{"class":408},[398,150575,150576,150578,150580,150583],{"class":400,"line":1587},[398,150577,32644],{"class":457},[398,150579,409],{"class":408},[398,150581,150582],{"class":513},"\"汪汪\"",[398,150584,415],{"class":408},[398,150586,150587],{"class":400,"line":1593},[398,150588,2676],{"emptyLinePlaceholder":328},[398,150590,150591],{"class":400,"line":1605},[398,150592,2676],{"emptyLinePlaceholder":328},[398,150594,150595,150598,150600],{"class":400,"line":1888},[398,150596,150597],{"class":408},"dog ",[398,150599,454],{"class":404},[398,150601,150602],{"class":408}," Dog()\n",[398,150604,150605],{"class":400,"line":1893},[398,150606,150607],{"class":408},"dog.eat()\n",[398,150609,150610],{"class":400,"line":1899},[398,150611,150612],{"class":408},"dog.bark()\n",[19,150614,150615],{},"子类可以扩展新方法，也可以重写父类方法。",[343,150617,150619],{"id":150618},"_119-方法重写","11.9 方法重写",[389,150621,150623],{"className":30571,"code":150622,"language":30573,"meta":316,"style":316},"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",[395,150624,150625,150633,150642,150653,150657,150661,150673,150681,150691,150695,150699,150712,150720,150731,150735,150739,150747,150757,150761,150766],{"__ignoreMap":316},[398,150626,150627,150629,150631],{"class":400,"line":401},[398,150628,14971],{"class":404},[398,150630,150520],{"class":2239},[398,150632,4015],{"class":408},[398,150634,150635,150637,150640],{"class":400,"line":317},[398,150636,30994],{"class":404},[398,150638,150639],{"class":2239}," speak",[398,150641,31000],{"class":408},[398,150643,150644,150646,150648,150651],{"class":400,"line":320},[398,150645,32644],{"class":457},[398,150647,409],{"class":408},[398,150649,150650],{"class":513},"\"动物叫\"",[398,150652,415],{"class":408},[398,150654,150655],{"class":400,"line":1470},[398,150656,2676],{"emptyLinePlaceholder":328},[398,150658,150659],{"class":400,"line":1476},[398,150660,2676],{"emptyLinePlaceholder":328},[398,150662,150663,150665,150667,150669,150671],{"class":400,"line":1490},[398,150664,14971],{"class":404},[398,150666,150557],{"class":2239},[398,150668,409],{"class":408},[398,150670,150562],{"class":2239},[398,150672,30979],{"class":408},[398,150674,150675,150677,150679],{"class":400,"line":1496},[398,150676,30994],{"class":404},[398,150678,150639],{"class":2239},[398,150680,31000],{"class":408},[398,150682,150683,150685,150687,150689],{"class":400,"line":1587},[398,150684,32644],{"class":457},[398,150686,409],{"class":408},[398,150688,150582],{"class":513},[398,150690,415],{"class":408},[398,150692,150693],{"class":400,"line":1593},[398,150694,2676],{"emptyLinePlaceholder":328},[398,150696,150697],{"class":400,"line":1605},[398,150698,2676],{"emptyLinePlaceholder":328},[398,150700,150701,150703,150706,150708,150710],{"class":400,"line":1888},[398,150702,14971],{"class":404},[398,150704,150705],{"class":2239}," Cat",[398,150707,409],{"class":408},[398,150709,150562],{"class":2239},[398,150711,30979],{"class":408},[398,150713,150714,150716,150718],{"class":400,"line":1893},[398,150715,30994],{"class":404},[398,150717,150639],{"class":2239},[398,150719,31000],{"class":408},[398,150721,150722,150724,150726,150729],{"class":400,"line":1899},[398,150723,32644],{"class":457},[398,150725,409],{"class":408},[398,150727,150728],{"class":513},"\"喵喵\"",[398,150730,415],{"class":408},[398,150732,150733],{"class":400,"line":1904},[398,150734,2676],{"emptyLinePlaceholder":328},[398,150736,150737],{"class":400,"line":1918},[398,150738,2676],{"emptyLinePlaceholder":328},[398,150740,150741,150743,150745],{"class":400,"line":1923},[398,150742,150597],{"class":408},[398,150744,454],{"class":404},[398,150746,150602],{"class":408},[398,150748,150749,150752,150754],{"class":400,"line":1929},[398,150750,150751],{"class":408},"cat ",[398,150753,454],{"class":404},[398,150755,150756],{"class":408}," Cat()\n",[398,150758,150759],{"class":400,"line":1950},[398,150760,2676],{"emptyLinePlaceholder":328},[398,150762,150763],{"class":400,"line":1955},[398,150764,150765],{"class":408},"dog.speak()\n",[398,150767,150768],{"class":400,"line":1969},[398,150769,150770],{"class":408},"cat.speak()\n",[343,150772,150774],{"id":150773},"_1110-super","11.10 super",[19,150776,150777,150778,150781],{},"子类可以通过 ",[395,150779,150780],{},"super()"," 调用父类方法。",[389,150783,150785],{"className":30571,"code":150784,"language":30573,"meta":316,"style":316},"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",[395,150786,150787,150795,150804,150814,150818,150822,150834,150843,150854,150864,150868,150872,150888],{"__ignoreMap":316},[398,150788,150789,150791,150793],{"class":400,"line":401},[398,150790,14971],{"class":404},[398,150792,15846],{"class":2239},[398,150794,4015],{"class":408},[398,150796,150797,150799,150801],{"class":400,"line":317},[398,150798,30994],{"class":404},[398,150800,30997],{"class":457},[398,150802,150803],{"class":408},"(self, name):\n",[398,150805,150806,150808,150810,150812],{"class":400,"line":320},[398,150807,31038],{"class":457},[398,150809,149983],{"class":408},[398,150811,454],{"class":404},[398,150813,149988],{"class":408},[398,150815,150816],{"class":400,"line":1470},[398,150817,2676],{"emptyLinePlaceholder":328},[398,150819,150820],{"class":400,"line":1476},[398,150821,2676],{"emptyLinePlaceholder":328},[398,150823,150824,150826,150828,150830,150832],{"class":400,"line":1490},[398,150825,14971],{"class":404},[398,150827,8175],{"class":2239},[398,150829,409],{"class":408},[398,150831,19323],{"class":2239},[398,150833,30979],{"class":408},[398,150835,150836,150838,150840],{"class":400,"line":1496},[398,150837,30994],{"class":404},[398,150839,30997],{"class":457},[398,150841,150842],{"class":408},"(self, name, score):\n",[398,150844,150845,150847,150849,150851],{"class":400,"line":1587},[398,150846,31010],{"class":457},[398,150848,17538],{"class":408},[398,150850,31022],{"class":457},[398,150852,150853],{"class":408},"(name)\n",[398,150855,150856,150858,150860,150862],{"class":400,"line":1593},[398,150857,31038],{"class":457},[398,150859,150007],{"class":408},[398,150861,454],{"class":404},[398,150863,1855],{"class":408},[398,150865,150866],{"class":400,"line":1605},[398,150867,2676],{"emptyLinePlaceholder":328},[398,150869,150870],{"class":400,"line":1888},[398,150871,2676],{"emptyLinePlaceholder":328},[398,150873,150874,150876,150878,150880,150882,150884,150886],{"class":400,"line":1893},[398,150875,149674],{"class":408},[398,150877,454],{"class":404},[398,150879,150078],{"class":408},[398,150881,150081],{"class":513},[398,150883,12712],{"class":408},[398,150885,1391],{"class":457},[398,150887,415],{"class":408},[398,150889,150890,150892],{"class":400,"line":1899},[398,150891,30608],{"class":457},[398,150893,150894],{"class":408},"(student.name, student.score)\n",[343,150896,150898],{"id":150897},"_1111-多态","11.11 多态",[19,150900,150901],{},"多态指不同对象响应同一个方法，表现出不同结果。",[389,150903,150905],{"className":30571,"code":150904,"language":30573,"meta":316,"style":316},"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",[395,150906,150907,150915,150923,150933,150937,150941,150949,150957,150967,150971,150975,150985,150990,150994,150998,151003],{"__ignoreMap":316},[398,150908,150909,150911,150913],{"class":400,"line":401},[398,150910,14971],{"class":404},[398,150912,150557],{"class":2239},[398,150914,4015],{"class":408},[398,150916,150917,150919,150921],{"class":400,"line":317},[398,150918,30994],{"class":404},[398,150920,150639],{"class":2239},[398,150922,31000],{"class":408},[398,150924,150925,150927,150929,150931],{"class":400,"line":320},[398,150926,32644],{"class":457},[398,150928,409],{"class":408},[398,150930,150582],{"class":513},[398,150932,415],{"class":408},[398,150934,150935],{"class":400,"line":1470},[398,150936,2676],{"emptyLinePlaceholder":328},[398,150938,150939],{"class":400,"line":1476},[398,150940,2676],{"emptyLinePlaceholder":328},[398,150942,150943,150945,150947],{"class":400,"line":1490},[398,150944,14971],{"class":404},[398,150946,150705],{"class":2239},[398,150948,4015],{"class":408},[398,150950,150951,150953,150955],{"class":400,"line":1496},[398,150952,30994],{"class":404},[398,150954,150639],{"class":2239},[398,150956,31000],{"class":408},[398,150958,150959,150961,150963,150965],{"class":400,"line":1587},[398,150960,32644],{"class":457},[398,150962,409],{"class":408},[398,150964,150728],{"class":513},[398,150966,415],{"class":408},[398,150968,150969],{"class":400,"line":1593},[398,150970,2676],{"emptyLinePlaceholder":328},[398,150972,150973],{"class":400,"line":1605},[398,150974,2676],{"emptyLinePlaceholder":328},[398,150976,150977,150979,150982],{"class":400,"line":1888},[398,150978,32140],{"class":404},[398,150980,150981],{"class":2239}," make_sound",[398,150983,150984],{"class":408},"(animal):\n",[398,150986,150987],{"class":400,"line":1893},[398,150988,150989],{"class":408},"    animal.speak()\n",[398,150991,150992],{"class":400,"line":1899},[398,150993,2676],{"emptyLinePlaceholder":328},[398,150995,150996],{"class":400,"line":1904},[398,150997,2676],{"emptyLinePlaceholder":328},[398,150999,151000],{"class":400,"line":1918},[398,151001,151002],{"class":408},"make_sound(Dog())\n",[398,151004,151005],{"class":400,"line":1923},[398,151006,151007],{"class":408},"make_sound(Cat())\n",[19,151009,151010],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[343,151012,151014],{"id":151013},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,151016,151017],{},"实例属性属于对象：",[389,151019,151021],{"className":30571,"code":151020,"language":30573,"meta":316,"style":316},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[395,151022,151023,151031,151039],{"__ignoreMap":316},[398,151024,151025,151027,151029],{"class":400,"line":401},[398,151026,14971],{"class":404},[398,151028,8175],{"class":2239},[398,151030,4015],{"class":408},[398,151032,151033,151035,151037],{"class":400,"line":317},[398,151034,30994],{"class":404},[398,151036,30997],{"class":457},[398,151038,150803],{"class":408},[398,151040,151041,151043,151045,151047],{"class":400,"line":320},[398,151042,31038],{"class":457},[398,151044,149983],{"class":408},[398,151046,454],{"class":404},[398,151048,149988],{"class":408},[19,151050,151051],{},"类属性属于类，所有对象共享：",[389,151053,151055],{"className":30571,"code":151054,"language":30573,"meta":316,"style":316},"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",[395,151056,151057,151065,151075,151079,151087,151097,151101,151105,151118,151132,151136,151143,151150],{"__ignoreMap":316},[398,151058,151059,151061,151063],{"class":400,"line":401},[398,151060,14971],{"class":404},[398,151062,8175],{"class":2239},[398,151064,4015],{"class":408},[398,151066,151067,151070,151072],{"class":400,"line":317},[398,151068,151069],{"class":408},"    school ",[398,151071,454],{"class":404},[398,151073,151074],{"class":513}," \"黑马学校\"\n",[398,151076,151077],{"class":400,"line":320},[398,151078,2676],{"emptyLinePlaceholder":328},[398,151080,151081,151083,151085],{"class":400,"line":1470},[398,151082,30994],{"class":404},[398,151084,30997],{"class":457},[398,151086,150803],{"class":408},[398,151088,151089,151091,151093,151095],{"class":400,"line":1476},[398,151090,31038],{"class":457},[398,151092,149983],{"class":408},[398,151094,454],{"class":404},[398,151096,149988],{"class":408},[398,151098,151099],{"class":400,"line":1490},[398,151100,2676],{"emptyLinePlaceholder":328},[398,151102,151103],{"class":400,"line":1496},[398,151104,2676],{"emptyLinePlaceholder":328},[398,151106,151107,151110,151112,151114,151116],{"class":400,"line":1587},[398,151108,151109],{"class":408},"s1 ",[398,151111,454],{"class":404},[398,151113,150078],{"class":408},[398,151115,150081],{"class":513},[398,151117,415],{"class":408},[398,151119,151120,151123,151125,151127,151130],{"class":400,"line":1593},[398,151121,151122],{"class":408},"s2 ",[398,151124,454],{"class":404},[398,151126,150078],{"class":408},[398,151128,151129],{"class":513},"\"小红\"",[398,151131,415],{"class":408},[398,151133,151134],{"class":400,"line":1605},[398,151135,2676],{"emptyLinePlaceholder":328},[398,151137,151138,151140],{"class":400,"line":1888},[398,151139,30608],{"class":457},[398,151141,151142],{"class":408},"(s1.school)\n",[398,151144,151145,151147],{"class":400,"line":1893},[398,151146,30608],{"class":457},[398,151148,151149],{"class":408},"(s2.school)\n",[398,151151,151152,151154],{"class":400,"line":1899},[398,151153,30608],{"class":457},[398,151155,151156],{"class":408},"(Student.school)\n",[19,151158,151159],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[343,151161,151163],{"id":151162},"_1113-类方法和静态方法","11.13 类方法和静态方法",[14,151165,151167],{"id":151166},"_11131-类方法","11.13.1 类方法",[19,151169,151170,151171,151174,151175,28578],{},"类方法使用 ",[395,151172,151173],{},"@classmethod","，第一个参数通常是 ",[395,151176,151177],{},"cls",[389,151179,151181],{"className":30571,"code":151180,"language":30573,"meta":316,"style":316},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[395,151182,151183,151191,151199,151203,151211,151221,151231,151235,151239],{"__ignoreMap":316},[398,151184,151185,151187,151189],{"class":400,"line":401},[398,151186,14971],{"class":404},[398,151188,8175],{"class":2239},[398,151190,4015],{"class":408},[398,151192,151193,151195,151197],{"class":400,"line":317},[398,151194,151069],{"class":408},[398,151196,454],{"class":404},[398,151198,151074],{"class":513},[398,151200,151201],{"class":400,"line":320},[398,151202,2676],{"emptyLinePlaceholder":328},[398,151204,151205,151208],{"class":400,"line":1470},[398,151206,151207],{"class":2239},"    @",[398,151209,151210],{"class":457},"classmethod\n",[398,151212,151213,151215,151218],{"class":400,"line":1476},[398,151214,30994],{"class":404},[398,151216,151217],{"class":2239}," get_school",[398,151219,151220],{"class":408},"(cls):\n",[398,151222,151223,151225,151228],{"class":400,"line":1490},[398,151224,15029],{"class":404},[398,151226,151227],{"class":457}," cls",[398,151229,151230],{"class":408},".school\n",[398,151232,151233],{"class":400,"line":1496},[398,151234,2676],{"emptyLinePlaceholder":328},[398,151236,151237],{"class":400,"line":1587},[398,151238,2676],{"emptyLinePlaceholder":328},[398,151240,151241,151243],{"class":400,"line":1593},[398,151242,30608],{"class":457},[398,151244,151245],{"class":408},"(Student.get_school())\n",[14,151247,151249],{"id":151248},"_11132-静态方法","11.13.2 静态方法",[19,151251,151252,151253,151256],{},"静态方法使用 ",[395,151254,151255],{},"@staticmethod","，不需要访问实例和类。",[389,151258,151260],{"className":30571,"code":151259,"language":30573,"meta":316,"style":316},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[395,151261,151262,151271,151278,151287,151298,151302,151306],{"__ignoreMap":316},[398,151263,151264,151266,151269],{"class":400,"line":401},[398,151265,14971],{"class":404},[398,151267,151268],{"class":2239}," MathUtils",[398,151270,4015],{"class":408},[398,151272,151273,151275],{"class":400,"line":317},[398,151274,151207],{"class":2239},[398,151276,151277],{"class":457},"staticmethod\n",[398,151279,151280,151282,151284],{"class":400,"line":320},[398,151281,30994],{"class":404},[398,151283,5486],{"class":2239},[398,151285,151286],{"class":408},"(a, b):\n",[398,151288,151289,151291,151293,151295],{"class":400,"line":1470},[398,151290,15029],{"class":404},[398,151292,11146],{"class":408},[398,151294,883],{"class":404},[398,151296,151297],{"class":408}," b\n",[398,151299,151300],{"class":400,"line":1476},[398,151301,2676],{"emptyLinePlaceholder":328},[398,151303,151304],{"class":400,"line":1490},[398,151305,2676],{"emptyLinePlaceholder":328},[398,151307,151308,151310,151313,151315,151317,151319],{"class":400,"line":1496},[398,151309,30608],{"class":457},[398,151311,151312],{"class":408},"(MathUtils.add(",[398,151314,619],{"class":457},[398,151316,12712],{"class":408},[398,151318,486],{"class":457},[398,151320,30690],{"class":408},[19,151322,151323],{},"静态方法本质上是放在类命名空间里的普通函数。",[343,151325,151327],{"id":151326},"_1114-dataclass","11.14 dataclass",[19,151329,151330,151333],{},[395,151331,151332],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[389,151335,151337],{"className":30571,"code":151336,"language":30573,"meta":316,"style":316},"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",[395,151338,151339,151351,151355,151359,151364,151372,151380,151388,151396,151400,151404,151424],{"__ignoreMap":316},[398,151340,151341,151343,151346,151348],{"class":400,"line":401},[398,151342,30930],{"class":404},[398,151344,151345],{"class":408}," dataclasses ",[398,151347,30585],{"class":404},[398,151349,151350],{"class":408}," dataclass\n",[398,151352,151353],{"class":400,"line":317},[398,151354,2676],{"emptyLinePlaceholder":328},[398,151356,151357],{"class":400,"line":320},[398,151358,2676],{"emptyLinePlaceholder":328},[398,151360,151361],{"class":400,"line":1470},[398,151362,151363],{"class":2239},"@dataclass\n",[398,151365,151366,151368,151370],{"class":400,"line":1476},[398,151367,14971],{"class":404},[398,151369,8175],{"class":2239},[398,151371,4015],{"class":408},[398,151373,151374,151377],{"class":400,"line":1490},[398,151375,151376],{"class":408},"    name: ",[398,151378,151379],{"class":457},"str\n",[398,151381,151382,151385],{"class":400,"line":1496},[398,151383,151384],{"class":408},"    age: ",[398,151386,151387],{"class":457},"int\n",[398,151389,151390,151393],{"class":400,"line":1587},[398,151391,151392],{"class":408},"    score: ",[398,151394,151395],{"class":457},"float\n",[398,151397,151398],{"class":400,"line":1593},[398,151399,2676],{"emptyLinePlaceholder":328},[398,151401,151402],{"class":400,"line":1605},[398,151403,2676],{"emptyLinePlaceholder":328},[398,151405,151406,151408,151410,151412,151414,151416,151418,151420,151422],{"class":400,"line":1888},[398,151407,149674],{"class":408},[398,151409,454],{"class":404},[398,151411,150078],{"class":408},[398,151413,150081],{"class":513},[398,151415,12712],{"class":408},[398,151417,1052],{"class":457},[398,151419,12712],{"class":408},[398,151421,1391],{"class":457},[398,151423,415],{"class":408},[398,151425,151426,151428],{"class":400,"line":1893},[398,151427,30608],{"class":457},[398,151429,150235],{"class":408},[19,151431,151432,151433,614,151435,151438],{},"它会自动生成 ",[395,151434,31022],{},[395,151436,151437],{},"__repr__"," 等方法。适合数据模型类。",[343,151440,151442],{"id":151441},"_1115-小案例学生类","11.15 小案例：学生类",[389,151444,151446],{"className":30571,"code":151445,"language":30573,"meta":316,"style":316},"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",[395,151447,151448,151456,151465,151477,151487,151497,151507,151511,151520,151533,151537,151546,151552,151564,151576,151588,151600,151604,151608,151614,151624,151633,151643,151651,151659,151668,151672,151676,151684,151720,151724,151728,151753,151760],{"__ignoreMap":316},[398,151449,151450,151452,151454],{"class":400,"line":401},[398,151451,14971],{"class":404},[398,151453,8175],{"class":2239},[398,151455,4015],{"class":408},[398,151457,151458,151460,151462],{"class":400,"line":317},[398,151459,30994],{"class":404},[398,151461,30997],{"class":457},[398,151463,151464],{"class":408},"(self, student_id, name, age, score):\n",[398,151466,151467,151469,151472,151474],{"class":400,"line":320},[398,151468,31038],{"class":457},[398,151470,151471],{"class":408},".student_id ",[398,151473,454],{"class":404},[398,151475,151476],{"class":408}," student_id\n",[398,151478,151479,151481,151483,151485],{"class":400,"line":1470},[398,151480,31038],{"class":457},[398,151482,149983],{"class":408},[398,151484,454],{"class":404},[398,151486,149988],{"class":408},[398,151488,151489,151491,151493,151495],{"class":400,"line":1476},[398,151490,31038],{"class":457},[398,151492,149995],{"class":408},[398,151494,454],{"class":404},[398,151496,150000],{"class":408},[398,151498,151499,151501,151503,151505],{"class":400,"line":1490},[398,151500,31038],{"class":457},[398,151502,150007],{"class":408},[398,151504,454],{"class":404},[398,151506,1855],{"class":408},[398,151508,151509],{"class":400,"line":1496},[398,151510,2676],{"emptyLinePlaceholder":328},[398,151512,151513,151515,151518],{"class":400,"line":1587},[398,151514,30994],{"class":404},[398,151516,151517],{"class":2239}," is_passed",[398,151519,31000],{"class":408},[398,151521,151522,151524,151526,151528,151530],{"class":400,"line":1593},[398,151523,15029],{"class":404},[398,151525,39066],{"class":457},[398,151527,150007],{"class":408},[398,151529,1986],{"class":404},[398,151531,151532],{"class":457}," 60\n",[398,151534,151535],{"class":400,"line":1605},[398,151536,2676],{"emptyLinePlaceholder":328},[398,151538,151539,151541,151544],{"class":400,"line":1888},[398,151540,30994],{"class":404},[398,151542,151543],{"class":2239}," to_dict",[398,151545,31000],{"class":408},[398,151547,151548,151550],{"class":400,"line":1893},[398,151549,15029],{"class":404},[398,151551,15849],{"class":408},[398,151553,151554,151557,151559,151561],{"class":400,"line":1899},[398,151555,151556],{"class":513},"            \"student_id\"",[398,151558,51630],{"class":408},[398,151560,31016],{"class":457},[398,151562,151563],{"class":408},".student_id,\n",[398,151565,151566,151569,151571,151573],{"class":400,"line":1904},[398,151567,151568],{"class":513},"            \"name\"",[398,151570,51630],{"class":408},[398,151572,31016],{"class":457},[398,151574,151575],{"class":408},".name,\n",[398,151577,151578,151581,151583,151585],{"class":400,"line":1918},[398,151579,151580],{"class":513},"            \"age\"",[398,151582,51630],{"class":408},[398,151584,31016],{"class":457},[398,151586,151587],{"class":408},".age,\n",[398,151589,151590,151593,151595,151597],{"class":400,"line":1923},[398,151591,151592],{"class":513},"            \"score\"",[398,151594,51630],{"class":408},[398,151596,31016],{"class":457},[398,151598,151599],{"class":408},".score,\n",[398,151601,151602],{"class":400,"line":1929},[398,151603,2805],{"class":408},[398,151605,151606],{"class":400,"line":1950},[398,151607,2676],{"emptyLinePlaceholder":328},[398,151609,151610,151612],{"class":400,"line":1955},[398,151611,151207],{"class":2239},[398,151613,151210],{"class":457},[398,151615,151616,151618,151621],{"class":400,"line":1969},[398,151617,30994],{"class":404},[398,151619,151620],{"class":2239}," from_dict",[398,151622,151623],{"class":408},"(cls, data):\n",[398,151625,151626,151628,151630],{"class":400,"line":1974},[398,151627,15029],{"class":404},[398,151629,151227],{"class":457},[398,151631,151632],{"class":408},"(\n",[398,151634,151635,151638,151641],{"class":400,"line":2003},[398,151636,151637],{"class":408},"            data[",[398,151639,151640],{"class":513},"\"student_id\"",[398,151642,88029],{"class":408},[398,151644,151645,151647,151649],{"class":400,"line":2008},[398,151646,151637],{"class":408},[398,151648,62872],{"class":513},[398,151650,88029],{"class":408},[398,151652,151653,151655,151657],{"class":400,"line":2025},[398,151654,151637],{"class":408},[398,151656,69317],{"class":513},[398,151658,88029],{"class":408},[398,151660,151661,151663,151666],{"class":400,"line":2030},[398,151662,151637],{"class":408},[398,151664,151665],{"class":513},"\"score\"",[398,151667,88029],{"class":408},[398,151669,151670],{"class":400,"line":2035},[398,151671,38319],{"class":408},[398,151673,151674],{"class":400,"line":2040},[398,151675,2676],{"emptyLinePlaceholder":328},[398,151677,151678,151680,151682],{"class":400,"line":2054},[398,151679,30994],{"class":404},[398,151681,150174],{"class":457},[398,151683,31000],{"class":408},[398,151685,151686,151688,151690,151692,151694,151697,151699,151702,151704,151706,151708,151710,151712,151714,151716,151718],{"class":400,"line":2059},[398,151687,15029],{"class":404},[398,151689,150183],{"class":404},[398,151691,653],{"class":513},[398,151693,149645],{"class":457},[398,151695,151696],{"class":408},".student_id",[398,151698,1348],{"class":457},[398,151700,151701],{"class":457}," {self",[398,151703,80494],{"class":408},[398,151705,1348],{"class":457},[398,151707,151701],{"class":457},[398,151709,80506],{"class":408},[398,151711,1348],{"class":457},[398,151713,151701],{"class":457},[398,151715,150055],{"class":408},[398,151717,1348],{"class":457},[398,151719,25411],{"class":513},[398,151721,151722],{"class":400,"line":2853},[398,151723,2676],{"emptyLinePlaceholder":328},[398,151725,151726],{"class":400,"line":2867},[398,151727,2676],{"emptyLinePlaceholder":328},[398,151729,151730,151732,151734,151736,151739,151741,151743,151745,151747,151749,151751],{"class":400,"line":2875},[398,151731,149674],{"class":408},[398,151733,454],{"class":404},[398,151735,150078],{"class":408},[398,151737,151738],{"class":513},"\"001\"",[398,151740,12712],{"class":408},[398,151742,150081],{"class":513},[398,151744,12712],{"class":408},[398,151746,1052],{"class":457},[398,151748,12712],{"class":408},[398,151750,1391],{"class":457},[398,151752,415],{"class":408},[398,151754,151755,151757],{"class":400,"line":2880},[398,151756,30608],{"class":457},[398,151758,151759],{"class":408},"(student.is_passed())\n",[398,151761,151762,151764],{"class":400,"line":2886},[398,151763,30608],{"class":457},[398,151765,151766],{"class":408},"(student.to_dict())\n",[19,151768,151769,101211,151772,151775],{},[395,151770,151771],{},"to_dict()",[395,151773,151774],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[343,151777,151779],{"id":151778},"_1116-易错点","11.16 易错点",[38,151781,151782,151788,151794,151799,151802,151805],{},[41,151783,151784,151785,28578],{},"类名推荐使用大驼峰，如 ",[395,151786,151787],{},"StudentManager",[41,151789,151790,151791,151793],{},"方法第一个参数必须写 ",[395,151792,31016],{},"，调用时不用传。",[41,151795,151796,151798],{},[395,151797,31022],{}," 不是普通方法，它在创建对象时自动执行。",[41,151800,151801],{},"私有属性不是绝对安全，只是约定和名称改写。",[41,151803,151804],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[41,151806,151807],{},"类中方法太多时，说明职责可能过重。",[343,151809,151811],{"id":151810},"_1117-本章练习","11.17 本章练习",[38,151813,151814,151820,151826,151831,151844],{},[41,151815,151816,151817,151819],{},"定义 ",[395,151818,149761],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[41,151821,151816,151822,151825],{},[395,151823,151824],{},"Account"," 类，实现存款、取款、查询余额。",[41,151827,151816,151828,151830],{},[395,151829,17503],{}," 类，计算圆的周长和面积。",[41,151832,151816,151833,614,151836,151839,151840,151843],{},[395,151834,151835],{},"Dog",[395,151837,151838],{},"Cat"," 类，并用同一个函数调用它们的 ",[395,151841,151842],{},"speak()"," 方法。",[41,151845,104559,151846,151848,151849,28578],{},[395,151847,151332],{}," 定义一个商品类 ",[395,151850,151851],{},"Product",[5403,151853,151854],{},"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":316,"searchDepth":317,"depth":317,"links":151856},[151857,151858,151859,151860,151861,151862,151864,151865,151866,151867,151868,151869,151870,151874,151875,151876,151877],{"id":149525,"depth":317,"text":149526},{"id":149708,"depth":317,"text":149709},{"id":149772,"depth":317,"text":149773},{"id":149849,"depth":317,"text":149850},{"id":149948,"depth":317,"text":149949},{"id":150112,"depth":317,"text":151863},"11.6 str",{"id":150238,"depth":317,"text":150239},{"id":150504,"depth":317,"text":150505},{"id":150618,"depth":317,"text":150619},{"id":150773,"depth":317,"text":150774},{"id":150897,"depth":317,"text":150898},{"id":151013,"depth":317,"text":151014},{"id":151162,"depth":317,"text":151163,"children":151871},[151872,151873],{"id":151166,"depth":320,"text":151167},{"id":151248,"depth":320,"text":151249},{"id":151326,"depth":317,"text":151327},{"id":151441,"depth":317,"text":151442},{"id":151778,"depth":317,"text":151779},{"id":151810,"depth":317,"text":151811},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149517,"description":23654},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151884,"title":151885,"body":151886,"description":23654,"extension":326,"meta":155199,"navigation":328,"path":155200,"seo":155201,"stem":155202,"__hash__":155203},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151887,"toc":155175},[151888,151891,151895,151898,151901,151930,151933,151941,151945,151949,151952,151975,151978,151984,151988,153434,153437,153458,153462,153465,153477,153480,153664,153667,153793,153796,153800,153804,153940,153944,154030,154034,154116,154120,154157,154161,154350,154354,154357,154587,154591,154594,154775,154778,154782,154785,154791,154794,154820,154824,154827,154841,154844,154869,154872,154886,154889,154906,154909,154926,154929,154946,154950,154976,154980,155003,155007,155010,155012,155018,155020,155041,155044,155050,155056,155060,155063,155139,155142,155146,155172],[10,151889,151885],{"id":151890},"_12-综合案例与复习路线",[343,151892,151894],{"id":151893},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,151896,151897],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,151899,151900],{},"一个合格的入门综合项目最好覆盖：",[38,151902,151903,151906,151909,151912,151915,151918,151921,151924,151927],{},[41,151904,151905],{},"输入输出。",[41,151907,151908],{},"判断和循环。",[41,151910,151911],{},"函数拆分。",[41,151913,151914],{},"列表、字典等容器。",[41,151916,151917],{},"文件持久化。",[41,151919,151920],{},"异常处理。",[41,151922,151923],{},"模块拆分。",[41,151925,151926],{},"可选：面向对象。",[41,151928,151929],{},"可选：数据可视化。",[19,151931,151932],{},"本章整理两个方向：",[38,151934,151935,151938],{},[41,151936,151937],{},"学生管理系统。",[41,151939,151940],{},"销售数据统计和可视化。",[343,151942,151944],{"id":151943},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[14,151946,151948],{"id":151947},"_1221-需求","12.2.1 需求",[19,151950,151951],{},"实现一个命令行学生管理系统：",[38,151953,151954,151957,151960,151963,151966,151969,151972],{},[41,151955,151956],{},"添加学生。",[41,151958,151959],{},"删除学生。",[41,151961,151962],{},"修改学生。",[41,151964,151965],{},"查询学生。",[41,151967,151968],{},"显示所有学生。",[41,151970,151971],{},"保存到 JSON 文件。",[41,151973,151974],{},"程序启动时自动读取 JSON 文件。",[19,151976,151977],{},"学生字段：",[389,151979,151982],{"className":151980,"code":151981,"language":5464,"meta":316},[5462],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[395,151983,151981],{"__ignoreMap":316},[343,151985,151987],{"id":151986},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[389,151989,151991],{"className":30571,"code":151990,"language":30573,"meta":316,"style":316},"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",[395,151992,151993,151999,152009,152013,152027,152031,152035,152044,152056,152062,152066,152072,152103,152113,152120,152131,152137,152141,152145,152155,152186,152212,152216,152220,152229,152240,152251,152262,152273,152284,152295,152306,152310,152314,152324,152336,152352,152359,152366,152370,152374,152384,152392,152399,152412,152422,152433,152437,152441,152450,152458,152464,152476,152484,152495,152499,152503,152512,152528,152532,152539,152550,152555,152559,152575,152590,152605,152609,152614,152622,152630,152638,152646,152650,152655,152666,152670,152674,152683,152698,152708,152712,152724,152735,152739,152743,152748,152752,152763,152767,152771,152780,152795,152803,152807,152819,152829,152833,152837,152852,152865,152878,152882,152895,152907,152919,152923,152927,152938,152942,152946,152955,152970,152978,152982,152994,153004,153008,153012,153017,153021,153025,153035,153041,153063,153082,153101,153120,153125,153129,153133,153142,153150,153161,153165,153169,153195,153205,153210,153214,153218,153226,153236,153240,153248,153253,153269,153273,153287,153292,153306,153311,153324,153329,153342,153347,153360,153365,153378,153389,153393,153399,153410,153414,153418,153430],{"__ignoreMap":316},[398,151994,151995,151997],{"class":400,"line":401},[398,151996,30585],{"class":404},[398,151998,147284],{"class":408},[398,152000,152001,152003,152005,152007],{"class":400,"line":317},[398,152002,30930],{"class":404},[398,152004,108504],{"class":408},[398,152006,30585],{"class":404},[398,152008,108509],{"class":408},[398,152010,152011],{"class":400,"line":320},[398,152012,2676],{"emptyLinePlaceholder":328},[398,152014,152015,152018,152020,152022,152025],{"class":400,"line":1470},[398,152016,152017],{"class":457},"DATA_FILE",[398,152019,13841],{"class":404},[398,152021,108738],{"class":408},[398,152023,152024],{"class":513},"\"students.json\"",[398,152026,415],{"class":408},[398,152028,152029],{"class":400,"line":1476},[398,152030,2676],{"emptyLinePlaceholder":328},[398,152032,152033],{"class":400,"line":1490},[398,152034,2676],{"emptyLinePlaceholder":328},[398,152036,152037,152039,152042],{"class":400,"line":1496},[398,152038,32140],{"class":404},[398,152040,152041],{"class":2239}," load_students",[398,152043,32146],{"class":408},[398,152045,152046,152048,152050,152053],{"class":400,"line":1587},[398,152047,3377],{"class":404},[398,152049,39123],{"class":404},[398,152051,152052],{"class":457}," DATA_FILE",[398,152054,152055],{"class":408},".exists():\n",[398,152057,152058,152060],{"class":400,"line":1593},[398,152059,15029],{"class":404},[398,152061,52031],{"class":408},[398,152063,152064],{"class":400,"line":1605},[398,152065,2676],{"emptyLinePlaceholder":328},[398,152067,152068,152070],{"class":400,"line":1888},[398,152069,125977],{"class":404},[398,152071,4015],{"class":408},[398,152073,152074,152077,152079,152081,152083,152085,152087,152089,152091,152093,152095,152097,152099,152101],{"class":400,"line":1893},[398,152075,152076],{"class":404},"        with",[398,152078,146984],{"class":457},[398,152080,409],{"class":408},[398,152082,152017],{"class":457},[398,152084,12712],{"class":408},[398,152086,146994],{"class":513},[398,152088,12712],{"class":408},[398,152090,146999],{"class":5493},[398,152092,454],{"class":404},[398,152094,147004],{"class":513},[398,152096,13991],{"class":408},[398,152098,31576],{"class":404},[398,152100,148346],{"class":5493},[398,152102,4015],{"class":408},[398,152104,152105,152107,152109,152111],{"class":400,"line":1899},[398,152106,16009],{"class":404},[398,152108,148357],{"class":408},[398,152110,45547],{"class":5493},[398,152112,415],{"class":408},[398,152114,152115,152117],{"class":400,"line":1904},[398,152116,126005],{"class":404},[398,152118,152119],{"class":408}," json.JSONDecodeError:\n",[398,152121,152122,152124,152126,152129],{"class":400,"line":1918},[398,152123,32644],{"class":457},[398,152125,409],{"class":408},[398,152127,152128],{"class":513},"\"数据文件格式错误，已使用空数据启动\"",[398,152130,415],{"class":408},[398,152132,152133,152135],{"class":400,"line":1923},[398,152134,15029],{"class":404},[398,152136,52031],{"class":408},[398,152138,152139],{"class":400,"line":1929},[398,152140,2676],{"emptyLinePlaceholder":328},[398,152142,152143],{"class":400,"line":1950},[398,152144,2676],{"emptyLinePlaceholder":328},[398,152146,152147,152149,152152],{"class":400,"line":1955},[398,152148,32140],{"class":404},[398,152150,152151],{"class":2239}," save_students",[398,152153,152154],{"class":408},"(students):\n",[398,152156,152157,152159,152161,152163,152165,152167,152170,152172,152174,152176,152178,152180,152182,152184],{"class":400,"line":1969},[398,152158,34371],{"class":404},[398,152160,146984],{"class":457},[398,152162,409],{"class":408},[398,152164,152017],{"class":457},[398,152166,12712],{"class":408},[398,152168,152169],{"class":513},"\"w\"",[398,152171,12712],{"class":408},[398,152173,146999],{"class":5493},[398,152175,454],{"class":404},[398,152177,147004],{"class":513},[398,152179,13991],{"class":408},[398,152181,31576],{"class":404},[398,152183,148346],{"class":5493},[398,152185,4015],{"class":408},[398,152187,152188,152191,152193,152195,152197,152199,152201,152203,152206,152208,152210],{"class":400,"line":1974},[398,152189,152190],{"class":408},"        json.dump(students, ",[398,152192,45547],{"class":5493},[398,152194,12712],{"class":408},[398,152196,147330],{"class":5493},[398,152198,454],{"class":404},[398,152200,34180],{"class":457},[398,152202,12712],{"class":408},[398,152204,152205],{"class":5493},"indent",[398,152207,454],{"class":404},[398,152209,486],{"class":457},[398,152211,415],{"class":408},[398,152213,152214],{"class":400,"line":2003},[398,152215,2676],{"emptyLinePlaceholder":328},[398,152217,152218],{"class":400,"line":2008},[398,152219,2676],{"emptyLinePlaceholder":328},[398,152221,152222,152224,152227],{"class":400,"line":2025},[398,152223,32140],{"class":404},[398,152225,152226],{"class":2239}," show_menu",[398,152228,32146],{"class":408},[398,152230,152231,152233,152235,152238],{"class":400,"line":2030},[398,152232,31492],{"class":457},[398,152234,409],{"class":408},[398,152236,152237],{"class":513},"\"====== 学生管理系统 ======\"",[398,152239,415],{"class":408},[398,152241,152242,152244,152246,152249],{"class":400,"line":2035},[398,152243,31492],{"class":457},[398,152245,409],{"class":408},[398,152247,152248],{"class":513},"\"1. 添加学生\"",[398,152250,415],{"class":408},[398,152252,152253,152255,152257,152260],{"class":400,"line":2040},[398,152254,31492],{"class":457},[398,152256,409],{"class":408},[398,152258,152259],{"class":513},"\"2. 删除学生\"",[398,152261,415],{"class":408},[398,152263,152264,152266,152268,152271],{"class":400,"line":2054},[398,152265,31492],{"class":457},[398,152267,409],{"class":408},[398,152269,152270],{"class":513},"\"3. 修改学生\"",[398,152272,415],{"class":408},[398,152274,152275,152277,152279,152282],{"class":400,"line":2059},[398,152276,31492],{"class":457},[398,152278,409],{"class":408},[398,152280,152281],{"class":513},"\"4. 查询学生\"",[398,152283,415],{"class":408},[398,152285,152286,152288,152290,152293],{"class":400,"line":2853},[398,152287,31492],{"class":457},[398,152289,409],{"class":408},[398,152291,152292],{"class":513},"\"5. 显示所有学生\"",[398,152294,415],{"class":408},[398,152296,152297,152299,152301,152304],{"class":400,"line":2867},[398,152298,31492],{"class":457},[398,152300,409],{"class":408},[398,152302,152303],{"class":513},"\"0. 退出系统\"",[398,152305,415],{"class":408},[398,152307,152308],{"class":400,"line":2875},[398,152309,2676],{"emptyLinePlaceholder":328},[398,152311,152312],{"class":400,"line":2880},[398,152313,2676],{"emptyLinePlaceholder":328},[398,152315,152316,152318,152321],{"class":400,"line":2886},[398,152317,32140],{"class":404},[398,152319,152320],{"class":2239}," find_student",[398,152322,152323],{"class":408},"(students, student_id):\n",[398,152325,152326,152328,152331,152333],{"class":400,"line":2892},[398,152327,3477],{"class":404},[398,152329,152330],{"class":408}," student ",[398,152332,26236],{"class":404},[398,152334,152335],{"class":408}," students:\n",[398,152337,152338,152340,152343,152345,152347,152349],{"class":400,"line":2897},[398,152339,2773],{"class":404},[398,152341,152342],{"class":408}," student[",[398,152344,151640],{"class":513},[398,152346,4719],{"class":408},[398,152348,3225],{"class":404},[398,152350,152351],{"class":408}," student_id:\n",[398,152353,152354,152356],{"class":400,"line":8225},[398,152355,16009],{"class":404},[398,152357,152358],{"class":408}," student\n",[398,152360,152361,152363],{"class":400,"line":8249},[398,152362,4366],{"class":404},[398,152364,152365],{"class":457}," None\n",[398,152367,152368],{"class":400,"line":8254},[398,152369,2676],{"emptyLinePlaceholder":328},[398,152371,152372],{"class":400,"line":8260},[398,152373,2676],{"emptyLinePlaceholder":328},[398,152375,152376,152378,152381],{"class":400,"line":8287},[398,152377,32140],{"class":404},[398,152379,152380],{"class":2239}," input_int",[398,152382,152383],{"class":408},"(prompt):\n",[398,152385,152386,152388,152390],{"class":400,"line":8292},[398,152387,2527],{"class":404},[398,152389,95485],{"class":457},[398,152391,4015],{"class":408},[398,152393,152394,152397],{"class":400,"line":8298},[398,152395,152396],{"class":404},"        try",[398,152398,4015],{"class":408},[398,152400,152401,152403,152405,152407,152409],{"class":400,"line":8310},[398,152402,16009],{"class":404},[398,152404,2658],{"class":457},[398,152406,409],{"class":408},[398,152408,54014],{"class":457},[398,152410,152411],{"class":408},"(prompt))\n",[398,152413,152414,152417,152420],{"class":400,"line":8322},[398,152415,152416],{"class":404},"        except",[398,152418,152419],{"class":457}," ValueError",[398,152421,4015],{"class":408},[398,152423,152424,152426,152428,152431],{"class":400,"line":8334},[398,152425,34843],{"class":457},[398,152427,409],{"class":408},[398,152429,152430],{"class":513},"\"请输入整数\"",[398,152432,415],{"class":408},[398,152434,152435],{"class":400,"line":9993},[398,152436,2676],{"emptyLinePlaceholder":328},[398,152438,152439],{"class":400,"line":10018},[398,152440,2676],{"emptyLinePlaceholder":328},[398,152442,152443,152445,152448],{"class":400,"line":10041},[398,152444,32140],{"class":404},[398,152446,152447],{"class":2239}," input_float",[398,152449,152383],{"class":408},[398,152451,152452,152454,152456],{"class":400,"line":10065},[398,152453,2527],{"class":404},[398,152455,95485],{"class":457},[398,152457,4015],{"class":408},[398,152459,152460,152462],{"class":400,"line":10070},[398,152461,152396],{"class":404},[398,152463,4015],{"class":408},[398,152465,152466,152468,152470,152472,152474],{"class":400,"line":10075},[398,152467,16009],{"class":404},[398,152469,109990],{"class":457},[398,152471,409],{"class":408},[398,152473,54014],{"class":457},[398,152475,152411],{"class":408},[398,152477,152478,152480,152482],{"class":400,"line":10080},[398,152479,152416],{"class":404},[398,152481,152419],{"class":457},[398,152483,4015],{"class":408},[398,152485,152486,152488,152490,152493],{"class":400,"line":10089},[398,152487,34843],{"class":457},[398,152489,409],{"class":408},[398,152491,152492],{"class":513},"\"请输入数字\"",[398,152494,415],{"class":408},[398,152496,152497],{"class":400,"line":10094},[398,152498,2676],{"emptyLinePlaceholder":328},[398,152500,152501],{"class":400,"line":10100},[398,152502,2676],{"emptyLinePlaceholder":328},[398,152504,152505,152507,152510],{"class":400,"line":10121},[398,152506,32140],{"class":404},[398,152508,152509],{"class":2239}," add_student",[398,152511,152154],{"class":408},[398,152513,152514,152517,152519,152521,152523,152526],{"class":400,"line":10127},[398,152515,152516],{"class":408},"    student_id ",[398,152518,454],{"class":404},[398,152520,60798],{"class":457},[398,152522,409],{"class":408},[398,152524,152525],{"class":513},"\"请输入学号:\"",[398,152527,415],{"class":408},[398,152529,152530],{"class":400,"line":10141},[398,152531,2676],{"emptyLinePlaceholder":328},[398,152533,152534,152536],{"class":400,"line":10147},[398,152535,3377],{"class":404},[398,152537,152538],{"class":408}," find_student(students, student_id):\n",[398,152540,152541,152543,152545,152548],{"class":400,"line":10174},[398,152542,32644],{"class":457},[398,152544,409],{"class":408},[398,152546,152547],{"class":513},"\"学号已存在\"",[398,152549,415],{"class":408},[398,152551,152552],{"class":400,"line":10183},[398,152553,152554],{"class":404},"        return\n",[398,152556,152557],{"class":400,"line":10189},[398,152558,2676],{"emptyLinePlaceholder":328},[398,152560,152561,152564,152566,152568,152570,152573],{"class":400,"line":10197},[398,152562,152563],{"class":408},"    name ",[398,152565,454],{"class":404},[398,152567,60798],{"class":457},[398,152569,409],{"class":408},[398,152571,152572],{"class":513},"\"请输入姓名:\"",[398,152574,415],{"class":408},[398,152576,152577,152580,152582,152585,152588],{"class":400,"line":10202},[398,152578,152579],{"class":408},"    age ",[398,152581,454],{"class":404},[398,152583,152584],{"class":408}," input_int(",[398,152586,152587],{"class":513},"\"请输入年龄:\"",[398,152589,415],{"class":408},[398,152591,152592,152595,152597,152600,152603],{"class":400,"line":16881},[398,152593,152594],{"class":408},"    score ",[398,152596,454],{"class":404},[398,152598,152599],{"class":408}," input_float(",[398,152601,152602],{"class":513},"\"请输入成绩:\"",[398,152604,415],{"class":408},[398,152606,152607],{"class":400,"line":16887},[398,152608,2676],{"emptyLinePlaceholder":328},[398,152610,152611],{"class":400,"line":16910},[398,152612,152613],{"class":408},"    students.append({\n",[398,152615,152616,152619],{"class":400,"line":16916},[398,152617,152618],{"class":513},"        \"student_id\"",[398,152620,152621],{"class":408},": student_id,\n",[398,152623,152624,152627],{"class":400,"line":16939},[398,152625,152626],{"class":513},"        \"name\"",[398,152628,152629],{"class":408},": name,\n",[398,152631,152632,152635],{"class":400,"line":16953},[398,152633,152634],{"class":513},"        \"age\"",[398,152636,152637],{"class":408},": age,\n",[398,152639,152640,152643],{"class":400,"line":16973},[398,152641,152642],{"class":513},"        \"score\"",[398,152644,152645],{"class":408},": score,\n",[398,152647,152648],{"class":400,"line":16979},[398,152649,33654],{"class":408},[398,152651,152652],{"class":400,"line":16990},[398,152653,152654],{"class":408},"    save_students(students)\n",[398,152656,152657,152659,152661,152664],{"class":400,"line":17013},[398,152658,31492],{"class":457},[398,152660,409],{"class":408},[398,152662,152663],{"class":513},"\"添加成功\"",[398,152665,415],{"class":408},[398,152667,152668],{"class":400,"line":17035},[398,152669,2676],{"emptyLinePlaceholder":328},[398,152671,152672],{"class":400,"line":17040},[398,152673,2676],{"emptyLinePlaceholder":328},[398,152675,152676,152678,152681],{"class":400,"line":17046},[398,152677,32140],{"class":404},[398,152679,152680],{"class":2239}," delete_student",[398,152682,152154],{"class":408},[398,152684,152685,152687,152689,152691,152693,152696],{"class":400,"line":17060},[398,152686,152516],{"class":408},[398,152688,454],{"class":404},[398,152690,60798],{"class":457},[398,152692,409],{"class":408},[398,152694,152695],{"class":513},"\"请输入要删除的学号:\"",[398,152697,415],{"class":408},[398,152699,152700,152703,152705],{"class":400,"line":17073},[398,152701,152702],{"class":408},"    student ",[398,152704,454],{"class":404},[398,152706,152707],{"class":408}," find_student(students, student_id)\n",[398,152709,152710],{"class":400,"line":17078},[398,152711,2676],{"emptyLinePlaceholder":328},[398,152713,152714,152716,152718,152720,152722],{"class":400,"line":17092},[398,152715,3377],{"class":404},[398,152717,152330],{"class":408},[398,152719,39120],{"class":404},[398,152721,39126],{"class":457},[398,152723,4015],{"class":408},[398,152725,152726,152728,152730,152733],{"class":400,"line":17097},[398,152727,32644],{"class":457},[398,152729,409],{"class":408},[398,152731,152732],{"class":513},"\"学生不存在\"",[398,152734,415],{"class":408},[398,152736,152737],{"class":400,"line":17103},[398,152738,152554],{"class":404},[398,152740,152741],{"class":400,"line":17108},[398,152742,2676],{"emptyLinePlaceholder":328},[398,152744,152745],{"class":400,"line":17122},[398,152746,152747],{"class":408},"    students.remove(student)\n",[398,152749,152750],{"class":400,"line":17127},[398,152751,152654],{"class":408},[398,152753,152754,152756,152758,152761],{"class":400,"line":17132},[398,152755,31492],{"class":457},[398,152757,409],{"class":408},[398,152759,152760],{"class":513},"\"删除成功\"",[398,152762,415],{"class":408},[398,152764,152765],{"class":400,"line":17146},[398,152766,2676],{"emptyLinePlaceholder":328},[398,152768,152769],{"class":400,"line":17158},[398,152770,2676],{"emptyLinePlaceholder":328},[398,152772,152773,152775,152778],{"class":400,"line":17163},[398,152774,32140],{"class":404},[398,152776,152777],{"class":2239}," update_student",[398,152779,152154],{"class":408},[398,152781,152782,152784,152786,152788,152790,152793],{"class":400,"line":17176},[398,152783,152516],{"class":408},[398,152785,454],{"class":404},[398,152787,60798],{"class":457},[398,152789,409],{"class":408},[398,152791,152792],{"class":513},"\"请输入要修改的学号:\"",[398,152794,415],{"class":408},[398,152796,152797,152799,152801],{"class":400,"line":17181},[398,152798,152702],{"class":408},[398,152800,454],{"class":404},[398,152802,152707],{"class":408},[398,152804,152805],{"class":400,"line":17186},[398,152806,2676],{"emptyLinePlaceholder":328},[398,152808,152809,152811,152813,152815,152817],{"class":400,"line":17191},[398,152810,3377],{"class":404},[398,152812,152330],{"class":408},[398,152814,39120],{"class":404},[398,152816,39126],{"class":457},[398,152818,4015],{"class":408},[398,152820,152821,152823,152825,152827],{"class":400,"line":17204},[398,152822,32644],{"class":457},[398,152824,409],{"class":408},[398,152826,152732],{"class":513},[398,152828,415],{"class":408},[398,152830,152831],{"class":400,"line":17209},[398,152832,152554],{"class":404},[398,152834,152835],{"class":400,"line":32826},[398,152836,2676],{"emptyLinePlaceholder":328},[398,152838,152839,152841,152843,152845,152847,152850],{"class":400,"line":32832},[398,152840,152563],{"class":408},[398,152842,454],{"class":404},[398,152844,60798],{"class":457},[398,152846,409],{"class":408},[398,152848,152849],{"class":513},"\"请输入新姓名:\"",[398,152851,415],{"class":408},[398,152853,152854,152856,152858,152860,152863],{"class":400,"line":32838},[398,152855,152579],{"class":408},[398,152857,454],{"class":404},[398,152859,152584],{"class":408},[398,152861,152862],{"class":513},"\"请输入新年龄:\"",[398,152864,415],{"class":408},[398,152866,152867,152869,152871,152873,152876],{"class":400,"line":32844},[398,152868,152594],{"class":408},[398,152870,454],{"class":404},[398,152872,152599],{"class":408},[398,152874,152875],{"class":513},"\"请输入新成绩:\"",[398,152877,415],{"class":408},[398,152879,152880],{"class":400,"line":32850},[398,152881,2676],{"emptyLinePlaceholder":328},[398,152883,152884,152887,152889,152891,152893],{"class":400,"line":32861},[398,152885,152886],{"class":408},"    student[",[398,152888,62872],{"class":513},[398,152890,4719],{"class":408},[398,152892,454],{"class":404},[398,152894,149988],{"class":408},[398,152896,152897,152899,152901,152903,152905],{"class":400,"line":32867},[398,152898,152886],{"class":408},[398,152900,69317],{"class":513},[398,152902,4719],{"class":408},[398,152904,454],{"class":404},[398,152906,150000],{"class":408},[398,152908,152909,152911,152913,152915,152917],{"class":400,"line":32887},[398,152910,152886],{"class":408},[398,152912,151665],{"class":513},[398,152914,4719],{"class":408},[398,152916,454],{"class":404},[398,152918,1855],{"class":408},[398,152920,152921],{"class":400,"line":32893},[398,152922,2676],{"emptyLinePlaceholder":328},[398,152924,152925],{"class":400,"line":32904},[398,152926,152654],{"class":408},[398,152928,152929,152931,152933,152936],{"class":400,"line":32910},[398,152930,31492],{"class":457},[398,152932,409],{"class":408},[398,152934,152935],{"class":513},"\"修改成功\"",[398,152937,415],{"class":408},[398,152939,152940],{"class":400,"line":32916},[398,152941,2676],{"emptyLinePlaceholder":328},[398,152943,152944],{"class":400,"line":32922},[398,152945,2676],{"emptyLinePlaceholder":328},[398,152947,152948,152950,152953],{"class":400,"line":32928},[398,152949,32140],{"class":404},[398,152951,152952],{"class":2239}," query_student",[398,152954,152154],{"class":408},[398,152956,152957,152959,152961,152963,152965,152968],{"class":400,"line":32934},[398,152958,152516],{"class":408},[398,152960,454],{"class":404},[398,152962,60798],{"class":457},[398,152964,409],{"class":408},[398,152966,152967],{"class":513},"\"请输入要查询的学号:\"",[398,152969,415],{"class":408},[398,152971,152972,152974,152976],{"class":400,"line":32940},[398,152973,152702],{"class":408},[398,152975,454],{"class":404},[398,152977,152707],{"class":408},[398,152979,152980],{"class":400,"line":32946},[398,152981,2676],{"emptyLinePlaceholder":328},[398,152983,152984,152986,152988,152990,152992],{"class":400,"line":32966},[398,152985,3377],{"class":404},[398,152987,152330],{"class":408},[398,152989,39120],{"class":404},[398,152991,39126],{"class":457},[398,152993,4015],{"class":408},[398,152995,152996,152998,153000,153002],{"class":400,"line":32972},[398,152997,32644],{"class":457},[398,152999,409],{"class":408},[398,153001,152732],{"class":513},[398,153003,415],{"class":408},[398,153005,153006],{"class":400,"line":32988},[398,153007,152554],{"class":404},[398,153009,153010],{"class":400,"line":32994},[398,153011,2676],{"emptyLinePlaceholder":328},[398,153013,153014],{"class":400,"line":33008},[398,153015,153016],{"class":408},"    print_student(student)\n",[398,153018,153019],{"class":400,"line":33014},[398,153020,2676],{"emptyLinePlaceholder":328},[398,153022,153023],{"class":400,"line":33029},[398,153024,2676],{"emptyLinePlaceholder":328},[398,153026,153027,153029,153032],{"class":400,"line":33035},[398,153028,32140],{"class":404},[398,153030,153031],{"class":2239}," print_student",[398,153033,153034],{"class":408},"(student):\n",[398,153036,153037,153039],{"class":400,"line":33044},[398,153038,31492],{"class":457},[398,153040,151632],{"class":408},[398,153042,153043,153046,153048,153050,153053,153056,153058,153061],{"class":400,"line":33050},[398,153044,153045],{"class":404},"        f",[398,153047,653],{"class":513},[398,153049,1298],{"class":457},[398,153051,153052],{"class":408},"student[",[398,153054,153055],{"class":513},"'student_id'",[398,153057,1342],{"class":408},[398,153059,153060],{"class":457},"}\\t",[398,153062,25411],{"class":513},[398,153064,153065,153067,153069,153071,153073,153076,153078,153080],{"class":400,"line":33059},[398,153066,153045],{"class":404},[398,153068,653],{"class":513},[398,153070,1298],{"class":457},[398,153072,153052],{"class":408},[398,153074,153075],{"class":513},"'name'",[398,153077,1342],{"class":408},[398,153079,153060],{"class":457},[398,153081,25411],{"class":513},[398,153083,153084,153086,153088,153090,153092,153095,153097,153099],{"class":400,"line":33065},[398,153085,153045],{"class":404},[398,153087,653],{"class":513},[398,153089,1298],{"class":457},[398,153091,153052],{"class":408},[398,153093,153094],{"class":513},"'age'",[398,153096,1342],{"class":408},[398,153098,153060],{"class":457},[398,153100,25411],{"class":513},[398,153102,153103,153105,153107,153109,153111,153114,153116,153118],{"class":400,"line":33071},[398,153104,153045],{"class":404},[398,153106,653],{"class":513},[398,153108,1298],{"class":457},[398,153110,153052],{"class":408},[398,153112,153113],{"class":513},"'score'",[398,153115,1342],{"class":408},[398,153117,1348],{"class":457},[398,153119,25411],{"class":513},[398,153121,153122],{"class":400,"line":33080},[398,153123,153124],{"class":408},"    )\n",[398,153126,153127],{"class":400,"line":33086},[398,153128,2676],{"emptyLinePlaceholder":328},[398,153130,153131],{"class":400,"line":33097},[398,153132,2676],{"emptyLinePlaceholder":328},[398,153134,153135,153137,153140],{"class":400,"line":33103},[398,153136,32140],{"class":404},[398,153138,153139],{"class":2239}," show_all_students",[398,153141,152154],{"class":408},[398,153143,153144,153146,153148],{"class":400,"line":33122},[398,153145,3377],{"class":404},[398,153147,39123],{"class":404},[398,153149,152335],{"class":408},[398,153151,153152,153154,153156,153159],{"class":400,"line":33128},[398,153153,32644],{"class":457},[398,153155,409],{"class":408},[398,153157,153158],{"class":513},"\"暂无学生\"",[398,153160,415],{"class":408},[398,153162,153163],{"class":400,"line":33139},[398,153164,152554],{"class":404},[398,153166,153167],{"class":400,"line":33145},[398,153168,2676],{"emptyLinePlaceholder":328},[398,153170,153171,153173,153175,153178,153180,153183,153185,153188,153190,153193],{"class":400,"line":33165},[398,153172,31492],{"class":457},[398,153174,409],{"class":408},[398,153176,153177],{"class":513},"\"学号",[398,153179,1506],{"class":457},[398,153181,153182],{"class":513},"姓名",[398,153184,1506],{"class":457},[398,153186,153187],{"class":513},"年龄",[398,153189,1506],{"class":457},[398,153191,153192],{"class":513},"成绩\"",[398,153194,415],{"class":408},[398,153196,153197,153199,153201,153203],{"class":400,"line":33181},[398,153198,3477],{"class":404},[398,153200,152330],{"class":408},[398,153202,26236],{"class":404},[398,153204,152335],{"class":408},[398,153206,153207],{"class":400,"line":33187},[398,153208,153209],{"class":408},"        print_student(student)\n",[398,153211,153212],{"class":400,"line":33201},[398,153213,2676],{"emptyLinePlaceholder":328},[398,153215,153216],{"class":400,"line":33207},[398,153217,2676],{"emptyLinePlaceholder":328},[398,153219,153220,153222,153224],{"class":400,"line":33213},[398,153221,32140],{"class":404},[398,153223,2249],{"class":2239},[398,153225,32146],{"class":408},[398,153227,153228,153231,153233],{"class":400,"line":33224},[398,153229,153230],{"class":408},"    students ",[398,153232,454],{"class":404},[398,153234,153235],{"class":408}," load_students()\n",[398,153237,153238],{"class":400,"line":33230},[398,153239,2676],{"emptyLinePlaceholder":328},[398,153241,153242,153244,153246],{"class":400,"line":33236},[398,153243,2527],{"class":404},[398,153245,95485],{"class":457},[398,153247,4015],{"class":408},[398,153249,153250],{"class":400,"line":33246},[398,153251,153252],{"class":408},"        show_menu()\n",[398,153254,153255,153258,153260,153262,153264,153267],{"class":400,"line":33252},[398,153256,153257],{"class":408},"        choice ",[398,153259,454],{"class":404},[398,153261,60798],{"class":457},[398,153263,409],{"class":408},[398,153265,153266],{"class":513},"\"请输入操作:\"",[398,153268,415],{"class":408},[398,153270,153271],{"class":400,"line":33263},[398,153272,2676],{"emptyLinePlaceholder":328},[398,153274,153275,153277,153280,153282,153285],{"class":400,"line":33269},[398,153276,2773],{"class":404},[398,153278,153279],{"class":408}," choice ",[398,153281,3225],{"class":404},[398,153283,153284],{"class":513}," \"1\"",[398,153286,4015],{"class":408},[398,153288,153289],{"class":400,"line":33279},[398,153290,153291],{"class":408},"            add_student(students)\n",[398,153293,153294,153297,153299,153301,153304],{"class":400,"line":33284},[398,153295,153296],{"class":404},"        elif",[398,153298,153279],{"class":408},[398,153300,3225],{"class":404},[398,153302,153303],{"class":513}," \"2\"",[398,153305,4015],{"class":408},[398,153307,153308],{"class":400,"line":33290},[398,153309,153310],{"class":408},"            delete_student(students)\n",[398,153312,153313,153315,153317,153319,153322],{"class":400,"line":33339},[398,153314,153296],{"class":404},[398,153316,153279],{"class":408},[398,153318,3225],{"class":404},[398,153320,153321],{"class":513}," \"3\"",[398,153323,4015],{"class":408},[398,153325,153326],{"class":400,"line":33386},[398,153327,153328],{"class":408},"            update_student(students)\n",[398,153330,153331,153333,153335,153337,153340],{"class":400,"line":33391},[398,153332,153296],{"class":404},[398,153334,153279],{"class":408},[398,153336,3225],{"class":404},[398,153338,153339],{"class":513}," \"4\"",[398,153341,4015],{"class":408},[398,153343,153344],{"class":400,"line":33397},[398,153345,153346],{"class":408},"            query_student(students)\n",[398,153348,153349,153351,153353,153355,153358],{"class":400,"line":33416},[398,153350,153296],{"class":404},[398,153352,153279],{"class":408},[398,153354,3225],{"class":404},[398,153356,153357],{"class":513}," \"5\"",[398,153359,4015],{"class":408},[398,153361,153362],{"class":400,"line":33422},[398,153363,153364],{"class":408},"            show_all_students(students)\n",[398,153366,153367,153369,153371,153373,153376],{"class":400,"line":33442},[398,153368,153296],{"class":404},[398,153370,153279],{"class":408},[398,153372,3225],{"class":404},[398,153374,153375],{"class":513}," \"0\"",[398,153377,4015],{"class":408},[398,153379,153380,153382,153384,153387],{"class":400,"line":33448},[398,153381,34843],{"class":457},[398,153383,409],{"class":408},[398,153385,153386],{"class":513},"\"退出系统\"",[398,153388,415],{"class":408},[398,153390,153391],{"class":400,"line":33454},[398,153392,115291],{"class":404},[398,153394,153395,153397],{"class":400,"line":33464},[398,153396,2810],{"class":404},[398,153398,4015],{"class":408},[398,153400,153401,153403,153405,153408],{"class":400,"line":33469},[398,153402,34843],{"class":457},[398,153404,409],{"class":408},[398,153406,153407],{"class":513},"\"输入错误\"",[398,153409,415],{"class":408},[398,153411,153412],{"class":400,"line":33475},[398,153413,2676],{"emptyLinePlaceholder":328},[398,153415,153416],{"class":400,"line":33491},[398,153417,2676],{"emptyLinePlaceholder":328},[398,153419,153420,153422,153424,153426,153428],{"class":400,"line":33536},[398,153421,1807],{"class":404},[398,153423,31413],{"class":457},[398,153425,101752],{"class":404},[398,153427,101755],{"class":513},[398,153429,4015],{"class":408},[398,153431,153432],{"class":400,"line":33542},[398,153433,101762],{"class":408},[19,153435,153436],{},"这个项目串联了：",[38,153438,153439,153442,153445,153448,153451,153453],{},[41,153440,153441],{},"菜单循环。",[41,153443,153444],{},"函数封装。",[41,153446,153447],{},"列表字典。",[41,153449,153450],{},"JSON 读写。",[41,153452,151920],{},[41,153454,153455,28578],{},[395,153456,153457],{},"if __name__ == \"__main__\"",[343,153459,153461],{"id":153460},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,153463,153464],{},"可以进一步拆成两个类：",[38,153466,153467,153472],{},[41,153468,153469,153471],{},[395,153470,149761],{},"：表示单个学生。",[41,153473,153474,153476],{},[395,153475,151787],{},"：负责学生增删改查和文件保存。",[19,153478,153479],{},"示意代码：",[389,153481,153483],{"className":30571,"code":153482,"language":30573,"meta":316,"style":316},"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",[395,153484,153485,153495,153499,153503,153507,153515,153522,153528,153534,153540,153544,153552,153558,153568,153578,153588,153598,153602,153606,153612,153620,153628,153636,153644,153652,153660],{"__ignoreMap":316},[398,153486,153487,153489,153491,153493],{"class":400,"line":401},[398,153488,30930],{"class":404},[398,153490,151345],{"class":408},[398,153492,30585],{"class":404},[398,153494,151350],{"class":408},[398,153496,153497],{"class":400,"line":317},[398,153498,2676],{"emptyLinePlaceholder":328},[398,153500,153501],{"class":400,"line":320},[398,153502,2676],{"emptyLinePlaceholder":328},[398,153504,153505],{"class":400,"line":1470},[398,153506,151363],{"class":2239},[398,153508,153509,153511,153513],{"class":400,"line":1476},[398,153510,14971],{"class":404},[398,153512,8175],{"class":2239},[398,153514,4015],{"class":408},[398,153516,153517,153520],{"class":400,"line":1490},[398,153518,153519],{"class":408},"    student_id: ",[398,153521,151379],{"class":457},[398,153523,153524,153526],{"class":400,"line":1496},[398,153525,151376],{"class":408},[398,153527,151379],{"class":457},[398,153529,153530,153532],{"class":400,"line":1587},[398,153531,151384],{"class":408},[398,153533,151387],{"class":457},[398,153535,153536,153538],{"class":400,"line":1593},[398,153537,151392],{"class":408},[398,153539,151395],{"class":457},[398,153541,153542],{"class":400,"line":1605},[398,153543,2676],{"emptyLinePlaceholder":328},[398,153545,153546,153548,153550],{"class":400,"line":1888},[398,153547,30994],{"class":404},[398,153549,151543],{"class":2239},[398,153551,31000],{"class":408},[398,153553,153554,153556],{"class":400,"line":1893},[398,153555,15029],{"class":404},[398,153557,15849],{"class":408},[398,153559,153560,153562,153564,153566],{"class":400,"line":1899},[398,153561,151556],{"class":513},[398,153563,51630],{"class":408},[398,153565,31016],{"class":457},[398,153567,151563],{"class":408},[398,153569,153570,153572,153574,153576],{"class":400,"line":1904},[398,153571,151568],{"class":513},[398,153573,51630],{"class":408},[398,153575,31016],{"class":457},[398,153577,151575],{"class":408},[398,153579,153580,153582,153584,153586],{"class":400,"line":1918},[398,153581,151580],{"class":513},[398,153583,51630],{"class":408},[398,153585,31016],{"class":457},[398,153587,151587],{"class":408},[398,153589,153590,153592,153594,153596],{"class":400,"line":1923},[398,153591,151592],{"class":513},[398,153593,51630],{"class":408},[398,153595,31016],{"class":457},[398,153597,151599],{"class":408},[398,153599,153600],{"class":400,"line":1929},[398,153601,2805],{"class":408},[398,153603,153604],{"class":400,"line":1950},[398,153605,2676],{"emptyLinePlaceholder":328},[398,153607,153608,153610],{"class":400,"line":1955},[398,153609,151207],{"class":2239},[398,153611,151210],{"class":457},[398,153613,153614,153616,153618],{"class":400,"line":1969},[398,153615,30994],{"class":404},[398,153617,151620],{"class":2239},[398,153619,151623],{"class":408},[398,153621,153622,153624,153626],{"class":400,"line":1974},[398,153623,15029],{"class":404},[398,153625,151227],{"class":457},[398,153627,151632],{"class":408},[398,153629,153630,153632,153634],{"class":400,"line":2003},[398,153631,151637],{"class":408},[398,153633,151640],{"class":513},[398,153635,88029],{"class":408},[398,153637,153638,153640,153642],{"class":400,"line":2008},[398,153639,151637],{"class":408},[398,153641,62872],{"class":513},[398,153643,88029],{"class":408},[398,153645,153646,153648,153650],{"class":400,"line":2025},[398,153647,151637],{"class":408},[398,153649,69317],{"class":513},[398,153651,88029],{"class":408},[398,153653,153654,153656,153658],{"class":400,"line":2030},[398,153655,151637],{"class":408},[398,153657,151665],{"class":513},[398,153659,88029],{"class":408},[398,153661,153662],{"class":400,"line":2035},[398,153663,38319],{"class":408},[19,153665,153666],{},"管理器示意：",[389,153668,153670],{"className":30571,"code":153669,"language":30573,"meta":316,"style":316},"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",[395,153671,153672,153681,153689,153700,153704,153714,153727,153738,153745,153751,153755,153764,153773,153779,153786],{"__ignoreMap":316},[398,153673,153674,153676,153679],{"class":400,"line":401},[398,153675,14971],{"class":404},[398,153677,153678],{"class":2239}," StudentManager",[398,153680,4015],{"class":408},[398,153682,153683,153685,153687],{"class":400,"line":317},[398,153684,30994],{"class":404},[398,153686,30997],{"class":457},[398,153688,31000],{"class":408},[398,153690,153691,153693,153696,153698],{"class":400,"line":320},[398,153692,31038],{"class":457},[398,153694,153695],{"class":408},".students ",[398,153697,454],{"class":404},[398,153699,52031],{"class":408},[398,153701,153702],{"class":400,"line":1470},[398,153703,2676],{"emptyLinePlaceholder":328},[398,153705,153706,153708,153711],{"class":400,"line":1476},[398,153707,30994],{"class":404},[398,153709,153710],{"class":2239}," find_by_id",[398,153712,153713],{"class":408},"(self, student_id):\n",[398,153715,153716,153718,153720,153722,153724],{"class":400,"line":1490},[398,153717,3679],{"class":404},[398,153719,152330],{"class":408},[398,153721,26236],{"class":404},[398,153723,39066],{"class":457},[398,153725,153726],{"class":408},".students:\n",[398,153728,153729,153731,153734,153736],{"class":400,"line":1496},[398,153730,4918],{"class":404},[398,153732,153733],{"class":408}," student.student_id ",[398,153735,3225],{"class":404},[398,153737,152351],{"class":408},[398,153739,153740,153743],{"class":400,"line":1587},[398,153741,153742],{"class":404},"                return",[398,153744,152358],{"class":408},[398,153746,153747,153749],{"class":400,"line":1593},[398,153748,15029],{"class":404},[398,153750,152365],{"class":457},[398,153752,153753],{"class":400,"line":1605},[398,153754,2676],{"emptyLinePlaceholder":328},[398,153756,153757,153759,153761],{"class":400,"line":1888},[398,153758,30994],{"class":404},[398,153760,5486],{"class":2239},[398,153762,153763],{"class":408},"(self, student):\n",[398,153765,153766,153768,153770],{"class":400,"line":1893},[398,153767,2773],{"class":404},[398,153769,39066],{"class":457},[398,153771,153772],{"class":408},".find_by_id(student.student_id):\n",[398,153774,153775,153777],{"class":400,"line":1899},[398,153776,16009],{"class":404},[398,153778,126000],{"class":457},[398,153780,153781,153783],{"class":400,"line":1904},[398,153782,31038],{"class":457},[398,153784,153785],{"class":408},".students.append(student)\n",[398,153787,153788,153790],{"class":400,"line":1918},[398,153789,15029],{"class":404},[398,153791,153792],{"class":457}," True\n",[19,153794,153795],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[343,153797,153799],{"id":153798},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[14,153801,153803],{"id":153802},"_1251-数据结构","12.5.1 数据结构",[389,153805,153807],{"className":30571,"code":153806,"language":30573,"meta":316,"style":316},"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",[395,153808,153809,153817,153848,153878,153907,153936],{"__ignoreMap":316},[398,153810,153811,153813,153815],{"class":400,"line":401},[398,153812,148658],{"class":408},[398,153814,454],{"class":404},[398,153816,55640],{"class":408},[398,153818,153819,153821,153823,153825,153827,153829,153832,153834,153837,153839,153841,153843,153846],{"class":400,"line":317},[398,153820,148578],{"class":408},[398,153822,148190],{"class":513},[398,153824,51630],{"class":408},[398,153826,148801],{"class":513},[398,153828,12712],{"class":408},[398,153830,153831],{"class":513},"\"category\"",[398,153833,51630],{"class":408},[398,153835,153836],{"class":513},"\"手机\"",[398,153838,12712],{"class":408},[398,153840,84277],{"class":513},[398,153842,51630],{"class":408},[398,153844,153845],{"class":457},"12000",[398,153847,5206],{"class":408},[398,153849,153850,153852,153854,153856,153858,153860,153862,153864,153867,153869,153871,153873,153876],{"class":400,"line":320},[398,153851,148578],{"class":408},[398,153853,148190],{"class":513},[398,153855,51630],{"class":408},[398,153857,148801],{"class":513},[398,153859,12712],{"class":408},[398,153861,153831],{"class":513},[398,153863,51630],{"class":408},[398,153865,153866],{"class":513},"\"电脑\"",[398,153868,12712],{"class":408},[398,153870,84277],{"class":513},[398,153872,51630],{"class":408},[398,153874,153875],{"class":457},"18000",[398,153877,5206],{"class":408},[398,153879,153880,153882,153884,153886,153888,153890,153892,153894,153896,153898,153900,153902,153905],{"class":400,"line":1470},[398,153881,148578],{"class":408},[398,153883,148190],{"class":513},[398,153885,51630],{"class":408},[398,153887,148822],{"class":513},[398,153889,12712],{"class":408},[398,153891,153831],{"class":513},[398,153893,51630],{"class":408},[398,153895,153836],{"class":513},[398,153897,12712],{"class":408},[398,153899,84277],{"class":513},[398,153901,51630],{"class":408},[398,153903,153904],{"class":457},"15000",[398,153906,5206],{"class":408},[398,153908,153909,153911,153913,153915,153917,153919,153921,153923,153925,153927,153929,153931,153934],{"class":400,"line":1476},[398,153910,148578],{"class":408},[398,153912,148190],{"class":513},[398,153914,51630],{"class":408},[398,153916,148822],{"class":513},[398,153918,12712],{"class":408},[398,153920,153831],{"class":513},[398,153922,51630],{"class":408},[398,153924,153866],{"class":513},[398,153926,12712],{"class":408},[398,153928,84277],{"class":513},[398,153930,51630],{"class":408},[398,153932,153933],{"class":457},"16000",[398,153935,5206],{"class":408},[398,153937,153938],{"class":400,"line":1490},[398,153939,33439],{"class":408},[14,153941,153943],{"id":153942},"_1252-按日期统计","12.5.2 按日期统计",[389,153945,153947],{"className":30571,"code":153946,"language":30573,"meta":316,"style":316},"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",[395,153948,153949,153958,153962,153973,153987,154000,154019,154023],{"__ignoreMap":316},[398,153950,153951,153954,153956],{"class":400,"line":401},[398,153952,153953],{"class":408},"daily_total ",[398,153955,454],{"class":404},[398,153957,88061],{"class":408},[398,153959,153960],{"class":400,"line":317},[398,153961,2676],{"emptyLinePlaceholder":328},[398,153963,153964,153966,153968,153970],{"class":400,"line":320},[398,153965,3301],{"class":404},[398,153967,148402],{"class":408},[398,153969,26236],{"class":404},[398,153971,153972],{"class":408}," sales:\n",[398,153974,153975,153978,153980,153983,153985],{"class":400,"line":1470},[398,153976,153977],{"class":408},"    date ",[398,153979,454],{"class":404},[398,153981,153982],{"class":408}," item[",[398,153984,148190],{"class":513},[398,153986,33439],{"class":408},[398,153988,153989,153992,153994,153996,153998],{"class":400,"line":1476},[398,153990,153991],{"class":408},"    amount ",[398,153993,454],{"class":404},[398,153995,153982],{"class":408},[398,153997,84277],{"class":513},[398,153999,33439],{"class":408},[398,154001,154002,154005,154007,154010,154012,154014,154016],{"class":400,"line":1490},[398,154003,154004],{"class":408},"    daily_total[date] ",[398,154006,454],{"class":404},[398,154008,154009],{"class":408}," daily_total.get(date, ",[398,154011,593],{"class":457},[398,154013,13991],{"class":408},[398,154015,883],{"class":404},[398,154017,154018],{"class":408}," amount\n",[398,154020,154021],{"class":400,"line":1496},[398,154022,2676],{"emptyLinePlaceholder":328},[398,154024,154025,154027],{"class":400,"line":1587},[398,154026,30608],{"class":457},[398,154028,154029],{"class":408},"(daily_total)\n",[14,154031,154033],{"id":154032},"_1253-按类别统计","12.5.3 按类别统计",[389,154035,154037],{"className":30571,"code":154036,"language":30573,"meta":316,"style":316},"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",[395,154038,154039,154048,154052,154062,154075,154087,154105,154109],{"__ignoreMap":316},[398,154040,154041,154044,154046],{"class":400,"line":401},[398,154042,154043],{"class":408},"category_total ",[398,154045,454],{"class":404},[398,154047,88061],{"class":408},[398,154049,154050],{"class":400,"line":317},[398,154051,2676],{"emptyLinePlaceholder":328},[398,154053,154054,154056,154058,154060],{"class":400,"line":320},[398,154055,3301],{"class":404},[398,154057,148402],{"class":408},[398,154059,26236],{"class":404},[398,154061,153972],{"class":408},[398,154063,154064,154067,154069,154071,154073],{"class":400,"line":1470},[398,154065,154066],{"class":408},"    category ",[398,154068,454],{"class":404},[398,154070,153982],{"class":408},[398,154072,153831],{"class":513},[398,154074,33439],{"class":408},[398,154076,154077,154079,154081,154083,154085],{"class":400,"line":1476},[398,154078,153991],{"class":408},[398,154080,454],{"class":404},[398,154082,153982],{"class":408},[398,154084,84277],{"class":513},[398,154086,33439],{"class":408},[398,154088,154089,154092,154094,154097,154099,154101,154103],{"class":400,"line":1490},[398,154090,154091],{"class":408},"    category_total[category] ",[398,154093,454],{"class":404},[398,154095,154096],{"class":408}," category_total.get(category, ",[398,154098,593],{"class":457},[398,154100,13991],{"class":408},[398,154102,883],{"class":404},[398,154104,154018],{"class":408},[398,154106,154107],{"class":400,"line":1496},[398,154108,2676],{"emptyLinePlaceholder":328},[398,154110,154111,154113],{"class":400,"line":1587},[398,154112,30608],{"class":457},[398,154114,154115],{"class":408},"(category_total)\n",[14,154117,154119],{"id":154118},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[389,154121,154123],{"className":30571,"code":154122,"language":30573,"meta":316,"style":316},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[395,154124,154125,154150],{"__ignoreMap":316},[398,154126,154127,154130,154132,154134,154137,154140,154143,154146,154148],{"class":400,"line":401},[398,154128,154129],{"class":408},"top_date, top_amount ",[398,154131,454],{"class":404},[398,154133,6228],{"class":457},[398,154135,154136],{"class":408},"(daily_total.items(), ",[398,154138,154139],{"class":5493},"key",[398,154141,154142],{"class":404},"=lambda",[398,154144,154145],{"class":408}," item: item[",[398,154147,619],{"class":457},[398,154149,4933],{"class":408},[398,154151,154152,154154],{"class":400,"line":317},[398,154153,30608],{"class":457},[398,154155,154156],{"class":408},"(top_date, top_amount)\n",[343,154158,154160],{"id":154159},"_126-绘制柱状图","12.6 绘制柱状图",[389,154162,154164],{"className":30571,"code":154163,"language":30573,"meta":316,"style":316},"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",[395,154165,154166,154180,154191,154195,154203,154215,154227,154238,154242,154246,154256,154267,154281,154286,154303,154320,154336,154340],{"__ignoreMap":316},[398,154167,154168,154170,154172,154174,154176,154178],{"class":400,"line":401},[398,154169,30930],{"class":404},[398,154171,147572],{"class":408},[398,154173,30585],{"class":404},[398,154175,147577],{"class":408},[398,154177,31576],{"class":404},[398,154179,147582],{"class":408},[398,154181,154182,154184,154186,154188],{"class":400,"line":317},[398,154183,30930],{"class":404},[398,154185,147431],{"class":408},[398,154187,30585],{"class":404},[398,154189,154190],{"class":408}," Bar\n",[398,154192,154193],{"class":400,"line":320},[398,154194,2676],{"emptyLinePlaceholder":328},[398,154196,154197,154199,154201],{"class":400,"line":1470},[398,154198,154043],{"class":408},[398,154200,454],{"class":404},[398,154202,15849],{"class":408},[398,154204,154205,154208,154210,154213],{"class":400,"line":1476},[398,154206,154207],{"class":513},"    \"手机\"",[398,154209,51630],{"class":408},[398,154211,154212],{"class":457},"27000",[398,154214,31659],{"class":408},[398,154216,154217,154220,154222,154225],{"class":400,"line":1490},[398,154218,154219],{"class":513},"    \"电脑\"",[398,154221,51630],{"class":408},[398,154223,154224],{"class":457},"34000",[398,154226,31659],{"class":408},[398,154228,154229,154232,154234,154236],{"class":400,"line":1496},[398,154230,154231],{"class":513},"    \"耳机\"",[398,154233,51630],{"class":408},[398,154235,124592],{"class":457},[398,154237,31659],{"class":408},[398,154239,154240],{"class":400,"line":1587},[398,154241,1841],{"class":408},[398,154243,154244],{"class":400,"line":1593},[398,154245,2676],{"emptyLinePlaceholder":328},[398,154247,154248,154251,154253],{"class":400,"line":1605},[398,154249,154250],{"class":408},"bar ",[398,154252,454],{"class":404},[398,154254,154255],{"class":408}," Bar()\n",[398,154257,154258,154261,154264],{"class":400,"line":1888},[398,154259,154260],{"class":408},"bar.add_xaxis(",[398,154262,154263],{"class":457},"list",[398,154265,154266],{"class":408},"(category_total.keys()))\n",[398,154268,154269,154272,154274,154276,154278],{"class":400,"line":1893},[398,154270,154271],{"class":408},"bar.add_yaxis(",[398,154273,147488],{"class":513},[398,154275,12712],{"class":408},[398,154277,154263],{"class":457},[398,154279,154280],{"class":408},"(category_total.values()))\n",[398,154282,154283],{"class":400,"line":1899},[398,154284,154285],{"class":408},"bar.set_global_opts(\n",[398,154287,154288,154290,154292,154294,154296,154298,154301],{"class":400,"line":1904},[398,154289,147666],{"class":5493},[398,154291,454],{"class":404},[398,154293,147671],{"class":408},[398,154295,51600],{"class":5493},[398,154297,454],{"class":404},[398,154299,154300],{"class":513},"\"品类销售额\"",[398,154302,38240],{"class":408},[398,154304,154305,154307,154309,154311,154313,154315,154318],{"class":400,"line":1918},[398,154306,147685],{"class":5493},[398,154308,454],{"class":404},[398,154310,147690],{"class":408},[398,154312,80003],{"class":5493},[398,154314,454],{"class":404},[398,154316,154317],{"class":513},"\"品类\"",[398,154319,38240],{"class":408},[398,154321,154322,154324,154326,154328,154330,154332,154334],{"class":400,"line":1923},[398,154323,147704],{"class":5493},[398,154325,454],{"class":404},[398,154327,147690],{"class":408},[398,154329,80003],{"class":5493},[398,154331,454],{"class":404},[398,154333,147488],{"class":513},[398,154335,38240],{"class":408},[398,154337,154338],{"class":400,"line":1929},[398,154339,415],{"class":408},[398,154341,154342,154345,154348],{"class":400,"line":1950},[398,154343,154344],{"class":408},"bar.render(",[398,154346,154347],{"class":513},"\"category_sales.html\"",[398,154349,415],{"class":408},[343,154351,154353],{"id":154352},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,154355,154356],{},"时间线适合展示不同日期、月份、年份的数据变化。",[389,154358,154360],{"className":30571,"code":154359,"language":30573,"meta":316,"style":316},"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",[395,154361,154362,154376,154387,154391,154399,154423,154446,154471,154475,154479,154489,154493,154504,154513,154523,154537,154568,154573,154577],{"__ignoreMap":316},[398,154363,154364,154366,154368,154370,154372,154374],{"class":400,"line":401},[398,154365,30930],{"class":404},[398,154367,147572],{"class":408},[398,154369,30585],{"class":404},[398,154371,147577],{"class":408},[398,154373,31576],{"class":404},[398,154375,147582],{"class":408},[398,154377,154378,154380,154382,154384],{"class":400,"line":317},[398,154379,30930],{"class":404},[398,154381,147431],{"class":408},[398,154383,30585],{"class":404},[398,154385,154386],{"class":408}," Bar, Timeline\n",[398,154388,154389],{"class":400,"line":320},[398,154390,2676],{"emptyLinePlaceholder":328},[398,154392,154393,154395,154397],{"class":400,"line":1470},[398,154394,101851],{"class":408},[398,154396,454],{"class":404},[398,154398,15849],{"class":408},[398,154400,154401,154404,154407,154409,154411,154413,154415,154417,154419,154421],{"class":400,"line":1476},[398,154402,154403],{"class":513},"    \"2024-10-01\"",[398,154405,154406],{"class":408},": {",[398,154408,153836],{"class":513},[398,154410,51630],{"class":408},[398,154412,153845],{"class":457},[398,154414,12712],{"class":408},[398,154416,153866],{"class":513},[398,154418,51630],{"class":408},[398,154420,153875],{"class":457},[398,154422,5206],{"class":408},[398,154424,154425,154428,154430,154432,154434,154436,154438,154440,154442,154444],{"class":400,"line":1490},[398,154426,154427],{"class":513},"    \"2024-10-02\"",[398,154429,154406],{"class":408},[398,154431,153836],{"class":513},[398,154433,51630],{"class":408},[398,154435,153904],{"class":457},[398,154437,12712],{"class":408},[398,154439,153866],{"class":513},[398,154441,51630],{"class":408},[398,154443,153933],{"class":457},[398,154445,5206],{"class":408},[398,154447,154448,154451,154453,154455,154457,154460,154462,154464,154466,154469],{"class":400,"line":1496},[398,154449,154450],{"class":513},"    \"2024-10-03\"",[398,154452,154406],{"class":408},[398,154454,153836],{"class":513},[398,154456,51630],{"class":408},[398,154458,154459],{"class":457},"17000",[398,154461,12712],{"class":408},[398,154463,153866],{"class":513},[398,154465,51630],{"class":408},[398,154467,154468],{"class":457},"19000",[398,154470,5206],{"class":408},[398,154472,154473],{"class":400,"line":1587},[398,154474,1841],{"class":408},[398,154476,154477],{"class":400,"line":1593},[398,154478,2676],{"emptyLinePlaceholder":328},[398,154480,154481,154484,154486],{"class":400,"line":1605},[398,154482,154483],{"class":408},"timeline ",[398,154485,454],{"class":404},[398,154487,154488],{"class":408}," Timeline()\n",[398,154490,154491],{"class":400,"line":1888},[398,154492,2676],{"emptyLinePlaceholder":328},[398,154494,154495,154497,154500,154502],{"class":400,"line":1893},[398,154496,3301],{"class":404},[398,154498,154499],{"class":408}," date, category_data ",[398,154501,26236],{"class":404},[398,154503,149341],{"class":408},[398,154505,154506,154509,154511],{"class":400,"line":1899},[398,154507,154508],{"class":408},"    bar ",[398,154510,454],{"class":404},[398,154512,154255],{"class":408},[398,154514,154515,154518,154520],{"class":400,"line":1904},[398,154516,154517],{"class":408},"    bar.add_xaxis(",[398,154519,154263],{"class":457},[398,154521,154522],{"class":408},"(category_data.keys()))\n",[398,154524,154525,154528,154530,154532,154534],{"class":400,"line":1918},[398,154526,154527],{"class":408},"    bar.add_yaxis(",[398,154529,147488],{"class":513},[398,154531,12712],{"class":408},[398,154533,154263],{"class":457},[398,154535,154536],{"class":408},"(category_data.values()))\n",[398,154538,154539,154542,154545,154547,154549,154551,154553,154555,154557,154559,154561,154563,154566],{"class":400,"line":1923},[398,154540,154541],{"class":408},"    bar.set_global_opts(",[398,154543,154544],{"class":5493},"title_opts",[398,154546,454],{"class":404},[398,154548,147671],{"class":408},[398,154550,51600],{"class":5493},[398,154552,454],{"class":404},[398,154554,461],{"class":404},[398,154556,653],{"class":513},[398,154558,1298],{"class":457},[398,154560,74119],{"class":408},[398,154562,1348],{"class":457},[398,154564,154565],{"class":513},"销售额\"",[398,154567,30690],{"class":408},[398,154569,154570],{"class":400,"line":1929},[398,154571,154572],{"class":408},"    timeline.add(bar, date)\n",[398,154574,154575],{"class":400,"line":1950},[398,154576,2676],{"emptyLinePlaceholder":328},[398,154578,154579,154582,154585],{"class":400,"line":1955},[398,154580,154581],{"class":408},"timeline.render(",[398,154583,154584],{"class":513},"\"timeline_sales.html\"",[398,154586,415],{"class":408},[343,154588,154590],{"id":154589},"_128-绘制地图","12.8 绘制地图",[19,154592,154593],{},"地图适合展示地区数据。",[389,154595,154597],{"className":30571,"code":154596,"language":30573,"meta":316,"style":316},"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",[395,154598,154599,154613,154624,154628,154636,154649,154661,154674,154687,154691,154695,154705,154720,154725,154742,154761,154765],{"__ignoreMap":316},[398,154600,154601,154603,154605,154607,154609,154611],{"class":400,"line":401},[398,154602,30930],{"class":404},[398,154604,147572],{"class":408},[398,154606,30585],{"class":404},[398,154608,147577],{"class":408},[398,154610,31576],{"class":404},[398,154612,147582],{"class":408},[398,154614,154615,154617,154619,154621],{"class":400,"line":317},[398,154616,30930],{"class":404},[398,154618,147431],{"class":408},[398,154620,30585],{"class":404},[398,154622,154623],{"class":408}," Map\n",[398,154625,154626],{"class":400,"line":320},[398,154627,2676],{"emptyLinePlaceholder":328},[398,154629,154630,154632,154634],{"class":400,"line":1470},[398,154631,101851],{"class":408},[398,154633,454],{"class":404},[398,154635,55640],{"class":408},[398,154637,154638,154641,154643,154645,154647],{"class":400,"line":1476},[398,154639,154640],{"class":408},"    (",[398,154642,69462],{"class":513},[398,154644,12712],{"class":408},[398,154646,1219],{"class":457},[398,154648,38240],{"class":408},[398,154650,154651,154653,154655,154657,154659],{"class":400,"line":1490},[398,154652,154640],{"class":408},[398,154654,69482],{"class":513},[398,154656,12712],{"class":408},[398,154658,147505],{"class":457},[398,154660,38240],{"class":408},[398,154662,154663,154665,154668,154670,154672],{"class":400,"line":1496},[398,154664,154640],{"class":408},[398,154666,154667],{"class":513},"\"广东\"",[398,154669,12712],{"class":408},[398,154671,1998],{"class":457},[398,154673,38240],{"class":408},[398,154675,154676,154678,154681,154683,154685],{"class":400,"line":1587},[398,154677,154640],{"class":408},[398,154679,154680],{"class":513},"\"浙江\"",[398,154682,12712],{"class":408},[398,154684,147510],{"class":457},[398,154686,38240],{"class":408},[398,154688,154689],{"class":400,"line":1593},[398,154690,33439],{"class":408},[398,154692,154693],{"class":400,"line":1605},[398,154694,2676],{"emptyLinePlaceholder":328},[398,154696,154697,154700,154702],{"class":400,"line":1888},[398,154698,154699],{"class":408},"map_chart ",[398,154701,454],{"class":404},[398,154703,154704],{"class":408}," Map()\n",[398,154706,154707,154710,154712,154715,154718],{"class":400,"line":1893},[398,154708,154709],{"class":408},"map_chart.add(",[398,154711,147488],{"class":513},[398,154713,154714],{"class":408},", data, ",[398,154716,154717],{"class":513},"\"china\"",[398,154719,415],{"class":408},[398,154721,154722],{"class":400,"line":1899},[398,154723,154724],{"class":408},"map_chart.set_global_opts(\n",[398,154726,154727,154729,154731,154733,154735,154737,154740],{"class":400,"line":1904},[398,154728,147666],{"class":5493},[398,154730,454],{"class":404},[398,154732,147671],{"class":408},[398,154734,51600],{"class":5493},[398,154736,454],{"class":404},[398,154738,154739],{"class":513},"\"地区销售额\"",[398,154741,38240],{"class":408},[398,154743,154744,154747,154749,154752,154755,154757,154759],{"class":400,"line":1918},[398,154745,154746],{"class":5493},"    visualmap_opts",[398,154748,454],{"class":404},[398,154750,154751],{"class":408},"opts.VisualMapOpts(",[398,154753,154754],{"class":5493},"max_",[398,154756,454],{"class":404},[398,154758,1998],{"class":457},[398,154760,38240],{"class":408},[398,154762,154763],{"class":400,"line":1923},[398,154764,415],{"class":408},[398,154766,154767,154770,154773],{"class":400,"line":1929},[398,154768,154769],{"class":408},"map_chart.render(",[398,154771,154772],{"class":513},"\"map_sales.html\"",[398,154774,415],{"class":408},[19,154776,154777],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[343,154779,154781],{"id":154780},"_129-项目拆分建议","12.9 项目拆分建议",[19,154783,154784],{},"当代码超过一个文件时，可以这样组织：",[389,154786,154789],{"className":154787,"code":154788,"language":5464,"meta":316},[5462],"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",[395,154790,154788],{"__ignoreMap":316},[19,154792,154793],{},"职责：",[38,154795,154796,154802,154808,154814],{},[41,154797,154798,154801],{},[395,154799,154800],{},"main.py","：程序入口。",[41,154803,154804,154807],{},[395,154805,154806],{},"file_utils.py","：读写 JSON。",[41,154809,154810,154813],{},[395,154811,154812],{},"sales_service.py","：统计销售数据。",[41,154815,154816,154819],{},[395,154817,154818],{},"chart_builder.py","：生成图表。",[343,154821,154823],{"id":154822},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,154825,154826],{},"语法基础：",[38,154828,154829,154832,154835,154838],{},[41,154830,154831],{},"会写变量、注释、输入输出。",[41,154833,154834],{},"会使用 int、float、str、bool。",[41,154836,154837],{},"会做类型转换。",[41,154839,154840],{},"会使用 f-string 格式化输出。",[19,154842,154843],{},"流程控制：",[38,154845,154846,154852,154858,154866],{},[41,154847,154848,154849,28578],{},"会写 ",[395,154850,154851],{},"if elif else",[41,154853,154848,154854,101211,154856,28578],{},[395,154855,108856],{},[395,154857,3301],{},[41,154859,154860,154861,101211,154863,28578],{},"理解 ",[395,154862,2329],{},[395,154864,154865],{},"continue",[41,154867,154868],{},"能写嵌套循环。",[19,154870,154871],{},"函数：",[38,154873,154874,154877,154880,154883],{},[41,154875,154876],{},"会定义和调用函数。",[41,154878,154879],{},"理解参数和返回值。",[41,154881,154882],{},"知道局部变量和全局变量。",[41,154884,154885],{},"会使用默认参数、关键字参数、不定长参数。",[19,154887,154888],{},"容器：",[38,154890,154891,154894,154897,154900,154903],{},[41,154892,154893],{},"会使用列表增删改查。",[41,154895,154896],{},"会遍历列表、字典。",[41,154898,154899],{},"会使用切片。",[41,154901,154902],{},"会用集合去重。",[41,154904,154905],{},"会处理列表嵌套字典。",[19,154907,154908],{},"文件和模块：",[38,154910,154911,154914,154917,154920,154923],{},[41,154912,154913],{},"会读写文本文件。",[41,154915,154916],{},"会读写 JSON。",[41,154918,154919],{},"会捕获常见异常。",[41,154921,154922],{},"会导入模块和第三方包。",[41,154924,154925],{},"会创建简单包结构。",[19,154927,154928],{},"项目能力：",[38,154930,154931,154934,154937,154940,154943],{},[41,154932,154933],{},"能把代码拆成函数。",[41,154935,154936],{},"能把数据保存到文件。",[41,154938,154939],{},"能处理用户输入错误。",[41,154941,154942],{},"能写一个完整菜单程序。",[41,154944,154945],{},"能用 pyecharts 生成图表。",[343,154947,154949],{"id":154948},"_1211-推荐练习顺序","12.11 推荐练习顺序",[38,154951,154952,154955,154958,154961,154964,154967,154970,154973],{},[41,154953,154954],{},"猜数字游戏。",[41,154956,154957],{},"ATM 菜单程序。",[41,154959,154960],{},"学生成绩统计。",[41,154962,154963],{},"学生管理系统函数版。",[41,154965,154966],{},"学生管理系统文件持久化版。",[41,154968,154969],{},"学生管理系统面向对象版。",[41,154971,154972],{},"销售数据统计。",[41,154974,154975],{},"销售数据可视化。",[343,154977,154979],{"id":154978},"_1212-常见学习误区","12.12 常见学习误区",[38,154981,154982,154985,154988,154991,154994,154997,155000],{},[41,154983,154984],{},"只看视频不敲代码。",[41,154986,154987],{},"一报错就复制错误去搜，不先读报错位置。",[41,154989,154990],{},"变量名随便写，后续自己看不懂。",[41,154992,154993],{},"所有代码都写在一个文件一个函数里。",[41,154995,154996],{},"不保存练习代码，复习时没有材料。",[41,154998,154999],{},"还没掌握列表字典就急着学框架。",[41,155001,155002],{},"不会读官方文档，只依赖教程。",[343,155004,155006],{"id":155005},"_1213-如何读报错","12.13 如何读报错",[19,155008,155009],{},"报错通常从下往上看最后几行。",[19,155011,15412],{},[389,155013,155016],{"className":155014,"code":155015,"language":5464,"meta":316},[5462],"ValueError: invalid literal for int() with base 10: 'abc'\n",[395,155017,155015],{"__ignoreMap":316},[19,155019,24877],{},[38,155021,155022,155028,155038],{},[41,155023,155024,155025,28578],{},"异常类型是 ",[395,155026,155027],{},"ValueError",[41,155029,107538,155030,155033,155034,155037],{},[395,155031,155032],{},"int()"," 无法把 ",[395,155035,155036],{},"'abc'"," 转成整数。",[41,155039,155040],{},"应该检查输入内容或增加异常处理。",[19,155042,155043],{},"再看文件名和行号：",[389,155045,155048],{"className":155046,"code":155047,"language":5464,"meta":316},[5462],"File \"main.py\", line 10, in \u003Cmodule>\n",[395,155049,155047],{"__ignoreMap":316},[19,155051,155052,155053,155055],{},"表示错误发生在 ",[395,155054,154800],{}," 第 10 行。",[343,155057,155059],{"id":155058},"_1214-后续学习方向","12.14 后续学习方向",[19,155061,155062],{},"Python 基础完成后，可以按兴趣选择方向：",[38,155064,155065,155077,155086,155098,155109,155118,155128],{},[41,155066,155067,155068,614,155071,614,155074,28578],{},"自动化办公：",[395,155069,155070],{},"openpyxl",[395,155072,155073],{},"python-docx",[395,155075,155076],{},"pdfplumber",[41,155078,155079,155080,614,155082,614,155084,28578],{},"数据分析：",[395,155081,100819],{},[395,155083,146378],{},[395,155085,146386],{},[41,155087,155088,155089,614,155092,614,155095,28578],{},"Web 后端：",[395,155090,155091],{},"Flask",[395,155093,155094],{},"FastAPI",[395,155096,155097],{},"Django",[41,155099,155100,155101,614,155103,614,155106,28578],{},"爬虫：",[395,155102,146363],{},[395,155104,155105],{},"BeautifulSoup",[395,155107,155108],{},"Scrapy",[41,155110,155111,155112,614,155114,155117],{},"测试开发：",[395,155113,146410],{},[395,155115,155116],{},"selenium","、接口测试。",[41,155119,155120,155121,614,155123,614,155125,28578],{},"人工智能：",[395,155122,100819],{},[395,155124,146378],{},[395,155126,155127],{},"pytorch",[41,155129,155130,155131,614,155133,614,155136,28578],{},"运维脚本：",[395,155132,145979],{},[395,155134,155135],{},"subprocess",[395,155137,155138],{},"paramiko",[19,155140,155141],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[343,155143,155145],{"id":155144},"_1215-结课练习","12.15 结课练习",[38,155147,155148,155151,155154,155157,155160,155163,155166,155169],{},[41,155149,155150],{},"完成函数版学生管理系统。",[41,155152,155153],{},"给学生管理系统增加 JSON 持久化。",[41,155155,155156],{},"给学生管理系统增加异常处理。",[41,155158,155159],{},"把学生管理系统改成面向对象版。",[41,155161,155162],{},"使用 pyecharts 绘制学生成绩柱状图。",[41,155164,155165],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[41,155167,155168],{},"按品类统计销售额并绘制柱状图。",[41,155170,155171],{},"写一份自己的 Python 学习路线图。",[5403,155173,155174],{},"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":316,"searchDepth":317,"depth":317,"links":155176},[155177,155178,155181,155182,155183,155189,155190,155191,155192,155193,155194,155195,155196,155197,155198],{"id":151893,"depth":317,"text":151894},{"id":151943,"depth":317,"text":151944,"children":155179},[155180],{"id":151947,"depth":320,"text":151948},{"id":151986,"depth":317,"text":151987},{"id":153460,"depth":317,"text":153461},{"id":153798,"depth":317,"text":153799,"children":155184},[155185,155186,155187,155188],{"id":153802,"depth":320,"text":153803},{"id":153942,"depth":320,"text":153943},{"id":154032,"depth":320,"text":154033},{"id":154118,"depth":320,"text":154119},{"id":154159,"depth":317,"text":154160},{"id":154352,"depth":317,"text":154353},{"id":154589,"depth":317,"text":154590},{"id":154780,"depth":317,"text":154781},{"id":154822,"depth":317,"text":154823},{"id":154948,"depth":317,"text":154949},{"id":154978,"depth":317,"text":154979},{"id":155005,"depth":317,"text":155006},{"id":155058,"depth":317,"text":155059},{"id":155144,"depth":317,"text":155145},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151885,"description":23654},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155205,"title":155206,"body":155207,"description":23654,"extension":326,"meta":157676,"navigation":328,"path":157677,"seo":157678,"stem":157679,"__hash__":157680},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155208,"toc":157651},[155209,155212,155216,155219,155222,155242,155245,155268,155271,155274,155296,155299,155321,155325,155328,155368,155371,155492,155496,155499,155539,155542,155566,155569,155573,155576,155590,155623,155626,155661,155664,155687,155690,155723,155726,155728,155734,155809,155812,155818,155835,155875,155879,155882,155928,155930,155968,155971,156006,156009,156044,156047,156079,156082,156101,156105,156109,156222,156224,156299,156303,156349,156352,156378,156387,156391,156394,156457,156465,156493,156497,156537,156602,156606,156609,156648,156651,156696,156699,156760,156764,156791,156794,156822,156825,156829,156833,156898,156901,156939,156942,156974,156978,157077,157081,157084,157157,157160,157208,157212,157218,157258,157261,157308,157311,157360,157364,157366,157380,157382,157563,157567,157594,157614,157621,157625,157642,157648],[10,155210,155206],{"id":155211},"_2-基础语法变量与字符串",[343,155213,155215],{"id":155214},"_21-注释","2.1 注释",[19,155217,155218],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,155220,155221],{},"单行注释：",[389,155223,155225],{"className":30571,"code":155224,"language":30573,"meta":316,"style":316},"# 这是单行注释\nprint(\"hello\")\n",[395,155226,155227,155232],{"__ignoreMap":316},[398,155228,155229],{"class":400,"line":401},[398,155230,155231],{"class":467},"# 这是单行注释\n",[398,155233,155234,155236,155238,155240],{"class":400,"line":317},[398,155235,30608],{"class":457},[398,155237,409],{"class":408},[398,155239,6121],{"class":513},[398,155241,415],{"class":408},[19,155243,155244],{},"多行说明常用三引号：",[389,155246,155248],{"className":30571,"code":155247,"language":30573,"meta":316,"style":316},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[395,155249,155250,155254,155259,155264],{"__ignoreMap":316},[398,155251,155252],{"class":400,"line":401},[398,155253,95891],{"class":513},[398,155255,155256],{"class":400,"line":317},[398,155257,155258],{"class":513},"这是多行说明。\n",[398,155260,155261],{"class":400,"line":320},[398,155262,155263],{"class":513},"常用于文件顶部说明、函数说明等。\n",[398,155265,155266],{"class":400,"line":1470},[398,155267,95891],{"class":513},[19,155269,155270],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,155272,155273],{},"不好：",[389,155275,155277],{"className":30571,"code":155276,"language":30573,"meta":316,"style":316},"# age 加 1\nage = age + 1\n",[395,155278,155279,155284],{"__ignoreMap":316},[398,155280,155281],{"class":400,"line":401},[398,155282,155283],{"class":467},"# age 加 1\n",[398,155285,155286,155288,155290,155292,155294],{"class":400,"line":317},[398,155287,146739],{"class":408},[398,155289,454],{"class":404},[398,155291,15984],{"class":408},[398,155293,883],{"class":404},[398,155295,55892],{"class":457},[19,155297,155298],{},"较好：",[389,155300,155302],{"className":30571,"code":155301,"language":30573,"meta":316,"style":316},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[395,155303,155304,155309],{"__ignoreMap":316},[398,155305,155306],{"class":400,"line":401},[398,155307,155308],{"class":467},"# 用户过完生日后，年龄增加一岁\n",[398,155310,155311,155313,155315,155317,155319],{"class":400,"line":317},[398,155312,146739],{"class":408},[398,155314,454],{"class":404},[398,155316,15984],{"class":408},[398,155318,883],{"class":404},[398,155320,55892],{"class":457},[343,155322,155324],{"id":155323},"_22-字面量","2.2 字面量",[19,155326,155327],{},"字面量就是代码中直接写出来的数据。",[389,155329,155331],{"className":30571,"code":155330,"language":30573,"meta":316,"style":316},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[395,155332,155333,155340,155347,155354,155361],{"__ignoreMap":316},[398,155334,155335,155337],{"class":400,"line":401},[398,155336,713],{"class":457},[398,155338,155339],{"class":467},"          # 整数\n",[398,155341,155342,155344],{"class":400,"line":317},[398,155343,458],{"class":457},[398,155345,155346],{"class":467},"         # 小数\n",[398,155348,155349,155351],{"class":400,"line":320},[398,155350,6121],{"class":513},[398,155352,155353],{"class":467},"      # 字符串\n",[398,155355,155356,155358],{"class":400,"line":1470},[398,155357,31669],{"class":457},[398,155359,155360],{"class":467},"         # 布尔值\n",[398,155362,155363,155365],{"class":400,"line":1476},[398,155364,95879],{"class":457},[398,155366,155367],{"class":467},"         # 空值\n",[19,155369,155370],{},"常见字面量类型：",[84,155372,155373,155383],{},[87,155374,155375],{},[90,155376,155377,155379,155381],{},[93,155378,24014],{},[93,155380,27685],{},[93,155382,214],{},[101,155384,155385,155396,155407,155418,155430,155442,155454,155467,155479],{},[90,155386,155387,155389,155393],{},[106,155388,412],{},[106,155390,155391],{},[395,155392,713],{},[106,155394,155395],{},"整数",[90,155397,155398,155400,155404],{},[106,155399,448],{},[106,155401,155402],{},[395,155403,458],{},[106,155405,155406],{},"浮点数",[90,155408,155409,155411,155415],{},[106,155410,1575],{},[106,155412,155413],{},[395,155414,6121],{},[106,155416,155417],{},"字符串",[90,155419,155420,155422,155428],{},[106,155421,1630],{},[106,155423,155424,614,155426],{},[395,155425,31669],{},[395,155427,34180],{},[106,155429,66208],{},[90,155431,155432,155435,155439],{},[106,155433,155434],{},"NoneType",[106,155436,155437],{},[395,155438,95879],{},[106,155440,155441],{},"空值",[90,155443,155444,155446,155451],{},[106,155445,154263],{},[106,155447,155448],{},[395,155449,155450],{},"[1, 2, 3]",[106,155452,155453],{},"列表",[90,155455,155456,155459,155464],{},[106,155457,155458],{},"tuple",[106,155460,155461],{},[395,155462,155463],{},"(1, 2, 3)",[106,155465,155466],{},"元组",[90,155468,155469,155471,155476],{},[106,155470,114739],{},[106,155472,155473],{},[395,155474,155475],{},"{\"name\": \"张三\"}",[106,155477,155478],{},"字典",[90,155480,155481,155484,155489],{},[106,155482,155483],{},"set",[106,155485,155486],{},[395,155487,155488],{},"{1, 2, 3}",[106,155490,155491],{},"集合",[343,155493,155495],{"id":155494},"_23-变量","2.3 变量",[19,155497,155498],{},"变量是保存数据的名字。",[389,155500,155502],{"className":30571,"code":155501,"language":30573,"meta":316,"style":316},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[395,155503,155504,155512,155520,155530],{"__ignoreMap":316},[398,155505,155506,155508,155510],{"class":400,"line":401},[398,155507,146729],{"class":408},[398,155509,454],{"class":404},[398,155511,149546],{"class":513},[398,155513,155514,155516,155518],{"class":400,"line":317},[398,155515,146739],{"class":408},[398,155517,454],{"class":404},[398,155519,146744],{"class":457},[398,155521,155522,155525,155527],{"class":400,"line":320},[398,155523,155524],{"class":408},"height ",[398,155526,454],{"class":404},[398,155528,155529],{"class":457}," 1.75\n",[398,155531,155532,155535,155537],{"class":400,"line":1470},[398,155533,155534],{"class":408},"is_student ",[398,155536,454],{"class":404},[398,155538,153792],{"class":457},[19,155540,155541],{},"Python 的变量不需要提前声明类型：",[389,155543,155545],{"className":30571,"code":155544,"language":30573,"meta":316,"style":316},"score = 100\nscore = \"满分\"\n",[395,155546,155547,155557],{"__ignoreMap":316},[398,155548,155549,155552,155554],{"class":400,"line":401},[398,155550,155551],{"class":408},"score ",[398,155553,454],{"class":404},[398,155555,155556],{"class":457}," 100\n",[398,155558,155559,155561,155563],{"class":400,"line":317},[398,155560,155551],{"class":408},[398,155562,454],{"class":404},[398,155564,155565],{"class":513}," \"满分\"\n",[19,155567,155568],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[343,155570,155572],{"id":155571},"_24-变量命名规则","2.4 变量命名规则",[19,155574,155575],{},"硬性规则：",[38,155577,155578,155581,155584,155587],{},[41,155579,155580],{},"只能由字母、数字、下划线组成。",[41,155582,155583],{},"不能以数字开头。",[41,155585,155586],{},"不能使用 Python 关键字。",[41,155588,155589],{},"区分大小写。",[389,155591,155593],{"className":30571,"code":155592,"language":30573,"meta":316,"style":316},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[395,155594,155595,155604,155613],{"__ignoreMap":316},[398,155596,155597,155600,155602],{"class":400,"line":401},[398,155598,155599],{"class":408},"user_name ",[398,155601,454],{"class":404},[398,155603,146734],{"class":513},[398,155605,155606,155609,155611],{"class":400,"line":317},[398,155607,155608],{"class":408},"age2 ",[398,155610,454],{"class":404},[398,155612,146744],{"class":457},[398,155614,155615,155618,155620],{"class":400,"line":320},[398,155616,155617],{"class":408},"_token ",[398,155619,454],{"class":404},[398,155621,155622],{"class":513}," \"abc\"\n",[19,155624,155625],{},"错误写法：",[389,155627,155629],{"className":30571,"code":155628,"language":30573,"meta":316,"style":316},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[395,155630,155631,155640,155652],{"__ignoreMap":316},[398,155632,155633,155636,155638],{"class":400,"line":401},[398,155634,155635],{"class":77596},"2age",[398,155637,13841],{"class":404},[398,155639,146744],{"class":457},[398,155641,155642,155644,155646,155648,155650],{"class":400,"line":317},[398,155643,131777],{"class":408},[398,155645,934],{"class":404},[398,155647,146729],{"class":408},[398,155649,454],{"class":404},[398,155651,146734],{"class":513},[398,155653,155654,155656,155658],{"class":400,"line":320},[398,155655,14971],{"class":404},[398,155657,13841],{"class":404},[398,155659,155660],{"class":513}," \"一班\"\n",[19,155662,155663],{},"查看关键字：",[389,155665,155667],{"className":30571,"code":155666,"language":30573,"meta":316,"style":316},"import keyword\n\nprint(keyword.kwlist)\n",[395,155668,155669,155676,155680],{"__ignoreMap":316},[398,155670,155671,155673],{"class":400,"line":401},[398,155672,30585],{"class":404},[398,155674,155675],{"class":408}," keyword\n",[398,155677,155678],{"class":400,"line":317},[398,155679,2676],{"emptyLinePlaceholder":328},[398,155681,155682,155684],{"class":400,"line":320},[398,155683,30608],{"class":457},[398,155685,155686],{"class":408},"(keyword.kwlist)\n",[19,155688,155689],{},"推荐命名风格：",[389,155691,155693],{"className":30571,"code":155692,"language":30573,"meta":316,"style":316},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[395,155694,155695,155704,155714],{"__ignoreMap":316},[398,155696,155697,155700,155702],{"class":400,"line":401},[398,155698,155699],{"class":408},"student_name ",[398,155701,454],{"class":404},[398,155703,149546],{"class":513},[398,155705,155706,155709,155711],{"class":400,"line":317},[398,155707,155708],{"class":408},"total_price ",[398,155710,454],{"class":404},[398,155712,155713],{"class":457}," 99.8\n",[398,155715,155716,155719,155721],{"class":400,"line":320},[398,155717,155718],{"class":408},"is_finished ",[398,155720,454],{"class":404},[398,155722,126000],{"class":457},[19,155724,155725],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[343,155727,50925],{"id":50924},[19,155729,104559,155730,155733],{},[395,155731,155732],{},"type()"," 查看数据类型：",[389,155735,155737],{"className":30571,"code":155736,"language":30573,"meta":316,"style":316},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[395,155738,155739,155753,155767,155781,155795],{"__ignoreMap":316},[398,155740,155741,155743,155745,155747,155749,155751],{"class":400,"line":401},[398,155742,30608],{"class":457},[398,155744,409],{"class":408},[398,155746,103300],{"class":457},[398,155748,409],{"class":408},[398,155750,713],{"class":457},[398,155752,30690],{"class":408},[398,155754,155755,155757,155759,155761,155763,155765],{"class":400,"line":317},[398,155756,30608],{"class":457},[398,155758,409],{"class":408},[398,155760,103300],{"class":457},[398,155762,409],{"class":408},[398,155764,458],{"class":457},[398,155766,30690],{"class":408},[398,155768,155769,155771,155773,155775,155777,155779],{"class":400,"line":320},[398,155770,30608],{"class":457},[398,155772,409],{"class":408},[398,155774,103300],{"class":457},[398,155776,409],{"class":408},[398,155778,6121],{"class":513},[398,155780,30690],{"class":408},[398,155782,155783,155785,155787,155789,155791,155793],{"class":400,"line":1470},[398,155784,30608],{"class":457},[398,155786,409],{"class":408},[398,155788,103300],{"class":457},[398,155790,409],{"class":408},[398,155792,31669],{"class":457},[398,155794,30690],{"class":408},[398,155796,155797,155799,155801,155803,155805,155807],{"class":400,"line":1476},[398,155798,30608],{"class":457},[398,155800,409],{"class":408},[398,155802,103300],{"class":457},[398,155804,409],{"class":408},[398,155806,95879],{"class":457},[398,155808,30690],{"class":408},[19,155810,155811],{},"输出类似：",[389,155813,155816],{"className":155814,"code":155815,"language":5464,"meta":316},[5462],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[395,155817,155815],{"__ignoreMap":316},[19,155819,9302,155820,107476,155822,155824,155825,155827,155828,21777,155830,155827,155832,155834],{},[395,155821,1630],{},[395,155823,412],{}," 的子类，",[395,155826,31669],{}," 可以当作 ",[395,155829,619],{},[395,155831,34180],{},[395,155833,593],{},"，但业务代码中不要滥用。",[389,155836,155838],{"className":30571,"code":155837,"language":30573,"meta":316,"style":316},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[395,155839,155840,155858],{"__ignoreMap":316},[398,155841,155842,155844,155846,155848,155850,155852,155855],{"class":400,"line":401},[398,155843,30608],{"class":457},[398,155845,409],{"class":408},[398,155847,31669],{"class":457},[398,155849,45759],{"class":404},[398,155851,25396],{"class":457},[398,155853,155854],{"class":408},")   ",[398,155856,155857],{"class":467},"# 2\n",[398,155859,155860,155862,155864,155866,155868,155870,155872],{"class":400,"line":317},[398,155861,30608],{"class":457},[398,155863,409],{"class":408},[398,155865,34180],{"class":457},[398,155867,45759],{"class":404},[398,155869,25396],{"class":457},[398,155871,46001],{"class":408},[398,155873,155874],{"class":467},"# 1\n",[343,155876,155878],{"id":155877},"_26-类型转换","2.6 类型转换",[19,155880,155881],{},"常用转换函数：",[389,155883,155885],{"className":30571,"code":155884,"language":30573,"meta":316,"style":316},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[395,155886,155887,155897,155908,155918],{"__ignoreMap":316},[398,155888,155889,155891,155893,155895],{"class":400,"line":401},[398,155890,412],{"class":457},[398,155892,409],{"class":408},[398,155894,54509],{"class":513},[398,155896,415],{"class":408},[398,155898,155899,155901,155903,155906],{"class":400,"line":317},[398,155900,448],{"class":457},[398,155902,409],{"class":408},[398,155904,155905],{"class":513},"\"3.14\"",[398,155907,415],{"class":408},[398,155909,155910,155912,155914,155916],{"class":400,"line":320},[398,155911,1575],{"class":457},[398,155913,409],{"class":408},[398,155915,713],{"class":457},[398,155917,415],{"class":408},[398,155919,155920,155922,155924,155926],{"class":400,"line":1470},[398,155921,1630],{"class":457},[398,155923,409],{"class":408},[398,155925,619],{"class":457},[398,155927,415],{"class":408},[19,155929,15412],{},[389,155931,155933],{"className":30571,"code":155932,"language":30573,"meta":316,"style":316},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[395,155934,155935,155944,155955],{"__ignoreMap":316},[398,155936,155937,155939,155941],{"class":400,"line":401},[398,155938,146739],{"class":408},[398,155940,454],{"class":404},[398,155942,155943],{"class":513}," \"18\"\n",[398,155945,155946,155948,155950,155952],{"class":400,"line":317},[398,155947,146739],{"class":408},[398,155949,454],{"class":404},[398,155951,2658],{"class":457},[398,155953,155954],{"class":408},"(age)\n",[398,155956,155957,155959,155962,155964,155966],{"class":400,"line":320},[398,155958,30608],{"class":457},[398,155960,155961],{"class":408},"(age ",[398,155963,883],{"class":404},[398,155965,25396],{"class":457},[398,155967,415],{"class":408},[19,155969,155970],{},"输入得到的内容永远是字符串：",[389,155972,155974],{"className":30571,"code":155973,"language":30573,"meta":316,"style":316},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[395,155975,155976,155992],{"__ignoreMap":316},[398,155977,155978,155981,155983,155985,155987,155990],{"class":400,"line":401},[398,155979,155980],{"class":408},"num ",[398,155982,454],{"class":404},[398,155984,60798],{"class":457},[398,155986,409],{"class":408},[398,155988,155989],{"class":513},"\"请输入数字:\"",[398,155991,415],{"class":408},[398,155993,155994,155996,155998,156000,156003],{"class":400,"line":317},[398,155995,30608],{"class":457},[398,155997,409],{"class":408},[398,155999,103300],{"class":457},[398,156001,156002],{"class":408},"(num))  ",[398,156004,156005],{"class":467},"# str\n",[19,156007,156008],{},"如果要做数学运算，必须转换：",[389,156010,156012],{"className":30571,"code":156011,"language":30573,"meta":316,"style":316},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[395,156013,156014,156032],{"__ignoreMap":316},[398,156015,156016,156018,156020,156022,156024,156026,156028,156030],{"class":400,"line":401},[398,156017,155980],{"class":408},[398,156019,454],{"class":404},[398,156021,2658],{"class":457},[398,156023,409],{"class":408},[398,156025,54014],{"class":457},[398,156027,409],{"class":408},[398,156029,155989],{"class":513},[398,156031,30690],{"class":408},[398,156033,156034,156036,156038,156040,156042],{"class":400,"line":317},[398,156035,30608],{"class":457},[398,156037,45812],{"class":408},[398,156039,883],{"class":404},[398,156041,2314],{"class":457},[398,156043,415],{"class":408},[19,156045,156046],{},"常见错误：",[389,156048,156050],{"className":30571,"code":156049,"language":30573,"meta":316,"style":316},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[395,156051,156052,156065],{"__ignoreMap":316},[398,156053,156054,156056,156058,156060,156062],{"class":400,"line":401},[398,156055,412],{"class":457},[398,156057,409],{"class":408},[398,156059,155905],{"class":513},[398,156061,155854],{"class":408},[398,156063,156064],{"class":467},"# 错误\n",[398,156066,156067,156069,156071,156074,156077],{"class":400,"line":317},[398,156068,412],{"class":457},[398,156070,409],{"class":408},[398,156072,156073],{"class":513},"\"abc\"",[398,156075,156076],{"class":408},")    ",[398,156078,156064],{"class":467},[19,156080,156081],{},"正确写法：",[389,156083,156085],{"className":30571,"code":156084,"language":30573,"meta":316,"style":316},"num = float(\"3.14\")\n",[395,156086,156087],{"__ignoreMap":316},[398,156088,156089,156091,156093,156095,156097,156099],{"class":400,"line":401},[398,156090,155980],{"class":408},[398,156092,454],{"class":404},[398,156094,109990],{"class":457},[398,156096,409],{"class":408},[398,156098,155905],{"class":513},[398,156100,415],{"class":408},[343,156102,156104],{"id":156103},"_27-运算符","2.7 运算符",[14,156106,156108],{"id":156107},"_271-算术运算符","2.7.1 算术运算符",[84,156110,156111,156122],{},[87,156112,156113],{},[90,156114,156115,156118,156120],{},[93,156116,156117],{},"运算符",[93,156119,214],{},[93,156121,27685],{},[101,156123,156124,156138,156152,156166,156180,156194,156208],{},[90,156125,156126,156130,156133],{},[106,156127,156128],{},[395,156129,883],{},[106,156131,156132],{},"加法",[106,156134,156135],{},[395,156136,156137],{},"1 + 2",[90,156139,156140,156144,156147],{},[106,156141,156142],{},[395,156143,934],{},[106,156145,156146],{},"减法",[106,156148,156149],{},[395,156150,156151],{},"5 - 3",[90,156153,156154,156158,156161],{},[106,156155,156156],{},[395,156157,857],{},[106,156159,156160],{},"乘法",[106,156162,156163],{},[395,156164,156165],{},"2 * 3",[90,156167,156168,156172,156175],{},[106,156169,156170],{},[395,156171,986],{},[106,156173,156174],{},"除法，结果是浮点数",[106,156176,156177],{},[395,156178,156179],{},"5 \u002F 2",[90,156181,156182,156186,156189],{},[106,156183,156184],{},[395,156185,33522],{},[106,156187,156188],{},"整除",[106,156190,156191],{},[395,156192,156193],{},"5 \u002F\u002F 2",[90,156195,156196,156200,156203],{},[106,156197,156198],{},[395,156199,730],{},[106,156201,156202],{},"取余",[106,156204,156205],{},[395,156206,156207],{},"5 % 2",[90,156209,156210,156214,156217],{},[106,156211,156212],{},[395,156213,10938],{},[106,156215,156216],{},"幂运算",[106,156218,156219],{},[395,156220,156221],{},"2 ** 3",[19,156223,15412],{},[389,156225,156227],{"className":30571,"code":156226,"language":30573,"meta":316,"style":316},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[395,156228,156229,156247,156264,156281],{"__ignoreMap":316},[398,156230,156231,156233,156235,156237,156240,156242,156244],{"class":400,"line":401},[398,156232,30608],{"class":457},[398,156234,409],{"class":408},[398,156236,721],{"class":457},[398,156238,156239],{"class":404}," \u002F",[398,156241,15032],{"class":457},[398,156243,155854],{"class":408},[398,156245,156246],{"class":467},"# 2.5\n",[398,156248,156249,156251,156253,156255,156258,156260,156262],{"class":400,"line":317},[398,156250,30608],{"class":457},[398,156252,409],{"class":408},[398,156254,721],{"class":457},[398,156256,156257],{"class":404}," \u002F\u002F",[398,156259,15032],{"class":457},[398,156261,46001],{"class":408},[398,156263,155857],{"class":467},[398,156265,156266,156268,156270,156272,156275,156277,156279],{"class":400,"line":320},[398,156267,30608],{"class":457},[398,156269,409],{"class":408},[398,156271,721],{"class":457},[398,156273,156274],{"class":404}," %",[398,156276,15032],{"class":457},[398,156278,155854],{"class":408},[398,156280,155874],{"class":467},[398,156282,156283,156285,156287,156289,156292,156294,156296],{"class":400,"line":1470},[398,156284,30608],{"class":457},[398,156286,409],{"class":408},[398,156288,486],{"class":457},[398,156290,156291],{"class":404}," **",[398,156293,78263],{"class":457},[398,156295,46001],{"class":408},[398,156297,156298],{"class":467},"# 8\n",[14,156300,156302],{"id":156301},"_272-赋值运算符","2.7.2 赋值运算符",[389,156304,156306],{"className":30571,"code":156305,"language":30573,"meta":316,"style":316},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[395,156307,156308,156316,156324,156332,156340],{"__ignoreMap":316},[398,156309,156310,156312,156314],{"class":400,"line":401},[398,156311,155980],{"class":408},[398,156313,454],{"class":404},[398,156315,58621],{"class":457},[398,156317,156318,156320,156322],{"class":400,"line":317},[398,156319,155980],{"class":408},[398,156321,9754],{"class":404},[398,156323,54620],{"class":457},[398,156325,156326,156328,156330],{"class":400,"line":320},[398,156327,155980],{"class":408},[398,156329,150445],{"class":404},[398,156331,47916],{"class":457},[398,156333,156334,156336,156338],{"class":400,"line":1470},[398,156335,155980],{"class":408},[398,156337,137341],{"class":404},[398,156339,120229],{"class":457},[398,156341,156342,156344,156347],{"class":400,"line":1476},[398,156343,155980],{"class":408},[398,156345,156346],{"class":404},"\u002F=",[398,156348,47916],{"class":457},[19,156350,156351],{},"等价关系：",[389,156353,156355],{"className":30571,"code":156354,"language":30573,"meta":316,"style":316},"num += 1\nnum = num + 1\n",[395,156356,156357,156365],{"__ignoreMap":316},[398,156358,156359,156361,156363],{"class":400,"line":401},[398,156360,155980],{"class":408},[398,156362,9754],{"class":404},[398,156364,55892],{"class":457},[398,156366,156367,156369,156371,156374,156376],{"class":400,"line":317},[398,156368,155980],{"class":408},[398,156370,454],{"class":404},[398,156372,156373],{"class":408}," num ",[398,156375,883],{"class":404},[398,156377,55892],{"class":457},[19,156379,156380,156381,101211,156384,28578],{},"Python 没有 ",[395,156382,156383],{},"num++",[395,156385,156386],{},"num--",[14,156388,156390],{"id":156389},"_273-比较运算符","2.7.3 比较运算符",[19,156392,156393],{},"比较运算结果是布尔值。",[389,156395,156397],{"className":30571,"code":156396,"language":30573,"meta":316,"style":316},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[395,156398,156399,156413,156428,156442],{"__ignoreMap":316},[398,156400,156401,156403,156405,156407,156409,156411],{"class":400,"line":401},[398,156402,30608],{"class":457},[398,156404,409],{"class":408},[398,156406,848],{"class":457},[398,156408,26415],{"class":404},[398,156410,2424],{"class":457},[398,156412,415],{"class":408},[398,156414,156415,156417,156419,156421,156424,156426],{"class":400,"line":317},[398,156416,30608],{"class":457},[398,156418,409],{"class":408},[398,156420,848],{"class":457},[398,156422,156423],{"class":404}," >=",[398,156425,2314],{"class":457},[398,156427,415],{"class":408},[398,156429,156430,156432,156434,156436,156438,156440],{"class":400,"line":320},[398,156431,30608],{"class":457},[398,156433,409],{"class":408},[398,156435,848],{"class":457},[398,156437,101752],{"class":404},[398,156439,2359],{"class":457},[398,156441,415],{"class":408},[398,156443,156444,156446,156448,156450,156453,156455],{"class":400,"line":1470},[398,156445,30608],{"class":457},[398,156447,409],{"class":408},[398,156449,848],{"class":457},[398,156451,156452],{"class":404}," !=",[398,156454,2359],{"class":457},[398,156456,415],{"class":408},[19,156458,156459,156460,156462,156463,28578],{},"注意：判断相等用 ",[395,156461,3225],{},"，赋值用 ",[395,156464,454],{},[389,156466,156468],{"className":30571,"code":156467,"language":30573,"meta":316,"style":316},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[395,156469,156470,156482],{"__ignoreMap":316},[398,156471,156472,156474,156476,156479],{"class":400,"line":401},[398,156473,146739],{"class":408},[398,156475,454],{"class":404},[398,156477,156478],{"class":457}," 18",[398,156480,156481],{"class":467},"       # 赋值\n",[398,156483,156484,156486,156488,156490],{"class":400,"line":317},[398,156485,146739],{"class":408},[398,156487,3225],{"class":404},[398,156489,156478],{"class":457},[398,156491,156492],{"class":467},"      # 判断是否相等\n",[14,156494,156496],{"id":156495},"_274-逻辑运算符","2.7.4 逻辑运算符",[84,156498,156499,156507],{},[87,156500,156501],{},[90,156502,156503,156505],{},[93,156504,156117],{},[93,156506,214],{},[101,156508,156509,156518,156527],{},[90,156510,156511,156515],{},[106,156512,156513],{},[395,156514,30655],{},[106,156516,156517],{},"并且",[90,156519,156520,156524],{},[106,156521,156522],{},[395,156523,115283],{},[106,156525,156526],{},"或者",[90,156528,156529,156534],{},[106,156530,156531],{},[395,156532,156533],{},"not",[106,156535,156536],{},"取反",[389,156538,156540],{"className":30571,"code":156539,"language":30573,"meta":316,"style":316},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[395,156541,156542,156550,156559,156563,156578,156592],{"__ignoreMap":316},[398,156543,156544,156546,156548],{"class":400,"line":401},[398,156545,146739],{"class":408},[398,156547,454],{"class":404},[398,156549,88258],{"class":457},[398,156551,156552,156555,156557],{"class":400,"line":317},[398,156553,156554],{"class":408},"has_ticket ",[398,156556,454],{"class":404},[398,156558,153792],{"class":457},[398,156560,156561],{"class":400,"line":320},[398,156562,2676],{"emptyLinePlaceholder":328},[398,156564,156565,156567,156569,156571,156573,156575],{"class":400,"line":1470},[398,156566,30608],{"class":457},[398,156568,155961],{"class":408},[398,156570,1986],{"class":404},[398,156572,156478],{"class":457},[398,156574,120622],{"class":404},[398,156576,156577],{"class":408}," has_ticket)\n",[398,156579,156580,156582,156584,156586,156588,156590],{"class":400,"line":1476},[398,156581,30608],{"class":457},[398,156583,155961],{"class":408},[398,156585,1312],{"class":404},[398,156587,156478],{"class":457},[398,156589,114394],{"class":404},[398,156591,156577],{"class":408},[398,156593,156594,156596,156598,156600],{"class":400,"line":1490},[398,156595,30608],{"class":457},[398,156597,409],{"class":408},[398,156599,156533],{"class":404},[398,156601,156577],{"class":408},[343,156603,156605],{"id":156604},"_28-字符串定义","2.8 字符串定义",[19,156607,156608],{},"三种常见写法：",[389,156610,156612],{"className":30571,"code":156611,"language":30573,"meta":316,"style":316},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[395,156613,156614,156624,156633,156643],{"__ignoreMap":316},[398,156615,156616,156619,156621],{"class":400,"line":401},[398,156617,156618],{"class":408},"name1 ",[398,156620,454],{"class":404},[398,156622,156623],{"class":513}," '小明'\n",[398,156625,156626,156629,156631],{"class":400,"line":317},[398,156627,156628],{"class":408},"name2 ",[398,156630,454],{"class":404},[398,156632,149546],{"class":513},[398,156634,156635,156638,156640],{"class":400,"line":320},[398,156636,156637],{"class":408},"text ",[398,156639,454],{"class":404},[398,156641,156642],{"class":513}," \"\"\"这是多行字符串\n",[398,156644,156645],{"class":400,"line":1470},[398,156646,156647],{"class":513},"可以换行\"\"\"\n",[19,156649,156650],{},"字符串中包含引号：",[389,156652,156654],{"className":30571,"code":156653,"language":30573,"meta":316,"style":316},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[395,156655,156656,156666,156676],{"__ignoreMap":316},[398,156657,156658,156661,156663],{"class":400,"line":401},[398,156659,156660],{"class":408},"msg ",[398,156662,454],{"class":404},[398,156664,156665],{"class":513}," \"他说:'你好'\"\n",[398,156667,156668,156671,156673],{"class":400,"line":317},[398,156669,156670],{"class":408},"msg2 ",[398,156672,454],{"class":404},[398,156674,156675],{"class":513}," '他说:\"你好\"'\n",[398,156677,156678,156681,156683,156686,156689,156692,156694],{"class":400,"line":320},[398,156679,156680],{"class":408},"msg3 ",[398,156682,454],{"class":404},[398,156684,156685],{"class":513}," \"他说:",[398,156687,156688],{"class":457},"\\\"",[398,156690,156691],{"class":513},"你好",[398,156693,156688],{"class":457},[398,156695,25411],{"class":513},[19,156697,156698],{},"常见转义字符：",[84,156700,156701,156710],{},[87,156702,156703],{},[90,156704,156705,156708],{},[93,156706,156707],{},"写法",[93,156709,100893],{},[101,156711,156712,156722,156731,156741,156750],{},[90,156713,156714,156719],{},[106,156715,156716],{},[395,156717,156718],{},"\\n",[106,156720,156721],{},"换行",[90,156723,156724,156728],{},[106,156725,156726],{},[395,156727,1506],{},[106,156729,156730],{},"制表符",[90,156732,156733,156738],{},[106,156734,156735],{},[395,156736,156737],{},"\\\\",[106,156739,156740],{},"反斜杠",[90,156742,156743,156747],{},[106,156744,156745],{},[395,156746,156688],{},[106,156748,156749],{},"双引号",[90,156751,156752,156757],{},[106,156753,156754],{},[395,156755,156756],{},"\\'",[106,156758,156759],{},"单引号",[343,156761,156763],{"id":156762},"_29-字符串拼接","2.9 字符串拼接",[389,156765,156767],{"className":30571,"code":156766,"language":30573,"meta":316,"style":316},"name = \"小明\"\nprint(\"你好，\" + name)\n",[395,156768,156769,156777],{"__ignoreMap":316},[398,156770,156771,156773,156775],{"class":400,"line":401},[398,156772,146729],{"class":408},[398,156774,454],{"class":404},[398,156776,149546],{"class":513},[398,156778,156779,156781,156783,156786,156788],{"class":400,"line":317},[398,156780,30608],{"class":457},[398,156782,409],{"class":408},[398,156784,156785],{"class":513},"\"你好，\"",[398,156787,45759],{"class":404},[398,156789,156790],{"class":408}," name)\n",[19,156792,156793],{},"字符串只能和字符串拼接：",[389,156795,156797],{"className":30571,"code":156796,"language":30573,"meta":316,"style":316},"age = 18\nprint(\"年龄:\" + str(age))\n",[395,156798,156799,156807],{"__ignoreMap":316},[398,156800,156801,156803,156805],{"class":400,"line":401},[398,156802,146739],{"class":408},[398,156804,454],{"class":404},[398,156806,146744],{"class":457},[398,156808,156809,156811,156813,156815,156817,156819],{"class":400,"line":317},[398,156810,30608],{"class":457},[398,156812,409],{"class":408},[398,156814,146710],{"class":513},[398,156816,45759],{"class":404},[398,156818,74112],{"class":457},[398,156820,156821],{"class":408},"(age))\n",[19,156823,156824],{},"更推荐使用格式化字符串。",[343,156826,156828],{"id":156827},"_210-字符串格式化","2.10 字符串格式化",[14,156830,156832],{"id":156831},"_2101-百分号格式化","2.10.1 百分号格式化",[389,156834,156836],{"className":30571,"code":156835,"language":30573,"meta":316,"style":316},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[395,156837,156838,156846,156854,156863,156867],{"__ignoreMap":316},[398,156839,156840,156842,156844],{"class":400,"line":401},[398,156841,146729],{"class":408},[398,156843,454],{"class":404},[398,156845,149546],{"class":513},[398,156847,156848,156850,156852],{"class":400,"line":317},[398,156849,146739],{"class":408},[398,156851,454],{"class":404},[398,156853,146744],{"class":457},[398,156855,156856,156858,156860],{"class":400,"line":320},[398,156857,155551],{"class":408},[398,156859,454],{"class":404},[398,156861,156862],{"class":457}," 95.5\n",[398,156864,156865],{"class":400,"line":1470},[398,156866,2676],{"emptyLinePlaceholder":328},[398,156868,156869,156871,156873,156876,156879,156882,156885,156888,156891,156893,156895],{"class":400,"line":1476},[398,156870,30608],{"class":457},[398,156872,409],{"class":408},[398,156874,156875],{"class":513},"\"姓名:",[398,156877,156878],{"class":457},"%s",[398,156880,156881],{"class":513}," 年龄:",[398,156883,156884],{"class":457},"%d",[398,156886,156887],{"class":513}," 分数:",[398,156889,156890],{"class":457},"%.1f",[398,156892,653],{"class":513},[398,156894,156274],{"class":404},[398,156896,156897],{"class":408}," (name, age, score))\n",[19,156899,156900],{},"常用占位符：",[84,156902,156903,156912],{},[87,156904,156905],{},[90,156906,156907,156910],{},[93,156908,156909],{},"占位符",[93,156911,214],{},[101,156913,156914,156922,156930],{},[90,156915,156916,156920],{},[106,156917,156918],{},[395,156919,156878],{},[106,156921,155417],{},[90,156923,156924,156928],{},[106,156925,156926],{},[395,156927,156884],{},[106,156929,155395],{},[90,156931,156932,156937],{},[106,156933,156934],{},[395,156935,156936],{},"%f",[106,156938,155406],{},[19,156940,156941],{},"精度控制：",[389,156943,156945],{"className":30571,"code":156944,"language":30573,"meta":316,"style":316},"price = 12.3456\nprint(\"%.2f\" % price)\n",[395,156946,156947,156956],{"__ignoreMap":316},[398,156948,156949,156951,156953],{"class":400,"line":401},[398,156950,146874],{"class":408},[398,156952,454],{"class":404},[398,156954,156955],{"class":457}," 12.3456\n",[398,156957,156958,156960,156962,156964,156967,156969,156971],{"class":400,"line":317},[398,156959,30608],{"class":457},[398,156961,409],{"class":408},[398,156963,653],{"class":513},[398,156965,156966],{"class":457},"%.2f",[398,156968,653],{"class":513},[398,156970,156274],{"class":404},[398,156972,156973],{"class":408}," price)\n",[14,156975,156977],{"id":156976},"_2102-format方法","2.10.2 format方法",[389,156979,156981],{"className":30571,"code":156980,"language":30573,"meta":316,"style":316},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[395,156982,156983,156991,156999,157003,157022,157042],{"__ignoreMap":316},[398,156984,156985,156987,156989],{"class":400,"line":401},[398,156986,146729],{"class":408},[398,156988,454],{"class":404},[398,156990,149546],{"class":513},[398,156992,156993,156995,156997],{"class":400,"line":317},[398,156994,146739],{"class":408},[398,156996,454],{"class":404},[398,156998,146744],{"class":457},[398,157000,157001],{"class":400,"line":320},[398,157002,2676],{"emptyLinePlaceholder":328},[398,157004,157005,157007,157009,157011,157013,157015,157017,157019],{"class":400,"line":1470},[398,157006,30608],{"class":457},[398,157008,409],{"class":408},[398,157010,156875],{"class":513},[398,157012,32652],{"class":457},[398,157014,156881],{"class":513},[398,157016,32652],{"class":457},[398,157018,653],{"class":513},[398,157020,157021],{"class":408},".format(name, age))\n",[398,157023,157024,157026,157028,157030,157033,157035,157038,157040],{"class":400,"line":1476},[398,157025,30608],{"class":457},[398,157027,409],{"class":408},[398,157029,156875],{"class":513},[398,157031,157032],{"class":457},"{0}",[398,157034,156881],{"class":513},[398,157036,157037],{"class":457},"{1}",[398,157039,653],{"class":513},[398,157041,157021],{"class":408},[398,157043,157044,157046,157048,157050,157053,157055,157058,157060,157063,157065,157067,157070,157072,157074],{"class":400,"line":1490},[398,157045,30608],{"class":457},[398,157047,409],{"class":408},[398,157049,156875],{"class":513},[398,157051,157052],{"class":457},"{name}",[398,157054,156881],{"class":513},[398,157056,157057],{"class":457},"{age}",[398,157059,653],{"class":513},[398,157061,157062],{"class":408},".format(",[398,157064,80003],{"class":5493},[398,157066,454],{"class":404},[398,157068,157069],{"class":408},"name, ",[398,157071,70414],{"class":5493},[398,157073,454],{"class":404},[398,157075,157076],{"class":408},"age))\n",[14,157078,157080],{"id":157079},"_2103-f-string","2.10.3 f-string",[19,157082,157083],{},"推荐写法：",[389,157085,157087],{"className":30571,"code":157086,"language":30573,"meta":316,"style":316},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[395,157088,157089,157097,157105,157113,157117],{"__ignoreMap":316},[398,157090,157091,157093,157095],{"class":400,"line":401},[398,157092,146729],{"class":408},[398,157094,454],{"class":404},[398,157096,149546],{"class":513},[398,157098,157099,157101,157103],{"class":400,"line":317},[398,157100,146739],{"class":408},[398,157102,454],{"class":404},[398,157104,146744],{"class":457},[398,157106,157107,157109,157111],{"class":400,"line":320},[398,157108,155551],{"class":408},[398,157110,454],{"class":404},[398,157112,156862],{"class":457},[398,157114,157115],{"class":400,"line":1470},[398,157116,2676],{"emptyLinePlaceholder":328},[398,157118,157119,157121,157123,157125,157127,157129,157131,157133,157135,157137,157139,157141,157143,157145,157148,157151,157153,157155],{"class":400,"line":1476},[398,157120,30608],{"class":457},[398,157122,409],{"class":408},[398,157124,461],{"class":404},[398,157126,156875],{"class":513},[398,157128,1298],{"class":457},[398,157130,80003],{"class":408},[398,157132,1348],{"class":457},[398,157134,156881],{"class":513},[398,157136,1298],{"class":457},[398,157138,70414],{"class":408},[398,157140,1348],{"class":457},[398,157142,156887],{"class":513},[398,157144,1298],{"class":457},[398,157146,157147],{"class":408},"score",[398,157149,157150],{"class":404},":.1f",[398,157152,1348],{"class":457},[398,157154,653],{"class":513},[398,157156,415],{"class":408},[19,157158,157159],{},"表达式也可以放进去：",[389,157161,157163],{"className":30571,"code":157162,"language":30573,"meta":316,"style":316},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[395,157164,157165,157173,157181],{"__ignoreMap":316},[398,157166,157167,157169,157171],{"class":400,"line":401},[398,157168,146874],{"class":408},[398,157170,454],{"class":404},[398,157172,146879],{"class":457},[398,157174,157175,157177,157179],{"class":400,"line":317},[398,157176,146884],{"class":408},[398,157178,454],{"class":404},[398,157180,54620],{"class":457},[398,157182,157183,157185,157187,157189,157192,157194,157196,157198,157201,157203,157206],{"class":400,"line":320},[398,157184,30608],{"class":457},[398,157186,409],{"class":408},[398,157188,461],{"class":404},[398,157190,157191],{"class":513},"\"总价:",[398,157193,1298],{"class":457},[398,157195,146874],{"class":408},[398,157197,857],{"class":404},[398,157199,157200],{"class":408}," count",[398,157202,1348],{"class":457},[398,157204,157205],{"class":513},"元\"",[398,157207,415],{"class":408},[343,157209,157211],{"id":157210},"_211-input输入","2.11 input输入",[19,157213,157214,157217],{},[395,157215,157216],{},"input()"," 会暂停程序，等待用户输入。",[389,157219,157221],{"className":30571,"code":157220,"language":30573,"meta":316,"style":316},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[395,157222,157223,157237],{"__ignoreMap":316},[398,157224,157225,157227,157229,157231,157233,157235],{"class":400,"line":401},[398,157226,146729],{"class":408},[398,157228,454],{"class":404},[398,157230,60798],{"class":457},[398,157232,409],{"class":408},[398,157234,152572],{"class":513},[398,157236,415],{"class":408},[398,157238,157239,157241,157243,157245,157248,157250,157252,157254,157256],{"class":400,"line":317},[398,157240,30608],{"class":457},[398,157242,409],{"class":408},[398,157244,461],{"class":404},[398,157246,157247],{"class":513},"\"你好，",[398,157249,1298],{"class":457},[398,157251,80003],{"class":408},[398,157253,1348],{"class":457},[398,157255,653],{"class":513},[398,157257,415],{"class":408},[19,157259,157260],{},"输入整数：",[389,157262,157264],{"className":30571,"code":157263,"language":30573,"meta":316,"style":316},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[395,157265,157266,157284],{"__ignoreMap":316},[398,157267,157268,157270,157272,157274,157276,157278,157280,157282],{"class":400,"line":401},[398,157269,146739],{"class":408},[398,157271,454],{"class":404},[398,157273,2658],{"class":457},[398,157275,409],{"class":408},[398,157277,54014],{"class":457},[398,157279,409],{"class":408},[398,157281,152587],{"class":513},[398,157283,30690],{"class":408},[398,157285,157286,157288,157290,157292,157295,157297,157299,157301,157304,157306],{"class":400,"line":317},[398,157287,30608],{"class":457},[398,157289,409],{"class":408},[398,157291,461],{"class":404},[398,157293,157294],{"class":513},"\"明年你",[398,157296,1298],{"class":457},[398,157298,146739],{"class":408},[398,157300,883],{"class":404},[398,157302,157303],{"class":457}," 1}",[398,157305,149597],{"class":513},[398,157307,415],{"class":408},[19,157309,157310],{},"输入小数：",[389,157312,157314],{"className":30571,"code":157313,"language":30573,"meta":316,"style":316},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[395,157315,157316,157335],{"__ignoreMap":316},[398,157317,157318,157320,157322,157324,157326,157328,157330,157333],{"class":400,"line":401},[398,157319,155524],{"class":408},[398,157321,454],{"class":404},[398,157323,109990],{"class":457},[398,157325,409],{"class":408},[398,157327,54014],{"class":457},[398,157329,409],{"class":408},[398,157331,157332],{"class":513},"\"请输入身高:\"",[398,157334,30690],{"class":408},[398,157336,157337,157339,157341,157343,157346,157348,157350,157353,157355,157358],{"class":400,"line":317},[398,157338,30608],{"class":457},[398,157340,409],{"class":408},[398,157342,461],{"class":404},[398,157344,157345],{"class":513},"\"身高:",[398,157347,1298],{"class":457},[398,157349,25259],{"class":408},[398,157351,157352],{"class":404},":.2f",[398,157354,1348],{"class":457},[398,157356,157357],{"class":513},"米\"",[398,157359,415],{"class":408},[343,157361,157363],{"id":157362},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,157365,123485],{},[38,157367,157368,157371,157374,157377],{},[41,157369,157370],{},"输入商品单价。",[41,157372,157373],{},"输入购买数量。",[41,157375,157376],{},"输入折扣，例如 0.8 表示八折。",[41,157378,157379],{},"输出最终金额，保留两位小数。",[19,157381,10312],{},[389,157383,157385],{"className":30571,"code":157384,"language":30573,"meta":316,"style":316},"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",[395,157386,157387,157406,157425,157445,157449,157469,157473,157496,157517,157539],{"__ignoreMap":316},[398,157388,157389,157391,157393,157395,157397,157399,157401,157404],{"class":400,"line":401},[398,157390,146874],{"class":408},[398,157392,454],{"class":404},[398,157394,109990],{"class":457},[398,157396,409],{"class":408},[398,157398,54014],{"class":457},[398,157400,409],{"class":408},[398,157402,157403],{"class":513},"\"请输入商品单价:\"",[398,157405,30690],{"class":408},[398,157407,157408,157410,157412,157414,157416,157418,157420,157423],{"class":400,"line":317},[398,157409,146884],{"class":408},[398,157411,454],{"class":404},[398,157413,2658],{"class":457},[398,157415,409],{"class":408},[398,157417,54014],{"class":457},[398,157419,409],{"class":408},[398,157421,157422],{"class":513},"\"请输入购买数量:\"",[398,157424,30690],{"class":408},[398,157426,157427,157430,157432,157434,157436,157438,157440,157443],{"class":400,"line":320},[398,157428,157429],{"class":408},"discount ",[398,157431,454],{"class":404},[398,157433,109990],{"class":457},[398,157435,409],{"class":408},[398,157437,54014],{"class":457},[398,157439,409],{"class":408},[398,157441,157442],{"class":513},"\"请输入折扣:\"",[398,157444,30690],{"class":408},[398,157446,157447],{"class":400,"line":1470},[398,157448,2676],{"emptyLinePlaceholder":328},[398,157450,157451,157454,157456,157459,157461,157464,157466],{"class":400,"line":1476},[398,157452,157453],{"class":408},"total ",[398,157455,454],{"class":404},[398,157457,157458],{"class":408}," price ",[398,157460,857],{"class":404},[398,157462,157463],{"class":408}," count ",[398,157465,857],{"class":404},[398,157467,157468],{"class":408}," discount\n",[398,157470,157471],{"class":400,"line":1490},[398,157472,2676],{"emptyLinePlaceholder":328},[398,157474,157475,157477,157479,157481,157484,157486,157488,157490,157492,157494],{"class":400,"line":1496},[398,157476,30608],{"class":457},[398,157478,409],{"class":408},[398,157480,461],{"class":404},[398,157482,157483],{"class":513},"\"商品单价:",[398,157485,1298],{"class":457},[398,157487,80008],{"class":408},[398,157489,157352],{"class":404},[398,157491,1348],{"class":457},[398,157493,653],{"class":513},[398,157495,415],{"class":408},[398,157497,157498,157500,157502,157504,157507,157509,157511,157513,157515],{"class":400,"line":1587},[398,157499,30608],{"class":457},[398,157501,409],{"class":408},[398,157503,461],{"class":404},[398,157505,157506],{"class":513},"\"购买数量:",[398,157508,1298],{"class":457},[398,157510,84627],{"class":408},[398,157512,1348],{"class":457},[398,157514,653],{"class":513},[398,157516,415],{"class":408},[398,157518,157519,157521,157523,157525,157528,157530,157533,157535,157537],{"class":400,"line":1593},[398,157520,30608],{"class":457},[398,157522,409],{"class":408},[398,157524,461],{"class":404},[398,157526,157527],{"class":513},"\"折扣:",[398,157529,1298],{"class":457},[398,157531,157532],{"class":408},"discount",[398,157534,1348],{"class":457},[398,157536,653],{"class":513},[398,157538,415],{"class":408},[398,157540,157541,157543,157545,157547,157550,157552,157555,157557,157559,157561],{"class":400,"line":1605},[398,157542,30608],{"class":457},[398,157544,409],{"class":408},[398,157546,461],{"class":404},[398,157548,157549],{"class":513},"\"应付金额:",[398,157551,1298],{"class":457},[398,157553,157554],{"class":408},"total",[398,157556,157352],{"class":404},[398,157558,1348],{"class":457},[398,157560,157205],{"class":513},[398,157562,415],{"class":408},[343,157564,157566],{"id":157565},"_213-易错点","2.13 易错点",[38,157568,157569,157574,157580,157588,157591],{},[41,157570,157571,157573],{},[395,157572,157216],{}," 的结果是字符串，做运算前要转换。",[41,157575,157576,157577,28578],{},"字符串拼接时，数字要先 ",[395,157578,157579],{},"str()",[41,157581,157582,157584,157585,157587],{},[395,157583,454],{}," 是赋值，",[395,157586,3225],{}," 是比较。",[41,157589,157590],{},"Python 没有自增自减运算符。",[41,157592,157593],{},"浮点数计算可能有精度误差：",[389,157595,157597],{"className":30571,"code":157596,"language":30573,"meta":316,"style":316},"print(0.1 + 0.2)\n",[395,157598,157599],{"__ignoreMap":316},[398,157600,157601,157603,157605,157607,157609,157612],{"class":400,"line":401},[398,157602,30608],{"class":457},[398,157604,409],{"class":408},[398,157606,86403],{"class":457},[398,157608,45759],{"class":404},[398,157610,157611],{"class":457}," 0.2",[398,157613,415],{"class":408},[19,157615,157616,157617,157620],{},"金额计算如果要求严格，可以后续学习 ",[395,157618,157619],{},"decimal"," 模块。",[343,157622,157624],{"id":157623},"_214-本章练习","2.14 本章练习",[38,157626,157627,157630,157633,157636,157639],{},[41,157628,157629],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[41,157631,157632],{},"输入圆的半径，计算面积，保留两位小数。",[41,157634,157635],{},"输入工资和奖金，计算总收入。",[41,157637,157638],{},"输入摄氏温度，转换为华氏温度。",[41,157640,157641],{},"写一个 BMI 计算程序：",[389,157643,157646],{"className":157644,"code":157645,"language":5464,"meta":316},[5462],"BMI = 体重kg \u002F 身高m ** 2\n",[395,157647,157645],{"__ignoreMap":316},[5403,157649,157650],{},"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":316,"searchDepth":317,"depth":317,"links":157652},[157653,157654,157655,157656,157657,157658,157659,157665,157666,157667,157672,157673,157674,157675],{"id":155214,"depth":317,"text":155215},{"id":155323,"depth":317,"text":155324},{"id":155494,"depth":317,"text":155495},{"id":155571,"depth":317,"text":155572},{"id":50924,"depth":317,"text":50925},{"id":155877,"depth":317,"text":155878},{"id":156103,"depth":317,"text":156104,"children":157660},[157661,157662,157663,157664],{"id":156107,"depth":320,"text":156108},{"id":156301,"depth":320,"text":156302},{"id":156389,"depth":320,"text":156390},{"id":156495,"depth":320,"text":156496},{"id":156604,"depth":317,"text":156605},{"id":156762,"depth":317,"text":156763},{"id":156827,"depth":317,"text":156828,"children":157668},[157669,157670,157671],{"id":156831,"depth":320,"text":156832},{"id":156976,"depth":320,"text":156977},{"id":157079,"depth":320,"text":157080},{"id":157210,"depth":317,"text":157211},{"id":157362,"depth":317,"text":157363},{"id":157565,"depth":317,"text":157566},{"id":157623,"depth":317,"text":157624},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155206,"description":23654},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157682,"title":157683,"body":157684,"description":23654,"extension":326,"meta":159320,"navigation":328,"path":159321,"seo":159322,"stem":159323,"__hash__":159324},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157685,"toc":159301},[157686,157689,157693,157696,157711,157714,157742,157746,157796,157798,157814,157817,157843,157846,157850,157917,157920,157936,157940,157943,158061,158064,158071,158120,158126,158130,158133,158246,158249,158253,158257,158260,158310,158314,158317,158367,158371,158374,158412,158416,158419,158465,158468,158503,158507,158512,158515,158561,158563,158630,158634,158640,158751,158760,158764,158766,158777,158779,158945,158949,158951,158965,158967,159181,159185,159204,159221,159224,159270,159274,159298],[10,157687,157683],{"id":157688},"_3-判断语句",[343,157690,157692],{"id":157691},"_31-布尔值","3.1 布尔值",[19,157694,157695],{},"判断语句依赖布尔值：",[389,157697,157699],{"className":30571,"code":157698,"language":30573,"meta":316,"style":316},"True\nFalse\n",[395,157700,157701,157706],{"__ignoreMap":316},[398,157702,157703],{"class":400,"line":401},[398,157704,157705],{"class":457},"True\n",[398,157707,157708],{"class":400,"line":317},[398,157709,157710],{"class":457},"False\n",[19,157712,157713],{},"比较表达式会产生布尔值：",[389,157715,157717],{"className":30571,"code":157716,"language":30573,"meta":316,"style":316},"age = 18\nprint(age >= 18)  # True\n",[395,157718,157719,157727],{"__ignoreMap":316},[398,157720,157721,157723,157725],{"class":400,"line":401},[398,157722,146739],{"class":408},[398,157724,454],{"class":404},[398,157726,146744],{"class":457},[398,157728,157729,157731,157733,157735,157737,157739],{"class":400,"line":317},[398,157730,30608],{"class":457},[398,157732,155961],{"class":408},[398,157734,1986],{"class":404},[398,157736,156478],{"class":457},[398,157738,46001],{"class":408},[398,157740,157741],{"class":467},"# True\n",[343,157743,157745],{"id":157744},"_32-if基础语法","3.2 if基础语法",[389,157747,157749],{"className":30571,"code":157748,"language":30573,"meta":316,"style":316},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[395,157750,157751,157769,157773,157785],{"__ignoreMap":316},[398,157752,157753,157755,157757,157759,157761,157763,157765,157767],{"class":400,"line":401},[398,157754,146739],{"class":408},[398,157756,454],{"class":404},[398,157758,2658],{"class":457},[398,157760,409],{"class":408},[398,157762,54014],{"class":457},[398,157764,409],{"class":408},[398,157766,152587],{"class":513},[398,157768,30690],{"class":408},[398,157770,157771],{"class":400,"line":317},[398,157772,2676],{"emptyLinePlaceholder":328},[398,157774,157775,157777,157779,157781,157783],{"class":400,"line":320},[398,157776,1807],{"class":404},[398,157778,15984],{"class":408},[398,157780,1986],{"class":404},[398,157782,156478],{"class":457},[398,157784,4015],{"class":408},[398,157786,157787,157789,157791,157794],{"class":400,"line":1470},[398,157788,31492],{"class":457},[398,157790,409],{"class":408},[398,157792,157793],{"class":513},"\"可以进入网吧\"",[398,157795,415],{"class":408},[19,157797,9302],{},[38,157799,157800,157805,157808,157811],{},[41,157801,157802,157804],{},[395,157803,1807],{}," 后面是条件表达式。",[41,157806,157807],{},"条件后面必须写冒号。",[41,157809,157810],{},"条件成立时执行缩进代码块。",[41,157812,157813],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,157815,157816],{},"错误示例：",[389,157818,157820],{"className":30571,"code":157819,"language":30573,"meta":316,"style":316},"if age >= 18\n    print(\"可以进入\")\n",[395,157821,157822,157832],{"__ignoreMap":316},[398,157823,157824,157826,157828,157830],{"class":400,"line":401},[398,157825,1807],{"class":404},[398,157827,15984],{"class":408},[398,157829,1986],{"class":404},[398,157831,146744],{"class":457},[398,157833,157834,157836,157838,157841],{"class":400,"line":317},[398,157835,31492],{"class":457},[398,157837,409],{"class":408},[398,157839,157840],{"class":513},"\"可以进入\"",[398,157842,415],{"class":408},[19,157844,157845],{},"缺少冒号。",[343,157847,157849],{"id":157848},"_33-if-else","3.3 if else",[389,157851,157853],{"className":30571,"code":157852,"language":30573,"meta":316,"style":316},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[395,157854,157855,157873,157877,157889,157900,157906],{"__ignoreMap":316},[398,157856,157857,157859,157861,157863,157865,157867,157869,157871],{"class":400,"line":401},[398,157858,146739],{"class":408},[398,157860,454],{"class":404},[398,157862,2658],{"class":457},[398,157864,409],{"class":408},[398,157866,54014],{"class":457},[398,157868,409],{"class":408},[398,157870,152587],{"class":513},[398,157872,30690],{"class":408},[398,157874,157875],{"class":400,"line":317},[398,157876,2676],{"emptyLinePlaceholder":328},[398,157878,157879,157881,157883,157885,157887],{"class":400,"line":320},[398,157880,1807],{"class":404},[398,157882,15984],{"class":408},[398,157884,1986],{"class":404},[398,157886,156478],{"class":457},[398,157888,4015],{"class":408},[398,157890,157891,157893,157895,157898],{"class":400,"line":1470},[398,157892,31492],{"class":457},[398,157894,409],{"class":408},[398,157896,157897],{"class":513},"\"成年人\"",[398,157899,415],{"class":408},[398,157901,157902,157904],{"class":400,"line":1476},[398,157903,1977],{"class":404},[398,157905,4015],{"class":408},[398,157907,157908,157910,157912,157915],{"class":400,"line":1490},[398,157909,31492],{"class":457},[398,157911,409],{"class":408},[398,157913,157914],{"class":513},"\"未成年人\"",[398,157916,415],{"class":408},[19,157918,157919],{},"执行逻辑：",[38,157921,157922,157928,157933],{},[41,157923,157924,157925,157927],{},"条件成立，执行 ",[395,157926,1807],{}," 代码块。",[41,157929,157930,157931,157927],{},"条件不成立，执行 ",[395,157932,1977],{},[41,157934,157935],{},"两个代码块只会执行其中一个。",[343,157937,157939],{"id":157938},"_34-if-elif-else","3.4 if elif else",[19,157941,157942],{},"多条件判断：",[389,157944,157946],{"className":30571,"code":157945,"language":30573,"meta":316,"style":316},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[395,157947,157948,157966,157970,157984,157995,158009,158020,158033,158044,158050],{"__ignoreMap":316},[398,157949,157950,157952,157954,157956,157958,157960,157962,157964],{"class":400,"line":401},[398,157951,155551],{"class":408},[398,157953,454],{"class":404},[398,157955,2658],{"class":457},[398,157957,409],{"class":408},[398,157959,54014],{"class":457},[398,157961,409],{"class":408},[398,157963,152602],{"class":513},[398,157965,30690],{"class":408},[398,157967,157968],{"class":400,"line":317},[398,157969,2676],{"emptyLinePlaceholder":328},[398,157971,157972,157974,157977,157979,157982],{"class":400,"line":320},[398,157973,1807],{"class":404},[398,157975,157976],{"class":408}," score ",[398,157978,1986],{"class":404},[398,157980,157981],{"class":457}," 90",[398,157983,4015],{"class":408},[398,157985,157986,157988,157990,157993],{"class":400,"line":1470},[398,157987,31492],{"class":457},[398,157989,409],{"class":408},[398,157991,157992],{"class":513},"\"优秀\"",[398,157994,415],{"class":408},[398,157996,157997,158000,158002,158004,158007],{"class":400,"line":1476},[398,157998,157999],{"class":404},"elif",[398,158001,157976],{"class":408},[398,158003,1986],{"class":404},[398,158005,158006],{"class":457}," 80",[398,158008,4015],{"class":408},[398,158010,158011,158013,158015,158018],{"class":400,"line":1490},[398,158012,31492],{"class":457},[398,158014,409],{"class":408},[398,158016,158017],{"class":513},"\"良好\"",[398,158019,415],{"class":408},[398,158021,158022,158024,158026,158028,158031],{"class":400,"line":1496},[398,158023,157999],{"class":404},[398,158025,157976],{"class":408},[398,158027,1986],{"class":404},[398,158029,158030],{"class":457}," 60",[398,158032,4015],{"class":408},[398,158034,158035,158037,158039,158042],{"class":400,"line":1587},[398,158036,31492],{"class":457},[398,158038,409],{"class":408},[398,158040,158041],{"class":513},"\"及格\"",[398,158043,415],{"class":408},[398,158045,158046,158048],{"class":400,"line":1593},[398,158047,1977],{"class":404},[398,158049,4015],{"class":408},[398,158051,158052,158054,158056,158059],{"class":400,"line":1605},[398,158053,31492],{"class":457},[398,158055,409],{"class":408},[398,158057,158058],{"class":513},"\"不及格\"",[398,158060,415],{"class":408},[19,158062,158063],{},"注意判断顺序很重要。",[19,158065,158066,158067,158070],{},"如果把 ",[395,158068,158069],{},"score >= 60"," 放在最前面：",[389,158072,158074],{"className":30571,"code":158073,"language":30573,"meta":316,"style":316},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[395,158075,158076,158088,158098,158110],{"__ignoreMap":316},[398,158077,158078,158080,158082,158084,158086],{"class":400,"line":401},[398,158079,1807],{"class":404},[398,158081,157976],{"class":408},[398,158083,1986],{"class":404},[398,158085,158030],{"class":457},[398,158087,4015],{"class":408},[398,158089,158090,158092,158094,158096],{"class":400,"line":317},[398,158091,31492],{"class":457},[398,158093,409],{"class":408},[398,158095,158041],{"class":513},[398,158097,415],{"class":408},[398,158099,158100,158102,158104,158106,158108],{"class":400,"line":320},[398,158101,157999],{"class":404},[398,158103,157976],{"class":408},[398,158105,1986],{"class":404},[398,158107,157981],{"class":457},[398,158109,4015],{"class":408},[398,158111,158112,158114,158116,158118],{"class":400,"line":1470},[398,158113,31492],{"class":457},[398,158115,409],{"class":408},[398,158117,157992],{"class":513},[398,158119,415],{"class":408},[19,158121,158122,158123,158125],{},"成绩 95 会先满足 ",[395,158124,158069],{},"，后面的优秀分支就不会执行。",[343,158127,158129],{"id":158128},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,158131,158132],{},"嵌套判断就是在一个判断内部再写判断。",[389,158134,158136],{"className":30571,"code":158135,"language":30573,"meta":316,"style":316},"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",[395,158137,158138,158156,158171,158175,158187,158201,158211,158218,158229,158235],{"__ignoreMap":316},[398,158139,158140,158142,158144,158146,158148,158150,158152,158154],{"class":400,"line":401},[398,158141,146739],{"class":408},[398,158143,454],{"class":404},[398,158145,2658],{"class":457},[398,158147,409],{"class":408},[398,158149,54014],{"class":457},[398,158151,409],{"class":408},[398,158153,152587],{"class":513},[398,158155,30690],{"class":408},[398,158157,158158,158160,158162,158164,158166,158169],{"class":400,"line":317},[398,158159,156554],{"class":408},[398,158161,454],{"class":404},[398,158163,60798],{"class":457},[398,158165,409],{"class":408},[398,158167,158168],{"class":513},"\"是否有票(y\u002Fn):\"",[398,158170,415],{"class":408},[398,158172,158173],{"class":400,"line":320},[398,158174,2676],{"emptyLinePlaceholder":328},[398,158176,158177,158179,158181,158183,158185],{"class":400,"line":1470},[398,158178,1807],{"class":404},[398,158180,15984],{"class":408},[398,158182,1986],{"class":404},[398,158184,156478],{"class":457},[398,158186,4015],{"class":408},[398,158188,158189,158191,158194,158196,158199],{"class":400,"line":1476},[398,158190,3377],{"class":404},[398,158192,158193],{"class":408}," has_ticket ",[398,158195,3225],{"class":404},[398,158197,158198],{"class":513}," \"y\"",[398,158200,4015],{"class":408},[398,158202,158203,158205,158207,158209],{"class":400,"line":1490},[398,158204,32644],{"class":457},[398,158206,409],{"class":408},[398,158208,157840],{"class":513},[398,158210,415],{"class":408},[398,158212,158213,158216],{"class":400,"line":1496},[398,158214,158215],{"class":404},"    else",[398,158217,4015],{"class":408},[398,158219,158220,158222,158224,158227],{"class":400,"line":1587},[398,158221,32644],{"class":457},[398,158223,409],{"class":408},[398,158225,158226],{"class":513},"\"请先买票\"",[398,158228,415],{"class":408},[398,158230,158231,158233],{"class":400,"line":1593},[398,158232,1977],{"class":404},[398,158234,4015],{"class":408},[398,158236,158237,158239,158241,158244],{"class":400,"line":1605},[398,158238,31492],{"class":457},[398,158240,409],{"class":408},[398,158242,158243],{"class":513},"\"未成年人禁止进入\"",[398,158245,415],{"class":408},[19,158247,158248],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[343,158250,158252],{"id":158251},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[14,158254,158256],{"id":158255},"_361-and","3.6.1 and",[19,158258,158259],{},"两个条件都成立才成立。",[389,158261,158263],{"className":30571,"code":158262,"language":30573,"meta":316,"style":316},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[395,158264,158265,158273,158281,158285,158300],{"__ignoreMap":316},[398,158266,158267,158269,158271],{"class":400,"line":401},[398,158268,146739],{"class":408},[398,158270,454],{"class":404},[398,158272,88258],{"class":457},[398,158274,158275,158277,158279],{"class":400,"line":317},[398,158276,156554],{"class":408},[398,158278,454],{"class":404},[398,158280,153792],{"class":457},[398,158282,158283],{"class":400,"line":320},[398,158284,2676],{"emptyLinePlaceholder":328},[398,158286,158287,158289,158291,158293,158295,158297],{"class":400,"line":1470},[398,158288,1807],{"class":404},[398,158290,15984],{"class":408},[398,158292,1986],{"class":404},[398,158294,156478],{"class":457},[398,158296,120622],{"class":404},[398,158298,158299],{"class":408}," has_ticket:\n",[398,158301,158302,158304,158306,158308],{"class":400,"line":1476},[398,158303,31492],{"class":457},[398,158305,409],{"class":408},[398,158307,157840],{"class":513},[398,158309,415],{"class":408},[14,158311,158313],{"id":158312},"_362-or","3.6.2 or",[19,158315,158316],{},"只要一个条件成立就成立。",[389,158318,158320],{"className":30571,"code":158319,"language":30573,"meta":316,"style":316},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[395,158321,158322,158331,158340,158344,158356],{"__ignoreMap":316},[398,158323,158324,158327,158329],{"class":400,"line":401},[398,158325,158326],{"class":408},"is_vip ",[398,158328,454],{"class":404},[398,158330,126000],{"class":457},[398,158332,158333,158336,158338],{"class":400,"line":317},[398,158334,158335],{"class":408},"coupon ",[398,158337,454],{"class":404},[398,158339,153792],{"class":457},[398,158341,158342],{"class":400,"line":320},[398,158343,2676],{"emptyLinePlaceholder":328},[398,158345,158346,158348,158351,158353],{"class":400,"line":1470},[398,158347,1807],{"class":404},[398,158349,158350],{"class":408}," is_vip ",[398,158352,115283],{"class":404},[398,158354,158355],{"class":408}," coupon:\n",[398,158357,158358,158360,158362,158365],{"class":400,"line":1476},[398,158359,31492],{"class":457},[398,158361,409],{"class":408},[398,158363,158364],{"class":513},"\"可以享受优惠\"",[398,158366,415],{"class":408},[14,158368,158370],{"id":158369},"_363-not","3.6.3 not",[19,158372,158373],{},"取反。",[389,158375,158377],{"className":30571,"code":158376,"language":30573,"meta":316,"style":316},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[395,158378,158379,158388,158392,158401],{"__ignoreMap":316},[398,158380,158381,158384,158386],{"class":400,"line":401},[398,158382,158383],{"class":408},"is_closed ",[398,158385,454],{"class":404},[398,158387,126000],{"class":457},[398,158389,158390],{"class":400,"line":317},[398,158391,2676],{"emptyLinePlaceholder":328},[398,158393,158394,158396,158398],{"class":400,"line":320},[398,158395,1807],{"class":404},[398,158397,39123],{"class":404},[398,158399,158400],{"class":408}," is_closed:\n",[398,158402,158403,158405,158407,158410],{"class":400,"line":1470},[398,158404,31492],{"class":457},[398,158406,409],{"class":408},[398,158408,158409],{"class":513},"\"店铺营业中\"",[398,158411,415],{"class":408},[343,158413,158415],{"id":158414},"_37-链式比较","3.7 链式比较",[19,158417,158418],{},"Python 支持链式比较：",[389,158420,158422],{"className":30571,"code":158421,"language":30573,"meta":316,"style":316},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[395,158423,158424,158433,158437,158454],{"__ignoreMap":316},[398,158425,158426,158428,158430],{"class":400,"line":401},[398,158427,155551],{"class":408},[398,158429,454],{"class":404},[398,158431,158432],{"class":457}," 85\n",[398,158434,158435],{"class":400,"line":317},[398,158436,2676],{"emptyLinePlaceholder":328},[398,158438,158439,158441,158443,158446,158448,158450,158452],{"class":400,"line":320},[398,158440,1807],{"class":404},[398,158442,4369],{"class":457},[398,158444,158445],{"class":404}," \u003C=",[398,158447,157976],{"class":408},[398,158449,1864],{"class":404},[398,158451,6031],{"class":457},[398,158453,4015],{"class":408},[398,158455,158456,158458,158460,158463],{"class":400,"line":1470},[398,158457,31492],{"class":457},[398,158459,409],{"class":408},[398,158461,158462],{"class":513},"\"成绩合法\"",[398,158464,415],{"class":408},[19,158466,158467],{},"等价于：",[389,158469,158471],{"className":30571,"code":158470,"language":30573,"meta":316,"style":316},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[395,158472,158473,158493],{"__ignoreMap":316},[398,158474,158475,158477,158479,158481,158483,158485,158487,158489,158491],{"class":400,"line":401},[398,158476,1807],{"class":404},[398,158478,157976],{"class":408},[398,158480,1986],{"class":404},[398,158482,4369],{"class":457},[398,158484,120622],{"class":404},[398,158486,157976],{"class":408},[398,158488,1864],{"class":404},[398,158490,6031],{"class":457},[398,158492,4015],{"class":408},[398,158494,158495,158497,158499,158501],{"class":400,"line":317},[398,158496,31492],{"class":457},[398,158498,409],{"class":408},[398,158500,158462],{"class":513},[398,158502,415],{"class":408},[343,158504,158506],{"id":158505},"_38-真值和假值","3.8 真值和假值",[19,158508,116660,158509,158511],{},[395,158510,1807],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,158513,158514],{},"假值：",[389,158516,158518],{"className":30571,"code":158517,"language":30573,"meta":316,"style":316},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[395,158519,158520,158524,158529,158533,158537,158542,158546,158550,158555],{"__ignoreMap":316},[398,158521,158522],{"class":400,"line":401},[398,158523,157710],{"class":457},[398,158525,158526],{"class":400,"line":317},[398,158527,158528],{"class":457},"None\n",[398,158530,158531],{"class":400,"line":320},[398,158532,3361],{"class":457},[398,158534,158535],{"class":400,"line":1470},[398,158536,32535],{"class":457},[398,158538,158539],{"class":400,"line":1476},[398,158540,158541],{"class":513},"\"\"\n",[398,158543,158544],{"class":400,"line":1490},[398,158545,32550],{"class":408},[398,158547,158548],{"class":400,"line":1496},[398,158549,2252],{"class":408},[398,158551,158552],{"class":400,"line":1587},[398,158553,158554],{"class":408},"{}\n",[398,158556,158557,158559],{"class":400,"line":1593},[398,158558,155483],{"class":457},[398,158560,2252],{"class":408},[19,158562,15412],{},[389,158564,158566],{"className":30571,"code":158565,"language":30573,"meta":316,"style":316},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[395,158567,158568,158582,158586,158593,158613,158619],{"__ignoreMap":316},[398,158569,158570,158572,158574,158576,158578,158580],{"class":400,"line":401},[398,158571,146729],{"class":408},[398,158573,454],{"class":404},[398,158575,60798],{"class":457},[398,158577,409],{"class":408},[398,158579,152572],{"class":513},[398,158581,415],{"class":408},[398,158583,158584],{"class":400,"line":317},[398,158585,2676],{"emptyLinePlaceholder":328},[398,158587,158588,158590],{"class":400,"line":320},[398,158589,1807],{"class":404},[398,158591,158592],{"class":408}," name:\n",[398,158594,158595,158597,158599,158601,158603,158605,158607,158609,158611],{"class":400,"line":1470},[398,158596,31492],{"class":457},[398,158598,409],{"class":408},[398,158600,461],{"class":404},[398,158602,157247],{"class":513},[398,158604,1298],{"class":457},[398,158606,80003],{"class":408},[398,158608,1348],{"class":457},[398,158610,653],{"class":513},[398,158612,415],{"class":408},[398,158614,158615,158617],{"class":400,"line":1476},[398,158616,1977],{"class":404},[398,158618,4015],{"class":408},[398,158620,158621,158623,158625,158628],{"class":400,"line":1490},[398,158622,31492],{"class":457},[398,158624,409],{"class":408},[398,158626,158627],{"class":513},"\"姓名不能为空\"",[398,158629,415],{"class":408},[343,158631,158633],{"id":158632},"_39-match语句","3.9 match语句",[19,158635,158636,158637,158639],{},"Python 3.10 开始支持 ",[395,158638,71458],{},"。它适合处理固定选项。",[389,158641,158643],{"className":30571,"code":158642,"language":30573,"meta":316,"style":316},"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",[395,158644,158645,158661,158665,158672,158682,158693,158702,158713,158722,158733,158740],{"__ignoreMap":316},[398,158646,158647,158650,158652,158654,158656,158659],{"class":400,"line":401},[398,158648,158649],{"class":408},"command ",[398,158651,454],{"class":404},[398,158653,60798],{"class":457},[398,158655,409],{"class":408},[398,158657,158658],{"class":513},"\"请输入命令:\"",[398,158660,415],{"class":408},[398,158662,158663],{"class":400,"line":317},[398,158664,2676],{"emptyLinePlaceholder":328},[398,158666,158667,158669],{"class":400,"line":320},[398,158668,71458],{"class":404},[398,158670,158671],{"class":408}," command:\n",[398,158673,158674,158677,158680],{"class":400,"line":1470},[398,158675,158676],{"class":404},"    case",[398,158678,158679],{"class":513}," \"start\"",[398,158681,4015],{"class":408},[398,158683,158684,158686,158688,158691],{"class":400,"line":1476},[398,158685,32644],{"class":457},[398,158687,409],{"class":408},[398,158689,158690],{"class":513},"\"启动\"",[398,158692,415],{"class":408},[398,158694,158695,158697,158700],{"class":400,"line":1490},[398,158696,158676],{"class":404},[398,158698,158699],{"class":513}," \"stop\"",[398,158701,4015],{"class":408},[398,158703,158704,158706,158708,158711],{"class":400,"line":1496},[398,158705,32644],{"class":457},[398,158707,409],{"class":408},[398,158709,158710],{"class":513},"\"停止\"",[398,158712,415],{"class":408},[398,158714,158715,158717,158720],{"class":400,"line":1587},[398,158716,158676],{"class":404},[398,158718,158719],{"class":513}," \"restart\"",[398,158721,4015],{"class":408},[398,158723,158724,158726,158728,158731],{"class":400,"line":1593},[398,158725,32644],{"class":457},[398,158727,409],{"class":408},[398,158729,158730],{"class":513},"\"重启\"",[398,158732,415],{"class":408},[398,158734,158735,158737],{"class":400,"line":1605},[398,158736,158676],{"class":404},[398,158738,158739],{"class":408}," _:\n",[398,158741,158742,158744,158746,158749],{"class":400,"line":1888},[398,158743,32644],{"class":457},[398,158745,409],{"class":408},[398,158747,158748],{"class":513},"\"未知命令\"",[398,158750,415],{"class":408},[19,158752,158753,158754,158756,158757,158759],{},"入门阶段掌握 ",[395,158755,154851],{}," 更重要，",[395,158758,71458],{}," 可以作为补充。",[343,158761,158763],{"id":158762},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,158765,123485],{},[38,158767,158768,158771,158774],{},[41,158769,158770],{},"输入成绩。",[41,158772,158773],{},"判断成绩是否合法。",[41,158775,158776],{},"输出等级。",[19,158778,10312],{},[389,158780,158782],{"className":30571,"code":158781,"language":30573,"meta":316,"style":316},"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",[395,158783,158784,158802,158806,158824,158835,158847,158858,158870,158881,158894,158905,158917,158928,158934],{"__ignoreMap":316},[398,158785,158786,158788,158790,158792,158794,158796,158798,158800],{"class":400,"line":401},[398,158787,155551],{"class":408},[398,158789,454],{"class":404},[398,158791,109990],{"class":457},[398,158793,409],{"class":408},[398,158795,54014],{"class":457},[398,158797,409],{"class":408},[398,158799,152602],{"class":513},[398,158801,30690],{"class":408},[398,158803,158804],{"class":400,"line":317},[398,158805,2676],{"emptyLinePlaceholder":328},[398,158807,158808,158810,158812,158814,158816,158818,158820,158822],{"class":400,"line":320},[398,158809,1807],{"class":404},[398,158811,39123],{"class":404},[398,158813,4369],{"class":457},[398,158815,158445],{"class":404},[398,158817,157976],{"class":408},[398,158819,1864],{"class":404},[398,158821,6031],{"class":457},[398,158823,4015],{"class":408},[398,158825,158826,158828,158830,158833],{"class":400,"line":1470},[398,158827,31492],{"class":457},[398,158829,409],{"class":408},[398,158831,158832],{"class":513},"\"成绩不合法\"",[398,158834,415],{"class":408},[398,158836,158837,158839,158841,158843,158845],{"class":400,"line":1476},[398,158838,157999],{"class":404},[398,158840,157976],{"class":408},[398,158842,1986],{"class":404},[398,158844,157981],{"class":457},[398,158846,4015],{"class":408},[398,158848,158849,158851,158853,158856],{"class":400,"line":1490},[398,158850,31492],{"class":457},[398,158852,409],{"class":408},[398,158854,158855],{"class":513},"\"等级:A\"",[398,158857,415],{"class":408},[398,158859,158860,158862,158864,158866,158868],{"class":400,"line":1496},[398,158861,157999],{"class":404},[398,158863,157976],{"class":408},[398,158865,1986],{"class":404},[398,158867,158006],{"class":457},[398,158869,4015],{"class":408},[398,158871,158872,158874,158876,158879],{"class":400,"line":1587},[398,158873,31492],{"class":457},[398,158875,409],{"class":408},[398,158877,158878],{"class":513},"\"等级:B\"",[398,158880,415],{"class":408},[398,158882,158883,158885,158887,158889,158892],{"class":400,"line":1593},[398,158884,157999],{"class":404},[398,158886,157976],{"class":408},[398,158888,1986],{"class":404},[398,158890,158891],{"class":457}," 70",[398,158893,4015],{"class":408},[398,158895,158896,158898,158900,158903],{"class":400,"line":1605},[398,158897,31492],{"class":457},[398,158899,409],{"class":408},[398,158901,158902],{"class":513},"\"等级:C\"",[398,158904,415],{"class":408},[398,158906,158907,158909,158911,158913,158915],{"class":400,"line":1888},[398,158908,157999],{"class":404},[398,158910,157976],{"class":408},[398,158912,1986],{"class":404},[398,158914,158030],{"class":457},[398,158916,4015],{"class":408},[398,158918,158919,158921,158923,158926],{"class":400,"line":1893},[398,158920,31492],{"class":457},[398,158922,409],{"class":408},[398,158924,158925],{"class":513},"\"等级:D\"",[398,158927,415],{"class":408},[398,158929,158930,158932],{"class":400,"line":1899},[398,158931,1977],{"class":404},[398,158933,4015],{"class":408},[398,158935,158936,158938,158940,158943],{"class":400,"line":1904},[398,158937,31492],{"class":457},[398,158939,409],{"class":408},[398,158941,158942],{"class":513},"\"等级:E\"",[398,158944,415],{"class":408},[343,158946,158948],{"id":158947},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,158950,123485],{},[38,158952,158953,158956,158959,158962],{},[41,158954,158955],{},"输入消费金额。",[41,158957,158958],{},"输入会员等级，普通、银卡、金卡。",[41,158960,158961],{},"普通不打折，银卡 9 折，金卡 8 折。",[41,158963,158964],{},"满 500 再减 50。",[19,158966,10312],{},[389,158968,158970],{"className":30571,"code":158969,"language":30573,"meta":316,"style":316},"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",[395,158971,158972,158992,159008,159012,159020,159024,159038,159048,159061,159070,159083,159091,159097,159108,159112,159126,159130,159144,159154,159158],{"__ignoreMap":316},[398,158973,158974,158977,158979,158981,158983,158985,158987,158990],{"class":400,"line":401},[398,158975,158976],{"class":408},"amount ",[398,158978,454],{"class":404},[398,158980,109990],{"class":457},[398,158982,409],{"class":408},[398,158984,54014],{"class":457},[398,158986,409],{"class":408},[398,158988,158989],{"class":513},"\"请输入消费金额:\"",[398,158991,30690],{"class":408},[398,158993,158994,158997,158999,159001,159003,159006],{"class":400,"line":317},[398,158995,158996],{"class":408},"level ",[398,158998,454],{"class":404},[398,159000,60798],{"class":457},[398,159002,409],{"class":408},[398,159004,159005],{"class":513},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[398,159007,415],{"class":408},[398,159009,159010],{"class":400,"line":320},[398,159011,2676],{"emptyLinePlaceholder":328},[398,159013,159014,159016,159018],{"class":400,"line":1470},[398,159015,157429],{"class":408},[398,159017,454],{"class":404},[398,159019,55892],{"class":457},[398,159021,159022],{"class":400,"line":1476},[398,159023,2676],{"emptyLinePlaceholder":328},[398,159025,159026,159028,159031,159033,159036],{"class":400,"line":1490},[398,159027,1807],{"class":404},[398,159029,159030],{"class":408}," level ",[398,159032,3225],{"class":404},[398,159034,159035],{"class":513}," \"银卡\"",[398,159037,4015],{"class":408},[398,159039,159040,159043,159045],{"class":400,"line":1496},[398,159041,159042],{"class":408},"    discount ",[398,159044,454],{"class":404},[398,159046,159047],{"class":457}," 0.9\n",[398,159049,159050,159052,159054,159056,159059],{"class":400,"line":1587},[398,159051,157999],{"class":404},[398,159053,159030],{"class":408},[398,159055,3225],{"class":404},[398,159057,159058],{"class":513}," \"金卡\"",[398,159060,4015],{"class":408},[398,159062,159063,159065,159067],{"class":400,"line":1593},[398,159064,159042],{"class":408},[398,159066,454],{"class":404},[398,159068,159069],{"class":457}," 0.8\n",[398,159071,159072,159074,159076,159078,159081],{"class":400,"line":1605},[398,159073,157999],{"class":404},[398,159075,159030],{"class":408},[398,159077,3225],{"class":404},[398,159079,159080],{"class":513}," \"普通\"",[398,159082,4015],{"class":408},[398,159084,159085,159087,159089],{"class":400,"line":1888},[398,159086,159042],{"class":408},[398,159088,454],{"class":404},[398,159090,55892],{"class":457},[398,159092,159093,159095],{"class":400,"line":1893},[398,159094,1977],{"class":404},[398,159096,4015],{"class":408},[398,159098,159099,159101,159103,159106],{"class":400,"line":1899},[398,159100,31492],{"class":457},[398,159102,409],{"class":408},[398,159104,159105],{"class":513},"\"会员等级输入错误，按普通会员计算\"",[398,159107,415],{"class":408},[398,159109,159110],{"class":400,"line":1904},[398,159111,2676],{"emptyLinePlaceholder":328},[398,159113,159114,159117,159119,159122,159124],{"class":400,"line":1918},[398,159115,159116],{"class":408},"pay ",[398,159118,454],{"class":404},[398,159120,159121],{"class":408}," amount ",[398,159123,857],{"class":404},[398,159125,157468],{"class":408},[398,159127,159128],{"class":400,"line":1923},[398,159129,2676],{"emptyLinePlaceholder":328},[398,159131,159132,159134,159137,159139,159142],{"class":400,"line":1929},[398,159133,1807],{"class":404},[398,159135,159136],{"class":408}," pay ",[398,159138,1986],{"class":404},[398,159140,159141],{"class":457}," 500",[398,159143,4015],{"class":408},[398,159145,159146,159149,159151],{"class":400,"line":1950},[398,159147,159148],{"class":408},"    pay ",[398,159150,150445],{"class":404},[398,159152,159153],{"class":457}," 50\n",[398,159155,159156],{"class":400,"line":1955},[398,159157,2676],{"emptyLinePlaceholder":328},[398,159159,159160,159162,159164,159166,159168,159170,159173,159175,159177,159179],{"class":400,"line":1969},[398,159161,30608],{"class":457},[398,159163,409],{"class":408},[398,159165,461],{"class":404},[398,159167,157549],{"class":513},[398,159169,1298],{"class":457},[398,159171,159172],{"class":408},"pay",[398,159174,157352],{"class":404},[398,159176,1348],{"class":457},[398,159178,157205],{"class":513},[398,159180,415],{"class":408},[343,159182,159184],{"id":159183},"_312-易错点","3.12 易错点",[38,159186,159187,159190,159193,159196,159201],{},[41,159188,159189],{},"冒号不能漏。",[41,159191,159192],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[41,159194,159195],{},"多分支判断要注意顺序。",[41,159197,159198,159199,28578],{},"判断相等用 ",[395,159200,3225],{},[41,159202,159203],{},"字符串比较区分大小写：",[389,159205,159207],{"className":30571,"code":159206,"language":30573,"meta":316,"style":316},"\"Y\" == \"y\"  # False\n",[395,159208,159209],{"__ignoreMap":316},[398,159210,159211,159214,159216,159218],{"class":400,"line":401},[398,159212,159213],{"class":513},"\"Y\"",[398,159215,101752],{"class":404},[398,159217,158198],{"class":513},[398,159219,159220],{"class":467},"  # False\n",[19,159222,159223],{},"可转换后再判断：",[389,159225,159227],{"className":30571,"code":159226,"language":30573,"meta":316,"style":316},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[395,159228,159229,159246,159259],{"__ignoreMap":316},[398,159230,159231,159234,159236,159238,159240,159243],{"class":400,"line":401},[398,159232,159233],{"class":408},"answer ",[398,159235,454],{"class":404},[398,159237,60798],{"class":457},[398,159239,409],{"class":408},[398,159241,159242],{"class":513},"\"是否继续(y\u002Fn):\"",[398,159244,159245],{"class":408},").lower()\n",[398,159247,159248,159250,159253,159255,159257],{"class":400,"line":317},[398,159249,1807],{"class":404},[398,159251,159252],{"class":408}," answer ",[398,159254,3225],{"class":404},[398,159256,158198],{"class":513},[398,159258,4015],{"class":408},[398,159260,159261,159263,159265,159268],{"class":400,"line":320},[398,159262,31492],{"class":457},[398,159264,409],{"class":408},[398,159266,159267],{"class":513},"\"继续\"",[398,159269,415],{"class":408},[343,159271,159273],{"id":159272},"_313-本章练习","3.13 本章练习",[38,159275,159276,159279,159282,159285,159295],{},[41,159277,159278],{},"输入年龄，判断是否成年。",[41,159280,159281],{},"输入年份，判断是否为闰年。",[41,159283,159284],{},"输入三个数字，输出最大值。",[41,159286,159287,159288,159291,159292,159294],{},"写登录判断：用户名是 ",[395,159289,159290],{},"admin"," 且密码是 ",[395,159293,15361],{}," 才登录成功。",[41,159296,159297],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[5403,159299,159300],{},"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":316,"searchDepth":317,"depth":317,"links":159302},[159303,159304,159305,159306,159307,159308,159313,159314,159315,159316,159317,159318,159319],{"id":157691,"depth":317,"text":157692},{"id":157744,"depth":317,"text":157745},{"id":157848,"depth":317,"text":157849},{"id":157938,"depth":317,"text":157939},{"id":158128,"depth":317,"text":158129},{"id":158251,"depth":317,"text":158252,"children":159309},[159310,159311,159312],{"id":158255,"depth":320,"text":158256},{"id":158312,"depth":320,"text":158313},{"id":158369,"depth":320,"text":158370},{"id":158414,"depth":317,"text":158415},{"id":158505,"depth":317,"text":158506},{"id":158632,"depth":317,"text":158633},{"id":158762,"depth":317,"text":158763},{"id":158947,"depth":317,"text":158948},{"id":159183,"depth":317,"text":159184},{"id":159272,"depth":317,"text":159273},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157683,"description":23654},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159326,"title":159327,"body":159328,"description":23654,"extension":326,"meta":161097,"navigation":328,"path":161098,"seo":161099,"stem":161100,"__hash__":161101},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159329,"toc":161077},[159330,159333,159337,159343,159346,159363,159367,159369,159386,159388,159433,159435,159452,159456,159459,159525,159528,159546,159550,159711,159720,159724,159728,159733,159780,159782,159788,159792,159797,159844,159846,159852,159856,159861,159897,159900,159947,159951,159957,160015,160020,160051,160056,160060,160115,160118,160190,160193,160252,160256,160259,160334,160337,160341,160447,160450,160476,160480,160492,160561,160564,160656,160660,160662,160673,160675,160805,160809,161011,161019,161023,161053,161057,161074],[10,159331,159327],{"id":159332},"_4-循环语句",[343,159334,159336],{"id":159335},"_41-为什么需要循环","4.1 为什么需要循环",[19,159338,159339,159340,159342],{},"如果要输出 1 到 100，不应该写 100 行 ",[395,159341,146665],{},"，而应该用循环。",[19,159344,159345],{},"循环适合处理重复任务：",[38,159347,159348,159351,159354,159357,159360],{},[41,159349,159350],{},"重复输出。",[41,159352,159353],{},"重复输入。",[41,159355,159356],{},"遍历数据。",[41,159358,159359],{},"持续执行菜单。",[41,159361,159362],{},"批量处理文件或数据。",[343,159364,159366],{"id":159365},"_42-while循环","4.2 while循环",[19,159368,5458],{},[389,159370,159372],{"className":30571,"code":159371,"language":30573,"meta":316,"style":316},"while 条件:\n    循环体\n",[395,159373,159374,159381],{"__ignoreMap":316},[398,159375,159376,159378],{"class":400,"line":401},[398,159377,108856],{"class":404},[398,159379,159380],{"class":408}," 条件:\n",[398,159382,159383],{"class":400,"line":317},[398,159384,159385],{"class":408},"    循环体\n",[19,159387,15412],{},[389,159389,159391],{"className":30571,"code":159390,"language":30573,"meta":316,"style":316},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[395,159392,159393,159401,159405,159417,159424],{"__ignoreMap":316},[398,159394,159395,159397,159399],{"class":400,"line":401},[398,159396,100341],{"class":408},[398,159398,454],{"class":404},[398,159400,55892],{"class":457},[398,159402,159403],{"class":400,"line":317},[398,159404,2676],{"emptyLinePlaceholder":328},[398,159406,159407,159409,159411,159413,159415],{"class":400,"line":320},[398,159408,108856],{"class":404},[398,159410,9715],{"class":408},[398,159412,1864],{"class":404},[398,159414,2424],{"class":457},[398,159416,4015],{"class":408},[398,159418,159419,159421],{"class":400,"line":1470},[398,159420,31492],{"class":457},[398,159422,159423],{"class":408},"(i)\n",[398,159425,159426,159429,159431],{"class":400,"line":1476},[398,159427,159428],{"class":408},"    i ",[398,159430,9754],{"class":404},[398,159432,55892],{"class":457},[19,159434,81122],{},[38,159436,159437,159443,159446,159449],{},[41,159438,159439,159440,28578],{},"判断条件 ",[395,159441,159442],{},"i \u003C= 5",[41,159444,159445],{},"条件成立，执行循环体。",[41,159447,159448],{},"执行完后回到条件判断。",[41,159450,159451],{},"条件不成立，退出循环。",[343,159453,159455],{"id":159454},"_43-while累加","4.3 while累加",[19,159457,159458],{},"计算 1 到 100 的和：",[389,159460,159462],{"className":30571,"code":159461,"language":30573,"meta":316,"style":316},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[395,159463,159464,159472,159480,159484,159496,159506,159514,159518],{"__ignoreMap":316},[398,159465,159466,159468,159470],{"class":400,"line":401},[398,159467,100341],{"class":408},[398,159469,454],{"class":404},[398,159471,55892],{"class":457},[398,159473,159474,159476,159478],{"class":400,"line":317},[398,159475,157453],{"class":408},[398,159477,454],{"class":404},[398,159479,47526],{"class":457},[398,159481,159482],{"class":400,"line":320},[398,159483,2676],{"emptyLinePlaceholder":328},[398,159485,159486,159488,159490,159492,159494],{"class":400,"line":1470},[398,159487,108856],{"class":404},[398,159489,9715],{"class":408},[398,159491,1864],{"class":404},[398,159493,6031],{"class":457},[398,159495,4015],{"class":408},[398,159497,159498,159501,159503],{"class":400,"line":1476},[398,159499,159500],{"class":408},"    total ",[398,159502,9754],{"class":404},[398,159504,159505],{"class":408}," i\n",[398,159507,159508,159510,159512],{"class":400,"line":1490},[398,159509,159428],{"class":408},[398,159511,9754],{"class":404},[398,159513,55892],{"class":457},[398,159515,159516],{"class":400,"line":1496},[398,159517,2676],{"emptyLinePlaceholder":328},[398,159519,159520,159522],{"class":400,"line":1587},[398,159521,30608],{"class":457},[398,159523,159524],{"class":408},"(total)\n",[19,159526,159527],{},"核心思想：",[38,159529,159530,159535,159540],{},[41,159531,159532,159534],{},[395,159533,843],{}," 控制循环次数。",[41,159536,159537,159539],{},[395,159538,157554],{}," 保存累加结果。",[41,159541,159542,159543,159545],{},"每轮循环都要更新 ",[395,159544,843],{},"，否则可能死循环。",[343,159547,159549],{"id":159548},"_44-while猜数字","4.4 while猜数字",[389,159551,159553],{"className":30571,"code":159552,"language":30573,"meta":316,"style":316},"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",[395,159554,159555,159561,159565,159582,159590,159594,159602,159622,159631,159635,159647,159658,159668,159679,159685,159707],{"__ignoreMap":316},[398,159556,159557,159559],{"class":400,"line":401},[398,159558,30585],{"class":404},[398,159560,45521],{"class":408},[398,159562,159563],{"class":400,"line":317},[398,159564,2676],{"emptyLinePlaceholder":328},[398,159566,159567,159569,159571,159574,159576,159578,159580],{"class":400,"line":320},[398,159568,159233],{"class":408},[398,159570,454],{"class":404},[398,159572,159573],{"class":408}," random.randint(",[398,159575,619],{"class":457},[398,159577,12712],{"class":408},[398,159579,713],{"class":457},[398,159581,415],{"class":408},[398,159583,159584,159586,159588],{"class":400,"line":1470},[398,159585,146884],{"class":408},[398,159587,454],{"class":404},[398,159589,47526],{"class":457},[398,159591,159592],{"class":400,"line":1476},[398,159593,2676],{"emptyLinePlaceholder":328},[398,159595,159596,159598,159600],{"class":400,"line":1490},[398,159597,108856],{"class":404},[398,159599,95485],{"class":457},[398,159601,4015],{"class":408},[398,159603,159604,159607,159609,159611,159613,159615,159617,159620],{"class":400,"line":1496},[398,159605,159606],{"class":408},"    guess ",[398,159608,454],{"class":404},[398,159610,2658],{"class":457},[398,159612,409],{"class":408},[398,159614,54014],{"class":457},[398,159616,409],{"class":408},[398,159618,159619],{"class":513},"\"请输入1到100之间的数字:\"",[398,159621,30690],{"class":408},[398,159623,159624,159627,159629],{"class":400,"line":1587},[398,159625,159626],{"class":408},"    count ",[398,159628,9754],{"class":404},[398,159630,55892],{"class":457},[398,159632,159633],{"class":400,"line":1593},[398,159634,2676],{"emptyLinePlaceholder":328},[398,159636,159637,159639,159642,159644],{"class":400,"line":1605},[398,159638,3377],{"class":404},[398,159640,159641],{"class":408}," guess ",[398,159643,1362],{"class":404},[398,159645,159646],{"class":408}," answer:\n",[398,159648,159649,159651,159653,159656],{"class":400,"line":1888},[398,159650,32644],{"class":457},[398,159652,409],{"class":408},[398,159654,159655],{"class":513},"\"猜大了\"",[398,159657,415],{"class":408},[398,159659,159660,159662,159664,159666],{"class":400,"line":1893},[398,159661,39486],{"class":404},[398,159663,159641],{"class":408},[398,159665,1312],{"class":404},[398,159667,159646],{"class":408},[398,159669,159670,159672,159674,159677],{"class":400,"line":1899},[398,159671,32644],{"class":457},[398,159673,409],{"class":408},[398,159675,159676],{"class":513},"\"猜小了\"",[398,159678,415],{"class":408},[398,159680,159681,159683],{"class":400,"line":1904},[398,159682,158215],{"class":404},[398,159684,4015],{"class":408},[398,159686,159687,159689,159691,159693,159696,159698,159700,159702,159705],{"class":400,"line":1918},[398,159688,32644],{"class":457},[398,159690,409],{"class":408},[398,159692,461],{"class":404},[398,159694,159695],{"class":513},"\"猜对了，一共猜了",[398,159697,1298],{"class":457},[398,159699,84627],{"class":408},[398,159701,1348],{"class":457},[398,159703,159704],{"class":513},"次\"",[398,159706,415],{"class":408},[398,159708,159709],{"class":400,"line":1923},[398,159710,31820],{"class":404},[19,159712,159713,159716,159717,159719],{},[395,159714,159715],{},"while True"," 表示无限循环，通常配合 ",[395,159718,2329],{}," 使用。",[343,159721,159723],{"id":159722},"_45-break和continue","4.5 break和continue",[14,159725,159727],{"id":159726},"_451-break","4.5.1 break",[19,159729,159730,159732],{},[395,159731,2329],{}," 直接结束整个循环。",[389,159734,159736],{"className":30571,"code":159735,"language":30573,"meta":316,"style":316},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[395,159737,159738,159758,159770,159774],{"__ignoreMap":316},[398,159739,159740,159742,159744,159746,159748,159750,159752,159754,159756],{"class":400,"line":401},[398,159741,3301],{"class":404},[398,159743,9715],{"class":408},[398,159745,26236],{"class":404},[398,159747,32636],{"class":457},[398,159749,409],{"class":408},[398,159751,619],{"class":457},[398,159753,12712],{"class":408},[398,159755,746],{"class":457},[398,159757,30979],{"class":408},[398,159759,159760,159762,159764,159766,159768],{"class":400,"line":317},[398,159761,3377],{"class":404},[398,159763,9715],{"class":408},[398,159765,3225],{"class":404},[398,159767,78263],{"class":457},[398,159769,4015],{"class":408},[398,159771,159772],{"class":400,"line":320},[398,159773,31820],{"class":404},[398,159775,159776,159778],{"class":400,"line":1470},[398,159777,31492],{"class":457},[398,159779,159423],{"class":408},[19,159781,146650],{},[389,159783,159786],{"className":159784,"code":159785,"language":5464,"meta":316},[5462],"1\n2\n",[395,159787,159785],{"__ignoreMap":316},[14,159789,159791],{"id":159790},"_452-continue","4.5.2 continue",[19,159793,159794,159796],{},[395,159795,154865],{}," 跳过本轮剩余代码，进入下一轮循环。",[389,159798,159800],{"className":30571,"code":159799,"language":30573,"meta":316,"style":316},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[395,159801,159802,159822,159834,159838],{"__ignoreMap":316},[398,159803,159804,159806,159808,159810,159812,159814,159816,159818,159820],{"class":400,"line":401},[398,159805,3301],{"class":404},[398,159807,9715],{"class":408},[398,159809,26236],{"class":404},[398,159811,32636],{"class":457},[398,159813,409],{"class":408},[398,159815,619],{"class":457},[398,159817,12712],{"class":408},[398,159819,746],{"class":457},[398,159821,30979],{"class":408},[398,159823,159824,159826,159828,159830,159832],{"class":400,"line":317},[398,159825,3377],{"class":404},[398,159827,9715],{"class":408},[398,159829,3225],{"class":404},[398,159831,78263],{"class":457},[398,159833,4015],{"class":408},[398,159835,159836],{"class":400,"line":320},[398,159837,148705],{"class":404},[398,159839,159840,159842],{"class":400,"line":1470},[398,159841,31492],{"class":457},[398,159843,159423],{"class":408},[19,159845,146650],{},[389,159847,159850],{"className":159848,"code":159849,"language":5464,"meta":316},[5462],"1\n2\n4\n5\n",[395,159851,159849],{"__ignoreMap":316},[343,159853,159855],{"id":159854},"_46-for循环","4.6 for循环",[19,159857,159858,159860],{},[395,159859,3301],{}," 常用于遍历序列。",[389,159862,159864],{"className":30571,"code":159863,"language":30573,"meta":316,"style":316},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[395,159865,159866,159875,159879,159890],{"__ignoreMap":316},[398,159867,159868,159870,159872],{"class":400,"line":401},[398,159869,146729],{"class":408},[398,159871,454],{"class":404},[398,159873,159874],{"class":513}," \"python\"\n",[398,159876,159877],{"class":400,"line":317},[398,159878,2676],{"emptyLinePlaceholder":328},[398,159880,159881,159883,159886,159888],{"class":400,"line":320},[398,159882,3301],{"class":404},[398,159884,159885],{"class":408}," ch ",[398,159887,26236],{"class":404},[398,159889,158592],{"class":408},[398,159891,159892,159894],{"class":400,"line":1470},[398,159893,31492],{"class":457},[398,159895,159896],{"class":408},"(ch)\n",[19,159898,159899],{},"遍历列表：",[389,159901,159903],{"className":30571,"code":159902,"language":30573,"meta":316,"style":316},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[395,159904,159905,159927,159931,159941],{"__ignoreMap":316},[398,159906,159907,159910,159912,159914,159916,159918,159920,159922,159925],{"class":400,"line":401},[398,159908,159909],{"class":408},"students ",[398,159911,454],{"class":404},[398,159913,52419],{"class":408},[398,159915,150081],{"class":513},[398,159917,12712],{"class":408},[398,159919,151129],{"class":513},[398,159921,12712],{"class":408},[398,159923,159924],{"class":513},"\"小刚\"",[398,159926,33439],{"class":408},[398,159928,159929],{"class":400,"line":317},[398,159930,2676],{"emptyLinePlaceholder":328},[398,159932,159933,159935,159937,159939],{"class":400,"line":320},[398,159934,3301],{"class":404},[398,159936,152330],{"class":408},[398,159938,26236],{"class":404},[398,159940,152335],{"class":408},[398,159942,159943,159945],{"class":400,"line":1470},[398,159944,31492],{"class":457},[398,159946,150235],{"class":408},[343,159948,159950],{"id":159949},"_47-range函数","4.7 range函数",[19,159952,159953,159956],{},[395,159954,159955],{},"range()"," 用于生成整数序列。",[389,159958,159960],{"className":30571,"code":159959,"language":30573,"meta":316,"style":316},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[395,159961,159962,159976,159994],{"__ignoreMap":316},[398,159963,159964,159966,159968,159970,159973],{"class":400,"line":401},[398,159965,33609],{"class":457},[398,159967,409],{"class":408},[398,159969,721],{"class":457},[398,159971,159972],{"class":408},")          ",[398,159974,159975],{"class":467},"# 0,1,2,3,4\n",[398,159977,159978,159980,159982,159984,159986,159988,159991],{"class":400,"line":317},[398,159979,33609],{"class":457},[398,159981,409],{"class":408},[398,159983,619],{"class":457},[398,159985,12712],{"class":408},[398,159987,721],{"class":457},[398,159989,159990],{"class":408},")       ",[398,159992,159993],{"class":467},"# 1,2,3,4\n",[398,159995,159996,159998,160000,160002,160004,160006,160008,160010,160012],{"class":400,"line":320},[398,159997,33609],{"class":457},[398,159999,409],{"class":408},[398,160001,619],{"class":457},[398,160003,12712],{"class":408},[398,160005,848],{"class":457},[398,160007,12712],{"class":408},[398,160009,486],{"class":457},[398,160011,155854],{"class":408},[398,160013,160014],{"class":467},"# 1,3,5,7,9\n",[19,160016,160017,160018,24896],{},"配合 ",[395,160019,3301],{},[389,160021,160023],{"className":30571,"code":160022,"language":30573,"meta":316,"style":316},"for i in range(1, 6):\n    print(i)\n",[395,160024,160025,160045],{"__ignoreMap":316},[398,160026,160027,160029,160031,160033,160035,160037,160039,160041,160043],{"class":400,"line":401},[398,160028,3301],{"class":404},[398,160030,9715],{"class":408},[398,160032,26236],{"class":404},[398,160034,32636],{"class":457},[398,160036,409],{"class":408},[398,160038,619],{"class":457},[398,160040,12712],{"class":408},[398,160042,746],{"class":457},[398,160044,30979],{"class":408},[398,160046,160047,160049],{"class":400,"line":317},[398,160048,31492],{"class":457},[398,160050,159423],{"class":408},[19,160052,9302,160053,160055],{},[395,160054,33609],{}," 的结束值不包含在内。",[343,160057,160059],{"id":160058},"_48-for循环求和","4.8 for循环求和",[389,160061,160063],{"className":30571,"code":160062,"language":30573,"meta":316,"style":316},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[395,160064,160065,160073,160077,160097,160105,160109],{"__ignoreMap":316},[398,160066,160067,160069,160071],{"class":400,"line":401},[398,160068,157453],{"class":408},[398,160070,454],{"class":404},[398,160072,47526],{"class":457},[398,160074,160075],{"class":400,"line":317},[398,160076,2676],{"emptyLinePlaceholder":328},[398,160078,160079,160081,160083,160085,160087,160089,160091,160093,160095],{"class":400,"line":320},[398,160080,3301],{"class":404},[398,160082,9715],{"class":408},[398,160084,26236],{"class":404},[398,160086,32636],{"class":457},[398,160088,409],{"class":408},[398,160090,619],{"class":457},[398,160092,12712],{"class":408},[398,160094,739],{"class":457},[398,160096,30979],{"class":408},[398,160098,160099,160101,160103],{"class":400,"line":1470},[398,160100,159500],{"class":408},[398,160102,9754],{"class":404},[398,160104,159505],{"class":408},[398,160106,160107],{"class":400,"line":1476},[398,160108,2676],{"emptyLinePlaceholder":328},[398,160110,160111,160113],{"class":400,"line":1490},[398,160112,30608],{"class":457},[398,160114,159524],{"class":408},[19,160116,160117],{},"求偶数和：",[389,160119,160121],{"className":30571,"code":160120,"language":30573,"meta":316,"style":316},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[395,160122,160123,160131,160135,160155,160171,160180,160184],{"__ignoreMap":316},[398,160124,160125,160127,160129],{"class":400,"line":401},[398,160126,157453],{"class":408},[398,160128,454],{"class":404},[398,160130,47526],{"class":457},[398,160132,160133],{"class":400,"line":317},[398,160134,2676],{"emptyLinePlaceholder":328},[398,160136,160137,160139,160141,160143,160145,160147,160149,160151,160153],{"class":400,"line":320},[398,160138,3301],{"class":404},[398,160140,9715],{"class":408},[398,160142,26236],{"class":404},[398,160144,32636],{"class":457},[398,160146,409],{"class":408},[398,160148,619],{"class":457},[398,160150,12712],{"class":408},[398,160152,739],{"class":457},[398,160154,30979],{"class":408},[398,160156,160157,160159,160161,160163,160165,160167,160169],{"class":400,"line":1470},[398,160158,3377],{"class":404},[398,160160,9715],{"class":408},[398,160162,730],{"class":404},[398,160164,15032],{"class":457},[398,160166,101752],{"class":404},[398,160168,4369],{"class":457},[398,160170,4015],{"class":408},[398,160172,160173,160176,160178],{"class":400,"line":1476},[398,160174,160175],{"class":408},"        total ",[398,160177,9754],{"class":404},[398,160179,159505],{"class":408},[398,160181,160182],{"class":400,"line":1490},[398,160183,2676],{"emptyLinePlaceholder":328},[398,160185,160186,160188],{"class":400,"line":1496},[398,160187,30608],{"class":457},[398,160189,159524],{"class":408},[19,160191,160192],{},"也可以：",[389,160194,160196],{"className":30571,"code":160195,"language":30573,"meta":316,"style":316},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[395,160197,160198,160206,160210,160234,160242,160246],{"__ignoreMap":316},[398,160199,160200,160202,160204],{"class":400,"line":401},[398,160201,157453],{"class":408},[398,160203,454],{"class":404},[398,160205,47526],{"class":457},[398,160207,160208],{"class":400,"line":317},[398,160209,2676],{"emptyLinePlaceholder":328},[398,160211,160212,160214,160216,160218,160220,160222,160224,160226,160228,160230,160232],{"class":400,"line":320},[398,160213,3301],{"class":404},[398,160215,9715],{"class":408},[398,160217,26236],{"class":404},[398,160219,32636],{"class":457},[398,160221,409],{"class":408},[398,160223,486],{"class":457},[398,160225,12712],{"class":408},[398,160227,739],{"class":457},[398,160229,12712],{"class":408},[398,160231,486],{"class":457},[398,160233,30979],{"class":408},[398,160235,160236,160238,160240],{"class":400,"line":1470},[398,160237,159500],{"class":408},[398,160239,9754],{"class":404},[398,160241,159505],{"class":408},[398,160243,160244],{"class":400,"line":1476},[398,160245,2676],{"emptyLinePlaceholder":328},[398,160247,160248,160250],{"class":400,"line":1490},[398,160249,30608],{"class":457},[398,160251,159524],{"class":408},[343,160253,160255],{"id":160254},"_49-循环嵌套","4.9 循环嵌套",[19,160257,160258],{},"嵌套循环就是循环里面再写循环。",[389,160260,160262],{"className":30571,"code":160261,"language":30573,"meta":316,"style":316},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[395,160263,160264,160284,160304],{"__ignoreMap":316},[398,160265,160266,160268,160270,160272,160274,160276,160278,160280,160282],{"class":400,"line":401},[398,160267,3301],{"class":404},[398,160269,9715],{"class":408},[398,160271,26236],{"class":404},[398,160273,32636],{"class":457},[398,160275,409],{"class":408},[398,160277,619],{"class":457},[398,160279,12712],{"class":408},[398,160281,695],{"class":457},[398,160283,30979],{"class":408},[398,160285,160286,160288,160290,160292,160294,160296,160298,160300,160302],{"class":400,"line":317},[398,160287,3477],{"class":404},[398,160289,9777],{"class":408},[398,160291,26236],{"class":404},[398,160293,32636],{"class":457},[398,160295,409],{"class":408},[398,160297,619],{"class":457},[398,160299,12712],{"class":408},[398,160301,695],{"class":457},[398,160303,30979],{"class":408},[398,160305,160306,160308,160310,160312,160315,160317,160319,160321,160324,160326,160328,160330,160332],{"class":400,"line":320},[398,160307,32644],{"class":457},[398,160309,409],{"class":408},[398,160311,461],{"class":404},[398,160313,160314],{"class":513},"\"i=",[398,160316,1298],{"class":457},[398,160318,843],{"class":408},[398,160320,1348],{"class":457},[398,160322,160323],{"class":513},", j=",[398,160325,1298],{"class":457},[398,160327,869],{"class":408},[398,160329,1348],{"class":457},[398,160331,653],{"class":513},[398,160333,415],{"class":408},[19,160335,160336],{},"外层循环执行一次，内层循环执行完整一轮。",[343,160338,160340],{"id":160339},"_410-九九乘法表","4.10 九九乘法表",[389,160342,160344],{"className":30571,"code":160343,"language":30573,"meta":316,"style":316},"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",[395,160345,160346,160366,160389,160441],{"__ignoreMap":316},[398,160347,160348,160350,160352,160354,160356,160358,160360,160362,160364],{"class":400,"line":401},[398,160349,3301],{"class":404},[398,160351,9715],{"class":408},[398,160353,26236],{"class":404},[398,160355,32636],{"class":457},[398,160357,409],{"class":408},[398,160359,619],{"class":457},[398,160361,12712],{"class":408},[398,160363,848],{"class":457},[398,160365,30979],{"class":408},[398,160367,160368,160370,160372,160374,160376,160378,160380,160383,160385,160387],{"class":400,"line":317},[398,160369,3477],{"class":404},[398,160371,9777],{"class":408},[398,160373,26236],{"class":404},[398,160375,32636],{"class":457},[398,160377,409],{"class":408},[398,160379,619],{"class":457},[398,160381,160382],{"class":408},", i ",[398,160384,883],{"class":404},[398,160386,25396],{"class":457},[398,160388,30979],{"class":408},[398,160390,160391,160393,160395,160397,160399,160401,160403,160405,160407,160409,160411,160413,160415,160417,160419,160421,160423,160425,160427,160429,160431,160433,160435,160437,160439],{"class":400,"line":320},[398,160392,32644],{"class":457},[398,160394,409],{"class":408},[398,160396,461],{"class":404},[398,160398,653],{"class":513},[398,160400,1298],{"class":457},[398,160402,869],{"class":408},[398,160404,1348],{"class":457},[398,160406,857],{"class":513},[398,160408,1298],{"class":457},[398,160410,843],{"class":408},[398,160412,1348],{"class":457},[398,160414,454],{"class":513},[398,160416,1298],{"class":457},[398,160418,100341],{"class":408},[398,160420,857],{"class":404},[398,160422,3686],{"class":408},[398,160424,1348],{"class":457},[398,160426,653],{"class":513},[398,160428,12712],{"class":408},[398,160430,45994],{"class":5493},[398,160432,454],{"class":404},[398,160434,653],{"class":513},[398,160436,1506],{"class":457},[398,160438,653],{"class":513},[398,160440,415],{"class":408},[398,160442,160443,160445],{"class":400,"line":1470},[398,160444,31492],{"class":457},[398,160446,2252],{"class":408},[19,160448,160449],{},"关键点：",[38,160451,160452,160458,160464,160470],{},[41,160453,160454,160455,160457],{},"外层 ",[395,160456,843],{}," 控制行。",[41,160459,160460,160461,160463],{},"内层 ",[395,160462,869],{}," 控制列。",[41,160465,160466,160467,160469],{},"每行结束后用 ",[395,160468,146665],{}," 换行。",[41,160471,160472,160475],{},[395,160473,160474],{},"end=\"\\t\""," 让同一行的内容横向排列。",[343,160477,160479],{"id":160478},"_411-循环else","4.11 循环else",[19,160481,160482,160483,160485,160486,160488,160489,160491],{},"Python 的循环可以带 ",[395,160484,1977],{},"。当循环正常结束时执行 ",[395,160487,1977],{},"，如果被 ",[395,160490,2329],{}," 打断，则不执行。",[389,160493,160495],{"className":30571,"code":160494,"language":30573,"meta":316,"style":316},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[395,160496,160497,160517,160529,160540,160544,160550],{"__ignoreMap":316},[398,160498,160499,160501,160503,160505,160507,160509,160511,160513,160515],{"class":400,"line":401},[398,160500,3301],{"class":404},[398,160502,9715],{"class":408},[398,160504,26236],{"class":404},[398,160506,32636],{"class":457},[398,160508,409],{"class":408},[398,160510,619],{"class":457},[398,160512,12712],{"class":408},[398,160514,746],{"class":457},[398,160516,30979],{"class":408},[398,160518,160519,160521,160523,160525,160527],{"class":400,"line":317},[398,160520,3377],{"class":404},[398,160522,9715],{"class":408},[398,160524,3225],{"class":404},[398,160526,2314],{"class":457},[398,160528,4015],{"class":408},[398,160530,160531,160533,160535,160538],{"class":400,"line":320},[398,160532,32644],{"class":457},[398,160534,409],{"class":408},[398,160536,160537],{"class":513},"\"找到了\"",[398,160539,415],{"class":408},[398,160541,160542],{"class":400,"line":1470},[398,160543,31820],{"class":404},[398,160545,160546,160548],{"class":400,"line":1476},[398,160547,1977],{"class":404},[398,160549,4015],{"class":408},[398,160551,160552,160554,160556,160559],{"class":400,"line":1490},[398,160553,31492],{"class":457},[398,160555,409],{"class":408},[398,160557,160558],{"class":513},"\"没找到\"",[398,160560,415],{"class":408},[19,160562,160563],{},"常用于搜索。",[389,160565,160567],{"className":30571,"code":160566,"language":30573,"meta":316,"style":316},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[395,160568,160569,160590,160599,160603,160615,160626,160636,160640,160646],{"__ignoreMap":316},[398,160570,160571,160574,160576,160578,160580,160582,160584,160586,160588],{"class":400,"line":401},[398,160572,160573],{"class":408},"names ",[398,160575,454],{"class":404},[398,160577,52419],{"class":408},[398,160579,150081],{"class":513},[398,160581,12712],{"class":408},[398,160583,151129],{"class":513},[398,160585,12712],{"class":408},[398,160587,159924],{"class":513},[398,160589,33439],{"class":408},[398,160591,160592,160594,160596],{"class":400,"line":317},[398,160593,111771],{"class":408},[398,160595,454],{"class":404},[398,160597,160598],{"class":513}," \"小李\"\n",[398,160600,160601],{"class":400,"line":320},[398,160602,2676],{"emptyLinePlaceholder":328},[398,160604,160605,160607,160610,160612],{"class":400,"line":1470},[398,160606,3301],{"class":404},[398,160608,160609],{"class":408}," name ",[398,160611,26236],{"class":404},[398,160613,160614],{"class":408}," names:\n",[398,160616,160617,160619,160621,160623],{"class":400,"line":1476},[398,160618,3377],{"class":404},[398,160620,160609],{"class":408},[398,160622,3225],{"class":404},[398,160624,160625],{"class":408}," target:\n",[398,160627,160628,160630,160632,160634],{"class":400,"line":1490},[398,160629,32644],{"class":457},[398,160631,409],{"class":408},[398,160633,160537],{"class":513},[398,160635,415],{"class":408},[398,160637,160638],{"class":400,"line":1496},[398,160639,31820],{"class":404},[398,160641,160642,160644],{"class":400,"line":1587},[398,160643,1977],{"class":404},[398,160645,4015],{"class":408},[398,160647,160648,160650,160652,160654],{"class":400,"line":1593},[398,160649,31492],{"class":457},[398,160651,409],{"class":408},[398,160653,160558],{"class":513},[398,160655,415],{"class":408},[343,160657,160659],{"id":160658},"_412-小案例登录重试","4.12 小案例：登录重试",[19,160661,123485],{},[38,160663,160664,160667,160670],{},[41,160665,160666],{},"用户最多输入 3 次密码。",[41,160668,160669],{},"密码正确则登录成功。",[41,160671,160672],{},"3 次都错误则锁定账号。",[19,160674,10312],{},[389,160676,160678],{"className":30571,"code":160677,"language":30573,"meta":316,"style":316},"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",[395,160679,160680,160690,160694,160710,160726,160730,160742,160753,160757,160763,160788,160794],{"__ignoreMap":316},[398,160681,160682,160685,160687],{"class":400,"line":401},[398,160683,160684],{"class":408},"password ",[398,160686,454],{"class":404},[398,160688,160689],{"class":513}," \"123456\"\n",[398,160691,160692],{"class":400,"line":317},[398,160693,2676],{"emptyLinePlaceholder":328},[398,160695,160696,160698,160700,160702,160704,160706,160708],{"class":400,"line":320},[398,160697,3301],{"class":404},[398,160699,9715],{"class":408},[398,160701,26236],{"class":404},[398,160703,32636],{"class":457},[398,160705,409],{"class":408},[398,160707,480],{"class":457},[398,160709,30979],{"class":408},[398,160711,160712,160715,160717,160719,160721,160724],{"class":400,"line":1470},[398,160713,160714],{"class":408},"    user_password ",[398,160716,454],{"class":404},[398,160718,60798],{"class":457},[398,160720,409],{"class":408},[398,160722,160723],{"class":513},"\"请输入密码:\"",[398,160725,415],{"class":408},[398,160727,160728],{"class":400,"line":1476},[398,160729,2676],{"emptyLinePlaceholder":328},[398,160731,160732,160734,160737,160739],{"class":400,"line":1490},[398,160733,3377],{"class":404},[398,160735,160736],{"class":408}," user_password ",[398,160738,3225],{"class":404},[398,160740,160741],{"class":408}," password:\n",[398,160743,160744,160746,160748,160751],{"class":400,"line":1496},[398,160745,32644],{"class":457},[398,160747,409],{"class":408},[398,160749,160750],{"class":513},"\"登录成功\"",[398,160752,415],{"class":408},[398,160754,160755],{"class":400,"line":1587},[398,160756,31820],{"class":404},[398,160758,160759,160761],{"class":400,"line":1593},[398,160760,158215],{"class":404},[398,160762,4015],{"class":408},[398,160764,160765,160767,160769,160771,160774,160777,160779,160781,160783,160786],{"class":400,"line":1605},[398,160766,32644],{"class":457},[398,160768,409],{"class":408},[398,160770,461],{"class":404},[398,160772,160773],{"class":513},"\"密码错误，还剩",[398,160775,160776],{"class":457},"{2",[398,160778,52464],{"class":404},[398,160780,3308],{"class":408},[398,160782,1348],{"class":457},[398,160784,160785],{"class":513},"次机会\"",[398,160787,415],{"class":408},[398,160789,160790,160792],{"class":400,"line":1888},[398,160791,1977],{"class":404},[398,160793,4015],{"class":408},[398,160795,160796,160798,160800,160803],{"class":400,"line":1893},[398,160797,31492],{"class":457},[398,160799,409],{"class":408},[398,160801,160802],{"class":513},"\"账号已锁定\"",[398,160804,415],{"class":408},[343,160806,160808],{"id":160807},"_413-小案例菜单程序","4.13 小案例：菜单程序",[389,160810,160812],{"className":30571,"code":160811,"language":30573,"meta":316,"style":316},"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",[395,160813,160814,160822,160833,160844,160855,160866,160877,160881,160896,160900,160912,160923,160935,160946,160958,160969,160981,160991,160995,161001],{"__ignoreMap":316},[398,160815,160816,160818,160820],{"class":400,"line":401},[398,160817,108856],{"class":404},[398,160819,95485],{"class":457},[398,160821,4015],{"class":408},[398,160823,160824,160826,160828,160831],{"class":400,"line":317},[398,160825,31492],{"class":457},[398,160827,409],{"class":408},[398,160829,160830],{"class":513},"\"====== 菜单 ======\"",[398,160832,415],{"class":408},[398,160834,160835,160837,160839,160842],{"class":400,"line":320},[398,160836,31492],{"class":457},[398,160838,409],{"class":408},[398,160840,160841],{"class":513},"\"1. 查询余额\"",[398,160843,415],{"class":408},[398,160845,160846,160848,160850,160853],{"class":400,"line":1470},[398,160847,31492],{"class":457},[398,160849,409],{"class":408},[398,160851,160852],{"class":513},"\"2. 存款\"",[398,160854,415],{"class":408},[398,160856,160857,160859,160861,160864],{"class":400,"line":1476},[398,160858,31492],{"class":457},[398,160860,409],{"class":408},[398,160862,160863],{"class":513},"\"3. 取款\"",[398,160865,415],{"class":408},[398,160867,160868,160870,160872,160875],{"class":400,"line":1490},[398,160869,31492],{"class":457},[398,160871,409],{"class":408},[398,160873,160874],{"class":513},"\"0. 退出\"",[398,160876,415],{"class":408},[398,160878,160879],{"class":400,"line":1496},[398,160880,2676],{"emptyLinePlaceholder":328},[398,160882,160883,160886,160888,160890,160892,160894],{"class":400,"line":1587},[398,160884,160885],{"class":408},"    choice ",[398,160887,454],{"class":404},[398,160889,60798],{"class":457},[398,160891,409],{"class":408},[398,160893,153266],{"class":513},[398,160895,415],{"class":408},[398,160897,160898],{"class":400,"line":1593},[398,160899,2676],{"emptyLinePlaceholder":328},[398,160901,160902,160904,160906,160908,160910],{"class":400,"line":1605},[398,160903,3377],{"class":404},[398,160905,153279],{"class":408},[398,160907,3225],{"class":404},[398,160909,153284],{"class":513},[398,160911,4015],{"class":408},[398,160913,160914,160916,160918,160921],{"class":400,"line":1888},[398,160915,32644],{"class":457},[398,160917,409],{"class":408},[398,160919,160920],{"class":513},"\"余额为1000元\"",[398,160922,415],{"class":408},[398,160924,160925,160927,160929,160931,160933],{"class":400,"line":1893},[398,160926,39486],{"class":404},[398,160928,153279],{"class":408},[398,160930,3225],{"class":404},[398,160932,153303],{"class":513},[398,160934,4015],{"class":408},[398,160936,160937,160939,160941,160944],{"class":400,"line":1899},[398,160938,32644],{"class":457},[398,160940,409],{"class":408},[398,160942,160943],{"class":513},"\"存款功能\"",[398,160945,415],{"class":408},[398,160947,160948,160950,160952,160954,160956],{"class":400,"line":1904},[398,160949,39486],{"class":404},[398,160951,153279],{"class":408},[398,160953,3225],{"class":404},[398,160955,153321],{"class":513},[398,160957,4015],{"class":408},[398,160959,160960,160962,160964,160967],{"class":400,"line":1918},[398,160961,32644],{"class":457},[398,160963,409],{"class":408},[398,160965,160966],{"class":513},"\"取款功能\"",[398,160968,415],{"class":408},[398,160970,160971,160973,160975,160977,160979],{"class":400,"line":1923},[398,160972,39486],{"class":404},[398,160974,153279],{"class":408},[398,160976,3225],{"class":404},[398,160978,153375],{"class":513},[398,160980,4015],{"class":408},[398,160982,160983,160985,160987,160989],{"class":400,"line":1929},[398,160984,32644],{"class":457},[398,160986,409],{"class":408},[398,160988,153386],{"class":513},[398,160990,415],{"class":408},[398,160992,160993],{"class":400,"line":1950},[398,160994,31820],{"class":404},[398,160996,160997,160999],{"class":400,"line":1955},[398,160998,158215],{"class":404},[398,161000,4015],{"class":408},[398,161002,161003,161005,161007,161009],{"class":400,"line":1969},[398,161004,32644],{"class":457},[398,161006,409],{"class":408},[398,161008,153407],{"class":513},[398,161010,415],{"class":408},[19,161012,161013,161014,161016,161017,28578],{},"菜单类程序通常使用 ",[395,161015,159715],{},"，用户选择退出时 ",[395,161018,2329],{},[343,161020,161022],{"id":161021},"_414-易错点","4.14 易错点",[38,161024,161025,161030,161036,161044,161050],{},[41,161026,161027,161029],{},[395,161028,108856],{}," 循环必须更新控制变量。",[41,161031,161032,161035],{},[395,161033,161034],{},"range(1, 10)"," 不包含 10。",[41,161037,161038,161040,161041,161043],{},[395,161039,2329],{}," 结束整个循环，",[395,161042,154865],{}," 只跳过本轮。",[41,161045,161046,161047,161049],{},"嵌套循环中，",[395,161048,2329],{}," 只跳出当前所在的一层循环。",[41,161051,161052],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[343,161054,161056],{"id":161055},"_415-本章练习","4.15 本章练习",[38,161058,161059,161062,161065,161068,161071],{},[41,161060,161061],{},"输出 1 到 100。",[41,161063,161064],{},"计算 1 到 100 的偶数和。",[41,161066,161067],{},"输出 100 以内能被 3 和 5 同时整除的数。",[41,161069,161070],{},"编写猜数字游戏，限制最多猜 7 次。",[41,161072,161073],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[5403,161075,161076],{},"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":316,"searchDepth":317,"depth":317,"links":161078},[161079,161080,161081,161082,161083,161087,161088,161089,161090,161091,161092,161093,161094,161095,161096],{"id":159335,"depth":317,"text":159336},{"id":159365,"depth":317,"text":159366},{"id":159454,"depth":317,"text":159455},{"id":159548,"depth":317,"text":159549},{"id":159722,"depth":317,"text":159723,"children":161084},[161085,161086],{"id":159726,"depth":320,"text":159727},{"id":159790,"depth":320,"text":159791},{"id":159854,"depth":317,"text":159855},{"id":159949,"depth":317,"text":159950},{"id":160058,"depth":317,"text":160059},{"id":160254,"depth":317,"text":160255},{"id":160339,"depth":317,"text":160340},{"id":160478,"depth":317,"text":160479},{"id":160658,"depth":317,"text":160659},{"id":160807,"depth":317,"text":160808},{"id":161021,"depth":317,"text":161022},{"id":161055,"depth":317,"text":161056},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159327,"description":23654},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":161103,"title":161104,"body":161105,"description":23654,"extension":326,"meta":163110,"navigation":328,"path":163111,"seo":163112,"stem":163113,"__hash__":163114},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":161106,"toc":163090},[161107,161110,161114,161117,161120,161134,161137,161151,161155,161157,161176,161178,161225,161227,161241,161245,161319,161322,161326,161329,161388,161396,161399,161452,161455,161459,161464,161519,161527,161577,161581,161586,161594,161693,161699,161703,161708,161711,161722,161763,161776,161780,161783,161819,161822,161835,161838,161898,161902,161906,161909,161960,161964,161967,162014,162020,162086,162089,162093,162096,162212,162215,162219,162222,162328,162332,162335,162373,162376,162418,162421,162481,162484,162488,162952,162955,162959,162986,162992,163053,163057,163087],[10,161108,161104],{"id":161109},"_5-函数基础",[343,161111,161113],{"id":161112},"_51-为什么需要函数","5.1 为什么需要函数",[19,161115,161116],{},"函数用于封装一段可以重复使用的代码。",[19,161118,161119],{},"不使用函数的问题：",[38,161121,161122,161125,161128,161131],{},[41,161123,161124],{},"重复代码多。",[41,161126,161127],{},"修改逻辑时容易漏改。",[41,161129,161130],{},"主流程不清晰。",[41,161132,161133],{},"程序越写越长，难以维护。",[19,161135,161136],{},"使用函数后的好处：",[38,161138,161139,161142,161145,161148],{},[41,161140,161141],{},"提高复用性。",[41,161143,161144],{},"提高可读性。",[41,161146,161147],{},"便于调试。",[41,161149,161150],{},"便于分工。",[343,161152,161154],{"id":161153},"_52-函数定义","5.2 函数定义",[19,161156,5458],{},[389,161158,161160],{"className":30571,"code":161159,"language":30573,"meta":316,"style":316},"def 函数名():\n    函数体\n",[395,161161,161162,161171],{"__ignoreMap":316},[398,161163,161164,161166,161169],{"class":400,"line":401},[398,161165,32140],{"class":404},[398,161167,161168],{"class":2239}," 函数名",[398,161170,32146],{"class":408},[398,161172,161173],{"class":400,"line":317},[398,161174,161175],{"class":408},"    函数体\n",[19,161177,15412],{},[389,161179,161181],{"className":30571,"code":161180,"language":30573,"meta":316,"style":316},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[395,161182,161183,161192,161202,161212,161216,161220],{"__ignoreMap":316},[398,161184,161185,161187,161190],{"class":400,"line":401},[398,161186,32140],{"class":404},[398,161188,161189],{"class":2239}," say_hello",[398,161191,32146],{"class":408},[398,161193,161194,161196,161198,161200],{"class":400,"line":317},[398,161195,31492],{"class":457},[398,161197,409],{"class":408},[398,161199,6121],{"class":513},[398,161201,415],{"class":408},[398,161203,161204,161206,161208,161210],{"class":400,"line":320},[398,161205,31492],{"class":457},[398,161207,409],{"class":408},[398,161209,146832],{"class":513},[398,161211,415],{"class":408},[398,161213,161214],{"class":400,"line":1470},[398,161215,2676],{"emptyLinePlaceholder":328},[398,161217,161218],{"class":400,"line":1476},[398,161219,2676],{"emptyLinePlaceholder":328},[398,161221,161222],{"class":400,"line":1490},[398,161223,161224],{"class":408},"say_hello()\n",[19,161226,9302],{},[38,161228,161229,161232,161235,161238],{},[41,161230,161231],{},"函数必须先定义，再调用。",[41,161233,161234],{},"函数名遵循变量命名规则。",[41,161236,161237],{},"函数体需要缩进。",[41,161239,161240],{},"函数不调用就不会执行。",[343,161242,161244],{"id":161243},"_53-函数调用","5.3 函数调用",[389,161246,161248],{"className":30571,"code":161247,"language":30573,"meta":316,"style":316},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[395,161249,161250,161259,161270,161281,161292,161302,161306,161310,161315],{"__ignoreMap":316},[398,161251,161252,161254,161257],{"class":400,"line":401},[398,161253,32140],{"class":404},[398,161255,161256],{"class":2239}," print_menu",[398,161258,32146],{"class":408},[398,161260,161261,161263,161265,161268],{"class":400,"line":317},[398,161262,31492],{"class":457},[398,161264,409],{"class":408},[398,161266,161267],{"class":513},"\"1. 查询\"",[398,161269,415],{"class":408},[398,161271,161272,161274,161276,161279],{"class":400,"line":320},[398,161273,31492],{"class":457},[398,161275,409],{"class":408},[398,161277,161278],{"class":513},"\"2. 添加\"",[398,161280,415],{"class":408},[398,161282,161283,161285,161287,161290],{"class":400,"line":1470},[398,161284,31492],{"class":457},[398,161286,409],{"class":408},[398,161288,161289],{"class":513},"\"3. 删除\"",[398,161291,415],{"class":408},[398,161293,161294,161296,161298,161300],{"class":400,"line":1476},[398,161295,31492],{"class":457},[398,161297,409],{"class":408},[398,161299,160874],{"class":513},[398,161301,415],{"class":408},[398,161303,161304],{"class":400,"line":1490},[398,161305,2676],{"emptyLinePlaceholder":328},[398,161307,161308],{"class":400,"line":1496},[398,161309,2676],{"emptyLinePlaceholder":328},[398,161311,161312],{"class":400,"line":1587},[398,161313,161314],{"class":408},"print_menu()\n",[398,161316,161317],{"class":400,"line":1593},[398,161318,161314],{"class":408},[19,161320,161321],{},"函数可以多次调用，每次调用都会执行函数体。",[343,161323,161325],{"id":161324},"_54-参数","5.4 参数",[19,161327,161328],{},"参数用于向函数传递数据。",[389,161330,161332],{"className":30571,"code":161331,"language":30573,"meta":316,"style":316},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[395,161333,161334,161343,161363,161367,161371,161380],{"__ignoreMap":316},[398,161335,161336,161338,161340],{"class":400,"line":401},[398,161337,32140],{"class":404},[398,161339,161189],{"class":2239},[398,161341,161342],{"class":408},"(name):\n",[398,161344,161345,161347,161349,161351,161353,161355,161357,161359,161361],{"class":400,"line":317},[398,161346,31492],{"class":457},[398,161348,409],{"class":408},[398,161350,461],{"class":404},[398,161352,157247],{"class":513},[398,161354,1298],{"class":457},[398,161356,80003],{"class":408},[398,161358,1348],{"class":457},[398,161360,653],{"class":513},[398,161362,415],{"class":408},[398,161364,161365],{"class":400,"line":320},[398,161366,2676],{"emptyLinePlaceholder":328},[398,161368,161369],{"class":400,"line":1470},[398,161370,2676],{"emptyLinePlaceholder":328},[398,161372,161373,161376,161378],{"class":400,"line":1476},[398,161374,161375],{"class":408},"say_hello(",[398,161377,150081],{"class":513},[398,161379,415],{"class":408},[398,161381,161382,161384,161386],{"class":400,"line":1490},[398,161383,161375],{"class":408},[398,161385,151129],{"class":513},[398,161387,415],{"class":408},[19,161389,161390,161392,161393,161395],{},[395,161391,80003],{}," 是形参，",[395,161394,150081],{}," 是实参。",[19,161397,161398],{},"多个参数：",[389,161400,161402],{"className":30571,"code":161401,"language":30573,"meta":316,"style":316},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[395,161403,161404,161412,161425,161431,161435,161439],{"__ignoreMap":316},[398,161405,161406,161408,161410],{"class":400,"line":401},[398,161407,32140],{"class":404},[398,161409,5486],{"class":2239},[398,161411,151286],{"class":408},[398,161413,161414,161417,161419,161421,161423],{"class":400,"line":317},[398,161415,161416],{"class":408},"    result ",[398,161418,454],{"class":404},[398,161420,11146],{"class":408},[398,161422,883],{"class":404},[398,161424,151297],{"class":408},[398,161426,161427,161429],{"class":400,"line":320},[398,161428,31492],{"class":457},[398,161430,76778],{"class":408},[398,161432,161433],{"class":400,"line":1470},[398,161434,2676],{"emptyLinePlaceholder":328},[398,161436,161437],{"class":400,"line":1476},[398,161438,2676],{"emptyLinePlaceholder":328},[398,161440,161441,161444,161446,161448,161450],{"class":400,"line":1490},[398,161442,161443],{"class":408},"add(",[398,161445,848],{"class":457},[398,161447,12712],{"class":408},[398,161449,1102],{"class":457},[398,161451,415],{"class":408},[19,161453,161454],{},"调用时参数数量必须匹配。",[343,161456,161458],{"id":161457},"_55-返回值","5.5 返回值",[19,161460,161461,161463],{},[395,161462,17323],{}," 用于把函数内部的结果返回给调用者。",[389,161465,161467],{"className":30571,"code":161466,"language":30573,"meta":316,"style":316},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[395,161468,161469,161477,161487,161491,161495,161513],{"__ignoreMap":316},[398,161470,161471,161473,161475],{"class":400,"line":401},[398,161472,32140],{"class":404},[398,161474,5486],{"class":2239},[398,161476,151286],{"class":408},[398,161478,161479,161481,161483,161485],{"class":400,"line":317},[398,161480,4366],{"class":404},[398,161482,11146],{"class":408},[398,161484,883],{"class":404},[398,161486,151297],{"class":408},[398,161488,161489],{"class":400,"line":320},[398,161490,2676],{"emptyLinePlaceholder":328},[398,161492,161493],{"class":400,"line":1470},[398,161494,2676],{"emptyLinePlaceholder":328},[398,161496,161497,161500,161502,161505,161507,161509,161511],{"class":400,"line":1476},[398,161498,161499],{"class":408},"result ",[398,161501,454],{"class":404},[398,161503,161504],{"class":408}," add(",[398,161506,848],{"class":457},[398,161508,12712],{"class":408},[398,161510,1102],{"class":457},[398,161512,415],{"class":408},[398,161514,161515,161517],{"class":400,"line":1490},[398,161516,30608],{"class":457},[398,161518,76778],{"class":408},[19,161520,161521,161522,161524,161525,28578],{},"如果函数没有写 ",[395,161523,17323],{},"，默认返回 ",[395,161526,95879],{},[389,161528,161530],{"className":30571,"code":161529,"language":30573,"meta":316,"style":316},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[395,161531,161532,161540,161550,161554,161558,161567],{"__ignoreMap":316},[398,161533,161534,161536,161538],{"class":400,"line":401},[398,161535,32140],{"class":404},[398,161537,161189],{"class":2239},[398,161539,32146],{"class":408},[398,161541,161542,161544,161546,161548],{"class":400,"line":317},[398,161543,31492],{"class":457},[398,161545,409],{"class":408},[398,161547,6121],{"class":513},[398,161549,415],{"class":408},[398,161551,161552],{"class":400,"line":320},[398,161553,2676],{"emptyLinePlaceholder":328},[398,161555,161556],{"class":400,"line":1470},[398,161557,2676],{"emptyLinePlaceholder":328},[398,161559,161560,161562,161564],{"class":400,"line":1476},[398,161561,161499],{"class":408},[398,161563,454],{"class":404},[398,161565,161566],{"class":408}," say_hello()\n",[398,161568,161569,161571,161574],{"class":400,"line":1490},[398,161570,30608],{"class":457},[398,161572,161573],{"class":408},"(result)  ",[398,161575,161576],{"class":467},"# None\n",[343,161578,161580],{"id":161579},"_56-return的作用","5.6 return的作用",[19,161582,161583,161585],{},[395,161584,17323],{}," 有两个作用：",[38,161587,161588,161591],{},[41,161589,161590],{},"返回结果。",[41,161592,161593],{},"结束函数。",[389,161595,161597],{"className":30571,"code":161596,"language":30573,"meta":316,"style":316},"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",[395,161598,161599,161609,161621,161628,161632,161644,161651,161655,161662,161666,161670,161681],{"__ignoreMap":316},[398,161600,161601,161603,161606],{"class":400,"line":401},[398,161602,32140],{"class":404},[398,161604,161605],{"class":2239}," check_age",[398,161607,161608],{"class":408},"(age):\n",[398,161610,161611,161613,161615,161617,161619],{"class":400,"line":317},[398,161612,3377],{"class":404},[398,161614,15984],{"class":408},[398,161616,1312],{"class":404},[398,161618,4369],{"class":457},[398,161620,4015],{"class":408},[398,161622,161623,161625],{"class":400,"line":320},[398,161624,15029],{"class":404},[398,161626,161627],{"class":513}," \"年龄不合法\"\n",[398,161629,161630],{"class":400,"line":1470},[398,161631,2676],{"emptyLinePlaceholder":328},[398,161633,161634,161636,161638,161640,161642],{"class":400,"line":1476},[398,161635,3377],{"class":404},[398,161637,15984],{"class":408},[398,161639,1986],{"class":404},[398,161641,156478],{"class":457},[398,161643,4015],{"class":408},[398,161645,161646,161648],{"class":400,"line":1490},[398,161647,15029],{"class":404},[398,161649,161650],{"class":513}," \"成年人\"\n",[398,161652,161653],{"class":400,"line":1496},[398,161654,2676],{"emptyLinePlaceholder":328},[398,161656,161657,161659],{"class":400,"line":1587},[398,161658,4366],{"class":404},[398,161660,161661],{"class":513}," \"未成年人\"\n",[398,161663,161664],{"class":400,"line":1593},[398,161665,2676],{"emptyLinePlaceholder":328},[398,161667,161668],{"class":400,"line":1605},[398,161669,2676],{"emptyLinePlaceholder":328},[398,161671,161672,161674,161677,161679],{"class":400,"line":1888},[398,161673,30608],{"class":457},[398,161675,161676],{"class":408},"(check_age(",[398,161678,1102],{"class":457},[398,161680,30690],{"class":408},[398,161682,161683,161685,161687,161689,161691],{"class":400,"line":1893},[398,161684,30608],{"class":457},[398,161686,161676],{"class":408},[398,161688,934],{"class":404},[398,161690,619],{"class":457},[398,161692,30690],{"class":408},[19,161694,161695,161696,161698],{},"函数执行到 ",[395,161697,17323],{}," 后，后面的代码不会继续执行。",[343,161700,161702],{"id":161701},"_57-none","5.7 None",[19,161704,161705,161707],{},[395,161706,95879],{}," 表示空值或没有结果。",[19,161709,161710],{},"常见使用场景：",[38,161712,161713,161716,161719],{},[41,161714,161715],{},"函数没有返回值。",[41,161717,161718],{},"变量暂时没有具体值。",[41,161720,161721],{},"表示查询不到结果。",[389,161723,161725],{"className":30571,"code":161724,"language":30573,"meta":316,"style":316},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[395,161726,161727,161735,161739,161752],{"__ignoreMap":316},[398,161728,161729,161731,161733],{"class":400,"line":401},[398,161730,161499],{"class":408},[398,161732,454],{"class":404},[398,161734,152365],{"class":457},[398,161736,161737],{"class":400,"line":317},[398,161738,2676],{"emptyLinePlaceholder":328},[398,161740,161741,161743,161746,161748,161750],{"class":400,"line":320},[398,161742,1807],{"class":404},[398,161744,161745],{"class":408}," result ",[398,161747,39120],{"class":404},[398,161749,39126],{"class":457},[398,161751,4015],{"class":408},[398,161753,161754,161756,161758,161761],{"class":400,"line":1470},[398,161755,31492],{"class":457},[398,161757,409],{"class":408},[398,161759,161760],{"class":513},"\"没有数据\"",[398,161762,415],{"class":408},[19,161764,161765,161766,161768,161769,161772,161773,28578],{},"判断 ",[395,161767,95879],{}," 推荐使用 ",[395,161770,161771],{},"is None","，不要写成 ",[395,161774,161775],{},"== None",[343,161777,161779],{"id":161778},"_58-函数文档字符串","5.8 函数文档字符串",[19,161781,161782],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[389,161784,161786],{"className":30571,"code":161785,"language":30573,"meta":316,"style":316},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[395,161787,161788,161798,161803],{"__ignoreMap":316},[398,161789,161790,161792,161795],{"class":400,"line":401},[398,161791,32140],{"class":404},[398,161793,161794],{"class":2239}," calculate_bmi",[398,161796,161797],{"class":408},"(weight, height):\n",[398,161799,161800],{"class":400,"line":317},[398,161801,161802],{"class":513},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[398,161804,161805,161807,161810,161812,161815,161817],{"class":400,"line":320},[398,161806,4366],{"class":404},[398,161808,161809],{"class":408}," weight ",[398,161811,986],{"class":404},[398,161813,161814],{"class":408}," height ",[398,161816,10938],{"class":404},[398,161818,47916],{"class":457},[19,161820,161821],{},"查看说明：",[389,161823,161825],{"className":30571,"code":161824,"language":30573,"meta":316,"style":316},"help(calculate_bmi)\n",[395,161826,161827],{"__ignoreMap":316},[398,161828,161829,161832],{"class":400,"line":401},[398,161830,161831],{"class":457},"help",[398,161833,161834],{"class":408},"(calculate_bmi)\n",[19,161836,161837],{},"较完整的写法：",[389,161839,161841],{"className":30571,"code":161840,"language":30573,"meta":316,"style":316},"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",[395,161842,161843,161851,161856,161861,161865,161870,161875,161880,161884],{"__ignoreMap":316},[398,161844,161845,161847,161849],{"class":400,"line":401},[398,161846,32140],{"class":404},[398,161848,161794],{"class":2239},[398,161850,161797],{"class":408},[398,161852,161853],{"class":400,"line":317},[398,161854,161855],{"class":513},"    \"\"\"\n",[398,161857,161858],{"class":400,"line":320},[398,161859,161860],{"class":513},"    计算BMI。\n",[398,161862,161863],{"class":400,"line":1470},[398,161864,2676],{"emptyLinePlaceholder":328},[398,161866,161867],{"class":400,"line":1476},[398,161868,161869],{"class":513},"    :param weight: 体重，单位kg\n",[398,161871,161872],{"class":400,"line":1490},[398,161873,161874],{"class":513},"    :param height: 身高，单位m\n",[398,161876,161877],{"class":400,"line":1496},[398,161878,161879],{"class":513},"    :return: BMI数值\n",[398,161881,161882],{"class":400,"line":1587},[398,161883,161855],{"class":513},[398,161885,161886,161888,161890,161892,161894,161896],{"class":400,"line":1593},[398,161887,4366],{"class":404},[398,161889,161809],{"class":408},[398,161891,986],{"class":404},[398,161893,161814],{"class":408},[398,161895,10938],{"class":404},[398,161897,47916],{"class":457},[343,161899,161901],{"id":161900},"_59-变量作用域","5.9 变量作用域",[14,161903,161905],{"id":161904},"_591-局部变量","5.9.1 局部变量",[19,161907,161908],{},"在函数内部定义的变量，只能在函数内部使用。",[389,161910,161912],{"className":30571,"code":161911,"language":30573,"meta":316,"style":316},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[395,161913,161914,161923,161931,161937,161941,161945,161950],{"__ignoreMap":316},[398,161915,161916,161918,161921],{"class":400,"line":401},[398,161917,32140],{"class":404},[398,161919,161920],{"class":2239}," test",[398,161922,32146],{"class":408},[398,161924,161925,161927,161929],{"class":400,"line":317},[398,161926,45786],{"class":408},[398,161928,454],{"class":404},[398,161930,58621],{"class":457},[398,161932,161933,161935],{"class":400,"line":320},[398,161934,31492],{"class":457},[398,161936,422],{"class":408},[398,161938,161939],{"class":400,"line":1470},[398,161940,2676],{"emptyLinePlaceholder":328},[398,161942,161943],{"class":400,"line":1476},[398,161944,2676],{"emptyLinePlaceholder":328},[398,161946,161947],{"class":400,"line":1490},[398,161948,161949],{"class":408},"test()\n",[398,161951,161952,161954,161957],{"class":400,"line":1496},[398,161953,30608],{"class":457},[398,161955,161956],{"class":408},"(num)  ",[398,161958,161959],{"class":467},"# 报错\n",[14,161961,161963],{"id":161962},"_592-全局变量","5.9.2 全局变量",[19,161965,161966],{},"在函数外部定义的变量，可以在函数内部读取。",[389,161968,161970],{"className":30571,"code":161969,"language":30573,"meta":316,"style":316},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[395,161971,161972,161980,161984,161988,161996,162002,162006,162010],{"__ignoreMap":316},[398,161973,161974,161976,161978],{"class":400,"line":401},[398,161975,146729],{"class":408},[398,161977,454],{"class":404},[398,161979,149546],{"class":513},[398,161981,161982],{"class":400,"line":317},[398,161983,2676],{"emptyLinePlaceholder":328},[398,161985,161986],{"class":400,"line":320},[398,161987,2676],{"emptyLinePlaceholder":328},[398,161989,161990,161992,161994],{"class":400,"line":1470},[398,161991,32140],{"class":404},[398,161993,161189],{"class":2239},[398,161995,32146],{"class":408},[398,161997,161998,162000],{"class":400,"line":1476},[398,161999,31492],{"class":457},[398,162001,150853],{"class":408},[398,162003,162004],{"class":400,"line":1490},[398,162005,2676],{"emptyLinePlaceholder":328},[398,162007,162008],{"class":400,"line":1496},[398,162009,2676],{"emptyLinePlaceholder":328},[398,162011,162012],{"class":400,"line":1587},[398,162013,161224],{"class":408},[19,162015,162016,162017,28578],{},"如果要在函数内部修改全局变量，需要 ",[395,162018,162019],{},"global",[389,162021,162023],{"className":30571,"code":162022,"language":30573,"meta":316,"style":316},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[395,162024,162025,162033,162037,162041,162050,162058,162066,162070,162074,162079],{"__ignoreMap":316},[398,162026,162027,162029,162031],{"class":400,"line":401},[398,162028,146884],{"class":408},[398,162030,454],{"class":404},[398,162032,47526],{"class":457},[398,162034,162035],{"class":400,"line":317},[398,162036,2676],{"emptyLinePlaceholder":328},[398,162038,162039],{"class":400,"line":320},[398,162040,2676],{"emptyLinePlaceholder":328},[398,162042,162043,162045,162048],{"class":400,"line":1470},[398,162044,32140],{"class":404},[398,162046,162047],{"class":2239}," add_count",[398,162049,32146],{"class":408},[398,162051,162052,162055],{"class":400,"line":1476},[398,162053,162054],{"class":404},"    global",[398,162056,162057],{"class":408}," count\n",[398,162059,162060,162062,162064],{"class":400,"line":1490},[398,162061,159626],{"class":408},[398,162063,9754],{"class":404},[398,162065,55892],{"class":457},[398,162067,162068],{"class":400,"line":1496},[398,162069,2676],{"emptyLinePlaceholder":328},[398,162071,162072],{"class":400,"line":1587},[398,162073,2676],{"emptyLinePlaceholder":328},[398,162075,162076],{"class":400,"line":1593},[398,162077,162078],{"class":408},"add_count()\n",[398,162080,162081,162083],{"class":400,"line":1605},[398,162082,30608],{"class":457},[398,162084,162085],{"class":408},"(count)\n",[19,162087,162088],{},"不建议大量使用全局变量，项目变大后很难维护。",[343,162090,162092],{"id":162091},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,162094,162095],{},"一个函数中可以调用另一个函数。",[389,162097,162099],{"className":30571,"code":162098,"language":30573,"meta":316,"style":316},"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",[395,162100,162101,162110,162124,162128,162132,162141,162146,162166,162187,162191,162195,162199],{"__ignoreMap":316},[398,162102,162103,162105,162108],{"class":400,"line":401},[398,162104,32140],{"class":404},[398,162106,162107],{"class":2239}," print_line",[398,162109,32146],{"class":408},[398,162111,162112,162114,162116,162118,162120,162122],{"class":400,"line":317},[398,162113,31492],{"class":457},[398,162115,409],{"class":408},[398,162117,32676],{"class":513},[398,162119,6795],{"class":404},[398,162121,78858],{"class":457},[398,162123,415],{"class":408},[398,162125,162126],{"class":400,"line":320},[398,162127,2676],{"emptyLinePlaceholder":328},[398,162129,162130],{"class":400,"line":1470},[398,162131,2676],{"emptyLinePlaceholder":328},[398,162133,162134,162136,162139],{"class":400,"line":1476},[398,162135,32140],{"class":404},[398,162137,162138],{"class":2239}," print_info",[398,162140,149568],{"class":408},[398,162142,162143],{"class":400,"line":1490},[398,162144,162145],{"class":408},"    print_line()\n",[398,162147,162148,162150,162152,162154,162156,162158,162160,162162,162164],{"class":400,"line":1496},[398,162149,31492],{"class":457},[398,162151,409],{"class":408},[398,162153,461],{"class":404},[398,162155,156875],{"class":513},[398,162157,1298],{"class":457},[398,162159,80003],{"class":408},[398,162161,1348],{"class":457},[398,162163,653],{"class":513},[398,162165,415],{"class":408},[398,162167,162168,162170,162172,162174,162177,162179,162181,162183,162185],{"class":400,"line":1587},[398,162169,31492],{"class":457},[398,162171,409],{"class":408},[398,162173,461],{"class":404},[398,162175,162176],{"class":513},"\"年龄:",[398,162178,1298],{"class":457},[398,162180,70414],{"class":408},[398,162182,1348],{"class":457},[398,162184,653],{"class":513},[398,162186,415],{"class":408},[398,162188,162189],{"class":400,"line":1593},[398,162190,162145],{"class":408},[398,162192,162193],{"class":400,"line":1605},[398,162194,2676],{"emptyLinePlaceholder":328},[398,162196,162197],{"class":400,"line":1888},[398,162198,2676],{"emptyLinePlaceholder":328},[398,162200,162201,162204,162206,162208,162210],{"class":400,"line":1893},[398,162202,162203],{"class":408},"print_info(",[398,162205,150081],{"class":513},[398,162207,12712],{"class":408},[398,162209,1052],{"class":457},[398,162211,415],{"class":408},[19,162213,162214],{},"这种方式可以把小功能组合成大功能。",[343,162216,162218],{"id":162217},"_511-参数检查","5.11 参数检查",[19,162220,162221],{},"函数内部可以检查参数是否合法。",[389,162223,162225],{"className":30571,"code":162224,"language":30573,"meta":316,"style":316},"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",[395,162226,162227,162236,162248,162254,162264,162268,162272,162289,162293,162305,162316,162322],{"__ignoreMap":316},[398,162228,162229,162231,162234],{"class":400,"line":401},[398,162230,32140],{"class":404},[398,162232,162233],{"class":2239}," divide",[398,162235,151286],{"class":408},[398,162237,162238,162240,162242,162244,162246],{"class":400,"line":317},[398,162239,3377],{"class":404},[398,162241,11159],{"class":408},[398,162243,3225],{"class":404},[398,162245,4369],{"class":457},[398,162247,4015],{"class":408},[398,162249,162250,162252],{"class":400,"line":320},[398,162251,15029],{"class":404},[398,162253,152365],{"class":457},[398,162255,162256,162258,162260,162262],{"class":400,"line":1470},[398,162257,4366],{"class":404},[398,162259,11146],{"class":408},[398,162261,986],{"class":404},[398,162263,151297],{"class":408},[398,162265,162266],{"class":400,"line":1476},[398,162267,2676],{"emptyLinePlaceholder":328},[398,162269,162270],{"class":400,"line":1490},[398,162271,2676],{"emptyLinePlaceholder":328},[398,162273,162274,162276,162278,162281,162283,162285,162287],{"class":400,"line":1496},[398,162275,161499],{"class":408},[398,162277,454],{"class":404},[398,162279,162280],{"class":408}," divide(",[398,162282,848],{"class":457},[398,162284,12712],{"class":408},[398,162286,593],{"class":457},[398,162288,415],{"class":408},[398,162290,162291],{"class":400,"line":1587},[398,162292,2676],{"emptyLinePlaceholder":328},[398,162294,162295,162297,162299,162301,162303],{"class":400,"line":1593},[398,162296,1807],{"class":404},[398,162298,161745],{"class":408},[398,162300,39120],{"class":404},[398,162302,39126],{"class":457},[398,162304,4015],{"class":408},[398,162306,162307,162309,162311,162314],{"class":400,"line":1605},[398,162308,31492],{"class":457},[398,162310,409],{"class":408},[398,162312,162313],{"class":513},"\"除数不能为0\"",[398,162315,415],{"class":408},[398,162317,162318,162320],{"class":400,"line":1888},[398,162319,1977],{"class":404},[398,162321,4015],{"class":408},[398,162323,162324,162326],{"class":400,"line":1893},[398,162325,31492],{"class":457},[398,162327,76778],{"class":408},[343,162329,162331],{"id":162330},"_512-类型提示","5.12 类型提示",[19,162333,162334],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[389,162336,162338],{"className":30571,"code":162337,"language":30573,"meta":316,"style":316},"def add(a: int, b: int) -> int:\n    return a + b\n",[395,162339,162340,162363],{"__ignoreMap":316},[398,162341,162342,162344,162346,162349,162351,162354,162356,162359,162361],{"class":400,"line":401},[398,162343,32140],{"class":404},[398,162345,5486],{"class":2239},[398,162347,162348],{"class":408},"(a: ",[398,162350,412],{"class":457},[398,162352,162353],{"class":408},", b: ",[398,162355,412],{"class":457},[398,162357,162358],{"class":408},") -> ",[398,162360,412],{"class":457},[398,162362,4015],{"class":408},[398,162364,162365,162367,162369,162371],{"class":400,"line":317},[398,162366,4366],{"class":404},[398,162368,11146],{"class":408},[398,162370,883],{"class":404},[398,162372,151297],{"class":408},[19,162374,162375],{},"字符串参数：",[389,162377,162379],{"className":30571,"code":162378,"language":30573,"meta":316,"style":316},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[395,162380,162381,162398],{"__ignoreMap":316},[398,162382,162383,162385,162387,162390,162392,162394,162396],{"class":400,"line":401},[398,162384,32140],{"class":404},[398,162386,161189],{"class":2239},[398,162388,162389],{"class":408},"(name: ",[398,162391,1575],{"class":457},[398,162393,162358],{"class":408},[398,162395,95879],{"class":457},[398,162397,4015],{"class":408},[398,162399,162400,162402,162404,162406,162408,162410,162412,162414,162416],{"class":400,"line":317},[398,162401,31492],{"class":457},[398,162403,409],{"class":408},[398,162405,461],{"class":404},[398,162407,157247],{"class":513},[398,162409,1298],{"class":457},[398,162411,80003],{"class":408},[398,162413,1348],{"class":457},[398,162415,653],{"class":513},[398,162417,415],{"class":408},[19,162419,162420],{},"列表参数：",[389,162422,162424],{"className":30571,"code":162423,"language":30573,"meta":316,"style":316},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[395,162425,162426,162445,162453,162465,162474],{"__ignoreMap":316},[398,162427,162428,162430,162433,162436,162438,162441,162443],{"class":400,"line":401},[398,162429,32140],{"class":404},[398,162431,162432],{"class":2239}," get_total",[398,162434,162435],{"class":408},"(numbers: list[",[398,162437,412],{"class":457},[398,162439,162440],{"class":408},"]) -> ",[398,162442,412],{"class":457},[398,162444,4015],{"class":408},[398,162446,162447,162449,162451],{"class":400,"line":317},[398,162448,159500],{"class":408},[398,162450,454],{"class":404},[398,162452,47526],{"class":457},[398,162454,162455,162457,162460,162462],{"class":400,"line":320},[398,162456,3477],{"class":404},[398,162458,162459],{"class":408}," number ",[398,162461,26236],{"class":404},[398,162463,162464],{"class":408}," numbers:\n",[398,162466,162467,162469,162471],{"class":400,"line":1470},[398,162468,160175],{"class":408},[398,162470,9754],{"class":404},[398,162472,162473],{"class":408}," number\n",[398,162475,162476,162478],{"class":400,"line":1476},[398,162477,4366],{"class":404},[398,162479,162480],{"class":408}," total\n",[19,162482,162483],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[343,162485,162487],{"id":162486},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[389,162489,162491],{"className":30571,"code":162490,"language":30573,"meta":316,"style":316},"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",[395,162492,162493,162503,162507,162511,162519,162530,162540,162550,162560,162570,162574,162578,162587,162609,162613,162617,162626,162632,162652,162664,162675,162679,162688,162699,162704,162708,162712,162721,162727,162746,162758,162768,162772,162783,162793,162797,162805,162816,162820,162824,162828,162836,162841,162855,162859,162871,162876,162888,162893,162905,162910,162922,162932,162936,162942],{"__ignoreMap":316},[398,162494,162495,162498,162500],{"class":400,"line":401},[398,162496,162497],{"class":408},"balance ",[398,162499,454],{"class":404},[398,162501,162502],{"class":457}," 1000\n",[398,162504,162505],{"class":400,"line":317},[398,162506,2676],{"emptyLinePlaceholder":328},[398,162508,162509],{"class":400,"line":320},[398,162510,2676],{"emptyLinePlaceholder":328},[398,162512,162513,162515,162517],{"class":400,"line":1470},[398,162514,32140],{"class":404},[398,162516,152226],{"class":2239},[398,162518,32146],{"class":408},[398,162520,162521,162523,162525,162528],{"class":400,"line":1476},[398,162522,31492],{"class":457},[398,162524,409],{"class":408},[398,162526,162527],{"class":513},"\"====== ATM ======\"",[398,162529,415],{"class":408},[398,162531,162532,162534,162536,162538],{"class":400,"line":1490},[398,162533,31492],{"class":457},[398,162535,409],{"class":408},[398,162537,160841],{"class":513},[398,162539,415],{"class":408},[398,162541,162542,162544,162546,162548],{"class":400,"line":1496},[398,162543,31492],{"class":457},[398,162545,409],{"class":408},[398,162547,160852],{"class":513},[398,162549,415],{"class":408},[398,162551,162552,162554,162556,162558],{"class":400,"line":1587},[398,162553,31492],{"class":457},[398,162555,409],{"class":408},[398,162557,160863],{"class":513},[398,162559,415],{"class":408},[398,162561,162562,162564,162566,162568],{"class":400,"line":1593},[398,162563,31492],{"class":457},[398,162565,409],{"class":408},[398,162567,160874],{"class":513},[398,162569,415],{"class":408},[398,162571,162572],{"class":400,"line":1605},[398,162573,2676],{"emptyLinePlaceholder":328},[398,162575,162576],{"class":400,"line":1888},[398,162577,2676],{"emptyLinePlaceholder":328},[398,162579,162580,162582,162585],{"class":400,"line":1893},[398,162581,32140],{"class":404},[398,162583,162584],{"class":2239}," show_balance",[398,162586,32146],{"class":408},[398,162588,162589,162591,162593,162595,162598,162600,162603,162605,162607],{"class":400,"line":1899},[398,162590,31492],{"class":457},[398,162592,409],{"class":408},[398,162594,461],{"class":404},[398,162596,162597],{"class":513},"\"当前余额:",[398,162599,1298],{"class":457},[398,162601,162602],{"class":408},"balance",[398,162604,1348],{"class":457},[398,162606,157205],{"class":513},[398,162608,415],{"class":408},[398,162610,162611],{"class":400,"line":1904},[398,162612,2676],{"emptyLinePlaceholder":328},[398,162614,162615],{"class":400,"line":1918},[398,162616,2676],{"emptyLinePlaceholder":328},[398,162618,162619,162621,162624],{"class":400,"line":1923},[398,162620,32140],{"class":404},[398,162622,162623],{"class":2239}," save_money",[398,162625,32146],{"class":408},[398,162627,162628,162630],{"class":400,"line":1929},[398,162629,162054],{"class":404},[398,162631,150292],{"class":408},[398,162633,162634,162637,162639,162641,162643,162645,162647,162650],{"class":400,"line":1950},[398,162635,162636],{"class":408},"    money ",[398,162638,454],{"class":404},[398,162640,109990],{"class":457},[398,162642,409],{"class":408},[398,162644,54014],{"class":457},[398,162646,409],{"class":408},[398,162648,162649],{"class":513},"\"请输入存款金额:\"",[398,162651,30690],{"class":408},[398,162653,162654,162656,162658,162660,162662],{"class":400,"line":1955},[398,162655,3377],{"class":404},[398,162657,150335],{"class":408},[398,162659,1864],{"class":404},[398,162661,4369],{"class":457},[398,162663,4015],{"class":408},[398,162665,162666,162668,162670,162673],{"class":400,"line":1969},[398,162667,32644],{"class":457},[398,162669,409],{"class":408},[398,162671,162672],{"class":513},"\"金额必须大于0\"",[398,162674,415],{"class":408},[398,162676,162677],{"class":400,"line":1974},[398,162678,152554],{"class":404},[398,162680,162681,162684,162686],{"class":400,"line":2003},[398,162682,162683],{"class":408},"    balance ",[398,162685,9754],{"class":404},[398,162687,150368],{"class":408},[398,162689,162690,162692,162694,162697],{"class":400,"line":2008},[398,162691,31492],{"class":457},[398,162693,409],{"class":408},[398,162695,162696],{"class":513},"\"存款成功\"",[398,162698,415],{"class":408},[398,162700,162701],{"class":400,"line":2025},[398,162702,162703],{"class":408},"    show_balance()\n",[398,162705,162706],{"class":400,"line":2030},[398,162707,2676],{"emptyLinePlaceholder":328},[398,162709,162710],{"class":400,"line":2035},[398,162711,2676],{"emptyLinePlaceholder":328},[398,162713,162714,162716,162719],{"class":400,"line":2040},[398,162715,32140],{"class":404},[398,162717,162718],{"class":2239}," withdraw_money",[398,162720,32146],{"class":408},[398,162722,162723,162725],{"class":400,"line":2054},[398,162724,162054],{"class":404},[398,162726,150292],{"class":408},[398,162728,162729,162731,162733,162735,162737,162739,162741,162744],{"class":400,"line":2059},[398,162730,162636],{"class":408},[398,162732,454],{"class":404},[398,162734,109990],{"class":457},[398,162736,409],{"class":408},[398,162738,54014],{"class":457},[398,162740,409],{"class":408},[398,162742,162743],{"class":513},"\"请输入取款金额:\"",[398,162745,30690],{"class":408},[398,162747,162748,162750,162752,162754,162756],{"class":400,"line":2853},[398,162749,3377],{"class":404},[398,162751,150335],{"class":408},[398,162753,1864],{"class":404},[398,162755,4369],{"class":457},[398,162757,4015],{"class":408},[398,162759,162760,162762,162764,162766],{"class":400,"line":2867},[398,162761,32644],{"class":457},[398,162763,409],{"class":408},[398,162765,162672],{"class":513},[398,162767,415],{"class":408},[398,162769,162770],{"class":400,"line":2875},[398,162771,152554],{"class":404},[398,162773,162774,162776,162778,162780],{"class":400,"line":2880},[398,162775,3377],{"class":404},[398,162777,150335],{"class":408},[398,162779,1362],{"class":404},[398,162781,162782],{"class":408}," balance:\n",[398,162784,162785,162787,162789,162791],{"class":400,"line":2886},[398,162786,32644],{"class":457},[398,162788,409],{"class":408},[398,162790,150430],{"class":513},[398,162792,415],{"class":408},[398,162794,162795],{"class":400,"line":2892},[398,162796,152554],{"class":404},[398,162798,162799,162801,162803],{"class":400,"line":2897},[398,162800,162683],{"class":408},[398,162802,150445],{"class":404},[398,162804,150368],{"class":408},[398,162806,162807,162809,162811,162814],{"class":400,"line":8225},[398,162808,31492],{"class":457},[398,162810,409],{"class":408},[398,162812,162813],{"class":513},"\"取款成功\"",[398,162815,415],{"class":408},[398,162817,162818],{"class":400,"line":8249},[398,162819,162703],{"class":408},[398,162821,162822],{"class":400,"line":8254},[398,162823,2676],{"emptyLinePlaceholder":328},[398,162825,162826],{"class":400,"line":8260},[398,162827,2676],{"emptyLinePlaceholder":328},[398,162829,162830,162832,162834],{"class":400,"line":8287},[398,162831,108856],{"class":404},[398,162833,95485],{"class":457},[398,162835,4015],{"class":408},[398,162837,162838],{"class":400,"line":8292},[398,162839,162840],{"class":408},"    show_menu()\n",[398,162842,162843,162845,162847,162849,162851,162853],{"class":400,"line":8298},[398,162844,160885],{"class":408},[398,162846,454],{"class":404},[398,162848,60798],{"class":457},[398,162850,409],{"class":408},[398,162852,153266],{"class":513},[398,162854,415],{"class":408},[398,162856,162857],{"class":400,"line":8310},[398,162858,2676],{"emptyLinePlaceholder":328},[398,162860,162861,162863,162865,162867,162869],{"class":400,"line":8322},[398,162862,3377],{"class":404},[398,162864,153279],{"class":408},[398,162866,3225],{"class":404},[398,162868,153284],{"class":513},[398,162870,4015],{"class":408},[398,162872,162873],{"class":400,"line":8334},[398,162874,162875],{"class":408},"        show_balance()\n",[398,162877,162878,162880,162882,162884,162886],{"class":400,"line":9993},[398,162879,39486],{"class":404},[398,162881,153279],{"class":408},[398,162883,3225],{"class":404},[398,162885,153303],{"class":513},[398,162887,4015],{"class":408},[398,162889,162890],{"class":400,"line":10018},[398,162891,162892],{"class":408},"        save_money()\n",[398,162894,162895,162897,162899,162901,162903],{"class":400,"line":10041},[398,162896,39486],{"class":404},[398,162898,153279],{"class":408},[398,162900,3225],{"class":404},[398,162902,153321],{"class":513},[398,162904,4015],{"class":408},[398,162906,162907],{"class":400,"line":10065},[398,162908,162909],{"class":408},"        withdraw_money()\n",[398,162911,162912,162914,162916,162918,162920],{"class":400,"line":10070},[398,162913,39486],{"class":404},[398,162915,153279],{"class":408},[398,162917,3225],{"class":404},[398,162919,153375],{"class":513},[398,162921,4015],{"class":408},[398,162923,162924,162926,162928,162930],{"class":400,"line":10075},[398,162925,32644],{"class":457},[398,162927,409],{"class":408},[398,162929,153386],{"class":513},[398,162931,415],{"class":408},[398,162933,162934],{"class":400,"line":10080},[398,162935,31820],{"class":404},[398,162937,162938,162940],{"class":400,"line":10089},[398,162939,158215],{"class":404},[398,162941,4015],{"class":408},[398,162943,162944,162946,162948,162950],{"class":400,"line":10094},[398,162945,32644],{"class":457},[398,162947,409],{"class":408},[398,162949,153407],{"class":513},[398,162951,415],{"class":408},[19,162953,162954],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[343,162956,162958],{"id":162957},"_514-易错点","5.14 易错点",[38,162960,162961,162964,162967,162972,162977,162980],{},[41,162962,162963],{},"函数定义后必须调用才会执行。",[41,162965,162966],{},"函数名后面有括号才是调用。",[41,162968,162969,162971],{},[395,162970,17323],{}," 后面的代码不会执行。",[41,162973,162974,162975,28578],{},"没有返回值的函数默认返回 ",[395,162976,95879],{},[41,162978,162979],{},"局部变量不能在函数外部访问。",[41,162981,162982,162983,162985],{},"不要滥用 ",[395,162984,162019],{},"，更好的方式是让函数返回新值。",[19,162987,162988,162989,162991],{},"例如不用 ",[395,162990,162019],{}," 改写存款：",[389,162993,162995],{"className":30571,"code":162994,"language":30573,"meta":316,"style":316},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[395,162996,162997,163006,163017,163021,163025,163033,163046],{"__ignoreMap":316},[398,162998,162999,163001,163003],{"class":400,"line":401},[398,163000,32140],{"class":404},[398,163002,162623],{"class":2239},[398,163004,163005],{"class":408},"(balance, money):\n",[398,163007,163008,163010,163013,163015],{"class":400,"line":317},[398,163009,4366],{"class":404},[398,163011,163012],{"class":408}," balance ",[398,163014,883],{"class":404},[398,163016,150368],{"class":408},[398,163018,163019],{"class":400,"line":320},[398,163020,2676],{"emptyLinePlaceholder":328},[398,163022,163023],{"class":400,"line":1470},[398,163024,2676],{"emptyLinePlaceholder":328},[398,163026,163027,163029,163031],{"class":400,"line":1476},[398,163028,162497],{"class":408},[398,163030,454],{"class":404},[398,163032,162502],{"class":457},[398,163034,163035,163037,163039,163042,163044],{"class":400,"line":1490},[398,163036,162497],{"class":408},[398,163038,454],{"class":404},[398,163040,163041],{"class":408}," save_money(balance, ",[398,163043,1998],{"class":457},[398,163045,415],{"class":408},[398,163047,163048,163050],{"class":400,"line":1496},[398,163049,30608],{"class":457},[398,163051,163052],{"class":408},"(balance)\n",[343,163054,163056],{"id":163055},"_515-本章练习","5.15 本章练习",[38,163058,163059,163066,163072,163078,163084],{},[41,163060,163061,163062,163065],{},"定义函数 ",[395,163063,163064],{},"print_student(name, age)","，输出学生信息。",[41,163067,163061,163068,163071],{},[395,163069,163070],{},"get_max(a, b, c)","，返回三个数中的最大值。",[41,163073,163061,163074,163077],{},[395,163075,163076],{},"is_even(num)","，判断一个数是否为偶数。",[41,163079,163061,163080,163083],{},[395,163081,163082],{},"calculate_bmi(weight, height)","，返回 BMI。",[41,163085,163086],{},"把第 4 章的菜单程序拆分成多个函数。",[5403,163088,163089],{},"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":316,"searchDepth":317,"depth":317,"links":163091},[163092,163093,163094,163095,163096,163097,163098,163099,163100,163104,163105,163106,163107,163108,163109],{"id":161112,"depth":317,"text":161113},{"id":161153,"depth":317,"text":161154},{"id":161243,"depth":317,"text":161244},{"id":161324,"depth":317,"text":161325},{"id":161457,"depth":317,"text":161458},{"id":161579,"depth":317,"text":161580},{"id":161701,"depth":317,"text":161702},{"id":161778,"depth":317,"text":161779},{"id":161900,"depth":317,"text":161901,"children":163101},[163102,163103],{"id":161904,"depth":320,"text":161905},{"id":161962,"depth":320,"text":161963},{"id":162091,"depth":317,"text":162092},{"id":162217,"depth":317,"text":162218},{"id":162330,"depth":317,"text":162331},{"id":162486,"depth":317,"text":162487},{"id":162957,"depth":317,"text":162958},{"id":163055,"depth":317,"text":163056},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":161104,"description":23654},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163116,"title":163117,"body":163118,"description":23654,"extension":326,"meta":166162,"navigation":328,"path":166163,"seo":166164,"stem":166165,"__hash__":166166},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163119,"toc":166143},[163120,163123,163127,163130,163133,163237,163240,163244,163247,163327,163330,163334,163337,163397,163400,163436,163439,163454,163458,163531,163534,163589,163592,163662,163665,163749,163759,163817,163821,163866,163869,163895,163898,164004,164008,164011,164053,164056,164120,164123,164127,164130,164191,164194,164224,164227,164265,164269,164272,164281,164284,164408,164411,164452,164456,164459,164470,164510,164513,164528,164533,164536,164603,164606,164696,164700,164703,164751,164754,164781,164783,164813,164816,164836,164839,164870,164873,164906,164910,164913,164937,164940,164964,164967,164991,164995,164998,165128,165131,165211,165214,165289,165293,165296,165346,165349,165391,165394,165418,165420,165444,165447,165502,165505,165571,165575,165578,165581,165619,165622,165675,165678,165724,165727,165760,165763,165767,166086,166090,166119,166123,166140],[10,163121,163117],{"id":163122},"_6-数据容器",[343,163124,163126],{"id":163125},"_61-什么是数据容器","6.1 什么是数据容器",[19,163128,163129],{},"数据容器用于一次保存多个数据。",[19,163131,163132],{},"常见容器：",[84,163134,163135,163152],{},[87,163136,163137],{},[90,163138,163139,163141,163144,163147,163150],{},[93,163140,116],{},[93,163142,163143],{},"是否有序",[93,163145,163146],{},"是否可变",[93,163148,163149],{},"是否允许重复",[93,163151,27685],{},[101,163153,163154,163172,163188,163203,163220],{},[90,163155,163156,163159,163162,163165,163168],{},[106,163157,163158],{},"list列表",[106,163160,163161],{},"有序",[106,163163,163164],{},"可变",[106,163166,163167],{},"允许",[106,163169,163170],{},[395,163171,155450],{},[90,163173,163174,163177,163179,163182,163184],{},[106,163175,163176],{},"tuple元组",[106,163178,163161],{},[106,163180,163181],{},"不可变",[106,163183,163167],{},[106,163185,163186],{},[395,163187,155463],{},[90,163189,163190,163193,163195,163197,163199],{},[106,163191,163192],{},"str字符串",[106,163194,163161],{},[106,163196,163181],{},[106,163198,163167],{},[106,163200,163201],{},[395,163202,156073],{},[90,163204,163205,163208,163211,163213,163216],{},[106,163206,163207],{},"set集合",[106,163209,163210],{},"无序",[106,163212,163164],{},[106,163214,163215],{},"不允许",[106,163217,163218],{},[395,163219,155488],{},[90,163221,163222,163225,163227,163229,163232],{},[106,163223,163224],{},"dict字典",[106,163226,163161],{},[106,163228,163164],{},[106,163230,163231],{},"key不允许重复",[106,163233,163234],{},[395,163235,163236],{},"{\"name\": \"小明\"}",[19,163238,163239],{},"Python 3.7 之后，字典保持插入顺序。",[343,163241,163243],{"id":163242},"_62-列表list","6.2 列表list",[19,163245,163246],{},"列表用于保存一组有顺序的数据。",[389,163248,163250],{"className":30571,"code":163249,"language":30573,"meta":316,"style":316},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[395,163251,163252,163272,163297,163318],{"__ignoreMap":316},[398,163253,163254,163256,163258,163260,163262,163264,163266,163268,163270],{"class":400,"line":401},[398,163255,160573],{"class":408},[398,163257,454],{"class":404},[398,163259,52419],{"class":408},[398,163261,150081],{"class":513},[398,163263,12712],{"class":408},[398,163265,151129],{"class":513},[398,163267,12712],{"class":408},[398,163269,159924],{"class":513},[398,163271,33439],{"class":408},[398,163273,163274,163277,163279,163281,163283,163285,163287,163289,163291,163293,163295],{"class":400,"line":317},[398,163275,163276],{"class":408},"numbers ",[398,163278,454],{"class":404},[398,163280,52419],{"class":408},[398,163282,619],{"class":457},[398,163284,12712],{"class":408},[398,163286,486],{"class":457},[398,163288,12712],{"class":408},[398,163290,480],{"class":457},[398,163292,12712],{"class":408},[398,163294,695],{"class":457},[398,163296,33439],{"class":408},[398,163298,163299,163302,163304,163306,163308,163310,163312,163314,163316],{"class":400,"line":320},[398,163300,163301],{"class":408},"mixed ",[398,163303,454],{"class":404},[398,163305,52419],{"class":408},[398,163307,150081],{"class":513},[398,163309,12712],{"class":408},[398,163311,1052],{"class":457},[398,163313,12712],{"class":408},[398,163315,31669],{"class":457},[398,163317,33439],{"class":408},[398,163319,163320,163323,163325],{"class":400,"line":1470},[398,163321,163322],{"class":408},"empty ",[398,163324,454],{"class":404},[398,163326,52031],{"class":408},[19,163328,163329],{},"推荐一个列表中保存同类数据，代码更清晰。",[343,163331,163333],{"id":163332},"_63-列表索引","6.3 列表索引",[19,163335,163336],{},"正向索引从 0 开始：",[389,163338,163340],{"className":30571,"code":163339,"language":30573,"meta":316,"style":316},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[395,163341,163342,163362,163366,163377,163387],{"__ignoreMap":316},[398,163343,163344,163346,163348,163350,163352,163354,163356,163358,163360],{"class":400,"line":401},[398,163345,160573],{"class":408},[398,163347,454],{"class":404},[398,163349,52419],{"class":408},[398,163351,150081],{"class":513},[398,163353,12712],{"class":408},[398,163355,151129],{"class":513},[398,163357,12712],{"class":408},[398,163359,159924],{"class":513},[398,163361,33439],{"class":408},[398,163363,163364],{"class":400,"line":317},[398,163365,2676],{"emptyLinePlaceholder":328},[398,163367,163368,163370,163373,163375],{"class":400,"line":320},[398,163369,30608],{"class":457},[398,163371,163372],{"class":408},"(names[",[398,163374,593],{"class":457},[398,163376,4933],{"class":408},[398,163378,163379,163381,163383,163385],{"class":400,"line":1470},[398,163380,30608],{"class":457},[398,163382,163372],{"class":408},[398,163384,619],{"class":457},[398,163386,4933],{"class":408},[398,163388,163389,163391,163393,163395],{"class":400,"line":1476},[398,163390,30608],{"class":457},[398,163392,163372],{"class":408},[398,163394,486],{"class":457},[398,163396,4933],{"class":408},[19,163398,163399],{},"反向索引从 -1 开始：",[389,163401,163403],{"className":30571,"code":163402,"language":30573,"meta":316,"style":316},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[395,163404,163405,163421],{"__ignoreMap":316},[398,163406,163407,163409,163411,163413,163415,163418],{"class":400,"line":401},[398,163408,30608],{"class":457},[398,163410,163372],{"class":408},[398,163412,934],{"class":404},[398,163414,619],{"class":457},[398,163416,163417],{"class":408},"])  ",[398,163419,163420],{"class":467},"# 小刚\n",[398,163422,163423,163425,163427,163429,163431,163433],{"class":400,"line":317},[398,163424,30608],{"class":457},[398,163426,163372],{"class":408},[398,163428,934],{"class":404},[398,163430,486],{"class":457},[398,163432,163417],{"class":408},[398,163434,163435],{"class":467},"# 小红\n",[19,163437,163438],{},"索引越界会报错：",[389,163440,163442],{"className":30571,"code":163441,"language":30573,"meta":316,"style":316},"print(names[3])\n",[395,163443,163444],{"__ignoreMap":316},[398,163445,163446,163448,163450,163452],{"class":400,"line":401},[398,163447,30608],{"class":457},[398,163449,163372],{"class":408},[398,163451,480],{"class":457},[398,163453,4933],{"class":408},[343,163455,163457],{"id":163456},"_64-列表常用方法","6.4 列表常用方法",[389,163459,163461],{"className":30571,"code":163460,"language":30573,"meta":316,"style":316},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[395,163462,163463,163479,163483,163492,163506,163520,163524],{"__ignoreMap":316},[398,163464,163465,163467,163469,163471,163473,163475,163477],{"class":400,"line":401},[398,163466,160573],{"class":408},[398,163468,454],{"class":404},[398,163470,52419],{"class":408},[398,163472,150081],{"class":513},[398,163474,12712],{"class":408},[398,163476,151129],{"class":513},[398,163478,33439],{"class":408},[398,163480,163481],{"class":400,"line":317},[398,163482,2676],{"emptyLinePlaceholder":328},[398,163484,163485,163488,163490],{"class":400,"line":320},[398,163486,163487],{"class":408},"names.append(",[398,163489,159924],{"class":513},[398,163491,415],{"class":408},[398,163493,163494,163497,163499,163501,163504],{"class":400,"line":1470},[398,163495,163496],{"class":408},"names.insert(",[398,163498,619],{"class":457},[398,163500,12712],{"class":408},[398,163502,163503],{"class":513},"\"小李\"",[398,163505,415],{"class":408},[398,163507,163508,163511,163513,163515,163518],{"class":400,"line":1476},[398,163509,163510],{"class":408},"names.extend([",[398,163512,8960],{"class":513},[398,163514,12712],{"class":408},[398,163516,163517],{"class":513},"\"小赵\"",[398,163519,4933],{"class":408},[398,163521,163522],{"class":400,"line":1490},[398,163523,2676],{"emptyLinePlaceholder":328},[398,163525,163526,163528],{"class":400,"line":1496},[398,163527,30608],{"class":457},[398,163529,163530],{"class":408},"(names)\n",[19,163532,163533],{},"删除元素：",[389,163535,163537],{"className":30571,"code":163536,"language":30573,"meta":316,"style":316},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[395,163538,163539,163548,163558,163572,163584],{"__ignoreMap":316},[398,163540,163541,163544,163546],{"class":400,"line":401},[398,163542,163543],{"class":408},"names.remove(",[398,163545,151129],{"class":513},[398,163547,415],{"class":408},[398,163549,163550,163553,163555],{"class":400,"line":317},[398,163551,163552],{"class":408},"last ",[398,163554,454],{"class":404},[398,163556,163557],{"class":408}," names.pop()\n",[398,163559,163560,163563,163565,163568,163570],{"class":400,"line":320},[398,163561,163562],{"class":408},"first ",[398,163564,454],{"class":404},[398,163566,163567],{"class":408}," names.pop(",[398,163569,593],{"class":457},[398,163571,415],{"class":408},[398,163573,163574,163577,163580,163582],{"class":400,"line":1470},[398,163575,163576],{"class":404},"del",[398,163578,163579],{"class":408}," names[",[398,163581,593],{"class":457},[398,163583,33439],{"class":408},[398,163585,163586],{"class":400,"line":1476},[398,163587,163588],{"class":408},"names.clear()\n",[19,163590,163591],{},"查询和统计：",[389,163593,163595],{"className":30571,"code":163594,"language":30573,"meta":316,"style":316},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[395,163596,163597,163625,163629,163640,163651],{"__ignoreMap":316},[398,163598,163599,163601,163603,163605,163607,163609,163611,163613,163615,163617,163619,163621,163623],{"class":400,"line":401},[398,163600,163276],{"class":408},[398,163602,454],{"class":404},[398,163604,52419],{"class":408},[398,163606,619],{"class":457},[398,163608,12712],{"class":408},[398,163610,486],{"class":457},[398,163612,12712],{"class":408},[398,163614,480],{"class":457},[398,163616,12712],{"class":408},[398,163618,486],{"class":457},[398,163620,12712],{"class":408},[398,163622,695],{"class":457},[398,163624,33439],{"class":408},[398,163626,163627],{"class":400,"line":317},[398,163628,2676],{"emptyLinePlaceholder":328},[398,163630,163631,163633,163636,163638],{"class":400,"line":320},[398,163632,30608],{"class":457},[398,163634,163635],{"class":408},"(numbers.index(",[398,163637,480],{"class":457},[398,163639,30690],{"class":408},[398,163641,163642,163644,163647,163649],{"class":400,"line":1470},[398,163643,30608],{"class":457},[398,163645,163646],{"class":408},"(numbers.count(",[398,163648,486],{"class":457},[398,163650,30690],{"class":408},[398,163652,163653,163655,163657,163659],{"class":400,"line":1476},[398,163654,30608],{"class":457},[398,163656,409],{"class":408},[398,163658,7635],{"class":457},[398,163660,163661],{"class":408},"(numbers))\n",[19,163663,163664],{},"排序：",[389,163666,163668],{"className":30571,"code":163667,"language":30573,"meta":316,"style":316},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[395,163669,163670,163694,163698,163703,163710,163714,163728,163734,163738,163743],{"__ignoreMap":316},[398,163671,163672,163674,163676,163678,163680,163682,163684,163686,163688,163690,163692],{"class":400,"line":401},[398,163673,163276],{"class":408},[398,163675,454],{"class":404},[398,163677,52419],{"class":408},[398,163679,480],{"class":457},[398,163681,12712],{"class":408},[398,163683,619],{"class":457},[398,163685,12712],{"class":408},[398,163687,721],{"class":457},[398,163689,12712],{"class":408},[398,163691,486],{"class":457},[398,163693,33439],{"class":408},[398,163695,163696],{"class":400,"line":317},[398,163697,2676],{"emptyLinePlaceholder":328},[398,163699,163700],{"class":400,"line":320},[398,163701,163702],{"class":408},"numbers.sort()\n",[398,163704,163705,163707],{"class":400,"line":1470},[398,163706,30608],{"class":457},[398,163708,163709],{"class":408},"(numbers)\n",[398,163711,163712],{"class":400,"line":1476},[398,163713,2676],{"emptyLinePlaceholder":328},[398,163715,163716,163719,163722,163724,163726],{"class":400,"line":1490},[398,163717,163718],{"class":408},"numbers.sort(",[398,163720,163721],{"class":5493},"reverse",[398,163723,454],{"class":404},[398,163725,31669],{"class":457},[398,163727,415],{"class":408},[398,163729,163730,163732],{"class":400,"line":1496},[398,163731,30608],{"class":457},[398,163733,163709],{"class":408},[398,163735,163736],{"class":400,"line":1587},[398,163737,2676],{"emptyLinePlaceholder":328},[398,163739,163740],{"class":400,"line":1593},[398,163741,163742],{"class":408},"numbers.reverse()\n",[398,163744,163745,163747],{"class":400,"line":1605},[398,163746,30608],{"class":457},[398,163748,163709],{"class":408},[19,163750,163751,163754,163755,163758],{},[395,163752,163753],{},"sort()"," 会修改原列表，",[395,163756,163757],{},"sorted()"," 返回新列表。",[389,163760,163762],{"className":30571,"code":163761,"language":30573,"meta":316,"style":316},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[395,163763,163764,163788,163800,163804,163810],{"__ignoreMap":316},[398,163765,163766,163768,163770,163772,163774,163776,163778,163780,163782,163784,163786],{"class":400,"line":401},[398,163767,163276],{"class":408},[398,163769,454],{"class":404},[398,163771,52419],{"class":408},[398,163773,480],{"class":457},[398,163775,12712],{"class":408},[398,163777,619],{"class":457},[398,163779,12712],{"class":408},[398,163781,721],{"class":457},[398,163783,12712],{"class":408},[398,163785,486],{"class":457},[398,163787,33439],{"class":408},[398,163789,163790,163793,163795,163798],{"class":400,"line":317},[398,163791,163792],{"class":408},"new_numbers ",[398,163794,454],{"class":404},[398,163796,163797],{"class":457}," sorted",[398,163799,163709],{"class":408},[398,163801,163802],{"class":400,"line":320},[398,163803,2676],{"emptyLinePlaceholder":328},[398,163805,163806,163808],{"class":400,"line":1470},[398,163807,30608],{"class":457},[398,163809,163709],{"class":408},[398,163811,163812,163814],{"class":400,"line":1476},[398,163813,30608],{"class":457},[398,163815,163816],{"class":408},"(new_numbers)\n",[343,163818,163820],{"id":163819},"_65-列表遍历","6.5 列表遍历",[389,163822,163824],{"className":30571,"code":163823,"language":30573,"meta":316,"style":316},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[395,163825,163826,163846,163850,163860],{"__ignoreMap":316},[398,163827,163828,163830,163832,163834,163836,163838,163840,163842,163844],{"class":400,"line":401},[398,163829,160573],{"class":408},[398,163831,454],{"class":404},[398,163833,52419],{"class":408},[398,163835,150081],{"class":513},[398,163837,12712],{"class":408},[398,163839,151129],{"class":513},[398,163841,12712],{"class":408},[398,163843,159924],{"class":513},[398,163845,33439],{"class":408},[398,163847,163848],{"class":400,"line":317},[398,163849,2676],{"emptyLinePlaceholder":328},[398,163851,163852,163854,163856,163858],{"class":400,"line":320},[398,163853,3301],{"class":404},[398,163855,160609],{"class":408},[398,163857,26236],{"class":404},[398,163859,160614],{"class":408},[398,163861,163862,163864],{"class":400,"line":1470},[398,163863,31492],{"class":457},[398,163865,150853],{"class":408},[19,163867,163868],{},"需要索引时：",[389,163870,163872],{"className":30571,"code":163871,"language":30573,"meta":316,"style":316},"for index, name in enumerate(names):\n    print(index, name)\n",[395,163873,163874,163888],{"__ignoreMap":316},[398,163875,163876,163878,163881,163883,163885],{"class":400,"line":401},[398,163877,3301],{"class":404},[398,163879,163880],{"class":408}," index, name ",[398,163882,26236],{"class":404},[398,163884,31799],{"class":457},[398,163886,163887],{"class":408},"(names):\n",[398,163889,163890,163892],{"class":400,"line":317},[398,163891,31492],{"class":457},[398,163893,163894],{"class":408},"(index, name)\n",[19,163896,163897],{},"统计总分：",[389,163899,163901],{"className":30571,"code":163900,"language":30573,"meta":316,"style":316},"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",[395,163902,163903,163928,163936,163940,163951,163959,163963,163980],{"__ignoreMap":316},[398,163904,163905,163908,163910,163912,163914,163916,163918,163920,163922,163924,163926],{"class":400,"line":401},[398,163906,163907],{"class":408},"scores ",[398,163909,454],{"class":404},[398,163911,52419],{"class":408},[398,163913,1264],{"class":457},[398,163915,12712],{"class":408},[398,163917,1138],{"class":457},[398,163919,12712],{"class":408},[398,163921,656],{"class":457},[398,163923,12712],{"class":408},[398,163925,963],{"class":457},[398,163927,33439],{"class":408},[398,163929,163930,163932,163934],{"class":400,"line":317},[398,163931,157453],{"class":408},[398,163933,454],{"class":404},[398,163935,47526],{"class":457},[398,163937,163938],{"class":400,"line":320},[398,163939,2676],{"emptyLinePlaceholder":328},[398,163941,163942,163944,163946,163948],{"class":400,"line":1470},[398,163943,3301],{"class":404},[398,163945,157976],{"class":408},[398,163947,26236],{"class":404},[398,163949,163950],{"class":408}," scores:\n",[398,163952,163953,163955,163957],{"class":400,"line":1476},[398,163954,159500],{"class":408},[398,163956,9754],{"class":404},[398,163958,1855],{"class":408},[398,163960,163961],{"class":400,"line":1490},[398,163962,2676],{"emptyLinePlaceholder":328},[398,163964,163965,163968,163970,163973,163975,163977],{"class":400,"line":1496},[398,163966,163967],{"class":408},"avg ",[398,163969,454],{"class":404},[398,163971,163972],{"class":408}," total ",[398,163974,986],{"class":404},[398,163976,7608],{"class":457},[398,163978,163979],{"class":408},"(scores)\n",[398,163981,163982,163984,163986,163988,163991,163993,163996,163998,164000,164002],{"class":400,"line":1587},[398,163983,30608],{"class":457},[398,163985,409],{"class":408},[398,163987,461],{"class":404},[398,163989,163990],{"class":513},"\"平均分:",[398,163992,1298],{"class":457},[398,163994,163995],{"class":408},"avg",[398,163997,157352],{"class":404},[398,163999,1348],{"class":457},[398,164001,653],{"class":513},[398,164003,415],{"class":408},[343,164005,164007],{"id":164006},"_66-元组tuple","6.6 元组tuple",[19,164009,164010],{},"元组和列表类似，但不可修改。",[389,164012,164014],{"className":30571,"code":164013,"language":30573,"meta":316,"style":316},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[395,164015,164016,164033],{"__ignoreMap":316},[398,164017,164018,164021,164023,164025,164027,164029,164031],{"class":400,"line":401},[398,164019,164020],{"class":408},"point ",[398,164022,454],{"class":404},[398,164024,1934],{"class":408},[398,164026,848],{"class":457},[398,164028,12712],{"class":408},[398,164030,1102],{"class":457},[398,164032,415],{"class":408},[398,164034,164035,164037,164039,164041,164043,164045,164047,164049,164051],{"class":400,"line":317},[398,164036,116507],{"class":408},[398,164038,454],{"class":404},[398,164040,1934],{"class":408},[398,164042,150081],{"class":513},[398,164044,12712],{"class":408},[398,164046,1052],{"class":457},[398,164048,12712],{"class":408},[398,164050,69462],{"class":513},[398,164052,415],{"class":408},[19,164054,164055],{},"单元素元组必须加逗号：",[389,164057,164059],{"className":30571,"code":164058,"language":30573,"meta":316,"style":316},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[395,164060,164061,164075,164088,164092,164106],{"__ignoreMap":316},[398,164062,164063,164066,164068,164070,164072],{"class":400,"line":401},[398,164064,164065],{"class":408},"t1 ",[398,164067,454],{"class":404},[398,164069,1934],{"class":408},[398,164071,848],{"class":457},[398,164073,164074],{"class":408},",)\n",[398,164076,164077,164080,164082,164084,164086],{"class":400,"line":317},[398,164078,164079],{"class":408},"t2 ",[398,164081,454],{"class":404},[398,164083,1934],{"class":408},[398,164085,848],{"class":457},[398,164087,415],{"class":408},[398,164089,164090],{"class":400,"line":320},[398,164091,2676],{"emptyLinePlaceholder":328},[398,164093,164094,164096,164098,164100,164103],{"class":400,"line":1470},[398,164095,30608],{"class":457},[398,164097,409],{"class":408},[398,164099,103300],{"class":457},[398,164101,164102],{"class":408},"(t1))  ",[398,164104,164105],{"class":467},"# tuple\n",[398,164107,164108,164110,164112,164114,164117],{"class":400,"line":1476},[398,164109,30608],{"class":457},[398,164111,409],{"class":408},[398,164113,103300],{"class":457},[398,164115,164116],{"class":408},"(t2))  ",[398,164118,164119],{"class":467},"# int\n",[19,164121,164122],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[343,164124,164126],{"id":164125},"_67-字符串str","6.7 字符串str",[19,164128,164129],{},"字符串也是序列，可以索引、切片和遍历。",[389,164131,164133],{"className":30571,"code":164132,"language":30573,"meta":316,"style":316},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[395,164134,164135,164143,164147,164158,164170,164174,164185],{"__ignoreMap":316},[398,164136,164137,164139,164141],{"class":400,"line":401},[398,164138,156637],{"class":408},[398,164140,454],{"class":404},[398,164142,159874],{"class":513},[398,164144,164145],{"class":400,"line":317},[398,164146,2676],{"emptyLinePlaceholder":328},[398,164148,164149,164151,164154,164156],{"class":400,"line":320},[398,164150,30608],{"class":457},[398,164152,164153],{"class":408},"(text[",[398,164155,593],{"class":457},[398,164157,4933],{"class":408},[398,164159,164160,164162,164164,164166,164168],{"class":400,"line":1470},[398,164161,30608],{"class":457},[398,164163,164153],{"class":408},[398,164165,934],{"class":404},[398,164167,619],{"class":457},[398,164169,4933],{"class":408},[398,164171,164172],{"class":400,"line":1476},[398,164173,2676],{"emptyLinePlaceholder":328},[398,164175,164176,164178,164180,164182],{"class":400,"line":1490},[398,164177,3301],{"class":404},[398,164179,159885],{"class":408},[398,164181,26236],{"class":404},[398,164183,164184],{"class":408}," text:\n",[398,164186,164187,164189],{"class":400,"line":1496},[398,164188,31492],{"class":457},[398,164190,159896],{"class":408},[19,164192,164193],{},"字符串不可变：",[389,164195,164197],{"className":30571,"code":164196,"language":30573,"meta":316,"style":316},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[395,164198,164199,164207],{"__ignoreMap":316},[398,164200,164201,164203,164205],{"class":400,"line":401},[398,164202,156637],{"class":408},[398,164204,454],{"class":404},[398,164206,159874],{"class":513},[398,164208,164209,164212,164214,164216,164218,164221],{"class":400,"line":317},[398,164210,164211],{"class":408},"text[",[398,164213,593],{"class":457},[398,164215,4719],{"class":408},[398,164217,454],{"class":404},[398,164219,164220],{"class":513}," \"P\"",[398,164222,164223],{"class":467},"  # 报错\n",[19,164225,164226],{},"如果要得到新字符串：",[389,164228,164230],{"className":30571,"code":164229,"language":30573,"meta":316,"style":316},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[395,164231,164232,164240,164258],{"__ignoreMap":316},[398,164233,164234,164236,164238],{"class":400,"line":401},[398,164235,156637],{"class":408},[398,164237,454],{"class":404},[398,164239,159874],{"class":513},[398,164241,164242,164244,164246,164248,164250,164253,164255],{"class":400,"line":317},[398,164243,156637],{"class":408},[398,164245,454],{"class":404},[398,164247,164220],{"class":513},[398,164249,45759],{"class":404},[398,164251,164252],{"class":408}," text[",[398,164254,619],{"class":457},[398,164256,164257],{"class":408},":]\n",[398,164259,164260,164262],{"class":400,"line":320},[398,164261,30608],{"class":457},[398,164263,164264],{"class":408},"(text)\n",[343,164266,164268],{"id":164267},"_68-切片","6.8 切片",[19,164270,164271],{},"切片用于从序列中取一部分。",[389,164273,164275],{"className":30571,"code":164274,"language":30573,"meta":316,"style":316},"序列[开始:结束:步长]\n",[395,164276,164277],{"__ignoreMap":316},[398,164278,164279],{"class":400,"line":401},[398,164280,164274],{"class":408},[19,164282,164283],{},"结束位置不包含。",[389,164285,164287],{"className":30571,"code":164286,"language":30573,"meta":316,"style":316},"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",[395,164288,164289,164326,164330,164349,164364,164378,164392],{"__ignoreMap":316},[398,164290,164291,164294,164296,164298,164300,164302,164304,164306,164308,164310,164312,164314,164316,164318,164320,164322,164324],{"class":400,"line":401},[398,164292,164293],{"class":408},"nums ",[398,164295,454],{"class":404},[398,164297,52419],{"class":408},[398,164299,593],{"class":457},[398,164301,12712],{"class":408},[398,164303,619],{"class":457},[398,164305,12712],{"class":408},[398,164307,486],{"class":457},[398,164309,12712],{"class":408},[398,164311,480],{"class":457},[398,164313,12712],{"class":408},[398,164315,695],{"class":457},[398,164317,12712],{"class":408},[398,164319,721],{"class":457},[398,164321,12712],{"class":408},[398,164323,746],{"class":457},[398,164325,33439],{"class":408},[398,164327,164328],{"class":400,"line":317},[398,164329,2676],{"emptyLinePlaceholder":328},[398,164331,164332,164334,164337,164339,164341,164343,164346],{"class":400,"line":320},[398,164333,30608],{"class":457},[398,164335,164336],{"class":408},"(nums[",[398,164338,619],{"class":457},[398,164340,1261],{"class":408},[398,164342,695],{"class":457},[398,164344,164345],{"class":408},"])    ",[398,164347,164348],{"class":467},"# [1, 2, 3]\n",[398,164350,164351,164353,164356,164358,164361],{"class":400,"line":1470},[398,164352,30608],{"class":457},[398,164354,164355],{"class":408},"(nums[:",[398,164357,480],{"class":457},[398,164359,164360],{"class":408},"])     ",[398,164362,164363],{"class":467},"# [0, 1, 2]\n",[398,164365,164366,164368,164370,164372,164375],{"class":400,"line":1476},[398,164367,30608],{"class":457},[398,164369,164336],{"class":408},[398,164371,480],{"class":457},[398,164373,164374],{"class":408},":])     ",[398,164376,164377],{"class":467},"# [3, 4, 5, 6]\n",[398,164379,164380,164382,164385,164387,164389],{"class":400,"line":1490},[398,164381,30608],{"class":457},[398,164383,164384],{"class":408},"(nums[::",[398,164386,486],{"class":457},[398,164388,164345],{"class":408},[398,164390,164391],{"class":467},"# [0, 2, 4, 6]\n",[398,164393,164394,164396,164398,164400,164402,164405],{"class":400,"line":1496},[398,164395,30608],{"class":457},[398,164397,164384],{"class":408},[398,164399,934],{"class":404},[398,164401,619],{"class":457},[398,164403,164404],{"class":408},"])   ",[398,164406,164407],{"class":467},"# 反转\n",[19,164409,164410],{},"字符串切片：",[389,164412,164414],{"className":30571,"code":164413,"language":30573,"meta":316,"style":316},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[395,164415,164416,164425,164439],{"__ignoreMap":316},[398,164417,164418,164420,164422],{"class":400,"line":401},[398,164419,156637],{"class":408},[398,164421,454],{"class":404},[398,164423,164424],{"class":513}," \"abcdef\"\n",[398,164426,164427,164429,164431,164433,164435,164437],{"class":400,"line":317},[398,164428,30608],{"class":457},[398,164430,164153],{"class":408},[398,164432,619],{"class":457},[398,164434,1261],{"class":408},[398,164436,695],{"class":457},[398,164438,4933],{"class":408},[398,164440,164441,164443,164446,164448,164450],{"class":400,"line":320},[398,164442,30608],{"class":457},[398,164444,164445],{"class":408},"(text[::",[398,164447,934],{"class":404},[398,164449,619],{"class":457},[398,164451,4933],{"class":408},[343,164453,164455],{"id":164454},"_69-集合set","6.9 集合set",[19,164457,164458],{},"集合特点：",[38,164460,164461,164464,164467],{},[41,164462,164463],{},"无序。",[41,164465,164466],{},"元素不重复。",[41,164468,164469],{},"可以做交集、并集、差集。",[389,164471,164473],{"className":30571,"code":164472,"language":30573,"meta":316,"style":316},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[395,164474,164475,164503],{"__ignoreMap":316},[398,164476,164477,164479,164481,164483,164485,164487,164489,164491,164493,164495,164497,164499,164501],{"class":400,"line":401},[398,164478,164293],{"class":408},[398,164480,454],{"class":404},[398,164482,4724],{"class":408},[398,164484,619],{"class":457},[398,164486,12712],{"class":408},[398,164488,486],{"class":457},[398,164490,12712],{"class":408},[398,164492,480],{"class":457},[398,164494,12712],{"class":408},[398,164496,480],{"class":457},[398,164498,12712],{"class":408},[398,164500,695],{"class":457},[398,164502,1841],{"class":408},[398,164504,164505,164507],{"class":400,"line":317},[398,164506,30608],{"class":457},[398,164508,164509],{"class":408},"(nums)\n",[19,164511,164512],{},"创建空集合：",[389,164514,164516],{"className":30571,"code":164515,"language":30573,"meta":316,"style":316},"s = set()\n",[395,164517,164518],{"__ignoreMap":316},[398,164519,164520,164522,164524,164526],{"class":400,"line":401},[398,164521,10856],{"class":408},[398,164523,454],{"class":404},[398,164525,119915],{"class":457},[398,164527,2252],{"class":408},[19,164529,9302,164530,164532],{},[395,164531,32652],{}," 是空字典，不是空集合。",[19,164534,164535],{},"集合常用操作：",[389,164537,164539],{"className":30571,"code":164538,"language":30573,"meta":316,"style":316},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[395,164540,164541,164561,164565,164574,164583,164592],{"__ignoreMap":316},[398,164542,164543,164545,164547,164549,164551,164553,164555,164557,164559],{"class":400,"line":401},[398,164544,10856],{"class":408},[398,164546,454],{"class":404},[398,164548,4724],{"class":408},[398,164550,619],{"class":457},[398,164552,12712],{"class":408},[398,164554,486],{"class":457},[398,164556,12712],{"class":408},[398,164558,480],{"class":457},[398,164560,1841],{"class":408},[398,164562,164563],{"class":400,"line":317},[398,164564,2676],{"emptyLinePlaceholder":328},[398,164566,164567,164570,164572],{"class":400,"line":320},[398,164568,164569],{"class":408},"s.add(",[398,164571,695],{"class":457},[398,164573,415],{"class":408},[398,164575,164576,164579,164581],{"class":400,"line":1470},[398,164577,164578],{"class":408},"s.remove(",[398,164580,486],{"class":457},[398,164582,415],{"class":408},[398,164584,164585,164588,164590],{"class":400,"line":1476},[398,164586,164587],{"class":408},"s.discard(",[398,164589,848],{"class":457},[398,164591,415],{"class":408},[398,164593,164594,164596,164598,164600],{"class":400,"line":1490},[398,164595,30608],{"class":457},[398,164597,409],{"class":408},[398,164599,7635],{"class":457},[398,164601,164602],{"class":408},"(s))\n",[19,164604,164605],{},"交并差：",[389,164607,164609],{"className":30571,"code":164608,"language":30573,"meta":316,"style":316},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[395,164610,164611,164631,164651,164655,164670,164683],{"__ignoreMap":316},[398,164612,164613,164615,164617,164619,164621,164623,164625,164627,164629],{"class":400,"line":401},[398,164614,11196],{"class":408},[398,164616,454],{"class":404},[398,164618,4724],{"class":408},[398,164620,619],{"class":457},[398,164622,12712],{"class":408},[398,164624,486],{"class":457},[398,164626,12712],{"class":408},[398,164628,480],{"class":457},[398,164630,1841],{"class":408},[398,164632,164633,164635,164637,164639,164641,164643,164645,164647,164649],{"class":400,"line":317},[398,164634,11222],{"class":408},[398,164636,454],{"class":404},[398,164638,4724],{"class":408},[398,164640,480],{"class":457},[398,164642,12712],{"class":408},[398,164644,695],{"class":457},[398,164646,12712],{"class":408},[398,164648,721],{"class":457},[398,164650,1841],{"class":408},[398,164652,164653],{"class":400,"line":320},[398,164654,2676],{"emptyLinePlaceholder":328},[398,164656,164657,164659,164662,164664,164667],{"class":400,"line":1470},[398,164658,30608],{"class":457},[398,164660,164661],{"class":408},"(a ",[398,164663,755],{"class":404},[398,164665,164666],{"class":408}," b)  ",[398,164668,164669],{"class":467},"# 交集\n",[398,164671,164672,164674,164676,164678,164680],{"class":400,"line":1476},[398,164673,30608],{"class":457},[398,164675,164661],{"class":408},[398,164677,1323],{"class":404},[398,164679,164666],{"class":408},[398,164681,164682],{"class":467},"# 并集\n",[398,164684,164685,164687,164689,164691,164693],{"class":400,"line":1490},[398,164686,30608],{"class":457},[398,164688,164661],{"class":408},[398,164690,934],{"class":404},[398,164692,164666],{"class":408},[398,164694,164695],{"class":467},"# 差集\n",[343,164697,164699],{"id":164698},"_610-字典dict","6.10 字典dict",[19,164701,164702],{},"字典通过 key-value 保存数据。",[389,164704,164706],{"className":30571,"code":164705,"language":30573,"meta":316,"style":316},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[395,164707,164708,164716,164726,164737,164747],{"__ignoreMap":316},[398,164709,164710,164712,164714],{"class":400,"line":401},[398,164711,149674],{"class":408},[398,164713,454],{"class":404},[398,164715,15849],{"class":408},[398,164717,164718,164720,164722,164724],{"class":400,"line":317},[398,164719,147213],{"class":513},[398,164721,51630],{"class":408},[398,164723,150081],{"class":513},[398,164725,31659],{"class":408},[398,164727,164728,164731,164733,164735],{"class":400,"line":320},[398,164729,164730],{"class":513},"    \"age\"",[398,164732,51630],{"class":408},[398,164734,1052],{"class":457},[398,164736,31659],{"class":408},[398,164738,164739,164742,164744],{"class":400,"line":1470},[398,164740,164741],{"class":513},"    \"score\"",[398,164743,51630],{"class":408},[398,164745,164746],{"class":457},"95\n",[398,164748,164749],{"class":400,"line":1476},[398,164750,1841],{"class":408},[19,164752,164753],{},"获取值：",[389,164755,164757],{"className":30571,"code":164756,"language":30573,"meta":316,"style":316},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[395,164758,164759,164770],{"__ignoreMap":316},[398,164760,164761,164763,164766,164768],{"class":400,"line":401},[398,164762,30608],{"class":457},[398,164764,164765],{"class":408},"(student[",[398,164767,62872],{"class":513},[398,164769,4933],{"class":408},[398,164771,164772,164774,164777,164779],{"class":400,"line":317},[398,164773,30608],{"class":457},[398,164775,164776],{"class":408},"(student.get(",[398,164778,62872],{"class":513},[398,164780,30690],{"class":408},[19,164782,15665],{},[389,164784,164786],{"className":30571,"code":164785,"language":30573,"meta":316,"style":316},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[395,164787,164788,164801],{"__ignoreMap":316},[398,164789,164790,164792,164795,164798],{"class":400,"line":401},[398,164791,153052],{"class":408},[398,164793,164794],{"class":513},"\"address\"",[398,164796,164797],{"class":408},"]     ",[398,164799,164800],{"class":467},"# key不存在会报错\n",[398,164802,164803,164806,164808,164810],{"class":400,"line":317},[398,164804,164805],{"class":408},"student.get(",[398,164807,164794],{"class":513},[398,164809,13991],{"class":408},[398,164811,164812],{"class":467},"# key不存在返回None\n",[19,164814,164815],{},"设置默认值：",[389,164817,164819],{"className":30571,"code":164818,"language":30573,"meta":316,"style":316},"print(student.get(\"address\", \"未知\"))\n",[395,164820,164821],{"__ignoreMap":316},[398,164822,164823,164825,164827,164829,164831,164834],{"class":400,"line":401},[398,164824,30608],{"class":457},[398,164826,164776],{"class":408},[398,164828,164794],{"class":513},[398,164830,12712],{"class":408},[398,164832,164833],{"class":513},"\"未知\"",[398,164835,30690],{"class":408},[19,164837,164838],{},"新增和修改：",[389,164840,164842],{"className":30571,"code":164841,"language":30573,"meta":316,"style":316},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[395,164843,164844,164857],{"__ignoreMap":316},[398,164845,164846,164848,164850,164852,164854],{"class":400,"line":401},[398,164847,153052],{"class":408},[398,164849,69317],{"class":513},[398,164851,4719],{"class":408},[398,164853,454],{"class":404},[398,164855,164856],{"class":457}," 19\n",[398,164858,164859,164861,164863,164865,164867],{"class":400,"line":317},[398,164860,153052],{"class":408},[398,164862,164794],{"class":513},[398,164864,4719],{"class":408},[398,164866,454],{"class":404},[398,164868,164869],{"class":513}," \"北京\"\n",[19,164871,164872],{},"删除：",[389,164874,164876],{"className":30571,"code":164875,"language":30573,"meta":316,"style":316},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[395,164877,164878,164891,164901],{"__ignoreMap":316},[398,164879,164880,164882,164884,164887,164889],{"class":400,"line":401},[398,164881,155551],{"class":408},[398,164883,454],{"class":404},[398,164885,164886],{"class":408}," student.pop(",[398,164888,151665],{"class":513},[398,164890,415],{"class":408},[398,164892,164893,164895,164897,164899],{"class":400,"line":317},[398,164894,163576],{"class":404},[398,164896,152342],{"class":408},[398,164898,69317],{"class":513},[398,164900,33439],{"class":408},[398,164902,164903],{"class":400,"line":320},[398,164904,164905],{"class":408},"student.clear()\n",[343,164907,164909],{"id":164908},"_611-字典遍历","6.11 字典遍历",[19,164911,164912],{},"遍历 key：",[389,164914,164916],{"className":30571,"code":164915,"language":30573,"meta":316,"style":316},"for key in student:\n    print(key, student[key])\n",[395,164917,164918,164930],{"__ignoreMap":316},[398,164919,164920,164922,164925,164927],{"class":400,"line":401},[398,164921,3301],{"class":404},[398,164923,164924],{"class":408}," key ",[398,164926,26236],{"class":404},[398,164928,164929],{"class":408}," student:\n",[398,164931,164932,164934],{"class":400,"line":317},[398,164933,31492],{"class":457},[398,164935,164936],{"class":408},"(key, student[key])\n",[19,164938,164939],{},"遍历 value：",[389,164941,164943],{"className":30571,"code":164942,"language":30573,"meta":316,"style":316},"for value in student.values():\n    print(value)\n",[395,164944,164945,164957],{"__ignoreMap":316},[398,164946,164947,164949,164952,164954],{"class":400,"line":401},[398,164948,3301],{"class":404},[398,164950,164951],{"class":408}," value ",[398,164953,26236],{"class":404},[398,164955,164956],{"class":408}," student.values():\n",[398,164958,164959,164961],{"class":400,"line":317},[398,164960,31492],{"class":457},[398,164962,164963],{"class":408},"(value)\n",[19,164965,164966],{},"遍历 key 和 value：",[389,164968,164970],{"className":30571,"code":164969,"language":30573,"meta":316,"style":316},"for key, value in student.items():\n    print(key, value)\n",[395,164971,164972,164984],{"__ignoreMap":316},[398,164973,164974,164976,164979,164981],{"class":400,"line":401},[398,164975,3301],{"class":404},[398,164977,164978],{"class":408}," key, value ",[398,164980,26236],{"class":404},[398,164982,164983],{"class":408}," student.items():\n",[398,164985,164986,164988],{"class":400,"line":317},[398,164987,31492],{"class":457},[398,164989,164990],{"class":408},"(key, value)\n",[343,164992,164994],{"id":164993},"_612-嵌套容器","6.12 嵌套容器",[19,164996,164997],{},"列表中保存字典，是项目中最常见的结构之一。",[389,164999,165001],{"className":30571,"code":165000,"language":30573,"meta":316,"style":316},"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",[395,165002,165003,165011,165039,165067,165095,165099,165103,165113],{"__ignoreMap":316},[398,165004,165005,165007,165009],{"class":400,"line":401},[398,165006,159909],{"class":408},[398,165008,454],{"class":404},[398,165010,55640],{"class":408},[398,165012,165013,165015,165017,165019,165021,165023,165025,165027,165029,165031,165033,165035,165037],{"class":400,"line":317},[398,165014,148578],{"class":408},[398,165016,62872],{"class":513},[398,165018,51630],{"class":408},[398,165020,150081],{"class":513},[398,165022,12712],{"class":408},[398,165024,69317],{"class":513},[398,165026,51630],{"class":408},[398,165028,1052],{"class":457},[398,165030,12712],{"class":408},[398,165032,151665],{"class":513},[398,165034,51630],{"class":408},[398,165036,1391],{"class":457},[398,165038,5206],{"class":408},[398,165040,165041,165043,165045,165047,165049,165051,165053,165055,165057,165059,165061,165063,165065],{"class":400,"line":320},[398,165042,148578],{"class":408},[398,165044,62872],{"class":513},[398,165046,51630],{"class":408},[398,165048,151129],{"class":513},[398,165050,12712],{"class":408},[398,165052,69317],{"class":513},[398,165054,51630],{"class":408},[398,165056,1027],{"class":457},[398,165058,12712],{"class":408},[398,165060,151665],{"class":513},[398,165062,51630],{"class":408},[398,165064,1213],{"class":457},[398,165066,5206],{"class":408},[398,165068,165069,165071,165073,165075,165077,165079,165081,165083,165085,165087,165089,165091,165093],{"class":400,"line":1470},[398,165070,148578],{"class":408},[398,165072,62872],{"class":513},[398,165074,51630],{"class":408},[398,165076,159924],{"class":513},[398,165078,12712],{"class":408},[398,165080,69317],{"class":513},[398,165082,51630],{"class":408},[398,165084,1077],{"class":457},[398,165086,12712],{"class":408},[398,165088,151665],{"class":513},[398,165090,51630],{"class":408},[398,165092,808],{"class":457},[398,165094,5206],{"class":408},[398,165096,165097],{"class":400,"line":1476},[398,165098,33439],{"class":408},[398,165100,165101],{"class":400,"line":1490},[398,165102,2676],{"emptyLinePlaceholder":328},[398,165104,165105,165107,165109,165111],{"class":400,"line":1496},[398,165106,3301],{"class":404},[398,165108,152330],{"class":408},[398,165110,26236],{"class":404},[398,165112,152335],{"class":408},[398,165114,165115,165117,165119,165121,165124,165126],{"class":400,"line":1587},[398,165116,31492],{"class":457},[398,165118,164765],{"class":408},[398,165120,62872],{"class":513},[398,165122,165123],{"class":408},"], student[",[398,165125,151665],{"class":513},[398,165127,4933],{"class":408},[19,165129,165130],{},"统计平均分：",[389,165132,165134],{"className":30571,"code":165133,"language":30573,"meta":316,"style":316},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[395,165135,165136,165144,165148,165158,165170,165174,165189],{"__ignoreMap":316},[398,165137,165138,165140,165142],{"class":400,"line":401},[398,165139,157453],{"class":408},[398,165141,454],{"class":404},[398,165143,47526],{"class":457},[398,165145,165146],{"class":400,"line":317},[398,165147,2676],{"emptyLinePlaceholder":328},[398,165149,165150,165152,165154,165156],{"class":400,"line":320},[398,165151,3301],{"class":404},[398,165153,152330],{"class":408},[398,165155,26236],{"class":404},[398,165157,152335],{"class":408},[398,165159,165160,165162,165164,165166,165168],{"class":400,"line":1470},[398,165161,159500],{"class":408},[398,165163,9754],{"class":404},[398,165165,152342],{"class":408},[398,165167,151665],{"class":513},[398,165169,33439],{"class":408},[398,165171,165172],{"class":400,"line":1476},[398,165173,2676],{"emptyLinePlaceholder":328},[398,165175,165176,165178,165180,165182,165184,165186],{"class":400,"line":1490},[398,165177,163967],{"class":408},[398,165179,454],{"class":404},[398,165181,163972],{"class":408},[398,165183,986],{"class":404},[398,165185,7608],{"class":457},[398,165187,165188],{"class":408},"(students)\n",[398,165190,165191,165193,165195,165197,165199,165201,165203,165205,165207,165209],{"class":400,"line":1496},[398,165192,30608],{"class":457},[398,165194,409],{"class":408},[398,165196,461],{"class":404},[398,165198,163990],{"class":513},[398,165200,1298],{"class":457},[398,165202,163995],{"class":408},[398,165204,157352],{"class":404},[398,165206,1348],{"class":457},[398,165208,653],{"class":513},[398,165210,415],{"class":408},[19,165212,165213],{},"查找学生：",[389,165215,165217],{"className":30571,"code":165216,"language":30573,"meta":316,"style":316},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[395,165218,165219,165234,165238,165248,165262,165268,165272,165278],{"__ignoreMap":316},[398,165220,165221,165223,165225,165227,165229,165232],{"class":400,"line":401},[398,165222,111771],{"class":408},[398,165224,454],{"class":404},[398,165226,60798],{"class":457},[398,165228,409],{"class":408},[398,165230,165231],{"class":513},"\"请输入学生姓名:\"",[398,165233,415],{"class":408},[398,165235,165236],{"class":400,"line":317},[398,165237,2676],{"emptyLinePlaceholder":328},[398,165239,165240,165242,165244,165246],{"class":400,"line":320},[398,165241,3301],{"class":404},[398,165243,152330],{"class":408},[398,165245,26236],{"class":404},[398,165247,152335],{"class":408},[398,165249,165250,165252,165254,165256,165258,165260],{"class":400,"line":1470},[398,165251,3377],{"class":404},[398,165253,152342],{"class":408},[398,165255,62872],{"class":513},[398,165257,4719],{"class":408},[398,165259,3225],{"class":404},[398,165261,160625],{"class":408},[398,165263,165264,165266],{"class":400,"line":1476},[398,165265,32644],{"class":457},[398,165267,150235],{"class":408},[398,165269,165270],{"class":400,"line":1490},[398,165271,31820],{"class":404},[398,165273,165274,165276],{"class":400,"line":1496},[398,165275,1977],{"class":404},[398,165277,4015],{"class":408},[398,165279,165280,165282,165284,165287],{"class":400,"line":1587},[398,165281,31492],{"class":457},[398,165283,409],{"class":408},[398,165285,165286],{"class":513},"\"没有找到\"",[398,165288,415],{"class":408},[343,165290,165292],{"id":165291},"_613-容器通用操作","6.13 容器通用操作",[19,165294,165295],{},"长度：",[389,165297,165299],{"className":30571,"code":165298,"language":30573,"meta":316,"style":316},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[395,165300,165301,165320,165330],{"__ignoreMap":316},[398,165302,165303,165305,165308,165310,165312,165314,165316,165318],{"class":400,"line":401},[398,165304,7635],{"class":457},[398,165306,165307],{"class":408},"([",[398,165309,619],{"class":457},[398,165311,12712],{"class":408},[398,165313,486],{"class":457},[398,165315,12712],{"class":408},[398,165317,480],{"class":457},[398,165319,4933],{"class":408},[398,165321,165322,165324,165326,165328],{"class":400,"line":317},[398,165323,7635],{"class":457},[398,165325,409],{"class":408},[398,165327,156073],{"class":513},[398,165329,415],{"class":408},[398,165331,165332,165334,165337,165339,165341,165343],{"class":400,"line":320},[398,165333,7635],{"class":457},[398,165335,165336],{"class":408},"({",[398,165338,62872],{"class":513},[398,165340,51630],{"class":408},[398,165342,150081],{"class":513},[398,165344,165345],{"class":408},"})\n",[19,165347,165348],{},"最大最小：",[389,165350,165352],{"className":30571,"code":165351,"language":30573,"meta":316,"style":316},"max([1, 2, 3])\nmin([1, 2, 3])\n",[395,165353,165354,165372],{"__ignoreMap":316},[398,165355,165356,165358,165360,165362,165364,165366,165368,165370],{"class":400,"line":401},[398,165357,6292],{"class":457},[398,165359,165307],{"class":408},[398,165361,619],{"class":457},[398,165363,12712],{"class":408},[398,165365,486],{"class":457},[398,165367,12712],{"class":408},[398,165369,480],{"class":457},[398,165371,4933],{"class":408},[398,165373,165374,165377,165379,165381,165383,165385,165387,165389],{"class":400,"line":317},[398,165375,165376],{"class":457},"min",[398,165378,165307],{"class":408},[398,165380,619],{"class":457},[398,165382,12712],{"class":408},[398,165384,486],{"class":457},[398,165386,12712],{"class":408},[398,165388,480],{"class":457},[398,165390,4933],{"class":408},[19,165392,165393],{},"求和：",[389,165395,165397],{"className":30571,"code":165396,"language":30573,"meta":316,"style":316},"sum([1, 2, 3])\n",[395,165398,165399],{"__ignoreMap":316},[398,165400,165401,165404,165406,165408,165410,165412,165414,165416],{"class":400,"line":401},[398,165402,165403],{"class":457},"sum",[398,165405,165307],{"class":408},[398,165407,619],{"class":457},[398,165409,12712],{"class":408},[398,165411,486],{"class":457},[398,165413,12712],{"class":408},[398,165415,480],{"class":457},[398,165417,4933],{"class":408},[19,165419,163664],{},[389,165421,165423],{"className":30571,"code":165422,"language":30573,"meta":316,"style":316},"sorted([3, 1, 2])\n",[395,165424,165425],{"__ignoreMap":316},[398,165426,165427,165430,165432,165434,165436,165438,165440,165442],{"class":400,"line":401},[398,165428,165429],{"class":457},"sorted",[398,165431,165307],{"class":408},[398,165433,480],{"class":457},[398,165435,12712],{"class":408},[398,165437,619],{"class":457},[398,165439,12712],{"class":408},[398,165441,486],{"class":457},[398,165443,4933],{"class":408},[19,165445,165446],{},"类型转换：",[389,165448,165450],{"className":30571,"code":165449,"language":30573,"meta":316,"style":316},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[395,165451,165452,165462,165480],{"__ignoreMap":316},[398,165453,165454,165456,165458,165460],{"class":400,"line":401},[398,165455,154263],{"class":457},[398,165457,409],{"class":408},[398,165459,156073],{"class":513},[398,165461,415],{"class":408},[398,165463,165464,165466,165468,165470,165472,165474,165476,165478],{"class":400,"line":317},[398,165465,155458],{"class":457},[398,165467,165307],{"class":408},[398,165469,619],{"class":457},[398,165471,12712],{"class":408},[398,165473,486],{"class":457},[398,165475,12712],{"class":408},[398,165477,480],{"class":457},[398,165479,4933],{"class":408},[398,165481,165482,165484,165486,165488,165490,165492,165494,165496,165498,165500],{"class":400,"line":320},[398,165483,155483],{"class":457},[398,165485,165307],{"class":408},[398,165487,619],{"class":457},[398,165489,12712],{"class":408},[398,165491,619],{"class":457},[398,165493,12712],{"class":408},[398,165495,486],{"class":457},[398,165497,12712],{"class":408},[398,165499,480],{"class":457},[398,165501,4933],{"class":408},[19,165503,165504],{},"成员判断：",[389,165506,165508],{"className":30571,"code":165507,"language":30573,"meta":316,"style":316},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[395,165509,165510,165527,165551],{"__ignoreMap":316},[398,165511,165512,165514,165516,165519,165522,165525],{"class":400,"line":401},[398,165513,30608],{"class":457},[398,165515,409],{"class":408},[398,165517,165518],{"class":513},"\"a\"",[398,165520,165521],{"class":404}," in",[398,165523,165524],{"class":513}," \"abc\"",[398,165526,415],{"class":408},[398,165528,165529,165531,165533,165535,165537,165539,165541,165543,165545,165547,165549],{"class":400,"line":317},[398,165530,30608],{"class":457},[398,165532,409],{"class":408},[398,165534,619],{"class":457},[398,165536,165521],{"class":404},[398,165538,52419],{"class":408},[398,165540,619],{"class":457},[398,165542,12712],{"class":408},[398,165544,486],{"class":457},[398,165546,12712],{"class":408},[398,165548,480],{"class":457},[398,165550,4933],{"class":408},[398,165552,165553,165555,165557,165559,165561,165563,165565,165567,165569],{"class":400,"line":320},[398,165554,30608],{"class":457},[398,165556,409],{"class":408},[398,165558,62872],{"class":513},[398,165560,165521],{"class":404},[398,165562,4724],{"class":408},[398,165564,62872],{"class":513},[398,165566,51630],{"class":408},[398,165568,150081],{"class":513},[398,165570,165345],{"class":408},[343,165572,165574],{"id":165573},"_614-推导式","6.14 推导式",[19,165576,165577],{},"推导式用于快速生成容器。",[19,165579,165580],{},"列表推导式：",[389,165582,165584],{"className":30571,"code":165583,"language":30573,"meta":316,"style":316},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[395,165585,165586,165613],{"__ignoreMap":316},[398,165587,165588,165590,165592,165595,165597,165599,165601,165603,165605,165607,165609,165611],{"class":400,"line":401},[398,165589,164293],{"class":408},[398,165591,454],{"class":404},[398,165593,165594],{"class":408}," [i ",[398,165596,3301],{"class":404},[398,165598,9715],{"class":408},[398,165600,26236],{"class":404},[398,165602,32636],{"class":457},[398,165604,409],{"class":408},[398,165606,619],{"class":457},[398,165608,12712],{"class":408},[398,165610,746],{"class":457},[398,165612,97493],{"class":408},[398,165614,165615,165617],{"class":400,"line":317},[398,165616,30608],{"class":457},[398,165618,164509],{"class":408},[19,165620,165621],{},"带条件：",[389,165623,165625],{"className":30571,"code":165624,"language":30573,"meta":316,"style":316},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[395,165626,165627,165668],{"__ignoreMap":316},[398,165628,165629,165632,165634,165636,165638,165640,165642,165644,165646,165648,165650,165652,165654,165656,165658,165660,165662,165664,165666],{"class":400,"line":401},[398,165630,165631],{"class":408},"even_nums ",[398,165633,454],{"class":404},[398,165635,165594],{"class":408},[398,165637,3301],{"class":404},[398,165639,9715],{"class":408},[398,165641,26236],{"class":404},[398,165643,32636],{"class":457},[398,165645,409],{"class":408},[398,165647,619],{"class":457},[398,165649,12712],{"class":408},[398,165651,739],{"class":457},[398,165653,13991],{"class":408},[398,165655,1807],{"class":404},[398,165657,9715],{"class":408},[398,165659,730],{"class":404},[398,165661,15032],{"class":457},[398,165663,101752],{"class":404},[398,165665,4369],{"class":457},[398,165667,33439],{"class":408},[398,165669,165670,165672],{"class":400,"line":317},[398,165671,30608],{"class":457},[398,165673,165674],{"class":408},"(even_nums)\n",[19,165676,165677],{},"字典推导式：",[389,165679,165681],{"className":30571,"code":165680,"language":30573,"meta":316,"style":316},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[395,165682,165683,165717],{"__ignoreMap":316},[398,165684,165685,165688,165690,165693,165695,165697,165700,165702,165704,165706,165708,165710,165712,165714],{"class":400,"line":401},[398,165686,165687],{"class":408},"squares ",[398,165689,454],{"class":404},[398,165691,165692],{"class":408}," {i: i ",[398,165694,10938],{"class":404},[398,165696,15032],{"class":457},[398,165698,165699],{"class":404}," for",[398,165701,9715],{"class":408},[398,165703,26236],{"class":404},[398,165705,32636],{"class":457},[398,165707,409],{"class":408},[398,165709,619],{"class":457},[398,165711,12712],{"class":408},[398,165713,746],{"class":457},[398,165715,165716],{"class":408},")}\n",[398,165718,165719,165721],{"class":400,"line":317},[398,165720,30608],{"class":457},[398,165722,165723],{"class":408},"(squares)\n",[19,165725,165726],{},"集合推导式：",[389,165728,165730],{"className":30571,"code":165729,"language":30573,"meta":316,"style":316},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[395,165731,165732,165753],{"__ignoreMap":316},[398,165733,165734,165737,165739,165742,165744,165746,165748,165751],{"class":400,"line":401},[398,165735,165736],{"class":408},"chars ",[398,165738,454],{"class":404},[398,165740,165741],{"class":408}," {ch ",[398,165743,3301],{"class":404},[398,165745,159885],{"class":408},[398,165747,26236],{"class":404},[398,165749,165750],{"class":513}," \"hello\"",[398,165752,1841],{"class":408},[398,165754,165755,165757],{"class":400,"line":317},[398,165756,30608],{"class":457},[398,165758,165759],{"class":408},"(chars)\n",[19,165761,165762],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[343,165764,165766],{"id":165765},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[389,165768,165770],{"className":30571,"code":165769,"language":30573,"meta":316,"style":316},"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",[395,165771,165772,165780,165800,165820,165840,165860,165864,165868,165876,165890,165899,165903,165913,165925,165929,165949,165958,165962,165978,165983,165987,166001,166005,166027,166063],{"__ignoreMap":316},[398,165773,165774,165776,165778],{"class":400,"line":401},[398,165775,159909],{"class":408},[398,165777,454],{"class":404},[398,165779,55640],{"class":408},[398,165781,165782,165784,165786,165788,165790,165792,165794,165796,165798],{"class":400,"line":317},[398,165783,148578],{"class":408},[398,165785,62872],{"class":513},[398,165787,51630],{"class":408},[398,165789,150081],{"class":513},[398,165791,12712],{"class":408},[398,165793,151665],{"class":513},[398,165795,51630],{"class":408},[398,165797,1391],{"class":457},[398,165799,5206],{"class":408},[398,165801,165802,165804,165806,165808,165810,165812,165814,165816,165818],{"class":400,"line":320},[398,165803,148578],{"class":408},[398,165805,62872],{"class":513},[398,165807,51630],{"class":408},[398,165809,151129],{"class":513},[398,165811,12712],{"class":408},[398,165813,151665],{"class":513},[398,165815,51630],{"class":408},[398,165817,1213],{"class":457},[398,165819,5206],{"class":408},[398,165821,165822,165824,165826,165828,165830,165832,165834,165836,165838],{"class":400,"line":1470},[398,165823,148578],{"class":408},[398,165825,62872],{"class":513},[398,165827,51630],{"class":408},[398,165829,159924],{"class":513},[398,165831,12712],{"class":408},[398,165833,151665],{"class":513},[398,165835,51630],{"class":408},[398,165837,808],{"class":457},[398,165839,5206],{"class":408},[398,165841,165842,165844,165846,165848,165850,165852,165854,165856,165858],{"class":400,"line":1476},[398,165843,148578],{"class":408},[398,165845,62872],{"class":513},[398,165847,51630],{"class":408},[398,165849,163503],{"class":513},[398,165851,12712],{"class":408},[398,165853,151665],{"class":513},[398,165855,51630],{"class":408},[398,165857,1284],{"class":457},[398,165859,5206],{"class":408},[398,165861,165862],{"class":400,"line":1490},[398,165863,33439],{"class":408},[398,165865,165866],{"class":400,"line":1496},[398,165867,2676],{"emptyLinePlaceholder":328},[398,165869,165870,165872,165874],{"class":400,"line":1587},[398,165871,157453],{"class":408},[398,165873,454],{"class":404},[398,165875,47526],{"class":457},[398,165877,165878,165881,165883,165886,165888],{"class":400,"line":1593},[398,165879,165880],{"class":408},"max_student ",[398,165882,454],{"class":404},[398,165884,165885],{"class":408}," students[",[398,165887,593],{"class":457},[398,165889,33439],{"class":408},[398,165891,165892,165895,165897],{"class":400,"line":1605},[398,165893,165894],{"class":408},"passed ",[398,165896,454],{"class":404},[398,165898,52031],{"class":408},[398,165900,165901],{"class":400,"line":1888},[398,165902,2676],{"emptyLinePlaceholder":328},[398,165904,165905,165907,165909,165911],{"class":400,"line":1893},[398,165906,3301],{"class":404},[398,165908,152330],{"class":408},[398,165910,26236],{"class":404},[398,165912,152335],{"class":408},[398,165914,165915,165917,165919,165921,165923],{"class":400,"line":1899},[398,165916,159500],{"class":408},[398,165918,9754],{"class":404},[398,165920,152342],{"class":408},[398,165922,151665],{"class":513},[398,165924,33439],{"class":408},[398,165926,165927],{"class":400,"line":1904},[398,165928,2676],{"emptyLinePlaceholder":328},[398,165930,165931,165933,165935,165937,165939,165941,165944,165946],{"class":400,"line":1918},[398,165932,3377],{"class":404},[398,165934,152342],{"class":408},[398,165936,151665],{"class":513},[398,165938,4719],{"class":408},[398,165940,1362],{"class":404},[398,165942,165943],{"class":408}," max_student[",[398,165945,151665],{"class":513},[398,165947,165948],{"class":408},"]:\n",[398,165950,165951,165954,165956],{"class":400,"line":1923},[398,165952,165953],{"class":408},"        max_student ",[398,165955,454],{"class":404},[398,165957,152358],{"class":408},[398,165959,165960],{"class":400,"line":1929},[398,165961,2676],{"emptyLinePlaceholder":328},[398,165963,165964,165966,165968,165970,165972,165974,165976],{"class":400,"line":1950},[398,165965,3377],{"class":404},[398,165967,152342],{"class":408},[398,165969,151665],{"class":513},[398,165971,4719],{"class":408},[398,165973,1986],{"class":404},[398,165975,158030],{"class":457},[398,165977,4015],{"class":408},[398,165979,165980],{"class":400,"line":1955},[398,165981,165982],{"class":408},"        passed.append(student)\n",[398,165984,165985],{"class":400,"line":1969},[398,165986,2676],{"emptyLinePlaceholder":328},[398,165988,165989,165991,165993,165995,165997,165999],{"class":400,"line":1974},[398,165990,163967],{"class":408},[398,165992,454],{"class":404},[398,165994,163972],{"class":408},[398,165996,986],{"class":404},[398,165998,7608],{"class":457},[398,166000,165188],{"class":408},[398,166002,166003],{"class":400,"line":2003},[398,166004,2676],{"emptyLinePlaceholder":328},[398,166006,166007,166009,166011,166013,166015,166017,166019,166021,166023,166025],{"class":400,"line":2008},[398,166008,30608],{"class":457},[398,166010,409],{"class":408},[398,166012,461],{"class":404},[398,166014,163990],{"class":513},[398,166016,1298],{"class":457},[398,166018,163995],{"class":408},[398,166020,157352],{"class":404},[398,166022,1348],{"class":457},[398,166024,653],{"class":513},[398,166026,415],{"class":408},[398,166028,166029,166031,166033,166035,166038,166040,166043,166045,166047,166049,166051,166053,166055,166057,166059,166061],{"class":400,"line":2025},[398,166030,30608],{"class":457},[398,166032,409],{"class":408},[398,166034,461],{"class":404},[398,166036,166037],{"class":513},"\"最高分学生:",[398,166039,1298],{"class":457},[398,166041,166042],{"class":408},"max_student[",[398,166044,153075],{"class":513},[398,166046,1342],{"class":408},[398,166048,1348],{"class":457},[398,166050,4724],{"class":457},[398,166052,166042],{"class":408},[398,166054,153113],{"class":513},[398,166056,1342],{"class":408},[398,166058,1348],{"class":457},[398,166060,653],{"class":513},[398,166062,415],{"class":408},[398,166064,166065,166067,166069,166071,166074,166077,166080,166082,166084],{"class":400,"line":2030},[398,166066,30608],{"class":457},[398,166068,409],{"class":408},[398,166070,461],{"class":404},[398,166072,166073],{"class":513},"\"及格人数:",[398,166075,166076],{"class":457},"{len",[398,166078,166079],{"class":408},"(passed)",[398,166081,1348],{"class":457},[398,166083,653],{"class":513},[398,166085,415],{"class":408},[343,166087,166089],{"id":166088},"_616-易错点","6.16 易错点",[38,166091,166092,166095,166098,166101,166107,166116],{},[41,166093,166094],{},"列表可变，元组和字符串不可变。",[41,166096,166097],{},"切片结束位置不包含。",[41,166099,166100],{},"字典通过 key 取值，不是通过索引。",[41,166102,166103,166104,28578],{},"空集合要用 ",[395,166105,166106],{},"set()",[41,166108,104559,166109,166112,166113,28578],{},[395,166110,166111],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[395,166114,166115],{},"get()",[41,166117,166118],{},"嵌套容器要先看清楚每一层是什么类型。",[343,166120,166122],{"id":166121},"_617-本章练习","6.17 本章练习",[38,166124,166125,166128,166131,166134,166137],{},[41,166126,166127],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[41,166129,166130],{},"输入一句话，统计每个字符出现次数。",[41,166132,166133],{},"使用集合去除列表中的重复元素。",[41,166135,166136],{},"使用字典保存一个学生的信息，并实现修改成绩。",[41,166138,166139],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[5403,166141,166142],{},"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":316,"searchDepth":317,"depth":317,"links":166144},[166145,166146,166147,166148,166149,166150,166151,166152,166153,166154,166155,166156,166157,166158,166159,166160,166161],{"id":163125,"depth":317,"text":163126},{"id":163242,"depth":317,"text":163243},{"id":163332,"depth":317,"text":163333},{"id":163456,"depth":317,"text":163457},{"id":163819,"depth":317,"text":163820},{"id":164006,"depth":317,"text":164007},{"id":164125,"depth":317,"text":164126},{"id":164267,"depth":317,"text":164268},{"id":164454,"depth":317,"text":164455},{"id":164698,"depth":317,"text":164699},{"id":164908,"depth":317,"text":164909},{"id":164993,"depth":317,"text":164994},{"id":165291,"depth":317,"text":165292},{"id":165573,"depth":317,"text":165574},{"id":165765,"depth":317,"text":165766},{"id":166088,"depth":317,"text":166089},{"id":166121,"depth":317,"text":166122},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163117,"description":23654},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166168,"title":166169,"body":166170,"description":23654,"extension":326,"meta":168342,"navigation":328,"path":168343,"seo":168344,"stem":168345,"__hash__":168346},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166171,"toc":168317},[166172,166175,166179,166182,166262,166265,166286,166289,166293,166296,166358,166361,166378,166382,166385,166430,166432,166440,166444,166447,166529,166532,166535,166560,166563,166586,166590,166593,166595,166657,166660,166662,166713,166717,166721,166727,166832,166836,166842,166913,166917,166920,166988,166991,167071,167075,167081,167117,167120,167123,167233,167239,167243,167246,167318,167321,167325,167329,167334,167396,167400,167405,167473,167477,167482,167598,167602,167605,167685,167688,167692,167695,167799,167801,167816,167819,167823,167961,167969,167973,167975,167986,167988,168246,168250,168282,168286,168314],[10,166173,166169],{"id":166174},"_7-函数进阶",[343,166176,166178],{"id":166177},"_71-多返回值","7.1 多返回值",[19,166180,166181],{},"Python 函数可以返回多个值，本质上返回的是元组。",[389,166183,166185],{"className":30571,"code":166184,"language":30573,"meta":316,"style":316},"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",[395,166186,166187,166196,166204,166212,166221,166228,166232,166236,166245,166251],{"__ignoreMap":316},[398,166188,166189,166191,166194],{"class":400,"line":401},[398,166190,32140],{"class":404},[398,166192,166193],{"class":2239}," get_info",[398,166195,32146],{"class":408},[398,166197,166198,166200,166202],{"class":400,"line":317},[398,166199,152563],{"class":408},[398,166201,454],{"class":404},[398,166203,149546],{"class":513},[398,166205,166206,166208,166210],{"class":400,"line":320},[398,166207,152579],{"class":408},[398,166209,454],{"class":404},[398,166211,146744],{"class":457},[398,166213,166214,166216,166218],{"class":400,"line":1470},[398,166215,152594],{"class":408},[398,166217,454],{"class":404},[398,166219,166220],{"class":457}," 95\n",[398,166222,166223,166225],{"class":400,"line":1476},[398,166224,4366],{"class":404},[398,166226,166227],{"class":408}," name, age, score\n",[398,166229,166230],{"class":400,"line":1490},[398,166231,2676],{"emptyLinePlaceholder":328},[398,166233,166234],{"class":400,"line":1496},[398,166235,2676],{"emptyLinePlaceholder":328},[398,166237,166238,166240,166242],{"class":400,"line":1587},[398,166239,161499],{"class":408},[398,166241,454],{"class":404},[398,166243,166244],{"class":408}," get_info()\n",[398,166246,166247,166249],{"class":400,"line":1593},[398,166248,30608],{"class":457},[398,166250,76778],{"class":408},[398,166252,166253,166255,166257,166259],{"class":400,"line":1605},[398,166254,30608],{"class":457},[398,166256,409],{"class":408},[398,166258,103300],{"class":457},[398,166260,166261],{"class":408},"(result))\n",[19,166263,166264],{},"可以直接解包：",[389,166266,166268],{"className":30571,"code":166267,"language":30573,"meta":316,"style":316},"name, age, score = get_info()\nprint(name, age, score)\n",[395,166269,166270,166279],{"__ignoreMap":316},[398,166271,166272,166275,166277],{"class":400,"line":401},[398,166273,166274],{"class":408},"name, age, score ",[398,166276,454],{"class":404},[398,166278,166244],{"class":408},[398,166280,166281,166283],{"class":400,"line":317},[398,166282,30608],{"class":457},[398,166284,166285],{"class":408},"(name, age, score)\n",[19,166287,166288],{},"返回多个值适合函数需要同时给出多个结果时使用。",[343,166290,166292],{"id":166291},"_72-位置参数","7.2 位置参数",[19,166294,166295],{},"位置参数按顺序传递。",[389,166297,166299],{"className":30571,"code":166298,"language":30573,"meta":316,"style":316},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[395,166300,166301,166309,166337,166341,166345],{"__ignoreMap":316},[398,166302,166303,166305,166307],{"class":400,"line":401},[398,166304,32140],{"class":404},[398,166306,149565],{"class":2239},[398,166308,149568],{"class":408},[398,166310,166311,166313,166315,166317,166319,166321,166323,166325,166327,166329,166331,166333,166335],{"class":400,"line":317},[398,166312,31492],{"class":457},[398,166314,409],{"class":408},[398,166316,461],{"class":404},[398,166318,149579],{"class":513},[398,166320,1298],{"class":457},[398,166322,80003],{"class":408},[398,166324,1348],{"class":457},[398,166326,149588],{"class":513},[398,166328,1298],{"class":457},[398,166330,70414],{"class":408},[398,166332,1348],{"class":457},[398,166334,149597],{"class":513},[398,166336,415],{"class":408},[398,166338,166339],{"class":400,"line":320},[398,166340,2676],{"emptyLinePlaceholder":328},[398,166342,166343],{"class":400,"line":1470},[398,166344,2676],{"emptyLinePlaceholder":328},[398,166346,166347,166350,166352,166354,166356],{"class":400,"line":1476},[398,166348,166349],{"class":408},"introduce(",[398,166351,150081],{"class":513},[398,166353,12712],{"class":408},[398,166355,1052],{"class":457},[398,166357,415],{"class":408},[19,166359,166360],{},"顺序错了就会得到错误含义：",[389,166362,166364],{"className":30571,"code":166363,"language":30573,"meta":316,"style":316},"introduce(18, \"小明\")\n",[395,166365,166366],{"__ignoreMap":316},[398,166367,166368,166370,166372,166374,166376],{"class":400,"line":401},[398,166369,166349],{"class":408},[398,166371,1052],{"class":457},[398,166373,12712],{"class":408},[398,166375,150081],{"class":513},[398,166377,415],{"class":408},[343,166379,166381],{"id":166380},"_73-关键字参数","7.3 关键字参数",[19,166383,166384],{},"关键字参数按参数名传递。",[389,166386,166388],{"className":30571,"code":166387,"language":30573,"meta":316,"style":316},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[395,166389,166390,166410],{"__ignoreMap":316},[398,166391,166392,166394,166396,166398,166400,166402,166404,166406,166408],{"class":400,"line":401},[398,166393,166349],{"class":408},[398,166395,80003],{"class":5493},[398,166397,454],{"class":404},[398,166399,150081],{"class":513},[398,166401,12712],{"class":408},[398,166403,70414],{"class":5493},[398,166405,454],{"class":404},[398,166407,1052],{"class":457},[398,166409,415],{"class":408},[398,166411,166412,166414,166416,166418,166420,166422,166424,166426,166428],{"class":400,"line":317},[398,166413,166349],{"class":408},[398,166415,70414],{"class":5493},[398,166417,454],{"class":404},[398,166419,1052],{"class":457},[398,166421,12712],{"class":408},[398,166423,80003],{"class":5493},[398,166425,454],{"class":404},[398,166427,150081],{"class":513},[398,166429,415],{"class":408},[19,166431,118127],{},[38,166433,166434,166437],{},[41,166435,166436],{},"顺序不容易错。",[41,166438,166439],{},"调用时可读性更强。",[343,166441,166443],{"id":166442},"_74-默认参数","7.4 默认参数",[19,166445,166446],{},"默认参数给参数设置默认值。",[389,166448,166450],{"className":30571,"code":166449,"language":30573,"meta":316,"style":316},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[395,166451,166452,166468,166498,166502,166506,166516],{"__ignoreMap":316},[398,166453,166454,166456,166458,166461,166463,166466],{"class":400,"line":401},[398,166455,32140],{"class":404},[398,166457,122286],{"class":2239},[398,166459,166460],{"class":408},"(host, port",[398,166462,454],{"class":404},[398,166464,166465],{"class":457},"3306",[398,166467,30979],{"class":408},[398,166469,166470,166472,166474,166476,166479,166481,166483,166485,166487,166489,166492,166494,166496],{"class":400,"line":317},[398,166471,31492],{"class":457},[398,166473,409],{"class":408},[398,166475,461],{"class":404},[398,166477,166478],{"class":513},"\"连接",[398,166480,1298],{"class":457},[398,166482,27588],{"class":408},[398,166484,1348],{"class":457},[398,166486,1261],{"class":513},[398,166488,1298],{"class":457},[398,166490,166491],{"class":408},"port",[398,166493,1348],{"class":457},[398,166495,653],{"class":513},[398,166497,415],{"class":408},[398,166499,166500],{"class":400,"line":320},[398,166501,2676],{"emptyLinePlaceholder":328},[398,166503,166504],{"class":400,"line":1470},[398,166505,2676],{"emptyLinePlaceholder":328},[398,166507,166508,166511,166514],{"class":400,"line":1476},[398,166509,166510],{"class":408},"connect(",[398,166512,166513],{"class":513},"\"localhost\"",[398,166515,415],{"class":408},[398,166517,166518,166520,166522,166524,166527],{"class":400,"line":1490},[398,166519,166510],{"class":408},[398,166521,166513],{"class":513},[398,166523,12712],{"class":408},[398,166525,166526],{"class":457},"6379",[398,166528,415],{"class":408},[19,166530,166531],{},"注意：默认参数必须放在非默认参数后面。",[19,166533,166534],{},"错误：",[389,166536,166538],{"className":30571,"code":166537,"language":30573,"meta":316,"style":316},"def connect(port=3306, host):\n    pass\n",[395,166539,166540,166556],{"__ignoreMap":316},[398,166541,166542,166544,166546,166549,166551,166553],{"class":400,"line":401},[398,166543,32140],{"class":404},[398,166545,122286],{"class":2239},[398,166547,166548],{"class":408},"(port",[398,166550,454],{"class":404},[398,166552,166465],{"class":457},[398,166554,166555],{"class":408},", host):\n",[398,166557,166558],{"class":400,"line":317},[398,166559,149730],{"class":404},[19,166561,166562],{},"正确：",[389,166564,166566],{"className":30571,"code":166565,"language":30573,"meta":316,"style":316},"def connect(host, port=3306):\n    pass\n",[395,166567,166568,166582],{"__ignoreMap":316},[398,166569,166570,166572,166574,166576,166578,166580],{"class":400,"line":401},[398,166571,32140],{"class":404},[398,166573,122286],{"class":2239},[398,166575,166460],{"class":408},[398,166577,454],{"class":404},[398,166579,166465],{"class":457},[398,166581,30979],{"class":408},[398,166583,166584],{"class":400,"line":317},[398,166585,149730],{"class":404},[343,166587,166589],{"id":166588},"_75-默认参数的坑","7.5 默认参数的坑",[19,166591,166592],{},"不要使用可变对象作为默认参数。",[19,166594,157816],{},[389,166596,166598],{"className":30571,"code":166597,"language":30573,"meta":316,"style":316},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[395,166599,166600,166615,166620,166627,166631,166635,166646],{"__ignoreMap":316},[398,166601,166602,166604,166607,166610,166612],{"class":400,"line":401},[398,166603,32140],{"class":404},[398,166605,166606],{"class":2239}," add_item",[398,166608,166609],{"class":408},"(item, items",[398,166611,454],{"class":404},[398,166613,166614],{"class":408},"[]):\n",[398,166616,166617],{"class":400,"line":317},[398,166618,166619],{"class":408},"    items.append(item)\n",[398,166621,166622,166624],{"class":400,"line":320},[398,166623,4366],{"class":404},[398,166625,166626],{"class":408}," items\n",[398,166628,166629],{"class":400,"line":1470},[398,166630,2676],{"emptyLinePlaceholder":328},[398,166632,166633],{"class":400,"line":1476},[398,166634,2676],{"emptyLinePlaceholder":328},[398,166636,166637,166639,166642,166644],{"class":400,"line":1490},[398,166638,30608],{"class":457},[398,166640,166641],{"class":408},"(add_item(",[398,166643,165518],{"class":513},[398,166645,30690],{"class":408},[398,166647,166648,166650,166652,166655],{"class":400,"line":1496},[398,166649,30608],{"class":457},[398,166651,166641],{"class":408},[398,166653,166654],{"class":513},"\"b\"",[398,166656,30690],{"class":408},[19,166658,166659],{},"第二次调用会复用第一次的列表。",[19,166661,156081],{},[389,166663,166665],{"className":30571,"code":166664,"language":30573,"meta":316,"style":316},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[395,166666,166667,166681,166694,166703,166707],{"__ignoreMap":316},[398,166668,166669,166671,166673,166675,166677,166679],{"class":400,"line":401},[398,166670,32140],{"class":404},[398,166672,166606],{"class":2239},[398,166674,166609],{"class":408},[398,166676,454],{"class":404},[398,166678,95879],{"class":457},[398,166680,30979],{"class":408},[398,166682,166683,166685,166688,166690,166692],{"class":400,"line":317},[398,166684,3377],{"class":404},[398,166686,166687],{"class":408}," items ",[398,166689,39120],{"class":404},[398,166691,39126],{"class":457},[398,166693,4015],{"class":408},[398,166695,166696,166699,166701],{"class":400,"line":320},[398,166697,166698],{"class":408},"        items ",[398,166700,454],{"class":404},[398,166702,52031],{"class":408},[398,166704,166705],{"class":400,"line":1470},[398,166706,166619],{"class":408},[398,166708,166709,166711],{"class":400,"line":1476},[398,166710,4366],{"class":404},[398,166712,166626],{"class":408},[343,166714,166716],{"id":166715},"_76-不定长参数","7.6 不定长参数",[14,166718,166720],{"id":166719},"_761-args","7.6.1 *args",[19,166722,166723,166726],{},[395,166724,166725],{},"*args"," 接收任意数量的位置参数，得到元组。",[389,166728,166730],{"className":30571,"code":166729,"language":30573,"meta":316,"style":316},"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",[395,166731,166732,166745,166753,166764,166773,166779,166783,166787,166806],{"__ignoreMap":316},[398,166733,166734,166736,166738,166740,166742],{"class":400,"line":401},[398,166735,32140],{"class":404},[398,166737,5486],{"class":2239},[398,166739,409],{"class":408},[398,166741,857],{"class":404},[398,166743,166744],{"class":408},"args):\n",[398,166746,166747,166749,166751],{"class":400,"line":317},[398,166748,159500],{"class":408},[398,166750,454],{"class":404},[398,166752,47526],{"class":457},[398,166754,166755,166757,166759,166761],{"class":400,"line":320},[398,166756,3477],{"class":404},[398,166758,156373],{"class":408},[398,166760,26236],{"class":404},[398,166762,166763],{"class":408}," args:\n",[398,166765,166766,166768,166770],{"class":400,"line":1470},[398,166767,160175],{"class":408},[398,166769,9754],{"class":404},[398,166771,166772],{"class":408}," num\n",[398,166774,166775,166777],{"class":400,"line":1476},[398,166776,4366],{"class":404},[398,166778,162480],{"class":408},[398,166780,166781],{"class":400,"line":1490},[398,166782,2676],{"emptyLinePlaceholder":328},[398,166784,166785],{"class":400,"line":1496},[398,166786,2676],{"emptyLinePlaceholder":328},[398,166788,166789,166791,166794,166796,166798,166800,166802,166804],{"class":400,"line":1587},[398,166790,30608],{"class":457},[398,166792,166793],{"class":408},"(add(",[398,166795,619],{"class":457},[398,166797,12712],{"class":408},[398,166799,486],{"class":457},[398,166801,12712],{"class":408},[398,166803,480],{"class":457},[398,166805,30690],{"class":408},[398,166807,166808,166810,166812,166814,166816,166818,166820,166822,166824,166826,166828,166830],{"class":400,"line":1593},[398,166809,30608],{"class":457},[398,166811,166793],{"class":408},[398,166813,619],{"class":457},[398,166815,12712],{"class":408},[398,166817,486],{"class":457},[398,166819,12712],{"class":408},[398,166821,480],{"class":457},[398,166823,12712],{"class":408},[398,166825,695],{"class":457},[398,166827,12712],{"class":408},[398,166829,721],{"class":457},[398,166831,30690],{"class":408},[14,166833,166835],{"id":166834},"_762-kwargs","7.6.2 **kwargs",[19,166837,166838,166841],{},[395,166839,166840],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[389,166843,166845],{"className":30571,"code":166844,"language":30573,"meta":316,"style":316},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[395,166846,166847,166860,166871,166877,166881,166885],{"__ignoreMap":316},[398,166848,166849,166851,166853,166855,166857],{"class":400,"line":401},[398,166850,32140],{"class":404},[398,166852,162138],{"class":2239},[398,166854,409],{"class":408},[398,166856,10938],{"class":404},[398,166858,166859],{"class":408},"kwargs):\n",[398,166861,166862,166864,166866,166868],{"class":400,"line":317},[398,166863,3477],{"class":404},[398,166865,164978],{"class":408},[398,166867,26236],{"class":404},[398,166869,166870],{"class":408}," kwargs.items():\n",[398,166872,166873,166875],{"class":400,"line":320},[398,166874,32644],{"class":457},[398,166876,164990],{"class":408},[398,166878,166879],{"class":400,"line":1470},[398,166880,2676],{"emptyLinePlaceholder":328},[398,166882,166883],{"class":400,"line":1476},[398,166884,2676],{"emptyLinePlaceholder":328},[398,166886,166887,166889,166891,166893,166895,166897,166899,166901,166903,166905,166907,166909,166911],{"class":400,"line":1490},[398,166888,162203],{"class":408},[398,166890,80003],{"class":5493},[398,166892,454],{"class":404},[398,166894,150081],{"class":513},[398,166896,12712],{"class":408},[398,166898,70414],{"class":5493},[398,166900,454],{"class":404},[398,166902,1052],{"class":457},[398,166904,12712],{"class":408},[398,166906,70465],{"class":5493},[398,166908,454],{"class":404},[398,166910,69462],{"class":513},[398,166912,415],{"class":408},[343,166914,166916],{"id":166915},"_77-参数解包","7.7 参数解包",[19,166918,166919],{},"列表或元组解包为位置参数：",[389,166921,166923],{"className":30571,"code":166922,"language":30573,"meta":316,"style":316},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[395,166924,166925,166934,166949,166953,166957,166977],{"__ignoreMap":316},[398,166926,166927,166929,166931],{"class":400,"line":401},[398,166928,32140],{"class":404},[398,166930,5486],{"class":2239},[398,166932,166933],{"class":408},"(a, b, c):\n",[398,166935,166936,166938,166940,166942,166944,166946],{"class":400,"line":317},[398,166937,4366],{"class":404},[398,166939,11146],{"class":408},[398,166941,883],{"class":404},[398,166943,11159],{"class":408},[398,166945,883],{"class":404},[398,166947,166948],{"class":408}," c\n",[398,166950,166951],{"class":400,"line":320},[398,166952,2676],{"emptyLinePlaceholder":328},[398,166954,166955],{"class":400,"line":1470},[398,166956,2676],{"emptyLinePlaceholder":328},[398,166958,166959,166961,166963,166965,166967,166969,166971,166973,166975],{"class":400,"line":1476},[398,166960,164293],{"class":408},[398,166962,454],{"class":404},[398,166964,52419],{"class":408},[398,166966,619],{"class":457},[398,166968,12712],{"class":408},[398,166970,486],{"class":457},[398,166972,12712],{"class":408},[398,166974,480],{"class":457},[398,166976,33439],{"class":408},[398,166978,166979,166981,166983,166985],{"class":400,"line":1490},[398,166980,30608],{"class":457},[398,166982,166793],{"class":408},[398,166984,857],{"class":404},[398,166986,166987],{"class":408},"nums))\n",[19,166989,166990],{},"字典解包为关键字参数：",[389,166992,166994],{"className":30571,"code":166993,"language":30573,"meta":316,"style":316},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[395,166995,166996,167004,167030,167034,167038,167062],{"__ignoreMap":316},[398,166997,166998,167000,167002],{"class":400,"line":401},[398,166999,32140],{"class":404},[398,167001,149565],{"class":2239},[398,167003,149568],{"class":408},[398,167005,167006,167008,167010,167012,167014,167016,167018,167020,167022,167024,167026,167028],{"class":400,"line":317},[398,167007,31492],{"class":457},[398,167009,409],{"class":408},[398,167011,461],{"class":404},[398,167013,653],{"class":513},[398,167015,1298],{"class":457},[398,167017,80003],{"class":408},[398,167019,1348],{"class":457},[398,167021,4724],{"class":457},[398,167023,70414],{"class":408},[398,167025,1348],{"class":457},[398,167027,653],{"class":513},[398,167029,415],{"class":408},[398,167031,167032],{"class":400,"line":320},[398,167033,2676],{"emptyLinePlaceholder":328},[398,167035,167036],{"class":400,"line":1470},[398,167037,2676],{"emptyLinePlaceholder":328},[398,167039,167040,167042,167044,167046,167048,167050,167052,167054,167056,167058,167060],{"class":400,"line":1476},[398,167041,116507],{"class":408},[398,167043,454],{"class":404},[398,167045,4724],{"class":408},[398,167047,62872],{"class":513},[398,167049,51630],{"class":408},[398,167051,150081],{"class":513},[398,167053,12712],{"class":408},[398,167055,69317],{"class":513},[398,167057,51630],{"class":408},[398,167059,1052],{"class":457},[398,167061,1841],{"class":408},[398,167063,167064,167066,167068],{"class":400,"line":1490},[398,167065,166349],{"class":408},[398,167067,10938],{"class":404},[398,167069,167070],{"class":408},"info)\n",[343,167072,167074],{"id":167073},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,167076,167077,167080],{},[395,167078,167079],{},"lambda"," 用于定义简单匿名函数。",[389,167082,167084],{"className":30571,"code":167083,"language":30573,"meta":316,"style":316},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[395,167085,167086,167103],{"__ignoreMap":316},[398,167087,167088,167091,167093,167096,167099,167101],{"class":400,"line":401},[398,167089,167090],{"class":408},"add ",[398,167092,454],{"class":404},[398,167094,167095],{"class":404}," lambda",[398,167097,167098],{"class":408}," a, b: a ",[398,167100,883],{"class":404},[398,167102,151297],{"class":408},[398,167104,167105,167107,167109,167111,167113,167115],{"class":400,"line":317},[398,167106,30608],{"class":457},[398,167108,166793],{"class":408},[398,167110,619],{"class":457},[398,167112,12712],{"class":408},[398,167114,486],{"class":457},[398,167116,30690],{"class":408},[19,167118,167119],{},"常和排序、过滤等函数一起使用。",[19,167121,167122],{},"按分数排序：",[389,167124,167126],{"className":30571,"code":167125,"language":30573,"meta":316,"style":316},"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",[395,167127,167128,167136,167156,167176,167196,167200,167204,167227],{"__ignoreMap":316},[398,167129,167130,167132,167134],{"class":400,"line":401},[398,167131,159909],{"class":408},[398,167133,454],{"class":404},[398,167135,55640],{"class":408},[398,167137,167138,167140,167142,167144,167146,167148,167150,167152,167154],{"class":400,"line":317},[398,167139,148578],{"class":408},[398,167141,62872],{"class":513},[398,167143,51630],{"class":408},[398,167145,150081],{"class":513},[398,167147,12712],{"class":408},[398,167149,151665],{"class":513},[398,167151,51630],{"class":408},[398,167153,1391],{"class":457},[398,167155,5206],{"class":408},[398,167157,167158,167160,167162,167164,167166,167168,167170,167172,167174],{"class":400,"line":320},[398,167159,148578],{"class":408},[398,167161,62872],{"class":513},[398,167163,51630],{"class":408},[398,167165,151129],{"class":513},[398,167167,12712],{"class":408},[398,167169,151665],{"class":513},[398,167171,51630],{"class":408},[398,167173,1213],{"class":457},[398,167175,5206],{"class":408},[398,167177,167178,167180,167182,167184,167186,167188,167190,167192,167194],{"class":400,"line":1470},[398,167179,148578],{"class":408},[398,167181,62872],{"class":513},[398,167183,51630],{"class":408},[398,167185,159924],{"class":513},[398,167187,12712],{"class":408},[398,167189,151665],{"class":513},[398,167191,51630],{"class":408},[398,167193,808],{"class":457},[398,167195,5206],{"class":408},[398,167197,167198],{"class":400,"line":1476},[398,167199,33439],{"class":408},[398,167201,167202],{"class":400,"line":1490},[398,167203,2676],{"emptyLinePlaceholder":328},[398,167205,167206,167209,167211,167213,167215,167217,167219,167221,167223,167225],{"class":400,"line":1496},[398,167207,167208],{"class":408},"students.sort(",[398,167210,154139],{"class":5493},[398,167212,154142],{"class":404},[398,167214,154145],{"class":408},[398,167216,151665],{"class":513},[398,167218,112395],{"class":408},[398,167220,163721],{"class":5493},[398,167222,454],{"class":404},[398,167224,31669],{"class":457},[398,167226,415],{"class":408},[398,167228,167229,167231],{"class":400,"line":1587},[398,167230,30608],{"class":457},[398,167232,165188],{"class":408},[19,167234,167235,167236,167238],{},"如果逻辑复杂，不要硬写 ",[395,167237,167079],{},"，定义普通函数更清晰。",[343,167240,167242],{"id":167241},"_79-函数作为参数","7.9 函数作为参数",[19,167244,167245],{},"函数可以作为参数传给另一个函数。",[389,167247,167249],{"className":30571,"code":167248,"language":30573,"meta":316,"style":316},"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",[395,167250,167251,167259,167269,167273,167277,167287,167294,167298,167302],{"__ignoreMap":316},[398,167252,167253,167255,167257],{"class":400,"line":401},[398,167254,32140],{"class":404},[398,167256,5486],{"class":2239},[398,167258,151286],{"class":408},[398,167260,167261,167263,167265,167267],{"class":400,"line":317},[398,167262,4366],{"class":404},[398,167264,11146],{"class":408},[398,167266,883],{"class":404},[398,167268,151297],{"class":408},[398,167270,167271],{"class":400,"line":320},[398,167272,2676],{"emptyLinePlaceholder":328},[398,167274,167275],{"class":400,"line":1470},[398,167276,2676],{"emptyLinePlaceholder":328},[398,167278,167279,167281,167284],{"class":400,"line":1476},[398,167280,32140],{"class":404},[398,167282,167283],{"class":2239}," calculate",[398,167285,167286],{"class":408},"(a, b, func):\n",[398,167288,167289,167291],{"class":400,"line":1490},[398,167290,4366],{"class":404},[398,167292,167293],{"class":408}," func(a, b)\n",[398,167295,167296],{"class":400,"line":1496},[398,167297,2676],{"emptyLinePlaceholder":328},[398,167299,167300],{"class":400,"line":1587},[398,167301,2676],{"emptyLinePlaceholder":328},[398,167303,167304,167306,167309,167311,167313,167315],{"class":400,"line":1593},[398,167305,30608],{"class":457},[398,167307,167308],{"class":408},"(calculate(",[398,167310,848],{"class":457},[398,167312,12712],{"class":408},[398,167314,1102],{"class":457},[398,167316,167317],{"class":408},", add))\n",[19,167319,167320],{},"这种思想在排序、回调、框架中经常出现。",[343,167322,167324],{"id":167323},"_710-mapfiltersorted","7.10 map、filter、sorted",[14,167326,167328],{"id":167327},"_7101-map","7.10.1 map",[19,167330,167331,167333],{},[395,167332,74237],{}," 对每个元素执行函数。",[389,167335,167337],{"className":30571,"code":167336,"language":30573,"meta":316,"style":316},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[395,167338,167339,167363,167386],{"__ignoreMap":316},[398,167340,167341,167343,167345,167347,167349,167351,167353,167355,167357,167359,167361],{"class":400,"line":401},[398,167342,164293],{"class":408},[398,167344,454],{"class":404},[398,167346,52419],{"class":408},[398,167348,619],{"class":457},[398,167350,12712],{"class":408},[398,167352,486],{"class":457},[398,167354,12712],{"class":408},[398,167356,480],{"class":457},[398,167358,12712],{"class":408},[398,167360,695],{"class":457},[398,167362,33439],{"class":408},[398,167364,167365,167367,167369,167372,167374,167376,167379,167381,167383],{"class":400,"line":317},[398,167366,161499],{"class":408},[398,167368,454],{"class":404},[398,167370,167371],{"class":457}," map",[398,167373,409],{"class":408},[398,167375,167079],{"class":404},[398,167377,167378],{"class":408}," x: x ",[398,167380,857],{"class":404},[398,167382,15032],{"class":457},[398,167384,167385],{"class":408},", nums)\n",[398,167387,167388,167390,167392,167394],{"class":400,"line":320},[398,167389,30608],{"class":457},[398,167391,409],{"class":408},[398,167393,154263],{"class":457},[398,167395,166261],{"class":408},[14,167397,167399],{"id":167398},"_7102-filter","7.10.2 filter",[19,167401,167402,167404],{},[395,167403,80244],{}," 保留满足条件的元素。",[389,167406,167408],{"className":30571,"code":167407,"language":30573,"meta":316,"style":316},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[395,167409,167410,167438,167463],{"__ignoreMap":316},[398,167411,167412,167414,167416,167418,167420,167422,167424,167426,167428,167430,167432,167434,167436],{"class":400,"line":401},[398,167413,164293],{"class":408},[398,167415,454],{"class":404},[398,167417,52419],{"class":408},[398,167419,619],{"class":457},[398,167421,12712],{"class":408},[398,167423,486],{"class":457},[398,167425,12712],{"class":408},[398,167427,480],{"class":457},[398,167429,12712],{"class":408},[398,167431,695],{"class":457},[398,167433,12712],{"class":408},[398,167435,721],{"class":457},[398,167437,33439],{"class":408},[398,167439,167440,167442,167444,167447,167449,167451,167453,167455,167457,167459,167461],{"class":400,"line":317},[398,167441,161499],{"class":408},[398,167443,454],{"class":404},[398,167445,167446],{"class":457}," filter",[398,167448,409],{"class":408},[398,167450,167079],{"class":404},[398,167452,167378],{"class":408},[398,167454,730],{"class":404},[398,167456,15032],{"class":457},[398,167458,101752],{"class":404},[398,167460,4369],{"class":457},[398,167462,167385],{"class":408},[398,167464,167465,167467,167469,167471],{"class":400,"line":320},[398,167466,30608],{"class":457},[398,167468,409],{"class":408},[398,167470,154263],{"class":457},[398,167472,166261],{"class":408},[14,167474,167476],{"id":167475},"_7103-sorted","7.10.3 sorted",[19,167478,167479,167481],{},[395,167480,165429],{}," 返回排序后的新列表。",[389,167483,167485],{"className":30571,"code":167484,"language":30573,"meta":316,"style":316},"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",[395,167486,167487,167495,167515,167535,167555,167559,167563,167592],{"__ignoreMap":316},[398,167488,167489,167491,167493],{"class":400,"line":401},[398,167490,159909],{"class":408},[398,167492,454],{"class":404},[398,167494,55640],{"class":408},[398,167496,167497,167499,167501,167503,167505,167507,167509,167511,167513],{"class":400,"line":317},[398,167498,148578],{"class":408},[398,167500,62872],{"class":513},[398,167502,51630],{"class":408},[398,167504,150081],{"class":513},[398,167506,12712],{"class":408},[398,167508,151665],{"class":513},[398,167510,51630],{"class":408},[398,167512,1391],{"class":457},[398,167514,5206],{"class":408},[398,167516,167517,167519,167521,167523,167525,167527,167529,167531,167533],{"class":400,"line":320},[398,167518,148578],{"class":408},[398,167520,62872],{"class":513},[398,167522,51630],{"class":408},[398,167524,151129],{"class":513},[398,167526,12712],{"class":408},[398,167528,151665],{"class":513},[398,167530,51630],{"class":408},[398,167532,1213],{"class":457},[398,167534,5206],{"class":408},[398,167536,167537,167539,167541,167543,167545,167547,167549,167551,167553],{"class":400,"line":1470},[398,167538,148578],{"class":408},[398,167540,62872],{"class":513},[398,167542,51630],{"class":408},[398,167544,159924],{"class":513},[398,167546,12712],{"class":408},[398,167548,151665],{"class":513},[398,167550,51630],{"class":408},[398,167552,808],{"class":457},[398,167554,5206],{"class":408},[398,167556,167557],{"class":400,"line":1476},[398,167558,33439],{"class":408},[398,167560,167561],{"class":400,"line":1490},[398,167562,2676],{"emptyLinePlaceholder":328},[398,167564,167565,167567,167569,167571,167574,167576,167578,167580,167582,167584,167586,167588,167590],{"class":400,"line":1496},[398,167566,161499],{"class":408},[398,167568,454],{"class":404},[398,167570,163797],{"class":457},[398,167572,167573],{"class":408},"(students, ",[398,167575,154139],{"class":5493},[398,167577,154142],{"class":404},[398,167579,154145],{"class":408},[398,167581,151665],{"class":513},[398,167583,112395],{"class":408},[398,167585,163721],{"class":5493},[398,167587,454],{"class":404},[398,167589,31669],{"class":457},[398,167591,415],{"class":408},[398,167593,167594,167596],{"class":400,"line":1587},[398,167595,30608],{"class":457},[398,167597,76778],{"class":408},[343,167599,167601],{"id":167600},"_711-闭包入门","7.11 闭包入门",[19,167603,167604],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[389,167606,167608],{"className":30571,"code":167607,"language":30573,"meta":316,"style":316},"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",[395,167609,167610,167620,167630,167641,167645,167652,167656,167660,167674],{"__ignoreMap":316},[398,167611,167612,167614,167617],{"class":400,"line":401},[398,167613,32140],{"class":404},[398,167615,167616],{"class":2239}," outer",[398,167618,167619],{"class":408},"(base):\n",[398,167621,167622,167624,167627],{"class":400,"line":317},[398,167623,30994],{"class":404},[398,167625,167626],{"class":2239}," inner",[398,167628,167629],{"class":408},"(num):\n",[398,167631,167632,167634,167637,167639],{"class":400,"line":320},[398,167633,15029],{"class":404},[398,167635,167636],{"class":408}," base ",[398,167638,883],{"class":404},[398,167640,166772],{"class":408},[398,167642,167643],{"class":400,"line":1470},[398,167644,2676],{"emptyLinePlaceholder":328},[398,167646,167647,167649],{"class":400,"line":1476},[398,167648,4366],{"class":404},[398,167650,167651],{"class":408}," inner\n",[398,167653,167654],{"class":400,"line":1490},[398,167655,2676],{"emptyLinePlaceholder":328},[398,167657,167658],{"class":400,"line":1496},[398,167659,2676],{"emptyLinePlaceholder":328},[398,167661,167662,167665,167667,167670,167672],{"class":400,"line":1587},[398,167663,167664],{"class":408},"add_10 ",[398,167666,454],{"class":404},[398,167668,167669],{"class":408}," outer(",[398,167671,848],{"class":457},[398,167673,415],{"class":408},[398,167675,167676,167678,167681,167683],{"class":400,"line":1593},[398,167677,30608],{"class":457},[398,167679,167680],{"class":408},"(add_10(",[398,167682,721],{"class":457},[398,167684,30690],{"class":408},[19,167686,167687],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[343,167689,167691],{"id":167690},"_712-装饰器入门","7.12 装饰器入门",[19,167693,167694],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[389,167696,167698],{"className":30571,"code":167697,"language":30573,"meta":316,"style":316},"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",[395,167699,167700,167709,167718,167729,167734,167745,167749,167756,167760,167764,167769,167777,167787,167791,167795],{"__ignoreMap":316},[398,167701,167702,167704,167706],{"class":400,"line":401},[398,167703,32140],{"class":404},[398,167705,87384],{"class":2239},[398,167707,167708],{"class":408},"(func):\n",[398,167710,167711,167713,167716],{"class":400,"line":317},[398,167712,30994],{"class":404},[398,167714,167715],{"class":2239}," wrapper",[398,167717,32146],{"class":408},[398,167719,167720,167722,167724,167727],{"class":400,"line":320},[398,167721,32644],{"class":457},[398,167723,409],{"class":408},[398,167725,167726],{"class":513},"\"函数开始执行\"",[398,167728,415],{"class":408},[398,167730,167731],{"class":400,"line":1470},[398,167732,167733],{"class":408},"        func()\n",[398,167735,167736,167738,167740,167743],{"class":400,"line":1476},[398,167737,32644],{"class":457},[398,167739,409],{"class":408},[398,167741,167742],{"class":513},"\"函数执行结束\"",[398,167744,415],{"class":408},[398,167746,167747],{"class":400,"line":1490},[398,167748,2676],{"emptyLinePlaceholder":328},[398,167750,167751,167753],{"class":400,"line":1496},[398,167752,4366],{"class":404},[398,167754,167755],{"class":408}," wrapper\n",[398,167757,167758],{"class":400,"line":1587},[398,167759,2676],{"emptyLinePlaceholder":328},[398,167761,167762],{"class":400,"line":1593},[398,167763,2676],{"emptyLinePlaceholder":328},[398,167765,167766],{"class":400,"line":1605},[398,167767,167768],{"class":2239},"@log\n",[398,167770,167771,167773,167775],{"class":400,"line":1888},[398,167772,32140],{"class":404},[398,167774,161189],{"class":2239},[398,167776,32146],{"class":408},[398,167778,167779,167781,167783,167785],{"class":400,"line":1893},[398,167780,31492],{"class":457},[398,167782,409],{"class":408},[398,167784,6121],{"class":513},[398,167786,415],{"class":408},[398,167788,167789],{"class":400,"line":1899},[398,167790,2676],{"emptyLinePlaceholder":328},[398,167792,167793],{"class":400,"line":1904},[398,167794,2676],{"emptyLinePlaceholder":328},[398,167796,167797],{"class":400,"line":1918},[398,167798,161224],{"class":408},[19,167800,158467],{},[389,167802,167804],{"className":30571,"code":167803,"language":30573,"meta":316,"style":316},"say_hello = log(say_hello)\n",[395,167805,167806],{"__ignoreMap":316},[398,167807,167808,167811,167813],{"class":400,"line":401},[398,167809,167810],{"class":408},"say_hello ",[398,167812,454],{"class":404},[398,167814,167815],{"class":408}," log(say_hello)\n",[19,167817,167818],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[343,167820,167822],{"id":167821},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[389,167824,167826],{"className":30571,"code":167825,"language":30573,"meta":316,"style":316},"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",[395,167827,167828,167836,167853,167863,167882,167892,167899,167903,167909,167913,167917,167921,167929,167939,167943,167947],{"__ignoreMap":316},[398,167829,167830,167832,167834],{"class":400,"line":401},[398,167831,32140],{"class":404},[398,167833,87384],{"class":2239},[398,167835,167708],{"class":408},[398,167837,167838,167840,167842,167844,167846,167849,167851],{"class":400,"line":317},[398,167839,30994],{"class":404},[398,167841,167715],{"class":2239},[398,167843,409],{"class":408},[398,167845,857],{"class":404},[398,167847,167848],{"class":408},"args, ",[398,167850,10938],{"class":404},[398,167852,166859],{"class":408},[398,167854,167855,167857,167859,167861],{"class":400,"line":320},[398,167856,32644],{"class":457},[398,167858,409],{"class":408},[398,167860,167726],{"class":513},[398,167862,415],{"class":408},[398,167864,167865,167868,167870,167873,167875,167877,167879],{"class":400,"line":1470},[398,167866,167867],{"class":408},"        result ",[398,167869,454],{"class":404},[398,167871,167872],{"class":408}," func(",[398,167874,857],{"class":404},[398,167876,167848],{"class":408},[398,167878,10938],{"class":404},[398,167880,167881],{"class":408},"kwargs)\n",[398,167883,167884,167886,167888,167890],{"class":400,"line":1476},[398,167885,32644],{"class":457},[398,167887,409],{"class":408},[398,167889,167742],{"class":513},[398,167891,415],{"class":408},[398,167893,167894,167896],{"class":400,"line":1490},[398,167895,15029],{"class":404},[398,167897,167898],{"class":408}," result\n",[398,167900,167901],{"class":400,"line":1496},[398,167902,2676],{"emptyLinePlaceholder":328},[398,167904,167905,167907],{"class":400,"line":1587},[398,167906,4366],{"class":404},[398,167908,167755],{"class":408},[398,167910,167911],{"class":400,"line":1593},[398,167912,2676],{"emptyLinePlaceholder":328},[398,167914,167915],{"class":400,"line":1605},[398,167916,2676],{"emptyLinePlaceholder":328},[398,167918,167919],{"class":400,"line":1888},[398,167920,167768],{"class":2239},[398,167922,167923,167925,167927],{"class":400,"line":1893},[398,167924,32140],{"class":404},[398,167926,5486],{"class":2239},[398,167928,151286],{"class":408},[398,167930,167931,167933,167935,167937],{"class":400,"line":1899},[398,167932,4366],{"class":404},[398,167934,11146],{"class":408},[398,167936,883],{"class":404},[398,167938,151297],{"class":408},[398,167940,167941],{"class":400,"line":1904},[398,167942,2676],{"emptyLinePlaceholder":328},[398,167944,167945],{"class":400,"line":1918},[398,167946,2676],{"emptyLinePlaceholder":328},[398,167948,167949,167951,167953,167955,167957,167959],{"class":400,"line":1923},[398,167950,30608],{"class":457},[398,167952,166793],{"class":408},[398,167954,848],{"class":457},[398,167956,12712],{"class":408},[398,167958,1102],{"class":457},[398,167960,30690],{"class":408},[19,167962,167963,167964,101211,167966,167968],{},"这个写法使用 ",[395,167965,166725],{},[395,167967,166840],{}," 接收原函数的所有参数。",[343,167970,167972],{"id":167971},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,167974,123485],{},[38,167976,167977,167980,167983],{},[41,167978,167979],{},"给定一组学生数据。",[41,167981,167982],{},"封装函数，根据传入规则筛选学生。",[41,167984,167985],{},"筛选及格、优秀、未成年学生。",[19,167987,10312],{},[389,167989,167991],{"className":30571,"code":167990,"language":30573,"meta":316,"style":316},"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",[395,167992,167993,168001,168029,168057,168085,168089,168093,168097,168107,168115,168125,168132,168137,168143,168147,168151,168175,168198,168221,168225,168232,168239],{"__ignoreMap":316},[398,167994,167995,167997,167999],{"class":400,"line":401},[398,167996,159909],{"class":408},[398,167998,454],{"class":404},[398,168000,55640],{"class":408},[398,168002,168003,168005,168007,168009,168011,168013,168015,168017,168019,168021,168023,168025,168027],{"class":400,"line":317},[398,168004,148578],{"class":408},[398,168006,62872],{"class":513},[398,168008,51630],{"class":408},[398,168010,150081],{"class":513},[398,168012,12712],{"class":408},[398,168014,69317],{"class":513},[398,168016,51630],{"class":408},[398,168018,1052],{"class":457},[398,168020,12712],{"class":408},[398,168022,151665],{"class":513},[398,168024,51630],{"class":408},[398,168026,1391],{"class":457},[398,168028,5206],{"class":408},[398,168030,168031,168033,168035,168037,168039,168041,168043,168045,168047,168049,168051,168053,168055],{"class":400,"line":320},[398,168032,148578],{"class":408},[398,168034,62872],{"class":513},[398,168036,51630],{"class":408},[398,168038,151129],{"class":513},[398,168040,12712],{"class":408},[398,168042,69317],{"class":513},[398,168044,51630],{"class":408},[398,168046,1027],{"class":457},[398,168048,12712],{"class":408},[398,168050,151665],{"class":513},[398,168052,51630],{"class":408},[398,168054,1213],{"class":457},[398,168056,5206],{"class":408},[398,168058,168059,168061,168063,168065,168067,168069,168071,168073,168075,168077,168079,168081,168083],{"class":400,"line":1470},[398,168060,148578],{"class":408},[398,168062,62872],{"class":513},[398,168064,51630],{"class":408},[398,168066,159924],{"class":513},[398,168068,12712],{"class":408},[398,168070,69317],{"class":513},[398,168072,51630],{"class":408},[398,168074,1077],{"class":457},[398,168076,12712],{"class":408},[398,168078,151665],{"class":513},[398,168080,51630],{"class":408},[398,168082,1284],{"class":457},[398,168084,5206],{"class":408},[398,168086,168087],{"class":400,"line":1476},[398,168088,33439],{"class":408},[398,168090,168091],{"class":400,"line":1490},[398,168092,2676],{"emptyLinePlaceholder":328},[398,168094,168095],{"class":400,"line":1496},[398,168096,2676],{"emptyLinePlaceholder":328},[398,168098,168099,168101,168104],{"class":400,"line":1587},[398,168100,32140],{"class":404},[398,168102,168103],{"class":2239}," filter_students",[398,168105,168106],{"class":408},"(students, condition):\n",[398,168108,168109,168111,168113],{"class":400,"line":1593},[398,168110,161416],{"class":408},[398,168112,454],{"class":404},[398,168114,52031],{"class":408},[398,168116,168117,168119,168121,168123],{"class":400,"line":1605},[398,168118,3477],{"class":404},[398,168120,152330],{"class":408},[398,168122,26236],{"class":404},[398,168124,152335],{"class":408},[398,168126,168127,168129],{"class":400,"line":1888},[398,168128,2773],{"class":404},[398,168130,168131],{"class":408}," condition(student):\n",[398,168133,168134],{"class":400,"line":1893},[398,168135,168136],{"class":408},"            result.append(student)\n",[398,168138,168139,168141],{"class":400,"line":1899},[398,168140,4366],{"class":404},[398,168142,167898],{"class":408},[398,168144,168145],{"class":400,"line":1904},[398,168146,2676],{"emptyLinePlaceholder":328},[398,168148,168149],{"class":400,"line":1918},[398,168150,2676],{"emptyLinePlaceholder":328},[398,168152,168153,168155,168157,168160,168162,168165,168167,168169,168171,168173],{"class":400,"line":1923},[398,168154,165894],{"class":408},[398,168156,454],{"class":404},[398,168158,168159],{"class":408}," filter_students(students, ",[398,168161,167079],{"class":404},[398,168163,168164],{"class":408}," s: s[",[398,168166,151665],{"class":513},[398,168168,4719],{"class":408},[398,168170,1986],{"class":404},[398,168172,158030],{"class":457},[398,168174,415],{"class":408},[398,168176,168177,168180,168182,168184,168186,168188,168190,168192,168194,168196],{"class":400,"line":1929},[398,168178,168179],{"class":408},"excellent ",[398,168181,454],{"class":404},[398,168183,168159],{"class":408},[398,168185,167079],{"class":404},[398,168187,168164],{"class":408},[398,168189,151665],{"class":513},[398,168191,4719],{"class":408},[398,168193,1986],{"class":404},[398,168195,157981],{"class":457},[398,168197,415],{"class":408},[398,168199,168200,168203,168205,168207,168209,168211,168213,168215,168217,168219],{"class":400,"line":1950},[398,168201,168202],{"class":408},"under_age ",[398,168204,454],{"class":404},[398,168206,168159],{"class":408},[398,168208,167079],{"class":404},[398,168210,168164],{"class":408},[398,168212,69317],{"class":513},[398,168214,4719],{"class":408},[398,168216,1312],{"class":404},[398,168218,156478],{"class":457},[398,168220,415],{"class":408},[398,168222,168223],{"class":400,"line":1955},[398,168224,2676],{"emptyLinePlaceholder":328},[398,168226,168227,168229],{"class":400,"line":1969},[398,168228,30608],{"class":457},[398,168230,168231],{"class":408},"(passed)\n",[398,168233,168234,168236],{"class":400,"line":1974},[398,168235,30608],{"class":457},[398,168237,168238],{"class":408},"(excellent)\n",[398,168240,168241,168243],{"class":400,"line":2003},[398,168242,30608],{"class":457},[398,168244,168245],{"class":408},"(under_age)\n",[343,168247,168249],{"id":168248},"_715-易错点","7.15 易错点",[38,168251,168252,168255,168263,168268,168279],{},[41,168253,168254],{},"默认参数不要写可变对象。",[41,168256,168257,168259,168260,168262],{},[395,168258,166725],{}," 是元组，",[395,168261,166840],{}," 是字典。",[41,168264,168265,168267],{},[395,168266,167079],{}," 只适合简单表达式。",[41,168269,168270,101211,168272,168274,168275,168278],{},[395,168271,74237],{},[395,168273,80244],{}," 的结果是迭代器，常用 ",[395,168276,168277],{},"list()"," 转换查看。",[41,168280,168281],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[343,168283,168285],{"id":168284},"_716-本章练习","7.16 本章练习",[38,168287,168288,168295,168301,168306,168311],{},[41,168289,168290,168291,168294],{},"写函数 ",[395,168292,168293],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[41,168296,168290,168297,168300],{},[395,168298,168299],{},"print_user(**kwargs)","，输出用户所有字段。",[41,168302,104559,168303,168305],{},[395,168304,167079],{}," 对学生列表按年龄排序。",[41,168307,104559,168308,168310],{},[395,168309,80244],{}," 找出成绩不及格的学生。",[41,168312,168313],{},"写一个装饰器，统计函数执行前后的提示信息。",[5403,168315,168316],{},"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":316,"searchDepth":317,"depth":317,"links":168318},[168319,168320,168321,168322,168323,168324,168328,168329,168330,168331,168336,168337,168338,168339,168340,168341],{"id":166177,"depth":317,"text":166178},{"id":166291,"depth":317,"text":166292},{"id":166380,"depth":317,"text":166381},{"id":166442,"depth":317,"text":166443},{"id":166588,"depth":317,"text":166589},{"id":166715,"depth":317,"text":166716,"children":168325},[168326,168327],{"id":166719,"depth":320,"text":166720},{"id":166834,"depth":320,"text":166835},{"id":166915,"depth":317,"text":166916},{"id":167073,"depth":317,"text":167074},{"id":167241,"depth":317,"text":167242},{"id":167323,"depth":317,"text":167324,"children":168332},[168333,168334,168335],{"id":167327,"depth":320,"text":167328},{"id":167398,"depth":320,"text":167399},{"id":167475,"depth":320,"text":167476},{"id":167600,"depth":317,"text":167601},{"id":167690,"depth":317,"text":167691},{"id":167821,"depth":317,"text":167822},{"id":167971,"depth":317,"text":167972},{"id":168248,"depth":317,"text":168249},{"id":168284,"depth":317,"text":168285},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166169,"description":23654},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168348,"title":168349,"body":168350,"description":23654,"extension":326,"meta":170869,"navigation":328,"path":170870,"seo":170871,"stem":170872,"__hash__":170873},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168351,"toc":170844},[168352,168355,168359,168362,168365,168396,168400,168404,168407,168434,168438,168441,168492,168495,168510,168513,168548,168552,168554,168578,168581,168641,168645,168649,168652,168709,168712,168732,168736,168739,168802,168806,168809,168865,168872,168896,168900,168903,168966,168970,168975,169026,169029,169033,169038,169105,169108,169190,169194,169199,169250,169253,169257,169260,169263,169271,169274,169320,169323,169369,169373,169379,169423,169426,169472,169475,169515,169518,169579,169583,169586,169676,169679,169821,169824,169891,169895,169898,169901,170042,170045,170123,170126,170302,170306,170308,170319,170321,170520,170524,170768,170772,170806,170810,170841],[10,168353,168349],{"id":168354},"_8-文件操作",[343,168356,168358],{"id":168357},"_81-文件操作的意义","8.1 文件操作的意义",[19,168360,168361],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,168363,168364],{},"常见文件类型：",[38,168366,168367,168373,168379,168385,168391],{},[41,168368,168369,168372],{},[395,168370,168371],{},".txt","：普通文本。",[41,168374,168375,168378],{},[395,168376,168377],{},".csv","：表格文本。",[41,168380,168381,168384],{},[395,168382,168383],{},".json","：结构化数据。",[41,168386,168387,168390],{},[395,168388,168389],{},".log","：日志文件。",[41,168392,168393,168395],{},[395,168394,146545],{},"：Python 源代码。",[343,168397,168399],{"id":168398},"_82-路径","8.2 路径",[14,168401,168403],{"id":168402},"_821-相对路径","8.2.1 相对路径",[19,168405,168406],{},"相对当前运行目录：",[389,168408,168410],{"className":30571,"code":168409,"language":30573,"meta":316,"style":316},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[395,168411,168412],{"__ignoreMap":316},[398,168413,168414,168416,168418,168420,168422,168424,168426,168428,168430,168432],{"class":400,"line":401},[398,168415,87108],{"class":457},[398,168417,409],{"class":408},[398,168419,146989],{"class":513},[398,168421,12712],{"class":408},[398,168423,146994],{"class":513},[398,168425,12712],{"class":408},[398,168427,146999],{"class":5493},[398,168429,454],{"class":404},[398,168431,147004],{"class":513},[398,168433,415],{"class":408},[14,168435,168437],{"id":168436},"_822-绝对路径","8.2.2 绝对路径",[19,168439,168440],{},"从根目录或盘符开始：",[389,168442,168444],{"className":30571,"code":168443,"language":30573,"meta":316,"style":316},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[395,168445,168446,168469],{"__ignoreMap":316},[398,168447,168448,168450,168452,168455,168457,168459,168461,168463,168465,168467],{"class":400,"line":401},[398,168449,87108],{"class":457},[398,168451,409],{"class":408},[398,168453,168454],{"class":513},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[398,168456,12712],{"class":408},[398,168458,146994],{"class":513},[398,168460,12712],{"class":408},[398,168462,146999],{"class":5493},[398,168464,454],{"class":404},[398,168466,147004],{"class":513},[398,168468,415],{"class":408},[398,168470,168471,168473,168475,168478,168480,168482,168484,168486,168488,168490],{"class":400,"line":317},[398,168472,87108],{"class":457},[398,168474,409],{"class":408},[398,168476,168477],{"class":513},"\"D:\u002Fdata\u002Fdata.txt\"",[398,168479,12712],{"class":408},[398,168481,146994],{"class":513},[398,168483,12712],{"class":408},[398,168485,146999],{"class":5493},[398,168487,454],{"class":404},[398,168489,147004],{"class":513},[398,168491,415],{"class":408},[19,168493,168494],{},"Windows 路径建议写成：",[389,168496,168498],{"className":30571,"code":168497,"language":30573,"meta":316,"style":316},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[395,168499,168500],{"__ignoreMap":316},[398,168501,168502,168505,168507],{"class":400,"line":401},[398,168503,168504],{"class":408},"path ",[398,168506,454],{"class":404},[398,168508,168509],{"class":513}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,168511,168512],{},"或原始字符串：",[389,168514,168516],{"className":30571,"code":168515,"language":30573,"meta":316,"style":316},"path = r\"D:\\data\\data.txt\"\n",[395,168517,168518],{"__ignoreMap":316},[398,168519,168520,168522,168524,168526,168528,168531,168534,168537,168539,168541,168543,168546],{"class":400,"line":401},[398,168521,168504],{"class":408},[398,168523,454],{"class":404},[398,168525,17398],{"class":404},[398,168527,653],{"class":513},[398,168529,168530],{"class":48170},"D:",[398,168532,168533],{"class":457},"\\d",[398,168535,168536],{"class":48170},"ata",[398,168538,168533],{"class":457},[398,168540,168536],{"class":48170},[398,168542,960],{"class":457},[398,168544,168545],{"class":48170},"txt",[398,168547,25411],{"class":513},[343,168549,168551],{"id":168550},"_83-open函数","8.3 open函数",[19,168553,5458],{},[389,168555,168557],{"className":30571,"code":168556,"language":30573,"meta":316,"style":316},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[395,168558,168559],{"__ignoreMap":316},[398,168560,168561,168563,168565,168567,168570,168572,168574,168576],{"class":400,"line":401},[398,168562,45547],{"class":5493},[398,168564,13841],{"class":404},[398,168566,146984],{"class":457},[398,168568,168569],{"class":408},"(文件路径, 打开模式, ",[398,168571,146999],{"class":5493},[398,168573,454],{"class":404},[398,168575,147004],{"class":513},[398,168577,415],{"class":408},[19,168579,168580],{},"常见模式：",[84,168582,168583,168592],{},[87,168584,168585],{},[90,168586,168587,168590],{},[93,168588,168589],{},"模式",[93,168591,214],{},[101,168593,168594,168603,168612,168621,168631],{},[90,168595,168596,168600],{},[106,168597,168598],{},[395,168599,1072],{},[106,168601,168602],{},"只读，文件不存在会报错",[90,168604,168605,168609],{},[106,168606,168607],{},[395,168608,1197],{},[106,168610,168611],{},"只写，文件不存在会创建，存在会清空",[90,168613,168614,168618],{},[106,168615,168616],{},[395,168617,640],{},[106,168619,168620],{},"追加，文件不存在会创建",[90,168622,168623,168628],{},[106,168624,168625],{},[395,168626,168627],{},"rb",[106,168629,168630],{},"二进制只读",[90,168632,168633,168638],{},[106,168634,168635],{},[395,168636,168637],{},"wb",[106,168639,168640],{},"二进制只写",[343,168642,168644],{"id":168643},"_84-读取文件","8.4 读取文件",[14,168646,168648],{"id":168647},"_841-read","8.4.1 read",[19,168650,168651],{},"一次读取全部内容：",[389,168653,168655],{"className":30571,"code":168654,"language":30573,"meta":316,"style":316},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[395,168656,168657,168683,168695,168702],{"__ignoreMap":316},[398,168658,168659,168661,168663,168665,168667,168669,168671,168673,168675,168677,168679,168681],{"class":400,"line":401},[398,168660,45547],{"class":5493},[398,168662,13841],{"class":404},[398,168664,146984],{"class":457},[398,168666,409],{"class":408},[398,168668,146989],{"class":513},[398,168670,12712],{"class":408},[398,168672,146994],{"class":513},[398,168674,12712],{"class":408},[398,168676,146999],{"class":5493},[398,168678,454],{"class":404},[398,168680,147004],{"class":513},[398,168682,415],{"class":408},[398,168684,168685,168688,168690,168692],{"class":400,"line":317},[398,168686,168687],{"class":408},"content ",[398,168689,454],{"class":404},[398,168691,148346],{"class":5493},[398,168693,168694],{"class":408},".read()\n",[398,168696,168697,168699],{"class":400,"line":320},[398,168698,30608],{"class":457},[398,168700,168701],{"class":408},"(content)\n",[398,168703,168704,168706],{"class":400,"line":1470},[398,168705,45547],{"class":5493},[398,168707,168708],{"class":408},".close()\n",[19,168710,168711],{},"可以指定读取字符数：",[389,168713,168715],{"className":30571,"code":168714,"language":30573,"meta":316,"style":316},"content = file.read(10)\n",[395,168716,168717],{"__ignoreMap":316},[398,168718,168719,168721,168723,168725,168728,168730],{"class":400,"line":401},[398,168720,168687],{"class":408},[398,168722,454],{"class":404},[398,168724,148346],{"class":5493},[398,168726,168727],{"class":408},".read(",[398,168729,848],{"class":457},[398,168731,415],{"class":408},[14,168733,168735],{"id":168734},"_842-readline","8.4.2 readline",[19,168737,168738],{},"一次读取一行：",[389,168740,168742],{"className":30571,"code":168741,"language":30573,"meta":316,"style":316},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[395,168743,168744,168770,168774,168785,168792,168796],{"__ignoreMap":316},[398,168745,168746,168748,168750,168752,168754,168756,168758,168760,168762,168764,168766,168768],{"class":400,"line":401},[398,168747,45547],{"class":5493},[398,168749,13841],{"class":404},[398,168751,146984],{"class":457},[398,168753,409],{"class":408},[398,168755,146989],{"class":513},[398,168757,12712],{"class":408},[398,168759,146994],{"class":513},[398,168761,12712],{"class":408},[398,168763,146999],{"class":5493},[398,168765,454],{"class":404},[398,168767,147004],{"class":513},[398,168769,415],{"class":408},[398,168771,168772],{"class":400,"line":317},[398,168773,2676],{"emptyLinePlaceholder":328},[398,168775,168776,168778,168780,168782],{"class":400,"line":320},[398,168777,147445],{"class":408},[398,168779,454],{"class":404},[398,168781,148346],{"class":5493},[398,168783,168784],{"class":408},".readline()\n",[398,168786,168787,168789],{"class":400,"line":1470},[398,168788,30608],{"class":457},[398,168790,168791],{"class":408},"(line)\n",[398,168793,168794],{"class":400,"line":1476},[398,168795,2676],{"emptyLinePlaceholder":328},[398,168797,168798,168800],{"class":400,"line":1490},[398,168799,45547],{"class":5493},[398,168801,168708],{"class":408},[14,168803,168805],{"id":168804},"_843-readlines","8.4.3 readlines",[19,168807,168808],{},"读取所有行，返回列表：",[389,168810,168812],{"className":30571,"code":168811,"language":30573,"meta":316,"style":316},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[395,168813,168814,168840,168852,168859],{"__ignoreMap":316},[398,168815,168816,168818,168820,168822,168824,168826,168828,168830,168832,168834,168836,168838],{"class":400,"line":401},[398,168817,45547],{"class":5493},[398,168819,13841],{"class":404},[398,168821,146984],{"class":457},[398,168823,409],{"class":408},[398,168825,146989],{"class":513},[398,168827,12712],{"class":408},[398,168829,146994],{"class":513},[398,168831,12712],{"class":408},[398,168833,146999],{"class":5493},[398,168835,454],{"class":404},[398,168837,147004],{"class":513},[398,168839,415],{"class":408},[398,168841,168842,168845,168847,168849],{"class":400,"line":317},[398,168843,168844],{"class":408},"lines ",[398,168846,454],{"class":404},[398,168848,148346],{"class":5493},[398,168850,168851],{"class":408},".readlines()\n",[398,168853,168854,168856],{"class":400,"line":320},[398,168855,30608],{"class":457},[398,168857,168858],{"class":408},"(lines)\n",[398,168860,168861,168863],{"class":400,"line":1470},[398,168862,45547],{"class":5493},[398,168864,168708],{"class":408},[19,168866,168867,168868,168871],{},"每一行通常带有换行符，可以用 ",[395,168869,168870],{},"strip()"," 去掉：",[389,168873,168875],{"className":30571,"code":168874,"language":30573,"meta":316,"style":316},"for line in lines:\n    print(line.strip())\n",[395,168876,168877,168889],{"__ignoreMap":316},[398,168878,168879,168881,168884,168886],{"class":400,"line":401},[398,168880,3301],{"class":404},[398,168882,168883],{"class":408}," line ",[398,168885,26236],{"class":404},[398,168887,168888],{"class":408}," lines:\n",[398,168890,168891,168893],{"class":400,"line":317},[398,168892,31492],{"class":457},[398,168894,168895],{"class":408},"(line.strip())\n",[14,168897,168899],{"id":168898},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,168901,168902],{},"推荐读取大文件时使用：",[389,168904,168906],{"className":30571,"code":168905,"language":30573,"meta":316,"style":316},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[395,168907,168908,168934,168938,168950,168956,168960],{"__ignoreMap":316},[398,168909,168910,168912,168914,168916,168918,168920,168922,168924,168926,168928,168930,168932],{"class":400,"line":401},[398,168911,45547],{"class":5493},[398,168913,13841],{"class":404},[398,168915,146984],{"class":457},[398,168917,409],{"class":408},[398,168919,146989],{"class":513},[398,168921,12712],{"class":408},[398,168923,146994],{"class":513},[398,168925,12712],{"class":408},[398,168927,146999],{"class":5493},[398,168929,454],{"class":404},[398,168931,147004],{"class":513},[398,168933,415],{"class":408},[398,168935,168936],{"class":400,"line":317},[398,168937,2676],{"emptyLinePlaceholder":328},[398,168939,168940,168942,168944,168946,168948],{"class":400,"line":320},[398,168941,3301],{"class":404},[398,168943,168883],{"class":408},[398,168945,26236],{"class":404},[398,168947,148346],{"class":5493},[398,168949,4015],{"class":408},[398,168951,168952,168954],{"class":400,"line":1470},[398,168953,31492],{"class":457},[398,168955,168895],{"class":408},[398,168957,168958],{"class":400,"line":1476},[398,168959,2676],{"emptyLinePlaceholder":328},[398,168961,168962,168964],{"class":400,"line":1490},[398,168963,45547],{"class":5493},[398,168965,168708],{"class":408},[343,168967,168969],{"id":168968},"_85-with语句","8.5 with语句",[19,168971,168972,168974],{},[395,168973,108026],{}," 会自动关闭文件，推荐使用。",[389,168976,168978],{"className":30571,"code":168977,"language":30573,"meta":316,"style":316},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[395,168979,168980,169010,169020],{"__ignoreMap":316},[398,168981,168982,168984,168986,168988,168990,168992,168994,168996,168998,169000,169002,169004,169006,169008],{"class":400,"line":401},[398,168983,108026],{"class":404},[398,168985,146984],{"class":457},[398,168987,409],{"class":408},[398,168989,146989],{"class":513},[398,168991,12712],{"class":408},[398,168993,146994],{"class":513},[398,168995,12712],{"class":408},[398,168997,146999],{"class":5493},[398,168999,454],{"class":404},[398,169001,147004],{"class":513},[398,169003,13991],{"class":408},[398,169005,31576],{"class":404},[398,169007,148346],{"class":5493},[398,169009,4015],{"class":408},[398,169011,169012,169014,169016,169018],{"class":400,"line":317},[398,169013,147016],{"class":408},[398,169015,454],{"class":404},[398,169017,148346],{"class":5493},[398,169019,168694],{"class":408},[398,169021,169022,169024],{"class":400,"line":320},[398,169023,31492],{"class":457},[398,169025,168701],{"class":408},[19,169027,169028],{},"等价于打开文件、读取、最后关闭，但更安全。",[343,169030,169032],{"id":169031},"_86-写入文件","8.6 写入文件",[19,169034,169035,169037],{},[395,169036,1197],{}," 模式会清空原文件。",[389,169039,169041],{"className":30571,"code":169040,"language":30573,"meta":316,"style":316},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[395,169042,169043,169073,169090],{"__ignoreMap":316},[398,169044,169045,169047,169049,169051,169053,169055,169057,169059,169061,169063,169065,169067,169069,169071],{"class":400,"line":401},[398,169046,108026],{"class":404},[398,169048,146984],{"class":457},[398,169050,409],{"class":408},[398,169052,146989],{"class":513},[398,169054,12712],{"class":408},[398,169056,152169],{"class":513},[398,169058,12712],{"class":408},[398,169060,146999],{"class":5493},[398,169062,454],{"class":404},[398,169064,147004],{"class":513},[398,169066,13991],{"class":408},[398,169068,31576],{"class":404},[398,169070,148346],{"class":5493},[398,169072,4015],{"class":408},[398,169074,169075,169078,169081,169084,169086,169088],{"class":400,"line":317},[398,169076,169077],{"class":5493},"    file",[398,169079,169080],{"class":408},".write(",[398,169082,169083],{"class":513},"\"hello",[398,169085,156718],{"class":457},[398,169087,653],{"class":513},[398,169089,415],{"class":408},[398,169091,169092,169094,169096,169099,169101,169103],{"class":400,"line":320},[398,169093,169077],{"class":5493},[398,169095,169080],{"class":408},[398,169097,169098],{"class":513},"\"python",[398,169100,156718],{"class":457},[398,169102,653],{"class":513},[398,169104,415],{"class":408},[19,169106,169107],{},"写入多行：",[389,169109,169111],{"className":30571,"code":169110,"language":30573,"meta":316,"style":316},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[395,169112,169113,169148,169152,169183],{"__ignoreMap":316},[398,169114,169115,169117,169119,169121,169124,169126,169128,169130,169133,169135,169137,169139,169142,169144,169146],{"class":400,"line":401},[398,169116,168844],{"class":408},[398,169118,454],{"class":404},[398,169120,52419],{"class":408},[398,169122,169123],{"class":513},"\"小明,18",[398,169125,156718],{"class":457},[398,169127,653],{"class":513},[398,169129,12712],{"class":408},[398,169131,169132],{"class":513},"\"小红,17",[398,169134,156718],{"class":457},[398,169136,653],{"class":513},[398,169138,12712],{"class":408},[398,169140,169141],{"class":513},"\"小刚,19",[398,169143,156718],{"class":457},[398,169145,653],{"class":513},[398,169147,33439],{"class":408},[398,169149,169150],{"class":400,"line":317},[398,169151,2676],{"emptyLinePlaceholder":328},[398,169153,169154,169156,169158,169160,169163,169165,169167,169169,169171,169173,169175,169177,169179,169181],{"class":400,"line":320},[398,169155,108026],{"class":404},[398,169157,146984],{"class":457},[398,169159,409],{"class":408},[398,169161,169162],{"class":513},"\"students.txt\"",[398,169164,12712],{"class":408},[398,169166,152169],{"class":513},[398,169168,12712],{"class":408},[398,169170,146999],{"class":5493},[398,169172,454],{"class":404},[398,169174,147004],{"class":513},[398,169176,13991],{"class":408},[398,169178,31576],{"class":404},[398,169180,148346],{"class":5493},[398,169182,4015],{"class":408},[398,169184,169185,169187],{"class":400,"line":1470},[398,169186,169077],{"class":5493},[398,169188,169189],{"class":408},".writelines(lines)\n",[343,169191,169193],{"id":169192},"_87-追加文件","8.7 追加文件",[19,169195,169196,169198],{},[395,169197,640],{}," 模式不会清空原内容，而是在末尾追加。",[389,169200,169202],{"className":30571,"code":169201,"language":30573,"meta":316,"style":316},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[395,169203,169204,169235],{"__ignoreMap":316},[398,169205,169206,169208,169210,169212,169215,169217,169219,169221,169223,169225,169227,169229,169231,169233],{"class":400,"line":401},[398,169207,108026],{"class":404},[398,169209,146984],{"class":457},[398,169211,409],{"class":408},[398,169213,169214],{"class":513},"\"log.txt\"",[398,169216,12712],{"class":408},[398,169218,165518],{"class":513},[398,169220,12712],{"class":408},[398,169222,146999],{"class":5493},[398,169224,454],{"class":404},[398,169226,147004],{"class":513},[398,169228,13991],{"class":408},[398,169230,31576],{"class":404},[398,169232,148346],{"class":5493},[398,169234,4015],{"class":408},[398,169236,169237,169239,169241,169244,169246,169248],{"class":400,"line":317},[398,169238,169077],{"class":5493},[398,169240,169080],{"class":408},[398,169242,169243],{"class":513},"\"程序启动",[398,169245,156718],{"class":457},[398,169247,653],{"class":513},[398,169249,415],{"class":408},[19,169251,169252],{},"日志类文件常用追加模式。",[343,169254,169256],{"id":169255},"_88-文件编码","8.8 文件编码",[19,169258,169259],{},"编码决定文字如何保存为字节。",[19,169261,169262],{},"常见编码：",[38,169264,169265,169268],{},[41,169266,169267],{},"UTF-8：推荐。",[41,169269,169270],{},"GBK：部分 Windows 中文文件常见。",[19,169272,169273],{},"读取文件乱码时，可以尝试：",[389,169275,169277],{"className":30571,"code":169276,"language":30573,"meta":316,"style":316},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[395,169278,169279,169310],{"__ignoreMap":316},[398,169280,169281,169283,169285,169287,169289,169291,169293,169295,169297,169299,169302,169304,169306,169308],{"class":400,"line":401},[398,169282,108026],{"class":404},[398,169284,146984],{"class":457},[398,169286,409],{"class":408},[398,169288,146989],{"class":513},[398,169290,12712],{"class":408},[398,169292,146994],{"class":513},[398,169294,12712],{"class":408},[398,169296,146999],{"class":5493},[398,169298,454],{"class":404},[398,169300,169301],{"class":513},"\"gbk\"",[398,169303,13991],{"class":408},[398,169305,31576],{"class":404},[398,169307,148346],{"class":5493},[398,169309,4015],{"class":408},[398,169311,169312,169314,169316,169318],{"class":400,"line":317},[398,169313,147016],{"class":408},[398,169315,454],{"class":404},[398,169317,148346],{"class":5493},[398,169319,168694],{"class":408},[19,169321,169322],{},"写文件时建议统一 UTF-8：",[389,169324,169326],{"className":30571,"code":169325,"language":30573,"meta":316,"style":316},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[395,169327,169328,169358],{"__ignoreMap":316},[398,169329,169330,169332,169334,169336,169338,169340,169342,169344,169346,169348,169350,169352,169354,169356],{"class":400,"line":401},[398,169331,108026],{"class":404},[398,169333,146984],{"class":457},[398,169335,409],{"class":408},[398,169337,146989],{"class":513},[398,169339,12712],{"class":408},[398,169341,152169],{"class":513},[398,169343,12712],{"class":408},[398,169345,146999],{"class":5493},[398,169347,454],{"class":404},[398,169349,147004],{"class":513},[398,169351,13991],{"class":408},[398,169353,31576],{"class":404},[398,169355,148346],{"class":5493},[398,169357,4015],{"class":408},[398,169359,169360,169362,169364,169367],{"class":400,"line":317},[398,169361,169077],{"class":5493},[398,169363,169080],{"class":408},[398,169365,169366],{"class":513},"\"中文内容\"",[398,169368,415],{"class":408},[343,169370,169372],{"id":169371},"_89-pathlib","8.9 pathlib",[19,169374,169375,169378],{},[395,169376,169377],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[389,169380,169382],{"className":30571,"code":169381,"language":30573,"meta":316,"style":316},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[395,169383,169384,169394,169398,169416],{"__ignoreMap":316},[398,169385,169386,169388,169390,169392],{"class":400,"line":401},[398,169387,30930],{"class":404},[398,169389,108504],{"class":408},[398,169391,30585],{"class":404},[398,169393,108509],{"class":408},[398,169395,169396],{"class":400,"line":317},[398,169397,2676],{"emptyLinePlaceholder":328},[398,169399,169400,169402,169404,169406,169409,169411,169413],{"class":400,"line":320},[398,169401,168504],{"class":408},[398,169403,454],{"class":404},[398,169405,108738],{"class":408},[398,169407,169408],{"class":513},"\"data\"",[398,169410,13991],{"class":408},[398,169412,986],{"class":404},[398,169414,169415],{"class":513}," \"students.txt\"\n",[398,169417,169418,169420],{"class":400,"line":1470},[398,169419,30608],{"class":457},[398,169421,169422],{"class":408},"(path)\n",[19,169424,169425],{},"创建目录：",[389,169427,169429],{"className":30571,"code":169428,"language":30573,"meta":316,"style":316},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[395,169430,169431,169441,169445,169458],{"__ignoreMap":316},[398,169432,169433,169435,169437,169439],{"class":400,"line":401},[398,169434,30930],{"class":404},[398,169436,108504],{"class":408},[398,169438,30585],{"class":404},[398,169440,108509],{"class":408},[398,169442,169443],{"class":400,"line":317},[398,169444,2676],{"emptyLinePlaceholder":328},[398,169446,169447,169450,169452,169454,169456],{"class":400,"line":320},[398,169448,169449],{"class":408},"data_dir ",[398,169451,454],{"class":404},[398,169453,108738],{"class":408},[398,169455,169408],{"class":513},[398,169457,415],{"class":408},[398,169459,169460,169463,169466,169468,169470],{"class":400,"line":1470},[398,169461,169462],{"class":408},"data_dir.mkdir(",[398,169464,169465],{"class":5493},"exist_ok",[398,169467,454],{"class":404},[398,169469,31669],{"class":457},[398,169471,415],{"class":408},[19,169473,169474],{},"判断文件是否存在：",[389,169476,169478],{"className":30571,"code":169477,"language":30573,"meta":316,"style":316},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[395,169479,169480,169493,169497,169504],{"__ignoreMap":316},[398,169481,169482,169484,169486,169488,169491],{"class":400,"line":401},[398,169483,168504],{"class":408},[398,169485,454],{"class":404},[398,169487,108738],{"class":408},[398,169489,169490],{"class":513},"\"data\u002Fstudents.txt\"",[398,169492,415],{"class":408},[398,169494,169495],{"class":400,"line":317},[398,169496,2676],{"emptyLinePlaceholder":328},[398,169498,169499,169501],{"class":400,"line":320},[398,169500,1807],{"class":404},[398,169502,169503],{"class":408}," path.exists():\n",[398,169505,169506,169508,169510,169513],{"class":400,"line":1470},[398,169507,31492],{"class":457},[398,169509,409],{"class":408},[398,169511,169512],{"class":513},"\"文件存在\"",[398,169514,415],{"class":408},[19,169516,169517],{},"读写文本：",[389,169519,169521],{"className":30571,"code":169520,"language":30573,"meta":316,"style":316},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[395,169522,169523,169535,169539,169556,169573],{"__ignoreMap":316},[398,169524,169525,169527,169529,169531,169533],{"class":400,"line":401},[398,169526,168504],{"class":408},[398,169528,454],{"class":404},[398,169530,108738],{"class":408},[398,169532,146989],{"class":513},[398,169534,415],{"class":408},[398,169536,169537],{"class":400,"line":317},[398,169538,2676],{"emptyLinePlaceholder":328},[398,169540,169541,169544,169546,169548,169550,169552,169554],{"class":400,"line":320},[398,169542,169543],{"class":408},"path.write_text(",[398,169545,146069],{"class":513},[398,169547,12712],{"class":408},[398,169549,146999],{"class":5493},[398,169551,454],{"class":404},[398,169553,147004],{"class":513},[398,169555,415],{"class":408},[398,169557,169558,169560,169562,169565,169567,169569,169571],{"class":400,"line":1470},[398,169559,168687],{"class":408},[398,169561,454],{"class":404},[398,169563,169564],{"class":408}," path.read_text(",[398,169566,146999],{"class":5493},[398,169568,454],{"class":404},[398,169570,147004],{"class":513},[398,169572,415],{"class":408},[398,169574,169575,169577],{"class":400,"line":1476},[398,169576,30608],{"class":457},[398,169578,168701],{"class":408},[343,169580,169582],{"id":169581},"_810-json文件","8.10 JSON文件",[19,169584,169585],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[389,169587,169589],{"className":30571,"code":169588,"language":30573,"meta":316,"style":316},"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",[395,169590,169591,169597,169601,169609,169619,169629,169637,169641,169645,169670],{"__ignoreMap":316},[398,169592,169593,169595],{"class":400,"line":401},[398,169594,30585],{"class":404},[398,169596,147284],{"class":408},[398,169598,169599],{"class":400,"line":317},[398,169600,2676],{"emptyLinePlaceholder":328},[398,169602,169603,169605,169607],{"class":400,"line":320},[398,169604,149674],{"class":408},[398,169606,454],{"class":404},[398,169608,15849],{"class":408},[398,169610,169611,169613,169615,169617],{"class":400,"line":1470},[398,169612,147213],{"class":513},[398,169614,51630],{"class":408},[398,169616,150081],{"class":513},[398,169618,31659],{"class":408},[398,169620,169621,169623,169625,169627],{"class":400,"line":1476},[398,169622,164730],{"class":513},[398,169624,51630],{"class":408},[398,169626,1052],{"class":457},[398,169628,31659],{"class":408},[398,169630,169631,169633,169635],{"class":400,"line":1490},[398,169632,164741],{"class":513},[398,169634,51630],{"class":408},[398,169636,164746],{"class":457},[398,169638,169639],{"class":400,"line":1496},[398,169640,1841],{"class":408},[398,169642,169643],{"class":400,"line":1587},[398,169644,2676],{"emptyLinePlaceholder":328},[398,169646,169647,169649,169651,169654,169656,169658,169660,169662,169664,169666,169668],{"class":400,"line":1593},[398,169648,156637],{"class":408},[398,169650,454],{"class":404},[398,169652,169653],{"class":408}," json.dumps(student, ",[398,169655,147330],{"class":5493},[398,169657,454],{"class":404},[398,169659,34180],{"class":457},[398,169661,12712],{"class":408},[398,169663,152205],{"class":5493},[398,169665,454],{"class":404},[398,169667,486],{"class":457},[398,169669,415],{"class":408},[398,169671,169672,169674],{"class":400,"line":1605},[398,169673,30608],{"class":457},[398,169675,164264],{"class":408},[19,169677,169678],{},"写入 JSON 文件：",[389,169680,169682],{"className":30571,"code":169681,"language":30573,"meta":316,"style":316},"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",[395,169683,169684,169690,169694,169702,169730,169758,169762,169766,169796],{"__ignoreMap":316},[398,169685,169686,169688],{"class":400,"line":401},[398,169687,30585],{"class":404},[398,169689,147284],{"class":408},[398,169691,169692],{"class":400,"line":317},[398,169693,2676],{"emptyLinePlaceholder":328},[398,169695,169696,169698,169700],{"class":400,"line":320},[398,169697,159909],{"class":408},[398,169699,454],{"class":404},[398,169701,55640],{"class":408},[398,169703,169704,169706,169708,169710,169712,169714,169716,169718,169720,169722,169724,169726,169728],{"class":400,"line":1470},[398,169705,148578],{"class":408},[398,169707,62872],{"class":513},[398,169709,51630],{"class":408},[398,169711,150081],{"class":513},[398,169713,12712],{"class":408},[398,169715,69317],{"class":513},[398,169717,51630],{"class":408},[398,169719,1052],{"class":457},[398,169721,12712],{"class":408},[398,169723,151665],{"class":513},[398,169725,51630],{"class":408},[398,169727,1391],{"class":457},[398,169729,5206],{"class":408},[398,169731,169732,169734,169736,169738,169740,169742,169744,169746,169748,169750,169752,169754,169756],{"class":400,"line":1476},[398,169733,148578],{"class":408},[398,169735,62872],{"class":513},[398,169737,51630],{"class":408},[398,169739,151129],{"class":513},[398,169741,12712],{"class":408},[398,169743,69317],{"class":513},[398,169745,51630],{"class":408},[398,169747,1027],{"class":457},[398,169749,12712],{"class":408},[398,169751,151665],{"class":513},[398,169753,51630],{"class":408},[398,169755,1213],{"class":457},[398,169757,5206],{"class":408},[398,169759,169760],{"class":400,"line":1490},[398,169761,33439],{"class":408},[398,169763,169764],{"class":400,"line":1496},[398,169765,2676],{"emptyLinePlaceholder":328},[398,169767,169768,169770,169772,169774,169776,169778,169780,169782,169784,169786,169788,169790,169792,169794],{"class":400,"line":1587},[398,169769,108026],{"class":404},[398,169771,146984],{"class":457},[398,169773,409],{"class":408},[398,169775,152024],{"class":513},[398,169777,12712],{"class":408},[398,169779,152169],{"class":513},[398,169781,12712],{"class":408},[398,169783,146999],{"class":5493},[398,169785,454],{"class":404},[398,169787,147004],{"class":513},[398,169789,13991],{"class":408},[398,169791,31576],{"class":404},[398,169793,148346],{"class":5493},[398,169795,4015],{"class":408},[398,169797,169798,169801,169803,169805,169807,169809,169811,169813,169815,169817,169819],{"class":400,"line":1593},[398,169799,169800],{"class":408},"    json.dump(students, ",[398,169802,45547],{"class":5493},[398,169804,12712],{"class":408},[398,169806,147330],{"class":5493},[398,169808,454],{"class":404},[398,169810,34180],{"class":457},[398,169812,12712],{"class":408},[398,169814,152205],{"class":5493},[398,169816,454],{"class":404},[398,169818,486],{"class":457},[398,169820,415],{"class":408},[19,169822,169823],{},"读取 JSON 文件：",[389,169825,169827],{"className":30571,"code":169826,"language":30573,"meta":316,"style":316},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[395,169828,169829,169835,169839,169869,169881,169885],{"__ignoreMap":316},[398,169830,169831,169833],{"class":400,"line":401},[398,169832,30585],{"class":404},[398,169834,147284],{"class":408},[398,169836,169837],{"class":400,"line":317},[398,169838,2676],{"emptyLinePlaceholder":328},[398,169840,169841,169843,169845,169847,169849,169851,169853,169855,169857,169859,169861,169863,169865,169867],{"class":400,"line":320},[398,169842,108026],{"class":404},[398,169844,146984],{"class":457},[398,169846,409],{"class":408},[398,169848,152024],{"class":513},[398,169850,12712],{"class":408},[398,169852,146994],{"class":513},[398,169854,12712],{"class":408},[398,169856,146999],{"class":5493},[398,169858,454],{"class":404},[398,169860,147004],{"class":513},[398,169862,13991],{"class":408},[398,169864,31576],{"class":404},[398,169866,148346],{"class":5493},[398,169868,4015],{"class":408},[398,169870,169871,169873,169875,169877,169879],{"class":400,"line":1470},[398,169872,153230],{"class":408},[398,169874,454],{"class":404},[398,169876,148357],{"class":408},[398,169878,45547],{"class":5493},[398,169880,415],{"class":408},[398,169882,169883],{"class":400,"line":1476},[398,169884,2676],{"emptyLinePlaceholder":328},[398,169886,169887,169889],{"class":400,"line":1490},[398,169888,30608],{"class":457},[398,169890,165188],{"class":408},[343,169892,169894],{"id":169893},"_811-csv文件","8.11 CSV文件",[19,169896,169897],{},"CSV 是逗号分隔值，常用于表格数据。",[19,169899,169900],{},"写入 CSV：",[389,169902,169904],{"className":30571,"code":169903,"language":30573,"meta":316,"style":316},"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",[395,169905,169906,169913,169917,169925,169943,169959,169975,169979,169983,170023,170037],{"__ignoreMap":316},[398,169907,169908,169910],{"class":400,"line":401},[398,169909,30585],{"class":404},[398,169911,169912],{"class":408}," csv\n",[398,169914,169915],{"class":400,"line":317},[398,169916,2676],{"emptyLinePlaceholder":328},[398,169918,169919,169921,169923],{"class":400,"line":320},[398,169920,159909],{"class":408},[398,169922,454],{"class":404},[398,169924,55640],{"class":408},[398,169926,169927,169930,169932,169934,169936,169938,169941],{"class":400,"line":1470},[398,169928,169929],{"class":408},"    [",[398,169931,73292],{"class":513},[398,169933,12712],{"class":408},[398,169935,73325],{"class":513},[398,169937,12712],{"class":408},[398,169939,169940],{"class":513},"\"成绩\"",[398,169942,88029],{"class":408},[398,169944,169945,169947,169949,169951,169953,169955,169957],{"class":400,"line":1476},[398,169946,169929],{"class":408},[398,169948,150081],{"class":513},[398,169950,12712],{"class":408},[398,169952,1052],{"class":457},[398,169954,12712],{"class":408},[398,169956,1391],{"class":457},[398,169958,88029],{"class":408},[398,169960,169961,169963,169965,169967,169969,169971,169973],{"class":400,"line":1490},[398,169962,169929],{"class":408},[398,169964,151129],{"class":513},[398,169966,12712],{"class":408},[398,169968,1027],{"class":457},[398,169970,12712],{"class":408},[398,169972,1213],{"class":457},[398,169974,88029],{"class":408},[398,169976,169977],{"class":400,"line":1496},[398,169978,33439],{"class":408},[398,169980,169981],{"class":400,"line":1587},[398,169982,2676],{"emptyLinePlaceholder":328},[398,169984,169985,169987,169989,169991,169994,169996,169998,170000,170002,170004,170006,170008,170011,170013,170015,170017,170019,170021],{"class":400,"line":1593},[398,169986,108026],{"class":404},[398,169988,146984],{"class":457},[398,169990,409],{"class":408},[398,169992,169993],{"class":513},"\"students.csv\"",[398,169995,12712],{"class":408},[398,169997,152169],{"class":513},[398,169999,12712],{"class":408},[398,170001,146999],{"class":5493},[398,170003,454],{"class":404},[398,170005,147004],{"class":513},[398,170007,12712],{"class":408},[398,170009,170010],{"class":5493},"newline",[398,170012,454],{"class":404},[398,170014,7929],{"class":513},[398,170016,13991],{"class":408},[398,170018,31576],{"class":404},[398,170020,148346],{"class":5493},[398,170022,4015],{"class":408},[398,170024,170025,170028,170030,170033,170035],{"class":400,"line":1605},[398,170026,170027],{"class":408},"    writer ",[398,170029,454],{"class":404},[398,170031,170032],{"class":408}," csv.writer(",[398,170034,45547],{"class":5493},[398,170036,415],{"class":408},[398,170038,170039],{"class":400,"line":1888},[398,170040,170041],{"class":408},"    writer.writerows(students)\n",[19,170043,170044],{},"读取 CSV：",[389,170046,170048],{"className":30571,"code":170047,"language":30573,"meta":316,"style":316},"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",[395,170049,170050,170056,170060,170090,170104,170116],{"__ignoreMap":316},[398,170051,170052,170054],{"class":400,"line":401},[398,170053,30585],{"class":404},[398,170055,169912],{"class":408},[398,170057,170058],{"class":400,"line":317},[398,170059,2676],{"emptyLinePlaceholder":328},[398,170061,170062,170064,170066,170068,170070,170072,170074,170076,170078,170080,170082,170084,170086,170088],{"class":400,"line":320},[398,170063,108026],{"class":404},[398,170065,146984],{"class":457},[398,170067,409],{"class":408},[398,170069,169993],{"class":513},[398,170071,12712],{"class":408},[398,170073,146994],{"class":513},[398,170075,12712],{"class":408},[398,170077,146999],{"class":5493},[398,170079,454],{"class":404},[398,170081,147004],{"class":513},[398,170083,13991],{"class":408},[398,170085,31576],{"class":404},[398,170087,148346],{"class":5493},[398,170089,4015],{"class":408},[398,170091,170092,170095,170097,170100,170102],{"class":400,"line":1470},[398,170093,170094],{"class":408},"    reader ",[398,170096,454],{"class":404},[398,170098,170099],{"class":408}," csv.reader(",[398,170101,45547],{"class":5493},[398,170103,415],{"class":408},[398,170105,170106,170108,170111,170113],{"class":400,"line":1476},[398,170107,3477],{"class":404},[398,170109,170110],{"class":408}," row ",[398,170112,26236],{"class":404},[398,170114,170115],{"class":408}," reader:\n",[398,170117,170118,170120],{"class":400,"line":1490},[398,170119,32644],{"class":457},[398,170121,170122],{"class":408},"(row)\n",[19,170124,170125],{},"使用字典写入：",[389,170127,170129],{"className":30571,"code":170128,"language":30573,"meta":316,"style":316},"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",[395,170130,170131,170137,170141,170149,170177,170205,170209,170213,170251,170272,170293,170298],{"__ignoreMap":316},[398,170132,170133,170135],{"class":400,"line":401},[398,170134,30585],{"class":404},[398,170136,169912],{"class":408},[398,170138,170139],{"class":400,"line":317},[398,170140,2676],{"emptyLinePlaceholder":328},[398,170142,170143,170145,170147],{"class":400,"line":320},[398,170144,159909],{"class":408},[398,170146,454],{"class":404},[398,170148,55640],{"class":408},[398,170150,170151,170153,170155,170157,170159,170161,170163,170165,170167,170169,170171,170173,170175],{"class":400,"line":1470},[398,170152,148578],{"class":408},[398,170154,62872],{"class":513},[398,170156,51630],{"class":408},[398,170158,150081],{"class":513},[398,170160,12712],{"class":408},[398,170162,69317],{"class":513},[398,170164,51630],{"class":408},[398,170166,1052],{"class":457},[398,170168,12712],{"class":408},[398,170170,151665],{"class":513},[398,170172,51630],{"class":408},[398,170174,1391],{"class":457},[398,170176,5206],{"class":408},[398,170178,170179,170181,170183,170185,170187,170189,170191,170193,170195,170197,170199,170201,170203],{"class":400,"line":1476},[398,170180,148578],{"class":408},[398,170182,62872],{"class":513},[398,170184,51630],{"class":408},[398,170186,151129],{"class":513},[398,170188,12712],{"class":408},[398,170190,69317],{"class":513},[398,170192,51630],{"class":408},[398,170194,1027],{"class":457},[398,170196,12712],{"class":408},[398,170198,151665],{"class":513},[398,170200,51630],{"class":408},[398,170202,1213],{"class":457},[398,170204,5206],{"class":408},[398,170206,170207],{"class":400,"line":1490},[398,170208,33439],{"class":408},[398,170210,170211],{"class":400,"line":1496},[398,170212,2676],{"emptyLinePlaceholder":328},[398,170214,170215,170217,170219,170221,170223,170225,170227,170229,170231,170233,170235,170237,170239,170241,170243,170245,170247,170249],{"class":400,"line":1587},[398,170216,108026],{"class":404},[398,170218,146984],{"class":457},[398,170220,409],{"class":408},[398,170222,169993],{"class":513},[398,170224,12712],{"class":408},[398,170226,152169],{"class":513},[398,170228,12712],{"class":408},[398,170230,146999],{"class":5493},[398,170232,454],{"class":404},[398,170234,147004],{"class":513},[398,170236,12712],{"class":408},[398,170238,170010],{"class":5493},[398,170240,454],{"class":404},[398,170242,7929],{"class":513},[398,170244,13991],{"class":408},[398,170246,31576],{"class":404},[398,170248,148346],{"class":5493},[398,170250,4015],{"class":408},[398,170252,170253,170256,170258,170260,170262,170264,170266,170268,170270],{"class":400,"line":1593},[398,170254,170255],{"class":408},"    fieldnames ",[398,170257,454],{"class":404},[398,170259,52419],{"class":408},[398,170261,62872],{"class":513},[398,170263,12712],{"class":408},[398,170265,69317],{"class":513},[398,170267,12712],{"class":408},[398,170269,151665],{"class":513},[398,170271,33439],{"class":408},[398,170273,170274,170276,170278,170281,170283,170285,170288,170290],{"class":400,"line":1605},[398,170275,170027],{"class":408},[398,170277,454],{"class":404},[398,170279,170280],{"class":408}," csv.DictWriter(",[398,170282,45547],{"class":5493},[398,170284,12712],{"class":408},[398,170286,170287],{"class":5493},"fieldnames",[398,170289,454],{"class":404},[398,170291,170292],{"class":408},"fieldnames)\n",[398,170294,170295],{"class":400,"line":1888},[398,170296,170297],{"class":408},"    writer.writeheader()\n",[398,170299,170300],{"class":400,"line":1893},[398,170301,170041],{"class":408},[343,170303,170305],{"id":170304},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,170307,123485],{},[38,170309,170310,170313,170316],{},[41,170311,170312],{},"读取文本文件。",[41,170314,170315],{},"统计每个单词出现次数。",[41,170317,170318],{},"输出出现次数最多的前 10 个单词。",[19,170320,10312],{},[389,170322,170324],{"className":30571,"code":170323,"language":30573,"meta":316,"style":316},"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",[395,170325,170326,170336,170340,170353,170369,170373,170383,170392,170396,170408,170428,170437,170441,170459,170463,170493,170497,170513],{"__ignoreMap":316},[398,170327,170328,170330,170332,170334],{"class":400,"line":401},[398,170329,30930],{"class":404},[398,170331,108504],{"class":408},[398,170333,30585],{"class":404},[398,170335,108509],{"class":408},[398,170337,170338],{"class":400,"line":317},[398,170339,2676],{"emptyLinePlaceholder":328},[398,170341,170342,170344,170346,170348,170351],{"class":400,"line":320},[398,170343,168504],{"class":408},[398,170345,454],{"class":404},[398,170347,108738],{"class":408},[398,170349,170350],{"class":513},"\"article.txt\"",[398,170352,415],{"class":408},[398,170354,170355,170357,170359,170361,170363,170365,170367],{"class":400,"line":1470},[398,170356,168687],{"class":408},[398,170358,454],{"class":404},[398,170360,169564],{"class":408},[398,170362,146999],{"class":5493},[398,170364,454],{"class":404},[398,170366,147004],{"class":513},[398,170368,415],{"class":408},[398,170370,170371],{"class":400,"line":1476},[398,170372,2676],{"emptyLinePlaceholder":328},[398,170374,170375,170378,170380],{"class":400,"line":1490},[398,170376,170377],{"class":408},"words ",[398,170379,454],{"class":404},[398,170381,170382],{"class":408}," content.lower().split()\n",[398,170384,170385,170388,170390],{"class":400,"line":1496},[398,170386,170387],{"class":408},"counter ",[398,170389,454],{"class":404},[398,170391,88061],{"class":408},[398,170393,170394],{"class":400,"line":1587},[398,170395,2676],{"emptyLinePlaceholder":328},[398,170397,170398,170400,170403,170405],{"class":400,"line":1593},[398,170399,3301],{"class":404},[398,170401,170402],{"class":408}," word ",[398,170404,26236],{"class":404},[398,170406,170407],{"class":408}," words:\n",[398,170409,170410,170413,170415,170418,170421,170423,170426],{"class":400,"line":1605},[398,170411,170412],{"class":408},"    word ",[398,170414,454],{"class":404},[398,170416,170417],{"class":408}," word.strip(",[398,170419,170420],{"class":513},"\".,!?;:",[398,170422,156688],{"class":457},[398,170424,170425],{"class":513},"'()[]\"",[398,170427,415],{"class":408},[398,170429,170430,170432,170434],{"class":400,"line":1888},[398,170431,3377],{"class":404},[398,170433,39123],{"class":404},[398,170435,170436],{"class":408}," word:\n",[398,170438,170439],{"class":400,"line":1893},[398,170440,148705],{"class":404},[398,170442,170443,170446,170448,170451,170453,170455,170457],{"class":400,"line":1899},[398,170444,170445],{"class":408},"    counter[word] ",[398,170447,454],{"class":404},[398,170449,170450],{"class":408}," counter.get(word, ",[398,170452,593],{"class":457},[398,170454,13991],{"class":408},[398,170456,883],{"class":404},[398,170458,55892],{"class":457},[398,170460,170461],{"class":400,"line":1904},[398,170462,2676],{"emptyLinePlaceholder":328},[398,170464,170465,170468,170470,170472,170475,170477,170479,170481,170483,170485,170487,170489,170491],{"class":400,"line":1918},[398,170466,170467],{"class":408},"items ",[398,170469,454],{"class":404},[398,170471,163797],{"class":457},[398,170473,170474],{"class":408},"(counter.items(), ",[398,170476,154139],{"class":5493},[398,170478,154142],{"class":404},[398,170480,154145],{"class":408},[398,170482,619],{"class":457},[398,170484,112395],{"class":408},[398,170486,163721],{"class":5493},[398,170488,454],{"class":404},[398,170490,31669],{"class":457},[398,170492,415],{"class":408},[398,170494,170495],{"class":400,"line":1923},[398,170496,2676],{"emptyLinePlaceholder":328},[398,170498,170499,170501,170504,170506,170509,170511],{"class":400,"line":1929},[398,170500,3301],{"class":404},[398,170502,170503],{"class":408}," word, count ",[398,170505,26236],{"class":404},[398,170507,170508],{"class":408}," items[:",[398,170510,848],{"class":457},[398,170512,165948],{"class":408},[398,170514,170515,170517],{"class":400,"line":1950},[398,170516,31492],{"class":457},[398,170518,170519],{"class":408},"(word, count)\n",[343,170521,170523],{"id":170522},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[389,170525,170527],{"className":30571,"code":170526,"language":30573,"meta":316,"style":316},"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",[395,170528,170529,170535,170545,170549,170561,170565,170569,170577,170587,170593,170597,170627,170637,170641,170645,170653,170683,170707,170711,170715,170723,170752,170757],{"__ignoreMap":316},[398,170530,170531,170533],{"class":400,"line":401},[398,170532,30585],{"class":404},[398,170534,147284],{"class":408},[398,170536,170537,170539,170541,170543],{"class":400,"line":317},[398,170538,30930],{"class":404},[398,170540,108504],{"class":408},[398,170542,30585],{"class":404},[398,170544,108509],{"class":408},[398,170546,170547],{"class":400,"line":320},[398,170548,2676],{"emptyLinePlaceholder":328},[398,170550,170551,170553,170555,170557,170559],{"class":400,"line":1470},[398,170552,152017],{"class":457},[398,170554,13841],{"class":404},[398,170556,108738],{"class":408},[398,170558,152024],{"class":513},[398,170560,415],{"class":408},[398,170562,170563],{"class":400,"line":1476},[398,170564,2676],{"emptyLinePlaceholder":328},[398,170566,170567],{"class":400,"line":1490},[398,170568,2676],{"emptyLinePlaceholder":328},[398,170570,170571,170573,170575],{"class":400,"line":1496},[398,170572,32140],{"class":404},[398,170574,152041],{"class":2239},[398,170576,32146],{"class":408},[398,170578,170579,170581,170583,170585],{"class":400,"line":1587},[398,170580,3377],{"class":404},[398,170582,39123],{"class":404},[398,170584,152052],{"class":457},[398,170586,152055],{"class":408},[398,170588,170589,170591],{"class":400,"line":1593},[398,170590,15029],{"class":404},[398,170592,52031],{"class":408},[398,170594,170595],{"class":400,"line":1605},[398,170596,2676],{"emptyLinePlaceholder":328},[398,170598,170599,170601,170603,170605,170607,170609,170611,170613,170615,170617,170619,170621,170623,170625],{"class":400,"line":1888},[398,170600,34371],{"class":404},[398,170602,146984],{"class":457},[398,170604,409],{"class":408},[398,170606,152017],{"class":457},[398,170608,12712],{"class":408},[398,170610,146994],{"class":513},[398,170612,12712],{"class":408},[398,170614,146999],{"class":5493},[398,170616,454],{"class":404},[398,170618,147004],{"class":513},[398,170620,13991],{"class":408},[398,170622,31576],{"class":404},[398,170624,148346],{"class":5493},[398,170626,4015],{"class":408},[398,170628,170629,170631,170633,170635],{"class":400,"line":1893},[398,170630,15029],{"class":404},[398,170632,148357],{"class":408},[398,170634,45547],{"class":5493},[398,170636,415],{"class":408},[398,170638,170639],{"class":400,"line":1899},[398,170640,2676],{"emptyLinePlaceholder":328},[398,170642,170643],{"class":400,"line":1904},[398,170644,2676],{"emptyLinePlaceholder":328},[398,170646,170647,170649,170651],{"class":400,"line":1918},[398,170648,32140],{"class":404},[398,170650,152151],{"class":2239},[398,170652,152154],{"class":408},[398,170654,170655,170657,170659,170661,170663,170665,170667,170669,170671,170673,170675,170677,170679,170681],{"class":400,"line":1923},[398,170656,34371],{"class":404},[398,170658,146984],{"class":457},[398,170660,409],{"class":408},[398,170662,152017],{"class":457},[398,170664,12712],{"class":408},[398,170666,152169],{"class":513},[398,170668,12712],{"class":408},[398,170670,146999],{"class":5493},[398,170672,454],{"class":404},[398,170674,147004],{"class":513},[398,170676,13991],{"class":408},[398,170678,31576],{"class":404},[398,170680,148346],{"class":5493},[398,170682,4015],{"class":408},[398,170684,170685,170687,170689,170691,170693,170695,170697,170699,170701,170703,170705],{"class":400,"line":1929},[398,170686,152190],{"class":408},[398,170688,45547],{"class":5493},[398,170690,12712],{"class":408},[398,170692,147330],{"class":5493},[398,170694,454],{"class":404},[398,170696,34180],{"class":457},[398,170698,12712],{"class":408},[398,170700,152205],{"class":5493},[398,170702,454],{"class":404},[398,170704,486],{"class":457},[398,170706,415],{"class":408},[398,170708,170709],{"class":400,"line":1950},[398,170710,2676],{"emptyLinePlaceholder":328},[398,170712,170713],{"class":400,"line":1955},[398,170714,2676],{"emptyLinePlaceholder":328},[398,170716,170717,170719,170721],{"class":400,"line":1969},[398,170718,159909],{"class":408},[398,170720,454],{"class":404},[398,170722,153235],{"class":408},[398,170724,170725,170728,170730,170732,170734,170736,170738,170740,170742,170744,170746,170748,170750],{"class":400,"line":1974},[398,170726,170727],{"class":408},"students.append({",[398,170729,62872],{"class":513},[398,170731,51630],{"class":408},[398,170733,150081],{"class":513},[398,170735,12712],{"class":408},[398,170737,69317],{"class":513},[398,170739,51630],{"class":408},[398,170741,1052],{"class":457},[398,170743,12712],{"class":408},[398,170745,151665],{"class":513},[398,170747,51630],{"class":408},[398,170749,1391],{"class":457},[398,170751,165345],{"class":408},[398,170753,170754],{"class":400,"line":2003},[398,170755,170756],{"class":408},"save_students(students)\n",[398,170758,170759,170761,170763,170766],{"class":400,"line":2008},[398,170760,30608],{"class":457},[398,170762,409],{"class":408},[398,170764,170765],{"class":513},"\"保存成功\"",[398,170767,415],{"class":408},[343,170769,170771],{"id":170770},"_814-易错点","8.14 易错点",[38,170773,170774,170778,170784,170789,170796,170803],{},[41,170775,170776,169037],{},[395,170777,1197],{},[41,170779,170780,170781,28578],{},"读写中文要指定 ",[395,170782,170783],{},"encoding=\"utf-8\"",[41,170785,170786,170787,28578],{},"打开文件后要关闭，推荐使用 ",[395,170788,108026],{},[41,170790,170791,170792,170795],{},"读取大文件不要直接 ",[395,170793,170794],{},"read()"," 全部内容。",[41,170797,170798,170799,170802],{},"Windows 写 CSV 时建议加 ",[395,170800,170801],{},"newline=\"\"","，避免空行。",[41,170804,170805],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[343,170807,170809],{"id":170808},"_815-本章练习","8.15 本章练习",[38,170811,170812,170819,170824,170827,170830],{},[41,170813,170814,170815,170818],{},"写入一个 ",[395,170816,170817],{},"students.txt","，每行保存一个学生姓名。",[41,170820,104548,170821,170823],{},[395,170822,170817],{}," 并输出所有学生。",[41,170825,170826],{},"把学生列表保存为 JSON 文件。",[41,170828,170829],{},"从 JSON 文件读取学生数据，计算平均分。",[41,170831,170832,170833,170836,170837,170840],{},"写一个日志函数 ",[395,170834,170835],{},"write_log(message)","，每次调用向 ",[395,170838,170839],{},"app.log"," 追加一行。",[5403,170842,170843],{},"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":316,"searchDepth":317,"depth":317,"links":170845},[170846,170847,170851,170852,170858,170859,170860,170861,170862,170863,170864,170865,170866,170867,170868],{"id":168357,"depth":317,"text":168358},{"id":168398,"depth":317,"text":168399,"children":170848},[170849,170850],{"id":168402,"depth":320,"text":168403},{"id":168436,"depth":320,"text":168437},{"id":168550,"depth":317,"text":168551},{"id":168643,"depth":317,"text":168644,"children":170853},[170854,170855,170856,170857],{"id":168647,"depth":320,"text":168648},{"id":168734,"depth":320,"text":168735},{"id":168804,"depth":320,"text":168805},{"id":168898,"depth":320,"text":168899},{"id":168968,"depth":317,"text":168969},{"id":169031,"depth":317,"text":169032},{"id":169192,"depth":317,"text":169193},{"id":169255,"depth":317,"text":169256},{"id":169371,"depth":317,"text":169372},{"id":169581,"depth":317,"text":169582},{"id":169893,"depth":317,"text":169894},{"id":170304,"depth":317,"text":170305},{"id":170522,"depth":317,"text":170523},{"id":170770,"depth":317,"text":170771},{"id":170808,"depth":317,"text":170809},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168349,"description":23654},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170875,"title":170876,"body":170877,"description":23654,"extension":326,"meta":173063,"navigation":328,"path":173064,"seo":173065,"stem":173066,"__hash__":173067},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170878,"toc":173030},[170879,170882,170886,170889,170892,170984,170986,171005,171010,171014,171017,171020,171049,171056,171059,171063,171066,171095,171097,171149,171155,171208,171212,171310,171313,171380,171384,171441,171443,171449,171453,171458,171464,171555,171560,171564,171567,171645,171648,171686,171690,171808,171811,171815,171818,171863,171866,171870,171875,171881,171931,171934,171965,171969,171973,172003,172007,172042,172046,172081,172121,172125,172141,172144,172148,172152,172231,172235,172276,172280,172335,172339,172373,172377,172407,172416,172423,172429,172486,172489,172497,172500,172504,172511,172514,172520,172523,172540,172545,172549,172555,172568,172571,172608,172611,172622,172625,172639,172642,172656,172660,172667,172700,172703,172705,172711,172714,172718,172720,172726,172731,172904,172908,172971,172975,172999,173003,173027],[10,170880,170876],{"id":170881},"_9-异常模块与包",[343,170883,170885],{"id":170884},"_91-什么是异常","9.1 什么是异常",[19,170887,170888],{},"异常是程序运行过程中出现的错误。",[19,170890,170891],{},"常见异常：",[84,170893,170894,170903],{},[87,170895,170896],{},[90,170897,170898,170901],{},[93,170899,170900],{},"异常",[93,170902,214],{},[101,170904,170905,170915,170925,170934,170944,170954,170964,170974],{},[90,170906,170907,170912],{},[106,170908,170909],{},[395,170910,170911],{},"NameError",[106,170913,170914],{},"使用了未定义变量",[90,170916,170917,170922],{},[106,170918,170919],{},[395,170920,170921],{},"TypeError",[106,170923,170924],{},"类型不匹配",[90,170926,170927,170931],{},[106,170928,170929],{},[395,170930,155027],{},[106,170932,170933],{},"值不合法",[90,170935,170936,170941],{},[106,170937,170938],{},[395,170939,170940],{},"IndexError",[106,170942,170943],{},"列表索引越界",[90,170945,170946,170951],{},[106,170947,170948],{},[395,170949,170950],{},"KeyError",[106,170952,170953],{},"字典 key 不存在",[90,170955,170956,170961],{},[106,170957,170958],{},[395,170959,170960],{},"FileNotFoundError",[106,170962,170963],{},"文件不存在",[90,170965,170966,170971],{},[106,170967,170968],{},[395,170969,170970],{},"ZeroDivisionError",[106,170972,170973],{},"除数为 0",[90,170975,170976,170981],{},[106,170977,170978],{},[395,170979,170980],{},"ImportError",[106,170982,170983],{},"导入失败",[19,170985,15412],{},[389,170987,170989],{"className":30571,"code":170988,"language":30573,"meta":316,"style":316},"num = int(\"abc\")\n",[395,170990,170991],{"__ignoreMap":316},[398,170992,170993,170995,170997,170999,171001,171003],{"class":400,"line":401},[398,170994,155980],{"class":408},[398,170996,454],{"class":404},[398,170998,2658],{"class":457},[398,171000,409],{"class":408},[398,171002,156073],{"class":513},[398,171004,415],{"class":408},[19,171006,171007,171008,28578],{},"会触发 ",[395,171009,155027],{},[343,171011,171013],{"id":171012},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,171015,171016],{},"如果不处理异常，程序会直接终止。",[19,171018,171019],{},"例如用户输入年龄：",[389,171021,171023],{"className":30571,"code":171022,"language":30573,"meta":316,"style":316},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[395,171024,171025,171043],{"__ignoreMap":316},[398,171026,171027,171029,171031,171033,171035,171037,171039,171041],{"class":400,"line":401},[398,171028,146739],{"class":408},[398,171030,454],{"class":404},[398,171032,2658],{"class":457},[398,171034,409],{"class":408},[398,171036,54014],{"class":457},[398,171038,409],{"class":408},[398,171040,152587],{"class":513},[398,171042,30690],{"class":408},[398,171044,171045,171047],{"class":400,"line":317},[398,171046,30608],{"class":457},[398,171048,155954],{"class":408},[19,171050,171051,171052,171055],{},"用户输入 ",[395,171053,171054],{},"abc","，程序就会报错退出。",[19,171057,171058],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[343,171060,171062],{"id":171061},"_93-try-except","9.3 try except",[19,171064,171065],{},"基础语法：",[389,171067,171069],{"className":30571,"code":171068,"language":30573,"meta":316,"style":316},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[395,171070,171071,171078,171083,171090],{"__ignoreMap":316},[398,171072,171073,171076],{"class":400,"line":401},[398,171074,171075],{"class":404},"try",[398,171077,4015],{"class":408},[398,171079,171080],{"class":400,"line":317},[398,171081,171082],{"class":408},"    可能出错的代码\n",[398,171084,171085,171088],{"class":400,"line":320},[398,171086,171087],{"class":404},"except",[398,171089,4015],{"class":408},[398,171091,171092],{"class":400,"line":1470},[398,171093,171094],{"class":408},"    出错后的处理代码\n",[19,171096,15412],{},[389,171098,171100],{"className":30571,"code":171099,"language":30573,"meta":316,"style":316},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[395,171101,171102,171108,171126,171132,171138],{"__ignoreMap":316},[398,171103,171104,171106],{"class":400,"line":401},[398,171105,171075],{"class":404},[398,171107,4015],{"class":408},[398,171109,171110,171112,171114,171116,171118,171120,171122,171124],{"class":400,"line":317},[398,171111,152579],{"class":408},[398,171113,454],{"class":404},[398,171115,2658],{"class":457},[398,171117,409],{"class":408},[398,171119,54014],{"class":457},[398,171121,409],{"class":408},[398,171123,152587],{"class":513},[398,171125,30690],{"class":408},[398,171127,171128,171130],{"class":400,"line":320},[398,171129,31492],{"class":457},[398,171131,155954],{"class":408},[398,171133,171134,171136],{"class":400,"line":1470},[398,171135,171087],{"class":404},[398,171137,4015],{"class":408},[398,171139,171140,171142,171144,171147],{"class":400,"line":1476},[398,171141,31492],{"class":457},[398,171143,409],{"class":408},[398,171145,171146],{"class":513},"\"年龄必须是数字\"",[398,171148,415],{"class":408},[19,171150,171151,171152,171154],{},"不建议裸写 ",[395,171153,171087],{},"，最好指定异常类型。",[389,171156,171158],{"className":30571,"code":171157,"language":30573,"meta":316,"style":316},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[395,171159,171160,171166,171184,171190,171198],{"__ignoreMap":316},[398,171161,171162,171164],{"class":400,"line":401},[398,171163,171075],{"class":404},[398,171165,4015],{"class":408},[398,171167,171168,171170,171172,171174,171176,171178,171180,171182],{"class":400,"line":317},[398,171169,152579],{"class":408},[398,171171,454],{"class":404},[398,171173,2658],{"class":457},[398,171175,409],{"class":408},[398,171177,54014],{"class":457},[398,171179,409],{"class":408},[398,171181,152587],{"class":513},[398,171183,30690],{"class":408},[398,171185,171186,171188],{"class":400,"line":320},[398,171187,31492],{"class":457},[398,171189,155954],{"class":408},[398,171191,171192,171194,171196],{"class":400,"line":1470},[398,171193,171087],{"class":404},[398,171195,152419],{"class":457},[398,171197,4015],{"class":408},[398,171199,171200,171202,171204,171206],{"class":400,"line":1476},[398,171201,31492],{"class":457},[398,171203,409],{"class":408},[398,171205,171146],{"class":513},[398,171207,415],{"class":408},[343,171209,171211],{"id":171210},"_94-捕获多个异常","9.4 捕获多个异常",[389,171213,171215],{"className":30571,"code":171214,"language":30573,"meta":316,"style":316},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[395,171216,171217,171223,171244,171264,171271,171279,171290,171299],{"__ignoreMap":316},[398,171218,171219,171221],{"class":400,"line":401},[398,171220,171075],{"class":404},[398,171222,4015],{"class":408},[398,171224,171225,171228,171230,171232,171234,171236,171238,171240,171242],{"class":400,"line":317},[398,171226,171227],{"class":408},"    nums ",[398,171229,454],{"class":404},[398,171231,52419],{"class":408},[398,171233,619],{"class":457},[398,171235,12712],{"class":408},[398,171237,486],{"class":457},[398,171239,12712],{"class":408},[398,171241,480],{"class":457},[398,171243,33439],{"class":408},[398,171245,171246,171249,171251,171253,171255,171257,171259,171262],{"class":400,"line":320},[398,171247,171248],{"class":408},"    index ",[398,171250,454],{"class":404},[398,171252,2658],{"class":457},[398,171254,409],{"class":408},[398,171256,54014],{"class":457},[398,171258,409],{"class":408},[398,171260,171261],{"class":513},"\"请输入索引:\"",[398,171263,30690],{"class":408},[398,171265,171266,171268],{"class":400,"line":1470},[398,171267,31492],{"class":457},[398,171269,171270],{"class":408},"(nums[index])\n",[398,171272,171273,171275,171277],{"class":400,"line":1476},[398,171274,171087],{"class":404},[398,171276,152419],{"class":457},[398,171278,4015],{"class":408},[398,171280,171281,171283,171285,171288],{"class":400,"line":1490},[398,171282,31492],{"class":457},[398,171284,409],{"class":408},[398,171286,171287],{"class":513},"\"索引必须是整数\"",[398,171289,415],{"class":408},[398,171291,171292,171294,171297],{"class":400,"line":1496},[398,171293,171087],{"class":404},[398,171295,171296],{"class":457}," IndexError",[398,171298,4015],{"class":408},[398,171300,171301,171303,171305,171308],{"class":400,"line":1587},[398,171302,31492],{"class":457},[398,171304,409],{"class":408},[398,171306,171307],{"class":513},"\"索引越界\"",[398,171309,415],{"class":408},[19,171311,171312],{},"多个异常使用相同处理逻辑：",[389,171314,171316],{"className":30571,"code":171315,"language":30573,"meta":316,"style":316},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[395,171317,171318,171324,171342,171355,171369],{"__ignoreMap":316},[398,171319,171320,171322],{"class":400,"line":401},[398,171321,171075],{"class":404},[398,171323,4015],{"class":408},[398,171325,171326,171328,171330,171332,171334,171336,171338,171340],{"class":400,"line":317},[398,171327,45786],{"class":408},[398,171329,454],{"class":404},[398,171331,2658],{"class":457},[398,171333,409],{"class":408},[398,171335,54014],{"class":457},[398,171337,409],{"class":408},[398,171339,155989],{"class":513},[398,171341,30690],{"class":408},[398,171343,171344,171346,171348,171350,171352],{"class":400,"line":320},[398,171345,31492],{"class":457},[398,171347,409],{"class":408},[398,171349,848],{"class":457},[398,171351,156239],{"class":404},[398,171353,171354],{"class":408}," num)\n",[398,171356,171357,171359,171361,171363,171365,171367],{"class":400,"line":1470},[398,171358,171087],{"class":404},[398,171360,1934],{"class":408},[398,171362,155027],{"class":457},[398,171364,12712],{"class":408},[398,171366,170970],{"class":457},[398,171368,30979],{"class":408},[398,171370,171371,171373,171375,171378],{"class":400,"line":1476},[398,171372,31492],{"class":457},[398,171374,409],{"class":408},[398,171376,171377],{"class":513},"\"输入不合法\"",[398,171379,415],{"class":408},[343,171381,171383],{"id":171382},"_95-获取异常信息","9.5 获取异常信息",[389,171385,171387],{"className":30571,"code":171386,"language":30573,"meta":316,"style":316},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[395,171388,171389,171395,171409,171420],{"__ignoreMap":316},[398,171390,171391,171393],{"class":400,"line":401},[398,171392,171075],{"class":404},[398,171394,4015],{"class":408},[398,171396,171397,171399,171401,171403,171405,171407],{"class":400,"line":317},[398,171398,45786],{"class":408},[398,171400,454],{"class":404},[398,171402,2658],{"class":457},[398,171404,409],{"class":408},[398,171406,156073],{"class":513},[398,171408,415],{"class":408},[398,171410,171411,171413,171415,171417],{"class":400,"line":320},[398,171412,171087],{"class":404},[398,171414,152419],{"class":457},[398,171416,64797],{"class":404},[398,171418,171419],{"class":408}," e:\n",[398,171421,171422,171424,171426,171428,171431,171433,171435,171437,171439],{"class":400,"line":1470},[398,171423,31492],{"class":457},[398,171425,409],{"class":408},[398,171427,461],{"class":404},[398,171429,171430],{"class":513},"\"出错了:",[398,171432,1298],{"class":457},[398,171434,483],{"class":408},[398,171436,1348],{"class":457},[398,171438,653],{"class":513},[398,171440,415],{"class":408},[19,171442,146650],{},[389,171444,171447],{"className":171445,"code":171446,"language":5464,"meta":316},[5462],"出错了:invalid literal for int() with base 10: 'abc'\n",[395,171448,171446],{"__ignoreMap":316},[343,171450,171452],{"id":171451},"_96-else和finally","9.6 else和finally",[19,171454,171455,171457],{},[395,171456,1977],{},"：没有异常时执行。",[19,171459,171460,171463],{},[395,171461,171462],{},"finally","：无论是否异常都会执行。",[389,171465,171467],{"className":30571,"code":171466,"language":30573,"meta":316,"style":316},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[395,171468,171469,171475,171493,171501,171511,171517,171538,171544],{"__ignoreMap":316},[398,171470,171471,171473],{"class":400,"line":401},[398,171472,171075],{"class":404},[398,171474,4015],{"class":408},[398,171476,171477,171479,171481,171483,171485,171487,171489,171491],{"class":400,"line":317},[398,171478,45786],{"class":408},[398,171480,454],{"class":404},[398,171482,2658],{"class":457},[398,171484,409],{"class":408},[398,171486,54014],{"class":457},[398,171488,409],{"class":408},[398,171490,155989],{"class":513},[398,171492,30690],{"class":408},[398,171494,171495,171497,171499],{"class":400,"line":320},[398,171496,171087],{"class":404},[398,171498,152419],{"class":457},[398,171500,4015],{"class":408},[398,171502,171503,171505,171507,171509],{"class":400,"line":1470},[398,171504,31492],{"class":457},[398,171506,409],{"class":408},[398,171508,153407],{"class":513},[398,171510,415],{"class":408},[398,171512,171513,171515],{"class":400,"line":1476},[398,171514,1977],{"class":404},[398,171516,4015],{"class":408},[398,171518,171519,171521,171523,171525,171528,171530,171532,171534,171536],{"class":400,"line":1490},[398,171520,31492],{"class":457},[398,171522,409],{"class":408},[398,171524,461],{"class":404},[398,171526,171527],{"class":513},"\"输入正确:",[398,171529,1298],{"class":457},[398,171531,1941],{"class":408},[398,171533,1348],{"class":457},[398,171535,653],{"class":513},[398,171537,415],{"class":408},[398,171539,171540,171542],{"class":400,"line":1496},[398,171541,171462],{"class":404},[398,171543,4015],{"class":408},[398,171545,171546,171548,171550,171553],{"class":400,"line":1587},[398,171547,31492],{"class":457},[398,171549,409],{"class":408},[398,171551,171552],{"class":513},"\"程序结束\"",[398,171554,415],{"class":408},[19,171556,171557,171559],{},[395,171558,171462],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[343,171561,171563],{"id":171562},"_97-抛出异常","9.7 抛出异常",[19,171565,171566],{},"程序可以主动抛出异常。",[389,171568,171570],{"className":30571,"code":171569,"language":30573,"meta":316,"style":316},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[395,171571,171572,171581,171593,171606,171626,171630,171634],{"__ignoreMap":316},[398,171573,171574,171576,171579],{"class":400,"line":401},[398,171575,32140],{"class":404},[398,171577,171578],{"class":2239}," set_age",[398,171580,161608],{"class":408},[398,171582,171583,171585,171587,171589,171591],{"class":400,"line":317},[398,171584,3377],{"class":404},[398,171586,15984],{"class":408},[398,171588,1312],{"class":404},[398,171590,4369],{"class":457},[398,171592,4015],{"class":408},[398,171594,171595,171597,171599,171601,171604],{"class":400,"line":320},[398,171596,103625],{"class":404},[398,171598,152419],{"class":457},[398,171600,409],{"class":408},[398,171602,171603],{"class":513},"\"年龄不能为负数\"",[398,171605,415],{"class":408},[398,171607,171608,171610,171612,171614,171616,171618,171620,171622,171624],{"class":400,"line":1470},[398,171609,31492],{"class":457},[398,171611,409],{"class":408},[398,171613,461],{"class":404},[398,171615,162176],{"class":513},[398,171617,1298],{"class":457},[398,171619,70414],{"class":408},[398,171621,1348],{"class":457},[398,171623,653],{"class":513},[398,171625,415],{"class":408},[398,171627,171628],{"class":400,"line":1476},[398,171629,2676],{"emptyLinePlaceholder":328},[398,171631,171632],{"class":400,"line":1490},[398,171633,2676],{"emptyLinePlaceholder":328},[398,171635,171636,171639,171641,171643],{"class":400,"line":1496},[398,171637,171638],{"class":408},"set_age(",[398,171640,934],{"class":404},[398,171642,619],{"class":457},[398,171644,415],{"class":408},[19,171646,171647],{},"调用者可以捕获：",[389,171649,171651],{"className":30571,"code":171650,"language":30573,"meta":316,"style":316},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[395,171652,171653,171659,171670,171680],{"__ignoreMap":316},[398,171654,171655,171657],{"class":400,"line":401},[398,171656,171075],{"class":404},[398,171658,4015],{"class":408},[398,171660,171661,171664,171666,171668],{"class":400,"line":317},[398,171662,171663],{"class":408},"    set_age(",[398,171665,934],{"class":404},[398,171667,619],{"class":457},[398,171669,415],{"class":408},[398,171671,171672,171674,171676,171678],{"class":400,"line":320},[398,171673,171087],{"class":404},[398,171675,152419],{"class":457},[398,171677,64797],{"class":404},[398,171679,171419],{"class":408},[398,171681,171682,171684],{"class":400,"line":1470},[398,171683,31492],{"class":457},[398,171685,67192],{"class":408},[343,171687,171689],{"id":171688},"_98-自定义异常","9.8 自定义异常",[389,171691,171693],{"className":30571,"code":171692,"language":30573,"meta":316,"style":316},"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",[395,171694,171695,171709,171713,171717,171721,171729,171739,171750,171760,171764,171768,171774,171791,171802],{"__ignoreMap":316},[398,171696,171697,171699,171702,171704,171707],{"class":400,"line":401},[398,171698,14971],{"class":404},[398,171700,171701],{"class":2239}," BalanceNotEnoughError",[398,171703,409],{"class":408},[398,171705,171706],{"class":457},"Exception",[398,171708,30979],{"class":408},[398,171710,171711],{"class":400,"line":317},[398,171712,149730],{"class":404},[398,171714,171715],{"class":400,"line":320},[398,171716,2676],{"emptyLinePlaceholder":328},[398,171718,171719],{"class":400,"line":1470},[398,171720,2676],{"emptyLinePlaceholder":328},[398,171722,171723,171725,171727],{"class":400,"line":1476},[398,171724,32140],{"class":404},[398,171726,150379],{"class":2239},[398,171728,163005],{"class":408},[398,171730,171731,171733,171735,171737],{"class":400,"line":1490},[398,171732,3377],{"class":404},[398,171734,150335],{"class":408},[398,171736,1362],{"class":404},[398,171738,162782],{"class":408},[398,171740,171741,171743,171746,171748],{"class":400,"line":1496},[398,171742,103625],{"class":404},[398,171744,171745],{"class":408}," BalanceNotEnoughError(",[398,171747,150430],{"class":513},[398,171749,415],{"class":408},[398,171751,171752,171754,171756,171758],{"class":400,"line":1587},[398,171753,4366],{"class":404},[398,171755,163012],{"class":408},[398,171757,934],{"class":404},[398,171759,150368],{"class":408},[398,171761,171762],{"class":400,"line":1593},[398,171763,2676],{"emptyLinePlaceholder":328},[398,171765,171766],{"class":400,"line":1605},[398,171767,2676],{"emptyLinePlaceholder":328},[398,171769,171770,171772],{"class":400,"line":1888},[398,171771,171075],{"class":404},[398,171773,4015],{"class":408},[398,171775,171776,171778,171780,171783,171785,171787,171789],{"class":400,"line":1893},[398,171777,162683],{"class":408},[398,171779,454],{"class":404},[398,171781,171782],{"class":408}," withdraw(",[398,171784,713],{"class":457},[398,171786,12712],{"class":408},[398,171788,1998],{"class":457},[398,171790,415],{"class":408},[398,171792,171793,171795,171798,171800],{"class":400,"line":1899},[398,171794,171087],{"class":404},[398,171796,171797],{"class":408}," BalanceNotEnoughError ",[398,171799,31576],{"class":404},[398,171801,171419],{"class":408},[398,171803,171804,171806],{"class":400,"line":1904},[398,171805,31492],{"class":457},[398,171807,67192],{"class":408},[19,171809,171810],{},"入门阶段大多数情况使用内置异常即可。",[343,171812,171814],{"id":171813},"_99-traceback","9.9 traceback",[19,171816,171817],{},"调试时可以输出完整异常堆栈。",[389,171819,171821],{"className":30571,"code":171820,"language":30573,"meta":316,"style":316},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[395,171822,171823,171830,171834,171840,171850,171858],{"__ignoreMap":316},[398,171824,171825,171827],{"class":400,"line":401},[398,171826,30585],{"class":404},[398,171828,171829],{"class":408}," traceback\n",[398,171831,171832],{"class":400,"line":317},[398,171833,2676],{"emptyLinePlaceholder":328},[398,171835,171836,171838],{"class":400,"line":320},[398,171837,171075],{"class":404},[398,171839,4015],{"class":408},[398,171841,171842,171844,171846,171848],{"class":400,"line":1470},[398,171843,2261],{"class":457},[398,171845,409],{"class":408},[398,171847,156073],{"class":513},[398,171849,415],{"class":408},[398,171851,171852,171854,171856],{"class":400,"line":1476},[398,171853,171087],{"class":404},[398,171855,152419],{"class":457},[398,171857,4015],{"class":408},[398,171859,171860],{"class":400,"line":1490},[398,171861,171862],{"class":408},"    traceback.print_exc()\n",[19,171864,171865],{},"日志系统中常把异常堆栈记录到文件。",[343,171867,171869],{"id":171868},"_910-什么是模块","9.10 什么是模块",[19,171871,171872,171873,126176],{},"模块就是一个 ",[395,171874,146545],{},[19,171876,171877,171878,24896],{},"例如创建 ",[395,171879,171880],{},"my_math.py",[389,171882,171884],{"className":30571,"code":171883,"language":30573,"meta":316,"style":316},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[395,171885,171886,171894,171904,171908,171912,171921],{"__ignoreMap":316},[398,171887,171888,171890,171892],{"class":400,"line":401},[398,171889,32140],{"class":404},[398,171891,5486],{"class":2239},[398,171893,151286],{"class":408},[398,171895,171896,171898,171900,171902],{"class":400,"line":317},[398,171897,4366],{"class":404},[398,171899,11146],{"class":408},[398,171901,883],{"class":404},[398,171903,151297],{"class":408},[398,171905,171906],{"class":400,"line":320},[398,171907,2676],{"emptyLinePlaceholder":328},[398,171909,171910],{"class":400,"line":1470},[398,171911,2676],{"emptyLinePlaceholder":328},[398,171913,171914,171916,171919],{"class":400,"line":1476},[398,171915,32140],{"class":404},[398,171917,171918],{"class":2239}," sub",[398,171920,151286],{"class":408},[398,171922,171923,171925,171927,171929],{"class":400,"line":1490},[398,171924,4366],{"class":404},[398,171926,11146],{"class":408},[398,171928,934],{"class":404},[398,171930,151297],{"class":408},[19,171932,171933],{},"在另一个文件中导入：",[389,171935,171937],{"className":30571,"code":171936,"language":30573,"meta":316,"style":316},"import my_math\n\nprint(my_math.add(1, 2))\n",[395,171938,171939,171946,171950],{"__ignoreMap":316},[398,171940,171941,171943],{"class":400,"line":401},[398,171942,30585],{"class":404},[398,171944,171945],{"class":408}," my_math\n",[398,171947,171948],{"class":400,"line":317},[398,171949,2676],{"emptyLinePlaceholder":328},[398,171951,171952,171954,171957,171959,171961,171963],{"class":400,"line":320},[398,171953,30608],{"class":457},[398,171955,171956],{"class":408},"(my_math.add(",[398,171958,619],{"class":457},[398,171960,12712],{"class":408},[398,171962,486],{"class":457},[398,171964,30690],{"class":408},[343,171966,171968],{"id":171967},"_911-import导入","9.11 import导入",[14,171970,171972],{"id":171971},"_9111-导入模块","9.11.1 导入模块",[389,171974,171976],{"className":30571,"code":171975,"language":30573,"meta":316,"style":316},"import random\n\nprint(random.randint(1, 10))\n",[395,171977,171978,171984,171988],{"__ignoreMap":316},[398,171979,171980,171982],{"class":400,"line":401},[398,171981,30585],{"class":404},[398,171983,45521],{"class":408},[398,171985,171986],{"class":400,"line":317},[398,171987,2676],{"emptyLinePlaceholder":328},[398,171989,171990,171992,171995,171997,171999,172001],{"class":400,"line":320},[398,171991,30608],{"class":457},[398,171993,171994],{"class":408},"(random.randint(",[398,171996,619],{"class":457},[398,171998,12712],{"class":408},[398,172000,848],{"class":457},[398,172002,30690],{"class":408},[14,172004,172006],{"id":172005},"_9112-导入指定内容","9.11.2 导入指定内容",[389,172008,172010],{"className":30571,"code":172009,"language":30573,"meta":316,"style":316},"from random import randint\n\nprint(randint(1, 10))\n",[395,172011,172012,172023,172027],{"__ignoreMap":316},[398,172013,172014,172016,172018,172020],{"class":400,"line":401},[398,172015,30930],{"class":404},[398,172017,57989],{"class":408},[398,172019,30585],{"class":404},[398,172021,172022],{"class":408}," randint\n",[398,172024,172025],{"class":400,"line":317},[398,172026,2676],{"emptyLinePlaceholder":328},[398,172028,172029,172031,172034,172036,172038,172040],{"class":400,"line":320},[398,172030,30608],{"class":457},[398,172032,172033],{"class":408},"(randint(",[398,172035,619],{"class":457},[398,172037,12712],{"class":408},[398,172039,848],{"class":457},[398,172041,30690],{"class":408},[14,172043,172045],{"id":172044},"_9113-起别名","9.11.3 起别名",[389,172047,172049],{"className":30571,"code":172048,"language":30573,"meta":316,"style":316},"import random as rd\n\nprint(rd.randint(1, 10))\n",[395,172050,172051,172062,172066],{"__ignoreMap":316},[398,172052,172053,172055,172057,172059],{"class":400,"line":401},[398,172054,30585],{"class":404},[398,172056,57989],{"class":408},[398,172058,31576],{"class":404},[398,172060,172061],{"class":408}," rd\n",[398,172063,172064],{"class":400,"line":317},[398,172065,2676],{"emptyLinePlaceholder":328},[398,172067,172068,172070,172073,172075,172077,172079],{"class":400,"line":320},[398,172069,30608],{"class":457},[398,172071,172072],{"class":408},"(rd.randint(",[398,172074,619],{"class":457},[398,172076,12712],{"class":408},[398,172078,848],{"class":457},[398,172080,30690],{"class":408},[389,172082,172084],{"className":30571,"code":172083,"language":30573,"meta":316,"style":316},"from random import randint as rint\n\nprint(rint(1, 10))\n",[395,172085,172086,172102,172106],{"__ignoreMap":316},[398,172087,172088,172090,172092,172094,172097,172099],{"class":400,"line":401},[398,172089,30930],{"class":404},[398,172091,57989],{"class":408},[398,172093,30585],{"class":404},[398,172095,172096],{"class":408}," randint ",[398,172098,31576],{"class":404},[398,172100,172101],{"class":408}," rint\n",[398,172103,172104],{"class":400,"line":317},[398,172105,2676],{"emptyLinePlaceholder":328},[398,172107,172108,172110,172113,172115,172117,172119],{"class":400,"line":320},[398,172109,30608],{"class":457},[398,172111,172112],{"class":408},"(rint(",[398,172114,619],{"class":457},[398,172116,12712],{"class":408},[398,172118,848],{"class":457},[398,172120,30690],{"class":408},[14,172122,172124],{"id":172123},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[389,172126,172128],{"className":30571,"code":172127,"language":30573,"meta":316,"style":316},"from random import *\n",[395,172129,172130],{"__ignoreMap":316},[398,172131,172132,172134,172136,172138],{"class":400,"line":401},[398,172133,30930],{"class":404},[398,172135,57989],{"class":408},[398,172137,30585],{"class":404},[398,172139,172140],{"class":404}," *\n",[19,172142,172143],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[343,172145,172147],{"id":172146},"_912-常用内置模块","9.12 常用内置模块",[14,172149,172151],{"id":172150},"_9121-random","9.12.1 random",[389,172153,172155],{"className":30571,"code":172154,"language":30573,"meta":316,"style":316},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[395,172156,172157,172163,172167,172181,172200],{"__ignoreMap":316},[398,172158,172159,172161],{"class":400,"line":401},[398,172160,30585],{"class":404},[398,172162,45521],{"class":408},[398,172164,172165],{"class":400,"line":317},[398,172166,2676],{"emptyLinePlaceholder":328},[398,172168,172169,172171,172173,172175,172177,172179],{"class":400,"line":320},[398,172170,30608],{"class":457},[398,172172,171994],{"class":408},[398,172174,619],{"class":457},[398,172176,12712],{"class":408},[398,172178,848],{"class":457},[398,172180,30690],{"class":408},[398,172182,172183,172185,172188,172190,172192,172194,172196,172198],{"class":400,"line":1470},[398,172184,30608],{"class":457},[398,172186,172187],{"class":408},"(random.choice([",[398,172189,150081],{"class":513},[398,172191,12712],{"class":408},[398,172193,151129],{"class":513},[398,172195,12712],{"class":408},[398,172197,159924],{"class":513},[398,172199,33336],{"class":408},[398,172201,172202,172204,172207,172209,172211,172213,172215,172217,172219,172221,172223,172225,172227,172229],{"class":400,"line":1476},[398,172203,30608],{"class":457},[398,172205,172206],{"class":408},"(random.sample([",[398,172208,619],{"class":457},[398,172210,12712],{"class":408},[398,172212,486],{"class":457},[398,172214,12712],{"class":408},[398,172216,480],{"class":457},[398,172218,12712],{"class":408},[398,172220,695],{"class":457},[398,172222,12712],{"class":408},[398,172224,721],{"class":457},[398,172226,112395],{"class":408},[398,172228,486],{"class":457},[398,172230,30690],{"class":408},[14,172232,172234],{"id":172233},"_9122-time","9.12.2 time",[389,172236,172238],{"className":30571,"code":172237,"language":30573,"meta":316,"style":316},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[395,172239,172240,172246,172250,172257,172265],{"__ignoreMap":316},[398,172241,172242,172244],{"class":400,"line":401},[398,172243,30585],{"class":404},[398,172245,32022],{"class":408},[398,172247,172248],{"class":400,"line":317},[398,172249,2676],{"emptyLinePlaceholder":328},[398,172251,172252,172254],{"class":400,"line":320},[398,172253,30608],{"class":457},[398,172255,172256],{"class":408},"(time.time())\n",[398,172258,172259,172261,172263],{"class":400,"line":1470},[398,172260,95264],{"class":408},[398,172262,619],{"class":457},[398,172264,415],{"class":408},[398,172266,172267,172269,172271,172274],{"class":400,"line":1476},[398,172268,30608],{"class":457},[398,172270,409],{"class":408},[398,172272,172273],{"class":513},"\"1秒后执行\"",[398,172275,415],{"class":408},[14,172277,172279],{"id":172278},"_9123-datetime","9.12.3 datetime",[389,172281,172283],{"className":30571,"code":172282,"language":30573,"meta":316,"style":316},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[395,172284,172285,172297,172301,172311,172318],{"__ignoreMap":316},[398,172286,172287,172289,172292,172294],{"class":400,"line":401},[398,172288,30930],{"class":404},[398,172290,172291],{"class":408}," datetime ",[398,172293,30585],{"class":404},[398,172295,172296],{"class":408}," datetime\n",[398,172298,172299],{"class":400,"line":317},[398,172300,2676],{"emptyLinePlaceholder":328},[398,172302,172303,172306,172308],{"class":400,"line":320},[398,172304,172305],{"class":408},"now ",[398,172307,454],{"class":404},[398,172309,172310],{"class":408}," datetime.now()\n",[398,172312,172313,172315],{"class":400,"line":1470},[398,172314,30608],{"class":457},[398,172316,172317],{"class":408},"(now)\n",[398,172319,172320,172322,172325,172328,172330,172333],{"class":400,"line":1476},[398,172321,30608],{"class":457},[398,172323,172324],{"class":408},"(now.strftime(",[398,172326,172327],{"class":513},"\"%Y-%m-",[398,172329,156884],{"class":457},[398,172331,172332],{"class":513}," %H:%M:%S\"",[398,172334,30690],{"class":408},[14,172336,172338],{"id":172337},"_9124-os","9.12.4 os",[389,172340,172342],{"className":30571,"code":172341,"language":30573,"meta":316,"style":316},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[395,172343,172344,172350,172354,172361],{"__ignoreMap":316},[398,172345,172346,172348],{"class":400,"line":401},[398,172347,30585],{"class":404},[398,172349,45498],{"class":408},[398,172351,172352],{"class":400,"line":317},[398,172353,2676],{"emptyLinePlaceholder":328},[398,172355,172356,172358],{"class":400,"line":320},[398,172357,30608],{"class":457},[398,172359,172360],{"class":408},"(os.getcwd())\n",[398,172362,172363,172365,172368,172371],{"class":400,"line":1470},[398,172364,30608],{"class":457},[398,172366,172367],{"class":408},"(os.listdir(",[398,172369,172370],{"class":513},"\".\"",[398,172372,30690],{"class":408},[14,172374,172376],{"id":172375},"_9125-sys","9.12.5 sys",[389,172378,172380],{"className":30571,"code":172379,"language":30573,"meta":316,"style":316},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[395,172381,172382,172389,172393,172400],{"__ignoreMap":316},[398,172383,172384,172386],{"class":400,"line":401},[398,172385,30585],{"class":404},[398,172387,172388],{"class":408}," sys\n",[398,172390,172391],{"class":400,"line":317},[398,172392,2676],{"emptyLinePlaceholder":328},[398,172394,172395,172397],{"class":400,"line":320},[398,172396,30608],{"class":457},[398,172398,172399],{"class":408},"(sys.version)\n",[398,172401,172402,172404],{"class":400,"line":1470},[398,172403,30608],{"class":457},[398,172405,172406],{"class":408},"(sys.path)\n",[343,172408,172410,172411,172413,172414,653],{"id":172409},"_913-if-name-main","9.13 if ",[23,172412,80003],{}," == \"",[23,172415,102251],{},[19,172417,172418,172419,172422],{},"模块被直接运行和被导入时，",[395,172420,172421],{},"__name__"," 的值不同。",[19,172424,172425,172426,24896],{},"创建 ",[395,172427,172428],{},"my_module.py",[389,172430,172432],{"className":30571,"code":172431,"language":30573,"meta":316,"style":316},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[395,172433,172434,172442,172452,172456,172460,172472],{"__ignoreMap":316},[398,172435,172436,172438,172440],{"class":400,"line":401},[398,172437,32140],{"class":404},[398,172439,5486],{"class":2239},[398,172441,151286],{"class":408},[398,172443,172444,172446,172448,172450],{"class":400,"line":317},[398,172445,4366],{"class":404},[398,172447,11146],{"class":408},[398,172449,883],{"class":404},[398,172451,151297],{"class":408},[398,172453,172454],{"class":400,"line":320},[398,172455,2676],{"emptyLinePlaceholder":328},[398,172457,172458],{"class":400,"line":1470},[398,172459,2676],{"emptyLinePlaceholder":328},[398,172461,172462,172464,172466,172468,172470],{"class":400,"line":1476},[398,172463,1807],{"class":404},[398,172465,31413],{"class":457},[398,172467,101752],{"class":404},[398,172469,101755],{"class":513},[398,172471,4015],{"class":408},[398,172473,172474,172476,172478,172480,172482,172484],{"class":400,"line":1490},[398,172475,31492],{"class":457},[398,172477,166793],{"class":408},[398,172479,619],{"class":457},[398,172481,12712],{"class":408},[398,172483,486],{"class":457},[398,172485,30690],{"class":408},[19,172487,172488],{},"作用：",[38,172490,172491,172494],{},[41,172492,172493],{},"直接运行该文件时，执行测试代码。",[41,172495,172496],{},"被其他文件导入时，不执行测试代码。",[19,172498,172499],{},"这是写模块时很常用的习惯。",[343,172501,172503],{"id":172502},"_914-包","9.14 包",[19,172505,172506,172507,172510],{},"包是包含 ",[395,172508,172509],{},"__init__.py"," 的目录，用于组织多个模块。",[19,172512,172513],{},"目录结构：",[389,172515,172518],{"className":172516,"code":172517,"language":5464,"meta":316},[5462],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[395,172519,172517],{"__ignoreMap":316},[19,172521,172522],{},"导入：",[389,172524,172526],{"className":30571,"code":172525,"language":30573,"meta":316,"style":316},"from utils.file_utils import read_file\n",[395,172527,172528],{"__ignoreMap":316},[398,172529,172530,172532,172535,172537],{"class":400,"line":401},[398,172531,30930],{"class":404},[398,172533,172534],{"class":408}," utils.file_utils ",[398,172536,30585],{"class":404},[398,172538,172539],{"class":408}," read_file\n",[19,172541,172542,172544],{},[395,172543,172509],{}," 可以为空，也可以写包初始化逻辑。",[343,172546,172548],{"id":172547},"_915-第三方包","9.15 第三方包",[19,172550,172551,172552,172554],{},"第三方包通过 ",[395,172553,24108],{}," 安装。",[389,172556,172558],{"className":24099,"code":172557,"language":24101,"meta":316,"style":316},"pip install requests\n",[395,172559,172560],{"__ignoreMap":316},[398,172561,172562,172564,172566],{"class":400,"line":401},[398,172563,24108],{"class":2239},[398,172565,24111],{"class":513},[398,172567,146291],{"class":513},[19,172569,172570],{},"使用：",[389,172572,172574],{"className":30571,"code":172573,"language":30573,"meta":316,"style":316},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[395,172575,172576,172582,172586,172601],{"__ignoreMap":316},[398,172577,172578,172580],{"class":400,"line":401},[398,172579,30585],{"class":404},[398,172581,146291],{"class":408},[398,172583,172584],{"class":400,"line":317},[398,172585,2676],{"emptyLinePlaceholder":328},[398,172587,172588,172591,172593,172596,172599],{"class":400,"line":320},[398,172589,172590],{"class":408},"response ",[398,172592,454],{"class":404},[398,172594,172595],{"class":408}," requests.get(",[398,172597,172598],{"class":513},"\"https:\u002F\u002Fwww.example.com\"",[398,172600,415],{"class":408},[398,172602,172603,172605],{"class":400,"line":1470},[398,172604,30608],{"class":457},[398,172606,172607],{"class":408},"(response.status_code)\n",[19,172609,172610],{},"查看已安装包：",[389,172612,172614],{"className":24099,"code":172613,"language":24101,"meta":316,"style":316},"pip list\n",[395,172615,172616],{"__ignoreMap":316},[398,172617,172618,172620],{"class":400,"line":401},[398,172619,24108],{"class":2239},[398,172621,119148],{"class":513},[19,172623,172624],{},"导出项目依赖：",[389,172626,172627],{"className":24099,"code":146486,"language":24101,"meta":316,"style":316},[395,172628,172629],{"__ignoreMap":316},[398,172630,172631,172633,172635,172637],{"class":400,"line":401},[398,172632,24108],{"class":2239},[398,172634,146495],{"class":513},[398,172636,26415],{"class":404},[398,172638,146500],{"class":513},[19,172640,172641],{},"安装项目依赖：",[389,172643,172644],{"className":24099,"code":146506,"language":24101,"meta":316,"style":316},[395,172645,172646],{"__ignoreMap":316},[398,172647,172648,172650,172652,172654],{"class":400,"line":401},[398,172649,24108],{"class":2239},[398,172651,24111],{"class":513},[398,172653,119832],{"class":457},[398,172655,146500],{"class":513},[343,172657,172659],{"id":172658},"_916-模块搜索路径","9.16 模块搜索路径",[19,172661,172662,172663,172666],{},"Python 导入模块时会在 ",[395,172664,172665],{},"sys.path"," 中查找。",[389,172668,172670],{"className":30571,"code":172669,"language":30573,"meta":316,"style":316},"import sys\n\nfor path in sys.path:\n    print(path)\n",[395,172671,172672,172678,172682,172694],{"__ignoreMap":316},[398,172673,172674,172676],{"class":400,"line":401},[398,172675,30585],{"class":404},[398,172677,172388],{"class":408},[398,172679,172680],{"class":400,"line":317},[398,172681,2676],{"emptyLinePlaceholder":328},[398,172683,172684,172686,172689,172691],{"class":400,"line":320},[398,172685,3301],{"class":404},[398,172687,172688],{"class":408}," path ",[398,172690,26236],{"class":404},[398,172692,172693],{"class":408}," sys.path:\n",[398,172695,172696,172698],{"class":400,"line":1470},[398,172697,31492],{"class":457},[398,172699,169422],{"class":408},[19,172701,172702],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,172704,157816],{},[389,172706,172709],{"className":172707,"code":172708,"language":5464,"meta":316},[5462],"random.py\njson.py\ntime.py\n",[395,172710,172708],{"__ignoreMap":316},[19,172712,172713],{},"这些文件名可能导致导入异常。",[343,172715,172717],{"id":172716},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,172719,172513],{},[389,172721,172724],{"className":172722,"code":172723,"language":5464,"meta":316},[5462],"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",[395,172725,172723],{"__ignoreMap":316},[19,172727,172728,24896],{},[395,172729,172730],{},"utils\u002Ffile_utils.py",[389,172732,172734],{"className":30571,"code":172733,"language":30573,"meta":316,"style":316},"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",[395,172735,172736,172742,172752,172756,172760,172770,172780,172788,172794,172798,172825,172835,172839,172843,172853,172879],{"__ignoreMap":316},[398,172737,172738,172740],{"class":400,"line":401},[398,172739,30585],{"class":404},[398,172741,147284],{"class":408},[398,172743,172744,172746,172748,172750],{"class":400,"line":317},[398,172745,30930],{"class":404},[398,172747,108504],{"class":408},[398,172749,30585],{"class":404},[398,172751,108509],{"class":408},[398,172753,172754],{"class":400,"line":320},[398,172755,2676],{"emptyLinePlaceholder":328},[398,172757,172758],{"class":400,"line":1470},[398,172759,2676],{"emptyLinePlaceholder":328},[398,172761,172762,172764,172767],{"class":400,"line":1476},[398,172763,32140],{"class":404},[398,172765,172766],{"class":2239}," read_json",[398,172768,172769],{"class":408},"(path):\n",[398,172771,172772,172775,172777],{"class":400,"line":1490},[398,172773,172774],{"class":408},"    path ",[398,172776,454],{"class":404},[398,172778,172779],{"class":408}," Path(path)\n",[398,172781,172782,172784,172786],{"class":400,"line":1496},[398,172783,3377],{"class":404},[398,172785,39123],{"class":404},[398,172787,169503],{"class":408},[398,172789,172790,172792],{"class":400,"line":1587},[398,172791,15029],{"class":404},[398,172793,52031],{"class":408},[398,172795,172796],{"class":400,"line":1593},[398,172797,2676],{"emptyLinePlaceholder":328},[398,172799,172800,172802,172804,172807,172809,172811,172813,172815,172817,172819,172821,172823],{"class":400,"line":1605},[398,172801,34371],{"class":404},[398,172803,146984],{"class":457},[398,172805,172806],{"class":408},"(path, ",[398,172808,146994],{"class":513},[398,172810,12712],{"class":408},[398,172812,146999],{"class":5493},[398,172814,454],{"class":404},[398,172816,147004],{"class":513},[398,172818,13991],{"class":408},[398,172820,31576],{"class":404},[398,172822,148346],{"class":5493},[398,172824,4015],{"class":408},[398,172826,172827,172829,172831,172833],{"class":400,"line":1888},[398,172828,15029],{"class":404},[398,172830,148357],{"class":408},[398,172832,45547],{"class":5493},[398,172834,415],{"class":408},[398,172836,172837],{"class":400,"line":1893},[398,172838,2676],{"emptyLinePlaceholder":328},[398,172840,172841],{"class":400,"line":1899},[398,172842,2676],{"emptyLinePlaceholder":328},[398,172844,172845,172847,172850],{"class":400,"line":1904},[398,172846,32140],{"class":404},[398,172848,172849],{"class":2239}," write_json",[398,172851,172852],{"class":408},"(path, data):\n",[398,172854,172855,172857,172859,172861,172863,172865,172867,172869,172871,172873,172875,172877],{"class":400,"line":1918},[398,172856,34371],{"class":404},[398,172858,146984],{"class":457},[398,172860,172806],{"class":408},[398,172862,152169],{"class":513},[398,172864,12712],{"class":408},[398,172866,146999],{"class":5493},[398,172868,454],{"class":404},[398,172870,147004],{"class":513},[398,172872,13991],{"class":408},[398,172874,31576],{"class":404},[398,172876,148346],{"class":5493},[398,172878,4015],{"class":408},[398,172880,172881,172884,172886,172888,172890,172892,172894,172896,172898,172900,172902],{"class":400,"line":1923},[398,172882,172883],{"class":408},"        json.dump(data, ",[398,172885,45547],{"class":5493},[398,172887,12712],{"class":408},[398,172889,147330],{"class":5493},[398,172891,454],{"class":404},[398,172893,34180],{"class":457},[398,172895,12712],{"class":408},[398,172897,152205],{"class":5493},[398,172899,454],{"class":404},[398,172901,486],{"class":457},[398,172903,415],{"class":408},[19,172905,172906,24896],{},[395,172907,154800],{},[389,172909,172911],{"className":30571,"code":172910,"language":30573,"meta":316,"style":316},"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",[395,172912,172913,172924,172928,172941,172961],{"__ignoreMap":316},[398,172914,172915,172917,172919,172921],{"class":400,"line":401},[398,172916,30930],{"class":404},[398,172918,172534],{"class":408},[398,172920,30585],{"class":404},[398,172922,172923],{"class":408}," read_json, write_json\n",[398,172925,172926],{"class":400,"line":317},[398,172927,2676],{"emptyLinePlaceholder":328},[398,172929,172930,172932,172934,172937,172939],{"class":400,"line":320},[398,172931,159909],{"class":408},[398,172933,454],{"class":404},[398,172935,172936],{"class":408}," read_json(",[398,172938,152024],{"class":513},[398,172940,415],{"class":408},[398,172942,172943,172945,172947,172949,172951,172953,172955,172957,172959],{"class":400,"line":1470},[398,172944,170727],{"class":408},[398,172946,62872],{"class":513},[398,172948,51630],{"class":408},[398,172950,150081],{"class":513},[398,172952,12712],{"class":408},[398,172954,151665],{"class":513},[398,172956,51630],{"class":408},[398,172958,1391],{"class":457},[398,172960,165345],{"class":408},[398,172962,172963,172966,172968],{"class":400,"line":1476},[398,172964,172965],{"class":408},"write_json(",[398,172967,152024],{"class":513},[398,172969,172970],{"class":408},", students)\n",[343,172972,172974],{"id":172973},"_918-易错点","9.18 易错点",[38,172976,172977,172980,172985,172990,172993,172996],{},[41,172978,172979],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[41,172981,172982,172983,28578],{},"能指定异常类型就不要裸写 ",[395,172984,171087],{},[41,172986,172987,172989],{},[395,172988,171462],{}," 无论是否出错都会执行。",[41,172991,172992],{},"模块文件名不要和标准库重名。",[41,172994,172995],{},"导入自己写的模块时，要注意运行目录。",[41,172997,172998],{},"第三方包要安装到当前解释器或虚拟环境中。",[343,173000,173002],{"id":173001},"_919-本章练习","9.19 本章练习",[38,173004,173005,173008,173011,173017,173024],{},[41,173006,173007],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[41,173009,173010],{},"写函数读取文件，如果文件不存在则返回空字符串。",[41,173012,172425,173013,173016],{},[395,173014,173015],{},"math_utils.py","，实现加减乘除函数并导入使用。",[41,173018,173019,173020,173023],{},"创建一个 ",[395,173021,173022],{},"utils"," 包，把 JSON 读写函数放进去。",[41,173025,173026],{},"写一个程序，捕获除零异常和输入格式异常。",[5403,173028,173029],{},"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":316,"searchDepth":317,"depth":317,"links":173031},[173032,173033,173034,173035,173036,173037,173038,173039,173040,173041,173042,173048,173055,173057,173058,173059,173060,173061,173062],{"id":170884,"depth":317,"text":170885},{"id":171012,"depth":317,"text":171013},{"id":171061,"depth":317,"text":171062},{"id":171210,"depth":317,"text":171211},{"id":171382,"depth":317,"text":171383},{"id":171451,"depth":317,"text":171452},{"id":171562,"depth":317,"text":171563},{"id":171688,"depth":317,"text":171689},{"id":171813,"depth":317,"text":171814},{"id":171868,"depth":317,"text":171869},{"id":171967,"depth":317,"text":171968,"children":173043},[173044,173045,173046,173047],{"id":171971,"depth":320,"text":171972},{"id":172005,"depth":320,"text":172006},{"id":172044,"depth":320,"text":172045},{"id":172123,"depth":320,"text":172124},{"id":172146,"depth":317,"text":172147,"children":173049},[173050,173051,173052,173053,173054],{"id":172150,"depth":320,"text":172151},{"id":172233,"depth":320,"text":172234},{"id":172278,"depth":320,"text":172279},{"id":172337,"depth":320,"text":172338},{"id":172375,"depth":320,"text":172376},{"id":172409,"depth":317,"text":173056},"9.13 if name == \"main\"",{"id":172502,"depth":317,"text":172503},{"id":172547,"depth":317,"text":172548},{"id":172658,"depth":317,"text":172659},{"id":172716,"depth":317,"text":172717},{"id":172973,"depth":317,"text":172974},{"id":173001,"depth":317,"text":173002},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170876,"description":23654},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":173069,"title":173070,"body":173071,"description":173234,"extension":326,"meta":173235,"navigation":328,"path":173236,"seo":173237,"stem":173238,"__hash__":173239},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":173072,"toc":173229},[173073,173076,173079,173082,173093,173095,173169,173172,173175,173178,173181,173184,173187,173190,173193,173196,173199],[10,173074,173070],{"id":173075},"python教程",[19,173077,173078],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,173080,173081],{},"建议学习环境：",[38,173083,173084,173087,173090],{},[41,173085,173086],{},"Python 版本：Python 3.10 及以上。",[41,173088,173089],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[41,173091,173092],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[343,173094,117271],{"id":117271},[38,173096,173097,173103,173109,173115,173121,173127,173133,173139,173145,173151,173157,173163],{},[41,173098,173099],{},[640,173100,173102],{"href":173101},".\u002Fch1-Python","Python环境与第一个程序",[41,173104,173105],{},[640,173106,173108],{"href":173107},".\u002Fch2","基础语法、变量与字符串",[41,173110,173111],{},[640,173112,173114],{"href":173113},".\u002Fch3","判断语句",[41,173116,173117],{},[640,173118,173120],{"href":173119},".\u002Fch4","循环语句",[41,173122,173123],{},[640,173124,173126],{"href":173125},".\u002Fch5","函数基础",[41,173128,173129],{},[640,173130,173132],{"href":173131},".\u002Fch6","数据容器",[41,173134,173135],{},[640,173136,173138],{"href":173137},".\u002Fch7","函数进阶",[41,173140,173141],{},[640,173142,173144],{"href":173143},".\u002Fch8","文件操作",[41,173146,173147],{},[640,173148,173150],{"href":173149},".\u002Fch9","异常、模块与包",[41,173152,173153],{},[640,173154,173156],{"href":173155},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[41,173158,173159],{},[640,173160,173162],{"href":173161},".\u002Fch11","面向对象基础",[41,173164,173165],{},[640,173166,173168],{"href":173167},".\u002Fch12","综合案例与复习路线",[343,173170,173171],{"id":173171},"学习路线",[19,173173,173174],{},"第一阶段：能运行程序。",[19,173176,173177],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,173179,173180],{},"第二阶段：能组织数据。",[19,173182,173183],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,173185,173186],{},"第三阶段：能封装逻辑。",[19,173188,173189],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,173191,173192],{},"第四阶段：能做小项目。",[19,173194,173195],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[343,173197,173198],{"id":173198},"参考资料",[38,173200,173201,173208,173215,173222],{},[41,173202,173203,173204],{},"黑马程序员 Python 入门教程推荐：",[640,173205,173206],{"href":173206,"rel":173207},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[24142],[41,173209,173210,173211],{},"Python 官方中文教程：",[640,173212,173213],{"href":173213,"rel":173214},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[24142],[41,173216,173217,173218],{},"Python 标准库文档：",[640,173219,173220],{"href":173220,"rel":173221},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[24142],[41,173223,173224,173225],{},"pyecharts 文档：",[640,173226,173227],{"href":173227,"rel":173228},"https:\u002F\u002Fpyecharts.org\u002F",[24142],{"title":316,"searchDepth":317,"depth":317,"links":173230},[173231,173232,173233],{"id":117271,"depth":317,"text":117271},{"id":173171,"depth":317,"text":173171},{"id":173198,"depth":317,"text":173198},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23656},"\u002Fwiki\u002F2024-10-10-python",{"title":173070,"description":173234},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331379004]