[{"data":1,"prerenderedAt":175616},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-01-27-linux-ji-ben-cao-zuo\u002Fch7-qi-ta-cao-zuo":3,"wiki-doc-nav":3420},{"id":4,"title":5,"body":6,"description":3413,"extension":3414,"meta":3415,"navigation":1412,"path":3416,"seo":3417,"stem":3418,"__hash__":3419},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":8,"toc":3387},"minimark",[9,13,18,22,30,318,321,394,397,401,406,412,415,418,421,426,429,432,435,441,444,449,452,455,460,463,468,471,475,480,483,488,491,507,510,513,525,528,537,540,543,552,555,564,567,570,579,582,585,604,607,610,619,624,627,630,639,642,651,654,663,666,675,680,683,691,696,699,708,711,719,724,727,736,739,742,746,749,754,757,762,777,782,787,798,803,809,814,829,834,837,842,847,852,860,865,872,877,888,893,896,900,903,906,911,914,936,941,944,953,958,961,985,988,1019,1022,1027,1030,1045,1050,1069,1072,1075,1080,1092,1097,1102,1105,1110,1113,1128,1131,1136,1141,1145,1150,1194,1197,1201,1207,1213,1218,1221,1228,1233,1240,1243,1246,1253,1268,1271,1334,1337,1352,1365,1368,1371,1374,1441,1444,1447,1450,1472,1475,1480,1487,1492,1495,1499,1504,1509,1513,1516,1519,1562,1567,1570,1592,1607,1609,1614,1626,1686,1688,1690,1744,1746,1748,1754,1759,1762,1767,1771,1774,1839,1844,1847,1849,1853,1865,1947,1949,1951,2005,2011,2013,2017,2022,2024,2029,2033,2054,2089,2093,2096,2099,2102,2111,2114,2127,2130,2145,2148,2167,2216,2219,2239,2242,2256,2262,2265,2274,2290,2302,2342,2347,2356,2361,2366,2393,2402,2406,2410,2415,2418,2422,2427,2432,2435,2440,2443,2448,2451,2456,2459,2463,2468,2471,2476,2479,2483,2488,2491,2496,2499,2504,2507,2511,2516,2519,2524,2527,2532,2535,2539,2544,2547,2552,2555,2560,2563,2568,2571,2576,2579,2584,2587,2591,2596,2599,2604,2611,2615,2620,2623,2628,2631,2635,2640,2643,2646,2649,2652,2655,2659,2662,2675,2680,2685,2708,2713,2718,2725,2729,2734,2737,2740,2745,2748,2751,2754,2757,2760,2763,2766,2769,2772,2775,2778,2781,2787,2793,2798,2803,2808,2813,2818,2821,2825,2828,2832,2837,2842,2847,2852,2856,2862,2870,2875,2878,2883,2898,2901,2906,2940,2955,2958,3013,3039,3051,3054,3063,3066,3081,3086,3089,3095,3100,3103,3108,3111,3116,3121,3128,3131,3146,3149,3186,3191,3199,3237,3240,3243,3248,3251,3256,3267,3301,3306,3309,3318,3323,3329,3332,3337,3346,3351,3354,3357,3362,3370,3373,3378,3383],[10,11,5],"h1",{"id":12},"_7-其他操作",[14,15,17],"h2",{"id":16},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,20,21],"p",{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,23,24,25,29],{},"进入工控机的硬盘目录，进入",[26,27,28],"code",{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[31,32,37],"pre",{"className":33,"code":34,"language":35,"meta":36,"style":36},"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","",[26,38,39,52,68,76,84,98,106,119,132,144,152,160,168,181,194,202,215,228,236,249,262,275,288,296,308],{"__ignoreMap":36},[40,41,44,48],"span",{"class":42,"line":43},"line",1,[40,45,47],{"class":46},"s9eBZ","network",[40,49,51],{"class":50},"sVt8B",": \n",[40,53,55,58,61,65],{"class":42,"line":54},2,[40,56,57],{"class":46},"  version",[40,59,60],{"class":50},": ",[40,62,64],{"class":63},"sj4cs","2",[40,66,67],{"class":50}," \n",[40,69,71,74],{"class":42,"line":70},3,[40,72,73],{"class":46},"  wifis",[40,75,51],{"class":50},[40,77,79,82],{"class":42,"line":78},4,[40,80,81],{"class":46},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[40,83,51],{"class":50},[40,85,87,90,92,96],{"class":42,"line":86},5,[40,88,89],{"class":46},"      renderer",[40,91,60],{"class":50},[40,93,95],{"class":94},"sZZnC","NetworkManager",[40,97,67],{"class":50},[40,99,101,104],{"class":42,"line":100},6,[40,102,103],{"class":46},"      match",[40,105,51],{"class":50},[40,107,109,112,114,117],{"class":42,"line":108},7,[40,110,111],{"class":46},"        name",[40,113,60],{"class":50},[40,115,116],{"class":94},"\"wlan0\"",[40,118,67],{"class":50},[40,120,122,125,127,130],{"class":42,"line":121},8,[40,123,124],{"class":46},"      dhcp4",[40,126,60],{"class":50},[40,128,129],{"class":63},"true",[40,131,67],{"class":50},[40,133,135,138,140,142],{"class":42,"line":134},9,[40,136,137],{"class":46},"      dhcp6",[40,139,60],{"class":50},[40,141,129],{"class":63},[40,143,67],{"class":50},[40,145,147,150],{"class":42,"line":146},10,[40,148,149],{"class":46},"      access-points",[40,151,51],{"class":50},[40,153,155,158],{"class":42,"line":154},11,[40,156,157],{"class":94},"        \"EMIS_Vinci_Robocon_5G\"",[40,159,51],{"class":50},[40,161,163,166],{"class":42,"line":162},12,[40,164,165],{"class":46},"          auth",[40,167,51],{"class":50},[40,169,171,174,176,179],{"class":42,"line":170},13,[40,172,173],{"class":46},"            key-management",[40,175,60],{"class":50},[40,177,178],{"class":94},"\"psk\"",[40,180,67],{"class":50},[40,182,184,187,189,192],{"class":42,"line":183},14,[40,185,186],{"class":46},"            password",[40,188,60],{"class":50},[40,190,191],{"class":94},"\"vinci666\"",[40,193,67],{"class":50},[40,195,197,200],{"class":42,"line":196},15,[40,198,199],{"class":46},"          networkmanager",[40,201,51],{"class":50},[40,203,205,208,210,213],{"class":42,"line":204},16,[40,206,207],{"class":46},"            uuid",[40,209,60],{"class":50},[40,211,212],{"class":94},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[40,214,67],{"class":50},[40,216,218,221,223,226],{"class":42,"line":217},17,[40,219,220],{"class":46},"            name",[40,222,60],{"class":50},[40,224,225],{"class":94},"\"EMIS_Vinci_Robocon_5G\"",[40,227,67],{"class":50},[40,229,231,234],{"class":42,"line":230},18,[40,232,233],{"class":46},"            passthrough",[40,235,51],{"class":50},[40,237,239,242,244,247],{"class":42,"line":238},19,[40,240,241],{"class":46},"              wifi-security.auth-alg",[40,243,60],{"class":50},[40,245,246],{"class":94},"\"open\"",[40,248,67],{"class":50},[40,250,252,255,257,260],{"class":42,"line":251},20,[40,253,254],{"class":46},"              ipv6.addr-gen-mode",[40,256,60],{"class":50},[40,258,259],{"class":94},"\"default\"",[40,261,67],{"class":50},[40,263,265,268,270,273],{"class":42,"line":264},21,[40,266,267],{"class":46},"              ipv6.ip6-privacy",[40,269,60],{"class":50},[40,271,272],{"class":94},"\"-1\"",[40,274,67],{"class":50},[40,276,278,281,283,286],{"class":42,"line":277},22,[40,279,280],{"class":46},"              proxy._",[40,282,60],{"class":50},[40,284,285],{"class":94},"\"\"",[40,287,67],{"class":50},[40,289,291,294],{"class":42,"line":290},23,[40,292,293],{"class":46},"      networkmanager",[40,295,51],{"class":50},[40,297,299,302,304,306],{"class":42,"line":298},24,[40,300,301],{"class":46},"        uuid",[40,303,60],{"class":50},[40,305,212],{"class":94},[40,307,67],{"class":50},[40,309,311,313,315],{"class":42,"line":310},25,[40,312,111],{"class":46},[40,314,60],{"class":50},[40,316,317],{"class":94},"\"EMIS_Vinci_Robocon_5G\"\n",[19,319,320],{},"将其改为新wifi的名和密码：",[31,322,324],{"className":33,"code":323,"language":35,"meta":36,"style":36},"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",[26,325,326,333,342,348,355,364,372,378,384],{"__ignoreMap":36},[40,327,328,330],{"class":42,"line":43},[40,329,47],{"class":46},[40,331,332],{"class":50},":\n",[40,334,335,337,339],{"class":42,"line":54},[40,336,57],{"class":46},[40,338,60],{"class":50},[40,340,341],{"class":63},"2\n",[40,343,344,346],{"class":42,"line":70},[40,345,73],{"class":46},[40,347,332],{"class":50},[40,349,350,353],{"class":42,"line":78},[40,351,352],{"class":46},"    wlan0",[40,354,332],{"class":50},[40,356,357,359,361],{"class":42,"line":86},[40,358,124],{"class":46},[40,360,60],{"class":50},[40,362,363],{"class":63},"true\n",[40,365,366,368,370],{"class":42,"line":100},[40,367,137],{"class":46},[40,369,60],{"class":50},[40,371,363],{"class":63},[40,373,374,376],{"class":42,"line":108},[40,375,149],{"class":46},[40,377,332],{"class":50},[40,379,380,382],{"class":42,"line":121},[40,381,157],{"class":94},[40,383,332],{"class":50},[40,385,386,389,391],{"class":42,"line":134},[40,387,388],{"class":46},"          password",[40,390,60],{"class":50},[40,392,393],{"class":94},"\"vinci666\"\n",[19,395,396],{},"工控机开机即可连上网。",[14,398,400],{"id":399},"_72-ssh远程开发","7.2 SSH远程开发",[402,403,405],"h3",{"id":404},"_721-环境准备","7.2.1 环境准备",[19,407,408],{},[409,410,411],"strong",{},"1.硬件准备",[19,413,414],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,416,417],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,419,420],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,422,423],{},[409,424,425],{},"2.设置固定IP",[19,427,428],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,430,431],{},"1.进入设置界面",[19,433,434],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,436,437],{},[438,439],"img",{"alt":36,"src":440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,442,443],{},"2.配置所连接的网络",[19,445,446],{},[438,447],{"alt":36,"src":448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,450,451],{},"3.设置固定IP",[19,453,454],{},"查看当前IP地址。",[19,456,457],{},[438,458],{"alt":36,"src":459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,461,462],{},"设置固定IP。",[19,464,465],{},[438,466],{"alt":36,"src":467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,469,470],{},"至此，IP配置完毕。",[402,472,474],{"id":473},"_722-环境搭建","7.2.2 环境搭建",[19,476,477],{},[409,478,479],{},"概念",[19,481,482],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,484,485],{},[409,486,487],{},"实现",[19,489,490],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[492,493,494,498,501,504],"ol",{},[495,496,497],"li",{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[495,499,500],{},"远程主机启动SSH服务；",[495,502,503],{},"本地主机登陆远程主机；",[495,505,506],{},"实现数据传输。",[19,508,509],{},"1.安装SSH客户端与服务端",[19,511,512],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[31,514,519],{"className":515,"code":516,"language":517,"meta":518,"style":36},"language-Plain shiki shiki-themes github-light github-dark"," sudo apt install openssh-server\n","Plain","Text",[26,520,521],{"__ignoreMap":36},[40,522,523],{"class":42,"line":43},[40,524,516],{},[19,526,527],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[31,529,531],{"className":515,"code":530,"language":517,"meta":518,"style":36},"sudo apt install openssh-client\n",[26,532,533],{"__ignoreMap":36},[40,534,535],{"class":42,"line":43},[40,536,530],{},[19,538,539],{},"2.远程主机启动SSH服务",[19,541,542],{},"远程主机启动 ssh 服务命令如下：",[31,544,546],{"className":515,"code":545,"language":517,"meta":518,"style":36},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[26,547,548],{"__ignoreMap":36},[40,549,550],{"class":42,"line":43},[40,551,545],{},[19,553,554],{},"启动后可使用如下命令查看服务是否正常运行：",[31,556,558],{"className":515,"code":557,"language":517,"meta":518,"style":36},"ps -e | grep ssh\n",[26,559,560],{"__ignoreMap":36},[40,561,562],{"class":42,"line":43},[40,563,557],{},[19,565,566],{},"如果启动成功，会包含 sshd 程序。",[19,568,569],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[31,571,573],{"className":515,"code":572,"language":517,"meta":518,"style":36},"sudo systemctl enable ssh\n",[26,574,575],{"__ignoreMap":36},[40,576,577],{"class":42,"line":43},[40,578,572],{},[19,580,581],{},"3.本地远程登录",[19,583,584],{},"登录远程主机可以调用如下命令:",[31,586,590],{"className":587,"code":588,"language":589,"meta":36,"style":36},"language-Bash shiki shiki-themes github-light github-dark","ssh -X 用户名@ip地址\n","Bash",[26,591,592],{"__ignoreMap":36},[40,593,594,598,601],{"class":42,"line":43},[40,595,597],{"class":596},"sScJk","ssh",[40,599,600],{"class":63}," -X",[40,602,603],{"class":94}," 用户名@ip地址\n",[19,605,606],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,608,609],{},"如果退出，可以调用exit命令：",[31,611,613],{"className":515,"code":612,"language":517,"meta":518,"style":36},"exit\n",[26,614,615],{"__ignoreMap":36},[40,616,617],{"class":42,"line":43},[40,618,612],{},[19,620,621],{},[409,622,623],{},"4.实现数据传输",[19,625,626],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,628,629],{},"上传文件指令格式如下：",[31,631,633],{"className":515,"code":632,"language":517,"meta":518,"style":36},"scp 本地文件路径 账号@ip:路径\n",[26,634,635],{"__ignoreMap":36},[40,636,637],{"class":42,"line":43},[40,638,632],{},[19,640,641],{},"上传文件夹指令格式如下：",[31,643,645],{"className":515,"code":644,"language":517,"meta":518,"style":36},"scp -r 本地文件夹路径 账号@ip:路径\n",[26,646,647],{"__ignoreMap":36},[40,648,649],{"class":42,"line":43},[40,650,644],{},[19,652,653],{},"下载文件指令格式如下：",[31,655,657],{"className":515,"code":656,"language":517,"meta":518,"style":36},"scp 账号@ip:路径 本地文件夹路径\n",[26,658,659],{"__ignoreMap":36},[40,660,661],{"class":42,"line":43},[40,662,656],{},[19,664,665],{},"下载文件夹指令格式如下：",[31,667,669],{"className":515,"code":668,"language":517,"meta":518,"style":36},"scp -r 账号@ip:路径 本地文件夹路径\n",[26,670,671],{"__ignoreMap":36},[40,672,673],{"class":42,"line":43},[40,674,668],{},[19,676,677],{},[409,678,679],{},"优化",[19,681,682],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[492,684,685,688],{},[495,686,687],{},"本地生成密钥对；",[495,689,690],{},"将公钥上传至远程主机。",[19,692,693],{},[409,694,695],{},"1.生成密钥对",[19,697,698],{},"本地客户端生成公私钥：（一路回车默认即可）",[31,700,702],{"className":515,"code":701,"language":517,"meta":518,"style":36},"ssh-keygen\n",[26,703,704],{"__ignoreMap":36},[40,705,706],{"class":42,"line":43},[40,707,701],{},[19,709,710],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[492,712,713,716],{},[495,714,715],{},"id_rsa （私钥）；",[495,717,718],{},"id_rsa.pub (公钥)。",[19,720,721],{},[409,722,723],{},"2.公钥上传",[19,725,726],{},"上传指令如下：",[31,728,730],{"className":515,"code":729,"language":517,"meta":518,"style":36},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[26,731,732],{"__ignoreMap":36},[40,733,734],{"class":42,"line":43},[40,735,729],{},[19,737,738],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,740,741],{},"以后再远程登录就无需录入密码了。",[402,743,745],{"id":744},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,747,748],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,750,751],{},[409,752,753],{},"1.准备工作",[19,755,756],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,758,759],{},[409,760,761],{},"2.为VScode安装远程开发插件",[19,763,764,765,768,769,772,773,776],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[26,766,767],{},"扩展：商店","的搜索栏输入",[26,770,771],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[26,774,775],{},"安装","。",[19,778,779],{},[438,780],{"alt":36,"src":781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,783,784],{},[409,785,786],{},"3.配置远程连接",[19,788,789,790,793,794,797],{},"步骤1：使用快捷键",[26,791,792],{},"ctrl + shift + p","打开命令输入窗口，并输入",[26,795,796],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,799,800],{},[438,801],{"alt":36,"src":802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,804,805,806,776],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[26,807,808],{},"Add New SSH Host",[19,810,811],{},[438,812],{"alt":36,"src":813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,815,816,817,820,821,824,825,828],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[26,818,819],{},"ssh +X ubuntu@192.168.43.164","，其中，",[26,822,823],{},"ubuntu","需要替换为你的登录用户名，",[26,826,827],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,830,831],{},[438,832],{"alt":36,"src":833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,835,836],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,838,839],{},[438,840],{"alt":36,"src":841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,843,844],{},[438,845],{"alt":36,"src":846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,848,849],{},[409,850,851],{},"4.使用",[19,853,854,855,793,857,859],{},"步骤1：继续使用快捷键",[26,856,792],{},[26,858,796],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,861,862],{},[438,863],{"alt":36,"src":864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,866,867,868,871],{},"或者，也可以点击侧边栏的",[26,869,870],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,873,874],{},[438,875],{"alt":36,"src":876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,878,879,880,883,884,887],{},"步骤2：选择菜单栏的",[26,881,882],{},"文件","下的",[26,885,886],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,889,890],{},[438,891],{"alt":36,"src":892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,894,895],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,897,899],{"id":898},"_73-远程桌面","7.3 远程桌面",[19,901,902],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,904,905],{},"我们选择使用VNC来看。",[492,907,908],{},[495,909,910],{},"安装VNC服务器：",[19,912,913],{},"这里以TigerVNC为例进行安装：",[31,915,917],{"className":587,"code":916,"language":589,"meta":36,"style":36},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[26,918,919],{"__ignoreMap":36},[40,920,921,924,927,930,933],{"class":42,"line":43},[40,922,923],{"class":596},"sudo",[40,925,926],{"class":94}," apt",[40,928,929],{"class":94}," install",[40,931,932],{"class":94}," tigervnc-standalone-server",[40,934,935],{"class":94}," tigervnc-common\n",[492,937,938],{"start":54},[495,939,940],{},"设置VNC密码：",[19,942,943],{},"为VNC用户设置密码，运行以下命令：",[31,945,947],{"className":587,"code":946,"language":589,"meta":36,"style":36},"vncpasswd\n",[26,948,949],{"__ignoreMap":36},[40,950,951],{"class":42,"line":43},[40,952,946],{"class":596},[492,954,955],{"start":70},[495,956,957],{},"配置VNC启动脚本:",[19,959,960],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[31,962,964],{"className":587,"code":963,"language":589,"meta":36,"style":36},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[26,965,966,977],{"__ignoreMap":36},[40,967,968,971,974],{"class":42,"line":43},[40,969,970],{"class":596},"mkdir",[40,972,973],{"class":63}," -p",[40,975,976],{"class":94}," ~\u002F.vnc\n",[40,978,979,982],{"class":42,"line":54},[40,980,981],{"class":596},"nano",[40,983,984],{"class":94}," ~\u002F.vnc\u002Fxstartup\n",[19,986,987],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[31,989,991],{"className":587,"code":990,"language":589,"meta":36,"style":36},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[26,992,993,999,1007,1014],{"__ignoreMap":36},[40,994,995],{"class":42,"line":43},[40,996,998],{"class":997},"sJ8bj","#!\u002Fbin\u002Fsh\n",[40,1000,1001,1004],{"class":42,"line":54},[40,1002,1003],{"class":63},"unset",[40,1005,1006],{"class":94}," SESSION_MANAGER\n",[40,1008,1009,1011],{"class":42,"line":70},[40,1010,1003],{"class":63},[40,1012,1013],{"class":94}," DBUS_SESSION_BUS_ADDRESS\n",[40,1015,1016],{"class":42,"line":78},[40,1017,1018],{"class":596},"gnome-session\n",[19,1020,1021],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[492,1023,1024],{"start":78},[495,1025,1026],{},"给予执行权限：",[19,1028,1029],{},"为xstartup文件设置执行权限：",[31,1031,1033],{"className":587,"code":1032,"language":589,"meta":36,"style":36},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[26,1034,1035],{"__ignoreMap":36},[40,1036,1037,1040,1043],{"class":42,"line":43},[40,1038,1039],{"class":596},"chmod",[40,1041,1042],{"class":94}," +x",[40,1044,984],{"class":94},[492,1046,1047],{"start":86},[495,1048,1049],{},"启动VNC服务器：",[31,1051,1053],{"className":587,"code":1052,"language":589,"meta":36,"style":36},"vncserver -geometry 1920x1080 -localhost=0\n",[26,1054,1055],{"__ignoreMap":36},[40,1056,1057,1060,1063,1066],{"class":42,"line":43},[40,1058,1059],{"class":596},"vncserver",[40,1061,1062],{"class":63}," -geometry",[40,1064,1065],{"class":94}," 1920x1080",[40,1067,1068],{"class":63}," -localhost=0\n",[19,1070,1071],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,1073,1074],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[492,1076,1077],{"start":100},[495,1078,1079],{},"查看已开启的VNC服务器：",[31,1081,1083],{"className":587,"code":1082,"language":589,"meta":36,"style":36},"vncserver -list\n",[26,1084,1085],{"__ignoreMap":36},[40,1086,1087,1089],{"class":42,"line":43},[40,1088,1059],{"class":596},[40,1090,1091],{"class":63}," -list\n",[19,1093,1094],{},[438,1095],{"alt":36,"src":1096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[492,1098,1099],{"start":108},[495,1100,1101],{},"连接到VNC服务器：",[19,1103,1104],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[492,1106,1107],{"start":121},[495,1108,1109],{},"停止VNC服务器：",[19,1111,1112],{},"如果需要停止VNC服务器，可以使用以下命令：",[31,1114,1116],{"className":587,"code":1115,"language":589,"meta":36,"style":36},"vncserver -kill :1\n",[26,1117,1118],{"__ignoreMap":36},[40,1119,1120,1122,1125],{"class":42,"line":43},[40,1121,1059],{"class":596},[40,1123,1124],{"class":63}," -kill",[40,1126,1127],{"class":94}," :1\n",[19,1129,1130],{},"将:1替换为你实际使用的显示编号。",[19,1132,1133],{},[438,1134],{"alt":36,"src":1135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,1137,1138],{},[438,1139],{"alt":36,"src":1140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,1142,1144],{"id":1143},"_74-usb端口设置","7.4 USB端口设置",[19,1146,1147],{},[409,1148,1149],{},"首先先配置好权限",[31,1151,1153],{"className":587,"code":1152,"language":589,"meta":36,"style":36},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[26,1154,1155,1160,1176,1184,1189],{"__ignoreMap":36},[40,1156,1157],{"class":42,"line":43},[40,1158,1159],{"class":997},"# 将用户权限提高\n",[40,1161,1162,1164,1167,1170,1173],{"class":42,"line":54},[40,1163,923],{"class":596},[40,1165,1166],{"class":94}," usermod",[40,1168,1169],{"class":63}," -aG",[40,1171,1172],{"class":94}," dialout",[40,1174,1175],{"class":50}," $USER\n",[40,1177,1178,1181],{"class":42,"line":70},[40,1179,1180],{"class":596},"newgrp",[40,1182,1183],{"class":94}," dialout\n",[40,1185,1186],{"class":42,"line":78},[40,1187,1188],{"class":997},"# 查看下面命令是否输出dialout（若输出才正常）\n",[40,1190,1191],{"class":42,"line":86},[40,1192,1193],{"class":596},"groups\n",[19,1195,1196],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[402,1198,1200],{"id":1199},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,1202,1203,1206],{},[409,1204,1205],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,1208,1209,1212],{},[409,1210,1211],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,1214,1215],{},[409,1216,1217],{},"流程如下：",[19,1219,1220],{},"（1）.查找设备idVendor和idProduct",[19,1222,1223,1224,1227],{},"接入两个USB设备，在终端调用指令",[26,1225,1226],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,1229,1230],{},[438,1231],{"alt":36,"src":1232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,1234,1235,1236,1239],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[26,1237,1238],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,1241,1242],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,1244,1245],{},"（2）.编写映射规则",[19,1247,1248,1249,1252],{},"在",[26,1250,1251],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[31,1254,1256],{"className":587,"code":1255,"language":589,"meta":36,"style":36},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[26,1257,1258],{"__ignoreMap":36},[40,1259,1260,1262,1265],{"class":42,"line":43},[40,1261,923],{"class":596},[40,1263,1264],{"class":94}," vim",[40,1266,1267],{"class":94}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,1269,1270],{},"输入如下内容：",[31,1272,1274],{"className":587,"code":1273,"language":589,"meta":36,"style":36},"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",[26,1275,1276,1309],{"__ignoreMap":36},[40,1277,1278,1281,1285,1288,1291,1294,1297,1300,1303,1306],{"class":42,"line":43},[40,1279,1280],{"class":50},"KERNEL",[40,1282,1284],{"class":1283},"szBVR","=",[40,1286,1287],{"class":94},"=\"ttyUSB*\",",[40,1289,1290],{"class":596}," ATTRS",[40,1292,1293],{"class":94},"{idVendor}==",[40,1295,1296],{"class":596},"\"10c4\"",[40,1298,1299],{"class":596},",",[40,1301,1302],{"class":94}," ATTRS{idProduct}==\"ea60\",",[40,1304,1305],{"class":94}," MODE:=\"0777\",",[40,1307,1308],{"class":94}," SYMLINK+=\"mylidar\"\n",[40,1310,1311,1313,1315,1317,1319,1321,1324,1326,1329,1331],{"class":42,"line":54},[40,1312,1280],{"class":50},[40,1314,1284],{"class":1283},[40,1316,1287],{"class":94},[40,1318,1290],{"class":596},[40,1320,1293],{"class":94},[40,1322,1323],{"class":596},"\"1a86\"",[40,1325,1299],{"class":596},[40,1327,1328],{"class":94}," ATTRS{idProduct}==\"7523\",",[40,1330,1305],{"class":94},[40,1332,1333],{"class":94}," SYMLINK+=\"mycar\"\n",[19,1335,1336],{},"代码解释：",[1338,1339,1340,1343,1346,1349],"ul",{},[495,1341,1342],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[495,1344,1345],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[495,1347,1348],{},"SYMLINK是符号连接，即绑定的别名；",[495,1350,1351],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,1353,1354,1355,1359,1362],{},"***小提示：***",[1356,1357,1358],"em",{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[26,1360,1361],{},"\u002Fetc\u002Fudev\u002Frule.d",[1356,1363,1364],{},"目录即可。",[19,1366,1367],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,1369,1370],{},"（3）.使规则生效",[19,1372,1373],{},"在终端下输入如下指令：",[31,1375,1377],{"className":587,"code":1376,"language":589,"meta":36,"style":36},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[26,1378,1379,1384,1397,1408,1414,1419,1432],{"__ignoreMap":36},[40,1380,1381],{"class":42,"line":43},[40,1382,1383],{"class":997},"# Ubuntu用下方命令\n",[40,1385,1386,1388,1391,1394],{"class":42,"line":54},[40,1387,923],{"class":596},[40,1389,1390],{"class":94}," service",[40,1392,1393],{"class":94}," udev",[40,1395,1396],{"class":94}," reload\n",[40,1398,1399,1401,1403,1405],{"class":42,"line":70},[40,1400,923],{"class":596},[40,1402,1390],{"class":94},[40,1404,1393],{"class":94},[40,1406,1407],{"class":94}," restart\n",[40,1409,1410],{"class":42,"line":78},[40,1411,1413],{"emptyLinePlaceholder":1412},true,"\n",[40,1415,1416],{"class":42,"line":86},[40,1417,1418],{"class":997},"#Fedora用下方命令\n",[40,1420,1421,1423,1426,1429],{"class":42,"line":100},[40,1422,923],{"class":596},[40,1424,1425],{"class":94}," udevadm",[40,1427,1428],{"class":94}," control",[40,1430,1431],{"class":63}," --reload\n",[40,1433,1434,1436,1438],{"class":42,"line":108},[40,1435,923],{"class":596},[40,1437,1425],{"class":94},[40,1439,1440],{"class":94}," trigger\n",[19,1442,1443],{},"再重新插拔设备即可。",[19,1445,1446],{},"（4）.测试",[19,1448,1449],{},"终端下输入如下指令",[31,1451,1453],{"className":587,"code":1452,"language":589,"meta":36,"style":36},"ll \u002Fdev | grep ttyUSB\n",[26,1454,1455],{"__ignoreMap":36},[40,1456,1457,1460,1463,1466,1469],{"class":42,"line":43},[40,1458,1459],{"class":596},"ll",[40,1461,1462],{"class":94}," \u002Fdev",[40,1464,1465],{"class":1283}," |",[40,1467,1468],{"class":596}," grep",[40,1470,1471],{"class":94}," ttyUSB\n",[19,1473,1474],{},"运行结果如下：",[19,1476,1477],{},[438,1478],{"alt":36,"src":1479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,1481,1482,1483,1486],{},"也可以多次插拔USB设备，会发现设备端口",[26,1484,1485],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,1488,1489],{},[409,1490,1491],{},"缺点：",[19,1493,1494],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[402,1496,1498],{"id":1497},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,1500,1501,1503],{},[409,1502,1205],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,1505,1506,1508],{},[409,1507,1211],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,1510,1511],{},[409,1512,1217],{},[19,1514,1515],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,1517,1518],{},"调用如下指令查看第一台雷达的USB信息：",[31,1520,1522],{"className":587,"code":1521,"language":589,"meta":36,"style":36},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[26,1523,1524,1545],{"__ignoreMap":36},[40,1525,1526,1529,1532,1535,1538,1540,1542],{"class":42,"line":43},[40,1527,1528],{"class":596},"udevadm",[40,1530,1531],{"class":94}," info",[40,1533,1534],{"class":63}," --attribute-walk",[40,1536,1537],{"class":63}," --name=\u002Fdev\u002FttyUSB0",[40,1539,1465],{"class":1283},[40,1541,1468],{"class":596},[40,1543,1544],{"class":94}," KERNELS\n",[40,1546,1547,1549,1551,1553,1556,1558,1560],{"class":42,"line":54},[40,1548,1528],{"class":596},[40,1550,1531],{"class":94},[40,1552,1534],{"class":63},[40,1554,1555],{"class":63}," --name=\u002Fdev\u002FttyACM0",[40,1557,1465],{"class":1283},[40,1559,1468],{"class":596},[40,1561,1544],{"class":94},[19,1563,1564],{},[438,1565],{"alt":36,"src":1566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,1568,1569],{},"调用如下指令查看第二台雷达的USB信息：",[31,1571,1573],{"className":587,"code":1572,"language":589,"meta":36,"style":36},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[26,1574,1575],{"__ignoreMap":36},[40,1576,1577,1579,1581,1583,1586,1588,1590],{"class":42,"line":43},[40,1578,1528],{"class":596},[40,1580,1531],{"class":94},[40,1582,1534],{"class":63},[40,1584,1585],{"class":63}," --name=\u002Fdev\u002FttyUSB1",[40,1587,1465],{"class":1283},[40,1589,1468],{"class":596},[40,1591,1544],{"class":94},[19,1593,1594,1595,1598,1599,1602,1603,1606],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[26,1596,1597],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[26,1600,1601],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[409,1604,1605],{},"唯一性标识","”。",[19,1608,1245],{},[19,1610,1248,1611,1613],{},[26,1612,1251],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[31,1615,1616],{"className":587,"code":1255,"language":589,"meta":36,"style":36},[26,1617,1618],{"__ignoreMap":36},[40,1619,1620,1622,1624],{"class":42,"line":43},[40,1621,923],{"class":596},[40,1623,1264],{"class":94},[40,1625,1267],{"class":94},[31,1627,1629],{"className":587,"code":1628,"language":589,"meta":36,"style":36},"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",[26,1630,1631,1660],{"__ignoreMap":36},[40,1632,1633,1635,1637,1639,1642,1644,1647,1650,1652,1655,1657],{"class":42,"line":43},[40,1634,1280],{"class":50},[40,1636,1284],{"class":1283},[40,1638,1287],{"class":94},[40,1640,1641],{"class":50}," KERNELS",[40,1643,1284],{"class":1283},[40,1645,1646],{"class":94},"=\"1-1.3:1.0\",",[40,1648,1649],{"class":596}," MODE:",[40,1651,1284],{"class":94},[40,1653,1654],{"class":596},"\"0777\"",[40,1656,1299],{"class":596},[40,1658,1659],{"class":94}," SYMLINK+=\"rplidar_front\"\n",[40,1661,1662,1664,1666,1668,1670,1672,1675,1677,1679,1681,1683],{"class":42,"line":54},[40,1663,1280],{"class":50},[40,1665,1284],{"class":1283},[40,1667,1287],{"class":94},[40,1669,1641],{"class":50},[40,1671,1284],{"class":1283},[40,1673,1674],{"class":94},"=\"1-1.4:1.0\",",[40,1676,1649],{"class":596},[40,1678,1284],{"class":94},[40,1680,1654],{"class":596},[40,1682,1299],{"class":596},[40,1684,1685],{"class":94}," SYMLINK+=\"rplidar_back\"\n",[19,1687,1370],{},[19,1689,1373],{},[31,1691,1692],{"className":587,"code":1376,"language":589,"meta":36,"style":36},[26,1693,1694,1698,1708,1718,1722,1726,1736],{"__ignoreMap":36},[40,1695,1696],{"class":42,"line":43},[40,1697,1383],{"class":997},[40,1699,1700,1702,1704,1706],{"class":42,"line":54},[40,1701,923],{"class":596},[40,1703,1390],{"class":94},[40,1705,1393],{"class":94},[40,1707,1396],{"class":94},[40,1709,1710,1712,1714,1716],{"class":42,"line":70},[40,1711,923],{"class":596},[40,1713,1390],{"class":94},[40,1715,1393],{"class":94},[40,1717,1407],{"class":94},[40,1719,1720],{"class":42,"line":78},[40,1721,1413],{"emptyLinePlaceholder":1412},[40,1723,1724],{"class":42,"line":86},[40,1725,1418],{"class":997},[40,1727,1728,1730,1732,1734],{"class":42,"line":100},[40,1729,923],{"class":596},[40,1731,1425],{"class":94},[40,1733,1428],{"class":94},[40,1735,1431],{"class":63},[40,1737,1738,1740,1742],{"class":42,"line":108},[40,1739,923],{"class":596},[40,1741,1425],{"class":94},[40,1743,1440],{"class":94},[19,1745,1443],{},[19,1747,1446],{},[19,1749,1449,1750,1753],{},[26,1751,1752],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,1755,1756],{},[438,1757],{"alt":36,"src":1758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,1760,1761],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,1763,1764,1766],{},[409,1765,1491],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[402,1768,1770],{"id":1769},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,1772,1773],{},"（1）.查看所连接的主机USB接口的信息",[31,1775,1777],{"className":587,"code":1776,"language":589,"meta":36,"style":36},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[26,1778,1779,1812],{"__ignoreMap":36},[40,1780,1781,1783,1785,1788,1790,1793,1795,1797,1800,1803,1806,1809],{"class":42,"line":43},[40,1782,1528],{"class":596},[40,1784,1531],{"class":94},[40,1786,1787],{"class":63}," -a",[40,1789,973],{"class":63},[40,1791,1792],{"class":50}," $(",[40,1794,1528],{"class":596},[40,1796,1531],{"class":94},[40,1798,1799],{"class":63}," -q",[40,1801,1802],{"class":94}," path",[40,1804,1805],{"class":63}," -n",[40,1807,1808],{"class":94}," \u002Fdev\u002FttyACM0",[40,1810,1811],{"class":50},")\n",[40,1813,1814,1816,1818,1820,1822,1824,1826,1828,1830,1832,1834,1837],{"class":42,"line":54},[40,1815,1528],{"class":596},[40,1817,1531],{"class":94},[40,1819,1787],{"class":63},[40,1821,973],{"class":63},[40,1823,1792],{"class":50},[40,1825,1528],{"class":596},[40,1827,1531],{"class":94},[40,1829,1799],{"class":63},[40,1831,1802],{"class":94},[40,1833,1805],{"class":63},[40,1835,1836],{"class":94}," \u002Fdev\u002FttyUSB0",[40,1838,1811],{"class":50},[19,1840,1841],{},[438,1842],{"alt":36,"src":1843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,1845,1846],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,1848,1245],{},[19,1850,1248,1851,1613],{},[26,1852,1251],{},[31,1854,1855],{"className":587,"code":1255,"language":589,"meta":36,"style":36},[26,1856,1857],{"__ignoreMap":36},[40,1858,1859,1861,1863],{"class":42,"line":43},[40,1860,923],{"class":596},[40,1862,1264],{"class":94},[40,1864,1267],{"class":94},[31,1866,1868],{"className":587,"code":1867,"language":589,"meta":36,"style":36},"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",[26,1869,1870,1898,1924],{"__ignoreMap":36},[40,1871,1872,1874,1876,1879,1881,1883,1885,1887,1890,1893,1895],{"class":42,"line":43},[40,1873,1280],{"class":50},[40,1875,1284],{"class":1283},[40,1877,1878],{"class":94},"=\"ttyACM*\",",[40,1880,1290],{"class":596},[40,1882,1293],{"class":94},[40,1884,1323],{"class":596},[40,1886,1299],{"class":596},[40,1888,1889],{"class":94}," ATTRS{idProduct}==\"55d4\",",[40,1891,1892],{"class":94}," ATTRS{serial}==\"0001\",",[40,1894,1305],{"class":94},[40,1896,1897],{"class":94}," SYMLINK+=\"ttyACM_MCU\"\n",[40,1899,1900,1902,1904,1906,1908,1910,1912,1914,1916,1919,1921],{"class":42,"line":54},[40,1901,1280],{"class":50},[40,1903,1284],{"class":1283},[40,1905,1878],{"class":94},[40,1907,1290],{"class":596},[40,1909,1293],{"class":94},[40,1911,1323],{"class":596},[40,1913,1299],{"class":596},[40,1915,1889],{"class":94},[40,1917,1918],{"class":94}," ATTRS{serial}==\"0002\",",[40,1920,1305],{"class":94},[40,1922,1923],{"class":94}," SYMLINK+=\"ttyACM_Lidar\"\n",[40,1925,1926,1928,1930,1932,1934,1936,1938,1940,1942,1944],{"class":42,"line":70},[40,1927,1280],{"class":50},[40,1929,1284],{"class":1283},[40,1931,1287],{"class":94},[40,1933,1290],{"class":596},[40,1935,1293],{"class":94},[40,1937,1323],{"class":596},[40,1939,1299],{"class":596},[40,1941,1328],{"class":94},[40,1943,1305],{"class":94},[40,1945,1946],{"class":94}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,1948,1370],{},[19,1950,1373],{},[31,1952,1953],{"className":587,"code":1376,"language":589,"meta":36,"style":36},[26,1954,1955,1959,1969,1979,1983,1987,1997],{"__ignoreMap":36},[40,1956,1957],{"class":42,"line":43},[40,1958,1383],{"class":997},[40,1960,1961,1963,1965,1967],{"class":42,"line":54},[40,1962,923],{"class":596},[40,1964,1390],{"class":94},[40,1966,1393],{"class":94},[40,1968,1396],{"class":94},[40,1970,1971,1973,1975,1977],{"class":42,"line":70},[40,1972,923],{"class":596},[40,1974,1390],{"class":94},[40,1976,1393],{"class":94},[40,1978,1407],{"class":94},[40,1980,1981],{"class":42,"line":78},[40,1982,1413],{"emptyLinePlaceholder":1412},[40,1984,1985],{"class":42,"line":86},[40,1986,1418],{"class":997},[40,1988,1989,1991,1993,1995],{"class":42,"line":100},[40,1990,923],{"class":596},[40,1992,1425],{"class":94},[40,1994,1428],{"class":94},[40,1996,1431],{"class":63},[40,1998,1999,2001,2003],{"class":42,"line":108},[40,2000,923],{"class":596},[40,2002,1425],{"class":94},[40,2004,1440],{"class":94},[19,2006,2007,2008],{},"再重新插拔设备即可，或者 ",[409,2009,2010],{},"直接重启系统。",[19,2012,1446],{},[19,2014,1449,2015,1753],{},[26,2016,1752],{},[19,2018,2019],{},[438,2020],{"alt":36,"src":2021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,2023,1761],{},[19,2025,2026,2028],{},[409,2027,1491],{}," 一些设备可能没有串口号等。",[402,2030,2032],{"id":2031},"_744-其他注意事项","7.4.4 其他注意事项",[19,2034,2035,2036,2038,2039,2042,2043,2046,2047,2050,2051,2053],{},"并非所有的USB设备端口号都是",[26,2037,1485],{},"的格式，比如Arduino的端口号可能是",[26,2040,2041],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[26,2044,2045],{},"videon","和",[26,2048,2049],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[26,2052,2045],{},"端口，绑定时需要关联的也是该接口。",[19,2055,2056,2057,2060,2061,2064,2065,2067,2068,2071,2072,2075,2076,2079,2080,2079,2083,2079,2086,776],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[26,2058,2059],{},"KERNEL==\"ttyUSB*\"","修改为",[26,2062,2063],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[26,2066,2059],{},"修改为类似于",[26,2069,2070],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[26,2073,2074],{},"video[0,2,4,6]","表示可以绑定的端口为",[26,2077,2078],{},"video0","或",[26,2081,2082],{},"video2",[26,2084,2085],{},"video4",[26,2087,2088],{},"video6",[14,2090,2092],{"id":2091},"_75-挂载内网网页","7.5 挂载内网网页",[19,2094,2095],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,2097,2098],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,2100,2101],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,2103,2104,2105],{},"Termux 下载地址（F-Droid）：",[2106,2107,2108],"a",{"href":2108,"rel":2109},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[2110],"nofollow",[19,2112,2113],{},"首先打开app后，先更新软件缓存：",[31,2115,2117],{"className":587,"code":2116,"language":589,"meta":36,"style":36},"pkg update\n",[26,2118,2119],{"__ignoreMap":36},[40,2120,2121,2124],{"class":42,"line":43},[40,2122,2123],{"class":596},"pkg",[40,2125,2126],{"class":94}," update\n",[19,2128,2129],{},"然后换源",[31,2131,2133],{"className":587,"code":2132,"language":589,"meta":36,"style":36},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[26,2134,2135],{"__ignoreMap":36},[40,2136,2137,2139,2142],{"class":42,"line":43},[40,2138,981],{"class":596},[40,2140,2141],{"class":50}," $PREFIX",[40,2143,2144],{"class":94},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,2146,2147],{},"将该文件内容替换为下面：",[31,2149,2151],{"className":587,"code":2150,"language":589,"meta":36,"style":36},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[26,2152,2153],{"__ignoreMap":36},[40,2154,2155,2158,2161,2164],{"class":42,"line":43},[40,2156,2157],{"class":596},"deb",[40,2159,2160],{"class":94}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[40,2162,2163],{"class":94}," stable",[40,2165,2166],{"class":94}," main\n",[1338,2168,2169,2196],{},[495,2170,2171,2172,2174,2175],{},"如果你使用的是",[26,2173,981],{},"编辑器：",[1338,2176,2177,2184,2190],{},[495,2178,2179,2180,2183],{},"按 ",[26,2181,2182],{},"Ctrl+O"," 保存文件。",[495,2185,2179,2186,2189],{},[26,2187,2188],{},"Enter"," 确认文件名。",[495,2191,2179,2192,2195],{},[26,2193,2194],{},"Ctrl+X"," 退出编辑器。",[495,2197,2171,2198,2174,2201],{},[26,2199,2200],{},"vim",[1338,2202,2203,2209],{},[495,2204,2179,2205,2208],{},[26,2206,2207],{},"Esc"," 退出编辑模式。",[495,2210,2211,2212,2215],{},"输入 ",[26,2213,2214],{},":wq"," 保存并退出。",[19,2217,2218],{},"接下来重新更新软件源：",[31,2220,2222],{"className":587,"code":2221,"language":589,"meta":36,"style":36},"pkg update && pkg upgrade\n",[26,2223,2224],{"__ignoreMap":36},[40,2225,2226,2228,2231,2234,2236],{"class":42,"line":43},[40,2227,2123],{"class":596},[40,2229,2230],{"class":94}," update",[40,2232,2233],{"class":50}," && ",[40,2235,2123],{"class":596},[40,2237,2238],{"class":94}," upgrade\n",[19,2240,2241],{},"安装python：",[31,2243,2245],{"className":587,"code":2244,"language":589,"meta":36,"style":36},"pkg install python\n",[26,2246,2247],{"__ignoreMap":36},[40,2248,2249,2251,2253],{"class":42,"line":43},[40,2250,2123],{"class":596},[40,2252,929],{"class":94},[40,2254,2255],{"class":94}," python\n",[19,2257,2258,2261],{},[409,2259,2260],{},"通过Termux访问设备存储"," ：",[19,2263,2264],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[31,2266,2268],{"className":587,"code":2267,"language":589,"meta":36,"style":36},"termux-setup-storage\n",[26,2269,2270],{"__ignoreMap":36},[40,2271,2272],{"class":42,"line":43},[40,2273,2267],{"class":596},[492,2275,2276],{},[495,2277,2278,2261,2281],{},[409,2279,2280],{},"进入HTML文件所在的目录",[492,2282,2283],{},[495,2284,2285,2286,2289],{},"使用",[26,2287,2288],{},"cd","命令进入HTML文件所在的目录：",[31,2291,2293],{"className":587,"code":2292,"language":589,"meta":36,"style":36},"cd ~\u002Fyour_html_folder\n",[26,2294,2295],{"__ignoreMap":36},[40,2296,2297,2299],{"class":42,"line":43},[40,2298,2288],{"class":63},[40,2300,2301],{"class":94}," ~\u002Fyour_html_folder\n",[492,2303,2304],{"start":54},[495,2305,2306,2261,2309,2314,2333],{},[409,2307,2308],{},"启动Python HTTP服务器",[492,2310,2311],{},[495,2312,2313],{},"运行以下命令启动一个简单的HTTP服务器：",[31,2315,2317],{"className":587,"code":2316,"language":589,"meta":36,"style":36},"python -m http.server 8000\n",[26,2318,2319],{"__ignoreMap":36},[40,2320,2321,2324,2327,2330],{"class":42,"line":43},[40,2322,2323],{"class":596},"python",[40,2325,2326],{"class":63}," -m",[40,2328,2329],{"class":94}," http.server",[40,2331,2332],{"class":63}," 8000\n",[492,2334,2335],{"start":70},[495,2336,2337,2338,2341],{},"这会在端口",[26,2339,2340],{},"8000","上启动一个Web服务器。",[1338,2343,2344],{},[495,2345,2346],{},"启动服务器后，Termux会显示日志信息，例如：",[31,2348,2350],{"className":515,"code":2349,"language":517,"meta":518,"style":36},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[26,2351,2352],{"__ignoreMap":36},[40,2353,2354],{"class":42,"line":43},[40,2355,2349],{},[1338,2357,2358],{},[495,2359,2360],{},"这表示服务器已成功启动。",[19,2362,2363],{},[409,2364,2365],{},"在浏览器中访问HTML文件",[492,2367,2368],{},[495,2369,2370,2261,2373,2378],{},[409,2371,2372],{},"在同一设备上访问",[492,2374,2375],{},[495,2376,2377],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[31,2379,2383],{"className":2380,"code":2381,"language":2382,"meta":36,"style":36},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n","JSON",[26,2384,2385],{"__ignoreMap":36},[40,2386,2387,2390],{"class":42,"line":43},[40,2388,2389],{"class":50},"http:",[40,2391,2392],{"class":997},"\u002F\u002Flocalhost:8000\n",[1338,2394,2395],{},[495,2396,2397,2398,2401],{},"如果HTML文件中有",[26,2399,2400],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,2403,2405],{"id":2404},"_76-linux重点知识","7.6 Linux重点知识",[402,2407,2409],{"id":2408},"_761-关于点的说明","7.6.1 关于点的说明",[19,2411,2412],{},[438,2413],{"alt":36,"src":2414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,2416,2417],{},"一点本目录，两点上目录",[402,2419,2421],{"id":2420},"_762-目录","7.6.2 目录",[2423,2424,2426],"h4",{"id":2425},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,2428,2429],{},[409,2430,2431],{},"\u002Fboot:",[19,2433,2434],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,2436,2437],{},[409,2438,2439],{},"\u002Fetc:",[19,2441,2442],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,2444,2445],{},[409,2446,2447],{},"\u002Flib：",[19,2449,2450],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,2452,2453],{},[409,2454,2455],{},"\u002Fsys:",[19,2457,2458],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[2423,2460,2462],{"id":2461},"_7622-指令集合","7.6.2.2 指令集合",[19,2464,2465],{},[409,2466,2467],{},"\u002Fbin:",[19,2469,2470],{},"为二进制文件的缩写，存放最经常使用的命令",[19,2472,2473],{},[409,2474,2475],{},"\u002Fsbin:",[19,2477,2478],{},"只有系统管理员才能使用的程序和指令",[2423,2480,2482],{"id":2481},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,2484,2485],{},[409,2486,2487],{},"\u002Fdev:",[19,2489,2490],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,2492,2493],{},[409,2494,2495],{},"\u002Fmedia:",[19,2497,2498],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,2500,2501],{},[409,2502,2503],{},"\u002Fmnt:",[19,2505,2506],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[2423,2508,2510],{"id":2509},"_7624-临时文件","7.6.2.4 临时文件",[19,2512,2513],{},[409,2514,2515],{},"\u002Frun:",[19,2517,2518],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,2520,2521],{},[409,2522,2523],{},"\u002Flost+found:",[19,2525,2526],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,2528,2529],{},[409,2530,2531],{},"\u002Ftmp:",[19,2533,2534],{},"这个目录是用来存放一些临时文件的",[2423,2536,2538],{"id":2537},"_7625-账户","7.6.2.5 账户",[19,2540,2541],{},[409,2542,2543],{},"\u002Froot：",[19,2545,2546],{},"系统管理员的用户主目录",[19,2548,2549,2261],{},[409,2550,2551],{},"\u002Fhome",[19,2553,2554],{},"用户的主目录，以用户的账号命名的",[19,2556,2557,2261],{},[409,2558,2559],{},"\u002Fusr",[19,2561,2562],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,2564,2565],{},[409,2566,2567],{},"\u002Fusr\u002Fbin：",[19,2569,2570],{},"系统用户使用的应用程序与指令",[19,2572,2573],{},[409,2574,2575],{},"\u002Fusr\u002Fsbin：",[19,2577,2578],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,2580,2581],{},[409,2582,2583],{},"\u002Fusr\u002Fsrc：",[19,2585,2586],{},"内核源代码默认的放置目录",[2423,2588,2590],{"id":2589},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,2592,2593],{},[409,2594,2595],{},"\u002Fvar：",[19,2597,2598],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,2600,2601],{},[409,2602,2603],{},"\u002Fproc:",[19,2605,2606,2607,2610],{},"管理 ",[409,2608,2609],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[2423,2612,2614],{"id":2613},"_7627-扩展用的","7.6.2.7 扩展用的",[19,2616,2617],{},[409,2618,2619],{},"\u002Fopt:",[19,2621,2622],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,2624,2625],{},[409,2626,2627],{},"\u002Fsrv:",[19,2629,2630],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[402,2632,2634],{"id":2633},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,2636,2637],{},[438,2638],{"alt":36,"src":2639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,2641,2642],{},"windows-->linux:",[19,2644,2645],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,2647,2648],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,2650,2651],{},"linux传输文件到windows",[19,2653,2654],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[402,2656,2658],{"id":2657},"_764-易忘知识","7.6.4 易忘知识",[19,2660,2661],{},"操作系统内核查看",[31,2663,2665],{"className":587,"code":2664,"language":589,"meta":36,"style":36},"uname -r\n",[26,2666,2667],{"__ignoreMap":36},[40,2668,2669,2672],{"class":42,"line":43},[40,2670,2671],{"class":596},"uname",[40,2673,2674],{"class":63}," -r\n",[19,2676,2677],{},[438,2678],{"alt":36,"src":2679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,2681,2682],{},[438,2683],{"alt":36,"src":2684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[31,2686,2688],{"className":587,"code":2687,"language":589,"meta":36,"style":36},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[26,2689,2690,2703],{"__ignoreMap":36},[40,2691,2692,2695,2698,2701],{"class":42,"line":43},[40,2693,2694],{"class":596},"mv",[40,2696,2697],{"class":94}," mvtest",[40,2699,2700],{"class":94}," mvtest2",[40,2702,67],{"class":50},[40,2704,2705],{"class":42,"line":54},[40,2706,2707],{"class":596},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,2709,2710],{},[438,2711],{"alt":36,"src":2712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,2714,2715],{},[438,2716],{"alt":36,"src":2717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,2719,2720,2721,2724],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[26,2722,2723],{},"du -a"," 可以快速查看磁盘使用细节。",[402,2726,2728],{"id":2727},"_765-vim","7.6.5 Vim",[19,2730,2731],{},[438,2732],{"alt":36,"src":2733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,2735,2736],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,2738,2739],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,2741,2742],{},[409,2743,2744],{},"1.命令模式：",[19,2746,2747],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,2749,2750],{},"x 删除当前光标所在处的字符",[19,2752,2753],{},"：切换到底线命令模式，以在最底一行输入命令",[19,2755,2756],{},"a 进行插入模式，在光标下一个位置输入文本",[19,2758,2759],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,2761,2762],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,2764,2765],{},"dd 剪切当前行",[19,2767,2768],{},"yy 复制当前行",[19,2770,2771],{},"p 粘贴剪贴板内容到光标下方",[19,2773,2774],{},"P 粘贴剪贴板内容到光标上方",[19,2776,2777],{},"u 撤销上一次操作",[19,2779,2780],{},"ctrl+r 重做上一次操作",[19,2782,2783,2786],{},[2784,2785],"w",{}," 保存文件",[19,2788,2789,2792],{},[2790,2791],"q",{}," 退出Vim编辑器",[19,2794,2795,2797],{},[2790,2796],{},"! 强制退出Vim编辑器，不保存修改",[19,2799,2800],{},[409,2801,2802],{},"2.输入模式：",[19,2804,2805],{},[438,2806],{"alt":36,"src":2807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,2809,2810],{},[409,2811,2812],{},"3.底线命令模式：",[19,2814,2815],{},[438,2816],{"alt":36,"src":2817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,2819,2820],{},"按下esc可以退出底线命令模式",[402,2822,2824],{"id":2823},"_766-apt","7.6.6 apt",[19,2826,2827],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[402,2829,2831],{"id":2830},"_767-home与root的区别","7.6.7 home与root的区别",[19,2833,2834],{},[438,2835],{"alt":36,"src":2836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,2838,2839],{},[438,2840],{"alt":36,"src":2841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,2843,2844],{},[438,2845],{"alt":36,"src":2846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,2848,2849],{},[438,2850],{"alt":36,"src":2851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[402,2853,2855],{"id":2854},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,2857,2858],{},[2106,2859,2860],{"href":2860,"rel":2861},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[2110],[492,2863,2864,2867],{},[495,2865,2866],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[495,2868,2869],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,2871,2872],{},[438,2873],{"alt":36,"src":2874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,2876,2877],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,2879,2880],{},[438,2881],{"alt":36,"src":2882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[31,2884,2886],{"className":515,"code":2885,"language":517,"meta":518,"style":36},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[26,2887,2888,2893],{"__ignoreMap":36},[40,2889,2890],{"class":42,"line":43},[40,2891,2892],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[40,2894,2895],{"class":42,"line":54},[40,2896,2897],{},".\u002Fpycharm.sh\n",[19,2899,2900],{},"3️⃣创建.desktop文件",[19,2902,2903],{},[409,2904,2905],{},"原理：",[1338,2907,2908,2918],{},[495,2909,2910,2911,2917],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[409,2912,2913,2916],{},[26,2914,2915],{},".desktop"," 文件"," 来识别应用。",[495,2919,2920,2922,2923],{},[26,2921,2915],{}," 文件相当于一个“应用注册表”，告诉系统：",[1338,2924,2925,2928,2931,2934,2937],{},[495,2926,2927],{},"应用名字（Name）",[495,2929,2930],{},"图标（Icon）",[495,2932,2933],{},"执行命令（Exec）",[495,2935,2936],{},"分类（Categories）",[495,2938,2939],{},"是否需要终端（Terminal）",[31,2941,2943],{"className":515,"code":2942,"language":517,"meta":518,"style":36},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[26,2944,2945,2950],{"__ignoreMap":36},[40,2946,2947],{"class":42,"line":43},[40,2948,2949],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[40,2951,2952],{"class":42,"line":54},[40,2953,2954],{},"nano pycharm.desktop\n",[19,2956,2957],{},"nano是一个命令行下的编辑器，也可以使用vim",[31,2959,2961],{"className":515,"code":2960,"language":517,"meta":518,"style":36},"[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",[26,2962,2963,2968,2973,2978,2983,2988,2993,2998,3003,3008],{"__ignoreMap":36},[40,2964,2965],{"class":42,"line":43},[40,2966,2967],{},"[Desktop Entry]\n",[40,2969,2970],{"class":42,"line":54},[40,2971,2972],{},"Version=1.0\n",[40,2974,2975],{"class":42,"line":70},[40,2976,2977],{},"Type=Application\n",[40,2979,2980],{"class":42,"line":78},[40,2981,2982],{},"Name=PyCharm\n",[40,2984,2985],{"class":42,"line":86},[40,2986,2987],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[40,2989,2990],{"class":42,"line":100},[40,2991,2992],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[40,2994,2995],{"class":42,"line":108},[40,2996,2997],{},"Comment=JetBrains PyCharm IDE\n",[40,2999,3000],{"class":42,"line":121},[40,3001,3002],{},"Categories=Development;IDE;\n",[40,3004,3005],{"class":42,"line":134},[40,3006,3007],{},"Terminal=false\n",[40,3009,3010],{"class":42,"line":146},[40,3011,3012],{},"StartupWMClass=jetbrains-pycharm\n",[1338,3014,3015,3021,3027,3033],{},[495,3016,3017,3020],{},[26,3018,3019],{},"Exec"," → 点击图标时执行的命令",[495,3022,3023,3026],{},[26,3024,3025],{},"Icon"," → 显示在菜单和桌面上的图标",[495,3028,3029,3032],{},[26,3030,3031],{},"Terminal=false"," → 不打开终端",[495,3034,3035,3038],{},[26,3036,3037],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[3040,3041,3042],"blockquote",{},[19,3043,3044,3045,3047,3048],{},"可以理解成 ",[26,3046,2915],{}," 文件是 Linux 的 ",[409,3049,3050],{},"快捷方式配置文件",[19,3052,3053],{},"4️⃣设置可执行权限",[31,3055,3057],{"className":515,"code":3056,"language":517,"meta":518,"style":36},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[26,3058,3059],{"__ignoreMap":36},[40,3060,3061],{"class":42,"line":43},[40,3062,3056],{},[19,3064,3065],{},"5️⃣桌面图标启动的话如下：",[31,3067,3069],{"className":515,"code":3068,"language":517,"meta":518,"style":36},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[26,3070,3071,3076],{"__ignoreMap":36},[40,3072,3073],{"class":42,"line":43},[40,3074,3075],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[40,3077,3078],{"class":42,"line":54},[40,3079,3080],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[492,3082,3083],{"start":70},[495,3084,3085],{},"下载Appimage文件实现软件的安装",[19,3087,3088],{},"1️⃣先下载appimage",[19,3090,3091],{},[2106,3092,3093],{"href":3093,"rel":3094},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[2110],[19,3096,3097],{},[438,3098],{"alt":36,"src":3099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,3101,3102],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,3104,3105],{},[438,3106],{"alt":36,"src":3107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,3109,3110],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,3112,3113],{},[438,3114],{"alt":36,"src":3115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,3117,3118],{},[438,3119],{"alt":36,"src":3120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,3122,3123,3124,3127],{},"3️⃣给他们放在",[26,3125,3126],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,3129,3130],{},"4️⃣给软件执行权限",[31,3132,3134],{"className":515,"code":3133,"language":517,"meta":518,"style":36},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[26,3135,3136,3141],{"__ignoreMap":36},[40,3137,3138],{"class":42,"line":43},[40,3139,3140],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[40,3142,3143],{"class":42,"line":54},[40,3144,3145],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,3147,3148],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[31,3150,3152],{"className":587,"code":3151,"language":589,"meta":36,"style":36},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[26,3153,3154,3161,3169,3175],{"__ignoreMap":36},[40,3155,3156,3158],{"class":42,"line":43},[40,3157,2288],{"class":63},[40,3159,3160],{"class":94}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[40,3162,3163,3166],{"class":42,"line":54},[40,3164,3165],{"class":596},"touch",[40,3167,3168],{"class":94}," .\u002Fqqmusic.desktop\n",[40,3170,3171,3173],{"class":42,"line":70},[40,3172,2200],{"class":596},[40,3174,3168],{"class":94},[40,3176,3177,3179,3182,3184],{"class":42,"line":78},[40,3178,923],{"class":596},[40,3180,3181],{"class":94}," chmod",[40,3183,1042],{"class":94},[40,3185,3168],{"class":94},[19,3187,3188,3190],{},[26,3189,3165],{},"：一个 Linux 命令，主要功能是：",[1338,3192,3193,3196],{},[495,3194,3195],{},"如果文件不存在，就创建一个新的空文件",[495,3197,3198],{},"如果文件已存在，就更新该文件的最后修改时间",[31,3200,3202],{"className":515,"code":3201,"language":517,"meta":518,"style":36},"[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",[26,3203,3204,3208,3213,3218,3223,3227,3232],{"__ignoreMap":36},[40,3205,3206],{"class":42,"line":43},[40,3207,2967],{},[40,3209,3210],{"class":42,"line":54},[40,3211,3212],{},"Name=QQ音乐\n",[40,3214,3215],{"class":42,"line":70},[40,3216,3217],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[40,3219,3220],{"class":42,"line":78},[40,3221,3222],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[40,3224,3225],{"class":42,"line":86},[40,3226,2977],{},[40,3228,3229],{"class":42,"line":100},[40,3230,3231],{},"Categories=Audio;Music;Player;\n",[40,3233,3234],{"class":42,"line":108},[40,3235,3236],{},"Comment=QQ Music Client for Linux\n",[19,3238,3239],{},"将文件复制进去",[19,3241,3242],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,3244,3245],{},[438,3246],{"alt":36,"src":3247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,3249,3250],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,3252,3253],{},[438,3254],{"alt":36,"src":3255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,3257,3258,3259,3262,3263,3266],{},"如果你用的不是KDE，那么也可以直接修改",[26,3260,3261],{},"qqmuic.desktop","：在exec的末尾加上",[26,3264,3265],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[31,3268,3270],{"className":515,"code":3269,"language":517,"meta":518,"style":36},"[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",[26,3271,3272,3276,3280,3285,3289,3293,3297],{"__ignoreMap":36},[40,3273,3274],{"class":42,"line":43},[40,3275,2967],{},[40,3277,3278],{"class":42,"line":54},[40,3279,3212],{},[40,3281,3282],{"class":42,"line":70},[40,3283,3284],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[40,3286,3287],{"class":42,"line":78},[40,3288,3222],{},[40,3290,3291],{"class":42,"line":86},[40,3292,2977],{},[40,3294,3295],{"class":42,"line":100},[40,3296,3231],{},[40,3298,3299],{"class":42,"line":108},[40,3300,3236],{},[19,3302,3303],{},[438,3304],{"alt":36,"src":3305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,3307,3308],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[31,3310,3312],{"className":515,"code":3311,"language":517,"meta":518,"style":36},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[26,3313,3314],{"__ignoreMap":36},[40,3315,3316],{"class":42,"line":43},[40,3317,3311],{},[492,3319,3320],{"start":78},[495,3321,3322],{},"去Flathub上安装软件",[19,3324,3325],{},[2106,3326,3327],{"href":3327,"rel":3328},"https:\u002F\u002Fflathub.org\u002F",[2110],[19,3330,3331],{},"1️⃣去上面的官网搜索软件+下载软件",[19,3333,3334],{},[438,3335],{"alt":36,"src":3336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[31,3338,3340],{"className":515,"code":3339,"language":517,"meta":518,"style":36},"flatpak install flathub com.obsproject.Studio\n",[26,3341,3342],{"__ignoreMap":36},[40,3343,3344],{"class":42,"line":43},[40,3345,3339],{},[19,3347,3348],{},[438,3349],{"alt":36,"src":3350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,3352,3353],{},"2️⃣运行软件",[19,3355,3356],{},"a.官方方式：",[19,3358,3359],{},[438,3360],{"alt":36,"src":3361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[31,3363,3364],{"className":515,"code":3339,"language":517,"meta":518,"style":36},[26,3365,3366],{"__ignoreMap":36},[40,3367,3368],{"class":42,"line":43},[40,3369,3339],{},[19,3371,3372],{},"b.当普通软件运行：",[19,3374,3375],{},[438,3376],{"alt":36,"src":3377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,3379,3380],{},[438,3381],{"alt":36,"src":3382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[3384,3385,3386],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":36,"searchDepth":54,"depth":54,"links":3388},[3389,3390,3395,3396,3402,3403],{"id":16,"depth":54,"text":17},{"id":399,"depth":54,"text":400,"children":3391},[3392,3393,3394],{"id":404,"depth":70,"text":405},{"id":473,"depth":70,"text":474},{"id":744,"depth":70,"text":745},{"id":898,"depth":54,"text":899},{"id":1143,"depth":54,"text":1144,"children":3397},[3398,3399,3400,3401],{"id":1199,"depth":70,"text":1200},{"id":1497,"depth":70,"text":1498},{"id":1769,"depth":70,"text":1770},{"id":2031,"depth":70,"text":2032},{"id":2091,"depth":54,"text":2092},{"id":2404,"depth":54,"text":2405,"children":3404},[3405,3406,3407,3408,3409,3410,3411,3412],{"id":2408,"depth":70,"text":2409},{"id":2420,"depth":70,"text":2421},{"id":2633,"depth":70,"text":2634},{"id":2657,"depth":70,"text":2658},{"id":2727,"depth":70,"text":2728},{"id":2823,"depth":70,"text":2824},{"id":2830,"depth":70,"text":2831},{"id":2854,"depth":70,"text":2855},null,"md",{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":5,"description":3413},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",[3421,8485,9593,11012,14001,15352,16841,17930,26691,26703,27299,27325,27449,27690,27755,27773,27786,27833,27954,28123,28322,28500,28705,28841,28936,28973,28986,29295,30029,30737,30758,31776,33406,33556,33569,33581,33881,53693,53708,53725,53758,56628,79973,96118,96139,96252,96373,97143,97806,98167,98205,98311,98411,98454,98480,98541,100195,100296,100321,100812,101312,102392,102675,103417,103919,103931,105943,107607,109110,110808,112725,114644,116666,120136,120568,121026,121774,124710,125056,125078,125434,128035,128047,128450,128473,128620,128787,128992,129293,129850,130507,132438,134036,134685,136179,137610,138845,140539,142291,144701,144817,145752,145963,146848,148083,148311,148324,149479,151891,154259,157580,160057,161701,163478,165491,168543,170723,173250,175444],{"id":3422,"title":3423,"body":3424,"description":36,"extension":3414,"meta":8480,"navigation":1412,"path":8481,"seo":8482,"stem":8483,"__hash__":8484},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":3425,"toc":8452},[3426,3429,3433,3436,3440,3451,3455,3459,3462,3465,3468,3471,3474,3501,3505,3508,3511,3514,3517,3566,3570,3588,3590,3604,3607,3615,3618,4476,4483,4499,4503,4589,4593,4599,4685,4689,4726,4730,4794,4798,4802,4808,4819,4823,4828,4832,4837,4841,4846,4850,4854,4859,5114,5119,5257,5262,5518,5521,5529,5533,5538,5641,5644,5949,5958,6058,6061,6064,6067,6070,6330,6335,6475,6478,6657,6660,6788,6791,6943,6947,6952,6955,6966,6974,6977,7083,7087,7091,7096,7146,7151,7156,7180,7185,7238,7241,7246,7423,7428,7713,7718,8115,8119,8124,8181,8186,8194,8197,8337,8340,8449],[10,3427,3423],{"id":3428},"_1基础入门",[14,3430,3432],{"id":3431},"_11注释","1.1注释",[19,3434,3435],{},"\u002F\u002F或者\u002F* *\u002F",[14,3437,3439],{"id":3438},"_12命名","1.2命名",[492,3441,3442,3445,3448],{},[495,3443,3444],{},"字母数字下划线",[495,3446,3447],{},"开头必须是字母或_",[495,3449,3450],{},"不能使用关键词",[14,3452,3454],{"id":3453},"_13数据类型","1.3数据类型",[402,3456,3458],{"id":3457},"_131整形","1.3.1整形",[19,3460,3461],{},"short 短整形 2",[19,3463,3464],{},"int 整形 4",[19,3466,3467],{},"long 长整形 win4 linux32位4 linux64位8",[19,3469,3470],{},"long long 长长整形 8",[19,3472,3473],{},"利用sizeof可以求数据类型占用的内存空间大小",[31,3475,3479],{"className":3476,"code":3477,"language":3478,"meta":36,"style":36},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[26,3480,3481,3494],{"__ignoreMap":36},[40,3482,3483,3486,3489,3492],{"class":42,"line":43},[40,3484,3485],{"class":1283},"sizeof",[40,3487,3488],{"class":50},"(",[40,3490,3491],{"class":1283},"int",[40,3493,1811],{"class":50},[40,3495,3496,3498],{"class":42,"line":54},[40,3497,3485],{"class":1283},[40,3499,3500],{"class":50},"(num)\n",[402,3502,3504],{"id":3503},"_132浮点型","1.3.2浮点型",[19,3506,3507],{},"float 单精度 4节 7位有效数字",[19,3509,3510],{},"double 双精度 8节 15-16有效数字",[19,3512,3513],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,3515,3516],{},"注意点：",[31,3518,3520],{"className":3476,"code":3519,"language":3478,"meta":36,"style":36},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[26,3521,3522,3544],{"__ignoreMap":36},[40,3523,3524,3527,3530,3532,3535,3538,3541],{"class":42,"line":43},[40,3525,3526],{"class":1283},"float",[40,3528,3529],{"class":50}," f1",[40,3531,1284],{"class":1283},[40,3533,3534],{"class":63},"3.14",[40,3536,3537],{"class":1283},"f",[40,3539,3540],{"class":50},";",[40,3542,3543],{"class":997}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[40,3545,3546,3548,3551,3553,3556,3559,3561,3563],{"class":42,"line":54},[40,3547,3526],{"class":1283},[40,3549,3550],{"class":50}," f2",[40,3552,1284],{"class":1283},[40,3554,3555],{"class":63},"3",[40,3557,3558],{"class":1283},"e",[40,3560,64],{"class":63},[40,3562,3540],{"class":50},[40,3564,3565],{"class":997}," \u002F\u002F科学记数法\n",[402,3567,3569],{"id":3568},"_133字符型","1.3.3字符型",[31,3571,3573],{"className":3476,"code":3572,"language":3478,"meta":36,"style":36},"char ch='a'\n",[26,3574,3575],{"__ignoreMap":36},[40,3576,3577,3580,3583,3585],{"class":42,"line":43},[40,3578,3579],{"class":1283},"char",[40,3581,3582],{"class":50}," ch",[40,3584,1284],{"class":1283},[40,3586,3587],{"class":94},"'a'\n",[19,3589,3516],{},[492,3591,3592,3595,3598,3601],{},[495,3593,3594],{},"在显示字符型变量时，只能单引号，双引号x",[495,3596,3597],{},"单引号内只能一个字符，不能字符串",[495,3599,3600],{},"c和c++字符型变量只占用一个字符",[495,3602,3603],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,3605,3606],{},"ASCII码大致由以下两部分组成：",[492,3608,3609,3612],{},[495,3610,3611],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[495,3613,3614],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,3616,3617],{},"ASCII码表格：",[3619,3620,3621,3664],"table",{},[3622,3623,3624],"thead",{},[3625,3626,3627,3634,3639,3643,3648,3652,3656,3660],"tr",{},[3628,3629,3630,3633],"th",{},[409,3631,3632],{},"ASCII","值",[3628,3635,3636],{},[409,3637,3638],{},"控制字符",[3628,3640,3641,3633],{},[409,3642,3632],{},[3628,3644,3645],{},[409,3646,3647],{},"字符",[3628,3649,3650,3633],{},[409,3651,3632],{},[3628,3653,3654],{},[409,3655,3647],{},[3628,3657,3658,3633],{},[409,3659,3632],{},[3628,3661,3662],{},[409,3663,3647],{},[3665,3666,3667,3694,3719,3744,3769,3795,3820,3845,3870,3895,3921,3947,3973,3998,4024,4050,4076,4100,4124,4149,4174,4199,4224,4249,4273,4298,4323,4349,4374,4399,4424,4450],"tbody",{},[3625,3668,3669,3673,3676,3679,3682,3685,3688,3691],{},[3670,3671,3672],"td",{},"0",[3670,3674,3675],{},"NUT",[3670,3677,3678],{},"32",[3670,3680,3681],{},"(space)",[3670,3683,3684],{},"64",[3670,3686,3687],{},"@",[3670,3689,3690],{},"96",[3670,3692,3693],{},"、",[3625,3695,3696,3699,3702,3705,3708,3711,3714,3717],{},[3670,3697,3698],{},"1",[3670,3700,3701],{},"SOH",[3670,3703,3704],{},"33",[3670,3706,3707],{},"!",[3670,3709,3710],{},"65",[3670,3712,3713],{},"A",[3670,3715,3716],{},"97",[3670,3718,2106],{},[3625,3720,3721,3723,3726,3729,3732,3735,3738,3741],{},[3670,3722,64],{},[3670,3724,3725],{},"STX",[3670,3727,3728],{},"34",[3670,3730,3731],{},"\"",[3670,3733,3734],{},"66",[3670,3736,3737],{},"B",[3670,3739,3740],{},"98",[3670,3742,3743],{},"b",[3625,3745,3746,3748,3751,3754,3757,3760,3763,3766],{},[3670,3747,3555],{},[3670,3749,3750],{},"ETX",[3670,3752,3753],{},"35",[3670,3755,3756],{},"#",[3670,3758,3759],{},"67",[3670,3761,3762],{},"C",[3670,3764,3765],{},"99",[3670,3767,3768],{},"c",[3625,3770,3771,3774,3777,3780,3783,3786,3789,3792],{},[3670,3772,3773],{},"4",[3670,3775,3776],{},"EOT",[3670,3778,3779],{},"36",[3670,3781,3782],{},"$",[3670,3784,3785],{},"68",[3670,3787,3788],{},"D",[3670,3790,3791],{},"100",[3670,3793,3794],{},"d",[3625,3796,3797,3800,3803,3806,3809,3812,3815,3818],{},[3670,3798,3799],{},"5",[3670,3801,3802],{},"ENQ",[3670,3804,3805],{},"37",[3670,3807,3808],{},"%",[3670,3810,3811],{},"69",[3670,3813,3814],{},"E",[3670,3816,3817],{},"101",[3670,3819,3558],{},[3625,3821,3822,3825,3828,3831,3834,3837,3840,3843],{},[3670,3823,3824],{},"6",[3670,3826,3827],{},"ACK",[3670,3829,3830],{},"38",[3670,3832,3833],{},"&",[3670,3835,3836],{},"70",[3670,3838,3839],{},"F",[3670,3841,3842],{},"102",[3670,3844,3537],{},[3625,3846,3847,3850,3853,3856,3858,3861,3864,3867],{},[3670,3848,3849],{},"7",[3670,3851,3852],{},"BEL",[3670,3854,3855],{},"39",[3670,3857,1299],{},[3670,3859,3860],{},"71",[3670,3862,3863],{},"G",[3670,3865,3866],{},"103",[3670,3868,3869],{},"g",[3625,3871,3872,3875,3878,3881,3883,3886,3889,3892],{},[3670,3873,3874],{},"8",[3670,3876,3877],{},"BS",[3670,3879,3880],{},"40",[3670,3882,3488],{},[3670,3884,3885],{},"72",[3670,3887,3888],{},"H",[3670,3890,3891],{},"104",[3670,3893,3894],{},"h",[3625,3896,3897,3900,3903,3906,3909,3912,3915,3918],{},[3670,3898,3899],{},"9",[3670,3901,3902],{},"HT",[3670,3904,3905],{},"41",[3670,3907,3908],{},")",[3670,3910,3911],{},"73",[3670,3913,3914],{},"I",[3670,3916,3917],{},"105",[3670,3919,3920],{},"i",[3625,3922,3923,3926,3929,3932,3935,3938,3941,3944],{},[3670,3924,3925],{},"10",[3670,3927,3928],{},"LF",[3670,3930,3931],{},"42",[3670,3933,3934],{},"*",[3670,3936,3937],{},"74",[3670,3939,3940],{},"J",[3670,3942,3943],{},"106",[3670,3945,3946],{},"j",[3625,3948,3949,3952,3955,3958,3961,3964,3967,3970],{},[3670,3950,3951],{},"11",[3670,3953,3954],{},"VT",[3670,3956,3957],{},"43",[3670,3959,3960],{},"+",[3670,3962,3963],{},"75",[3670,3965,3966],{},"K",[3670,3968,3969],{},"107",[3670,3971,3972],{},"k",[3625,3974,3975,3978,3981,3984,3986,3989,3992,3995],{},[3670,3976,3977],{},"12",[3670,3979,3980],{},"FF",[3670,3982,3983],{},"44",[3670,3985,1299],{},[3670,3987,3988],{},"76",[3670,3990,3991],{},"L",[3670,3993,3994],{},"108",[3670,3996,3997],{},"l",[3625,3999,4000,4003,4006,4009,4012,4015,4018,4021],{},[3670,4001,4002],{},"13",[3670,4004,4005],{},"CR",[3670,4007,4008],{},"45",[3670,4010,4011],{},"-",[3670,4013,4014],{},"77",[3670,4016,4017],{},"M",[3670,4019,4020],{},"109",[3670,4022,4023],{},"m",[3625,4025,4026,4029,4032,4035,4038,4041,4044,4047],{},[3670,4027,4028],{},"14",[3670,4030,4031],{},"SO",[3670,4033,4034],{},"46",[3670,4036,4037],{},".",[3670,4039,4040],{},"78",[3670,4042,4043],{},"N",[3670,4045,4046],{},"110",[3670,4048,4049],{},"n",[3625,4051,4052,4055,4058,4061,4064,4067,4070,4073],{},[3670,4053,4054],{},"15",[3670,4056,4057],{},"SI",[3670,4059,4060],{},"47",[3670,4062,4063],{},"\u002F",[3670,4065,4066],{},"79",[3670,4068,4069],{},"O",[3670,4071,4072],{},"111",[3670,4074,4075],{},"o",[3625,4077,4078,4081,4084,4087,4089,4092,4095,4098],{},[3670,4079,4080],{},"16",[3670,4082,4083],{},"DLE",[3670,4085,4086],{},"48",[3670,4088,3672],{},[3670,4090,4091],{},"80",[3670,4093,4094],{},"P",[3670,4096,4097],{},"112",[3670,4099,19],{},[3625,4101,4102,4105,4108,4111,4113,4116,4119,4122],{},[3670,4103,4104],{},"17",[3670,4106,4107],{},"DCI",[3670,4109,4110],{},"49",[3670,4112,3698],{},[3670,4114,4115],{},"81",[3670,4117,4118],{},"Q",[3670,4120,4121],{},"113",[3670,4123,2790],{},[3625,4125,4126,4129,4132,4135,4137,4140,4143,4146],{},[3670,4127,4128],{},"18",[3670,4130,4131],{},"DC2",[3670,4133,4134],{},"50",[3670,4136,64],{},[3670,4138,4139],{},"82",[3670,4141,4142],{},"R",[3670,4144,4145],{},"114",[3670,4147,4148],{},"r",[3625,4150,4151,4154,4157,4160,4162,4165,4168,4171],{},[3670,4152,4153],{},"19",[3670,4155,4156],{},"DC3",[3670,4158,4159],{},"51",[3670,4161,3555],{},[3670,4163,4164],{},"83",[3670,4166,4167],{},"S",[3670,4169,4170],{},"115",[3670,4172,4173],{},"s",[3625,4175,4176,4179,4182,4185,4187,4190,4193,4196],{},[3670,4177,4178],{},"20",[3670,4180,4181],{},"DC4",[3670,4183,4184],{},"52",[3670,4186,3773],{},[3670,4188,4189],{},"84",[3670,4191,4192],{},"T",[3670,4194,4195],{},"116",[3670,4197,4198],{},"t",[3625,4200,4201,4204,4207,4210,4212,4215,4218,4221],{},[3670,4202,4203],{},"21",[3670,4205,4206],{},"NAK",[3670,4208,4209],{},"53",[3670,4211,3799],{},[3670,4213,4214],{},"85",[3670,4216,4217],{},"U",[3670,4219,4220],{},"117",[3670,4222,4223],{},"u",[3625,4225,4226,4229,4232,4235,4237,4240,4243,4246],{},[3670,4227,4228],{},"22",[3670,4230,4231],{},"SYN",[3670,4233,4234],{},"54",[3670,4236,3824],{},[3670,4238,4239],{},"86",[3670,4241,4242],{},"V",[3670,4244,4245],{},"118",[3670,4247,4248],{},"v",[3625,4250,4251,4254,4257,4260,4262,4265,4268,4271],{},[3670,4252,4253],{},"23",[3670,4255,4256],{},"TB",[3670,4258,4259],{},"55",[3670,4261,3849],{},[3670,4263,4264],{},"87",[3670,4266,4267],{},"W",[3670,4269,4270],{},"119",[3670,4272,2784],{},[3625,4274,4275,4278,4281,4284,4286,4289,4292,4295],{},[3670,4276,4277],{},"24",[3670,4279,4280],{},"CAN",[3670,4282,4283],{},"56",[3670,4285,3874],{},[3670,4287,4288],{},"88",[3670,4290,4291],{},"X",[3670,4293,4294],{},"120",[3670,4296,4297],{},"x",[3625,4299,4300,4303,4306,4309,4311,4314,4317,4320],{},[3670,4301,4302],{},"25",[3670,4304,4305],{},"EM",[3670,4307,4308],{},"57",[3670,4310,3899],{},[3670,4312,4313],{},"89",[3670,4315,4316],{},"Y",[3670,4318,4319],{},"121",[3670,4321,4322],{},"y",[3625,4324,4325,4328,4331,4334,4337,4340,4343,4346],{},[3670,4326,4327],{},"26",[3670,4329,4330],{},"SUB",[3670,4332,4333],{},"58",[3670,4335,4336],{},":",[3670,4338,4339],{},"90",[3670,4341,4342],{},"Z",[3670,4344,4345],{},"122",[3670,4347,4348],{},"z",[3625,4350,4351,4354,4357,4360,4362,4365,4368,4371],{},[3670,4352,4353],{},"27",[3670,4355,4356],{},"ESC",[3670,4358,4359],{},"59",[3670,4361,3540],{},[3670,4363,4364],{},"91",[3670,4366,4367],{},"[",[3670,4369,4370],{},"123",[3670,4372,4373],{},"{",[3625,4375,4376,4379,4382,4385,4388,4391,4393,4396],{},[3670,4377,4378],{},"28",[3670,4380,4381],{},"FS",[3670,4383,4384],{},"60",[3670,4386,4387],{},"\u003C",[3670,4389,4390],{},"92",[3670,4392,4063],{},[3670,4394,4395],{},"124",[3670,4397,4398],{},"|",[3625,4400,4401,4404,4407,4410,4412,4415,4418,4421],{},[3670,4402,4403],{},"29",[3670,4405,4406],{},"GS",[3670,4408,4409],{},"61",[3670,4411,1284],{},[3670,4413,4414],{},"93",[3670,4416,4417],{},"]",[3670,4419,4420],{},"125",[3670,4422,4423],{},"}",[3625,4425,4426,4429,4432,4435,4438,4441,4444,4447],{},[3670,4427,4428],{},"30",[3670,4430,4431],{},"RS",[3670,4433,4434],{},"62",[3670,4436,4437],{},">",[3670,4439,4440],{},"94",[3670,4442,4443],{},"^",[3670,4445,4446],{},"126",[3670,4448,4449],{},"`",[3625,4451,4452,4455,4458,4461,4464,4467,4470,4473],{},[3670,4453,4454],{},"31",[3670,4456,4457],{},"US",[3670,4459,4460],{},"63",[3670,4462,4463],{},"?",[3670,4465,4466],{},"95",[3670,4468,4469],{},"_",[3670,4471,4472],{},"127",[3670,4474,4475],{},"DEL",[19,4477,4478,4479,4482],{},"ASCII 码大致由以下",[409,4480,4481],{},"两部分组","成：",[1338,4484,4485,4492],{},[495,4486,4487,4488,4491],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[409,4489,4490],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[495,4493,4494,4495,4498],{},"ASCII 打印字符：数字 ",[409,4496,4497],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[402,4500,4502],{"id":4501},"_134转义字符","1.3.4转义字符",[31,4504,4506],{"className":3476,"code":4505,"language":3478,"meta":36,"style":36},"\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",[26,4507,4508,4513,4529,4543,4548,4561,4566],{"__ignoreMap":36},[40,4509,4510],{"class":42,"line":43},[40,4511,4512],{"class":997},"\u002F\u002F换行符\n",[40,4514,4515,4518,4521,4524,4526],{"class":42,"line":54},[40,4516,4517],{"class":50},"cout ",[40,4519,4520],{"class":1283},"\u003C\u003C",[40,4522,4523],{"class":94},"\"hello world\u002Fn\"",[40,4525,3540],{"class":50},[40,4527,4528],{"class":997}," \u002F\u002F就等同于如下：\n",[40,4530,4531,4533,4535,4538,4540],{"class":42,"line":70},[40,4532,4517],{"class":50},[40,4534,4520],{"class":1283},[40,4536,4537],{"class":94},"\"hello world\"",[40,4539,4520],{"class":1283},[40,4541,4542],{"class":50},"endl;\n",[40,4544,4545],{"class":42,"line":78},[40,4546,4547],{"class":997},"\u002F\u002F反斜杠\n",[40,4549,4550,4552,4554,4557,4559],{"class":42,"line":86},[40,4551,4517],{"class":50},[40,4553,4520],{"class":1283},[40,4555,4556],{"class":94},"\"\u002F\u002F\"",[40,4558,4520],{"class":1283},[40,4560,4542],{"class":50},[40,4562,4563],{"class":42,"line":100},[40,4564,4565],{"class":997},"\u002F\u002F水平制表符\n",[40,4567,4568,4570,4572,4575,4578,4581,4583,4586],{"class":42,"line":108},[40,4569,4517],{"class":50},[40,4571,4520],{"class":1283},[40,4573,4574],{"class":94},"\"aaaa",[40,4576,4577],{"class":63},"\\t",[40,4579,4580],{"class":94},"helloworld\"",[40,4582,4520],{"class":1283},[40,4584,4585],{"class":50},"endl;",[40,4587,4588],{"class":997}," \u002F\u002F输出窗口时有对齐效果\n",[402,4590,4592],{"id":4591},"_135字符串型","1.3.5字符串型",[19,4594,4595,4596,4598],{},"char 变量名",[40,4597],{},"=\"字符串值\"",[31,4600,4602],{"className":3476,"code":4601,"language":3478,"meta":36,"style":36},"\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",[26,4603,4604,4609,4614,4619,4624,4638,4651,4656,4661,4672],{"__ignoreMap":36},[40,4605,4606],{"class":42,"line":43},[40,4607,4608],{"class":997},"\u002F\u002Fc风格字符串\n",[40,4610,4611],{"class":42,"line":54},[40,4612,4613],{"class":997},"\u002F\u002F注意事项：\n",[40,4615,4616],{"class":42,"line":70},[40,4617,4618],{"class":997},"\u002F\u002F1.char字符串名[]\n",[40,4620,4621],{"class":42,"line":78},[40,4622,4623],{"class":997},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[40,4625,4626,4628,4631,4633,4635],{"class":42,"line":86},[40,4627,3579],{"class":1283},[40,4629,4630],{"class":50}," str[]",[40,4632,1284],{"class":1283},[40,4634,4537],{"class":94},[40,4636,4637],{"class":50},";\n",[40,4639,4640,4642,4644,4647,4649],{"class":42,"line":100},[40,4641,4517],{"class":50},[40,4643,4520],{"class":1283},[40,4645,4646],{"class":50},"str",[40,4648,4520],{"class":1283},[40,4650,4542],{"class":50},[40,4652,4653],{"class":42,"line":108},[40,4654,4655],{"class":997},"\u002F\u002Fc++风格字符串\n",[40,4657,4658],{"class":42,"line":121},[40,4659,4660],{"class":997},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[40,4662,4663,4666,4668,4670],{"class":42,"line":134},[40,4664,4665],{"class":50},"string str2",[40,4667,1284],{"class":1283},[40,4669,4537],{"class":94},[40,4671,4637],{"class":50},[40,4673,4674,4676,4678,4681,4683],{"class":42,"line":146},[40,4675,4517],{"class":50},[40,4677,4520],{"class":1283},[40,4679,4680],{"class":50},"str2",[40,4682,4520],{"class":1283},[40,4684,4542],{"class":50},[402,4686,4688],{"id":4687},"_136布尔类型bool","1.3.6布尔类型bool",[31,4690,4692],{"className":3476,"code":4691,"language":3478,"meta":36,"style":36},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[26,4693,4694,4708],{"__ignoreMap":36},[40,4695,4696,4699,4702,4704,4706],{"class":42,"line":43},[40,4697,4698],{"class":1283},"bool",[40,4700,4701],{"class":50}," flag",[40,4703,1284],{"class":1283},[40,4705,129],{"class":63},[40,4707,4637],{"class":50},[40,4709,4710,4713,4716,4719,4721,4723],{"class":42,"line":54},[40,4711,4712],{"class":50},"cout",[40,4714,4715],{"class":1283},"\u003C\u003Csizeof",[40,4717,4718],{"class":50},"(flag)",[40,4720,4520],{"class":1283},[40,4722,4585],{"class":50},[40,4724,4725],{"class":997}," \u002F\u002F查看布尔占内存空间\n",[14,4727,4729],{"id":4728},"_14键盘输入cin","1.4键盘输入cin",[31,4731,4733],{"className":3476,"code":4732,"language":3478,"meta":36,"style":36},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[26,4734,4735,4748,4765,4776],{"__ignoreMap":36},[40,4736,4737,4739,4742,4744,4746],{"class":42,"line":43},[40,4738,3491],{"class":1283},[40,4740,4741],{"class":50}," a",[40,4743,1284],{"class":1283},[40,4745,3672],{"class":63},[40,4747,4637],{"class":50},[40,4749,4750,4752,4754,4757,4759,4761,4763],{"class":42,"line":54},[40,4751,4712],{"class":50},[40,4753,4520],{"class":1283},[40,4755,4756],{"class":94},"\"请给整型变量a赋值\"",[40,4758,4520],{"class":1283},[40,4760,2106],{"class":50},[40,4762,4520],{"class":1283},[40,4764,4542],{"class":50},[40,4766,4767,4770,4773],{"class":42,"line":70},[40,4768,4769],{"class":50},"cin ",[40,4771,4772],{"class":1283},">>",[40,4774,4775],{"class":50}," a;\n",[40,4777,4778,4780,4782,4785,4788,4790,4792],{"class":42,"line":78},[40,4779,4517],{"class":50},[40,4781,4520],{"class":1283},[40,4783,4784],{"class":94}," \"整型变量a=\"",[40,4786,4787],{"class":1283}," \u003C\u003C",[40,4789,2106],{"class":50},[40,4791,4520],{"class":1283},[40,4793,4542],{"class":50},[14,4795,4797],{"id":4796},"_15运算符","1.5运算符",[402,4799,4801],{"id":4800},"_151算术运算符","1.5.1算术运算符",[19,4803,4804,4807],{},[438,4805],{"alt":36,"src":4806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[492,4809,4810,4813,4816],{},[495,4811,4812],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[495,4814,4815],{},"两个小数不可以做取模运算",[495,4817,4818],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[402,4820,4822],{"id":4821},"_152赋值运算符","1.5.2赋值运算符",[19,4824,4825],{},[438,4826],{"alt":36,"src":4827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[402,4829,4831],{"id":4830},"_153比较运算符","1.5.3比较运算符",[19,4833,4834],{},[438,4835],{"alt":36,"src":4836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[402,4838,4840],{"id":4839},"_154逻辑运算符","1.5.4逻辑运算符",[19,4842,4843],{},[438,4844],{"alt":36,"src":4845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,4847,4849],{"id":4848},"_16程序流程结构","1.6程序流程结构",[402,4851,4853],{"id":4852},"_161选择结构","1.6.1选择结构",[492,4855,4856],{},[495,4857,4858],{},"if语句\n单行、多行、多条件if语句",[31,4860,4862],{"className":3476,"code":4861,"language":3478,"meta":36,"style":36},"\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",[26,4863,4864,4869,4884,4889,4903,4908,4913,4922,4935,4939,4952,4956,4961,4965,4978,4982,4987,5007,5011,5024,5028,5056,5060,5076,5080,5084,5089,5103,5108],{"__ignoreMap":36},[40,4865,4866],{"class":42,"line":43},[40,4867,4868],{"class":997},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[40,4870,4871,4874,4877,4879,4882],{"class":42,"line":54},[40,4872,4873],{"class":1283},"if",[40,4875,4876],{"class":50},"(score",[40,4878,4437],{"class":1283},[40,4880,4881],{"class":63},"600",[40,4883,1811],{"class":50},[40,4885,4886],{"class":42,"line":70},[40,4887,4888],{"class":50},"{\n",[40,4890,4891,4894,4896,4899,4901],{"class":42,"line":78},[40,4892,4893],{"class":50},"    cout",[40,4895,4520],{"class":1283},[40,4897,4898],{"class":94},"'这是单行if语句'",[40,4900,4520],{"class":1283},[40,4902,4542],{"class":50},[40,4904,4905],{"class":42,"line":86},[40,4906,4907],{"class":50},"}\n",[40,4909,4910],{"class":42,"line":100},[40,4911,4912],{"class":997},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[40,4914,4915,4917,4919],{"class":42,"line":108},[40,4916,4769],{"class":50},[40,4918,4772],{"class":1283},[40,4920,4921],{"class":50}," score\n",[40,4923,4924,4926,4928,4931,4933],{"class":42,"line":121},[40,4925,4873],{"class":1283},[40,4927,4876],{"class":50},[40,4929,4930],{"class":1283},"\u003C=",[40,4932,4881],{"class":63},[40,4934,1811],{"class":50},[40,4936,4937],{"class":42,"line":134},[40,4938,4888],{"class":50},[40,4940,4941,4943,4945,4948,4950],{"class":42,"line":146},[40,4942,4893],{"class":50},[40,4944,4772],{"class":1283},[40,4946,4947],{"class":94},"\"小于等于600\"",[40,4949,4520],{"class":1283},[40,4951,4542],{"class":50},[40,4953,4954],{"class":42,"line":154},[40,4955,4907],{"class":50},[40,4957,4958],{"class":42,"line":162},[40,4959,4960],{"class":1283},"else\n",[40,4962,4963],{"class":42,"line":170},[40,4964,4888],{"class":50},[40,4966,4967,4969,4971,4974,4976],{"class":42,"line":183},[40,4968,4893],{"class":50},[40,4970,4772],{"class":1283},[40,4972,4973],{"class":94},"\"大于600\"",[40,4975,4772],{"class":1283},[40,4977,4542],{"class":50},[40,4979,4980],{"class":42,"line":196},[40,4981,4907],{"class":50},[40,4983,4984],{"class":42,"line":204},[40,4985,4986],{"class":997},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[40,4988,4989,4991,4994,4996,4998,5001,5003,5005],{"class":42,"line":217},[40,4990,4873],{"class":1283},[40,4992,4993],{"class":50}," (",[40,4995,3672],{"class":63},[40,4997,4387],{"class":1283},[40,4999,5000],{"class":50},"num",[40,5002,4387],{"class":1283},[40,5004,3791],{"class":63},[40,5006,1811],{"class":50},[40,5008,5009],{"class":42,"line":230},[40,5010,4888],{"class":50},[40,5012,5013,5015,5017,5020,5022],{"class":42,"line":238},[40,5014,4893],{"class":50},[40,5016,4520],{"class":1283},[40,5018,5019],{"class":94},"\"小于100\"",[40,5021,4520],{"class":1283},[40,5023,4542],{"class":50},[40,5025,5026],{"class":42,"line":251},[40,5027,4907],{"class":50},[40,5029,5030,5033,5036,5039,5042,5044,5047,5049,5051,5054],{"class":42,"line":264},[40,5031,5032],{"class":1283},"else",[40,5034,5035],{"class":1283}," if",[40,5037,5038],{"class":50}," (nmu",[40,5040,5041],{"class":1283},">=",[40,5043,3791],{"class":63},[40,5045,5046],{"class":1283},"&&",[40,5048,5000],{"class":50},[40,5050,4387],{"class":1283},[40,5052,5053],{"class":63},"200",[40,5055,1811],{"class":50},[40,5057,5058],{"class":42,"line":277},[40,5059,4888],{"class":50},[40,5061,5062,5064,5066,5069,5071,5073],{"class":42,"line":290},[40,5063,4893],{"class":50},[40,5065,4520],{"class":1283},[40,5067,5068],{"class":94},"\"不小于100且小于200\"",[40,5070,4520],{"class":1283},[40,5072,4585],{"class":50},[40,5074,5075],{"class":997}," \u002F\u002F可以无限else if,python中是elif：\n",[40,5077,5078],{"class":42,"line":298},[40,5079,4907],{"class":50},[40,5081,5082],{"class":42,"line":310},[40,5083,4960],{"class":1283},[40,5085,5087],{"class":42,"line":5086},26,[40,5088,4888],{"class":50},[40,5090,5092,5094,5096,5099,5101],{"class":42,"line":5091},27,[40,5093,4893],{"class":50},[40,5095,4520],{"class":1283},[40,5097,5098],{"class":94},"\"不小于200\"",[40,5100,4520],{"class":1283},[40,5102,4542],{"class":50},[40,5104,5106],{"class":42,"line":5105},28,[40,5107,4907],{"class":50},[40,5109,5111],{"class":42,"line":5110},29,[40,5112,5113],{"class":997},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[492,5115,5116],{"start":54},[495,5117,5118],{},"三目运算符",[31,5120,5122],{"className":3476,"code":5121,"language":3478,"meta":36,"style":36},"\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",[26,5123,5124,5129,5134,5160,5182,5199,5204,5227,5242],{"__ignoreMap":36},[40,5125,5126],{"class":42,"line":43},[40,5127,5128],{"class":997},"\u002F\u002F创建三个变量a,b,c\n",[40,5130,5131],{"class":42,"line":54},[40,5132,5133],{"class":997},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[40,5135,5136,5138,5140,5142,5144,5147,5149,5151,5154,5156,5158],{"class":42,"line":70},[40,5137,3491],{"class":1283},[40,5139,4741],{"class":50},[40,5141,1284],{"class":1283},[40,5143,4178],{"class":63},[40,5145,5146],{"class":50},",b",[40,5148,1284],{"class":1283},[40,5150,3925],{"class":63},[40,5152,5153],{"class":50},",c",[40,5155,1284],{"class":1283},[40,5157,3672],{"class":63},[40,5159,4637],{"class":50},[40,5161,5162,5164,5166,5169,5171,5173,5175,5177,5179],{"class":42,"line":78},[40,5163,3768],{"class":50},[40,5165,1284],{"class":1283},[40,5167,5168],{"class":50},"(a",[40,5170,4437],{"class":1283},[40,5172,3743],{"class":50},[40,5174,4463],{"class":1283},[40,5176,2106],{"class":50},[40,5178,4336],{"class":1283},[40,5180,5181],{"class":50},"b)\n",[40,5183,5184,5186,5188,5191,5193,5195,5197],{"class":42,"line":86},[40,5185,4712],{"class":50},[40,5187,4520],{"class":1283},[40,5189,5190],{"class":94},"\"c=\"",[40,5192,4520],{"class":1283},[40,5194,3768],{"class":50},[40,5196,4520],{"class":1283},[40,5198,4542],{"class":50},[40,5200,5201],{"class":42,"line":100},[40,5202,5203],{"class":997},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[40,5205,5206,5208,5210,5212,5214,5216,5218,5221,5223,5225],{"class":42,"line":108},[40,5207,5168],{"class":50},[40,5209,4437],{"class":1283},[40,5211,3743],{"class":50},[40,5213,4463],{"class":1283},[40,5215,2106],{"class":50},[40,5217,4336],{"class":1283},[40,5219,5220],{"class":50},"b)",[40,5222,1284],{"class":1283},[40,5224,3791],{"class":63},[40,5226,4637],{"class":50},[40,5228,5229,5231,5233,5235,5237,5239],{"class":42,"line":121},[40,5230,4712],{"class":50},[40,5232,4520],{"class":1283},[40,5234,2106],{"class":50},[40,5236,4520],{"class":1283},[40,5238,4585],{"class":50},[40,5240,5241],{"class":997}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[40,5243,5244,5246,5248,5250,5252,5254],{"class":42,"line":134},[40,5245,4712],{"class":50},[40,5247,4520],{"class":1283},[40,5249,3743],{"class":50},[40,5251,4520],{"class":1283},[40,5253,4585],{"class":50},[40,5255,5256],{"class":997}," \u002F\u002F10   a>b,b还是原值\n",[492,5258,5259],{"start":70},[495,5260,5261],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[31,5263,5265],{"className":3476,"code":5264,"language":3478,"meta":36,"style":36},"\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",[26,5266,5267,5272,5280,5293,5303,5307,5321,5334,5344,5352,5357,5382,5403,5425,5446,5468,5489,5509,5514],{"__ignoreMap":36},[40,5268,5269],{"class":42,"line":43},[40,5270,5271],{"class":997},"\u002F\u002F案例-电影打分\n",[40,5273,5274,5277],{"class":42,"line":54},[40,5275,5276],{"class":1283},"#include",[40,5278,5279],{"class":94},"\u003Ciostream>\n",[40,5281,5282,5285,5288,5291],{"class":42,"line":70},[40,5283,5284],{"class":1283},"using",[40,5286,5287],{"class":1283}," namespace",[40,5289,5290],{"class":596}," std",[40,5292,4637],{"class":50},[40,5294,5295,5297,5300],{"class":42,"line":78},[40,5296,3491],{"class":1283},[40,5298,5299],{"class":596}," main",[40,5301,5302],{"class":50},"()\n",[40,5304,5305],{"class":42,"line":86},[40,5306,4888],{"class":50},[40,5308,5309,5312,5315,5317,5319],{"class":42,"line":100},[40,5310,5311],{"class":1283},"    int",[40,5313,5314],{"class":50}," score",[40,5316,1284],{"class":1283},[40,5318,3672],{"class":63},[40,5320,4637],{"class":50},[40,5322,5323,5325,5327,5330,5332],{"class":42,"line":108},[40,5324,4893],{"class":50},[40,5326,4520],{"class":1283},[40,5328,5329],{"class":94},"\"电影打分：\"",[40,5331,4520],{"class":1283},[40,5333,4542],{"class":50},[40,5335,5336,5339,5341],{"class":42,"line":121},[40,5337,5338],{"class":50},"    cin",[40,5340,4772],{"class":1283},[40,5342,5343],{"class":50},"score;\n",[40,5345,5346,5349],{"class":42,"line":134},[40,5347,5348],{"class":1283},"    switch",[40,5350,5351],{"class":50},"(score)\n",[40,5353,5354],{"class":42,"line":146},[40,5355,5356],{"class":50},"    {\n",[40,5358,5359,5362,5365,5368,5370,5373,5375,5377,5380],{"class":42,"line":154},[40,5360,5361],{"class":1283},"        case",[40,5363,5364],{"class":63}," 10",[40,5366,5367],{"class":50},":cout",[40,5369,4520],{"class":1283},[40,5371,5372],{"class":94},"\"经典\"",[40,5374,4520],{"class":1283},[40,5376,4585],{"class":50},[40,5378,5379],{"class":1283},"break",[40,5381,4637],{"class":50},[40,5383,5384,5386,5389,5391,5393,5395,5397,5399,5401],{"class":42,"line":162},[40,5385,5361],{"class":1283},[40,5387,5388],{"class":63}," 9",[40,5390,5367],{"class":50},[40,5392,4520],{"class":1283},[40,5394,5372],{"class":94},[40,5396,4520],{"class":1283},[40,5398,4585],{"class":50},[40,5400,5379],{"class":1283},[40,5402,4637],{"class":50},[40,5404,5405,5407,5410,5412,5414,5417,5419,5421,5423],{"class":42,"line":170},[40,5406,5361],{"class":1283},[40,5408,5409],{"class":63}," 8",[40,5411,5367],{"class":50},[40,5413,4520],{"class":1283},[40,5415,5416],{"class":94},"\"非常好\"",[40,5418,4520],{"class":1283},[40,5420,4585],{"class":50},[40,5422,5379],{"class":1283},[40,5424,4637],{"class":50},[40,5426,5427,5429,5432,5434,5436,5438,5440,5442,5444],{"class":42,"line":183},[40,5428,5361],{"class":1283},[40,5430,5431],{"class":63}," 7",[40,5433,5367],{"class":50},[40,5435,4520],{"class":1283},[40,5437,5416],{"class":94},[40,5439,4520],{"class":1283},[40,5441,4585],{"class":50},[40,5443,5379],{"class":1283},[40,5445,4637],{"class":50},[40,5447,5448,5450,5453,5455,5457,5460,5462,5464,5466],{"class":42,"line":196},[40,5449,5361],{"class":1283},[40,5451,5452],{"class":63}," 6",[40,5454,5367],{"class":50},[40,5456,4520],{"class":1283},[40,5458,5459],{"class":94},"\"一般\"",[40,5461,4520],{"class":1283},[40,5463,4585],{"class":50},[40,5465,5379],{"class":1283},[40,5467,4637],{"class":50},[40,5469,5470,5472,5475,5477,5479,5481,5483,5485,5487],{"class":42,"line":204},[40,5471,5361],{"class":1283},[40,5473,5474],{"class":63}," 5",[40,5476,5367],{"class":50},[40,5478,4520],{"class":1283},[40,5480,5459],{"class":94},[40,5482,4520],{"class":1283},[40,5484,4585],{"class":50},[40,5486,5379],{"class":1283},[40,5488,4637],{"class":50},[40,5490,5491,5494,5496,5498,5501,5503,5505,5507],{"class":42,"line":217},[40,5492,5493],{"class":1283},"        default",[40,5495,5367],{"class":50},[40,5497,4520],{"class":1283},[40,5499,5500],{"class":94},"\"烂片\"",[40,5502,4520],{"class":1283},[40,5504,4585],{"class":50},[40,5506,5379],{"class":1283},[40,5508,4637],{"class":50},[40,5510,5511],{"class":42,"line":230},[40,5512,5513],{"class":50},"    }\n",[40,5515,5516],{"class":42,"line":238},[40,5517,4907],{"class":50},[19,5519,5520],{},"if和switch区别：",[1338,5522,5523,5526],{},[495,5524,5525],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[495,5527,5528],{},"switch优点：结构清晰，执行效率高",[402,5530,5532],{"id":5531},"_162循环结构","1.6.2循环结构",[492,5534,5535],{},[495,5536,5537],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[31,5539,5541],{"className":3476,"code":5540,"language":3478,"meta":36,"style":36},"\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",[26,5542,5543,5548,5556,5560,5573,5587,5591,5611,5621,5625,5637],{"__ignoreMap":36},[40,5544,5545],{"class":42,"line":43},[40,5546,5547],{"class":997},"\u002F\u002F打印0-9数字\n",[40,5549,5550,5552,5554],{"class":42,"line":54},[40,5551,3491],{"class":1283},[40,5553,5299],{"class":596},[40,5555,5302],{"class":50},[40,5557,5558],{"class":42,"line":70},[40,5559,4888],{"class":50},[40,5561,5562,5564,5567,5569,5571],{"class":42,"line":78},[40,5563,5311],{"class":1283},[40,5565,5566],{"class":50}," num",[40,5568,1284],{"class":1283},[40,5570,3672],{"class":63},[40,5572,4637],{"class":50},[40,5574,5575,5578,5581,5583,5585],{"class":42,"line":86},[40,5576,5577],{"class":1283},"    while",[40,5579,5580],{"class":50},"(num",[40,5582,4387],{"class":1283},[40,5584,3925],{"class":63},[40,5586,1811],{"class":50},[40,5588,5589],{"class":42,"line":100},[40,5590,5356],{"class":50},[40,5592,5593,5596,5599,5601,5603,5605,5608],{"class":42,"line":108},[40,5594,5595],{"class":596},"       std",[40,5597,5598],{"class":50},"::cout",[40,5600,4520],{"class":1283},[40,5602,5000],{"class":50},[40,5604,4520],{"class":1283},[40,5606,5607],{"class":596},"std",[40,5609,5610],{"class":50},"::endl;\n",[40,5612,5613,5616,5619],{"class":42,"line":121},[40,5614,5615],{"class":50},"        num",[40,5617,5618],{"class":1283},"++",[40,5620,4637],{"class":50},[40,5622,5623],{"class":42,"line":134},[40,5624,5513],{"class":50},[40,5626,5627,5630,5632,5635],{"class":42,"line":146},[40,5628,5629],{"class":596},"    system",[40,5631,3488],{"class":50},[40,5633,5634],{"class":94},"\"pause\"",[40,5636,1811],{"class":50},[40,5638,5639],{"class":42,"line":154},[40,5640,4907],{"class":50},[19,5642,5643],{},"注意：写好循环条件，避免死循环情况",[31,5645,5647],{"className":3476,"code":5646,"language":3478,"meta":36,"style":36},"\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",[26,5648,5649,5654,5661,5668,5678,5686,5690,5695,5722,5726,5731,5739,5766,5771,5776,5789,5799,5803,5813,5818,5831,5836,5850,5855,5870,5874,5887,5891,5896,5900,5914,5922,5927,5933,5939,5944],{"__ignoreMap":36},[40,5650,5651],{"class":42,"line":43},[40,5652,5653],{"class":997},"\u002F\u002F循环结构-猜数字\n",[40,5655,5656,5658],{"class":42,"line":54},[40,5657,5276],{"class":1283},[40,5659,5660],{"class":94}," \u003Ciostream>\n",[40,5662,5663,5665],{"class":42,"line":70},[40,5664,5276],{"class":1283},[40,5666,5667],{"class":94}," \u003Cctime>\n",[40,5669,5670,5672,5674,5676],{"class":42,"line":78},[40,5671,5284],{"class":1283},[40,5673,5287],{"class":1283},[40,5675,5290],{"class":596},[40,5677,4637],{"class":50},[40,5679,5680,5682,5684],{"class":42,"line":86},[40,5681,3491],{"class":1283},[40,5683,5299],{"class":596},[40,5685,5302],{"class":50},[40,5687,5688],{"class":42,"line":100},[40,5689,4888],{"class":50},[40,5691,5692],{"class":42,"line":108},[40,5693,5694],{"class":997},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[40,5696,5697,5700,5703,5706,5709,5711,5714,5716,5719],{"class":42,"line":121},[40,5698,5699],{"class":596},"    srand",[40,5701,5702],{"class":50},"((",[40,5704,5705],{"class":1283},"unsigned",[40,5707,5708],{"class":1283}," int",[40,5710,3908],{"class":50},[40,5712,5713],{"class":596},"time",[40,5715,3488],{"class":50},[40,5717,5718],{"class":63},"NULL",[40,5720,5721],{"class":50},"));\n",[40,5723,5724],{"class":42,"line":134},[40,5725,1413],{"emptyLinePlaceholder":1412},[40,5727,5728],{"class":42,"line":146},[40,5729,5730],{"class":997},"    \u002F\u002F1.系统生成随机数\n",[40,5732,5733,5736],{"class":42,"line":154},[40,5734,5735],{"class":997},"    \u002F\u002Frand()%100",[40,5737,5738],{"class":997}," \u002F\u002F生成0-99的随机数\n",[40,5740,5741,5743,5745,5747,5750,5753,5755,5757,5759,5761,5763],{"class":42,"line":162},[40,5742,5311],{"class":1283},[40,5744,5566],{"class":50},[40,5746,1284],{"class":1283},[40,5748,5749],{"class":596},"rand",[40,5751,5752],{"class":50},"()",[40,5754,3808],{"class":1283},[40,5756,3791],{"class":63},[40,5758,3960],{"class":1283},[40,5760,3698],{"class":63},[40,5762,3540],{"class":50},[40,5764,5765],{"class":997}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[40,5767,5768],{"class":42,"line":170},[40,5769,5770],{"class":997},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[40,5772,5773],{"class":42,"line":183},[40,5774,5775],{"class":997},"    \u002F\u002F2.玩家猜测\n",[40,5777,5778,5780,5783,5785,5787],{"class":42,"line":196},[40,5779,5311],{"class":1283},[40,5781,5782],{"class":50}," val",[40,5784,1284],{"class":1283},[40,5786,3672],{"class":63},[40,5788,4637],{"class":50},[40,5790,5791,5793,5795,5797],{"class":42,"line":204},[40,5792,5577],{"class":1283},[40,5794,4993],{"class":50},[40,5796,3698],{"class":63},[40,5798,1811],{"class":50},[40,5800,5801],{"class":42,"line":217},[40,5802,5356],{"class":50},[40,5804,5805,5808,5810],{"class":42,"line":230},[40,5806,5807],{"class":50},"        cin",[40,5809,4772],{"class":1283},[40,5811,5812],{"class":50},"val;\n",[40,5814,5815],{"class":42,"line":238},[40,5816,5817],{"class":997},"        \u002F\u002F3.判断玩家猜测\n",[40,5819,5820,5823,5826,5828],{"class":42,"line":251},[40,5821,5822],{"class":1283},"        if",[40,5824,5825],{"class":50},"(val",[40,5827,4387],{"class":1283},[40,5829,5830],{"class":50},"num) \n",[40,5832,5833],{"class":42,"line":264},[40,5834,5835],{"class":50},"        {\n",[40,5837,5838,5841,5843,5846,5848],{"class":42,"line":277},[40,5839,5840],{"class":50},"            cout",[40,5842,4520],{"class":1283},[40,5844,5845],{"class":94},"\"猜小了！\"",[40,5847,4520],{"class":1283},[40,5849,4542],{"class":50},[40,5851,5852],{"class":42,"line":290},[40,5853,5854],{"class":50},"        }\n",[40,5856,5857,5860,5862,5865,5867],{"class":42,"line":298},[40,5858,5859],{"class":1283},"        else",[40,5861,5035],{"class":1283},[40,5863,5864],{"class":50}," (val",[40,5866,4437],{"class":1283},[40,5868,5869],{"class":50},"num)\n",[40,5871,5872],{"class":42,"line":310},[40,5873,5835],{"class":50},[40,5875,5876,5878,5880,5883,5885],{"class":42,"line":5086},[40,5877,5840],{"class":50},[40,5879,4520],{"class":1283},[40,5881,5882],{"class":94},"\"猜大了！\"",[40,5884,4520],{"class":1283},[40,5886,4542],{"class":50},[40,5888,5889],{"class":42,"line":5091},[40,5890,5854],{"class":50},[40,5892,5893],{"class":42,"line":5105},[40,5894,5895],{"class":1283},"        else\n",[40,5897,5898],{"class":42,"line":5110},[40,5899,5835],{"class":50},[40,5901,5903,5905,5907,5910,5912],{"class":42,"line":5902},30,[40,5904,5840],{"class":50},[40,5906,4520],{"class":1283},[40,5908,5909],{"class":94},"\"猜对了！\"",[40,5911,4520],{"class":1283},[40,5913,4542],{"class":50},[40,5915,5917,5920],{"class":42,"line":5916},31,[40,5918,5919],{"class":1283},"            break",[40,5921,4637],{"class":50},[40,5923,5925],{"class":42,"line":5924},32,[40,5926,5854],{"class":50},[40,5928,5930],{"class":42,"line":5929},33,[40,5931,5932],{"class":997},"        \u002F\u002F猜对 退出游戏\n",[40,5934,5936],{"class":42,"line":5935},34,[40,5937,5938],{"class":997},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[40,5940,5942],{"class":42,"line":5941},35,[40,5943,5513],{"class":50},[40,5945,5947],{"class":42,"line":5946},36,[40,5948,4907],{"class":50},[492,5950,5951],{"start":54},[495,5952,5953,5954,5957],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[409,5955,5956],{},"do...while会先执行一次循环语句","，在判断循环语句",[31,5959,5961],{"className":3476,"code":5960,"language":3478,"meta":36,"style":36},"\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",[26,5962,5963,5968,5976,5980,5992,5999,6003,6020,6027,6031,6044,6054],{"__ignoreMap":36},[40,5964,5965],{"class":42,"line":43},[40,5966,5967],{"class":997},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[40,5969,5970,5972,5974],{"class":42,"line":54},[40,5971,3491],{"class":1283},[40,5973,5299],{"class":596},[40,5975,5302],{"class":50},[40,5977,5978],{"class":42,"line":70},[40,5979,4888],{"class":50},[40,5981,5982,5984,5986,5988,5990],{"class":42,"line":78},[40,5983,5311],{"class":1283},[40,5985,5566],{"class":50},[40,5987,1284],{"class":1283},[40,5989,3672],{"class":63},[40,5991,4637],{"class":50},[40,5993,5994,5997],{"class":42,"line":86},[40,5995,5996],{"class":1283},"    do",[40,5998,67],{"class":50},[40,6000,6001],{"class":42,"line":100},[40,6002,5356],{"class":50},[40,6004,6005,6008,6010,6012,6014,6016,6018],{"class":42,"line":108},[40,6006,6007],{"class":596},"        std",[40,6009,5598],{"class":50},[40,6011,4520],{"class":1283},[40,6013,5000],{"class":50},[40,6015,4520],{"class":1283},[40,6017,5607],{"class":596},[40,6019,5610],{"class":50},[40,6021,6022,6024],{"class":42,"line":121},[40,6023,5615],{"class":50},[40,6025,6026],{"class":1283},"++\n",[40,6028,6029],{"class":42,"line":134},[40,6030,5513],{"class":50},[40,6032,6033,6035,6037,6039,6041],{"class":42,"line":146},[40,6034,5577],{"class":1283},[40,6036,5580],{"class":50},[40,6038,4387],{"class":1283},[40,6040,3925],{"class":63},[40,6042,6043],{"class":50},");\n",[40,6045,6046,6048,6050,6052],{"class":42,"line":154},[40,6047,5629],{"class":596},[40,6049,3488],{"class":50},[40,6051,5634],{"class":94},[40,6053,6043],{"class":50},[40,6055,6056],{"class":42,"line":162},[40,6057,4907],{"class":50},[19,6059,6060],{},"案例-水仙花数",[19,6062,6063],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,6065,6066],{},"例如：1^3+5^3+3^3=153",[19,6068,6069],{},"请用do...while语句，求出所有3位数的水仙花数",[31,6071,6073],{"className":3476,"code":6072,"language":3478,"meta":36,"style":36},"#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",[26,6074,6075,6081,6091,6099,6103,6108,6120,6126,6130,6135,6151,6167,6183,6198,6217,6232,6280,6284,6296,6300,6308,6312,6326],{"__ignoreMap":36},[40,6076,6077,6079],{"class":42,"line":43},[40,6078,5276],{"class":1283},[40,6080,5660],{"class":94},[40,6082,6083,6085,6087,6089],{"class":42,"line":54},[40,6084,5284],{"class":1283},[40,6086,5287],{"class":1283},[40,6088,5290],{"class":596},[40,6090,4637],{"class":50},[40,6092,6093,6095,6097],{"class":42,"line":70},[40,6094,3491],{"class":1283},[40,6096,5299],{"class":596},[40,6098,5302],{"class":50},[40,6100,6101],{"class":42,"line":78},[40,6102,4888],{"class":50},[40,6104,6105],{"class":42,"line":86},[40,6106,6107],{"class":997},"    \u002F\u002F1.先打印所有三位数字\n",[40,6109,6110,6112,6114,6116,6118],{"class":42,"line":100},[40,6111,5311],{"class":1283},[40,6113,5566],{"class":50},[40,6115,1284],{"class":1283},[40,6117,3791],{"class":63},[40,6119,4637],{"class":50},[40,6121,6122,6124],{"class":42,"line":108},[40,6123,5996],{"class":1283},[40,6125,67],{"class":50},[40,6127,6128],{"class":42,"line":121},[40,6129,5356],{"class":50},[40,6131,6132],{"class":42,"line":134},[40,6133,6134],{"class":997},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[40,6136,6137,6140,6142,6144,6146,6148],{"class":42,"line":146},[40,6138,6139],{"class":1283},"        int",[40,6141,4741],{"class":50},[40,6143,1284],{"class":1283},[40,6145,3672],{"class":63},[40,6147,3540],{"class":50},[40,6149,6150],{"class":997}," \u002F\u002F个位\n",[40,6152,6153,6155,6158,6160,6162,6164],{"class":42,"line":154},[40,6154,6139],{"class":1283},[40,6156,6157],{"class":50}," b",[40,6159,1284],{"class":1283},[40,6161,3672],{"class":63},[40,6163,3540],{"class":50},[40,6165,6166],{"class":997}," \u002F\u002F十位\n",[40,6168,6169,6171,6174,6176,6178,6180],{"class":42,"line":162},[40,6170,6139],{"class":1283},[40,6172,6173],{"class":50}," c",[40,6175,1284],{"class":1283},[40,6177,3672],{"class":63},[40,6179,3540],{"class":50},[40,6181,6182],{"class":997}," \u002F\u002F百位\n",[40,6184,6185,6188,6190,6192,6194,6196],{"class":42,"line":170},[40,6186,6187],{"class":50},"        a",[40,6189,1284],{"class":1283},[40,6191,5000],{"class":50},[40,6193,3808],{"class":1283},[40,6195,3925],{"class":63},[40,6197,4637],{"class":50},[40,6199,6200,6203,6205,6207,6209,6211,6213,6215],{"class":42,"line":183},[40,6201,6202],{"class":50},"        b",[40,6204,1284],{"class":1283},[40,6206,5000],{"class":50},[40,6208,4063],{"class":1283},[40,6210,3925],{"class":63},[40,6212,3808],{"class":1283},[40,6214,3925],{"class":63},[40,6216,4637],{"class":50},[40,6218,6219,6222,6224,6226,6228,6230],{"class":42,"line":196},[40,6220,6221],{"class":50},"        c",[40,6223,1284],{"class":1283},[40,6225,5000],{"class":50},[40,6227,4063],{"class":1283},[40,6229,3791],{"class":63},[40,6231,4637],{"class":50},[40,6233,6234,6236,6238,6240,6242,6244,6246,6248,6250,6252,6254,6256,6258,6260,6262,6264,6266,6268,6271,6274,6277],{"class":42,"line":204},[40,6235,5822],{"class":1283},[40,6237,5168],{"class":50},[40,6239,3934],{"class":1283},[40,6241,2106],{"class":50},[40,6243,3934],{"class":1283},[40,6245,2106],{"class":50},[40,6247,3960],{"class":1283},[40,6249,3743],{"class":50},[40,6251,3934],{"class":1283},[40,6253,3743],{"class":50},[40,6255,3934],{"class":1283},[40,6257,3743],{"class":50},[40,6259,3960],{"class":1283},[40,6261,3768],{"class":50},[40,6263,3934],{"class":1283},[40,6265,3768],{"class":50},[40,6267,3934],{"class":1283},[40,6269,6270],{"class":50},"c ",[40,6272,6273],{"class":1283},"==",[40,6275,6276],{"class":50}," num)",[40,6278,6279],{"class":997}," \u002F\u002F如果是水仙花数，才打印\n",[40,6281,6282],{"class":42,"line":217},[40,6283,5835],{"class":50},[40,6285,6286,6288,6290,6292,6294],{"class":42,"line":230},[40,6287,5840],{"class":50},[40,6289,4520],{"class":1283},[40,6291,5000],{"class":50},[40,6293,4520],{"class":1283},[40,6295,4542],{"class":50},[40,6297,6298],{"class":42,"line":238},[40,6299,5854],{"class":50},[40,6301,6302,6304,6306],{"class":42,"line":251},[40,6303,5615],{"class":50},[40,6305,5618],{"class":1283},[40,6307,4637],{"class":50},[40,6309,6310],{"class":42,"line":264},[40,6311,5513],{"class":50},[40,6313,6314,6316,6319,6321,6324],{"class":42,"line":277},[40,6315,5577],{"class":1283},[40,6317,6318],{"class":50}," (num ",[40,6320,4387],{"class":1283},[40,6322,6323],{"class":63}," 1000",[40,6325,6043],{"class":50},[40,6327,6328],{"class":42,"line":290},[40,6329,4907],{"class":50},[492,6331,6332],{"start":70},[495,6333,6334],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[31,6336,6338],{"className":3476,"code":6337,"language":3478,"meta":36,"style":36},"\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",[26,6339,6340,6345,6374,6378,6390,6394,6399,6410,6417,6421,6435,6439,6446,6450,6462,6471],{"__ignoreMap":36},[40,6341,6342],{"class":42,"line":43},[40,6343,6344],{"class":997},"\u002F\u002F从数字0-9打印\n",[40,6346,6347,6350,6352,6354,6357,6359,6361,6364,6366,6368,6370,6372],{"class":42,"line":54},[40,6348,6349],{"class":1283},"for",[40,6351,3488],{"class":50},[40,6353,3491],{"class":1283},[40,6355,6356],{"class":50}," i",[40,6358,1284],{"class":1283},[40,6360,3672],{"class":63},[40,6362,6363],{"class":50},";i",[40,6365,4387],{"class":1283},[40,6367,3925],{"class":63},[40,6369,6363],{"class":50},[40,6371,5618],{"class":1283},[40,6373,1811],{"class":50},[40,6375,6376],{"class":42,"line":70},[40,6377,4888],{"class":50},[40,6379,6380,6382,6384,6386,6388],{"class":42,"line":78},[40,6381,4893],{"class":50},[40,6383,4520],{"class":1283},[40,6385,3920],{"class":50},[40,6387,4520],{"class":1283},[40,6389,4542],{"class":50},[40,6391,6392],{"class":42,"line":86},[40,6393,4907],{"class":50},[40,6395,6396],{"class":42,"line":100},[40,6397,6398],{"class":997},"\u002F\u002F上式可以进行拆分\n",[40,6400,6401,6403,6405,6407],{"class":42,"line":108},[40,6402,3491],{"class":1283},[40,6404,6356],{"class":50},[40,6406,1284],{"class":1283},[40,6408,6409],{"class":63},"0\n",[40,6411,6412,6414],{"class":42,"line":121},[40,6413,6349],{"class":1283},[40,6415,6416],{"class":50},"(;;;)\n",[40,6418,6419],{"class":42,"line":134},[40,6420,4888],{"class":50},[40,6422,6423,6426,6429,6431,6433],{"class":42,"line":146},[40,6424,6425],{"class":1283},"    if",[40,6427,6428],{"class":50},"(i",[40,6430,5041],{"class":1283},[40,6432,3925],{"class":63},[40,6434,1811],{"class":50},[40,6436,6437],{"class":42,"line":154},[40,6438,5356],{"class":50},[40,6440,6441,6444],{"class":42,"line":162},[40,6442,6443],{"class":1283},"        break",[40,6445,4637],{"class":50},[40,6447,6448],{"class":42,"line":170},[40,6449,5513],{"class":50},[40,6451,6452,6454,6456,6458,6460],{"class":42,"line":183},[40,6453,4893],{"class":50},[40,6455,4520],{"class":1283},[40,6457,3920],{"class":50},[40,6459,4520],{"class":1283},[40,6461,4542],{"class":50},[40,6463,6464,6467,6469],{"class":42,"line":196},[40,6465,6466],{"class":50},"    i",[40,6468,5618],{"class":1283},[40,6470,4637],{"class":50},[40,6472,6473],{"class":42,"line":204},[40,6474,4907],{"class":50},[19,6476,6477],{},"小练习",[31,6479,6481],{"className":3476,"code":6480,"language":3478,"meta":36,"style":36},"#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",[26,6482,6483,6489,6499,6507,6511,6516,6521,6549,6553,6558,6563,6604,6608,6621,6625,6629,6633,6645,6649,6653],{"__ignoreMap":36},[40,6484,6485,6487],{"class":42,"line":43},[40,6486,5276],{"class":1283},[40,6488,5279],{"class":94},[40,6490,6491,6493,6495,6497],{"class":42,"line":54},[40,6492,5284],{"class":1283},[40,6494,5287],{"class":1283},[40,6496,5290],{"class":596},[40,6498,4637],{"class":50},[40,6500,6501,6503,6505],{"class":42,"line":70},[40,6502,3491],{"class":1283},[40,6504,5299],{"class":596},[40,6506,5302],{"class":50},[40,6508,6509],{"class":42,"line":78},[40,6510,4888],{"class":50},[40,6512,6513],{"class":42,"line":86},[40,6514,6515],{"class":997},"    \u002F\u002F敲桌子案例\n",[40,6517,6518],{"class":42,"line":100},[40,6519,6520],{"class":997},"    \u002F\u002F1.先输出1-100的数字\n",[40,6522,6523,6526,6528,6530,6532,6534,6536,6539,6541,6543,6545,6547],{"class":42,"line":108},[40,6524,6525],{"class":1283},"    for",[40,6527,3488],{"class":50},[40,6529,3491],{"class":1283},[40,6531,6356],{"class":50},[40,6533,1284],{"class":1283},[40,6535,3698],{"class":63},[40,6537,6538],{"class":50},"; i",[40,6540,4930],{"class":1283},[40,6542,3791],{"class":63},[40,6544,6538],{"class":50},[40,6546,5618],{"class":1283},[40,6548,1811],{"class":50},[40,6550,6551],{"class":42,"line":121},[40,6552,5356],{"class":50},[40,6554,6555],{"class":42,"line":134},[40,6556,6557],{"class":997},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[40,6559,6560],{"class":42,"line":146},[40,6561,6562],{"class":997},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[40,6564,6565,6567,6569,6571,6573,6575,6577,6580,6582,6584,6586,6588,6590,6592,6594,6596,6598,6600,6602],{"class":42,"line":154},[40,6566,5822],{"class":1283},[40,6568,6428],{"class":50},[40,6570,3808],{"class":1283},[40,6572,3849],{"class":63},[40,6574,6273],{"class":1283},[40,6576,3672],{"class":63},[40,6578,6579],{"class":1283}," ||",[40,6581,6356],{"class":50},[40,6583,3808],{"class":1283},[40,6585,3925],{"class":63},[40,6587,6273],{"class":1283},[40,6589,3849],{"class":63},[40,6591,6579],{"class":1283},[40,6593,6356],{"class":50},[40,6595,4063],{"class":1283},[40,6597,3925],{"class":63},[40,6599,6273],{"class":1283},[40,6601,3849],{"class":63},[40,6603,1811],{"class":50},[40,6605,6606],{"class":42,"line":162},[40,6607,5835],{"class":50},[40,6609,6610,6612,6614,6617,6619],{"class":42,"line":170},[40,6611,5840],{"class":50},[40,6613,4520],{"class":1283},[40,6615,6616],{"class":94},"\"敲桌子\"",[40,6618,4520],{"class":1283},[40,6620,4542],{"class":50},[40,6622,6623],{"class":42,"line":183},[40,6624,5854],{"class":50},[40,6626,6627],{"class":42,"line":196},[40,6628,5895],{"class":1283},[40,6630,6631],{"class":42,"line":204},[40,6632,5835],{"class":50},[40,6634,6635,6637,6639,6641,6643],{"class":42,"line":217},[40,6636,5840],{"class":50},[40,6638,4520],{"class":1283},[40,6640,3920],{"class":50},[40,6642,4520],{"class":1283},[40,6644,4542],{"class":50},[40,6646,6647],{"class":42,"line":230},[40,6648,5854],{"class":50},[40,6650,6651],{"class":42,"line":238},[40,6652,5513],{"class":50},[40,6654,6655],{"class":42,"line":251},[40,6656,4907],{"class":50},[19,6658,6659],{},"嵌套实现星图",[31,6661,6663],{"className":3476,"code":6662,"language":3478,"meta":36,"style":36},"#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",[26,6664,6665,6671,6681,6689,6693,6719,6723,6752,6756,6767,6771,6780,6784],{"__ignoreMap":36},[40,6666,6667,6669],{"class":42,"line":43},[40,6668,5276],{"class":1283},[40,6670,5279],{"class":94},[40,6672,6673,6675,6677,6679],{"class":42,"line":54},[40,6674,5284],{"class":1283},[40,6676,5287],{"class":1283},[40,6678,5290],{"class":596},[40,6680,4637],{"class":50},[40,6682,6683,6685,6687],{"class":42,"line":70},[40,6684,3491],{"class":1283},[40,6686,5299],{"class":596},[40,6688,5302],{"class":50},[40,6690,6691],{"class":42,"line":78},[40,6692,4888],{"class":50},[40,6694,6695,6697,6699,6701,6703,6705,6707,6709,6711,6713,6715,6717],{"class":42,"line":86},[40,6696,6525],{"class":1283},[40,6698,4993],{"class":50},[40,6700,3491],{"class":1283},[40,6702,6356],{"class":50},[40,6704,1284],{"class":1283},[40,6706,3672],{"class":63},[40,6708,6363],{"class":50},[40,6710,4387],{"class":1283},[40,6712,3925],{"class":63},[40,6714,6363],{"class":50},[40,6716,5618],{"class":1283},[40,6718,1811],{"class":50},[40,6720,6721],{"class":42,"line":100},[40,6722,5356],{"class":50},[40,6724,6725,6728,6730,6732,6735,6737,6739,6742,6744,6746,6748,6750],{"class":42,"line":108},[40,6726,6727],{"class":1283},"        for",[40,6729,4993],{"class":50},[40,6731,3491],{"class":1283},[40,6733,6734],{"class":50}," j",[40,6736,1284],{"class":1283},[40,6738,3672],{"class":63},[40,6740,6741],{"class":50},";j",[40,6743,4387],{"class":1283},[40,6745,3925],{"class":63},[40,6747,6741],{"class":50},[40,6749,5618],{"class":1283},[40,6751,1811],{"class":50},[40,6753,6754],{"class":42,"line":121},[40,6755,5835],{"class":50},[40,6757,6758,6760,6762,6765],{"class":42,"line":134},[40,6759,5840],{"class":50},[40,6761,4520],{"class":1283},[40,6763,6764],{"class":94},"\"*\"",[40,6766,4637],{"class":50},[40,6768,6769],{"class":42,"line":146},[40,6770,5854],{"class":50},[40,6772,6773,6776,6778],{"class":42,"line":154},[40,6774,6775],{"class":50},"        cout",[40,6777,4520],{"class":1283},[40,6779,4542],{"class":50},[40,6781,6782],{"class":42,"line":162},[40,6783,5513],{"class":50},[40,6785,6786],{"class":42,"line":170},[40,6787,4907],{"class":50},[19,6789,6790],{},"乘法口诀表",[31,6792,6794],{"className":3476,"code":6793,"language":3478,"meta":36,"style":36},"#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",[26,6795,6796,6802,6812,6820,6824,6850,6854,6879,6883,6923,6927,6935,6939],{"__ignoreMap":36},[40,6797,6798,6800],{"class":42,"line":43},[40,6799,5276],{"class":1283},[40,6801,5660],{"class":94},[40,6803,6804,6806,6808,6810],{"class":42,"line":54},[40,6805,5284],{"class":1283},[40,6807,5287],{"class":1283},[40,6809,5290],{"class":596},[40,6811,4637],{"class":50},[40,6813,6814,6816,6818],{"class":42,"line":70},[40,6815,3491],{"class":1283},[40,6817,5299],{"class":596},[40,6819,5302],{"class":50},[40,6821,6822],{"class":42,"line":78},[40,6823,4888],{"class":50},[40,6825,6826,6828,6830,6832,6834,6836,6838,6840,6842,6844,6846,6848],{"class":42,"line":86},[40,6827,6525],{"class":1283},[40,6829,3488],{"class":50},[40,6831,3491],{"class":1283},[40,6833,6356],{"class":50},[40,6835,1284],{"class":1283},[40,6837,3698],{"class":63},[40,6839,6363],{"class":50},[40,6841,4387],{"class":1283},[40,6843,3925],{"class":63},[40,6845,6363],{"class":50},[40,6847,5618],{"class":1283},[40,6849,1811],{"class":50},[40,6851,6852],{"class":42,"line":100},[40,6853,5356],{"class":50},[40,6855,6856,6858,6860,6862,6864,6866,6868,6870,6872,6875,6877],{"class":42,"line":108},[40,6857,6727],{"class":1283},[40,6859,3488],{"class":50},[40,6861,3491],{"class":1283},[40,6863,6734],{"class":50},[40,6865,1284],{"class":1283},[40,6867,3698],{"class":63},[40,6869,6741],{"class":50},[40,6871,4930],{"class":1283},[40,6873,6874],{"class":50},"i;j",[40,6876,5618],{"class":1283},[40,6878,1811],{"class":50},[40,6880,6881],{"class":42,"line":121},[40,6882,5835],{"class":50},[40,6884,6885,6887,6889,6891,6893,6895,6897,6899,6901,6904,6906,6908,6910,6912,6914,6917,6919,6921],{"class":42,"line":134},[40,6886,5840],{"class":50},[40,6888,4520],{"class":1283},[40,6890,3946],{"class":50},[40,6892,4520],{"class":1283},[40,6894,6764],{"class":94},[40,6896,4520],{"class":1283},[40,6898,3920],{"class":50},[40,6900,4520],{"class":1283},[40,6902,6903],{"class":94},"\"=\"",[40,6905,4520],{"class":1283},[40,6907,3920],{"class":50},[40,6909,3934],{"class":1283},[40,6911,3946],{"class":50},[40,6913,4520],{"class":1283},[40,6915,6916],{"class":94},"'",[40,6918,4577],{"class":63},[40,6920,6916],{"class":94},[40,6922,4637],{"class":50},[40,6924,6925],{"class":42,"line":146},[40,6926,5854],{"class":50},[40,6928,6929,6931,6933],{"class":42,"line":154},[40,6930,6775],{"class":50},[40,6932,4520],{"class":1283},[40,6934,4542],{"class":50},[40,6936,6937],{"class":42,"line":162},[40,6938,5513],{"class":50},[40,6940,6941],{"class":42,"line":170},[40,6942,4907],{"class":50},[402,6944,6946],{"id":6945},"_163跳出语句","1.6.3跳出语句",[492,6948,6949],{},[495,6950,6951],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,6953,6954],{},"break使用时机：",[1338,6956,6957,6960,6963],{},[495,6958,6959],{},"出现在switch条件语句中，作用是终止case并跳出switch",[495,6961,6962],{},"出现在循环结构中，作用是跳出当前的循环结构",[495,6964,6965],{},"出现在嵌套循环中，跳出最近的内层循环语句",[492,6967,6968,6971],{"start":54},[495,6969,6970],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[495,6972,6973],{},"goto语句\n语法：goto 标记;",[19,6975,6976],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[31,6978,6980],{"className":3476,"code":6979,"language":3478,"meta":36,"style":36},"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",[26,6981,6982,6990,6994,7007,7017,7030,7043,7056,7063,7079],{"__ignoreMap":36},[40,6983,6984,6986,6988],{"class":42,"line":43},[40,6985,3491],{"class":1283},[40,6987,5299],{"class":596},[40,6989,5302],{"class":50},[40,6991,6992],{"class":42,"line":54},[40,6993,4888],{"class":50},[40,6995,6996,6998,7000,7003,7005],{"class":42,"line":70},[40,6997,4893],{"class":50},[40,6999,4520],{"class":1283},[40,7001,7002],{"class":94},"\"1\"",[40,7004,4520],{"class":1283},[40,7006,4542],{"class":50},[40,7008,7009,7012,7015],{"class":42,"line":78},[40,7010,7011],{"class":1283},"    goto",[40,7013,7014],{"class":596}," FLAG",[40,7016,4637],{"class":50},[40,7018,7019,7021,7023,7026,7028],{"class":42,"line":86},[40,7020,4893],{"class":50},[40,7022,4520],{"class":1283},[40,7024,7025],{"class":94},"\"2\"",[40,7027,4520],{"class":1283},[40,7029,4542],{"class":50},[40,7031,7032,7034,7036,7039,7041],{"class":42,"line":100},[40,7033,4893],{"class":50},[40,7035,4520],{"class":1283},[40,7037,7038],{"class":94},"\"3\"",[40,7040,4520],{"class":1283},[40,7042,4542],{"class":50},[40,7044,7045,7047,7049,7052,7054],{"class":42,"line":108},[40,7046,4893],{"class":50},[40,7048,4520],{"class":1283},[40,7050,7051],{"class":94},"\"4\"",[40,7053,4520],{"class":1283},[40,7055,4542],{"class":50},[40,7057,7058,7061],{"class":42,"line":121},[40,7059,7060],{"class":596},"    FLAG",[40,7062,332],{"class":50},[40,7064,7065,7067,7069,7072,7074,7076],{"class":42,"line":134},[40,7066,4893],{"class":50},[40,7068,4520],{"class":1283},[40,7070,7071],{"class":94},"\"5\"",[40,7073,4520],{"class":1283},[40,7075,4585],{"class":50},[40,7077,7078],{"class":997},"\u002F\u002F跳过了2,3,4,直接到5\n",[40,7080,7081],{"class":42,"line":146},[40,7082,4907],{"class":50},[14,7084,7086],{"id":7085},"_17数组","1.7数组",[402,7088,7090],{"id":7089},"_171一维数组","1.7.1一维数组",[492,7092,7093],{},[495,7094,7095],{},"一维数组定义方式",[3619,7097,7098,7108],{},[3622,7099,7100],{},[3625,7101,7102,7105],{},[3628,7103,7104],{},"方式",[3628,7106,7107],{},"注意事项",[3665,7109,7110,7124,7134],{},[3625,7111,7112,7118],{},[3670,7113,7114,7115,3540],{},"数据类型 数组名",[40,7116,7117],{},"数组长度",[3670,7119,7120,7121,7123],{},"这种方式是先定义再arr",[40,7122,3920],{},"赋值",[3625,7125,7126,7131],{},[3670,7127,7114,7128,7130],{},[40,7129,7117],{},"={值1,值2....};",[3670,7132,7133],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[3625,7135,7136,7140],{},[3670,7137,7114,7138,7130],{},[40,7139],{},[3670,7141,7142,7143,7145],{},"int arr",[40,7144],{},";这是不正确的，按照这样的方式定义必须有初始长度",[492,7147,7148],{"start":54},[495,7149,7150],{},"一维数组数组名\n用途：",[1338,7152,7153],{},[495,7154,7155],{},"1.可以统计整个数组在内存中的长度：",[31,7157,7159],{"className":3476,"code":7158,"language":3478,"meta":36,"style":36},"sizeof(arr);\nsizeof(arr[0]);\n",[26,7160,7161,7168],{"__ignoreMap":36},[40,7162,7163,7165],{"class":42,"line":43},[40,7164,3485],{"class":1283},[40,7166,7167],{"class":50},"(arr);\n",[40,7169,7170,7172,7175,7177],{"class":42,"line":54},[40,7171,3485],{"class":1283},[40,7173,7174],{"class":50},"(arr[",[40,7176,3672],{"class":63},[40,7178,7179],{"class":50},"]);\n",[1338,7181,7182],{},[495,7183,7184],{},"2.可以获取数组在内存中的首地址:",[31,7186,7188],{"className":3476,"code":7187,"language":3478,"meta":36,"style":36},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[26,7189,7190,7195,7208,7213],{"__ignoreMap":36},[40,7191,7192],{"class":42,"line":43},[40,7193,7194],{"class":997},"\u002F\u002F查看16进制的首地址\n",[40,7196,7197,7199,7201,7204,7206],{"class":42,"line":54},[40,7198,4712],{"class":50},[40,7200,4520],{"class":1283},[40,7202,7203],{"class":50},"arr",[40,7205,4520],{"class":1283},[40,7207,4542],{"class":50},[40,7209,7210],{"class":42,"line":70},[40,7211,7212],{"class":997},"\u002F\u002F看10进制数\n",[40,7214,7215,7217,7219,7221,7223,7225,7227,7230,7232,7234,7236],{"class":42,"line":78},[40,7216,4712],{"class":50},[40,7218,4520],{"class":1283},[40,7220,3488],{"class":50},[40,7222,3491],{"class":1283},[40,7224,3908],{"class":50},[40,7226,3833],{"class":1283},[40,7228,7229],{"class":50},"arr[",[40,7231,3672],{"class":63},[40,7233,4417],{"class":50},[40,7235,4520],{"class":1283},[40,7237,4542],{"class":50},[19,7239,7240],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1338,7242,7243],{},[495,7244,7245],{},"1️⃣五只小猪称体重",[31,7247,7249],{"className":3476,"code":7248,"language":3478,"meta":36,"style":36},"#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",[26,7250,7251,7257,7267,7275,7279,7319,7332,7358,7362,7374,7378,7388,7392,7396,7409,7419],{"__ignoreMap":36},[40,7252,7253,7255],{"class":42,"line":43},[40,7254,5276],{"class":1283},[40,7256,5279],{"class":94},[40,7258,7259,7261,7263,7265],{"class":42,"line":54},[40,7260,5284],{"class":1283},[40,7262,5287],{"class":1283},[40,7264,5290],{"class":596},[40,7266,4637],{"class":50},[40,7268,7269,7271,7273],{"class":42,"line":70},[40,7270,3491],{"class":1283},[40,7272,5299],{"class":596},[40,7274,5302],{"class":50},[40,7276,7277],{"class":42,"line":78},[40,7278,4888],{"class":50},[40,7280,7281,7283,7286,7288,7290,7292,7294,7297,7299,7302,7304,7306,7308,7311,7313,7316],{"class":42,"line":86},[40,7282,5311],{"class":1283},[40,7284,7285],{"class":50}," arr[",[40,7287,3799],{"class":63},[40,7289,4417],{"class":50},[40,7291,1284],{"class":1283},[40,7293,4373],{"class":50},[40,7295,7296],{"class":63},"300",[40,7298,1299],{"class":50},[40,7300,7301],{"class":63},"350",[40,7303,1299],{"class":50},[40,7305,5053],{"class":63},[40,7307,1299],{"class":50},[40,7309,7310],{"class":63},"400",[40,7312,1299],{"class":50},[40,7314,7315],{"class":63},"250",[40,7317,7318],{"class":50},"};\n",[40,7320,7321,7323,7326,7328,7330],{"class":42,"line":100},[40,7322,5311],{"class":1283},[40,7324,7325],{"class":50}," tmp",[40,7327,1284],{"class":1283},[40,7329,3672],{"class":63},[40,7331,4637],{"class":50},[40,7333,7334,7336,7338,7340,7342,7344,7346,7348,7350,7352,7354,7356],{"class":42,"line":108},[40,7335,6525],{"class":1283},[40,7337,4993],{"class":50},[40,7339,3491],{"class":1283},[40,7341,6356],{"class":50},[40,7343,1284],{"class":1283},[40,7345,3672],{"class":63},[40,7347,6363],{"class":50},[40,7349,4387],{"class":1283},[40,7351,3799],{"class":63},[40,7353,6363],{"class":50},[40,7355,5618],{"class":1283},[40,7357,1811],{"class":50},[40,7359,7360],{"class":42,"line":121},[40,7361,5356],{"class":50},[40,7363,7364,7366,7369,7371],{"class":42,"line":134},[40,7365,5822],{"class":1283},[40,7367,7368],{"class":50},"(tmp",[40,7370,4387],{"class":1283},[40,7372,7373],{"class":50},"arr[i])\n",[40,7375,7376],{"class":42,"line":146},[40,7377,5835],{"class":50},[40,7379,7380,7383,7385],{"class":42,"line":154},[40,7381,7382],{"class":50},"            tmp",[40,7384,1284],{"class":1283},[40,7386,7387],{"class":50},"arr[i];\n",[40,7389,7390],{"class":42,"line":162},[40,7391,5854],{"class":50},[40,7393,7394],{"class":42,"line":170},[40,7395,5513],{"class":50},[40,7397,7398,7400,7402,7405,7407],{"class":42,"line":183},[40,7399,4893],{"class":50},[40,7401,4520],{"class":1283},[40,7403,7404],{"class":50},"tmp",[40,7406,4520],{"class":1283},[40,7408,4542],{"class":50},[40,7410,7411,7414,7417],{"class":42,"line":196},[40,7412,7413],{"class":1283},"    return",[40,7415,7416],{"class":63}," 0",[40,7418,4637],{"class":50},[40,7420,7421],{"class":42,"line":204},[40,7422,4907],{"class":50},[1338,7424,7425],{},[495,7426,7427],{},"2️⃣数组元素逆置",[31,7429,7431],{"className":3476,"code":7430,"language":3478,"meta":36,"style":36},"\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",[26,7432,7433,7438,7444,7454,7462,7466,7501,7517,7549,7562,7567,7572,7584,7594,7604,7609,7618,7628,7633,7638,7665,7669,7685,7689,7700,7709],{"__ignoreMap":36},[40,7434,7435],{"class":42,"line":43},[40,7436,7437],{"class":997},"\u002F\u002F元素逆置\n",[40,7439,7440,7442],{"class":42,"line":54},[40,7441,5276],{"class":1283},[40,7443,5279],{"class":94},[40,7445,7446,7448,7450,7452],{"class":42,"line":70},[40,7447,5284],{"class":1283},[40,7449,5287],{"class":1283},[40,7451,5290],{"class":596},[40,7453,4637],{"class":50},[40,7455,7456,7458,7460],{"class":42,"line":78},[40,7457,3491],{"class":1283},[40,7459,5299],{"class":596},[40,7461,5302],{"class":50},[40,7463,7464],{"class":42,"line":86},[40,7465,4888],{"class":50},[40,7467,7468,7471,7473,7475,7477,7479,7481,7483,7485,7487,7489,7491,7493,7495,7497,7499],{"class":42,"line":100},[40,7469,7470],{"class":1283},"   int",[40,7472,7285],{"class":50},[40,7474,3799],{"class":63},[40,7476,4417],{"class":50},[40,7478,1284],{"class":1283},[40,7480,4373],{"class":50},[40,7482,3698],{"class":63},[40,7484,1299],{"class":50},[40,7486,64],{"class":63},[40,7488,1299],{"class":50},[40,7490,3555],{"class":63},[40,7492,1299],{"class":50},[40,7494,3773],{"class":63},[40,7496,1299],{"class":50},[40,7498,3799],{"class":63},[40,7500,7318],{"class":50},[40,7502,7503,7505,7508,7510,7512,7514],{"class":42,"line":108},[40,7504,7470],{"class":1283},[40,7506,7507],{"class":50}," start",[40,7509,1284],{"class":1283},[40,7511,3672],{"class":63},[40,7513,3540],{"class":50},[40,7515,7516],{"class":997},"\u002F\u002F起始下标\n",[40,7518,7519,7521,7524,7527,7530,7533,7535,7537,7540,7542,7544,7546],{"class":42,"line":121},[40,7520,7470],{"class":1283},[40,7522,7523],{"class":50}," end",[40,7525,7526],{"class":1283},"=sizeof",[40,7528,7529],{"class":50},"(arr)",[40,7531,7532],{"class":1283},"\u002Fsizeof",[40,7534,7174],{"class":50},[40,7536,3672],{"class":63},[40,7538,7539],{"class":50},"])",[40,7541,4011],{"class":1283},[40,7543,3698],{"class":63},[40,7545,3540],{"class":50},[40,7547,7548],{"class":997},"\u002F\u002F结束下标\n",[40,7550,7551,7554,7557,7559],{"class":42,"line":134},[40,7552,7553],{"class":1283},"   while",[40,7555,7556],{"class":50}," (start",[40,7558,4387],{"class":1283},[40,7560,7561],{"class":50},"end)\n",[40,7563,7564],{"class":42,"line":146},[40,7565,7566],{"class":50},"   {\n",[40,7568,7569],{"class":42,"line":154},[40,7570,7571],{"class":997},"    \u002F\u002F实现元素互换代码\n",[40,7573,7574,7576,7579,7581],{"class":42,"line":162},[40,7575,5311],{"class":1283},[40,7577,7578],{"class":50}," temp",[40,7580,1284],{"class":1283},[40,7582,7583],{"class":50},"arr[start];\n",[40,7585,7586,7589,7591],{"class":42,"line":170},[40,7587,7588],{"class":50},"    arr[start]",[40,7590,1284],{"class":1283},[40,7592,7593],{"class":50},"arr[end];\n",[40,7595,7596,7599,7601],{"class":42,"line":183},[40,7597,7598],{"class":50},"    arr[end]",[40,7600,1284],{"class":1283},[40,7602,7603],{"class":50},"temp;\n",[40,7605,7606],{"class":42,"line":196},[40,7607,7608],{"class":997},"    \u002F\u002F下标更新\n",[40,7610,7611,7614,7616],{"class":42,"line":204},[40,7612,7613],{"class":50},"    start",[40,7615,5618],{"class":1283},[40,7617,4637],{"class":50},[40,7619,7620,7623,7626],{"class":42,"line":217},[40,7621,7622],{"class":50},"    end",[40,7624,7625],{"class":1283},"--",[40,7627,4637],{"class":50},[40,7629,7630],{"class":42,"line":230},[40,7631,7632],{"class":50},"   }\n",[40,7634,7635],{"class":42,"line":238},[40,7636,7637],{"class":997},"   \u002F\u002F输出逆置后的数组\n",[40,7639,7640,7643,7645,7647,7649,7651,7653,7655,7657,7659,7661,7663],{"class":42,"line":251},[40,7641,7642],{"class":1283},"   for",[40,7644,4993],{"class":50},[40,7646,3491],{"class":1283},[40,7648,6356],{"class":50},[40,7650,1284],{"class":1283},[40,7652,3672],{"class":63},[40,7654,6363],{"class":50},[40,7656,4387],{"class":1283},[40,7658,3799],{"class":63},[40,7660,6363],{"class":50},[40,7662,5618],{"class":1283},[40,7664,1811],{"class":50},[40,7666,7667],{"class":42,"line":264},[40,7668,7566],{"class":50},[40,7670,7671,7673,7675,7678,7680,7683],{"class":42,"line":277},[40,7672,4893],{"class":50},[40,7674,4520],{"class":1283},[40,7676,7677],{"class":50},"arr[i]",[40,7679,4520],{"class":1283},[40,7681,7682],{"class":94},"\" \"",[40,7684,4637],{"class":50},[40,7686,7687],{"class":42,"line":290},[40,7688,7632],{"class":50},[40,7690,7691,7694,7696,7698],{"class":42,"line":298},[40,7692,7693],{"class":596},"   system",[40,7695,3488],{"class":50},[40,7697,5634],{"class":94},[40,7699,6043],{"class":50},[40,7701,7702,7705,7707],{"class":42,"line":310},[40,7703,7704],{"class":1283},"   return",[40,7706,7416],{"class":63},[40,7708,4637],{"class":50},[40,7710,7711],{"class":42,"line":5086},[40,7712,4907],{"class":50},[1338,7714,7715],{},[495,7716,7717],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[31,7719,7721],{"className":3476,"code":7720,"language":3478,"meta":36,"style":36},"\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",[26,7722,7723,7728,7734,7744,7752,7756,7808,7821,7847,7851,7865,7869,7874,7879,7909,7913,7918,7952,7956,7961,7981,7986,7998,8014,8029,8034,8038,8042,8055,8081,8085,8099,8103,8111],{"__ignoreMap":36},[40,7724,7725],{"class":42,"line":43},[40,7726,7727],{"class":997},"\u002F\u002F冒泡排序,升序\n",[40,7729,7730,7732],{"class":42,"line":54},[40,7731,5276],{"class":1283},[40,7733,5279],{"class":94},[40,7735,7736,7738,7740,7742],{"class":42,"line":70},[40,7737,5284],{"class":1283},[40,7739,5287],{"class":1283},[40,7741,5290],{"class":596},[40,7743,4637],{"class":50},[40,7745,7746,7748,7750],{"class":42,"line":78},[40,7747,3491],{"class":1283},[40,7749,5299],{"class":596},[40,7751,5302],{"class":50},[40,7753,7754],{"class":42,"line":86},[40,7755,4888],{"class":50},[40,7757,7758,7760,7762,7764,7767,7769,7772,7774,7776,7778,7780,7782,7784,7786,7788,7790,7792,7794,7796,7798,7800,7802,7804,7806],{"class":42,"line":100},[40,7759,5311],{"class":1283},[40,7761,7285],{"class":50},[40,7763,3899],{"class":63},[40,7765,7766],{"class":50},"] ",[40,7768,1284],{"class":1283},[40,7770,7771],{"class":50}," {",[40,7773,3773],{"class":63},[40,7775,1299],{"class":50},[40,7777,64],{"class":63},[40,7779,1299],{"class":50},[40,7781,3874],{"class":63},[40,7783,1299],{"class":50},[40,7785,3672],{"class":63},[40,7787,1299],{"class":50},[40,7789,3799],{"class":63},[40,7791,1299],{"class":50},[40,7793,3849],{"class":63},[40,7795,1299],{"class":50},[40,7797,3698],{"class":63},[40,7799,1299],{"class":50},[40,7801,3555],{"class":63},[40,7803,1299],{"class":50},[40,7805,3899],{"class":63},[40,7807,7318],{"class":50},[40,7809,7810,7812,7814,7817,7819],{"class":42,"line":108},[40,7811,4893],{"class":50},[40,7813,4520],{"class":1283},[40,7815,7816],{"class":94},"\"排序前：\"",[40,7818,4520],{"class":1283},[40,7820,4542],{"class":50},[40,7822,7823,7825,7827,7829,7831,7833,7835,7837,7839,7841,7843,7845],{"class":42,"line":121},[40,7824,6525],{"class":1283},[40,7826,4993],{"class":50},[40,7828,3491],{"class":1283},[40,7830,6356],{"class":50},[40,7832,1284],{"class":1283},[40,7834,3672],{"class":63},[40,7836,6363],{"class":50},[40,7838,4387],{"class":1283},[40,7840,3899],{"class":63},[40,7842,6363],{"class":50},[40,7844,5618],{"class":1283},[40,7846,1811],{"class":50},[40,7848,7849],{"class":42,"line":134},[40,7850,5356],{"class":50},[40,7852,7853,7855,7857,7859,7861,7863],{"class":42,"line":146},[40,7854,6775],{"class":50},[40,7856,4520],{"class":1283},[40,7858,7677],{"class":50},[40,7860,4520],{"class":1283},[40,7862,7682],{"class":94},[40,7864,4637],{"class":50},[40,7866,7867],{"class":42,"line":154},[40,7868,5513],{"class":50},[40,7870,7871],{"class":42,"line":162},[40,7872,7873],{"class":997},"    \u002F\u002F开始冒泡排序\n",[40,7875,7876],{"class":42,"line":170},[40,7877,7878],{"class":997},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[40,7880,7881,7883,7885,7887,7889,7891,7893,7895,7897,7899,7901,7903,7905,7907],{"class":42,"line":183},[40,7882,6525],{"class":1283},[40,7884,4993],{"class":50},[40,7886,3491],{"class":1283},[40,7888,6356],{"class":50},[40,7890,1284],{"class":1283},[40,7892,3672],{"class":63},[40,7894,6363],{"class":50},[40,7896,4387],{"class":1283},[40,7898,3899],{"class":63},[40,7900,4011],{"class":1283},[40,7902,3698],{"class":63},[40,7904,6363],{"class":50},[40,7906,5618],{"class":1283},[40,7908,1811],{"class":50},[40,7910,7911],{"class":42,"line":196},[40,7912,5356],{"class":50},[40,7914,7915],{"class":42,"line":204},[40,7916,7917],{"class":997},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[40,7919,7920,7922,7924,7926,7928,7930,7932,7934,7936,7938,7940,7942,7944,7946,7948,7950],{"class":42,"line":217},[40,7921,6727],{"class":1283},[40,7923,4993],{"class":50},[40,7925,3491],{"class":1283},[40,7927,6734],{"class":50},[40,7929,1284],{"class":1283},[40,7931,3672],{"class":63},[40,7933,6741],{"class":50},[40,7935,4387],{"class":1283},[40,7937,3899],{"class":63},[40,7939,4011],{"class":1283},[40,7941,3920],{"class":50},[40,7943,4011],{"class":1283},[40,7945,3698],{"class":63},[40,7947,6741],{"class":50},[40,7949,5618],{"class":1283},[40,7951,1811],{"class":50},[40,7953,7954],{"class":42,"line":230},[40,7955,5835],{"class":50},[40,7957,7958],{"class":42,"line":238},[40,7959,7960],{"class":997},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[40,7962,7963,7966,7969,7971,7974,7976,7978],{"class":42,"line":251},[40,7964,7965],{"class":1283},"            if",[40,7967,7968],{"class":50},"(arr[j]",[40,7970,4437],{"class":1283},[40,7972,7973],{"class":50},"arr[j",[40,7975,3960],{"class":1283},[40,7977,3698],{"class":63},[40,7979,7980],{"class":50},"])\n",[40,7982,7983],{"class":42,"line":264},[40,7984,7985],{"class":50},"            {\n",[40,7987,7988,7991,7993,7995],{"class":42,"line":277},[40,7989,7990],{"class":1283},"                int",[40,7992,7578],{"class":50},[40,7994,1284],{"class":1283},[40,7996,7997],{"class":50},"arr[j];\n",[40,7999,8000,8003,8005,8007,8009,8011],{"class":42,"line":290},[40,8001,8002],{"class":50},"                arr[j]",[40,8004,1284],{"class":1283},[40,8006,7973],{"class":50},[40,8008,3960],{"class":1283},[40,8010,3698],{"class":63},[40,8012,8013],{"class":50},"];\n",[40,8015,8016,8019,8021,8023,8025,8027],{"class":42,"line":298},[40,8017,8018],{"class":50},"                arr[j",[40,8020,3960],{"class":1283},[40,8022,3698],{"class":63},[40,8024,4417],{"class":50},[40,8026,1284],{"class":1283},[40,8028,7603],{"class":50},[40,8030,8031],{"class":42,"line":310},[40,8032,8033],{"class":50},"            }\n",[40,8035,8036],{"class":42,"line":5086},[40,8037,5854],{"class":50},[40,8039,8040],{"class":42,"line":5091},[40,8041,5513],{"class":50},[40,8043,8044,8046,8048,8051,8053],{"class":42,"line":5105},[40,8045,4893],{"class":50},[40,8047,4520],{"class":1283},[40,8049,8050],{"class":94},"\"排序后：\"",[40,8052,4520],{"class":1283},[40,8054,4542],{"class":50},[40,8056,8057,8059,8061,8063,8065,8067,8069,8071,8073,8075,8077,8079],{"class":42,"line":5110},[40,8058,6525],{"class":1283},[40,8060,4993],{"class":50},[40,8062,3491],{"class":1283},[40,8064,6356],{"class":50},[40,8066,1284],{"class":1283},[40,8068,3672],{"class":63},[40,8070,6363],{"class":50},[40,8072,4387],{"class":1283},[40,8074,3899],{"class":63},[40,8076,6363],{"class":50},[40,8078,5618],{"class":1283},[40,8080,1811],{"class":50},[40,8082,8083],{"class":42,"line":5902},[40,8084,5356],{"class":50},[40,8086,8087,8089,8091,8093,8095,8097],{"class":42,"line":5916},[40,8088,6775],{"class":50},[40,8090,4520],{"class":1283},[40,8092,7677],{"class":50},[40,8094,4520],{"class":1283},[40,8096,7682],{"class":94},[40,8098,4637],{"class":50},[40,8100,8101],{"class":42,"line":5924},[40,8102,5513],{"class":50},[40,8104,8105,8107,8109],{"class":42,"line":5929},[40,8106,7413],{"class":1283},[40,8108,7416],{"class":63},[40,8110,4637],{"class":50},[40,8112,8113],{"class":42,"line":5935},[40,8114,4907],{"class":50},[402,8116,8118],{"id":8117},"_172二维数组","1.7.2二维数组",[492,8120,8121],{},[495,8122,8123],{},"二维数组的四种定义方式",[3619,8125,8126,8135],{},[3622,8127,8128],{},[3625,8129,8130,8133],{},[3628,8131,8132],{},"序号",[3628,8134,7104],{},[3665,8136,8137,8147,8156,8165,8174],{},[3625,8138,8139,8141],{},[3670,8140,3698],{},[3670,8142,8143,8144,3540],{},"数据类型 数组名[行数]",[40,8145,8146],{},"列数",[3625,8148,8149,8151],{},[3670,8150,64],{},[3670,8152,8143,8153,8155],{},[40,8154,8146],{},"={ {数据1,数据2}，{数据3，数据4}... }",[3625,8157,8158,8160],{},[3670,8159,3555],{},[3670,8161,8143,8162,8164],{},[40,8163,8146],{},"={数据1,数据2,数据3...}",[3625,8166,8167,8169],{},[3670,8168,3773],{},[3670,8170,8171,8172,8164],{},"数据类型 数组名[]",[40,8173,8146],{},[3625,8175,8176,8179],{},[3670,8177,8178],{},"注意：不能只省略列数",[3670,8180],{},[492,8182,8183],{"start":54},[495,8184,8185],{},"二维数组数组名",[1338,8187,8188,8191],{},[495,8189,8190],{},"1.查看二维数组所占内存空间",[495,8192,8193],{},"2.获取二维数组首地址",[19,8195,8196],{},"已知二维数组，求二维数组的行数与列数",[31,8198,8200],{"className":3476,"code":8199,"language":3478,"meta":36,"style":36},"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",[26,8201,8202,8210,8214,8232,8236,8254,8270,8275,8300,8333],{"__ignoreMap":36},[40,8203,8204,8206,8208],{"class":42,"line":43},[40,8205,3491],{"class":1283},[40,8207,5299],{"class":596},[40,8209,5302],{"class":50},[40,8211,8212],{"class":42,"line":54},[40,8213,4888],{"class":50},[40,8215,8216,8218,8220,8222,8225,8227,8229],{"class":42,"line":70},[40,8217,5311],{"class":1283},[40,8219,7285],{"class":50},[40,8221,64],{"class":63},[40,8223,8224],{"class":50},"][",[40,8226,3555],{"class":63},[40,8228,4417],{"class":50},[40,8230,8231],{"class":1283},"=\n",[40,8233,8234],{"class":42,"line":78},[40,8235,5356],{"class":50},[40,8237,8238,8241,8243,8245,8247,8249,8251],{"class":42,"line":86},[40,8239,8240],{"class":50},"        {",[40,8242,3698],{"class":63},[40,8244,1299],{"class":50},[40,8246,64],{"class":63},[40,8248,1299],{"class":50},[40,8250,3555],{"class":63},[40,8252,8253],{"class":50},"},\n",[40,8255,8256,8258,8260,8262,8264,8266,8268],{"class":42,"line":100},[40,8257,8240],{"class":50},[40,8259,3773],{"class":63},[40,8261,1299],{"class":50},[40,8263,3799],{"class":63},[40,8265,1299],{"class":50},[40,8267,3824],{"class":63},[40,8269,4907],{"class":50},[40,8271,8272],{"class":42,"line":108},[40,8273,8274],{"class":50},"    };\n",[40,8276,8277,8279,8281,8284,8286,8288,8290,8292,8294,8296,8298],{"class":42,"line":121},[40,8278,4893],{"class":50},[40,8280,4520],{"class":1283},[40,8282,8283],{"class":94},"\"二维数组的行数\"",[40,8285,4715],{"class":1283},[40,8287,7529],{"class":50},[40,8289,7532],{"class":1283},[40,8291,7174],{"class":50},[40,8293,3672],{"class":63},[40,8295,7539],{"class":50},[40,8297,4520],{"class":1283},[40,8299,4542],{"class":50},[40,8301,8302,8304,8306,8309,8311,8313,8315,8317,8319,8321,8323,8325,8327,8329,8331],{"class":42,"line":134},[40,8303,4893],{"class":50},[40,8305,4520],{"class":1283},[40,8307,8308],{"class":94},"\"二维数组的列数\"",[40,8310,4715],{"class":1283},[40,8312,7174],{"class":50},[40,8314,3672],{"class":63},[40,8316,7539],{"class":50},[40,8318,7532],{"class":1283},[40,8320,7174],{"class":50},[40,8322,3672],{"class":63},[40,8324,8224],{"class":50},[40,8326,3672],{"class":63},[40,8328,7539],{"class":50},[40,8330,4520],{"class":1283},[40,8332,4542],{"class":50},[40,8334,8335],{"class":42,"line":146},[40,8336,4907],{"class":50},[19,8338,8339],{},"查看二维数组首地址",[31,8341,8343],{"className":3476,"code":8342,"language":3478,"meta":36,"style":36},"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",[26,8344,8345,8362,8388,8413],{"__ignoreMap":36},[40,8346,8347,8349,8351,8354,8356,8358,8360],{"class":42,"line":43},[40,8348,4712],{"class":50},[40,8350,4520],{"class":1283},[40,8352,8353],{"class":94},"\"二维数组首地址：\"",[40,8355,4520],{"class":1283},[40,8357,7203],{"class":50},[40,8359,4520],{"class":1283},[40,8361,4542],{"class":50},[40,8363,8364,8366,8368,8371,8373,8375,8377,8380,8382,8384,8386],{"class":42,"line":54},[40,8365,4712],{"class":50},[40,8367,4520],{"class":1283},[40,8369,8370],{"class":94},"\"二维数组第一行的首地址：\"",[40,8372,4520],{"class":1283},[40,8374,3488],{"class":50},[40,8376,3491],{"class":1283},[40,8378,8379],{"class":50},")arr[",[40,8381,3672],{"class":63},[40,8383,4417],{"class":50},[40,8385,4520],{"class":1283},[40,8387,4542],{"class":50},[40,8389,8390,8392,8394,8397,8399,8401,8403,8405,8407,8409,8411],{"class":42,"line":70},[40,8391,4712],{"class":50},[40,8393,4520],{"class":1283},[40,8395,8396],{"class":94},"\"二维数组第二行的首地址：\"",[40,8398,4520],{"class":1283},[40,8400,3488],{"class":50},[40,8402,3491],{"class":1283},[40,8404,8379],{"class":50},[40,8406,3698],{"class":63},[40,8408,4417],{"class":50},[40,8410,4520],{"class":1283},[40,8412,4542],{"class":50},[40,8414,8415,8417,8419,8422,8424,8426,8428,8430,8432,8434,8436,8438,8440,8442,8444,8446],{"class":42,"line":78},[40,8416,4712],{"class":50},[40,8418,4520],{"class":1283},[40,8420,8421],{"class":94},"\"二维数组第一个元素的首地址:\"",[40,8423,4520],{"class":1283},[40,8425,3488],{"class":50},[40,8427,3491],{"class":1283},[40,8429,3908],{"class":50},[40,8431,3833],{"class":1283},[40,8433,7229],{"class":50},[40,8435,3672],{"class":63},[40,8437,8224],{"class":50},[40,8439,3672],{"class":63},[40,8441,4417],{"class":50},[40,8443,4520],{"class":1283},[40,8445,4585],{"class":50},[40,8447,8448],{"class":997},"\u002F\u002F对于数，要加取址符\n",[3384,8450,8451],{},"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":36,"searchDepth":54,"depth":54,"links":8453},[8454,8455,8456,8464,8465,8471,8476],{"id":3431,"depth":54,"text":3432},{"id":3438,"depth":54,"text":3439},{"id":3453,"depth":54,"text":3454,"children":8457},[8458,8459,8460,8461,8462,8463],{"id":3457,"depth":70,"text":3458},{"id":3503,"depth":70,"text":3504},{"id":3568,"depth":70,"text":3569},{"id":4501,"depth":70,"text":4502},{"id":4591,"depth":70,"text":4592},{"id":4687,"depth":70,"text":4688},{"id":4728,"depth":54,"text":4729},{"id":4796,"depth":54,"text":4797,"children":8466},[8467,8468,8469,8470],{"id":4800,"depth":70,"text":4801},{"id":4821,"depth":70,"text":4822},{"id":4830,"depth":70,"text":4831},{"id":4839,"depth":70,"text":4840},{"id":4848,"depth":54,"text":4849,"children":8472},[8473,8474,8475],{"id":4852,"depth":70,"text":4853},{"id":5531,"depth":70,"text":5532},{"id":6945,"depth":70,"text":6946},{"id":7085,"depth":54,"text":7086,"children":8477},[8478,8479],{"id":7089,"depth":70,"text":7090},{"id":8117,"depth":70,"text":8118},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":3423,"description":36},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":8486,"title":8487,"body":8488,"description":36,"extension":3414,"meta":9588,"navigation":1412,"path":9589,"seo":9590,"stem":9591,"__hash__":9592},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":8489,"toc":9580},[8490,8493,8497,8505,8513,8516,8582,8586,8589,8665,8669,8672,8675,8678,8891,8895,8900,8964,8969,9036,9041,9132,9135,9240,9244,9247,9253,9397,9401,9404,9418,9421,9466,9469,9577],[10,8491,8487],{"id":8492},"_2函数",[14,8494,8496],{"id":8495},"_21函数概述","2.1函数概述",[492,8498,8499,8502],{},[495,8500,8501],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[495,8503,8504],{},"语法：",[31,8506,8511],{"className":8507,"code":8509,"language":8510,"meta":36},[8508],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[26,8512,8509],{"__ignoreMap":36},[19,8514,8515],{},"小案例",[31,8517,8519],{"className":3476,"code":8518,"language":3478,"meta":36,"style":36},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[26,8520,8521,8526,8550,8554,8571,8578],{"__ignoreMap":36},[40,8522,8523],{"class":42,"line":43},[40,8524,8525],{"class":997},"\u002F\u002Fnum1,num2形参\n",[40,8527,8528,8530,8533,8535,8537,8541,8543,8545,8548],{"class":42,"line":54},[40,8529,3491],{"class":1283},[40,8531,8532],{"class":596}," add",[40,8534,3488],{"class":50},[40,8536,3491],{"class":1283},[40,8538,8540],{"class":8539},"s4XuR"," num1",[40,8542,1299],{"class":50},[40,8544,3491],{"class":1283},[40,8546,8547],{"class":8539}," num2",[40,8549,1811],{"class":50},[40,8551,8552],{"class":42,"line":70},[40,8553,4888],{"class":50},[40,8555,8556,8558,8561,8563,8566,8568],{"class":42,"line":78},[40,8557,5311],{"class":1283},[40,8559,8560],{"class":50}," sum",[40,8562,1284],{"class":1283},[40,8564,8565],{"class":50},"num1",[40,8567,3960],{"class":1283},[40,8569,8570],{"class":50},"num2;\n",[40,8572,8573,8575],{"class":42,"line":86},[40,8574,7413],{"class":1283},[40,8576,8577],{"class":50}," sum;\n",[40,8579,8580],{"class":42,"line":100},[40,8581,4907],{"class":50},[14,8583,8585],{"id":8584},"_22函数调用","2.2函数调用",[19,8587,8588],{},"调用刚刚写的求和函数",[31,8590,8592],{"className":3476,"code":8591,"language":3478,"meta":36,"style":36},"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",[26,8593,8594,8602,8606,8611,8623,8635,8644,8649,8661],{"__ignoreMap":36},[40,8595,8596,8598,8600],{"class":42,"line":43},[40,8597,3491],{"class":1283},[40,8599,5299],{"class":596},[40,8601,5302],{"class":50},[40,8603,8604],{"class":42,"line":54},[40,8605,4888],{"class":50},[40,8607,8608],{"class":42,"line":70},[40,8609,8610],{"class":997},"    \u002F\u002Fa,b实参\n",[40,8612,8613,8615,8617,8619,8621],{"class":42,"line":78},[40,8614,5311],{"class":1283},[40,8616,4741],{"class":50},[40,8618,1284],{"class":1283},[40,8620,3672],{"class":63},[40,8622,4637],{"class":50},[40,8624,8625,8627,8629,8631,8633],{"class":42,"line":86},[40,8626,5311],{"class":1283},[40,8628,6157],{"class":50},[40,8630,1284],{"class":1283},[40,8632,3672],{"class":63},[40,8634,4637],{"class":50},[40,8636,8637,8639,8641],{"class":42,"line":100},[40,8638,5338],{"class":50},[40,8640,4772],{"class":1283},[40,8642,8643],{"class":50},"a,b;\n",[40,8645,8646],{"class":42,"line":108},[40,8647,8648],{"class":997},"    \u002F\u002F调用函数时，实参值传给了形参\n",[40,8650,8651,8653,8655,8658],{"class":42,"line":121},[40,8652,4893],{"class":50},[40,8654,4520],{"class":1283},[40,8656,8657],{"class":596},"add",[40,8659,8660],{"class":50},"(a,b);\n",[40,8662,8663],{"class":42,"line":134},[40,8664,4907],{"class":50},[14,8666,8668],{"id":8667},"_23值传递","2.3值传递",[19,8670,8671],{},"值传递就是函数调用时实参将数值传给形参",[19,8673,8674],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,8676,8677],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[31,8679,8681],{"className":3476,"code":8680,"language":3478,"meta":36,"style":36},"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",[26,8682,8683,8705,8709,8722,8739,8757,8768,8777,8786,8799,8815,8831,8840,8844,8852,8856,8868,8880,8887],{"__ignoreMap":36},[40,8684,8685,8688,8691,8693,8695,8697,8699,8701,8703],{"class":42,"line":43},[40,8686,8687],{"class":1283},"void",[40,8689,8690],{"class":596}," swap",[40,8692,3488],{"class":50},[40,8694,3491],{"class":1283},[40,8696,8540],{"class":8539},[40,8698,1299],{"class":50},[40,8700,3491],{"class":1283},[40,8702,8547],{"class":8539},[40,8704,1811],{"class":50},[40,8706,8707],{"class":42,"line":54},[40,8708,4888],{"class":50},[40,8710,8711,8713,8715,8718,8720],{"class":42,"line":70},[40,8712,4893],{"class":50},[40,8714,4520],{"class":1283},[40,8716,8717],{"class":94},"\"交换前：\"",[40,8719,4520],{"class":1283},[40,8721,4542],{"class":50},[40,8723,8724,8726,8728,8731,8733,8735,8737],{"class":42,"line":78},[40,8725,4893],{"class":50},[40,8727,4520],{"class":1283},[40,8729,8730],{"class":94},"\"num1=\"",[40,8732,4520],{"class":1283},[40,8734,8565],{"class":50},[40,8736,4520],{"class":1283},[40,8738,4542],{"class":50},[40,8740,8741,8743,8745,8748,8750,8753,8755],{"class":42,"line":86},[40,8742,4893],{"class":50},[40,8744,4520],{"class":1283},[40,8746,8747],{"class":94},"\"num2=\"",[40,8749,4520],{"class":1283},[40,8751,8752],{"class":50},"num2",[40,8754,4520],{"class":1283},[40,8756,4542],{"class":50},[40,8758,8759,8761,8763,8765],{"class":42,"line":100},[40,8760,5311],{"class":1283},[40,8762,7578],{"class":50},[40,8764,1284],{"class":1283},[40,8766,8767],{"class":50},"num1;\n",[40,8769,8770,8773,8775],{"class":42,"line":108},[40,8771,8772],{"class":50},"    num1",[40,8774,1284],{"class":1283},[40,8776,8570],{"class":50},[40,8778,8779,8782,8784],{"class":42,"line":121},[40,8780,8781],{"class":50},"    num2",[40,8783,1284],{"class":1283},[40,8785,7603],{"class":50},[40,8787,8788,8790,8792,8795,8797],{"class":42,"line":134},[40,8789,4893],{"class":50},[40,8791,4520],{"class":1283},[40,8793,8794],{"class":94},"\"交换后：\"",[40,8796,4520],{"class":1283},[40,8798,4542],{"class":50},[40,8800,8801,8803,8805,8807,8809,8811,8813],{"class":42,"line":146},[40,8802,4893],{"class":50},[40,8804,4520],{"class":1283},[40,8806,8730],{"class":94},[40,8808,4520],{"class":1283},[40,8810,8565],{"class":50},[40,8812,4520],{"class":1283},[40,8814,4542],{"class":50},[40,8816,8817,8819,8821,8823,8825,8827,8829],{"class":42,"line":154},[40,8818,4893],{"class":50},[40,8820,4520],{"class":1283},[40,8822,8747],{"class":94},[40,8824,4520],{"class":1283},[40,8826,8752],{"class":50},[40,8828,4520],{"class":1283},[40,8830,4542],{"class":50},[40,8832,8833,8835,8837],{"class":42,"line":162},[40,8834,7413],{"class":1283},[40,8836,3540],{"class":50},[40,8838,8839],{"class":997},"\u002F\u002F或者不写\n",[40,8841,8842],{"class":42,"line":170},[40,8843,4907],{"class":50},[40,8845,8846,8848,8850],{"class":42,"line":183},[40,8847,3491],{"class":1283},[40,8849,5299],{"class":596},[40,8851,5302],{"class":50},[40,8853,8854],{"class":42,"line":196},[40,8855,4888],{"class":50},[40,8857,8858,8860,8862,8864,8866],{"class":42,"line":204},[40,8859,5311],{"class":1283},[40,8861,4741],{"class":50},[40,8863,1284],{"class":1283},[40,8865,3925],{"class":63},[40,8867,4637],{"class":50},[40,8869,8870,8872,8874,8876,8878],{"class":42,"line":217},[40,8871,5311],{"class":1283},[40,8873,6157],{"class":50},[40,8875,1284],{"class":1283},[40,8877,4178],{"class":63},[40,8879,4637],{"class":50},[40,8881,8882,8885],{"class":42,"line":230},[40,8883,8884],{"class":596},"    swap",[40,8886,8660],{"class":50},[40,8888,8889],{"class":42,"line":238},[40,8890,4907],{"class":50},[14,8892,8894],{"id":8893},"_24函数的常见形式","2.4函数的常见形式",[492,8896,8897],{},[495,8898,8899],{},"无参无返",[31,8901,8903],{"className":3476,"code":8902,"language":3478,"meta":36,"style":36},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[26,8904,8905,8914,8918,8931,8935,8943,8947,8952,8960],{"__ignoreMap":36},[40,8906,8907,8909,8912],{"class":42,"line":43},[40,8908,8687],{"class":1283},[40,8910,8911],{"class":596}," test01",[40,8913,5302],{"class":50},[40,8915,8916],{"class":42,"line":54},[40,8917,4888],{"class":50},[40,8919,8920,8922,8924,8927,8929],{"class":42,"line":70},[40,8921,4893],{"class":50},[40,8923,4520],{"class":1283},[40,8925,8926],{"class":94},"\"你好\"",[40,8928,4520],{"class":1283},[40,8930,4542],{"class":50},[40,8932,8933],{"class":42,"line":78},[40,8934,4907],{"class":50},[40,8936,8937,8939,8941],{"class":42,"line":86},[40,8938,3491],{"class":1283},[40,8940,5299],{"class":596},[40,8942,5302],{"class":50},[40,8944,8945],{"class":42,"line":100},[40,8946,4888],{"class":50},[40,8948,8949],{"class":42,"line":108},[40,8950,8951],{"class":997},"    \u002F\u002F函数调用\n",[40,8953,8954,8957],{"class":42,"line":121},[40,8955,8956],{"class":596},"    test01",[40,8958,8959],{"class":50},"();\n",[40,8961,8962],{"class":42,"line":134},[40,8963,4907],{"class":50},[492,8965,8966],{"start":54},[495,8967,8968],{},"有参无返",[31,8970,8972],{"className":3476,"code":8971,"language":3478,"meta":36,"style":36},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[26,8973,8974,8989,8993,9005,9009,9017,9021,9032],{"__ignoreMap":36},[40,8975,8976,8978,8981,8983,8985,8987],{"class":42,"line":43},[40,8977,8687],{"class":1283},[40,8979,8980],{"class":596}," test02",[40,8982,3488],{"class":50},[40,8984,3491],{"class":1283},[40,8986,4741],{"class":8539},[40,8988,1811],{"class":50},[40,8990,8991],{"class":42,"line":54},[40,8992,4888],{"class":50},[40,8994,8995,8997,8999,9001,9003],{"class":42,"line":70},[40,8996,4893],{"class":50},[40,8998,4520],{"class":1283},[40,9000,8926],{"class":94},[40,9002,4520],{"class":1283},[40,9004,4542],{"class":50},[40,9006,9007],{"class":42,"line":78},[40,9008,4907],{"class":50},[40,9010,9011,9013,9015],{"class":42,"line":86},[40,9012,3491],{"class":1283},[40,9014,5299],{"class":596},[40,9016,5302],{"class":50},[40,9018,9019],{"class":42,"line":100},[40,9020,4888],{"class":50},[40,9022,9023,9026,9028,9030],{"class":42,"line":108},[40,9024,9025],{"class":596},"    test02",[40,9027,3488],{"class":50},[40,9029,3791],{"class":63},[40,9031,6043],{"class":50},[40,9033,9034],{"class":42,"line":121},[40,9035,4907],{"class":50},[492,9037,9038],{"start":70},[495,9039,9040],{},"无参有返",[31,9042,9044],{"className":3476,"code":9043,"language":3478,"meta":36,"style":36},"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",[26,9045,9046,9055,9059,9071,9080,9084,9092,9096,9109,9128],{"__ignoreMap":36},[40,9047,9048,9050,9053],{"class":42,"line":43},[40,9049,3491],{"class":1283},[40,9051,9052],{"class":596}," test03",[40,9054,5302],{"class":50},[40,9056,9057],{"class":42,"line":54},[40,9058,4888],{"class":50},[40,9060,9061,9063,9065,9067,9069],{"class":42,"line":70},[40,9062,4893],{"class":50},[40,9064,4520],{"class":1283},[40,9066,8926],{"class":94},[40,9068,4520],{"class":1283},[40,9070,4542],{"class":50},[40,9072,9073,9075,9078],{"class":42,"line":78},[40,9074,7413],{"class":1283},[40,9076,9077],{"class":63}," 100",[40,9079,4637],{"class":50},[40,9081,9082],{"class":42,"line":86},[40,9083,4907],{"class":50},[40,9085,9086,9088,9090],{"class":42,"line":100},[40,9087,3491],{"class":1283},[40,9089,5299],{"class":596},[40,9091,5302],{"class":50},[40,9093,9094],{"class":42,"line":108},[40,9095,4888],{"class":50},[40,9097,9098,9100,9102,9104,9107],{"class":42,"line":121},[40,9099,5311],{"class":1283},[40,9101,8540],{"class":50},[40,9103,1284],{"class":1283},[40,9105,9106],{"class":596},"test03",[40,9108,8959],{"class":50},[40,9110,9111,9113,9115,9117,9119,9121,9123,9125],{"class":42,"line":134},[40,9112,4893],{"class":50},[40,9114,4520],{"class":1283},[40,9116,8730],{"class":94},[40,9118,4520],{"class":1283},[40,9120,8565],{"class":50},[40,9122,4520],{"class":1283},[40,9124,4585],{"class":50},[40,9126,9127],{"class":997}," \u002F\u002F100\n",[40,9129,9130],{"class":42,"line":146},[40,9131,4907],{"class":50},[19,9133,9134],{},"4.有参有返",[31,9136,9138],{"className":3476,"code":9137,"language":3478,"meta":36,"style":36},"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",[26,9139,9140,9155,9159,9172,9178,9182,9191,9195,9207,9221,9236],{"__ignoreMap":36},[40,9141,9142,9144,9147,9149,9151,9153],{"class":42,"line":43},[40,9143,3491],{"class":1283},[40,9145,9146],{"class":596}," test04",[40,9148,3488],{"class":50},[40,9150,3491],{"class":1283},[40,9152,4741],{"class":8539},[40,9154,1811],{"class":50},[40,9156,9157],{"class":42,"line":54},[40,9158,4888],{"class":50},[40,9160,9161,9163,9165,9168,9170],{"class":42,"line":70},[40,9162,4893],{"class":50},[40,9164,4520],{"class":1283},[40,9166,9167],{"class":94},"\"hello\"",[40,9169,4520],{"class":1283},[40,9171,4542],{"class":50},[40,9173,9174,9176],{"class":42,"line":78},[40,9175,7413],{"class":1283},[40,9177,4775],{"class":50},[40,9179,9180],{"class":42,"line":86},[40,9181,4907],{"class":50},[40,9183,9184,9186,9189],{"class":42,"line":100},[40,9185,3491],{"class":1283},[40,9187,9188],{"class":596}," mian",[40,9190,5302],{"class":50},[40,9192,9193],{"class":42,"line":108},[40,9194,4888],{"class":50},[40,9196,9197,9199,9201,9203,9205],{"class":42,"line":121},[40,9198,5311],{"class":1283},[40,9200,6157],{"class":50},[40,9202,1284],{"class":1283},[40,9204,3698],{"class":63},[40,9206,4637],{"class":50},[40,9208,9209,9211,9213,9215,9218],{"class":42,"line":134},[40,9210,5311],{"class":1283},[40,9212,6173],{"class":50},[40,9214,1284],{"class":1283},[40,9216,9217],{"class":596},"test04",[40,9219,9220],{"class":50},"(b);\n",[40,9222,9223,9225,9227,9229,9231,9233],{"class":42,"line":146},[40,9224,4893],{"class":50},[40,9226,4520],{"class":1283},[40,9228,3768],{"class":50},[40,9230,4520],{"class":1283},[40,9232,4585],{"class":50},[40,9234,9235],{"class":997}," \u002F\u002F1\n",[40,9237,9238],{"class":42,"line":154},[40,9239,4907],{"class":50},[14,9241,9243],{"id":9242},"_25函数的声明","2.5函数的声明",[19,9245,9246],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,9248,9249,9250],{},"函数的",[409,9251,9252],{},"声明可以多次，但是函数的定义只能有一次",[31,9254,9256],{"className":3476,"code":9255,"language":3478,"meta":36,"style":36},"\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",[26,9257,9258,9263,9268,9293,9302,9306,9318,9330,9346,9350,9370,9374,9393],{"__ignoreMap":36},[40,9259,9260],{"class":42,"line":43},[40,9261,9262],{"class":997},"\u002F\u002F函数声明\n",[40,9264,9265],{"class":42,"line":54},[40,9266,9267],{"class":997},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[40,9269,9270,9272,9275,9277,9279,9281,9283,9285,9287,9290],{"class":42,"line":70},[40,9271,3491],{"class":1283},[40,9273,9274],{"class":596}," max",[40,9276,3488],{"class":50},[40,9278,3491],{"class":1283},[40,9280,4741],{"class":8539},[40,9282,1299],{"class":50},[40,9284,3491],{"class":1283},[40,9286,6157],{"class":8539},[40,9288,9289],{"class":50},");",[40,9291,9292],{"class":997},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[40,9294,9295,9297,9299],{"class":42,"line":78},[40,9296,3491],{"class":1283},[40,9298,5299],{"class":596},[40,9300,9301],{"class":50},"() \n",[40,9303,9304],{"class":42,"line":86},[40,9305,4888],{"class":50},[40,9307,9308,9310,9312,9314,9316],{"class":42,"line":100},[40,9309,5311],{"class":1283},[40,9311,4741],{"class":50},[40,9313,1284],{"class":1283},[40,9315,3925],{"class":63},[40,9317,4637],{"class":50},[40,9319,9320,9322,9324,9326,9328],{"class":42,"line":108},[40,9321,5311],{"class":1283},[40,9323,6157],{"class":50},[40,9325,1284],{"class":1283},[40,9327,4178],{"class":63},[40,9329,4637],{"class":50},[40,9331,9332,9334,9336,9339,9342,9344],{"class":42,"line":121},[40,9333,4893],{"class":50},[40,9335,4520],{"class":1283},[40,9337,9338],{"class":596},"max",[40,9340,9341],{"class":50},"(a,b)",[40,9343,4520],{"class":1283},[40,9345,4542],{"class":50},[40,9347,9348],{"class":42,"line":134},[40,9349,4907],{"class":50},[40,9351,9352,9354,9356,9358,9360,9362,9364,9366,9368],{"class":42,"line":146},[40,9353,3491],{"class":1283},[40,9355,9274],{"class":596},[40,9357,3488],{"class":50},[40,9359,3491],{"class":1283},[40,9361,4741],{"class":8539},[40,9363,1299],{"class":50},[40,9365,3491],{"class":1283},[40,9367,6157],{"class":8539},[40,9369,1811],{"class":50},[40,9371,9372],{"class":42,"line":154},[40,9373,4888],{"class":50},[40,9375,9376,9378,9380,9382,9384,9386,9388,9390],{"class":42,"line":162},[40,9377,7413],{"class":1283},[40,9379,4741],{"class":50},[40,9381,4437],{"class":1283},[40,9383,3743],{"class":50},[40,9385,4463],{"class":1283},[40,9387,2106],{"class":50},[40,9389,4336],{"class":1283},[40,9391,9392],{"class":50},"b;\n",[40,9394,9395],{"class":42,"line":170},[40,9396,4907],{"class":50},[14,9398,9400],{"id":9399},"_26函数的分文件编写","2.6函数的分文件编写",[19,9402,9403],{},"4个步骤：",[1338,9405,9406,9409,9412,9415],{},[495,9407,9408],{},"1.创建后缀名为.h的头文件",[495,9410,9411],{},"2.创建后缀名为.cpp的源文件",[495,9413,9414],{},"3.在头文件中写函数的定义",[495,9416,9417],{},"4.在源文件中写函数的定义\n示例：",[19,9419,9420],{},"头文件：swap.h",[31,9422,9424],{"className":3476,"code":9423,"language":3478,"meta":36,"style":36},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[26,9425,9426,9432,9442,9446],{"__ignoreMap":36},[40,9427,9428,9430],{"class":42,"line":43},[40,9429,5276],{"class":1283},[40,9431,5279],{"class":94},[40,9433,9434,9436,9438,9440],{"class":42,"line":54},[40,9435,5284],{"class":1283},[40,9437,5287],{"class":1283},[40,9439,5290],{"class":596},[40,9441,4637],{"class":50},[40,9443,9444],{"class":42,"line":70},[40,9445,9262],{"class":997},[40,9447,9448,9450,9452,9454,9456,9458,9460,9462,9464],{"class":42,"line":78},[40,9449,8687],{"class":1283},[40,9451,8690],{"class":596},[40,9453,3488],{"class":50},[40,9455,3491],{"class":1283},[40,9457,4741],{"class":8539},[40,9459,1299],{"class":50},[40,9461,3491],{"class":1283},[40,9463,6157],{"class":8539},[40,9465,6043],{"class":50},[19,9467,9468],{},"源文件：swap.cpp",[31,9470,9472],{"className":3476,"code":9471,"language":3478,"meta":36,"style":36},"#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",[26,9473,9474,9481,9486,9506,9510,9521,9530,9539,9556,9573],{"__ignoreMap":36},[40,9475,9476,9478],{"class":42,"line":43},[40,9477,5276],{"class":1283},[40,9479,9480],{"class":94}," \"swap.h\"\n",[40,9482,9483],{"class":42,"line":54},[40,9484,9485],{"class":997},"\u002F\u002F函数的定义\n",[40,9487,9488,9490,9492,9494,9496,9498,9500,9502,9504],{"class":42,"line":70},[40,9489,8687],{"class":1283},[40,9491,8690],{"class":596},[40,9493,3488],{"class":50},[40,9495,3491],{"class":1283},[40,9497,4741],{"class":8539},[40,9499,1299],{"class":50},[40,9501,3491],{"class":1283},[40,9503,6157],{"class":8539},[40,9505,1811],{"class":50},[40,9507,9508],{"class":42,"line":78},[40,9509,4888],{"class":50},[40,9511,9512,9514,9516,9518],{"class":42,"line":86},[40,9513,5311],{"class":1283},[40,9515,7578],{"class":50},[40,9517,1284],{"class":1283},[40,9519,9520],{"class":50},"a;\n",[40,9522,9523,9526,9528],{"class":42,"line":100},[40,9524,9525],{"class":50},"    a",[40,9527,1284],{"class":1283},[40,9529,9392],{"class":50},[40,9531,9532,9535,9537],{"class":42,"line":108},[40,9533,9534],{"class":50},"    b",[40,9536,1284],{"class":1283},[40,9538,7603],{"class":50},[40,9540,9541,9543,9545,9548,9550,9552,9554],{"class":42,"line":121},[40,9542,4893],{"class":50},[40,9544,4520],{"class":1283},[40,9546,9547],{"class":94},"\"a=\"",[40,9549,4520],{"class":1283},[40,9551,2106],{"class":50},[40,9553,4520],{"class":1283},[40,9555,4542],{"class":50},[40,9557,9558,9560,9562,9565,9567,9569,9571],{"class":42,"line":134},[40,9559,4893],{"class":50},[40,9561,4520],{"class":1283},[40,9563,9564],{"class":94},"\"b=\"",[40,9566,4520],{"class":1283},[40,9568,3743],{"class":50},[40,9570,4520],{"class":1283},[40,9572,4542],{"class":50},[40,9574,9575],{"class":42,"line":146},[40,9576,4907],{"class":50},[3384,9578,9579],{},"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":36,"searchDepth":54,"depth":54,"links":9581},[9582,9583,9584,9585,9586,9587],{"id":8495,"depth":54,"text":8496},{"id":8584,"depth":54,"text":8585},{"id":8667,"depth":54,"text":8668},{"id":8893,"depth":54,"text":8894},{"id":9242,"depth":54,"text":9243},{"id":9399,"depth":54,"text":9400},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":8487,"description":36},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":9594,"title":9595,"body":9596,"description":9603,"extension":3414,"meta":11007,"navigation":1412,"path":11008,"seo":11009,"stem":11010,"__hash__":11011},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":9597,"toc":10997},[9598,9601,9604,9608,9770,9774,9777,9780,9783,9786,9926,9930,9933,9936,9939,10004,10008,10013,10080,10083,10087,10090,10101,10106,10126,10129,10134,10153,10156,10160,10179,10182,10186,10421,10425,10428,10431,10434,10596,10599,10603,10606,10612,10994],[10,9599,9595],{"id":9600},"_3指针",[19,9602,9603],{},"通过指针保存一个地址，指针就是个地址",[14,9605,9607],{"id":9606},"_31定义指针","3.1定义指针",[31,9609,9611],{"className":3476,"code":9610,"language":3478,"meta":36,"style":36},"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",[26,9612,9613,9621,9625,9630,9642,9647,9655,9665,9683,9703,9707,9712,9717,9722,9736,9752,9766],{"__ignoreMap":36},[40,9614,9615,9617,9619],{"class":42,"line":43},[40,9616,3491],{"class":1283},[40,9618,5299],{"class":596},[40,9620,5302],{"class":50},[40,9622,9623],{"class":42,"line":54},[40,9624,4888],{"class":50},[40,9626,9627],{"class":42,"line":70},[40,9628,9629],{"class":997},"    \u002F\u002F1.定义指针\n",[40,9631,9632,9634,9636,9638,9640],{"class":42,"line":78},[40,9633,5311],{"class":1283},[40,9635,4741],{"class":50},[40,9637,1284],{"class":1283},[40,9639,3925],{"class":63},[40,9641,4637],{"class":50},[40,9643,9644],{"class":42,"line":86},[40,9645,9646],{"class":997},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[40,9648,9649,9652],{"class":42,"line":100},[40,9650,9651],{"class":1283},"    int*",[40,9653,9654],{"class":50},"p;\n",[40,9656,9657,9660,9663],{"class":42,"line":108},[40,9658,9659],{"class":50},"    p",[40,9661,9662],{"class":1283},"=&",[40,9664,9520],{"class":50},[40,9666,9667,9669,9671,9674,9677,9679,9681],{"class":42,"line":121},[40,9668,4893],{"class":50},[40,9670,4520],{"class":1283},[40,9672,9673],{"class":94},"\"a的地址为：\"",[40,9675,9676],{"class":1283},"\u003C\u003C&",[40,9678,2106],{"class":50},[40,9680,4520],{"class":1283},[40,9682,4542],{"class":50},[40,9684,9685,9687,9689,9692,9694,9696,9698,9700],{"class":42,"line":134},[40,9686,4893],{"class":50},[40,9688,4520],{"class":1283},[40,9690,9691],{"class":94},"\"指针p为：\"",[40,9693,4520],{"class":1283},[40,9695,19],{"class":50},[40,9697,4520],{"class":1283},[40,9699,4585],{"class":50},[40,9701,9702],{"class":997},"\u002F\u002F指针p表示的就是a的地址\n",[40,9704,9705],{"class":42,"line":146},[40,9706,1413],{"emptyLinePlaceholder":1412},[40,9708,9709],{"class":42,"line":154},[40,9710,9711],{"class":997},"    \u002F\u002F2.使用指针\n",[40,9713,9714],{"class":42,"line":162},[40,9715,9716],{"class":997},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[40,9718,9719],{"class":42,"line":170},[40,9720,9721],{"class":997},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[40,9723,9724,9727,9729,9731,9734],{"class":42,"line":183},[40,9725,9726],{"class":1283},"    *",[40,9728,19],{"class":50},[40,9730,1284],{"class":1283},[40,9732,9733],{"class":63},"1000",[40,9735,4637],{"class":50},[40,9737,9738,9740,9743,9745,9747,9749],{"class":42,"line":196},[40,9739,4893],{"class":50},[40,9741,9742],{"class":1283},"\u003C\u003C*",[40,9744,19],{"class":50},[40,9746,4520],{"class":1283},[40,9748,4585],{"class":50},[40,9750,9751],{"class":997},"\u002F\u002F1000\n",[40,9753,9754,9756,9758,9760,9762,9764],{"class":42,"line":204},[40,9755,4893],{"class":50},[40,9757,4520],{"class":1283},[40,9759,2106],{"class":50},[40,9761,4520],{"class":1283},[40,9763,4585],{"class":50},[40,9765,9751],{"class":997},[40,9767,9768],{"class":42,"line":217},[40,9769,4907],{"class":50},[14,9771,9773],{"id":9772},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,9775,9776],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,9778,9779],{},"在32位操作系统下：占用4个字节空间",[19,9781,9782],{},"在64位操作系统下：占用8个字节空间",[19,9784,9785],{},"上方是不管啥数据类型的",[31,9787,9789],{"className":3476,"code":9788,"language":3478,"meta":36,"style":36},"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",[26,9790,9791,9799,9803,9808,9820,9825,9830,9835,9848,9870,9896,9922],{"__ignoreMap":36},[40,9792,9793,9795,9797],{"class":42,"line":43},[40,9794,3491],{"class":1283},[40,9796,5299],{"class":596},[40,9798,5302],{"class":50},[40,9800,9801],{"class":42,"line":54},[40,9802,4888],{"class":50},[40,9804,9805],{"class":42,"line":70},[40,9806,9807],{"class":997},"    \u002F\u002F指针所占内存空间\n",[40,9809,9810,9812,9814,9816,9818],{"class":42,"line":78},[40,9811,5311],{"class":1283},[40,9813,4741],{"class":50},[40,9815,1284],{"class":1283},[40,9817,3925],{"class":63},[40,9819,4637],{"class":50},[40,9821,9822],{"class":42,"line":86},[40,9823,9824],{"class":997},"    \u002F\u002Fint *p;\n",[40,9826,9827],{"class":42,"line":100},[40,9828,9829],{"class":997},"    \u002F\u002Fp=&a;\n",[40,9831,9832],{"class":42,"line":108},[40,9833,9834],{"class":997},"    \u002F\u002F上述可以写为以下：\n",[40,9836,9837,9839,9842,9844,9846],{"class":42,"line":121},[40,9838,5311],{"class":1283},[40,9840,9841],{"class":1283}," *",[40,9843,19],{"class":50},[40,9845,9662],{"class":1283},[40,9847,9520],{"class":50},[40,9849,9850,9853,9855,9858,9860,9863,9865,9867],{"class":42,"line":134},[40,9851,9852],{"class":50},"    cout ",[40,9854,4520],{"class":1283},[40,9856,9857],{"class":94},"\"sizeof(int *)\"",[40,9859,4715],{"class":1283},[40,9861,9862],{"class":50},"(p)",[40,9864,4520],{"class":1283},[40,9866,4585],{"class":50},[40,9868,9869],{"class":997},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[40,9871,9872,9874,9876,9878,9880,9882,9884,9886,9888,9890,9893],{"class":42,"line":146},[40,9873,9852],{"class":50},[40,9875,4520],{"class":1283},[40,9877,9857],{"class":94},[40,9879,4715],{"class":1283},[40,9881,3488],{"class":50},[40,9883,3491],{"class":1283},[40,9885,9841],{"class":1283},[40,9887,3908],{"class":50},[40,9889,4520],{"class":1283},[40,9891,9892],{"class":50},"endl",[40,9894,9895],{"class":997},"  \u002F\u002F4字节(32位的话)\n",[40,9897,9898,9900,9902,9905,9907,9909,9911,9913,9915,9917,9919],{"class":42,"line":154},[40,9899,9852],{"class":50},[40,9901,4520],{"class":1283},[40,9903,9904],{"class":94},"\"sizeof(char *)\"",[40,9906,4715],{"class":1283},[40,9908,3488],{"class":50},[40,9910,3579],{"class":1283},[40,9912,9841],{"class":1283},[40,9914,3908],{"class":50},[40,9916,4520],{"class":1283},[40,9918,4585],{"class":50},[40,9920,9921],{"class":997}," \u002F\u002F4字节(32位的话)\n",[40,9923,9924],{"class":42,"line":162},[40,9925,4907],{"class":50},[14,9927,9929],{"id":9928},"_33空指针","3.3空指针",[19,9931,9932],{},"空指针：指针变量指向内存中编号为0的空间",[19,9934,9935],{},"用途：初始化指针变量",[19,9937,9938],{},"注意：空指针指向的内存是不可以访问的",[31,9940,9942],{"className":3476,"code":9941,"language":3478,"meta":36,"style":36},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[26,9943,9944,9952,9956,9961,9975,9980,9995,10000],{"__ignoreMap":36},[40,9945,9946,9948,9950],{"class":42,"line":43},[40,9947,3491],{"class":1283},[40,9949,5299],{"class":596},[40,9951,5302],{"class":50},[40,9953,9954],{"class":42,"line":54},[40,9955,4888],{"class":50},[40,9957,9958],{"class":42,"line":70},[40,9959,9960],{"class":997},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[40,9962,9963,9965,9967,9969,9971,9973],{"class":42,"line":78},[40,9964,5311],{"class":1283},[40,9966,9841],{"class":1283},[40,9968,19],{"class":50},[40,9970,1284],{"class":1283},[40,9972,5718],{"class":63},[40,9974,4637],{"class":50},[40,9976,9977],{"class":42,"line":86},[40,9978,9979],{"class":997},"    \u002F\u002F2.空指针不能进行访问\n",[40,9981,9982,9984,9986,9988,9990,9992],{"class":42,"line":100},[40,9983,9726],{"class":1283},[40,9985,19],{"class":50},[40,9987,1284],{"class":1283},[40,9989,3791],{"class":63},[40,9991,3540],{"class":50},[40,9993,9994],{"class":997},"\u002F\u002F直接报错，压根不能访问\n",[40,9996,9997],{"class":42,"line":108},[40,9998,9999],{"class":997},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[40,10001,10002],{"class":42,"line":121},[40,10003,4907],{"class":50},[14,10005,10007],{"id":10006},"_34野指针","3.4野指针",[19,10009,10010],{},[409,10011,10012],{},"指针变量指向非法的内存空间",[31,10014,10016],{"className":3476,"code":10015,"language":3478,"meta":36,"style":36},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[26,10017,10018,10026,10030,10059,10064,10076],{"__ignoreMap":36},[40,10019,10020,10022,10024],{"class":42,"line":43},[40,10021,3491],{"class":1283},[40,10023,5299],{"class":596},[40,10025,5302],{"class":50},[40,10027,10028],{"class":42,"line":54},[40,10029,4888],{"class":50},[40,10031,10032,10034,10036,10038,10040,10042,10044,10046,10048,10051,10054,10056],{"class":42,"line":70},[40,10033,5311],{"class":1283},[40,10035,9841],{"class":1283},[40,10037,19],{"class":50},[40,10039,1284],{"class":1283},[40,10041,3488],{"class":50},[40,10043,3491],{"class":1283},[40,10045,9841],{"class":1283},[40,10047,3908],{"class":50},[40,10049,10050],{"class":1283},"0x",[40,10052,10053],{"class":63},"1100",[40,10055,3540],{"class":50},[40,10057,10058],{"class":997}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[40,10060,10061],{"class":42,"line":78},[40,10062,10063],{"class":997},"    \u002F\u002F访问野指针报错\n",[40,10065,10066,10068,10070,10072,10074],{"class":42,"line":86},[40,10067,4893],{"class":50},[40,10069,9742],{"class":1283},[40,10071,19],{"class":50},[40,10073,4520],{"class":1283},[40,10075,4542],{"class":50},[40,10077,10078],{"class":42,"line":100},[40,10079,4907],{"class":50},[19,10081,10082],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,10084,10086],{"id":10085},"_35const修饰指针","3.5const修饰指针",[19,10088,10089],{},"三种情况：",[1338,10091,10092,10095,10098],{},[495,10093,10094],{},"const修饰指针 常量指针",[495,10096,10097],{},"const修饰常量 指针常量",[495,10099,10100],{},"const即修饰指针，又修饰常量",[492,10102,10103],{},[495,10104,10105],{},"常量指针",[31,10107,10109],{"className":3476,"code":10108,"language":3478,"meta":36,"style":36},"const int *p=&a;\n",[26,10110,10111],{"__ignoreMap":36},[40,10112,10113,10116,10118,10120,10122,10124],{"class":42,"line":43},[40,10114,10115],{"class":1283},"const",[40,10117,5708],{"class":1283},[40,10119,9841],{"class":1283},[40,10121,19],{"class":50},[40,10123,9662],{"class":1283},[40,10125,9520],{"class":50},[19,10127,10128],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[492,10130,10131],{"start":54},[495,10132,10133],{},"指针常量",[31,10135,10137],{"className":3476,"code":10136,"language":3478,"meta":36,"style":36},"int *const p=&a;\n",[26,10138,10139],{"__ignoreMap":36},[40,10140,10141,10143,10146,10149,10151],{"class":42,"line":43},[40,10142,3491],{"class":1283},[40,10144,10145],{"class":1283}," *const",[40,10147,10148],{"class":50}," p",[40,10150,9662],{"class":1283},[40,10152,9520],{"class":50},[19,10154,10155],{},"指针的指向不可以改，指针指向的值可以改",[492,10157,10158],{"start":70},[495,10159,10100],{},[31,10161,10163],{"className":3476,"code":10162,"language":3478,"meta":36,"style":36},"const int *const p=&a;\n",[26,10164,10165],{"__ignoreMap":36},[40,10166,10167,10169,10171,10173,10175,10177],{"class":42,"line":43},[40,10168,10115],{"class":1283},[40,10170,5708],{"class":1283},[40,10172,10145],{"class":1283},[40,10174,10148],{"class":50},[40,10176,9662],{"class":1283},[40,10178,9520],{"class":50},[19,10180,10181],{},"指针的指向和指针指向的值都不可以改变",[14,10183,10185],{"id":10184},"_36指针和数组","3.6指针和数组",[31,10187,10189],{"className":3476,"code":10188,"language":3478,"meta":36,"style":36},"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",[26,10190,10191,10199,10203,10208,10262,10283,10299,10315,10326,10343,10348,10362,10388,10392,10404,10413,10417],{"__ignoreMap":36},[40,10192,10193,10195,10197],{"class":42,"line":43},[40,10194,3491],{"class":1283},[40,10196,5299],{"class":596},[40,10198,5302],{"class":50},[40,10200,10201],{"class":42,"line":54},[40,10202,4888],{"class":50},[40,10204,10205],{"class":42,"line":70},[40,10206,10207],{"class":997},"    \u002F\u002F利用指针访问数组中的元素\n",[40,10209,10210,10212,10214,10216,10218,10220,10222,10224,10226,10228,10230,10232,10234,10236,10238,10240,10242,10244,10246,10248,10250,10252,10254,10256,10258,10260],{"class":42,"line":78},[40,10211,5311],{"class":1283},[40,10213,7285],{"class":50},[40,10215,3925],{"class":63},[40,10217,4417],{"class":50},[40,10219,1284],{"class":1283},[40,10221,4373],{"class":50},[40,10223,3698],{"class":63},[40,10225,1299],{"class":50},[40,10227,64],{"class":63},[40,10229,1299],{"class":50},[40,10231,3555],{"class":63},[40,10233,1299],{"class":50},[40,10235,3773],{"class":63},[40,10237,1299],{"class":50},[40,10239,3799],{"class":63},[40,10241,1299],{"class":50},[40,10243,3824],{"class":63},[40,10245,1299],{"class":50},[40,10247,3849],{"class":63},[40,10249,1299],{"class":50},[40,10251,3874],{"class":63},[40,10253,1299],{"class":50},[40,10255,3899],{"class":63},[40,10257,1299],{"class":50},[40,10259,3925],{"class":63},[40,10261,7318],{"class":50},[40,10263,10264,10266,10268,10271,10273,10275,10277,10279,10281],{"class":42,"line":86},[40,10265,4893],{"class":50},[40,10267,4520],{"class":1283},[40,10269,10270],{"class":94},"\"数组的第一个元素为：\"",[40,10272,4520],{"class":1283},[40,10274,7229],{"class":50},[40,10276,3672],{"class":63},[40,10278,4417],{"class":50},[40,10280,4520],{"class":1283},[40,10282,4542],{"class":50},[40,10284,10285,10287,10289,10291,10293,10296],{"class":42,"line":100},[40,10286,5311],{"class":1283},[40,10288,9841],{"class":1283},[40,10290,19],{"class":50},[40,10292,1284],{"class":1283},[40,10294,10295],{"class":50},"arr;",[40,10297,10298],{"class":997},"\u002F\u002F注意数才要加取地址符号&\n",[40,10300,10301,10303,10305,10307,10309,10311,10313],{"class":42,"line":108},[40,10302,4893],{"class":50},[40,10304,4520],{"class":1283},[40,10306,10270],{"class":94},[40,10308,9742],{"class":1283},[40,10310,19],{"class":50},[40,10312,4520],{"class":1283},[40,10314,4542],{"class":50},[40,10316,10317,10319,10321,10323],{"class":42,"line":121},[40,10318,9659],{"class":50},[40,10320,5618],{"class":1283},[40,10322,3540],{"class":50},[40,10324,10325],{"class":997}," \u002F\u002F让指针向后偏移4个字节\n",[40,10327,10328,10330,10332,10335,10337,10339,10341],{"class":42,"line":134},[40,10329,4893],{"class":50},[40,10331,4520],{"class":1283},[40,10333,10334],{"class":94},"\"数组的第二个元素为：\"",[40,10336,9742],{"class":1283},[40,10338,19],{"class":50},[40,10340,4520],{"class":1283},[40,10342,4542],{"class":50},[40,10344,10345],{"class":42,"line":146},[40,10346,10347],{"class":997},"    \u002F\u002F利用指针遍历数组\n",[40,10349,10350,10352,10354,10357,10359],{"class":42,"line":154},[40,10351,5311],{"class":1283},[40,10353,9841],{"class":1283},[40,10355,10356],{"class":50},"p2",[40,10358,1284],{"class":1283},[40,10360,10361],{"class":50},"arr;\n",[40,10363,10364,10366,10368,10370,10372,10374,10376,10378,10380,10382,10384,10386],{"class":42,"line":162},[40,10365,6525],{"class":1283},[40,10367,4993],{"class":50},[40,10369,3491],{"class":1283},[40,10371,6356],{"class":50},[40,10373,1284],{"class":1283},[40,10375,3672],{"class":63},[40,10377,6363],{"class":50},[40,10379,4387],{"class":1283},[40,10381,3925],{"class":63},[40,10383,6363],{"class":50},[40,10385,5618],{"class":1283},[40,10387,1811],{"class":50},[40,10389,10390],{"class":42,"line":170},[40,10391,5356],{"class":50},[40,10393,10394,10396,10398,10400,10402],{"class":42,"line":183},[40,10395,6775],{"class":50},[40,10397,9742],{"class":1283},[40,10399,10356],{"class":50},[40,10401,4520],{"class":1283},[40,10403,4542],{"class":50},[40,10405,10406,10409,10411],{"class":42,"line":196},[40,10407,10408],{"class":50},"        p2",[40,10410,5618],{"class":1283},[40,10412,4637],{"class":50},[40,10414,10415],{"class":42,"line":204},[40,10416,5513],{"class":50},[40,10418,10419],{"class":42,"line":217},[40,10420,4907],{"class":50},[14,10422,10424],{"id":10423},"_37指针和函数","3.7指针和函数",[19,10426,10427],{},"利用指针做函数参数，可以修改实参的值",[19,10429,10430],{},"值传递：只改变形参，不改变实参",[19,10432,10433],{},"地址传递：",[31,10435,10437],{"className":3476,"code":10436,"language":3478,"meta":36,"style":36},"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",[26,10438,10439,10464,10468,10480,10491,10501,10505,10513,10517,10529,10541,10546,10562,10577,10592],{"__ignoreMap":36},[40,10440,10441,10443,10445,10447,10449,10451,10454,10456,10458,10460,10462],{"class":42,"line":43},[40,10442,8687],{"class":1283},[40,10444,8690],{"class":596},[40,10446,3488],{"class":50},[40,10448,3491],{"class":1283},[40,10450,9841],{"class":1283},[40,10452,10453],{"class":8539},"p1",[40,10455,1299],{"class":50},[40,10457,3491],{"class":1283},[40,10459,9841],{"class":1283},[40,10461,10356],{"class":8539},[40,10463,1811],{"class":50},[40,10465,10466],{"class":42,"line":54},[40,10467,4888],{"class":50},[40,10469,10470,10472,10474,10477],{"class":42,"line":70},[40,10471,5311],{"class":1283},[40,10473,7578],{"class":50},[40,10475,10476],{"class":1283},"=*",[40,10478,10479],{"class":50},"p1;\n",[40,10481,10482,10484,10486,10488],{"class":42,"line":78},[40,10483,9726],{"class":1283},[40,10485,10453],{"class":50},[40,10487,10476],{"class":1283},[40,10489,10490],{"class":50},"p2;\n",[40,10492,10493,10495,10497,10499],{"class":42,"line":86},[40,10494,9726],{"class":1283},[40,10496,10356],{"class":50},[40,10498,1284],{"class":1283},[40,10500,7603],{"class":50},[40,10502,10503],{"class":42,"line":100},[40,10504,4907],{"class":50},[40,10506,10507,10509,10511],{"class":42,"line":108},[40,10508,3491],{"class":1283},[40,10510,5299],{"class":596},[40,10512,5302],{"class":50},[40,10514,10515],{"class":42,"line":121},[40,10516,4888],{"class":50},[40,10518,10519,10521,10523,10525,10527],{"class":42,"line":134},[40,10520,5311],{"class":1283},[40,10522,4741],{"class":50},[40,10524,1284],{"class":1283},[40,10526,3925],{"class":63},[40,10528,4637],{"class":50},[40,10530,10531,10533,10535,10537,10539],{"class":42,"line":146},[40,10532,5311],{"class":1283},[40,10534,6157],{"class":50},[40,10536,1284],{"class":1283},[40,10538,4178],{"class":63},[40,10540,4637],{"class":50},[40,10542,10543],{"class":42,"line":154},[40,10544,10545],{"class":997},"    \u002F\u002F地址传递\n",[40,10547,10548,10550,10552,10554,10557,10559],{"class":42,"line":162},[40,10549,8884],{"class":596},[40,10551,3488],{"class":50},[40,10553,3833],{"class":1283},[40,10555,10556],{"class":50},"a,",[40,10558,3833],{"class":1283},[40,10560,10561],{"class":50},"b);\n",[40,10563,10564,10566,10568,10570,10572,10574],{"class":42,"line":170},[40,10565,4893],{"class":50},[40,10567,4520],{"class":1283},[40,10569,2106],{"class":50},[40,10571,4520],{"class":1283},[40,10573,4585],{"class":50},[40,10575,10576],{"class":997},"\u002F\u002F20\n",[40,10578,10579,10581,10583,10585,10587,10589],{"class":42,"line":183},[40,10580,4893],{"class":50},[40,10582,4520],{"class":1283},[40,10584,3743],{"class":50},[40,10586,4520],{"class":1283},[40,10588,4585],{"class":50},[40,10590,10591],{"class":997},"\u002F\u002F10\n",[40,10593,10594],{"class":42,"line":196},[40,10595,4907],{"class":50},[19,10597,10598],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,10600,10602],{"id":10601},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,10604,10605],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,10607,10608,10609,10611],{},"例如数组：int arr",[40,10610,3925],{},"={4,3,6,9,1,2,10,8,7,5}",[31,10613,10615],{"className":3476,"code":10614,"language":3478,"meta":36,"style":36},"#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",[26,10616,10617,10623,10633,10657,10661,10692,10696,10730,10734,10752,10756,10767,10782,10797,10801,10805,10809,10813,10817,10825,10829,10834,10888,10900,10912,10917,10925,10929,10934,10959,10963,10977,10986,10990],{"__ignoreMap":36},[40,10618,10619,10621],{"class":42,"line":43},[40,10620,5276],{"class":1283},[40,10622,5279],{"class":94},[40,10624,10625,10627,10629,10631],{"class":42,"line":54},[40,10626,5284],{"class":1283},[40,10628,5287],{"class":1283},[40,10630,5290],{"class":596},[40,10632,4637],{"class":50},[40,10634,10635,10637,10640,10642,10644,10646,10648,10650,10652,10655],{"class":42,"line":70},[40,10636,8687],{"class":1283},[40,10638,10639],{"class":596}," bubbleSort",[40,10641,3488],{"class":50},[40,10643,3491],{"class":1283},[40,10645,9841],{"class":1283},[40,10647,19],{"class":8539},[40,10649,1299],{"class":50},[40,10651,3491],{"class":1283},[40,10653,10654],{"class":8539}," len",[40,10656,1811],{"class":50},[40,10658,10659],{"class":42,"line":78},[40,10660,4888],{"class":50},[40,10662,10663,10665,10667,10669,10671,10673,10675,10677,10679,10682,10684,10686,10688,10690],{"class":42,"line":86},[40,10664,6525],{"class":1283},[40,10666,3488],{"class":50},[40,10668,3491],{"class":1283},[40,10670,6356],{"class":50},[40,10672,1284],{"class":1283},[40,10674,3672],{"class":63},[40,10676,6363],{"class":50},[40,10678,4387],{"class":1283},[40,10680,10681],{"class":50},"len",[40,10683,4011],{"class":1283},[40,10685,3698],{"class":63},[40,10687,6363],{"class":50},[40,10689,5618],{"class":1283},[40,10691,1811],{"class":50},[40,10693,10694],{"class":42,"line":100},[40,10695,5356],{"class":50},[40,10697,10698,10700,10702,10704,10706,10708,10710,10712,10714,10716,10718,10720,10722,10724,10726,10728],{"class":42,"line":108},[40,10699,6727],{"class":1283},[40,10701,3488],{"class":50},[40,10703,3491],{"class":1283},[40,10705,6734],{"class":50},[40,10707,1284],{"class":1283},[40,10709,3672],{"class":63},[40,10711,6741],{"class":50},[40,10713,4387],{"class":1283},[40,10715,10681],{"class":50},[40,10717,4011],{"class":1283},[40,10719,3920],{"class":50},[40,10721,4011],{"class":1283},[40,10723,3698],{"class":63},[40,10725,6741],{"class":50},[40,10727,5618],{"class":1283},[40,10729,1811],{"class":50},[40,10731,10732],{"class":42,"line":121},[40,10733,5835],{"class":50},[40,10735,10736,10738,10741,10743,10746,10748,10750],{"class":42,"line":134},[40,10737,7965],{"class":1283},[40,10739,10740],{"class":50},"(p[j]",[40,10742,4437],{"class":1283},[40,10744,10745],{"class":50},"p[j",[40,10747,3960],{"class":1283},[40,10749,3698],{"class":63},[40,10751,7980],{"class":50},[40,10753,10754],{"class":42,"line":146},[40,10755,7985],{"class":50},[40,10757,10758,10760,10762,10764],{"class":42,"line":154},[40,10759,7990],{"class":1283},[40,10761,7578],{"class":50},[40,10763,1284],{"class":1283},[40,10765,10766],{"class":50},"p[j];\n",[40,10768,10769,10772,10774,10776,10778,10780],{"class":42,"line":162},[40,10770,10771],{"class":50},"                p[j]",[40,10773,1284],{"class":1283},[40,10775,10745],{"class":50},[40,10777,3960],{"class":1283},[40,10779,3698],{"class":63},[40,10781,8013],{"class":50},[40,10783,10784,10787,10789,10791,10793,10795],{"class":42,"line":170},[40,10785,10786],{"class":50},"                p[j",[40,10788,3960],{"class":1283},[40,10790,3698],{"class":63},[40,10792,4417],{"class":50},[40,10794,1284],{"class":1283},[40,10796,7603],{"class":50},[40,10798,10799],{"class":42,"line":183},[40,10800,8033],{"class":50},[40,10802,10803],{"class":42,"line":196},[40,10804,5854],{"class":50},[40,10806,10807],{"class":42,"line":204},[40,10808,5513],{"class":50},[40,10810,10811],{"class":42,"line":217},[40,10812,4907],{"class":50},[40,10814,10815],{"class":42,"line":230},[40,10816,1413],{"emptyLinePlaceholder":1412},[40,10818,10819,10821,10823],{"class":42,"line":238},[40,10820,3491],{"class":1283},[40,10822,5299],{"class":596},[40,10824,5302],{"class":50},[40,10826,10827],{"class":42,"line":251},[40,10828,4888],{"class":50},[40,10830,10831],{"class":42,"line":264},[40,10832,10833],{"class":997},"    \u002F\u002F 1.创建数组\n",[40,10835,10836,10838,10840,10842,10844,10846,10848,10850,10852,10854,10856,10858,10860,10862,10864,10866,10868,10870,10872,10874,10876,10878,10880,10882,10884,10886],{"class":42,"line":277},[40,10837,5311],{"class":1283},[40,10839,7285],{"class":50},[40,10841,3925],{"class":63},[40,10843,4417],{"class":50},[40,10845,1284],{"class":1283},[40,10847,4373],{"class":50},[40,10849,3773],{"class":63},[40,10851,1299],{"class":50},[40,10853,3555],{"class":63},[40,10855,1299],{"class":50},[40,10857,3824],{"class":63},[40,10859,1299],{"class":50},[40,10861,3899],{"class":63},[40,10863,1299],{"class":50},[40,10865,3698],{"class":63},[40,10867,1299],{"class":50},[40,10869,64],{"class":63},[40,10871,1299],{"class":50},[40,10873,3925],{"class":63},[40,10875,1299],{"class":50},[40,10877,3874],{"class":63},[40,10879,1299],{"class":50},[40,10881,3849],{"class":63},[40,10883,1299],{"class":50},[40,10885,3799],{"class":63},[40,10887,7318],{"class":50},[40,10889,10890,10892,10894,10896,10898],{"class":42,"line":290},[40,10891,5311],{"class":1283},[40,10893,10654],{"class":50},[40,10895,1284],{"class":1283},[40,10897,3925],{"class":63},[40,10899,4637],{"class":50},[40,10901,10902,10904,10906,10908,10910],{"class":42,"line":298},[40,10903,5311],{"class":1283},[40,10905,9841],{"class":1283},[40,10907,19],{"class":50},[40,10909,1284],{"class":1283},[40,10911,10361],{"class":50},[40,10913,10914],{"class":42,"line":310},[40,10915,10916],{"class":997},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[40,10918,10919,10922],{"class":42,"line":5086},[40,10920,10921],{"class":596},"    bubbleSort",[40,10923,10924],{"class":50},"(p,len);\n",[40,10926,10927],{"class":42,"line":5091},[40,10928,1413],{"emptyLinePlaceholder":1412},[40,10930,10931],{"class":42,"line":5105},[40,10932,10933],{"class":997},"    \u002F\u002F 3.打印排序后的数组\n",[40,10935,10936,10938,10940,10942,10944,10946,10948,10950,10952,10955,10957],{"class":42,"line":5110},[40,10937,6525],{"class":1283},[40,10939,4993],{"class":50},[40,10941,3491],{"class":1283},[40,10943,6356],{"class":50},[40,10945,1284],{"class":1283},[40,10947,3672],{"class":63},[40,10949,6538],{"class":50},[40,10951,4387],{"class":1283},[40,10953,10954],{"class":50},"len; i",[40,10956,5618],{"class":1283},[40,10958,1811],{"class":50},[40,10960,10961],{"class":42,"line":5902},[40,10962,5356],{"class":50},[40,10964,10965,10967,10969,10971,10973,10975],{"class":42,"line":5916},[40,10966,6775],{"class":50},[40,10968,9742],{"class":1283},[40,10970,19],{"class":50},[40,10972,4520],{"class":1283},[40,10974,285],{"class":94},[40,10976,4637],{"class":50},[40,10978,10979,10982,10984],{"class":42,"line":5924},[40,10980,10981],{"class":50},"        p",[40,10983,5618],{"class":1283},[40,10985,4637],{"class":50},[40,10987,10988],{"class":42,"line":5929},[40,10989,5513],{"class":50},[40,10991,10992],{"class":42,"line":5935},[40,10993,4907],{"class":50},[3384,10995,10996],{},"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":36,"searchDepth":54,"depth":54,"links":10998},[10999,11000,11001,11002,11003,11004,11005,11006],{"id":9606,"depth":54,"text":9607},{"id":9772,"depth":54,"text":9773},{"id":9928,"depth":54,"text":9929},{"id":10006,"depth":54,"text":10007},{"id":10085,"depth":54,"text":10086},{"id":10184,"depth":54,"text":10185},{"id":10423,"depth":54,"text":10424},{"id":10601,"depth":54,"text":10602},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":9595,"description":9603},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":11013,"title":11014,"body":11015,"description":11022,"extension":3414,"meta":13996,"navigation":1412,"path":13997,"seo":13998,"stem":13999,"__hash__":14000},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":11016,"toc":13987},[11017,11020,11023,11027,11030,11033,11044,11382,11385,11389,11392,11399,11654,11658,11661,11664,11819,11823,11826,11829,12035,12039,12042,12345,12348,12356,12360,12363,12514,12516,12527,12584,12588,12593,13250,13258,13261,13355,13358,13978,13984],[10,11018,11014],{"id":11019},"_4结构体",[19,11021,11022],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,11024,11026],{"id":11025},"_41结构体定义与使用","4.1结构体定义与使用",[19,11028,11029],{},"语法：struct 结构体名 {结构体成员列表}；",[19,11031,11032],{},"通过结构体创建变量的方式：",[1338,11034,11035,11038,11041],{},[495,11036,11037],{},"struct 结构体名 变量名",[495,11039,11040],{},"struct 结构体名 变量名={成员1值，成员2值...}",[495,11042,11043],{},"定义结构体时顺便创建变量",[31,11045,11047],{"className":3476,"code":11046,"language":3478,"meta":36,"style":36},"#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",[26,11048,11049,11055,11065,11072,11077,11085,11089,11094,11098,11103,11108,11113,11120,11125,11132,11136,11143,11147,11151,11155,11159,11163,11167,11173,11177,11183,11191,11199,11203,11208,11213,11224,11229,11241,11252,11263,11268,11292,11297,11303,11330,11335,11341,11353,11365,11377],{"__ignoreMap":36},[40,11050,11051,11053],{"class":42,"line":43},[40,11052,5276],{"class":1283},[40,11054,5279],{"class":94},[40,11056,11057,11059,11061,11063],{"class":42,"line":54},[40,11058,5284],{"class":1283},[40,11060,5287],{"class":1283},[40,11062,5290],{"class":596},[40,11064,4637],{"class":50},[40,11066,11067,11069],{"class":42,"line":70},[40,11068,5276],{"class":1283},[40,11070,11071],{"class":94},"\u003Cstring>\n",[40,11073,11074],{"class":42,"line":78},[40,11075,11076],{"class":997},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[40,11078,11079,11082],{"class":42,"line":86},[40,11080,11081],{"class":1283},"struct",[40,11083,11084],{"class":596}," Student\n",[40,11086,11087],{"class":42,"line":100},[40,11088,4888],{"class":50},[40,11090,11091],{"class":42,"line":108},[40,11092,11093],{"class":997},"    \u002F\u002F成员列表\n",[40,11095,11096],{"class":42,"line":121},[40,11097,1413],{"emptyLinePlaceholder":1412},[40,11099,11100],{"class":42,"line":134},[40,11101,11102],{"class":997},"    \u002F\u002F姓名\n",[40,11104,11105],{"class":42,"line":146},[40,11106,11107],{"class":50},"    string name;\n",[40,11109,11110],{"class":42,"line":154},[40,11111,11112],{"class":997},"    \u002F\u002F年龄\n",[40,11114,11115,11117],{"class":42,"line":162},[40,11116,5311],{"class":1283},[40,11118,11119],{"class":50}," age;\n",[40,11121,11122],{"class":42,"line":170},[40,11123,11124],{"class":997},"    \u002F\u002F分数\n",[40,11126,11127,11129],{"class":42,"line":183},[40,11128,5311],{"class":1283},[40,11130,11131],{"class":50}," score;\n",[40,11133,11134],{"class":42,"line":196},[40,11135,7318],{"class":50},[40,11137,11138,11140],{"class":42,"line":204},[40,11139,11081],{"class":1283},[40,11141,11142],{"class":596}," School\n",[40,11144,11145],{"class":42,"line":217},[40,11146,4888],{"class":50},[40,11148,11149],{"class":42,"line":230},[40,11150,11093],{"class":997},[40,11152,11153],{"class":42,"line":238},[40,11154,1413],{"emptyLinePlaceholder":1412},[40,11156,11157],{"class":42,"line":251},[40,11158,11102],{"class":997},[40,11160,11161],{"class":42,"line":264},[40,11162,11107],{"class":50},[40,11164,11165],{"class":42,"line":277},[40,11166,11112],{"class":997},[40,11168,11169,11171],{"class":42,"line":290},[40,11170,5311],{"class":1283},[40,11172,11119],{"class":50},[40,11174,11175],{"class":42,"line":298},[40,11176,11124],{"class":997},[40,11178,11179,11181],{"class":42,"line":310},[40,11180,5311],{"class":1283},[40,11182,11131],{"class":50},[40,11184,11185,11188],{"class":42,"line":5086},[40,11186,11187],{"class":50},"} s3;",[40,11189,11190],{"class":997}," \u002F\u002F创建结构体时就创建了变量\n",[40,11192,11193,11195,11197],{"class":42,"line":5091},[40,11194,3491],{"class":1283},[40,11196,5299],{"class":596},[40,11198,5302],{"class":50},[40,11200,11201],{"class":42,"line":5105},[40,11202,4888],{"class":50},[40,11204,11205],{"class":42,"line":5110},[40,11206,11207],{"class":997},"    \u002F\u002F2.通过学生类型创建具体学生\n",[40,11209,11210],{"class":42,"line":5902},[40,11211,11212],{"class":997},"    \u002F\u002F2.1 struct Student s1;\n",[40,11214,11215,11218,11221],{"class":42,"line":5916},[40,11216,11217],{"class":1283},"    struct",[40,11219,11220],{"class":596}," Student",[40,11222,11223],{"class":50}," s1;\n",[40,11225,11226],{"class":42,"line":5924},[40,11227,11228],{"class":997},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[40,11230,11231,11234,11236,11239],{"class":42,"line":5929},[40,11232,11233],{"class":50},"    s1.name",[40,11235,1284],{"class":1283},[40,11237,11238],{"class":94},"\"张三\"",[40,11240,4637],{"class":50},[40,11242,11243,11246,11248,11250],{"class":42,"line":5935},[40,11244,11245],{"class":50},"    s1.age",[40,11247,1284],{"class":1283},[40,11249,4128],{"class":63},[40,11251,4637],{"class":50},[40,11253,11254,11257,11259,11261],{"class":42,"line":5941},[40,11255,11256],{"class":50},"    s1.score",[40,11258,1284],{"class":1283},[40,11260,3734],{"class":63},[40,11262,4637],{"class":50},[40,11264,11265],{"class":42,"line":5946},[40,11266,11267],{"class":997},"    \u002F\u002F输出结果\n",[40,11269,11271,11273,11275,11278,11280,11283,11285,11288,11290],{"class":42,"line":11270},37,[40,11272,4893],{"class":50},[40,11274,4520],{"class":1283},[40,11276,11277],{"class":50},"s1.name",[40,11279,4520],{"class":1283},[40,11281,11282],{"class":50},"s1.age",[40,11284,4520],{"class":1283},[40,11286,11287],{"class":50},"s1.score",[40,11289,4520],{"class":1283},[40,11291,4542],{"class":50},[40,11293,11295],{"class":42,"line":11294},38,[40,11296,1413],{"emptyLinePlaceholder":1412},[40,11298,11300],{"class":42,"line":11299},39,[40,11301,11302],{"class":997},"    \u002F\u002F2.2 struct Student s2={...}\n",[40,11304,11306,11308,11310,11313,11315,11317,11320,11322,11324,11326,11328],{"class":42,"line":11305},40,[40,11307,11217],{"class":1283},[40,11309,11220],{"class":596},[40,11311,11312],{"class":50}," s2",[40,11314,1284],{"class":1283},[40,11316,4373],{"class":50},[40,11318,11319],{"class":94},"\"王五\"",[40,11321,1299],{"class":50},[40,11323,4128],{"class":63},[40,11325,1299],{"class":50},[40,11327,3734],{"class":63},[40,11329,7318],{"class":50},[40,11331,11333],{"class":42,"line":11332},41,[40,11334,1413],{"emptyLinePlaceholder":1412},[40,11336,11338],{"class":42,"line":11337},42,[40,11339,11340],{"class":997},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[40,11342,11344,11347,11349,11351],{"class":42,"line":11343},43,[40,11345,11346],{"class":50},"    s3.name",[40,11348,1284],{"class":1283},[40,11350,7002],{"class":94},[40,11352,4637],{"class":50},[40,11354,11356,11359,11361,11363],{"class":42,"line":11355},44,[40,11357,11358],{"class":50},"    s3.age",[40,11360,1284],{"class":1283},[40,11362,4128],{"class":63},[40,11364,4637],{"class":50},[40,11366,11368,11371,11373,11375],{"class":42,"line":11367},45,[40,11369,11370],{"class":50},"    s3.score",[40,11372,1284],{"class":1283},[40,11374,4178],{"class":63},[40,11376,4637],{"class":50},[40,11378,11380],{"class":42,"line":11379},46,[40,11381,4907],{"class":50},[19,11383,11384],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,11386,11388],{"id":11387},"_42结构体数组","4.2结构体数组",[19,11390,11391],{},"将自定义的结构体放入到数组中方便维护",[19,11393,11394,11395,11398],{},"语法：struct 结构体名 数组名",[40,11396,11397],{},"元素个数","={ {}，{},...{} };",[31,11400,11402],{"className":3476,"code":11401,"language":3478,"meta":36,"style":36},"#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",[26,11403,11404,11410,11420,11426,11431,11437,11441,11445,11451,11457,11461,11465,11473,11477,11482,11497,11501,11517,11533,11537,11542,11558,11573,11588,11593,11619,11623,11646,11650],{"__ignoreMap":36},[40,11405,11406,11408],{"class":42,"line":43},[40,11407,5276],{"class":1283},[40,11409,5279],{"class":94},[40,11411,11412,11414,11416,11418],{"class":42,"line":54},[40,11413,5284],{"class":1283},[40,11415,5287],{"class":1283},[40,11417,5290],{"class":596},[40,11419,4637],{"class":50},[40,11421,11422,11424],{"class":42,"line":70},[40,11423,5276],{"class":1283},[40,11425,11071],{"class":94},[40,11427,11428],{"class":42,"line":78},[40,11429,11430],{"class":997},"\u002F\u002F1.定义结构体\n",[40,11432,11433,11435],{"class":42,"line":86},[40,11434,11081],{"class":1283},[40,11436,11084],{"class":596},[40,11438,11439],{"class":42,"line":100},[40,11440,4888],{"class":50},[40,11442,11443],{"class":42,"line":108},[40,11444,11107],{"class":50},[40,11446,11447,11449],{"class":42,"line":121},[40,11448,5311],{"class":1283},[40,11450,11119],{"class":50},[40,11452,11453,11455],{"class":42,"line":134},[40,11454,5311],{"class":1283},[40,11456,11131],{"class":50},[40,11458,11459],{"class":42,"line":146},[40,11460,1413],{"emptyLinePlaceholder":1412},[40,11462,11463],{"class":42,"line":154},[40,11464,7318],{"class":50},[40,11466,11467,11469,11471],{"class":42,"line":162},[40,11468,3491],{"class":1283},[40,11470,5299],{"class":596},[40,11472,5302],{"class":50},[40,11474,11475],{"class":42,"line":170},[40,11476,4888],{"class":50},[40,11478,11479],{"class":42,"line":183},[40,11480,11481],{"class":997},"    \u002F\u002F2.创建结构体数组\n",[40,11483,11484,11486,11488,11491,11493,11495],{"class":42,"line":196},[40,11485,11217],{"class":1283},[40,11487,11220],{"class":596},[40,11489,11490],{"class":50}," stuArray[",[40,11492,64],{"class":63},[40,11494,4417],{"class":50},[40,11496,8231],{"class":1283},[40,11498,11499],{"class":42,"line":204},[40,11500,5356],{"class":50},[40,11502,11503,11505,11507,11509,11511,11513,11515],{"class":42,"line":217},[40,11504,8240],{"class":50},[40,11506,11238],{"class":94},[40,11508,1299],{"class":50},[40,11510,4128],{"class":63},[40,11512,1299],{"class":50},[40,11514,3791],{"class":63},[40,11516,8253],{"class":50},[40,11518,11519,11521,11523,11525,11527,11529,11531],{"class":42,"line":230},[40,11520,8240],{"class":50},[40,11522,7002],{"class":94},[40,11524,1299],{"class":50},[40,11526,4054],{"class":63},[40,11528,1299],{"class":50},[40,11530,4054],{"class":63},[40,11532,4907],{"class":50},[40,11534,11535],{"class":42,"line":238},[40,11536,5513],{"class":50},[40,11538,11539],{"class":42,"line":251},[40,11540,11541],{"class":997},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[40,11543,11544,11547,11549,11552,11554,11556],{"class":42,"line":264},[40,11545,11546],{"class":50},"    stuArray[",[40,11548,3698],{"class":63},[40,11550,11551],{"class":50},"].name",[40,11553,1284],{"class":1283},[40,11555,7025],{"class":94},[40,11557,4637],{"class":50},[40,11559,11560,11562,11564,11567,11569,11571],{"class":42,"line":277},[40,11561,11546],{"class":50},[40,11563,3698],{"class":63},[40,11565,11566],{"class":50},"].age",[40,11568,1284],{"class":1283},[40,11570,64],{"class":63},[40,11572,4637],{"class":50},[40,11574,11575,11577,11579,11582,11584,11586],{"class":42,"line":290},[40,11576,11546],{"class":50},[40,11578,3698],{"class":63},[40,11580,11581],{"class":50},"].score",[40,11583,1284],{"class":1283},[40,11585,64],{"class":63},[40,11587,4637],{"class":50},[40,11589,11590],{"class":42,"line":298},[40,11591,11592],{"class":997},"    \u002F\u002F4.遍历结构体数组\n",[40,11594,11595,11597,11599,11601,11603,11605,11607,11609,11611,11613,11615,11617],{"class":42,"line":310},[40,11596,6525],{"class":1283},[40,11598,4993],{"class":50},[40,11600,3491],{"class":1283},[40,11602,6356],{"class":50},[40,11604,1284],{"class":1283},[40,11606,3672],{"class":63},[40,11608,6363],{"class":50},[40,11610,4387],{"class":1283},[40,11612,64],{"class":63},[40,11614,6363],{"class":50},[40,11616,5618],{"class":1283},[40,11618,1811],{"class":50},[40,11620,11621],{"class":42,"line":5086},[40,11622,5356],{"class":50},[40,11624,11625,11627,11629,11632,11634,11637,11639,11642,11644],{"class":42,"line":5091},[40,11626,6775],{"class":50},[40,11628,4520],{"class":1283},[40,11630,11631],{"class":50},"stuArray[i].name",[40,11633,4520],{"class":1283},[40,11635,11636],{"class":50},"stuArray[i].age",[40,11638,4520],{"class":1283},[40,11640,11641],{"class":50},"stuArray[i].score",[40,11643,4520],{"class":1283},[40,11645,4542],{"class":50},[40,11647,11648],{"class":42,"line":5105},[40,11649,5513],{"class":50},[40,11651,11652],{"class":42,"line":5110},[40,11653,4907],{"class":50},[14,11655,11657],{"id":11656},"_43结构体指针","4.3结构体指针",[19,11659,11660],{},"作用：通过指针访问结构体中的成员",[19,11662,11663],{},"利用操作符->可以通过结构体指针访问结构体属性",[31,11665,11667],{"className":3476,"code":11666,"language":3478,"meta":36,"style":36},"#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",[26,11668,11669,11675,11685,11691,11695,11701,11705,11709,11715,11721,11725,11733,11737,11742,11767,11772,11787,11792,11815],{"__ignoreMap":36},[40,11670,11671,11673],{"class":42,"line":43},[40,11672,5276],{"class":1283},[40,11674,5279],{"class":94},[40,11676,11677,11679,11681,11683],{"class":42,"line":54},[40,11678,5284],{"class":1283},[40,11680,5287],{"class":1283},[40,11682,5290],{"class":596},[40,11684,4637],{"class":50},[40,11686,11687,11689],{"class":42,"line":70},[40,11688,5276],{"class":1283},[40,11690,11071],{"class":94},[40,11692,11693],{"class":42,"line":78},[40,11694,11430],{"class":997},[40,11696,11697,11699],{"class":42,"line":86},[40,11698,11081],{"class":1283},[40,11700,11084],{"class":596},[40,11702,11703],{"class":42,"line":100},[40,11704,4888],{"class":50},[40,11706,11707],{"class":42,"line":108},[40,11708,11107],{"class":50},[40,11710,11711,11713],{"class":42,"line":121},[40,11712,5311],{"class":1283},[40,11714,11119],{"class":50},[40,11716,11717,11719],{"class":42,"line":134},[40,11718,5311],{"class":1283},[40,11720,11131],{"class":50},[40,11722,11723],{"class":42,"line":146},[40,11724,7318],{"class":50},[40,11726,11727,11729,11731],{"class":42,"line":154},[40,11728,3491],{"class":1283},[40,11730,5299],{"class":596},[40,11732,5302],{"class":50},[40,11734,11735],{"class":42,"line":162},[40,11736,4888],{"class":50},[40,11738,11739],{"class":42,"line":170},[40,11740,11741],{"class":997},"    \u002F\u002F创建学生结构体变量\n",[40,11743,11744,11746,11748,11751,11753,11755,11757,11759,11761,11763,11765],{"class":42,"line":183},[40,11745,11217],{"class":1283},[40,11747,11220],{"class":596},[40,11749,11750],{"class":50}," s",[40,11752,1284],{"class":1283},[40,11754,4373],{"class":50},[40,11756,11238],{"class":94},[40,11758,1299],{"class":50},[40,11760,4128],{"class":63},[40,11762,1299],{"class":50},[40,11764,5053],{"class":63},[40,11766,7318],{"class":50},[40,11768,11769],{"class":42,"line":196},[40,11770,11771],{"class":997},"    \u002F\u002F通过指针指向结构体变量\n",[40,11773,11774,11776,11778,11780,11782,11784],{"class":42,"line":204},[40,11775,11217],{"class":1283},[40,11777,11220],{"class":596},[40,11779,9841],{"class":1283},[40,11781,19],{"class":50},[40,11783,9662],{"class":1283},[40,11785,11786],{"class":50},"s\n",[40,11788,11789],{"class":42,"line":217},[40,11790,11791],{"class":997},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[40,11793,11794,11796,11798,11801,11803,11806,11808,11811,11813],{"class":42,"line":230},[40,11795,4893],{"class":50},[40,11797,4520],{"class":1283},[40,11799,11800],{"class":50},"p->name",[40,11802,4520],{"class":1283},[40,11804,11805],{"class":50},"p->age",[40,11807,4520],{"class":1283},[40,11809,11810],{"class":50},"p->score",[40,11812,4520],{"class":1283},[40,11814,4542],{"class":50},[40,11816,11817],{"class":42,"line":238},[40,11818,4907],{"class":50},[14,11820,11822],{"id":11821},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,11824,11825],{},"作用：结构体中的成员可以是另一个结构体",[19,11827,11828],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[31,11830,11832],{"className":3476,"code":11831,"language":3478,"meta":36,"style":36},"#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",[26,11833,11834,11840,11850,11856,11861,11869,11873,11877,11883,11889,11893,11898,11905,11909,11916,11920,11926,11931,11935,11943,11947,11952,11957,11962,11973,11985,11996,12009,12020,12031],{"__ignoreMap":36},[40,11835,11836,11838],{"class":42,"line":43},[40,11837,5276],{"class":1283},[40,11839,5279],{"class":94},[40,11841,11842,11844,11846,11848],{"class":42,"line":54},[40,11843,5284],{"class":1283},[40,11845,5287],{"class":1283},[40,11847,5290],{"class":596},[40,11849,4637],{"class":50},[40,11851,11852,11854],{"class":42,"line":70},[40,11853,5276],{"class":1283},[40,11855,11071],{"class":94},[40,11857,11858],{"class":42,"line":78},[40,11859,11860],{"class":997},"\u002F\u002F定义学生结构体\n",[40,11862,11863,11865,11867],{"class":42,"line":86},[40,11864,11081],{"class":1283},[40,11866,11220],{"class":596},[40,11868,67],{"class":50},[40,11870,11871],{"class":42,"line":100},[40,11872,4888],{"class":50},[40,11874,11875],{"class":42,"line":108},[40,11876,11107],{"class":50},[40,11878,11879,11881],{"class":42,"line":121},[40,11880,5311],{"class":1283},[40,11882,11119],{"class":50},[40,11884,11885,11887],{"class":42,"line":134},[40,11886,5311],{"class":1283},[40,11888,11131],{"class":50},[40,11890,11891],{"class":42,"line":146},[40,11892,4907],{"class":50},[40,11894,11895],{"class":42,"line":154},[40,11896,11897],{"class":997},"\u002F\u002F定义老师结构体\n",[40,11899,11900,11902],{"class":42,"line":162},[40,11901,11081],{"class":1283},[40,11903,11904],{"class":596}," Teacher\n",[40,11906,11907],{"class":42,"line":170},[40,11908,4888],{"class":50},[40,11910,11911,11913],{"class":42,"line":183},[40,11912,5311],{"class":1283},[40,11914,11915],{"class":50}," id;\n",[40,11917,11918],{"class":42,"line":196},[40,11919,11107],{"class":50},[40,11921,11922,11924],{"class":42,"line":204},[40,11923,5311],{"class":1283},[40,11925,11119],{"class":50},[40,11927,11928],{"class":42,"line":217},[40,11929,11930],{"class":50},"    Student stu;\n",[40,11932,11933],{"class":42,"line":230},[40,11934,4907],{"class":50},[40,11936,11937,11939,11941],{"class":42,"line":238},[40,11938,3491],{"class":1283},[40,11940,5299],{"class":596},[40,11942,9301],{"class":50},[40,11944,11945],{"class":42,"line":251},[40,11946,4888],{"class":50},[40,11948,11949],{"class":42,"line":264},[40,11950,11951],{"class":997},"    \u002F\u002F结构体嵌套结构体\n",[40,11953,11954],{"class":42,"line":277},[40,11955,11956],{"class":997},"    \u002F\u002F创建老师\n",[40,11958,11959],{"class":42,"line":290},[40,11960,11961],{"class":50},"    Teacher t;\n",[40,11963,11964,11967,11969,11971],{"class":42,"line":298},[40,11965,11966],{"class":50},"    t.id",[40,11968,1284],{"class":1283},[40,11970,3791],{"class":63},[40,11972,4637],{"class":50},[40,11974,11975,11978,11980,11983],{"class":42,"line":310},[40,11976,11977],{"class":50},"    t.name",[40,11979,1284],{"class":1283},[40,11981,11982],{"class":94},"\"老王\"",[40,11984,4637],{"class":50},[40,11986,11987,11990,11992,11994],{"class":42,"line":5086},[40,11988,11989],{"class":50},"    t.age",[40,11991,1284],{"class":1283},[40,11993,4128],{"class":63},[40,11995,4637],{"class":50},[40,11997,11998,12001,12003,12006],{"class":42,"line":5091},[40,11999,12000],{"class":50},"    t.stu.name",[40,12002,1284],{"class":1283},[40,12004,12005],{"class":94},"\"小王\"",[40,12007,12008],{"class":50},"；\n",[40,12010,12011,12014,12016,12018],{"class":42,"line":5105},[40,12012,12013],{"class":50},"    t.stu.age",[40,12015,1284],{"class":1283},[40,12017,4178],{"class":63},[40,12019,4637],{"class":50},[40,12021,12022,12025,12027,12029],{"class":42,"line":5110},[40,12023,12024],{"class":50},"    t.stu.score",[40,12026,1284],{"class":1283},[40,12028,3824],{"class":63},[40,12030,4637],{"class":50},[40,12032,12033],{"class":42,"line":5902},[40,12034,4907],{"class":50},[14,12036,12038],{"id":12037},"_45结构体做函数参数","4.5结构体做函数参数",[19,12040,12041],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[31,12043,12045],{"className":3476,"code":12044,"language":3478,"meta":36,"style":36},"#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",[26,12046,12047,12053,12063,12069,12075,12079,12083,12089,12095,12099,12104,12109,12126,12130,12163,12167,12172,12191,12195,12226,12230,12238,12242,12251,12263,12275,12287,12300,12308,12321,12333,12341],{"__ignoreMap":36},[40,12048,12049,12051],{"class":42,"line":43},[40,12050,5276],{"class":1283},[40,12052,5279],{"class":94},[40,12054,12055,12057,12059,12061],{"class":42,"line":54},[40,12056,5284],{"class":1283},[40,12058,5287],{"class":1283},[40,12060,5290],{"class":596},[40,12062,4637],{"class":50},[40,12064,12065,12067],{"class":42,"line":70},[40,12066,5276],{"class":1283},[40,12068,11071],{"class":94},[40,12070,12071,12073],{"class":42,"line":78},[40,12072,11081],{"class":1283},[40,12074,11084],{"class":596},[40,12076,12077],{"class":42,"line":86},[40,12078,4888],{"class":50},[40,12080,12081],{"class":42,"line":100},[40,12082,11107],{"class":50},[40,12084,12085,12087],{"class":42,"line":108},[40,12086,5311],{"class":1283},[40,12088,11119],{"class":50},[40,12090,12091,12093],{"class":42,"line":121},[40,12092,5311],{"class":1283},[40,12094,11131],{"class":50},[40,12096,12097],{"class":42,"line":134},[40,12098,7318],{"class":50},[40,12100,12101],{"class":42,"line":146},[40,12102,12103],{"class":997},"\u002F\u002F打印学生信息的函数\n",[40,12105,12106],{"class":42,"line":154},[40,12107,12108],{"class":997},"\u002F\u002F值传递\n",[40,12110,12111,12113,12116,12118,12120,12122,12124],{"class":42,"line":162},[40,12112,8687],{"class":1283},[40,12114,12115],{"class":596}," printStudent1",[40,12117,3488],{"class":50},[40,12119,11081],{"class":1283},[40,12121,11220],{"class":596},[40,12123,11750],{"class":8539},[40,12125,1811],{"class":50},[40,12127,12128],{"class":42,"line":170},[40,12129,4888],{"class":50},[40,12131,12132,12134,12136,12139,12141,12144,12146,12149,12151,12153,12155,12158,12160],{"class":42,"line":183},[40,12133,9852],{"class":50},[40,12135,4520],{"class":1283},[40,12137,12138],{"class":50}," s.name ",[40,12140,4520],{"class":1283},[40,12142,12143],{"class":94}," \" \"",[40,12145,4787],{"class":1283},[40,12147,12148],{"class":50}," s.age ",[40,12150,4520],{"class":1283},[40,12152,12143],{"class":94},[40,12154,4787],{"class":1283},[40,12156,12157],{"class":50}," s.score ",[40,12159,4520],{"class":1283},[40,12161,12162],{"class":50}," endl;\n",[40,12164,12165],{"class":42,"line":196},[40,12166,4907],{"class":50},[40,12168,12169],{"class":42,"line":204},[40,12170,12171],{"class":997},"\u002F\u002F地址传递\n",[40,12173,12174,12176,12179,12181,12183,12185,12187,12189],{"class":42,"line":217},[40,12175,8687],{"class":1283},[40,12177,12178],{"class":596}," printStudent2",[40,12180,3488],{"class":50},[40,12182,11081],{"class":1283},[40,12184,11220],{"class":596},[40,12186,9841],{"class":1283},[40,12188,4173],{"class":8539},[40,12190,1811],{"class":50},[40,12192,12193],{"class":42,"line":230},[40,12194,4888],{"class":50},[40,12196,12197,12199,12201,12204,12206,12208,12210,12213,12215,12217,12219,12222,12224],{"class":42,"line":238},[40,12198,9852],{"class":50},[40,12200,4520],{"class":1283},[40,12202,12203],{"class":50}," s->name ",[40,12205,4520],{"class":1283},[40,12207,12143],{"class":94},[40,12209,4787],{"class":1283},[40,12211,12212],{"class":50}," s->age ",[40,12214,4520],{"class":1283},[40,12216,12143],{"class":94},[40,12218,4787],{"class":1283},[40,12220,12221],{"class":50}," s->score ",[40,12223,4520],{"class":1283},[40,12225,12162],{"class":50},[40,12227,12228],{"class":42,"line":251},[40,12229,4907],{"class":50},[40,12231,12232,12234,12236],{"class":42,"line":264},[40,12233,3491],{"class":1283},[40,12235,5299],{"class":596},[40,12237,5302],{"class":50},[40,12239,12240],{"class":42,"line":277},[40,12241,4888],{"class":50},[40,12243,12244,12246,12248],{"class":42,"line":290},[40,12245,11217],{"class":1283},[40,12247,11220],{"class":596},[40,12249,12250],{"class":50}," s;\n",[40,12252,12253,12256,12258,12261],{"class":42,"line":298},[40,12254,12255],{"class":50},"    s.name ",[40,12257,1284],{"class":1283},[40,12259,12260],{"class":94}," \"张三\"",[40,12262,4637],{"class":50},[40,12264,12265,12268,12270,12273],{"class":42,"line":310},[40,12266,12267],{"class":50},"    s.age ",[40,12269,1284],{"class":1283},[40,12271,12272],{"class":63}," 20",[40,12274,4637],{"class":50},[40,12276,12277,12280,12282,12285],{"class":42,"line":5086},[40,12278,12279],{"class":50},"    s.score ",[40,12281,1284],{"class":1283},[40,12283,12284],{"class":63}," 85",[40,12286,4637],{"class":50},[40,12288,12289,12291,12293,12296,12298],{"class":42,"line":5091},[40,12290,4893],{"class":50},[40,12292,4520],{"class":1283},[40,12294,12295],{"class":94},"\"值传递:\"",[40,12297,4520],{"class":1283},[40,12299,4542],{"class":50},[40,12301,12302,12305],{"class":42,"line":5105},[40,12303,12304],{"class":596},"    printStudent1",[40,12306,12307],{"class":50},"(s);\n",[40,12309,12310,12312,12314,12317,12319],{"class":42,"line":5110},[40,12311,4893],{"class":50},[40,12313,4520],{"class":1283},[40,12315,12316],{"class":94},"\"地址传递:\"",[40,12318,4520],{"class":1283},[40,12320,4542],{"class":50},[40,12322,12323,12326,12328,12330],{"class":42,"line":5902},[40,12324,12325],{"class":596},"    printStudent2",[40,12327,3488],{"class":50},[40,12329,3833],{"class":1283},[40,12331,12332],{"class":50},"s); \n",[40,12334,12335,12337,12339],{"class":42,"line":5916},[40,12336,7413],{"class":1283},[40,12338,7416],{"class":63},[40,12340,4637],{"class":50},[40,12342,12343],{"class":42,"line":5924},[40,12344,4907],{"class":50},[19,12346,12347],{},"注意：",[1338,12349,12350,12353],{},[495,12351,12352],{},"1.先定义结构体，不要在函数中写结构体的定义",[495,12354,12355],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,12357,12359],{"id":12358},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,12361,12362],{},"用const防止误操作",[31,12364,12366],{"className":3476,"code":12365,"language":3478,"meta":36,"style":36},"#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",[26,12367,12368,12374,12384,12390,12395,12399,12403,12409,12415,12419,12435,12439,12462,12466,12474,12478,12499,12506,12510],{"__ignoreMap":36},[40,12369,12370,12372],{"class":42,"line":43},[40,12371,5276],{"class":1283},[40,12373,5279],{"class":94},[40,12375,12376,12378,12380,12382],{"class":42,"line":54},[40,12377,5284],{"class":1283},[40,12379,5287],{"class":1283},[40,12381,5290],{"class":596},[40,12383,4637],{"class":50},[40,12385,12386,12388],{"class":42,"line":70},[40,12387,5276],{"class":1283},[40,12389,11071],{"class":94},[40,12391,12392],{"class":42,"line":78},[40,12393,12394],{"class":50},"sctuct Student\n",[40,12396,12397],{"class":42,"line":86},[40,12398,4888],{"class":50},[40,12400,12401],{"class":42,"line":100},[40,12402,11107],{"class":50},[40,12404,12405,12407],{"class":42,"line":108},[40,12406,5311],{"class":1283},[40,12408,11119],{"class":50},[40,12410,12411,12413],{"class":42,"line":121},[40,12412,5311],{"class":1283},[40,12414,11131],{"class":50},[40,12416,12417],{"class":42,"line":134},[40,12418,7318],{"class":50},[40,12420,12421,12423,12426,12428,12431,12433],{"class":42,"line":146},[40,12422,8687],{"class":1283},[40,12424,12425],{"class":596}," printStudents",[40,12427,3488],{"class":50},[40,12429,12430],{"class":596},"student",[40,12432,11750],{"class":8539},[40,12434,1811],{"class":50},[40,12436,12437],{"class":42,"line":154},[40,12438,4888],{"class":50},[40,12440,12441,12443,12445,12448,12450,12453,12455,12458,12460],{"class":42,"line":162},[40,12442,4893],{"class":50},[40,12444,4520],{"class":1283},[40,12446,12447],{"class":50},"s.name",[40,12449,4520],{"class":1283},[40,12451,12452],{"class":50},"s.age",[40,12454,4520],{"class":1283},[40,12456,12457],{"class":50},"s.score",[40,12459,4520],{"class":1283},[40,12461,4542],{"class":50},[40,12463,12464],{"class":42,"line":170},[40,12465,4907],{"class":50},[40,12467,12468,12470,12472],{"class":42,"line":183},[40,12469,3491],{"class":1283},[40,12471,5299],{"class":596},[40,12473,9301],{"class":50},[40,12475,12476],{"class":42,"line":196},[40,12477,4888],{"class":50},[40,12479,12480,12483,12485,12487,12489,12491,12493,12495,12497],{"class":42,"line":204},[40,12481,12482],{"class":50},"    Student s",[40,12484,1284],{"class":1283},[40,12486,4373],{"class":50},[40,12488,11238],{"class":94},[40,12490,1299],{"class":50},[40,12492,4128],{"class":63},[40,12494,1299],{"class":50},[40,12496,4128],{"class":63},[40,12498,7318],{"class":50},[40,12500,12501,12504],{"class":42,"line":217},[40,12502,12503],{"class":596},"    printStudent",[40,12505,12307],{"class":50},[40,12507,12508],{"class":42,"line":230},[40,12509,1413],{"emptyLinePlaceholder":1412},[40,12511,12512],{"class":42,"line":238},[40,12513,4907],{"class":50},[19,12515,12347],{},[1338,12517,12518,12521,12524],{},[495,12519,12520],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[495,12522,12523],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[495,12525,12526],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[31,12528,12530],{"className":3476,"code":12529,"language":3478,"meta":36,"style":36},"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",[26,12531,12532,12551,12555,12560,12580],{"__ignoreMap":36},[40,12533,12534,12536,12538,12540,12542,12545,12547,12549],{"class":42,"line":43},[40,12535,8687],{"class":1283},[40,12537,12425],{"class":596},[40,12539,3488],{"class":50},[40,12541,10115],{"class":1283},[40,12543,12544],{"class":596}," student",[40,12546,9841],{"class":1283},[40,12548,4173],{"class":8539},[40,12550,1811],{"class":50},[40,12552,12553],{"class":42,"line":54},[40,12554,4888],{"class":50},[40,12556,12557],{"class":42,"line":70},[40,12558,12559],{"class":997},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[40,12561,12562,12564,12566,12568,12570,12572,12574,12576,12578],{"class":42,"line":78},[40,12563,4893],{"class":50},[40,12565,4520],{"class":1283},[40,12567,12447],{"class":50},[40,12569,4520],{"class":1283},[40,12571,12452],{"class":50},[40,12573,4520],{"class":1283},[40,12575,12457],{"class":50},[40,12577,4520],{"class":1283},[40,12579,4542],{"class":50},[40,12581,12582],{"class":42,"line":86},[40,12583,4907],{"class":50},[14,12585,12587],{"id":12586},"_47案例","4.7案例",[492,12589,12590],{},[495,12591,12592],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[31,12594,12596],{"className":3476,"code":12595,"language":3478,"meta":36,"style":36},"#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",[26,12597,12598,12604,12614,12620,12627,12631,12637,12641,12646,12652,12658,12662,12666,12672,12676,12681,12686,12699,12703,12708,12734,12738,12750,12777,12781,12793,12803,12807,12812,12841,12845,12857,12866,12893,12904,12914,12918,12922,12926,12931,12955,12959,12983,12987,13006,13032,13036,13061,13084,13108,13113,13118,13123,13132,13137,13143,13164,13170,13184,13190,13217,13226,13232,13240,13245],{"__ignoreMap":36},[40,12599,12600,12602],{"class":42,"line":43},[40,12601,5276],{"class":1283},[40,12603,5279],{"class":94},[40,12605,12606,12608,12610,12612],{"class":42,"line":54},[40,12607,5284],{"class":1283},[40,12609,5287],{"class":1283},[40,12611,5290],{"class":596},[40,12613,4637],{"class":50},[40,12615,12616,12618],{"class":42,"line":70},[40,12617,5276],{"class":1283},[40,12619,11071],{"class":94},[40,12621,12622,12624],{"class":42,"line":78},[40,12623,5276],{"class":1283},[40,12625,12626],{"class":94},"\u003Cctime>\n",[40,12628,12629],{"class":42,"line":86},[40,12630,11860],{"class":997},[40,12632,12633,12635],{"class":42,"line":100},[40,12634,11081],{"class":1283},[40,12636,11084],{"class":596},[40,12638,12639],{"class":42,"line":108},[40,12640,4888],{"class":50},[40,12642,12643],{"class":42,"line":121},[40,12644,12645],{"class":50},"    string sName;\n",[40,12647,12648,12650],{"class":42,"line":134},[40,12649,5311],{"class":1283},[40,12651,11119],{"class":50},[40,12653,12654,12656],{"class":42,"line":146},[40,12655,5311],{"class":1283},[40,12657,11131],{"class":50},[40,12659,12660],{"class":42,"line":154},[40,12661,7318],{"class":50},[40,12663,12664],{"class":42,"line":162},[40,12665,11897],{"class":997},[40,12667,12668,12670],{"class":42,"line":170},[40,12669,11081],{"class":1283},[40,12671,11904],{"class":596},[40,12673,12674],{"class":42,"line":183},[40,12675,4888],{"class":50},[40,12677,12678],{"class":42,"line":196},[40,12679,12680],{"class":50},"    string tName;\n",[40,12682,12683],{"class":42,"line":204},[40,12684,12685],{"class":997},"    \u002F\u002F学生数组\n",[40,12687,12688,12690,12692,12695,12697],{"class":42,"line":217},[40,12689,11217],{"class":1283},[40,12691,11220],{"class":596},[40,12693,12694],{"class":50}," sArray[",[40,12696,3799],{"class":63},[40,12698,8013],{"class":50},[40,12700,12701],{"class":42,"line":230},[40,12702,7318],{"class":50},[40,12704,12705],{"class":42,"line":238},[40,12706,12707],{"class":997},"\u002F\u002F给老师和学生赋值的函数\n",[40,12709,12710,12712,12715,12717,12719,12722,12725,12728,12730,12732],{"class":42,"line":251},[40,12711,8687],{"class":1283},[40,12713,12714],{"class":596}," allocateSpace",[40,12716,3488],{"class":50},[40,12718,11081],{"class":1283},[40,12720,12721],{"class":596}," Teacher",[40,12723,12724],{"class":8539}," tArray",[40,12726,12727],{"class":50},"[],",[40,12729,3491],{"class":1283},[40,12731,10654],{"class":8539},[40,12733,1811],{"class":50},[40,12735,12736],{"class":42,"line":264},[40,12737,4888],{"class":50},[40,12739,12740,12743,12745,12748],{"class":42,"line":277},[40,12741,12742],{"class":50},"    string nameSeed",[40,12744,1284],{"class":1283},[40,12746,12747],{"class":94},"\"ABCDE\"",[40,12749,4637],{"class":50},[40,12751,12752,12754,12756,12758,12761,12763,12765,12768,12770,12773,12775],{"class":42,"line":290},[40,12753,6525],{"class":1283},[40,12755,4993],{"class":50},[40,12757,3491],{"class":1283},[40,12759,12760],{"class":50}," i ",[40,12762,1284],{"class":1283},[40,12764,7416],{"class":63},[40,12766,12767],{"class":50},"; i ",[40,12769,4387],{"class":1283},[40,12771,12772],{"class":50}," len; i",[40,12774,5618],{"class":1283},[40,12776,1811],{"class":50},[40,12778,12779],{"class":42,"line":298},[40,12780,5356],{"class":50},[40,12782,12783,12786,12788,12791],{"class":42,"line":310},[40,12784,12785],{"class":50},"        tArray[i].tName ",[40,12787,1284],{"class":1283},[40,12789,12790],{"class":94}," \"Teacher_\"",[40,12792,4637],{"class":50},[40,12794,12795,12797,12800],{"class":42,"line":5086},[40,12796,12785],{"class":50},[40,12798,12799],{"class":1283},"+=",[40,12801,12802],{"class":50},"nameSeed[i];\n",[40,12804,12805],{"class":42,"line":5091},[40,12806,1413],{"emptyLinePlaceholder":1412},[40,12808,12809],{"class":42,"line":5105},[40,12810,12811],{"class":997},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[40,12813,12814,12816,12818,12820,12823,12825,12827,12830,12832,12834,12837,12839],{"class":42,"line":5110},[40,12815,6727],{"class":1283},[40,12817,4993],{"class":50},[40,12819,3491],{"class":1283},[40,12821,12822],{"class":50}," j ",[40,12824,1284],{"class":1283},[40,12826,7416],{"class":63},[40,12828,12829],{"class":50},"; j ",[40,12831,4387],{"class":1283},[40,12833,5474],{"class":63},[40,12835,12836],{"class":50},"; j",[40,12838,5618],{"class":1283},[40,12840,1811],{"class":50},[40,12842,12843],{"class":42,"line":5902},[40,12844,5835],{"class":50},[40,12846,12847,12850,12852,12855],{"class":42,"line":5916},[40,12848,12849],{"class":50},"            tArray[i].sArray[j].sName ",[40,12851,1284],{"class":1283},[40,12853,12854],{"class":94}," \"Student_\"",[40,12856,4637],{"class":50},[40,12858,12859,12861,12863],{"class":42,"line":5924},[40,12860,12849],{"class":50},[40,12862,12799],{"class":1283},[40,12864,12865],{"class":50}," nameSeed[j];\n",[40,12867,12868,12871,12874,12876,12878,12880,12882,12884,12886,12888,12890],{"class":42,"line":5929},[40,12869,12870],{"class":1283},"            int",[40,12872,12873],{"class":50}," random",[40,12875,1284],{"class":1283},[40,12877,5749],{"class":596},[40,12879,5752],{"class":50},[40,12881,3808],{"class":1283},[40,12883,4384],{"class":63},[40,12885,3960],{"class":1283},[40,12887,3880],{"class":63},[40,12889,3540],{"class":50},[40,12891,12892],{"class":997},"\u002F\u002F40~99\n",[40,12894,12895,12898,12900,12902],{"class":42,"line":5935},[40,12896,12897],{"class":50},"            tArray[i].sArray[j].age ",[40,12899,1284],{"class":1283},[40,12901,12272],{"class":63},[40,12903,4637],{"class":50},[40,12905,12906,12909,12911],{"class":42,"line":5941},[40,12907,12908],{"class":50},"            tArray[i].sArray[j].score ",[40,12910,1284],{"class":1283},[40,12912,12913],{"class":50}," random;\n",[40,12915,12916],{"class":42,"line":5946},[40,12917,5854],{"class":50},[40,12919,12920],{"class":42,"line":11270},[40,12921,5513],{"class":50},[40,12923,12924],{"class":42,"line":11294},[40,12925,4907],{"class":50},[40,12927,12928],{"class":42,"line":11299},[40,12929,12930],{"class":997},"\u002F\u002F打印所有信息的函数\n",[40,12932,12933,12935,12938,12940,12942,12944,12946,12949,12951,12953],{"class":42,"line":11305},[40,12934,8687],{"class":1283},[40,12936,12937],{"class":596}," printInfo",[40,12939,3488],{"class":50},[40,12941,11081],{"class":1283},[40,12943,12721],{"class":596},[40,12945,12724],{"class":8539},[40,12947,12948],{"class":50},"[], ",[40,12950,3491],{"class":1283},[40,12952,10654],{"class":8539},[40,12954,1811],{"class":50},[40,12956,12957],{"class":42,"line":11332},[40,12958,4888],{"class":50},[40,12960,12961,12963,12965,12967,12969,12971,12973,12975,12977,12979,12981],{"class":42,"line":11337},[40,12962,6525],{"class":1283},[40,12964,4993],{"class":50},[40,12966,3491],{"class":1283},[40,12968,12760],{"class":50},[40,12970,1284],{"class":1283},[40,12972,7416],{"class":63},[40,12974,12767],{"class":50},[40,12976,4387],{"class":1283},[40,12978,12772],{"class":50},[40,12980,5618],{"class":1283},[40,12982,1811],{"class":50},[40,12984,12985],{"class":42,"line":11343},[40,12986,5356],{"class":50},[40,12988,12989,12992,12994,12997,12999,13002,13004],{"class":42,"line":11355},[40,12990,12991],{"class":50},"        cout ",[40,12993,4520],{"class":1283},[40,12995,12996],{"class":94}," \"Teacher: \"",[40,12998,4787],{"class":1283},[40,13000,13001],{"class":50}," tArray[i].tName ",[40,13003,4520],{"class":1283},[40,13005,12162],{"class":50},[40,13007,13008,13010,13012,13014,13016,13018,13020,13022,13024,13026,13028,13030],{"class":42,"line":11367},[40,13009,6727],{"class":1283},[40,13011,4993],{"class":50},[40,13013,3491],{"class":1283},[40,13015,12822],{"class":50},[40,13017,1284],{"class":1283},[40,13019,7416],{"class":63},[40,13021,12829],{"class":50},[40,13023,4387],{"class":1283},[40,13025,5474],{"class":63},[40,13027,12836],{"class":50},[40,13029,5618],{"class":1283},[40,13031,1811],{"class":50},[40,13033,13034],{"class":42,"line":11379},[40,13035,5835],{"class":50},[40,13037,13039,13042,13044,13047,13049,13052,13054,13057,13059],{"class":42,"line":13038},47,[40,13040,13041],{"class":50},"            cout ",[40,13043,4520],{"class":1283},[40,13045,13046],{"class":94}," \"",[40,13048,4577],{"class":63},[40,13050,13051],{"class":94},"Student: \"",[40,13053,4787],{"class":1283},[40,13055,13056],{"class":50}," tArray[i].sArray[j].sName",[40,13058,4520],{"class":1283},[40,13060,4542],{"class":50},[40,13062,13064,13066,13068,13070,13072,13075,13077,13080,13082],{"class":42,"line":13063},48,[40,13065,13041],{"class":50},[40,13067,4520],{"class":1283},[40,13069,13046],{"class":94},[40,13071,4577],{"class":63},[40,13073,13074],{"class":94},"Age: \"",[40,13076,4787],{"class":1283},[40,13078,13079],{"class":50}," tArray[i].sArray[j].age ",[40,13081,4520],{"class":1283},[40,13083,12162],{"class":50},[40,13085,13087,13089,13091,13093,13095,13098,13100,13103,13105],{"class":42,"line":13086},49,[40,13088,13041],{"class":50},[40,13090,4520],{"class":1283},[40,13092,13046],{"class":94},[40,13094,4577],{"class":63},[40,13096,13097],{"class":94},"Score: \"",[40,13099,4787],{"class":1283},[40,13101,13102],{"class":50}," tArray[i].sArray[j].score ",[40,13104,4520],{"class":1283},[40,13106,13107],{"class":50}," endl;   \n",[40,13109,13111],{"class":42,"line":13110},50,[40,13112,5854],{"class":50},[40,13114,13116],{"class":42,"line":13115},51,[40,13117,5513],{"class":50},[40,13119,13121],{"class":42,"line":13120},52,[40,13122,4907],{"class":50},[40,13124,13126,13128,13130],{"class":42,"line":13125},53,[40,13127,3491],{"class":1283},[40,13129,5299],{"class":596},[40,13131,5302],{"class":50},[40,13133,13135],{"class":42,"line":13134},54,[40,13136,4888],{"class":50},[40,13138,13140],{"class":42,"line":13139},55,[40,13141,13142],{"class":997},"    \u002F\u002F随机数种子\n",[40,13144,13146,13148,13150,13152,13154,13156,13158,13160,13162],{"class":42,"line":13145},56,[40,13147,5699],{"class":596},[40,13149,5702],{"class":50},[40,13151,5705],{"class":1283},[40,13153,5708],{"class":1283},[40,13155,3908],{"class":50},[40,13157,5713],{"class":596},[40,13159,3488],{"class":50},[40,13161,5718],{"class":63},[40,13163,5721],{"class":50},[40,13165,13167],{"class":42,"line":13166},57,[40,13168,13169],{"class":997},"    \u002F\u002F1.创建3名老师的数组\n",[40,13171,13173,13175,13177,13180,13182],{"class":42,"line":13172},58,[40,13174,11217],{"class":1283},[40,13176,12721],{"class":596},[40,13178,13179],{"class":50}," tArray[",[40,13181,3555],{"class":63},[40,13183,8013],{"class":50},[40,13185,13187],{"class":42,"line":13186},59,[40,13188,13189],{"class":997},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[40,13191,13193,13195,13198,13200,13203,13206,13208,13210,13213,13215],{"class":42,"line":13192},60,[40,13194,5311],{"class":1283},[40,13196,13197],{"class":50}," len ",[40,13199,1284],{"class":1283},[40,13201,13202],{"class":1283}," sizeof",[40,13204,13205],{"class":50},"(tArray) ",[40,13207,4063],{"class":1283},[40,13209,13202],{"class":1283},[40,13211,13212],{"class":50},"(tArray[",[40,13214,3672],{"class":63},[40,13216,7179],{"class":50},[40,13218,13220,13223],{"class":42,"line":13219},61,[40,13221,13222],{"class":596},"    allocateSpace",[40,13224,13225],{"class":50},"(tArray, len);\n",[40,13227,13229],{"class":42,"line":13228},62,[40,13230,13231],{"class":997},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[40,13233,13235,13238],{"class":42,"line":13234},63,[40,13236,13237],{"class":596},"    printInfo",[40,13239,13225],{"class":50},[40,13241,13243],{"class":42,"line":13242},64,[40,13244,1413],{"emptyLinePlaceholder":1412},[40,13246,13248],{"class":42,"line":13247},65,[40,13249,4907],{"class":50},[492,13251,13252],{"start":54},[495,13253,13254,13257],{},[409,13255,13256],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,13259,13260],{},"五名英雄信息如下：",[31,13262,13266],{"className":13263,"code":13264,"language":13265,"meta":36,"style":36},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[26,13267,13268,13286,13303,13320,13337],{"__ignoreMap":36},[40,13269,13270,13272,13275,13277,13279,13281,13284],{"class":42,"line":43},[40,13271,8240],{"class":50},[40,13273,13274],{"class":94},"\"刘备\"",[40,13276,1299],{"class":50},[40,13278,4253],{"class":63},[40,13280,1299],{"class":50},[40,13282,13283],{"class":94},"\"男\"",[40,13285,8253],{"class":50},[40,13287,13288,13290,13293,13295,13297,13299,13301],{"class":42,"line":54},[40,13289,8240],{"class":50},[40,13291,13292],{"class":94},"\"关羽\"",[40,13294,1299],{"class":50},[40,13296,4228],{"class":63},[40,13298,1299],{"class":50},[40,13300,13283],{"class":94},[40,13302,8253],{"class":50},[40,13304,13305,13307,13310,13312,13314,13316,13318],{"class":42,"line":70},[40,13306,8240],{"class":50},[40,13308,13309],{"class":94},"\"张飞\"",[40,13311,1299],{"class":50},[40,13313,4178],{"class":63},[40,13315,1299],{"class":50},[40,13317,13283],{"class":94},[40,13319,8253],{"class":50},[40,13321,13322,13324,13327,13329,13331,13333,13335],{"class":42,"line":78},[40,13323,8240],{"class":50},[40,13325,13326],{"class":94},"\"赵云\"",[40,13328,1299],{"class":50},[40,13330,4203],{"class":63},[40,13332,1299],{"class":50},[40,13334,13283],{"class":94},[40,13336,8253],{"class":50},[40,13338,13339,13341,13344,13346,13348,13350,13353],{"class":42,"line":86},[40,13340,8240],{"class":50},[40,13342,13343],{"class":94},"\"貂蝉\"",[40,13345,1299],{"class":50},[40,13347,4153],{"class":63},[40,13349,1299],{"class":50},[40,13351,13352],{"class":94},"\"女\"",[40,13354,8253],{"class":50},[19,13356,13357],{},"代码：",[31,13359,13361],{"className":3476,"code":13360,"language":3478,"meta":36,"style":36},"#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",[26,13362,13363,13369,13379,13385,13392,13396,13400,13406,13411,13415,13420,13443,13447,13472,13476,13509,13514,13543,13548,13563,13589,13609,13614,13619,13623,13627,13632,13654,13658,13682,13686,13748,13752,13756,13764,13768,13773,13784,13788,13804,13820,13836,13852,13868,13872,13892,13914,13919,13932,13939,13944,13950,13955,13968,13974],{"__ignoreMap":36},[40,13364,13365,13367],{"class":42,"line":43},[40,13366,5276],{"class":1283},[40,13368,5279],{"class":94},[40,13370,13371,13373,13375,13377],{"class":42,"line":54},[40,13372,5284],{"class":1283},[40,13374,5287],{"class":1283},[40,13376,5290],{"class":596},[40,13378,4637],{"class":50},[40,13380,13381,13383],{"class":42,"line":70},[40,13382,5276],{"class":1283},[40,13384,11071],{"class":94},[40,13386,13387,13389],{"class":42,"line":78},[40,13388,11081],{"class":1283},[40,13390,13391],{"class":596}," Sanguo\n",[40,13393,13394],{"class":42,"line":86},[40,13395,4888],{"class":50},[40,13397,13398],{"class":42,"line":100},[40,13399,11107],{"class":50},[40,13401,13402,13404],{"class":42,"line":108},[40,13403,5311],{"class":1283},[40,13405,11119],{"class":50},[40,13407,13408],{"class":42,"line":121},[40,13409,13410],{"class":50},"    string gender;\n",[40,13412,13413],{"class":42,"line":134},[40,13414,7318],{"class":50},[40,13416,13417],{"class":42,"line":146},[40,13418,13419],{"class":997},"\u002F\u002F定义排序函数\n",[40,13421,13422,13424,13426,13428,13431,13433,13435,13437,13439,13441],{"class":42,"line":154},[40,13423,8687],{"class":1283},[40,13425,10639],{"class":596},[40,13427,3488],{"class":50},[40,13429,13430],{"class":596},"Sanguo",[40,13432,9841],{"class":1283},[40,13434,4173],{"class":8539},[40,13436,1299],{"class":50},[40,13438,3491],{"class":1283},[40,13440,10654],{"class":8539},[40,13442,1811],{"class":50},[40,13444,13445],{"class":42,"line":162},[40,13446,4888],{"class":50},[40,13448,13449,13451,13453,13455,13457,13459,13461,13463,13465,13468,13470],{"class":42,"line":170},[40,13450,6525],{"class":1283},[40,13452,3488],{"class":50},[40,13454,3491],{"class":1283},[40,13456,6356],{"class":50},[40,13458,1284],{"class":1283},[40,13460,3672],{"class":63},[40,13462,6363],{"class":50},[40,13464,4387],{"class":1283},[40,13466,13467],{"class":50},"len;i",[40,13469,5618],{"class":1283},[40,13471,1811],{"class":50},[40,13473,13474],{"class":42,"line":183},[40,13475,5356],{"class":50},[40,13477,13478,13481,13483,13485,13487,13489,13491,13493,13495,13497,13499,13501,13503,13505,13507],{"class":42,"line":196},[40,13479,13480],{"class":1283},"     for",[40,13482,4993],{"class":50},[40,13484,3491],{"class":1283},[40,13486,6734],{"class":50},[40,13488,1284],{"class":1283},[40,13490,3672],{"class":63},[40,13492,6741],{"class":50},[40,13494,4387],{"class":1283},[40,13496,10681],{"class":50},[40,13498,4011],{"class":1283},[40,13500,3698],{"class":63},[40,13502,4011],{"class":1283},[40,13504,6874],{"class":50},[40,13506,5618],{"class":1283},[40,13508,1811],{"class":50},[40,13510,13511],{"class":42,"line":204},[40,13512,13513],{"class":50},"     {\n",[40,13515,13516,13519,13522,13524,13527,13529,13532,13534,13536,13538,13540],{"class":42,"line":217},[40,13517,13518],{"class":1283},"         if",[40,13520,13521],{"class":50}," ((s",[40,13523,3960],{"class":1283},[40,13525,13526],{"class":50},"j)->age ",[40,13528,4437],{"class":1283},[40,13530,13531],{"class":50}," (s",[40,13533,3960],{"class":1283},[40,13535,3946],{"class":50},[40,13537,3960],{"class":1283},[40,13539,3698],{"class":63},[40,13541,13542],{"class":50},")->age)\n",[40,13544,13545],{"class":42,"line":230},[40,13546,13547],{"class":50},"         {\n",[40,13549,13550,13553,13555,13558,13560],{"class":42,"line":238},[40,13551,13552],{"class":50},"             Sanguo temp",[40,13554,10476],{"class":1283},[40,13556,13557],{"class":50},"(s",[40,13559,3960],{"class":1283},[40,13561,13562],{"class":50},"j);\n",[40,13564,13565,13568,13570,13572,13575,13577,13579,13581,13583,13585,13587],{"class":42,"line":251},[40,13566,13567],{"class":1283},"             *",[40,13569,13557],{"class":50},[40,13571,3960],{"class":1283},[40,13573,13574],{"class":50},"j)",[40,13576,10476],{"class":1283},[40,13578,13557],{"class":50},[40,13580,3960],{"class":1283},[40,13582,3946],{"class":50},[40,13584,3960],{"class":1283},[40,13586,3698],{"class":63},[40,13588,6043],{"class":50},[40,13590,13591,13593,13595,13597,13599,13601,13603,13605,13607],{"class":42,"line":264},[40,13592,13567],{"class":1283},[40,13594,13557],{"class":50},[40,13596,3960],{"class":1283},[40,13598,3946],{"class":50},[40,13600,3960],{"class":1283},[40,13602,3698],{"class":63},[40,13604,3908],{"class":50},[40,13606,1284],{"class":1283},[40,13608,7603],{"class":50},[40,13610,13611],{"class":42,"line":277},[40,13612,13613],{"class":50},"         }\n",[40,13615,13616],{"class":42,"line":290},[40,13617,13618],{"class":50},"     }\n",[40,13620,13621],{"class":42,"line":298},[40,13622,5513],{"class":50},[40,13624,13625],{"class":42,"line":310},[40,13626,4907],{"class":50},[40,13628,13629],{"class":42,"line":5086},[40,13630,13631],{"class":997},"\u002F\u002F定义打印函数\n",[40,13633,13634,13636,13638,13640,13642,13644,13646,13648,13650,13652],{"class":42,"line":5091},[40,13635,8687],{"class":1283},[40,13637,12937],{"class":596},[40,13639,3488],{"class":50},[40,13641,13430],{"class":596},[40,13643,9841],{"class":1283},[40,13645,4173],{"class":8539},[40,13647,1299],{"class":50},[40,13649,3491],{"class":1283},[40,13651,10654],{"class":8539},[40,13653,1811],{"class":50},[40,13655,13656],{"class":42,"line":5105},[40,13657,4888],{"class":50},[40,13659,13660,13662,13664,13666,13668,13670,13672,13674,13676,13678,13680],{"class":42,"line":5110},[40,13661,6525],{"class":1283},[40,13663,4993],{"class":50},[40,13665,3491],{"class":1283},[40,13667,6356],{"class":50},[40,13669,1284],{"class":1283},[40,13671,3672],{"class":63},[40,13673,6363],{"class":50},[40,13675,4387],{"class":1283},[40,13677,13467],{"class":50},[40,13679,5618],{"class":1283},[40,13681,1811],{"class":50},[40,13683,13684],{"class":42,"line":5902},[40,13685,5356],{"class":50},[40,13687,13688,13690,13692,13694,13696,13699,13701,13703,13705,13708,13710,13712,13714,13717,13719,13721,13723,13726,13728,13730,13732,13735,13737,13739,13741,13744,13746],{"class":42,"line":5916},[40,13689,6775],{"class":50},[40,13691,4520],{"class":1283},[40,13693,3731],{"class":94},[40,13695,4577],{"class":63},[40,13697,13698],{"class":94},"姓名：\"",[40,13700,4520],{"class":1283},[40,13702,13557],{"class":50},[40,13704,3960],{"class":1283},[40,13706,13707],{"class":50},"i)->name",[40,13709,4520],{"class":1283},[40,13711,3731],{"class":94},[40,13713,4577],{"class":63},[40,13715,13716],{"class":94},"年龄：\"",[40,13718,4520],{"class":1283},[40,13720,13557],{"class":50},[40,13722,3960],{"class":1283},[40,13724,13725],{"class":50},"i)->age",[40,13727,4520],{"class":1283},[40,13729,3731],{"class":94},[40,13731,4577],{"class":63},[40,13733,13734],{"class":94},"性别：\"",[40,13736,4520],{"class":1283},[40,13738,13557],{"class":50},[40,13740,3960],{"class":1283},[40,13742,13743],{"class":50},"i)->gender",[40,13745,4520],{"class":1283},[40,13747,4542],{"class":50},[40,13749,13750],{"class":42,"line":5924},[40,13751,5513],{"class":50},[40,13753,13754],{"class":42,"line":5929},[40,13755,4907],{"class":50},[40,13757,13758,13760,13762],{"class":42,"line":5935},[40,13759,3491],{"class":1283},[40,13761,5299],{"class":596},[40,13763,5302],{"class":50},[40,13765,13766],{"class":42,"line":5941},[40,13767,4888],{"class":50},[40,13769,13770],{"class":42,"line":5946},[40,13771,13772],{"class":997},"    \u002F\u002F定义结构体变量\n",[40,13774,13775,13778,13780,13782],{"class":42,"line":11270},[40,13776,13777],{"class":50},"    Sanguo s1[",[40,13779,3799],{"class":63},[40,13781,4417],{"class":50},[40,13783,8231],{"class":1283},[40,13785,13786],{"class":42,"line":11294},[40,13787,5356],{"class":50},[40,13789,13790,13792,13794,13796,13798,13800,13802],{"class":42,"line":11299},[40,13791,8240],{"class":50},[40,13793,13274],{"class":94},[40,13795,1299],{"class":50},[40,13797,4253],{"class":63},[40,13799,1299],{"class":50},[40,13801,13283],{"class":94},[40,13803,8253],{"class":50},[40,13805,13806,13808,13810,13812,13814,13816,13818],{"class":42,"line":11305},[40,13807,8240],{"class":50},[40,13809,13292],{"class":94},[40,13811,1299],{"class":50},[40,13813,4228],{"class":63},[40,13815,1299],{"class":50},[40,13817,13283],{"class":94},[40,13819,8253],{"class":50},[40,13821,13822,13824,13826,13828,13830,13832,13834],{"class":42,"line":11332},[40,13823,8240],{"class":50},[40,13825,13309],{"class":94},[40,13827,1299],{"class":50},[40,13829,4178],{"class":63},[40,13831,1299],{"class":50},[40,13833,13283],{"class":94},[40,13835,8253],{"class":50},[40,13837,13838,13840,13842,13844,13846,13848,13850],{"class":42,"line":11337},[40,13839,8240],{"class":50},[40,13841,13326],{"class":94},[40,13843,1299],{"class":50},[40,13845,4203],{"class":63},[40,13847,1299],{"class":50},[40,13849,13283],{"class":94},[40,13851,8253],{"class":50},[40,13853,13854,13856,13858,13860,13862,13864,13866],{"class":42,"line":11343},[40,13855,8240],{"class":50},[40,13857,13343],{"class":94},[40,13859,1299],{"class":50},[40,13861,4153],{"class":63},[40,13863,1299],{"class":50},[40,13865,13352],{"class":94},[40,13867,8253],{"class":50},[40,13869,13870],{"class":42,"line":11355},[40,13871,8274],{"class":50},[40,13873,13874,13876,13878,13880,13883,13885,13888,13890],{"class":42,"line":11367},[40,13875,5311],{"class":1283},[40,13877,10654],{"class":50},[40,13879,7526],{"class":1283},[40,13881,13882],{"class":50},"(s1)",[40,13884,7532],{"class":1283},[40,13886,13887],{"class":50},"(s1[",[40,13889,3672],{"class":63},[40,13891,7179],{"class":50},[40,13893,13894,13897,13899,13902,13904,13907,13910,13912],{"class":42,"line":11379},[40,13895,13896],{"class":50},"    Sanguo ",[40,13898,3934],{"class":1283},[40,13900,13901],{"class":50},"s ",[40,13903,1284],{"class":1283},[40,13905,13906],{"class":1283}," &",[40,13908,13909],{"class":50},"s1[",[40,13911,3672],{"class":63},[40,13913,8013],{"class":50},[40,13915,13916],{"class":42,"line":13038},[40,13917,13918],{"class":997},"    \u002F\u002F排序前：\n",[40,13920,13921,13923,13925,13928,13930],{"class":42,"line":13063},[40,13922,9852],{"class":50},[40,13924,4520],{"class":1283},[40,13926,13927],{"class":94}," \"排序前：\"",[40,13929,4787],{"class":1283},[40,13931,12162],{"class":50},[40,13933,13934,13936],{"class":42,"line":13086},[40,13935,13237],{"class":596},[40,13937,13938],{"class":50},"(s,len);\n",[40,13940,13941],{"class":42,"line":13110},[40,13942,13943],{"class":997},"    \u002F\u002F调用排序函数\n",[40,13945,13946,13948],{"class":42,"line":13115},[40,13947,10921],{"class":596},[40,13949,13938],{"class":50},[40,13951,13952],{"class":42,"line":13120},[40,13953,13954],{"class":997},"    \u002F\u002F排序后\n",[40,13956,13957,13959,13961,13964,13966],{"class":42,"line":13125},[40,13958,9852],{"class":50},[40,13960,4520],{"class":1283},[40,13962,13963],{"class":94}," \"排序后：\"",[40,13965,4787],{"class":1283},[40,13967,12162],{"class":50},[40,13969,13970,13972],{"class":42,"line":13134},[40,13971,13237],{"class":596},[40,13973,13938],{"class":50},[40,13975,13976],{"class":42,"line":13139},[40,13977,4907],{"class":50},[19,13979,13980,13981,13983],{},"注意：使用指针时直接用传首地址**&s",[40,13982,3672],{},"**",[3384,13985,13986],{},"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":36,"searchDepth":54,"depth":54,"links":13988},[13989,13990,13991,13992,13993,13994,13995],{"id":11025,"depth":54,"text":11026},{"id":11387,"depth":54,"text":11388},{"id":11656,"depth":54,"text":11657},{"id":11821,"depth":54,"text":11822},{"id":12037,"depth":54,"text":12038},{"id":12358,"depth":54,"text":12359},{"id":12586,"depth":54,"text":12587},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":11014,"description":11022},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":14002,"title":14003,"body":14004,"description":36,"extension":3414,"meta":15347,"navigation":1412,"path":15348,"seo":15349,"stem":15350,"__hash__":15351},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":14005,"toc":15341},[14006,14009,14013,14019,14033,14038,14041,14045,14052,14058,14061,14068,14074,14079,14082,14085,14088,14652,14655,14669,14673,14678,14694,14834,14837,14843,14846,14851,14859,14967,14970,14975,14978,14983,14986,14992,14995,15338],[10,14007,14003],{"id":14008},"_5程序内存模型",[14,14010,14012],{"id":14011},"_51内存分区模型","5.1内存分区模型",[19,14014,14015,14016],{},"C++程序在执行时，将内存大方向划分为",[409,14017,14018],{},"4个区域",[1338,14020,14021,14024,14027,14030],{},[495,14022,14023],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[495,14025,14026],{},"全局区：存放全局变量和静态变量以及常量",[495,14028,14029],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[495,14031,14032],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,14034,14035],{},[409,14036,14037],{},"内存四区意义：",[19,14039,14040],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[402,14042,14044],{"id":14043},"_511程序运行前","5.1.1程序运行前",[19,14046,14047,14048,14051],{},"​\t在程序编译后，生成了exe可执行程序，",[409,14049,14050],{},"未执行该程序前","分为两个区域",[19,14053,14054,14055],{},"​\t",[409,14056,14057],{},"代码区：",[19,14059,14060],{},"​\t\t存放 CPU 执行的机器指令",[19,14062,14063,14064,14067],{},"​\t\t代码区是",[409,14065,14066],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,14069,14063,14070,14073],{},[409,14071,14072],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,14075,14054,14076],{},[409,14077,14078],{},"全局区：",[19,14080,14081],{},"​\t\t全局变量和静态变量存放在此.",[19,14083,14084],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,14086,14087],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[31,14089,14091],{"className":3476,"code":14090,"language":3478,"meta":36,"style":36},"\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",[26,14092,14093,14098,14111,14124,14128,14133,14148,14163,14167,14176,14180,14185,14198,14211,14215,14220,14246,14272,14276,14303,14329,14333,14338,14354,14369,14373,14399,14425,14429,14454,14479,14483,14509,14535,14539,14555,14570,14596,14622,14626,14636,14640,14648],{"__ignoreMap":36},[40,14094,14095],{"class":42,"line":43},[40,14096,14097],{"class":997},"\u002F\u002F全局变量\n",[40,14099,14100,14102,14105,14107,14109],{"class":42,"line":54},[40,14101,3491],{"class":1283},[40,14103,14104],{"class":50}," g_a ",[40,14106,1284],{"class":1283},[40,14108,5364],{"class":63},[40,14110,4637],{"class":50},[40,14112,14113,14115,14118,14120,14122],{"class":42,"line":70},[40,14114,3491],{"class":1283},[40,14116,14117],{"class":50}," g_b ",[40,14119,1284],{"class":1283},[40,14121,5364],{"class":63},[40,14123,4637],{"class":50},[40,14125,14126],{"class":42,"line":78},[40,14127,1413],{"emptyLinePlaceholder":1412},[40,14129,14130],{"class":42,"line":86},[40,14131,14132],{"class":997},"\u002F\u002F全局常量\n",[40,14134,14135,14137,14139,14142,14144,14146],{"class":42,"line":100},[40,14136,10115],{"class":1283},[40,14138,5708],{"class":1283},[40,14140,14141],{"class":50}," c_g_a ",[40,14143,1284],{"class":1283},[40,14145,5364],{"class":63},[40,14147,4637],{"class":50},[40,14149,14150,14152,14154,14157,14159,14161],{"class":42,"line":108},[40,14151,10115],{"class":1283},[40,14153,5708],{"class":1283},[40,14155,14156],{"class":50}," c_g_b ",[40,14158,1284],{"class":1283},[40,14160,5364],{"class":63},[40,14162,4637],{"class":50},[40,14164,14165],{"class":42,"line":121},[40,14166,1413],{"emptyLinePlaceholder":1412},[40,14168,14169,14171,14173],{"class":42,"line":134},[40,14170,3491],{"class":1283},[40,14172,5299],{"class":596},[40,14174,14175],{"class":50},"() {\n",[40,14177,14178],{"class":42,"line":146},[40,14179,1413],{"emptyLinePlaceholder":1412},[40,14181,14182],{"class":42,"line":154},[40,14183,14184],{"class":997},"    \u002F\u002F局部变量\n",[40,14186,14187,14189,14192,14194,14196],{"class":42,"line":162},[40,14188,5311],{"class":1283},[40,14190,14191],{"class":50}," a ",[40,14193,1284],{"class":1283},[40,14195,5364],{"class":63},[40,14197,4637],{"class":50},[40,14199,14200,14202,14205,14207,14209],{"class":42,"line":170},[40,14201,5311],{"class":1283},[40,14203,14204],{"class":50}," b ",[40,14206,1284],{"class":1283},[40,14208,5364],{"class":63},[40,14210,4637],{"class":50},[40,14212,14213],{"class":42,"line":183},[40,14214,1413],{"emptyLinePlaceholder":1412},[40,14216,14217],{"class":42,"line":196},[40,14218,14219],{"class":997},"    \u002F\u002F打印地址\n",[40,14221,14222,14224,14226,14229,14231,14233,14235,14237,14239,14242,14244],{"class":42,"line":204},[40,14223,9852],{"class":50},[40,14225,4520],{"class":1283},[40,14227,14228],{"class":94}," \"局部变量a地址为： \"",[40,14230,4787],{"class":1283},[40,14232,4993],{"class":50},[40,14234,3491],{"class":1283},[40,14236,3908],{"class":50},[40,14238,3833],{"class":1283},[40,14240,14241],{"class":50},"a ",[40,14243,4520],{"class":1283},[40,14245,12162],{"class":50},[40,14247,14248,14250,14252,14255,14257,14259,14261,14263,14265,14268,14270],{"class":42,"line":217},[40,14249,9852],{"class":50},[40,14251,4520],{"class":1283},[40,14253,14254],{"class":94}," \"局部变量b地址为： \"",[40,14256,4787],{"class":1283},[40,14258,4993],{"class":50},[40,14260,3491],{"class":1283},[40,14262,3908],{"class":50},[40,14264,3833],{"class":1283},[40,14266,14267],{"class":50},"b ",[40,14269,4520],{"class":1283},[40,14271,12162],{"class":50},[40,14273,14274],{"class":42,"line":230},[40,14275,1413],{"emptyLinePlaceholder":1412},[40,14277,14278,14280,14282,14285,14287,14290,14292,14294,14296,14299,14301],{"class":42,"line":238},[40,14279,9852],{"class":50},[40,14281,4520],{"class":1283},[40,14283,14284],{"class":94}," \"全局变量g_a地址为： \"",[40,14286,4787],{"class":1283},[40,14288,14289],{"class":50},"  (",[40,14291,3491],{"class":1283},[40,14293,3908],{"class":50},[40,14295,3833],{"class":1283},[40,14297,14298],{"class":50},"g_a ",[40,14300,4520],{"class":1283},[40,14302,12162],{"class":50},[40,14304,14305,14307,14309,14312,14314,14316,14318,14320,14322,14325,14327],{"class":42,"line":251},[40,14306,9852],{"class":50},[40,14308,4520],{"class":1283},[40,14310,14311],{"class":94}," \"全局变量g_b地址为： \"",[40,14313,4787],{"class":1283},[40,14315,14289],{"class":50},[40,14317,3491],{"class":1283},[40,14319,3908],{"class":50},[40,14321,3833],{"class":1283},[40,14323,14324],{"class":50},"g_b ",[40,14326,4520],{"class":1283},[40,14328,12162],{"class":50},[40,14330,14331],{"class":42,"line":264},[40,14332,1413],{"emptyLinePlaceholder":1412},[40,14334,14335],{"class":42,"line":277},[40,14336,14337],{"class":997},"    \u002F\u002F静态变量\n",[40,14339,14340,14343,14345,14348,14350,14352],{"class":42,"line":290},[40,14341,14342],{"class":1283},"    static",[40,14344,5708],{"class":1283},[40,14346,14347],{"class":50}," s_a ",[40,14349,1284],{"class":1283},[40,14351,5364],{"class":63},[40,14353,4637],{"class":50},[40,14355,14356,14358,14360,14363,14365,14367],{"class":42,"line":298},[40,14357,14342],{"class":1283},[40,14359,5708],{"class":1283},[40,14361,14362],{"class":50}," s_b ",[40,14364,1284],{"class":1283},[40,14366,5364],{"class":63},[40,14368,4637],{"class":50},[40,14370,14371],{"class":42,"line":310},[40,14372,1413],{"emptyLinePlaceholder":1412},[40,14374,14375,14377,14379,14382,14384,14386,14388,14390,14392,14395,14397],{"class":42,"line":5086},[40,14376,9852],{"class":50},[40,14378,4520],{"class":1283},[40,14380,14381],{"class":94}," \"静态变量s_a地址为： \"",[40,14383,4787],{"class":1283},[40,14385,4993],{"class":50},[40,14387,3491],{"class":1283},[40,14389,3908],{"class":50},[40,14391,3833],{"class":1283},[40,14393,14394],{"class":50},"s_a ",[40,14396,4520],{"class":1283},[40,14398,12162],{"class":50},[40,14400,14401,14403,14405,14408,14410,14412,14414,14416,14418,14421,14423],{"class":42,"line":5091},[40,14402,9852],{"class":50},[40,14404,4520],{"class":1283},[40,14406,14407],{"class":94}," \"静态变量s_b地址为： \"",[40,14409,4787],{"class":1283},[40,14411,4993],{"class":50},[40,14413,3491],{"class":1283},[40,14415,3908],{"class":50},[40,14417,3833],{"class":1283},[40,14419,14420],{"class":50},"s_b ",[40,14422,4520],{"class":1283},[40,14424,12162],{"class":50},[40,14426,14427],{"class":42,"line":5105},[40,14428,1413],{"emptyLinePlaceholder":1412},[40,14430,14431,14433,14435,14438,14440,14442,14444,14446,14448,14450,14452],{"class":42,"line":5110},[40,14432,9852],{"class":50},[40,14434,4520],{"class":1283},[40,14436,14437],{"class":94}," \"字符串常量地址为： \"",[40,14439,4787],{"class":1283},[40,14441,4993],{"class":50},[40,14443,3491],{"class":1283},[40,14445,3908],{"class":50},[40,14447,3833],{"class":1283},[40,14449,4537],{"class":94},[40,14451,4787],{"class":1283},[40,14453,12162],{"class":50},[40,14455,14456,14458,14460,14462,14464,14466,14468,14470,14472,14475,14477],{"class":42,"line":5902},[40,14457,9852],{"class":50},[40,14459,4520],{"class":1283},[40,14461,14437],{"class":94},[40,14463,4787],{"class":1283},[40,14465,4993],{"class":50},[40,14467,3491],{"class":1283},[40,14469,3908],{"class":50},[40,14471,3833],{"class":1283},[40,14473,14474],{"class":94},"\"hello world1\"",[40,14476,4787],{"class":1283},[40,14478,12162],{"class":50},[40,14480,14481],{"class":42,"line":5916},[40,14482,1413],{"emptyLinePlaceholder":1412},[40,14484,14485,14487,14489,14492,14494,14496,14498,14500,14502,14505,14507],{"class":42,"line":5924},[40,14486,9852],{"class":50},[40,14488,4520],{"class":1283},[40,14490,14491],{"class":94}," \"全局常量c_g_a地址为： \"",[40,14493,4787],{"class":1283},[40,14495,4993],{"class":50},[40,14497,3491],{"class":1283},[40,14499,3908],{"class":50},[40,14501,3833],{"class":1283},[40,14503,14504],{"class":50},"c_g_a ",[40,14506,4520],{"class":1283},[40,14508,12162],{"class":50},[40,14510,14511,14513,14515,14518,14520,14522,14524,14526,14528,14531,14533],{"class":42,"line":5929},[40,14512,9852],{"class":50},[40,14514,4520],{"class":1283},[40,14516,14517],{"class":94}," \"全局常量c_g_b地址为： \"",[40,14519,4787],{"class":1283},[40,14521,4993],{"class":50},[40,14523,3491],{"class":1283},[40,14525,3908],{"class":50},[40,14527,3833],{"class":1283},[40,14529,14530],{"class":50},"c_g_b ",[40,14532,4520],{"class":1283},[40,14534,12162],{"class":50},[40,14536,14537],{"class":42,"line":5935},[40,14538,1413],{"emptyLinePlaceholder":1412},[40,14540,14541,14544,14546,14549,14551,14553],{"class":42,"line":5941},[40,14542,14543],{"class":1283},"    const",[40,14545,5708],{"class":1283},[40,14547,14548],{"class":50}," c_l_a ",[40,14550,1284],{"class":1283},[40,14552,5364],{"class":63},[40,14554,4637],{"class":50},[40,14556,14557,14559,14561,14564,14566,14568],{"class":42,"line":5946},[40,14558,14543],{"class":1283},[40,14560,5708],{"class":1283},[40,14562,14563],{"class":50}," c_l_b ",[40,14565,1284],{"class":1283},[40,14567,5364],{"class":63},[40,14569,4637],{"class":50},[40,14571,14572,14574,14576,14579,14581,14583,14585,14587,14589,14592,14594],{"class":42,"line":11270},[40,14573,9852],{"class":50},[40,14575,4520],{"class":1283},[40,14577,14578],{"class":94}," \"局部常量c_l_a地址为： \"",[40,14580,4787],{"class":1283},[40,14582,4993],{"class":50},[40,14584,3491],{"class":1283},[40,14586,3908],{"class":50},[40,14588,3833],{"class":1283},[40,14590,14591],{"class":50},"c_l_a ",[40,14593,4520],{"class":1283},[40,14595,12162],{"class":50},[40,14597,14598,14600,14602,14605,14607,14609,14611,14613,14615,14618,14620],{"class":42,"line":11294},[40,14599,9852],{"class":50},[40,14601,4520],{"class":1283},[40,14603,14604],{"class":94}," \"局部常量c_l_b地址为： \"",[40,14606,4787],{"class":1283},[40,14608,4993],{"class":50},[40,14610,3491],{"class":1283},[40,14612,3908],{"class":50},[40,14614,3833],{"class":1283},[40,14616,14617],{"class":50},"c_l_b ",[40,14619,4520],{"class":1283},[40,14621,12162],{"class":50},[40,14623,14624],{"class":42,"line":11299},[40,14625,1413],{"emptyLinePlaceholder":1412},[40,14627,14628,14630,14632,14634],{"class":42,"line":11305},[40,14629,5629],{"class":596},[40,14631,3488],{"class":50},[40,14633,5634],{"class":94},[40,14635,6043],{"class":50},[40,14637,14638],{"class":42,"line":11332},[40,14639,1413],{"emptyLinePlaceholder":1412},[40,14641,14642,14644,14646],{"class":42,"line":11337},[40,14643,7413],{"class":1283},[40,14645,7416],{"class":63},[40,14647,4637],{"class":50},[40,14649,14650],{"class":42,"line":11343},[40,14651,4907],{"class":50},[19,14653,14654],{},"总结：",[1338,14656,14657,14660,14663,14666],{},[495,14658,14659],{},"c++中程序运行前分为全局区和代码区",[495,14661,14662],{},"代码区特点是共享和只读",[495,14664,14665],{},"全局区中存放全局变量、静态变量、常量",[495,14667,14668],{},"常量区中存放const修饰的全局常量和字符串常量",[402,14670,14672],{"id":14671},"_512程序运行后","5.1.2程序运行后",[492,14674,14675],{},[495,14676,14677],{},"栈区：",[1338,14679,14680,14687],{},[495,14681,14682,14683,14686],{},"由编译器自动分配释放, 存放",[409,14684,14685],{},"函数的参数值,局部变量","等",[495,14688,14689,14690,14693],{},"注意事项：",[409,14691,14692],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[31,14695,14697],{"className":3476,"code":14696,"language":3478,"meta":36,"style":36},"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",[26,14698,14699,14710,14714,14729,14741,14745,14749,14757,14762,14777,14795,14812,14822,14830],{"__ignoreMap":36},[40,14700,14701,14703,14705,14708],{"class":42,"line":43},[40,14702,3491],{"class":1283},[40,14704,9841],{"class":1283},[40,14706,14707],{"class":596}," func",[40,14709,5302],{"class":50},[40,14711,14712],{"class":42,"line":54},[40,14713,4888],{"class":50},[40,14715,14716,14718,14720,14722,14724,14726],{"class":42,"line":70},[40,14717,5311],{"class":1283},[40,14719,14191],{"class":50},[40,14721,1284],{"class":1283},[40,14723,5364],{"class":63},[40,14725,3540],{"class":50},[40,14727,14728],{"class":997}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[40,14730,14731,14733,14735,14738],{"class":42,"line":78},[40,14732,7413],{"class":1283},[40,14734,13906],{"class":1283},[40,14736,14737],{"class":50},"a;",[40,14739,14740],{"class":997}," \u002F\u002F放回局部变量的地址\n",[40,14742,14743],{"class":42,"line":86},[40,14744,4907],{"class":50},[40,14746,14747],{"class":42,"line":100},[40,14748,1413],{"emptyLinePlaceholder":1412},[40,14750,14751,14753,14755],{"class":42,"line":108},[40,14752,3491],{"class":1283},[40,14754,5299],{"class":596},[40,14756,14175],{"class":50},[40,14758,14759],{"class":42,"line":121},[40,14760,14761],{"class":997},"    \u002F\u002F接受func的返回值\n",[40,14763,14764,14766,14768,14771,14773,14775],{"class":42,"line":134},[40,14765,5311],{"class":1283},[40,14767,9841],{"class":1283},[40,14769,14770],{"class":50},"p ",[40,14772,1284],{"class":1283},[40,14774,14707],{"class":596},[40,14776,8959],{"class":50},[40,14778,14779,14781,14783,14785,14787,14789,14792],{"class":42,"line":146},[40,14780,9852],{"class":50},[40,14782,4520],{"class":1283},[40,14784,9841],{"class":1283},[40,14786,14770],{"class":50},[40,14788,4520],{"class":1283},[40,14790,14791],{"class":50}," endl;",[40,14793,14794],{"class":997}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[40,14796,14797,14799,14801,14803,14805,14807,14809],{"class":42,"line":154},[40,14798,9852],{"class":50},[40,14800,4520],{"class":1283},[40,14802,9841],{"class":1283},[40,14804,14770],{"class":50},[40,14806,4520],{"class":1283},[40,14808,14791],{"class":50},[40,14810,14811],{"class":997}," \u002F\u002F第二次这个数据不再保留\n",[40,14813,14814,14816,14818,14820],{"class":42,"line":162},[40,14815,5629],{"class":596},[40,14817,3488],{"class":50},[40,14819,5634],{"class":94},[40,14821,6043],{"class":50},[40,14823,14824,14826,14828],{"class":42,"line":170},[40,14825,7413],{"class":1283},[40,14827,7416],{"class":63},[40,14829,4637],{"class":50},[40,14831,14832],{"class":42,"line":183},[40,14833,4907],{"class":50},[19,14835,14836],{},"输出结果：",[19,14838,14839],{},[438,14840],{"alt":14841,"src":14842},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,14844,14845],{},"总结：不要返回局部变量的地址",[492,14847,14848],{"start":54},[495,14849,14850],{},"堆区",[1338,14852,14853,14856],{},[495,14854,14855],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[495,14857,14858],{},"在c++中主要利用new在堆区开辟内存",[31,14860,14862],{"className":3476,"code":14861,"language":3478,"meta":36,"style":36},"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",[26,14863,14864,14879,14883,14888,14909,14916,14920,14928,14932,14937,14951,14963],{"__ignoreMap":36},[40,14865,14866,14868,14871,14874,14876],{"class":42,"line":43},[40,14867,3491],{"class":1283},[40,14869,14870],{"class":1283},"  *",[40,14872,14873],{"class":596},"func",[40,14875,5752],{"class":50},[40,14877,14878],{"class":997},"  \u002F\u002F函数返回指针\n",[40,14880,14881],{"class":42,"line":54},[40,14882,4888],{"class":50},[40,14884,14885],{"class":42,"line":70},[40,14886,14887],{"class":997},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[40,14889,14890,14892,14894,14896,14898,14901,14903,14905,14907],{"class":42,"line":78},[40,14891,7470],{"class":1283},[40,14893,9841],{"class":1283},[40,14895,19],{"class":50},[40,14897,1284],{"class":1283},[40,14899,14900],{"class":1283}," new",[40,14902,5708],{"class":1283},[40,14904,3488],{"class":50},[40,14906,3925],{"class":63},[40,14908,6043],{"class":50},[40,14910,14911,14913],{"class":42,"line":86},[40,14912,7704],{"class":1283},[40,14914,14915],{"class":50}," p;\n",[40,14917,14918],{"class":42,"line":100},[40,14919,4907],{"class":50},[40,14921,14922,14924,14926],{"class":42,"line":108},[40,14923,3491],{"class":1283},[40,14925,5299],{"class":596},[40,14927,5302],{"class":50},[40,14929,14930],{"class":42,"line":121},[40,14931,4888],{"class":50},[40,14933,14934],{"class":42,"line":134},[40,14935,14936],{"class":997},"    \u002F\u002F在堆区开辟数据\n",[40,14938,14939,14941,14943,14945,14947,14949],{"class":42,"line":146},[40,14940,5311],{"class":1283},[40,14942,9841],{"class":1283},[40,14944,19],{"class":50},[40,14946,1284],{"class":1283},[40,14948,14873],{"class":596},[40,14950,8959],{"class":50},[40,14952,14953,14955,14957,14959,14961],{"class":42,"line":154},[40,14954,4893],{"class":50},[40,14956,9742],{"class":1283},[40,14958,19],{"class":50},[40,14960,4520],{"class":1283},[40,14962,4542],{"class":50},[40,14964,14965],{"class":42,"line":162},[40,14966,4907],{"class":50},[19,14968,14969],{},"图片展示：",[19,14971,14972],{},[438,14973],{"alt":14841,"src":14974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,14976,14977],{},"堆区内存由程序员管生死！！！",[492,14979,14980],{"start":70},[495,14981,14982],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,14984,14985],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,14987,14988,14989],{},"​语法：",[26,14990,14991],{}," new 数据类型",[19,14993,14994],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[31,14996,14998],{"className":3476,"code":14997,"language":3478,"meta":36,"style":36},"\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",[26,14999,15000,15005,15015,15019,15024,15029,15051,15055,15063,15067,15081,15093,15105,15117,15122,15127,15138,15142,15147,15155,15159,15164,15186,15212,15216,15234,15238,15264,15268,15280,15284,15289,15294,15302,15306,15310,15318,15322,15328,15334],{"__ignoreMap":36},[40,15001,15002],{"class":42,"line":43},[40,15003,15004],{"class":997},"\u002F\u002F1.new的基本语法\n",[40,15006,15007,15009,15011,15013],{"class":42,"line":54},[40,15008,3491],{"class":1283},[40,15010,9841],{"class":1283},[40,15012,14873],{"class":596},[40,15014,5302],{"class":50},[40,15016,15017],{"class":42,"line":70},[40,15018,4888],{"class":50},[40,15020,15021],{"class":42,"line":78},[40,15022,15023],{"class":997},"    \u002F\u002F在堆区创建整型数据\n",[40,15025,15026],{"class":42,"line":86},[40,15027,15028],{"class":997},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[40,15030,15031,15033,15035,15037,15040,15042,15044,15046,15048],{"class":42,"line":100},[40,15032,5311],{"class":1283},[40,15034,9841],{"class":1283},[40,15036,19],{"class":50},[40,15038,15039],{"class":1283},"=new",[40,15041,5708],{"class":1283},[40,15043,3488],{"class":50},[40,15045,3925],{"class":63},[40,15047,9289],{"class":50},[40,15049,15050],{"class":997},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[40,15052,15053],{"class":42,"line":108},[40,15054,4907],{"class":50},[40,15056,15057,15059,15061],{"class":42,"line":121},[40,15058,8687],{"class":1283},[40,15060,8911],{"class":596},[40,15062,5302],{"class":50},[40,15064,15065],{"class":42,"line":134},[40,15066,4888],{"class":50},[40,15068,15069,15071,15073,15075,15077,15079],{"class":42,"line":146},[40,15070,5311],{"class":1283},[40,15072,9841],{"class":1283},[40,15074,19],{"class":50},[40,15076,1284],{"class":1283},[40,15078,14873],{"class":596},[40,15080,8959],{"class":50},[40,15082,15083,15085,15087,15089,15091],{"class":42,"line":154},[40,15084,4893],{"class":50},[40,15086,9742],{"class":1283},[40,15088,19],{"class":50},[40,15090,4520],{"class":1283},[40,15092,4542],{"class":50},[40,15094,15095,15097,15099,15101,15103],{"class":42,"line":162},[40,15096,4893],{"class":50},[40,15098,9742],{"class":1283},[40,15100,19],{"class":50},[40,15102,4520],{"class":1283},[40,15104,4542],{"class":50},[40,15106,15107,15109,15111,15113,15115],{"class":42,"line":170},[40,15108,4893],{"class":50},[40,15110,9742],{"class":1283},[40,15112,19],{"class":50},[40,15114,4520],{"class":1283},[40,15116,4542],{"class":50},[40,15118,15119],{"class":42,"line":183},[40,15120,15121],{"class":997},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[40,15123,15124],{"class":42,"line":196},[40,15125,15126],{"class":997},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[40,15128,15129,15132,15135],{"class":42,"line":204},[40,15130,15131],{"class":1283},"    delete",[40,15133,15134],{"class":50}," p;",[40,15136,15137],{"class":997},"\u002F\u002F删除这块地址\n",[40,15139,15140],{"class":42,"line":217},[40,15141,4907],{"class":50},[40,15143,15144],{"class":42,"line":230},[40,15145,15146],{"class":997},"\u002F\u002F2.在堆区利用new开辟数组\n",[40,15148,15149,15151,15153],{"class":42,"line":238},[40,15150,8687],{"class":1283},[40,15152,8980],{"class":596},[40,15154,5302],{"class":50},[40,15156,15157],{"class":42,"line":251},[40,15158,4888],{"class":50},[40,15160,15161],{"class":42,"line":264},[40,15162,15163],{"class":997},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[40,15165,15166,15168,15170,15172,15174,15176,15178,15180,15183],{"class":42,"line":277},[40,15167,5311],{"class":1283},[40,15169,9841],{"class":1283},[40,15171,7203],{"class":50},[40,15173,15039],{"class":1283},[40,15175,5708],{"class":1283},[40,15177,4367],{"class":50},[40,15179,3925],{"class":63},[40,15181,15182],{"class":50},"];",[40,15184,15185],{"class":997},"\u002F\u002F10代表数组有10个元素\n",[40,15187,15188,15190,15192,15194,15196,15198,15200,15202,15204,15206,15208,15210],{"class":42,"line":290},[40,15189,6525],{"class":1283},[40,15191,4993],{"class":50},[40,15193,3491],{"class":1283},[40,15195,6356],{"class":50},[40,15197,1284],{"class":1283},[40,15199,3672],{"class":63},[40,15201,6363],{"class":50},[40,15203,4387],{"class":1283},[40,15205,3925],{"class":63},[40,15207,6363],{"class":50},[40,15209,5618],{"class":1283},[40,15211,1811],{"class":50},[40,15213,15214],{"class":42,"line":298},[40,15215,5356],{"class":50},[40,15217,15218,15221,15223,15225,15227,15229,15231],{"class":42,"line":310},[40,15219,15220],{"class":50},"        arr[i]",[40,15222,1284],{"class":1283},[40,15224,3920],{"class":50},[40,15226,3960],{"class":1283},[40,15228,3791],{"class":63},[40,15230,3540],{"class":50},[40,15232,15233],{"class":997},"\u002F\u002F给10个元素赋值100～109\n",[40,15235,15236],{"class":42,"line":5086},[40,15237,5513],{"class":50},[40,15239,15240,15242,15244,15246,15248,15250,15252,15254,15256,15258,15260,15262],{"class":42,"line":5091},[40,15241,6525],{"class":1283},[40,15243,4993],{"class":50},[40,15245,3491],{"class":1283},[40,15247,6356],{"class":50},[40,15249,1284],{"class":1283},[40,15251,3672],{"class":63},[40,15253,6363],{"class":50},[40,15255,4387],{"class":1283},[40,15257,3925],{"class":63},[40,15259,6363],{"class":50},[40,15261,5618],{"class":1283},[40,15263,1811],{"class":50},[40,15265,15266],{"class":42,"line":5105},[40,15267,5356],{"class":50},[40,15269,15270,15272,15274,15276,15278],{"class":42,"line":5110},[40,15271,6775],{"class":50},[40,15273,4520],{"class":1283},[40,15275,7677],{"class":50},[40,15277,4520],{"class":1283},[40,15279,4542],{"class":50},[40,15281,15282],{"class":42,"line":5902},[40,15283,5513],{"class":50},[40,15285,15286],{"class":42,"line":5916},[40,15287,15288],{"class":997},"    \u002F\u002F释放堆区数组\n",[40,15290,15291],{"class":42,"line":5924},[40,15292,15293],{"class":997},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[40,15295,15296,15299],{"class":42,"line":5929},[40,15297,15298],{"class":1283},"    delete[]",[40,15300,15301],{"class":50}," arr;\n",[40,15303,15304],{"class":42,"line":5935},[40,15305,4907],{"class":50},[40,15307,15308],{"class":42,"line":5941},[40,15309,1413],{"emptyLinePlaceholder":1412},[40,15311,15312,15314,15316],{"class":42,"line":5946},[40,15313,3491],{"class":1283},[40,15315,5299],{"class":596},[40,15317,5302],{"class":50},[40,15319,15320],{"class":42,"line":11270},[40,15321,4888],{"class":50},[40,15323,15324,15326],{"class":42,"line":11294},[40,15325,8956],{"class":596},[40,15327,8959],{"class":50},[40,15329,15330,15332],{"class":42,"line":11299},[40,15331,9025],{"class":596},[40,15333,8959],{"class":50},[40,15335,15336],{"class":42,"line":11305},[40,15337,4907],{"class":50},[3384,15339,15340],{},"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":36,"searchDepth":54,"depth":54,"links":15342},[15343],{"id":14011,"depth":54,"text":14012,"children":15344},[15345,15346],{"id":14043,"depth":70,"text":14044},{"id":14671,"depth":70,"text":14672},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":14003,"description":36},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":15353,"title":15354,"body":15355,"description":36,"extension":3414,"meta":16836,"navigation":1412,"path":16837,"seo":16838,"stem":16839,"__hash__":16840},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":15356,"toc":16828},[15357,15360,15364,15367,15370,15539,15543,15548,15565,15570,15722,15726,15729,15732,16126,16130,16133,16138,16141,16453,16457,16463,16623,16625,16633,16637,16640,16647,16825],[10,15358,15354],{"id":15359},"_6引用",[14,15361,15363],{"id":15362},"_61引用基本用法","6.1引用基本用法",[19,15365,15366],{},"引用的本质：给变量起别名",[19,15368,15369],{},"语法：数据类型 &别名=原名",[31,15371,15373],{"className":3476,"code":15372,"language":3478,"meta":36,"style":36},"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",[26,15374,15375,15383,15387,15399,15411,15415,15434,15453,15457,15468,15472,15491,15509,15513,15523,15527,15535],{"__ignoreMap":36},[40,15376,15377,15379,15381],{"class":42,"line":43},[40,15378,3491],{"class":1283},[40,15380,5299],{"class":596},[40,15382,14175],{"class":50},[40,15384,15385],{"class":42,"line":54},[40,15386,1413],{"emptyLinePlaceholder":1412},[40,15388,15389,15391,15393,15395,15397],{"class":42,"line":70},[40,15390,5311],{"class":1283},[40,15392,14191],{"class":50},[40,15394,1284],{"class":1283},[40,15396,5364],{"class":63},[40,15398,4637],{"class":50},[40,15400,15401,15403,15405,15407,15409],{"class":42,"line":78},[40,15402,5311],{"class":1283},[40,15404,13906],{"class":1283},[40,15406,14267],{"class":50},[40,15408,1284],{"class":1283},[40,15410,4775],{"class":50},[40,15412,15413],{"class":42,"line":86},[40,15414,1413],{"emptyLinePlaceholder":1412},[40,15416,15417,15419,15421,15424,15426,15428,15430,15432],{"class":42,"line":100},[40,15418,9852],{"class":50},[40,15420,4520],{"class":1283},[40,15422,15423],{"class":94}," \"a = \"",[40,15425,4787],{"class":1283},[40,15427,14191],{"class":50},[40,15429,4520],{"class":1283},[40,15431,14791],{"class":50},[40,15433,10591],{"class":997},[40,15435,15436,15438,15440,15443,15445,15447,15449,15451],{"class":42,"line":108},[40,15437,9852],{"class":50},[40,15439,4520],{"class":1283},[40,15441,15442],{"class":94}," \"b = \"",[40,15444,4787],{"class":1283},[40,15446,14204],{"class":50},[40,15448,4520],{"class":1283},[40,15450,14791],{"class":50},[40,15452,10591],{"class":997},[40,15454,15455],{"class":42,"line":121},[40,15456,1413],{"emptyLinePlaceholder":1412},[40,15458,15459,15462,15464,15466],{"class":42,"line":134},[40,15460,15461],{"class":50},"    b ",[40,15463,1284],{"class":1283},[40,15465,9077],{"class":63},[40,15467,4637],{"class":50},[40,15469,15470],{"class":42,"line":146},[40,15471,1413],{"emptyLinePlaceholder":1412},[40,15473,15474,15476,15478,15480,15482,15484,15486,15488],{"class":42,"line":154},[40,15475,9852],{"class":50},[40,15477,4520],{"class":1283},[40,15479,15423],{"class":94},[40,15481,4787],{"class":1283},[40,15483,14191],{"class":50},[40,15485,4520],{"class":1283},[40,15487,14791],{"class":50},[40,15489,15490],{"class":997},"\u002F\u002F100\n",[40,15492,15493,15495,15497,15499,15501,15503,15505,15507],{"class":42,"line":162},[40,15494,9852],{"class":50},[40,15496,4520],{"class":1283},[40,15498,15442],{"class":94},[40,15500,4787],{"class":1283},[40,15502,14204],{"class":50},[40,15504,4520],{"class":1283},[40,15506,14791],{"class":50},[40,15508,15490],{"class":997},[40,15510,15511],{"class":42,"line":170},[40,15512,1413],{"emptyLinePlaceholder":1412},[40,15514,15515,15517,15519,15521],{"class":42,"line":183},[40,15516,5629],{"class":596},[40,15518,3488],{"class":50},[40,15520,5634],{"class":94},[40,15522,6043],{"class":50},[40,15524,15525],{"class":42,"line":196},[40,15526,1413],{"emptyLinePlaceholder":1412},[40,15528,15529,15531,15533],{"class":42,"line":204},[40,15530,7413],{"class":1283},[40,15532,7416],{"class":63},[40,15534,4637],{"class":50},[40,15536,15537],{"class":42,"line":217},[40,15538,4907],{"class":50},[14,15540,15542],{"id":15541},"_62引用的注意事项","6.2引用的注意事项",[492,15544,15545],{},[495,15546,15547],{},"引用必须要初始化",[31,15549,15551],{"className":3476,"code":15550,"language":3478,"meta":36,"style":36},"int &b;\u002F\u002F非常错误！\n",[26,15552,15553],{"__ignoreMap":36},[40,15554,15555,15557,15559,15562],{"class":42,"line":43},[40,15556,3491],{"class":1283},[40,15558,13906],{"class":1283},[40,15560,15561],{"class":50},"b;",[40,15563,15564],{"class":997},"\u002F\u002F非常错误！\n",[492,15566,15567],{"start":54},[495,15568,15569],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[31,15571,15573],{"className":3476,"code":15572,"language":3478,"meta":36,"style":36},"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",[26,15574,15575,15583,15595,15607,15615,15631,15644,15662,15680,15700,15710,15718],{"__ignoreMap":36},[40,15576,15577,15579,15581],{"class":42,"line":43},[40,15578,3491],{"class":1283},[40,15580,5299],{"class":596},[40,15582,14175],{"class":50},[40,15584,15585,15587,15589,15591,15593],{"class":42,"line":54},[40,15586,5311],{"class":1283},[40,15588,14191],{"class":50},[40,15590,1284],{"class":1283},[40,15592,5364],{"class":63},[40,15594,4637],{"class":50},[40,15596,15597,15599,15601,15603,15605],{"class":42,"line":70},[40,15598,5311],{"class":1283},[40,15600,14204],{"class":50},[40,15602,1284],{"class":1283},[40,15604,12272],{"class":63},[40,15606,4637],{"class":50},[40,15608,15609,15612],{"class":42,"line":78},[40,15610,15611],{"class":997},"    \u002F\u002Fint &c;",[40,15613,15614],{"class":997}," \u002F\u002F错误，引用必须初始化\n",[40,15616,15617,15619,15621,15623,15625,15628],{"class":42,"line":86},[40,15618,5311],{"class":1283},[40,15620,13906],{"class":1283},[40,15622,6270],{"class":50},[40,15624,1284],{"class":1283},[40,15626,15627],{"class":50}," a;",[40,15629,15630],{"class":997}," \u002F\u002F一旦初始化后，就不可以更改\n",[40,15632,15633,15636,15638,15641],{"class":42,"line":100},[40,15634,15635],{"class":50},"    c ",[40,15637,1284],{"class":1283},[40,15639,15640],{"class":50}," b;",[40,15642,15643],{"class":997}," \u002F\u002F这是赋值操作，不是更改引用\n",[40,15645,15646,15648,15650,15652,15654,15656,15658,15660],{"class":42,"line":108},[40,15647,9852],{"class":50},[40,15649,4520],{"class":1283},[40,15651,15423],{"class":94},[40,15653,4787],{"class":1283},[40,15655,14191],{"class":50},[40,15657,4520],{"class":1283},[40,15659,14791],{"class":50},[40,15661,10576],{"class":997},[40,15663,15664,15666,15668,15670,15672,15674,15676,15678],{"class":42,"line":121},[40,15665,9852],{"class":50},[40,15667,4520],{"class":1283},[40,15669,15442],{"class":94},[40,15671,4787],{"class":1283},[40,15673,14204],{"class":50},[40,15675,4520],{"class":1283},[40,15677,14791],{"class":50},[40,15679,10576],{"class":997},[40,15681,15682,15684,15686,15689,15691,15694,15696,15698],{"class":42,"line":134},[40,15683,9852],{"class":50},[40,15685,4520],{"class":1283},[40,15687,15688],{"class":94}," \"c = \"",[40,15690,4787],{"class":1283},[40,15692,15693],{"class":50}," c ",[40,15695,4520],{"class":1283},[40,15697,14791],{"class":50},[40,15699,10576],{"class":997},[40,15701,15702,15704,15706,15708],{"class":42,"line":146},[40,15703,5629],{"class":596},[40,15705,3488],{"class":50},[40,15707,5634],{"class":94},[40,15709,6043],{"class":50},[40,15711,15712,15714,15716],{"class":42,"line":154},[40,15713,7413],{"class":1283},[40,15715,7416],{"class":63},[40,15717,4637],{"class":50},[40,15719,15720],{"class":42,"line":162},[40,15721,4907],{"class":50},[14,15723,15725],{"id":15724},"_63引用做函数参数","6.3引用做函数参数",[19,15727,15728],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,15730,15731],{},"优点：可以简化指针修改实参",[31,15733,15735],{"className":3476,"code":15734,"language":3478,"meta":36,"style":36},"\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",[26,15736,15737,15742,15765,15776,15786,15795,15799,15803,15808,15830,15842,15854,15864,15868,15872,15877,15899,15909,15917,15925,15929,15933,15941,15945,15957,15969,15973,15984,16010,16014,16034,16058,16062,16072,16096,16100,16110,16114,16122],{"__ignoreMap":36},[40,15738,15739],{"class":42,"line":43},[40,15740,15741],{"class":997},"\u002F\u002F1. 值传递\n",[40,15743,15744,15746,15749,15751,15753,15755,15758,15760,15762],{"class":42,"line":54},[40,15745,8687],{"class":1283},[40,15747,15748],{"class":596}," mySwap01",[40,15750,3488],{"class":50},[40,15752,3491],{"class":1283},[40,15754,4741],{"class":8539},[40,15756,15757],{"class":50},", ",[40,15759,3491],{"class":1283},[40,15761,6157],{"class":8539},[40,15763,15764],{"class":50},") {\n",[40,15766,15767,15769,15772,15774],{"class":42,"line":70},[40,15768,5311],{"class":1283},[40,15770,15771],{"class":50}," temp ",[40,15773,1284],{"class":1283},[40,15775,4775],{"class":50},[40,15777,15778,15781,15783],{"class":42,"line":78},[40,15779,15780],{"class":50},"    a ",[40,15782,1284],{"class":1283},[40,15784,15785],{"class":50}," b;\n",[40,15787,15788,15790,15792],{"class":42,"line":86},[40,15789,15461],{"class":50},[40,15791,1284],{"class":1283},[40,15793,15794],{"class":50}," temp;\n",[40,15796,15797],{"class":42,"line":100},[40,15798,4907],{"class":50},[40,15800,15801],{"class":42,"line":108},[40,15802,1413],{"emptyLinePlaceholder":1412},[40,15804,15805],{"class":42,"line":121},[40,15806,15807],{"class":997},"\u002F\u002F2. 地址传递\n",[40,15809,15810,15812,15815,15817,15820,15822,15824,15826,15828],{"class":42,"line":134},[40,15811,8687],{"class":1283},[40,15813,15814],{"class":596}," mySwap02",[40,15816,3488],{"class":50},[40,15818,15819],{"class":1283},"int*",[40,15821,4741],{"class":8539},[40,15823,15757],{"class":50},[40,15825,15819],{"class":1283},[40,15827,6157],{"class":8539},[40,15829,15764],{"class":50},[40,15831,15832,15834,15836,15838,15840],{"class":42,"line":146},[40,15833,5311],{"class":1283},[40,15835,15771],{"class":50},[40,15837,1284],{"class":1283},[40,15839,9841],{"class":1283},[40,15841,9520],{"class":50},[40,15843,15844,15846,15848,15850,15852],{"class":42,"line":154},[40,15845,9726],{"class":1283},[40,15847,14241],{"class":50},[40,15849,1284],{"class":1283},[40,15851,9841],{"class":1283},[40,15853,9392],{"class":50},[40,15855,15856,15858,15860,15862],{"class":42,"line":162},[40,15857,9726],{"class":1283},[40,15859,14267],{"class":50},[40,15861,1284],{"class":1283},[40,15863,15794],{"class":50},[40,15865,15866],{"class":42,"line":170},[40,15867,4907],{"class":50},[40,15869,15870],{"class":42,"line":183},[40,15871,1413],{"emptyLinePlaceholder":1412},[40,15873,15874],{"class":42,"line":196},[40,15875,15876],{"class":997},"\u002F\u002F3. 引用传递\n",[40,15878,15879,15881,15884,15886,15889,15891,15893,15895,15897],{"class":42,"line":204},[40,15880,8687],{"class":1283},[40,15882,15883],{"class":596}," mySwap03",[40,15885,3488],{"class":50},[40,15887,15888],{"class":1283},"int&",[40,15890,4741],{"class":8539},[40,15892,15757],{"class":50},[40,15894,15888],{"class":1283},[40,15896,6157],{"class":8539},[40,15898,15764],{"class":50},[40,15900,15901,15903,15905,15907],{"class":42,"line":217},[40,15902,5311],{"class":1283},[40,15904,15771],{"class":50},[40,15906,1284],{"class":1283},[40,15908,4775],{"class":50},[40,15910,15911,15913,15915],{"class":42,"line":230},[40,15912,15780],{"class":50},[40,15914,1284],{"class":1283},[40,15916,15785],{"class":50},[40,15918,15919,15921,15923],{"class":42,"line":238},[40,15920,15461],{"class":50},[40,15922,1284],{"class":1283},[40,15924,15794],{"class":50},[40,15926,15927],{"class":42,"line":251},[40,15928,4907],{"class":50},[40,15930,15931],{"class":42,"line":264},[40,15932,1413],{"emptyLinePlaceholder":1412},[40,15934,15935,15937,15939],{"class":42,"line":277},[40,15936,3491],{"class":1283},[40,15938,5299],{"class":596},[40,15940,14175],{"class":50},[40,15942,15943],{"class":42,"line":290},[40,15944,1413],{"emptyLinePlaceholder":1412},[40,15946,15947,15949,15951,15953,15955],{"class":42,"line":298},[40,15948,5311],{"class":1283},[40,15950,14191],{"class":50},[40,15952,1284],{"class":1283},[40,15954,5364],{"class":63},[40,15956,4637],{"class":50},[40,15958,15959,15961,15963,15965,15967],{"class":42,"line":310},[40,15960,5311],{"class":1283},[40,15962,14204],{"class":50},[40,15964,1284],{"class":1283},[40,15966,12272],{"class":63},[40,15968,4637],{"class":50},[40,15970,15971],{"class":42,"line":5086},[40,15972,1413],{"emptyLinePlaceholder":1412},[40,15974,15975,15978,15981],{"class":42,"line":5091},[40,15976,15977],{"class":596},"    mySwap01",[40,15979,15980],{"class":50},"(a, b);",[40,15982,15983],{"class":997},"\u002F\u002F值传递，形参不会修饰实参\n",[40,15985,15986,15988,15990,15993,15995,15997,15999,16002,16004,16006,16008],{"class":42,"line":5105},[40,15987,9852],{"class":50},[40,15989,4520],{"class":1283},[40,15991,15992],{"class":94}," \"a:\"",[40,15994,4787],{"class":1283},[40,15996,14191],{"class":50},[40,15998,4520],{"class":1283},[40,16000,16001],{"class":94}," \" b:\"",[40,16003,4787],{"class":1283},[40,16005,14204],{"class":50},[40,16007,4520],{"class":1283},[40,16009,12162],{"class":50},[40,16011,16012],{"class":42,"line":5110},[40,16013,1413],{"emptyLinePlaceholder":1412},[40,16015,16016,16019,16021,16023,16026,16028,16031],{"class":42,"line":5902},[40,16017,16018],{"class":596},"    mySwap02",[40,16020,3488],{"class":50},[40,16022,3833],{"class":1283},[40,16024,16025],{"class":50},"a, ",[40,16027,3833],{"class":1283},[40,16029,16030],{"class":50},"b);",[40,16032,16033],{"class":997},"\u002F\u002F地址传递，形参会修饰实参\n",[40,16035,16036,16038,16040,16042,16044,16046,16048,16050,16052,16054,16056],{"class":42,"line":5916},[40,16037,9852],{"class":50},[40,16039,4520],{"class":1283},[40,16041,15992],{"class":94},[40,16043,4787],{"class":1283},[40,16045,14191],{"class":50},[40,16047,4520],{"class":1283},[40,16049,16001],{"class":94},[40,16051,4787],{"class":1283},[40,16053,14204],{"class":50},[40,16055,4520],{"class":1283},[40,16057,12162],{"class":50},[40,16059,16060],{"class":42,"line":5924},[40,16061,1413],{"emptyLinePlaceholder":1412},[40,16063,16064,16067,16069],{"class":42,"line":5929},[40,16065,16066],{"class":596},"    mySwap03",[40,16068,15980],{"class":50},[40,16070,16071],{"class":997},"\u002F\u002F引用传递，形参会修饰实参\n",[40,16073,16074,16076,16078,16080,16082,16084,16086,16088,16090,16092,16094],{"class":42,"line":5935},[40,16075,9852],{"class":50},[40,16077,4520],{"class":1283},[40,16079,15992],{"class":94},[40,16081,4787],{"class":1283},[40,16083,14191],{"class":50},[40,16085,4520],{"class":1283},[40,16087,16001],{"class":94},[40,16089,4787],{"class":1283},[40,16091,14204],{"class":50},[40,16093,4520],{"class":1283},[40,16095,12162],{"class":50},[40,16097,16098],{"class":42,"line":5941},[40,16099,1413],{"emptyLinePlaceholder":1412},[40,16101,16102,16104,16106,16108],{"class":42,"line":5946},[40,16103,5629],{"class":596},[40,16105,3488],{"class":50},[40,16107,5634],{"class":94},[40,16109,6043],{"class":50},[40,16111,16112],{"class":42,"line":11270},[40,16113,1413],{"emptyLinePlaceholder":1412},[40,16115,16116,16118,16120],{"class":42,"line":11294},[40,16117,7413],{"class":1283},[40,16119,7416],{"class":63},[40,16121,4637],{"class":50},[40,16123,16124],{"class":42,"line":11299},[40,16125,4907],{"class":50},[14,16127,16129],{"id":16128},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,16131,16132],{},"作用：引用是可以作为函数的返回值存在的",[19,16134,12347,16135],{},[409,16136,16137],{},"不要返回局部变量引用",[19,16139,16140],{},"用法：函数调用作为左值",[31,16142,16144],{"className":13263,"code":16143,"language":13265,"meta":36,"style":36},"\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",[26,16145,16146,16151,16159,16174,16180,16184,16188,16193,16201,16218,16224,16228,16232,16240,16244,16249,16263,16283,16302,16306,16311,16324,16344,16362,16366,16382,16386,16405,16423,16427,16437,16441,16449],{"__ignoreMap":36},[40,16147,16148],{"class":42,"line":43},[40,16149,16150],{"class":997},"\u002F\u002F返回局部变量引用\n",[40,16152,16153,16155,16157],{"class":42,"line":54},[40,16154,15888],{"class":1283},[40,16156,8911],{"class":596},[40,16158,14175],{"class":50},[40,16160,16161,16163,16165,16167,16169,16171],{"class":42,"line":70},[40,16162,5311],{"class":1283},[40,16164,14191],{"class":50},[40,16166,1284],{"class":1283},[40,16168,5364],{"class":63},[40,16170,3540],{"class":50},[40,16172,16173],{"class":997}," \u002F\u002F局部变量\n",[40,16175,16176,16178],{"class":42,"line":78},[40,16177,7413],{"class":1283},[40,16179,4775],{"class":50},[40,16181,16182],{"class":42,"line":86},[40,16183,4907],{"class":50},[40,16185,16186],{"class":42,"line":100},[40,16187,1413],{"emptyLinePlaceholder":1412},[40,16189,16190],{"class":42,"line":108},[40,16191,16192],{"class":997},"\u002F\u002F返回静态变量引用\n",[40,16194,16195,16197,16199],{"class":42,"line":121},[40,16196,15888],{"class":1283},[40,16198,8980],{"class":596},[40,16200,14175],{"class":50},[40,16202,16203,16205,16207,16209,16211,16213,16215],{"class":42,"line":134},[40,16204,14342],{"class":1283},[40,16206,5708],{"class":1283},[40,16208,14191],{"class":50},[40,16210,1284],{"class":1283},[40,16212,12272],{"class":63},[40,16214,3540],{"class":50},[40,16216,16217],{"class":997},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[40,16219,16220,16222],{"class":42,"line":146},[40,16221,7413],{"class":1283},[40,16223,4775],{"class":50},[40,16225,16226],{"class":42,"line":154},[40,16227,4907],{"class":50},[40,16229,16230],{"class":42,"line":162},[40,16231,1413],{"emptyLinePlaceholder":1412},[40,16233,16234,16236,16238],{"class":42,"line":170},[40,16235,3491],{"class":1283},[40,16237,5299],{"class":596},[40,16239,14175],{"class":50},[40,16241,16242],{"class":42,"line":183},[40,16243,1413],{"emptyLinePlaceholder":1412},[40,16245,16246],{"class":42,"line":196},[40,16247,16248],{"class":997},"    \u002F\u002F不能返回局部变量的引用\n",[40,16250,16251,16254,16257,16259,16261],{"class":42,"line":204},[40,16252,16253],{"class":1283},"    int&",[40,16255,16256],{"class":50}," ref ",[40,16258,1284],{"class":1283},[40,16260,8911],{"class":596},[40,16262,8959],{"class":50},[40,16264,16265,16267,16269,16272,16274,16276,16278,16280],{"class":42,"line":217},[40,16266,9852],{"class":50},[40,16268,4520],{"class":1283},[40,16270,16271],{"class":94}," \"ref = \"",[40,16273,4787],{"class":1283},[40,16275,16256],{"class":50},[40,16277,4520],{"class":1283},[40,16279,14791],{"class":50},[40,16281,16282],{"class":997},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[40,16284,16285,16287,16289,16291,16293,16295,16297,16299],{"class":42,"line":230},[40,16286,9852],{"class":50},[40,16288,4520],{"class":1283},[40,16290,16271],{"class":94},[40,16292,4787],{"class":1283},[40,16294,16256],{"class":50},[40,16296,4520],{"class":1283},[40,16298,14791],{"class":50},[40,16300,16301],{"class":997},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[40,16303,16304],{"class":42,"line":238},[40,16305,1413],{"emptyLinePlaceholder":1412},[40,16307,16308],{"class":42,"line":251},[40,16309,16310],{"class":997},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[40,16312,16313,16315,16318,16320,16322],{"class":42,"line":264},[40,16314,16253],{"class":1283},[40,16316,16317],{"class":50}," ref2 ",[40,16319,1284],{"class":1283},[40,16321,8980],{"class":596},[40,16323,8959],{"class":50},[40,16325,16326,16328,16330,16333,16335,16337,16339,16341],{"class":42,"line":277},[40,16327,9852],{"class":50},[40,16329,4520],{"class":1283},[40,16331,16332],{"class":94}," \"ref2 = \"",[40,16334,4787],{"class":1283},[40,16336,16317],{"class":50},[40,16338,4520],{"class":1283},[40,16340,14791],{"class":50},[40,16342,16343],{"class":997}," \u002F\u002F20\n",[40,16345,16346,16348,16350,16352,16354,16356,16358,16360],{"class":42,"line":290},[40,16347,9852],{"class":50},[40,16349,4520],{"class":1283},[40,16351,16332],{"class":94},[40,16353,4787],{"class":1283},[40,16355,16317],{"class":50},[40,16357,4520],{"class":1283},[40,16359,14791],{"class":50},[40,16361,16343],{"class":997},[40,16363,16364],{"class":42,"line":298},[40,16365,1413],{"emptyLinePlaceholder":1412},[40,16367,16368,16370,16373,16375,16377,16379],{"class":42,"line":310},[40,16369,9025],{"class":596},[40,16371,16372],{"class":50},"() ",[40,16374,1284],{"class":1283},[40,16376,6323],{"class":63},[40,16378,3540],{"class":50},[40,16380,16381],{"class":997},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[40,16383,16384],{"class":42,"line":5086},[40,16385,1413],{"emptyLinePlaceholder":1412},[40,16387,16388,16390,16392,16394,16396,16398,16400,16402],{"class":42,"line":5091},[40,16389,9852],{"class":50},[40,16391,4520],{"class":1283},[40,16393,16332],{"class":94},[40,16395,4787],{"class":1283},[40,16397,16317],{"class":50},[40,16399,4520],{"class":1283},[40,16401,14791],{"class":50},[40,16403,16404],{"class":997}," \u002F\u002F1000\n",[40,16406,16407,16409,16411,16413,16415,16417,16419,16421],{"class":42,"line":5105},[40,16408,9852],{"class":50},[40,16410,4520],{"class":1283},[40,16412,16332],{"class":94},[40,16414,4787],{"class":1283},[40,16416,16317],{"class":50},[40,16418,4520],{"class":1283},[40,16420,14791],{"class":50},[40,16422,16404],{"class":997},[40,16424,16425],{"class":42,"line":5110},[40,16426,1413],{"emptyLinePlaceholder":1412},[40,16428,16429,16431,16433,16435],{"class":42,"line":5902},[40,16430,5629],{"class":596},[40,16432,3488],{"class":50},[40,16434,5634],{"class":94},[40,16436,6043],{"class":50},[40,16438,16439],{"class":42,"line":5916},[40,16440,1413],{"emptyLinePlaceholder":1412},[40,16442,16443,16445,16447],{"class":42,"line":5924},[40,16444,7413],{"class":1283},[40,16446,7416],{"class":63},[40,16448,4637],{"class":50},[40,16450,16451],{"class":42,"line":5929},[40,16452,4907],{"class":50},[14,16454,16456],{"id":16455},"_65引用的本质","6.5引用的本质",[19,16458,16459,16460],{},"本质：",[409,16461,16462],{},"引用的本质在c++内部实现是一个指针常量.",[31,16464,16466],{"className":3476,"code":16465,"language":3478,"meta":36,"style":36},"\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",[26,16467,16468,16473,16489,16503,16507,16516,16528,16533,16538,16549,16562,16566,16582,16599,16603,16611,16619],{"__ignoreMap":36},[40,16469,16470],{"class":42,"line":43},[40,16471,16472],{"class":997},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[40,16474,16475,16477,16479,16481,16483,16486],{"class":42,"line":54},[40,16476,8687],{"class":1283},[40,16478,14707],{"class":596},[40,16480,3488],{"class":50},[40,16482,15888],{"class":1283},[40,16484,16485],{"class":8539}," ref",[40,16487,16488],{"class":50},"){\n",[40,16490,16491,16494,16496,16498,16500],{"class":42,"line":70},[40,16492,16493],{"class":50},"    ref ",[40,16495,1284],{"class":1283},[40,16497,9077],{"class":63},[40,16499,3540],{"class":50},[40,16501,16502],{"class":997}," \u002F\u002F ref是引用，转换为*ref = 100\n",[40,16504,16505],{"class":42,"line":78},[40,16506,4907],{"class":50},[40,16508,16509,16511,16513],{"class":42,"line":86},[40,16510,3491],{"class":1283},[40,16512,5299],{"class":596},[40,16514,16515],{"class":50},"(){\n",[40,16517,16518,16520,16522,16524,16526],{"class":42,"line":100},[40,16519,5311],{"class":1283},[40,16521,14191],{"class":50},[40,16523,1284],{"class":1283},[40,16525,5364],{"class":63},[40,16527,4637],{"class":50},[40,16529,16530],{"class":42,"line":108},[40,16531,16532],{"class":50},"    \n",[40,16534,16535],{"class":42,"line":121},[40,16536,16537],{"class":997},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[40,16539,16540,16542,16544,16546],{"class":42,"line":134},[40,16541,16253],{"class":1283},[40,16543,16256],{"class":50},[40,16545,1284],{"class":1283},[40,16547,16548],{"class":50}," a; \n",[40,16550,16551,16553,16555,16557,16559],{"class":42,"line":146},[40,16552,16493],{"class":50},[40,16554,1284],{"class":1283},[40,16556,12272],{"class":63},[40,16558,3540],{"class":50},[40,16560,16561],{"class":997}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[40,16563,16564],{"class":42,"line":154},[40,16565,16532],{"class":50},[40,16567,16568,16570,16572,16574,16576,16578,16580],{"class":42,"line":162},[40,16569,9852],{"class":50},[40,16571,4520],{"class":1283},[40,16573,15992],{"class":94},[40,16575,4787],{"class":1283},[40,16577,14191],{"class":50},[40,16579,4520],{"class":1283},[40,16581,12162],{"class":50},[40,16583,16584,16586,16588,16591,16593,16595,16597],{"class":42,"line":170},[40,16585,9852],{"class":50},[40,16587,4520],{"class":1283},[40,16589,16590],{"class":94}," \"ref:\"",[40,16592,4787],{"class":1283},[40,16594,16256],{"class":50},[40,16596,4520],{"class":1283},[40,16598,12162],{"class":50},[40,16600,16601],{"class":42,"line":183},[40,16602,16532],{"class":50},[40,16604,16605,16608],{"class":42,"line":196},[40,16606,16607],{"class":596},"    func",[40,16609,16610],{"class":50},"(a);\n",[40,16612,16613,16615,16617],{"class":42,"line":204},[40,16614,7413],{"class":1283},[40,16616,7416],{"class":63},[40,16618,4637],{"class":50},[40,16620,16621],{"class":42,"line":217},[40,16622,4907],{"class":50},[19,16624,14654],{},[492,16626,16627,16630],{},[495,16628,16629],{},"引用的本质，就是一个指针常量",[495,16631,16632],{},"引用一旦初始化，就不可以发生改变",[14,16634,16636],{"id":16635},"_66常量引用","6.6常量引用",[19,16638,16639],{},"作用：常量引用主要用来修饰形参",[19,16641,16642,16643,16646],{},"在函数形参列表中，可以加",[409,16644,16645],{},"const修饰形参","，防止形参改变实参",[31,16648,16650],{"className":3476,"code":16649,"language":3478,"meta":36,"style":36},"\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",[26,16651,16652,16657,16662,16681,16686,16699,16703,16707,16715,16719,16724,16729,16743,16747,16755,16767,16771,16776,16788,16795,16799,16809,16813,16821],{"__ignoreMap":36},[40,16653,16654],{"class":42,"line":43},[40,16655,16656],{"class":997},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[40,16658,16659],{"class":42,"line":54},[40,16660,16661],{"class":997},"\u002F\u002F加上const就不能修改实参的\n",[40,16663,16664,16666,16669,16671,16673,16676,16679],{"class":42,"line":70},[40,16665,8687],{"class":1283},[40,16667,16668],{"class":596}," showValue",[40,16670,3488],{"class":50},[40,16672,10115],{"class":1283},[40,16674,16675],{"class":1283}," int&",[40,16677,16678],{"class":8539}," v",[40,16680,15764],{"class":50},[40,16682,16683],{"class":42,"line":78},[40,16684,16685],{"class":997},"    \u002F\u002Fv += 100;\n",[40,16687,16688,16690,16692,16695,16697],{"class":42,"line":86},[40,16689,9852],{"class":50},[40,16691,4520],{"class":1283},[40,16693,16694],{"class":50}," v ",[40,16696,4520],{"class":1283},[40,16698,12162],{"class":50},[40,16700,16701],{"class":42,"line":100},[40,16702,4907],{"class":50},[40,16704,16705],{"class":42,"line":108},[40,16706,1413],{"emptyLinePlaceholder":1412},[40,16708,16709,16711,16713],{"class":42,"line":121},[40,16710,3491],{"class":1283},[40,16712,5299],{"class":596},[40,16714,14175],{"class":50},[40,16716,16717],{"class":42,"line":134},[40,16718,1413],{"emptyLinePlaceholder":1412},[40,16720,16721],{"class":42,"line":146},[40,16722,16723],{"class":997},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[40,16725,16726],{"class":42,"line":154},[40,16727,16728],{"class":997},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[40,16730,16731,16733,16735,16737,16739,16741],{"class":42,"line":162},[40,16732,14543],{"class":1283},[40,16734,16675],{"class":1283},[40,16736,16256],{"class":50},[40,16738,1284],{"class":1283},[40,16740,5364],{"class":63},[40,16742,4637],{"class":50},[40,16744,16745],{"class":42,"line":170},[40,16746,1413],{"emptyLinePlaceholder":1412},[40,16748,16749,16752],{"class":42,"line":183},[40,16750,16751],{"class":997},"    \u002F\u002Fref = 100;",[40,16753,16754],{"class":997},"  \u002F\u002F加入const后不可以修改变量\n",[40,16756,16757,16759,16761,16763,16765],{"class":42,"line":196},[40,16758,9852],{"class":50},[40,16760,4520],{"class":1283},[40,16762,16256],{"class":50},[40,16764,4520],{"class":1283},[40,16766,12162],{"class":50},[40,16768,16769],{"class":42,"line":204},[40,16770,1413],{"emptyLinePlaceholder":1412},[40,16772,16773],{"class":42,"line":217},[40,16774,16775],{"class":997},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[40,16777,16778,16780,16782,16784,16786],{"class":42,"line":230},[40,16779,5311],{"class":1283},[40,16781,14191],{"class":50},[40,16783,1284],{"class":1283},[40,16785,5364],{"class":63},[40,16787,4637],{"class":50},[40,16789,16790,16793],{"class":42,"line":238},[40,16791,16792],{"class":596},"    showValue",[40,16794,16610],{"class":50},[40,16796,16797],{"class":42,"line":251},[40,16798,1413],{"emptyLinePlaceholder":1412},[40,16800,16801,16803,16805,16807],{"class":42,"line":264},[40,16802,5629],{"class":596},[40,16804,3488],{"class":50},[40,16806,5634],{"class":94},[40,16808,6043],{"class":50},[40,16810,16811],{"class":42,"line":277},[40,16812,1413],{"emptyLinePlaceholder":1412},[40,16814,16815,16817,16819],{"class":42,"line":290},[40,16816,7413],{"class":1283},[40,16818,7416],{"class":63},[40,16820,4637],{"class":50},[40,16822,16823],{"class":42,"line":298},[40,16824,4907],{"class":50},[3384,16826,16827],{},"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":36,"searchDepth":54,"depth":54,"links":16829},[16830,16831,16832,16833,16834,16835],{"id":15362,"depth":54,"text":15363},{"id":15541,"depth":54,"text":15542},{"id":15724,"depth":54,"text":15725},{"id":16128,"depth":54,"text":16129},{"id":16455,"depth":54,"text":16456},{"id":16635,"depth":54,"text":16636},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":15354,"description":36},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":16842,"title":16843,"body":16844,"description":36,"extension":3414,"meta":17925,"navigation":1412,"path":17926,"seo":17927,"stem":17928,"__hash__":17929},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":16845,"toc":17917},[16846,16849,16853,16856,16861,17093,17095,17106,17110,17113,17121,17225,17228,17232,17235,17239,17242,17247,17269,17275,17602,17605,17609,17617,17914],[10,16847,16843],{"id":16848},"_7函数高级部分",[14,16850,16852],{"id":16851},"_71函数默认参数","7.1函数默认参数",[19,16854,16855],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,16857,8504,16858],{},[26,16859,16860],{}," 返回值类型  函数名 （参数= 默认值）{}",[31,16862,16864],{"className":3476,"code":16863,"language":3478,"meta":36,"style":36},"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",[26,16865,16866,16901,16916,16920,16924,16929,16934,16963,16983,16993,16997,17001,17009,17013,17041,17063,17067,17077,17081,17089],{"__ignoreMap":36},[40,16867,16868,16870,16872,16874,16876,16878,16880,16882,16884,16887,16889,16891,16893,16895,16897,16899],{"class":42,"line":43},[40,16869,3491],{"class":1283},[40,16871,14707],{"class":596},[40,16873,3488],{"class":50},[40,16875,3491],{"class":1283},[40,16877,4741],{"class":8539},[40,16879,15757],{"class":50},[40,16881,3491],{"class":1283},[40,16883,6157],{"class":8539},[40,16885,16886],{"class":1283}," =",[40,16888,5364],{"class":63},[40,16890,15757],{"class":50},[40,16892,3491],{"class":1283},[40,16894,6173],{"class":8539},[40,16896,16886],{"class":1283},[40,16898,5364],{"class":63},[40,16900,15764],{"class":50},[40,16902,16903,16905,16907,16909,16911,16913],{"class":42,"line":54},[40,16904,7413],{"class":1283},[40,16906,14191],{"class":50},[40,16908,3960],{"class":1283},[40,16910,14204],{"class":50},[40,16912,3960],{"class":1283},[40,16914,16915],{"class":50}," c;\n",[40,16917,16918],{"class":42,"line":70},[40,16919,4907],{"class":50},[40,16921,16922],{"class":42,"line":78},[40,16923,1413],{"emptyLinePlaceholder":1412},[40,16925,16926],{"class":42,"line":86},[40,16927,16928],{"class":997},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[40,16930,16931],{"class":42,"line":100},[40,16932,16933],{"class":997},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[40,16935,16936,16938,16941,16943,16945,16947,16949,16951,16953,16955,16957,16959,16961],{"class":42,"line":108},[40,16937,3491],{"class":1283},[40,16939,16940],{"class":596}," func2",[40,16942,3488],{"class":50},[40,16944,3491],{"class":1283},[40,16946,4741],{"class":8539},[40,16948,16886],{"class":1283},[40,16950,5364],{"class":63},[40,16952,15757],{"class":50},[40,16954,3491],{"class":1283},[40,16956,6157],{"class":8539},[40,16958,16886],{"class":1283},[40,16960,5364],{"class":63},[40,16962,6043],{"class":50},[40,16964,16965,16967,16969,16971,16973,16975,16977,16979,16981],{"class":42,"line":121},[40,16966,3491],{"class":1283},[40,16968,16940],{"class":596},[40,16970,3488],{"class":50},[40,16972,3491],{"class":1283},[40,16974,4741],{"class":8539},[40,16976,15757],{"class":50},[40,16978,3491],{"class":1283},[40,16980,6157],{"class":8539},[40,16982,15764],{"class":50},[40,16984,16985,16987,16989,16991],{"class":42,"line":134},[40,16986,7413],{"class":1283},[40,16988,14191],{"class":50},[40,16990,3960],{"class":1283},[40,16992,15785],{"class":50},[40,16994,16995],{"class":42,"line":146},[40,16996,4907],{"class":50},[40,16998,16999],{"class":42,"line":154},[40,17000,1413],{"emptyLinePlaceholder":1412},[40,17002,17003,17005,17007],{"class":42,"line":162},[40,17004,3491],{"class":1283},[40,17006,5299],{"class":596},[40,17008,14175],{"class":50},[40,17010,17011],{"class":42,"line":170},[40,17012,1413],{"emptyLinePlaceholder":1412},[40,17014,17015,17017,17019,17022,17024,17026,17028,17030,17032,17034,17037,17039],{"class":42,"line":183},[40,17016,9852],{"class":50},[40,17018,4520],{"class":1283},[40,17020,17021],{"class":94}," \"ret = \"",[40,17023,4787],{"class":1283},[40,17025,14707],{"class":596},[40,17027,3488],{"class":50},[40,17029,4178],{"class":63},[40,17031,15757],{"class":50},[40,17033,4178],{"class":63},[40,17035,17036],{"class":50},") ",[40,17038,4520],{"class":1283},[40,17040,12162],{"class":50},[40,17042,17043,17045,17047,17049,17051,17053,17055,17057,17059,17061],{"class":42,"line":196},[40,17044,9852],{"class":50},[40,17046,4520],{"class":1283},[40,17048,17021],{"class":94},[40,17050,4787],{"class":1283},[40,17052,14707],{"class":596},[40,17054,3488],{"class":50},[40,17056,3791],{"class":63},[40,17058,17036],{"class":50},[40,17060,4520],{"class":1283},[40,17062,12162],{"class":50},[40,17064,17065],{"class":42,"line":204},[40,17066,1413],{"emptyLinePlaceholder":1412},[40,17068,17069,17071,17073,17075],{"class":42,"line":217},[40,17070,5629],{"class":596},[40,17072,3488],{"class":50},[40,17074,5634],{"class":94},[40,17076,6043],{"class":50},[40,17078,17079],{"class":42,"line":230},[40,17080,1413],{"emptyLinePlaceholder":1412},[40,17082,17083,17085,17087],{"class":42,"line":238},[40,17084,7413],{"class":1283},[40,17086,7416],{"class":63},[40,17088,4637],{"class":50},[40,17090,17091],{"class":42,"line":251},[40,17092,4907],{"class":50},[19,17094,14654],{},[492,17096,17097,17100,17103],{},[495,17098,17099],{},"我传就用我；没传就用你",[495,17101,17102],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[495,17104,17105],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,17107,17109],{"id":17108},"_72函数的占位参数","7.2函数的占位参数",[19,17111,17112],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,17114,17115,17117,17118],{},[409,17116,8504],{}," ",[26,17119,17120],{},"返回值类型 函数名 (数据类型){}",[31,17122,17124],{"className":3476,"code":17123,"language":3478,"meta":36,"style":36},"\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",[26,17125,17126,17131,17149,17162,17166,17174,17178,17195,17199,17209,17213,17221],{"__ignoreMap":36},[40,17127,17128],{"class":42,"line":43},[40,17129,17130],{"class":997},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[40,17132,17133,17135,17137,17139,17141,17143,17145,17147],{"class":42,"line":54},[40,17134,8687],{"class":1283},[40,17136,14707],{"class":596},[40,17138,3488],{"class":50},[40,17140,3491],{"class":1283},[40,17142,4741],{"class":8539},[40,17144,15757],{"class":50},[40,17146,3491],{"class":1283},[40,17148,15764],{"class":50},[40,17150,17151,17153,17155,17158,17160],{"class":42,"line":70},[40,17152,9852],{"class":50},[40,17154,4520],{"class":1283},[40,17156,17157],{"class":94}," \"this is func\"",[40,17159,4787],{"class":1283},[40,17161,12162],{"class":50},[40,17163,17164],{"class":42,"line":78},[40,17165,4907],{"class":50},[40,17167,17168,17170,17172],{"class":42,"line":86},[40,17169,3491],{"class":1283},[40,17171,5299],{"class":596},[40,17173,14175],{"class":50},[40,17175,17176],{"class":42,"line":100},[40,17177,1413],{"emptyLinePlaceholder":1412},[40,17179,17180,17182,17184,17186,17188,17190,17192],{"class":42,"line":108},[40,17181,16607],{"class":596},[40,17183,3488],{"class":50},[40,17185,3925],{"class":63},[40,17187,1299],{"class":50},[40,17189,3925],{"class":63},[40,17191,9289],{"class":50},[40,17193,17194],{"class":997}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[40,17196,17197],{"class":42,"line":121},[40,17198,1413],{"emptyLinePlaceholder":1412},[40,17200,17201,17203,17205,17207],{"class":42,"line":134},[40,17202,5629],{"class":596},[40,17204,3488],{"class":50},[40,17206,5634],{"class":94},[40,17208,6043],{"class":50},[40,17210,17211],{"class":42,"line":146},[40,17212,1413],{"emptyLinePlaceholder":1412},[40,17214,17215,17217,17219],{"class":42,"line":154},[40,17216,7413],{"class":1283},[40,17218,7416],{"class":63},[40,17220,4637],{"class":50},[40,17222,17223],{"class":42,"line":162},[40,17224,4907],{"class":50},[19,17226,17227],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,17229,17231],{"id":17230},"_73函数重载","7.3函数重载",[19,17233,17234],{},"意思是函数名是可以相同的",[402,17236,17238],{"id":17237},"_731基本语法","7.3.1基本语法",[19,17240,17241],{},"作用：函数名可以相同，提高复用性",[19,17243,17244],{},[409,17245,17246],{},"函数重载满足条件：",[1338,17248,17249,17252,17255],{},[495,17250,17251],{},"同一个作用域下",[495,17253,17254],{},"函数名称相同",[495,17256,17257,17258,17261,17262,17265,17266],{},"函数参数",[409,17259,17260],{},"类型不同","  或者 ",[409,17263,17264],{},"个数不同"," 或者 ",[409,17267,17268],{},"顺序不同",[19,17270,17271,17274],{},[409,17272,17273],{},"注意:","  函数的返回值不可以作为函数重载的条件",[31,17276,17278],{"className":13263,"code":17277,"language":13265,"meta":36,"style":36},"\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",[26,17279,17280,17285,17293,17297,17310,17314,17328,17332,17345,17349,17364,17368,17381,17385,17406,17410,17423,17427,17447,17451,17464,17468,17472,17477,17482,17487,17492,17497,17501,17505,17513,17517,17523,17533,17543,17557,17572,17576,17586,17590,17598],{"__ignoreMap":36},[40,17281,17282],{"class":42,"line":43},[40,17283,17284],{"class":997},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[40,17286,17287,17289,17291],{"class":42,"line":54},[40,17288,8687],{"class":1283},[40,17290,14707],{"class":596},[40,17292,5302],{"class":50},[40,17294,17295],{"class":42,"line":70},[40,17296,4888],{"class":50},[40,17298,17299,17301,17303,17306,17308],{"class":42,"line":78},[40,17300,9852],{"class":50},[40,17302,4520],{"class":1283},[40,17304,17305],{"class":94}," \"func 的调用！\"",[40,17307,4787],{"class":1283},[40,17309,12162],{"class":50},[40,17311,17312],{"class":42,"line":86},[40,17313,4907],{"class":50},[40,17315,17316,17318,17320,17322,17324,17326],{"class":42,"line":100},[40,17317,8687],{"class":1283},[40,17319,14707],{"class":596},[40,17321,3488],{"class":50},[40,17323,3491],{"class":1283},[40,17325,4741],{"class":8539},[40,17327,1811],{"class":50},[40,17329,17330],{"class":42,"line":108},[40,17331,4888],{"class":50},[40,17333,17334,17336,17338,17341,17343],{"class":42,"line":121},[40,17335,9852],{"class":50},[40,17337,4520],{"class":1283},[40,17339,17340],{"class":94}," \"func (int a) 的调用！\"",[40,17342,4787],{"class":1283},[40,17344,12162],{"class":50},[40,17346,17347],{"class":42,"line":134},[40,17348,4907],{"class":50},[40,17350,17351,17353,17355,17357,17360,17362],{"class":42,"line":146},[40,17352,8687],{"class":1283},[40,17354,14707],{"class":596},[40,17356,3488],{"class":50},[40,17358,17359],{"class":1283},"double",[40,17361,4741],{"class":8539},[40,17363,1811],{"class":50},[40,17365,17366],{"class":42,"line":154},[40,17367,4888],{"class":50},[40,17369,17370,17372,17374,17377,17379],{"class":42,"line":162},[40,17371,9852],{"class":50},[40,17373,4520],{"class":1283},[40,17375,17376],{"class":94}," \"func (double a)的调用！\"",[40,17378,4787],{"class":1283},[40,17380,12162],{"class":50},[40,17382,17383],{"class":42,"line":170},[40,17384,4907],{"class":50},[40,17386,17387,17389,17391,17393,17395,17397,17400,17402,17404],{"class":42,"line":183},[40,17388,8687],{"class":1283},[40,17390,14707],{"class":596},[40,17392,3488],{"class":50},[40,17394,3491],{"class":1283},[40,17396,4741],{"class":8539},[40,17398,17399],{"class":50}," ,",[40,17401,17359],{"class":1283},[40,17403,6157],{"class":8539},[40,17405,1811],{"class":50},[40,17407,17408],{"class":42,"line":196},[40,17409,4888],{"class":50},[40,17411,17412,17414,17416,17419,17421],{"class":42,"line":204},[40,17413,9852],{"class":50},[40,17415,4520],{"class":1283},[40,17417,17418],{"class":94}," \"func (int a ,double b) 的调用！\"",[40,17420,4787],{"class":1283},[40,17422,12162],{"class":50},[40,17424,17425],{"class":42,"line":217},[40,17426,4907],{"class":50},[40,17428,17429,17431,17433,17435,17437,17439,17441,17443,17445],{"class":42,"line":230},[40,17430,8687],{"class":1283},[40,17432,14707],{"class":596},[40,17434,3488],{"class":50},[40,17436,17359],{"class":1283},[40,17438,4741],{"class":8539},[40,17440,17399],{"class":50},[40,17442,3491],{"class":1283},[40,17444,6157],{"class":8539},[40,17446,1811],{"class":50},[40,17448,17449],{"class":42,"line":238},[40,17450,4888],{"class":50},[40,17452,17453,17455,17457,17460,17462],{"class":42,"line":251},[40,17454,9852],{"class":50},[40,17456,4520],{"class":1283},[40,17458,17459],{"class":94}," \"func (double a ,int b)的调用！\"",[40,17461,4787],{"class":1283},[40,17463,12162],{"class":50},[40,17465,17466],{"class":42,"line":264},[40,17467,4907],{"class":50},[40,17469,17470],{"class":42,"line":277},[40,17471,1413],{"emptyLinePlaceholder":1412},[40,17473,17474],{"class":42,"line":290},[40,17475,17476],{"class":997},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[40,17478,17479],{"class":42,"line":298},[40,17480,17481],{"class":997},"\u002F\u002Fint func(double a, int b)\n",[40,17483,17484],{"class":42,"line":310},[40,17485,17486],{"class":997},"\u002F\u002F{\n",[40,17488,17489],{"class":42,"line":5086},[40,17490,17491],{"class":997},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[40,17493,17494],{"class":42,"line":5091},[40,17495,17496],{"class":997},"\u002F\u002F}\n",[40,17498,17499],{"class":42,"line":5105},[40,17500,1413],{"emptyLinePlaceholder":1412},[40,17502,17503],{"class":42,"line":5110},[40,17504,1413],{"emptyLinePlaceholder":1412},[40,17506,17507,17509,17511],{"class":42,"line":5902},[40,17508,3491],{"class":1283},[40,17510,5299],{"class":596},[40,17512,14175],{"class":50},[40,17514,17515],{"class":42,"line":5916},[40,17516,1413],{"emptyLinePlaceholder":1412},[40,17518,17519,17521],{"class":42,"line":5924},[40,17520,16607],{"class":596},[40,17522,8959],{"class":50},[40,17524,17525,17527,17529,17531],{"class":42,"line":5929},[40,17526,16607],{"class":596},[40,17528,3488],{"class":50},[40,17530,3925],{"class":63},[40,17532,6043],{"class":50},[40,17534,17535,17537,17539,17541],{"class":42,"line":5935},[40,17536,16607],{"class":596},[40,17538,3488],{"class":50},[40,17540,3534],{"class":63},[40,17542,6043],{"class":50},[40,17544,17545,17547,17549,17551,17553,17555],{"class":42,"line":5941},[40,17546,16607],{"class":596},[40,17548,3488],{"class":50},[40,17550,3925],{"class":63},[40,17552,1299],{"class":50},[40,17554,3534],{"class":63},[40,17556,6043],{"class":50},[40,17558,17559,17561,17563,17565,17568,17570],{"class":42,"line":5946},[40,17560,16607],{"class":596},[40,17562,3488],{"class":50},[40,17564,3534],{"class":63},[40,17566,17567],{"class":50}," , ",[40,17569,3925],{"class":63},[40,17571,6043],{"class":50},[40,17573,17574],{"class":42,"line":11270},[40,17575,16532],{"class":50},[40,17577,17578,17580,17582,17584],{"class":42,"line":11294},[40,17579,5629],{"class":596},[40,17581,3488],{"class":50},[40,17583,5634],{"class":94},[40,17585,6043],{"class":50},[40,17587,17588],{"class":42,"line":11299},[40,17589,1413],{"emptyLinePlaceholder":1412},[40,17591,17592,17594,17596],{"class":42,"line":11305},[40,17593,7413],{"class":1283},[40,17595,7416],{"class":63},[40,17597,4637],{"class":50},[40,17599,17600],{"class":42,"line":11332},[40,17601,4907],{"class":50},[19,17603,17604],{},"重点：函数返回值不可以作为函数重载条件！",[402,17606,17608],{"id":17607},"_732注意事项","7.3.2注意事项",[1338,17610,17611,17614],{},[495,17612,17613],{},"引用作为重载条件!!!",[495,17615,17616],{},"函数重载碰到函数默认参数",[31,17618,17620],{"className":3476,"code":17619,"language":3478,"meta":36,"style":36},"\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",[26,17621,17622,17627,17632,17636,17652,17656,17669,17673,17677,17695,17699,17712,17716,17720,17724,17729,17733,17757,17761,17774,17778,17782,17796,17800,17813,17817,17821,17829,17833,17845,17855,17868,17872,17876,17884,17888,17898,17902,17910],{"__ignoreMap":36},[40,17623,17624],{"class":42,"line":43},[40,17625,17626],{"class":997},"\u002F\u002F函数重载注意事项\n",[40,17628,17629],{"class":42,"line":54},[40,17630,17631],{"class":997},"\u002F\u002F1、引用作为重载条件\n",[40,17633,17634],{"class":42,"line":70},[40,17635,1413],{"emptyLinePlaceholder":1412},[40,17637,17638,17640,17642,17644,17646,17648,17650],{"class":42,"line":78},[40,17639,8687],{"class":1283},[40,17641,14707],{"class":596},[40,17643,3488],{"class":50},[40,17645,3491],{"class":1283},[40,17647,13906],{"class":1283},[40,17649,2106],{"class":8539},[40,17651,1811],{"class":50},[40,17653,17654],{"class":42,"line":86},[40,17655,4888],{"class":50},[40,17657,17658,17660,17662,17665,17667],{"class":42,"line":100},[40,17659,9852],{"class":50},[40,17661,4520],{"class":1283},[40,17663,17664],{"class":94}," \"func (int &a) 调用 \"",[40,17666,4787],{"class":1283},[40,17668,12162],{"class":50},[40,17670,17671],{"class":42,"line":108},[40,17672,4907],{"class":50},[40,17674,17675],{"class":42,"line":121},[40,17676,1413],{"emptyLinePlaceholder":1412},[40,17678,17679,17681,17683,17685,17687,17689,17691,17693],{"class":42,"line":134},[40,17680,8687],{"class":1283},[40,17682,14707],{"class":596},[40,17684,3488],{"class":50},[40,17686,10115],{"class":1283},[40,17688,5708],{"class":1283},[40,17690,13906],{"class":1283},[40,17692,2106],{"class":8539},[40,17694,1811],{"class":50},[40,17696,17697],{"class":42,"line":146},[40,17698,4888],{"class":50},[40,17700,17701,17703,17705,17708,17710],{"class":42,"line":154},[40,17702,9852],{"class":50},[40,17704,4520],{"class":1283},[40,17706,17707],{"class":94}," \"func (const int &a) 调用 \"",[40,17709,4787],{"class":1283},[40,17711,12162],{"class":50},[40,17713,17714],{"class":42,"line":162},[40,17715,4907],{"class":50},[40,17717,17718],{"class":42,"line":170},[40,17719,1413],{"emptyLinePlaceholder":1412},[40,17721,17722],{"class":42,"line":183},[40,17723,1413],{"emptyLinePlaceholder":1412},[40,17725,17726],{"class":42,"line":196},[40,17727,17728],{"class":997},"\u002F\u002F2、函数重载碰到函数默认参数\n",[40,17730,17731],{"class":42,"line":204},[40,17732,1413],{"emptyLinePlaceholder":1412},[40,17734,17735,17737,17739,17741,17743,17745,17747,17749,17751,17753,17755],{"class":42,"line":217},[40,17736,8687],{"class":1283},[40,17738,16940],{"class":596},[40,17740,3488],{"class":50},[40,17742,3491],{"class":1283},[40,17744,4741],{"class":8539},[40,17746,15757],{"class":50},[40,17748,3491],{"class":1283},[40,17750,6157],{"class":8539},[40,17752,16886],{"class":1283},[40,17754,5364],{"class":63},[40,17756,1811],{"class":50},[40,17758,17759],{"class":42,"line":230},[40,17760,4888],{"class":50},[40,17762,17763,17765,17767,17770,17772],{"class":42,"line":238},[40,17764,9852],{"class":50},[40,17766,4520],{"class":1283},[40,17768,17769],{"class":94}," \"func2(int a, int b = 10) 调用\"",[40,17771,4787],{"class":1283},[40,17773,12162],{"class":50},[40,17775,17776],{"class":42,"line":251},[40,17777,4907],{"class":50},[40,17779,17780],{"class":42,"line":264},[40,17781,1413],{"emptyLinePlaceholder":1412},[40,17783,17784,17786,17788,17790,17792,17794],{"class":42,"line":277},[40,17785,8687],{"class":1283},[40,17787,16940],{"class":596},[40,17789,3488],{"class":50},[40,17791,3491],{"class":1283},[40,17793,4741],{"class":8539},[40,17795,1811],{"class":50},[40,17797,17798],{"class":42,"line":290},[40,17799,4888],{"class":50},[40,17801,17802,17804,17806,17809,17811],{"class":42,"line":298},[40,17803,9852],{"class":50},[40,17805,4520],{"class":1283},[40,17807,17808],{"class":94}," \"func2(int a) 调用\"",[40,17810,4787],{"class":1283},[40,17812,12162],{"class":50},[40,17814,17815],{"class":42,"line":310},[40,17816,4907],{"class":50},[40,17818,17819],{"class":42,"line":5086},[40,17820,1413],{"emptyLinePlaceholder":1412},[40,17822,17823,17825,17827],{"class":42,"line":5091},[40,17824,3491],{"class":1283},[40,17826,5299],{"class":596},[40,17828,14175],{"class":50},[40,17830,17831],{"class":42,"line":5105},[40,17832,16532],{"class":50},[40,17834,17835,17837,17839,17841,17843],{"class":42,"line":5110},[40,17836,5311],{"class":1283},[40,17838,14191],{"class":50},[40,17840,1284],{"class":1283},[40,17842,5364],{"class":63},[40,17844,4637],{"class":50},[40,17846,17847,17849,17852],{"class":42,"line":5902},[40,17848,16607],{"class":596},[40,17850,17851],{"class":50},"(a);",[40,17853,17854],{"class":997}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[40,17856,17857,17859,17861,17863,17865],{"class":42,"line":5916},[40,17858,16607],{"class":596},[40,17860,3488],{"class":50},[40,17862,3925],{"class":63},[40,17864,9289],{"class":50},[40,17866,17867],{"class":997},"\u002F\u002F调用有const   10是个常量\n",[40,17869,17870],{"class":42,"line":5924},[40,17871,1413],{"emptyLinePlaceholder":1412},[40,17873,17874],{"class":42,"line":5929},[40,17875,1413],{"emptyLinePlaceholder":1412},[40,17877,17878,17881],{"class":42,"line":5935},[40,17879,17880],{"class":997},"    \u002F\u002Ffunc2(10);",[40,17882,17883],{"class":997}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[40,17885,17886],{"class":42,"line":5941},[40,17887,1413],{"emptyLinePlaceholder":1412},[40,17889,17890,17892,17894,17896],{"class":42,"line":5946},[40,17891,5629],{"class":596},[40,17893,3488],{"class":50},[40,17895,5634],{"class":94},[40,17897,6043],{"class":50},[40,17899,17900],{"class":42,"line":11270},[40,17901,1413],{"emptyLinePlaceholder":1412},[40,17903,17904,17906,17908],{"class":42,"line":11294},[40,17905,7413],{"class":1283},[40,17907,7416],{"class":63},[40,17909,4637],{"class":50},[40,17911,17912],{"class":42,"line":11299},[40,17913,4907],{"class":50},[3384,17915,17916],{},"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":36,"searchDepth":54,"depth":54,"links":17918},[17919,17920,17921],{"id":16851,"depth":54,"text":16852},{"id":17108,"depth":54,"text":17109},{"id":17230,"depth":54,"text":17231,"children":17922},[17923,17924],{"id":17237,"depth":70,"text":17238},{"id":17607,"depth":70,"text":17608},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":16843,"description":36},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":17931,"title":17932,"body":17933,"description":26685,"extension":3414,"meta":26686,"navigation":1412,"path":26687,"seo":26688,"stem":26689,"__hash__":26690},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":17934,"toc":26666},[17935,17938,17944,17951,17956,17959,17962,17965,17969,17973,17976,17979,17987,17992,17995,18002,18007,18166,18169,18422,18425,18428,18431,18436,18439,18442,18453,18458,18694,18698,18708,18711,18719,18866,18870,18873,18876,18880,19325,19329,19337,19345,20257,20264,20269,20897,20900,20903,20906,21025,21028,21115,21118,21244,21247,21341,21344,21697,21701,21709,21713,21720,21723,21726,21736,21742,21747,21759,21767,21787,21795,21812,21998,22001,22005,22008,22011,22014,22017,22020,22023,22026,22486,22492,22496,22499,22510,23097,23100,23589,23593,23596,23599,23602,23605,23608,23616,24012,24016,24019,24022,24469,24472,24475,24480,24483,24488,24491,24495,24498,24500,24506,24509,24815,24825,24866,24870,24873,24875,24908,24911,25218,25220,25235,25238,25261,25270,25276,25279,25283,25286,25289,25294,25305,25310,25318,25322,25452,25455,25458,25633,25638,25850,25854,25857,25971,25976,26215,26219,26223,26226,26229,26234,26339,26342,26345,26348,26352,26463,26466,26469,26474,26526,26529,26532,26537,26583,26586,26591,26659,26661,26664],[10,17936,17932],{"id":17937},"_8类和对象",[19,17939,17940,17941],{},"C++面向对象的三大特性为",[409,17942,17943],{},"封装、继承、多态",[19,17945,17946,17947,17950],{},"C++认为",[409,17948,17949],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,17952,17953],{},[409,17954,17955],{},"例如：",[19,17957,17958],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,17960,17961],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,17963,17964],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,17966,17968],{"id":17967},"_81封装","8.1封装",[402,17970,17972],{"id":17971},"_811封装的意义","8.1.1封装的意义",[19,17974,17975],{},"封装是C++面向对象三大特性之一",[19,17977,17978],{},"封装的意义：",[1338,17980,17981,17984],{},[495,17982,17983],{},"将属性和行为作为一个整体，表现生活中的事物",[495,17985,17986],{},"将属性和行为加以权限控制",[19,17988,17989],{},[409,17990,17991],{},"封装意义一：",[19,17993,17994],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,17996,17997,17117,17999],{},[409,17998,8504],{},[26,18000,18001],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[492,18003,18004],{},[495,18005,18006],{},"**示例1：**设计一个圆类，求圆的周长",[31,18008,18010],{"className":3476,"code":18009,"language":3478,"meta":36,"style":36},"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",[26,18011,18012,18020,18024,18029,18034,18039,18044,18051,18056,18066,18070,18088,18092,18096,18104,18108,18113,18118,18123,18128,18139,18162],{"__ignoreMap":36},[40,18013,18014,18017],{"class":42,"line":43},[40,18015,18016],{"class":1283},"class",[40,18018,18019],{"class":596}," Circle\n",[40,18021,18022],{"class":42,"line":54},[40,18023,4888],{"class":50},[40,18025,18026],{"class":42,"line":70},[40,18027,18028],{"class":997},"    \u002F\u002F访问权限\n",[40,18030,18031],{"class":42,"line":78},[40,18032,18033],{"class":997},"    \u002F\u002F公共权限\n",[40,18035,18036],{"class":42,"line":86},[40,18037,18038],{"class":1283},"public:\n",[40,18040,18041],{"class":42,"line":100},[40,18042,18043],{"class":997},"    \u002F\u002F属性\n",[40,18045,18046,18048],{"class":42,"line":108},[40,18047,5311],{"class":1283},[40,18049,18050],{"class":50}," m_r;\n",[40,18052,18053],{"class":42,"line":121},[40,18054,18055],{"class":997},"    \u002F\u002F行为\n",[40,18057,18058,18061,18064],{"class":42,"line":134},[40,18059,18060],{"class":1283},"    double",[40,18062,18063],{"class":596}," calculateZC",[40,18065,5302],{"class":50},[40,18067,18068],{"class":42,"line":146},[40,18069,5356],{"class":50},[40,18071,18072,18075,18078,18080,18083,18085],{"class":42,"line":154},[40,18073,18074],{"class":1283},"        return",[40,18076,18077],{"class":63}," 2",[40,18079,3934],{"class":1283},[40,18081,18082],{"class":50},"PI",[40,18084,3934],{"class":1283},[40,18086,18087],{"class":50},"m_r;\n",[40,18089,18090],{"class":42,"line":162},[40,18091,5513],{"class":50},[40,18093,18094],{"class":42,"line":170},[40,18095,7318],{"class":50},[40,18097,18098,18100,18102],{"class":42,"line":183},[40,18099,3491],{"class":1283},[40,18101,5299],{"class":596},[40,18103,5302],{"class":50},[40,18105,18106],{"class":42,"line":196},[40,18107,4888],{"class":50},[40,18109,18110],{"class":42,"line":204},[40,18111,18112],{"class":997},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[40,18114,18115],{"class":42,"line":217},[40,18116,18117],{"class":997},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[40,18119,18120],{"class":42,"line":230},[40,18121,18122],{"class":50},"    Circle c1;\n",[40,18124,18125],{"class":42,"line":238},[40,18126,18127],{"class":997},"    \u002F\u002F给圆对象 的属性进行赋值\n",[40,18129,18130,18133,18135,18137],{"class":42,"line":251},[40,18131,18132],{"class":50},"    c1.m_r",[40,18134,1284],{"class":1283},[40,18136,3925],{"class":63},[40,18138,4637],{"class":50},[40,18140,18141,18143,18145,18148,18150,18153,18156,18158,18160],{"class":42,"line":264},[40,18142,4893],{"class":50},[40,18144,4520],{"class":1283},[40,18146,18147],{"class":94},"\"圆的周长\"",[40,18149,4520],{"class":1283},[40,18151,18152],{"class":50},"c1.",[40,18154,18155],{"class":596},"calculateZC",[40,18157,5752],{"class":50},[40,18159,4520],{"class":1283},[40,18161,4542],{"class":50},[40,18163,18164],{"class":42,"line":277},[40,18165,4907],{"class":50},[19,18167,18168],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[31,18170,18172],{"className":3476,"code":18171,"language":3478,"meta":36,"style":36},"#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",[26,18173,18174,18180,18190,18196,18202,18206,18210,18215,18222,18227,18245,18249,18259,18263,18268,18284,18288,18298,18302,18307,18315,18319,18351,18355,18359,18367,18371,18376,18381,18395,18409,18418],{"__ignoreMap":36},[40,18175,18176,18178],{"class":42,"line":43},[40,18177,5276],{"class":1283},[40,18179,5279],{"class":94},[40,18181,18182,18184,18186,18188],{"class":42,"line":54},[40,18183,5284],{"class":1283},[40,18185,5287],{"class":1283},[40,18187,5290],{"class":596},[40,18189,4637],{"class":50},[40,18191,18192,18194],{"class":42,"line":70},[40,18193,5276],{"class":1283},[40,18195,11071],{"class":94},[40,18197,18198,18200],{"class":42,"line":78},[40,18199,18016],{"class":1283},[40,18201,11084],{"class":596},[40,18203,18204],{"class":42,"line":86},[40,18205,4888],{"class":50},[40,18207,18208],{"class":42,"line":100},[40,18209,18038],{"class":1283},[40,18211,18212],{"class":42,"line":108},[40,18213,18214],{"class":50},"    string m_name;\n",[40,18216,18217,18219],{"class":42,"line":121},[40,18218,5311],{"class":1283},[40,18220,18221],{"class":50}," m_id;\n",[40,18223,18224],{"class":42,"line":134},[40,18225,18226],{"class":997},"    \u002F\u002F赋值姓名\n",[40,18228,18229,18232,18235,18237,18240,18243],{"class":42,"line":146},[40,18230,18231],{"class":1283},"    void",[40,18233,18234],{"class":596}," setName",[40,18236,3488],{"class":50},[40,18238,18239],{"class":596},"string",[40,18241,18242],{"class":8539}," name",[40,18244,1811],{"class":50},[40,18246,18247],{"class":42,"line":154},[40,18248,5356],{"class":50},[40,18250,18251,18254,18256],{"class":42,"line":162},[40,18252,18253],{"class":50},"        m_name",[40,18255,1284],{"class":1283},[40,18257,18258],{"class":50},"name;\n",[40,18260,18261],{"class":42,"line":170},[40,18262,5513],{"class":50},[40,18264,18265],{"class":42,"line":183},[40,18266,18267],{"class":997},"    \u002F\u002F赋值学号\n",[40,18269,18270,18272,18275,18277,18279,18282],{"class":42,"line":196},[40,18271,18231],{"class":1283},[40,18273,18274],{"class":596}," setId",[40,18276,3488],{"class":50},[40,18278,3491],{"class":1283},[40,18280,18281],{"class":8539}," id",[40,18283,1811],{"class":50},[40,18285,18286],{"class":42,"line":204},[40,18287,5356],{"class":50},[40,18289,18290,18293,18295],{"class":42,"line":217},[40,18291,18292],{"class":50},"        m_id",[40,18294,1284],{"class":1283},[40,18296,18297],{"class":50},"id;\n",[40,18299,18300],{"class":42,"line":230},[40,18301,5513],{"class":50},[40,18303,18304],{"class":42,"line":238},[40,18305,18306],{"class":997},"    \u002F\u002F打印学生信息\n",[40,18308,18309,18311,18313],{"class":42,"line":251},[40,18310,18231],{"class":1283},[40,18312,12937],{"class":596},[40,18314,5302],{"class":50},[40,18316,18317],{"class":42,"line":264},[40,18318,5356],{"class":50},[40,18320,18321,18323,18325,18328,18330,18333,18335,18337,18339,18342,18344,18347,18349],{"class":42,"line":277},[40,18322,6775],{"class":50},[40,18324,4520],{"class":1283},[40,18326,18327],{"class":94},"\"姓名：\"",[40,18329,4520],{"class":1283},[40,18331,18332],{"class":50},"m_name",[40,18334,4520],{"class":1283},[40,18336,7682],{"class":94},[40,18338,4520],{"class":1283},[40,18340,18341],{"class":94},"\"学号：\"",[40,18343,4520],{"class":1283},[40,18345,18346],{"class":50},"m_id",[40,18348,4520],{"class":1283},[40,18350,4542],{"class":50},[40,18352,18353],{"class":42,"line":290},[40,18354,5513],{"class":50},[40,18356,18357],{"class":42,"line":298},[40,18358,7318],{"class":50},[40,18360,18361,18363,18365],{"class":42,"line":310},[40,18362,3491],{"class":1283},[40,18364,5299],{"class":596},[40,18366,5302],{"class":50},[40,18368,18369],{"class":42,"line":5086},[40,18370,4888],{"class":50},[40,18372,18373],{"class":42,"line":5091},[40,18374,18375],{"class":997},"    \u002F\u002F实例化\n",[40,18377,18378],{"class":42,"line":5105},[40,18379,18380],{"class":50},"    Student s1;\n",[40,18382,18383,18386,18389,18391,18393],{"class":42,"line":5110},[40,18384,18385],{"class":50},"    s1.",[40,18387,18388],{"class":596},"setName",[40,18390,3488],{"class":50},[40,18392,11238],{"class":94},[40,18394,6043],{"class":50},[40,18396,18397,18399,18402,18404,18407],{"class":42,"line":5902},[40,18398,18385],{"class":50},[40,18400,18401],{"class":596},"setId",[40,18403,3488],{"class":50},[40,18405,18406],{"class":63},"123456",[40,18408,6043],{"class":50},[40,18410,18411,18413,18416],{"class":42,"line":5916},[40,18412,18385],{"class":50},[40,18414,18415],{"class":596},"printInfo",[40,18417,8959],{"class":50},[40,18419,18420],{"class":42,"line":5924},[40,18421,4907],{"class":50},[19,18423,18424],{},"类中的属性和行为统称为成员",[19,18426,18427],{},"属性：成员属性(成员变量)",[19,18429,18430],{},"方法：成员函数(成员方法)",[19,18432,18433],{},[409,18434,18435],{},"封装意义二：",[19,18437,18438],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,18440,18441],{},"访问权限有三种：",[492,18443,18444,18447,18450],{},[495,18445,18446],{},"public        公共权限",[495,18448,18449],{},"protected 保护权限",[495,18451,18452],{},"private      私有权限",[19,18454,18455],{},[409,18456,18457],{},"示例：",[31,18459,18461],{"className":13263,"code":18460,"language":13265,"meta":36,"style":36},"\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",[26,18462,18463,18468,18473,18478,18483,18487,18494,18498,18503,18507,18512,18516,18521,18526,18531,18535,18540,18545,18552,18556,18560,18568,18572,18583,18595,18607,18611,18615,18619,18627,18631,18636,18648,18656,18664,18668,18678,18682,18690],{"__ignoreMap":36},[40,18464,18465],{"class":42,"line":43},[40,18466,18467],{"class":997},"\u002F\u002F三种权限\n",[40,18469,18470],{"class":42,"line":54},[40,18471,18472],{"class":997},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[40,18474,18475],{"class":42,"line":70},[40,18476,18477],{"class":997},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[40,18479,18480],{"class":42,"line":78},[40,18481,18482],{"class":997},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[40,18484,18485],{"class":42,"line":86},[40,18486,1413],{"emptyLinePlaceholder":1412},[40,18488,18489,18491],{"class":42,"line":100},[40,18490,18016],{"class":1283},[40,18492,18493],{"class":596}," Person\n",[40,18495,18496],{"class":42,"line":108},[40,18497,4888],{"class":50},[40,18499,18500],{"class":42,"line":121},[40,18501,18502],{"class":997},"    \u002F\u002F姓名  公共权限\n",[40,18504,18505],{"class":42,"line":134},[40,18506,18038],{"class":1283},[40,18508,18509],{"class":42,"line":146},[40,18510,18511],{"class":50},"    string m_Name;\n",[40,18513,18514],{"class":42,"line":154},[40,18515,1413],{"emptyLinePlaceholder":1412},[40,18517,18518],{"class":42,"line":162},[40,18519,18520],{"class":997},"    \u002F\u002F汽车  保护权限\n",[40,18522,18523],{"class":42,"line":170},[40,18524,18525],{"class":1283},"protected:\n",[40,18527,18528],{"class":42,"line":183},[40,18529,18530],{"class":50},"    string m_Car;\n",[40,18532,18533],{"class":42,"line":196},[40,18534,1413],{"emptyLinePlaceholder":1412},[40,18536,18537],{"class":42,"line":204},[40,18538,18539],{"class":997},"    \u002F\u002F银行卡密码  私有权限\n",[40,18541,18542],{"class":42,"line":217},[40,18543,18544],{"class":1283},"private:\n",[40,18546,18547,18549],{"class":42,"line":230},[40,18548,5311],{"class":1283},[40,18550,18551],{"class":50}," m_Password;\n",[40,18553,18554],{"class":42,"line":238},[40,18555,1413],{"emptyLinePlaceholder":1412},[40,18557,18558],{"class":42,"line":251},[40,18559,18038],{"class":1283},[40,18561,18562,18564,18566],{"class":42,"line":264},[40,18563,18231],{"class":1283},[40,18565,14707],{"class":596},[40,18567,5302],{"class":50},[40,18569,18570],{"class":42,"line":277},[40,18571,5356],{"class":50},[40,18573,18574,18577,18579,18581],{"class":42,"line":290},[40,18575,18576],{"class":50},"        m_Name ",[40,18578,1284],{"class":1283},[40,18580,12260],{"class":94},[40,18582,4637],{"class":50},[40,18584,18585,18588,18590,18593],{"class":42,"line":298},[40,18586,18587],{"class":50},"        m_Car ",[40,18589,1284],{"class":1283},[40,18591,18592],{"class":94}," \"拖拉机\"",[40,18594,4637],{"class":50},[40,18596,18597,18600,18602,18605],{"class":42,"line":310},[40,18598,18599],{"class":50},"        m_Password ",[40,18601,1284],{"class":1283},[40,18603,18604],{"class":63}," 123456",[40,18606,4637],{"class":50},[40,18608,18609],{"class":42,"line":5086},[40,18610,5513],{"class":50},[40,18612,18613],{"class":42,"line":5091},[40,18614,7318],{"class":50},[40,18616,18617],{"class":42,"line":5105},[40,18618,1413],{"emptyLinePlaceholder":1412},[40,18620,18621,18623,18625],{"class":42,"line":5110},[40,18622,3491],{"class":1283},[40,18624,5299],{"class":596},[40,18626,14175],{"class":50},[40,18628,18629],{"class":42,"line":5902},[40,18630,1413],{"emptyLinePlaceholder":1412},[40,18632,18633],{"class":42,"line":5916},[40,18634,18635],{"class":50},"    Person p;\n",[40,18637,18638,18641,18643,18646],{"class":42,"line":5924},[40,18639,18640],{"class":50},"    p.m_Name ",[40,18642,1284],{"class":1283},[40,18644,18645],{"class":94}," \"李四\"",[40,18647,4637],{"class":50},[40,18649,18650,18653],{"class":42,"line":5929},[40,18651,18652],{"class":997},"    \u002F\u002Fp.m_Car = \"奔驰\";",[40,18654,18655],{"class":997},"  \u002F\u002F保护权限类外访问不到\n",[40,18657,18658,18661],{"class":42,"line":5935},[40,18659,18660],{"class":997},"    \u002F\u002Fp.m_Password = 123;",[40,18662,18663],{"class":997}," \u002F\u002F私有权限类外访问不到\n",[40,18665,18666],{"class":42,"line":5941},[40,18667,1413],{"emptyLinePlaceholder":1412},[40,18669,18670,18672,18674,18676],{"class":42,"line":5946},[40,18671,5629],{"class":596},[40,18673,3488],{"class":50},[40,18675,5634],{"class":94},[40,18677,6043],{"class":50},[40,18679,18680],{"class":42,"line":11270},[40,18681,1413],{"emptyLinePlaceholder":1412},[40,18683,18684,18686,18688],{"class":42,"line":11294},[40,18685,7413],{"class":1283},[40,18687,7416],{"class":63},[40,18689,4637],{"class":50},[40,18691,18692],{"class":42,"line":11299},[40,18693,4907],{"class":50},[402,18695,18697],{"id":18696},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,18699,18700,18701,18704,18705],{},"在C++中 struct和class唯一的",[409,18702,18703],{},"区别","就在于 ",[409,18706,18707],{},"默认的访问权限不同",[19,18709,18710],{},"区别：",[1338,18712,18713,18716],{},[495,18714,18715],{},"struct 默认权限为公共",[495,18717,18718],{},"class   默认权限为私有",[31,18720,18722],{"className":13263,"code":18721,"language":13265,"meta":36,"style":36},"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",[26,18723,18724,18731,18735,18745,18749,18753,18760,18764,18774,18778,18782,18790,18794,18799,18813,18817,18822,18836,18840,18850,18854,18862],{"__ignoreMap":36},[40,18725,18726,18728],{"class":42,"line":43},[40,18727,18016],{"class":1283},[40,18729,18730],{"class":596}," C1\n",[40,18732,18733],{"class":42,"line":54},[40,18734,4888],{"class":50},[40,18736,18737,18739,18742],{"class":42,"line":70},[40,18738,5311],{"class":1283},[40,18740,18741],{"class":50},"  m_A;",[40,18743,18744],{"class":997}," \u002F\u002F默认是私有权限\n",[40,18746,18747],{"class":42,"line":78},[40,18748,7318],{"class":50},[40,18750,18751],{"class":42,"line":86},[40,18752,1413],{"emptyLinePlaceholder":1412},[40,18754,18755,18757],{"class":42,"line":100},[40,18756,11081],{"class":1283},[40,18758,18759],{"class":596}," C2\n",[40,18761,18762],{"class":42,"line":108},[40,18763,4888],{"class":50},[40,18765,18766,18768,18771],{"class":42,"line":121},[40,18767,5311],{"class":1283},[40,18769,18770],{"class":50}," m_A;",[40,18772,18773],{"class":997},"  \u002F\u002F默认是公共权限\n",[40,18775,18776],{"class":42,"line":134},[40,18777,7318],{"class":50},[40,18779,18780],{"class":42,"line":146},[40,18781,1413],{"emptyLinePlaceholder":1412},[40,18783,18784,18786,18788],{"class":42,"line":154},[40,18785,3491],{"class":1283},[40,18787,5299],{"class":596},[40,18789,14175],{"class":50},[40,18791,18792],{"class":42,"line":162},[40,18793,1413],{"emptyLinePlaceholder":1412},[40,18795,18796],{"class":42,"line":170},[40,18797,18798],{"class":50},"    C1 c1;\n",[40,18800,18801,18804,18806,18808,18810],{"class":42,"line":183},[40,18802,18803],{"class":50},"    c1.m_A ",[40,18805,1284],{"class":1283},[40,18807,5364],{"class":63},[40,18809,3540],{"class":50},[40,18811,18812],{"class":997}," \u002F\u002F错误，访问权限是私有\n",[40,18814,18815],{"class":42,"line":196},[40,18816,1413],{"emptyLinePlaceholder":1412},[40,18818,18819],{"class":42,"line":204},[40,18820,18821],{"class":50},"    C2 c2;\n",[40,18823,18824,18827,18829,18831,18833],{"class":42,"line":217},[40,18825,18826],{"class":50},"    c2.m_A ",[40,18828,1284],{"class":1283},[40,18830,5364],{"class":63},[40,18832,3540],{"class":50},[40,18834,18835],{"class":997}," \u002F\u002F正确，访问权限是公共\n",[40,18837,18838],{"class":42,"line":230},[40,18839,1413],{"emptyLinePlaceholder":1412},[40,18841,18842,18844,18846,18848],{"class":42,"line":238},[40,18843,5629],{"class":596},[40,18845,3488],{"class":50},[40,18847,5634],{"class":94},[40,18849,6043],{"class":50},[40,18851,18852],{"class":42,"line":251},[40,18853,1413],{"emptyLinePlaceholder":1412},[40,18855,18856,18858,18860],{"class":42,"line":264},[40,18857,7413],{"class":1283},[40,18859,7416],{"class":63},[40,18861,4637],{"class":50},[40,18863,18864],{"class":42,"line":277},[40,18865,4907],{"class":50},[402,18867,18869],{"id":18868},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,18871,18872],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,18874,18875],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,18877,18878],{},[409,18879,18457],{},[31,18881,18883],{"className":13263,"code":18882,"language":13265,"meta":36,"style":36},"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",[26,18884,18885,18895,18899,18903,18908,18922,18931,18935,18945,18949,18956,18960,18964,18968,18973,18982,18989,18993,18998,19014,19037,19050,19057,19061,19070,19074,19078,19083,19099,19109,19113,19117,19121,19129,19133,19143,19147,19155,19159,19163,19171,19175,19179,19184,19197,19220,19224,19229,19242,19264,19268,19273,19287,19295,19299,19309,19313,19321],{"__ignoreMap":36},[40,18886,18887,18889,18892],{"class":42,"line":43},[40,18888,18016],{"class":1283},[40,18890,18891],{"class":596}," Person",[40,18893,18894],{"class":50}," {\n",[40,18896,18897],{"class":42,"line":54},[40,18898,18038],{"class":1283},[40,18900,18901],{"class":42,"line":70},[40,18902,1413],{"emptyLinePlaceholder":1412},[40,18904,18905],{"class":42,"line":78},[40,18906,18907],{"class":997},"    \u002F\u002F姓名设置可读可写\n",[40,18909,18910,18912,18914,18916,18918,18920],{"class":42,"line":86},[40,18911,18231],{"class":1283},[40,18913,18234],{"class":596},[40,18915,3488],{"class":50},[40,18917,18239],{"class":596},[40,18919,18242],{"class":8539},[40,18921,15764],{"class":50},[40,18923,18924,18926,18928],{"class":42,"line":100},[40,18925,18576],{"class":50},[40,18927,1284],{"class":1283},[40,18929,18930],{"class":50}," name;\n",[40,18932,18933],{"class":42,"line":108},[40,18934,5513],{"class":50},[40,18936,18937,18940,18943],{"class":42,"line":121},[40,18938,18939],{"class":596},"    string",[40,18941,18942],{"class":596}," getName",[40,18944,5302],{"class":50},[40,18946,18947],{"class":42,"line":134},[40,18948,5356],{"class":50},[40,18950,18951,18953],{"class":42,"line":146},[40,18952,18074],{"class":1283},[40,18954,18955],{"class":50}," m_Name;\n",[40,18957,18958],{"class":42,"line":154},[40,18959,5513],{"class":50},[40,18961,18962],{"class":42,"line":162},[40,18963,1413],{"emptyLinePlaceholder":1412},[40,18965,18966],{"class":42,"line":170},[40,18967,1413],{"emptyLinePlaceholder":1412},[40,18969,18970],{"class":42,"line":183},[40,18971,18972],{"class":997},"    \u002F\u002F获取年龄 \n",[40,18974,18975,18977,18980],{"class":42,"line":196},[40,18976,5311],{"class":1283},[40,18978,18979],{"class":596}," getAge",[40,18981,14175],{"class":50},[40,18983,18984,18986],{"class":42,"line":204},[40,18985,18074],{"class":1283},[40,18987,18988],{"class":50}," m_Age;\n",[40,18990,18991],{"class":42,"line":217},[40,18992,5513],{"class":50},[40,18994,18995],{"class":42,"line":230},[40,18996,18997],{"class":997},"    \u002F\u002F设置年龄\n",[40,18999,19000,19002,19005,19007,19009,19012],{"class":42,"line":238},[40,19001,18231],{"class":1283},[40,19003,19004],{"class":596}," setAge",[40,19006,3488],{"class":50},[40,19008,3491],{"class":1283},[40,19010,19011],{"class":8539}," age",[40,19013,15764],{"class":50},[40,19015,19016,19018,19021,19023,19025,19027,19030,19032,19035],{"class":42,"line":251},[40,19017,5822],{"class":1283},[40,19019,19020],{"class":50}," (age ",[40,19022,4387],{"class":1283},[40,19024,7416],{"class":63},[40,19026,6579],{"class":1283},[40,19028,19029],{"class":50}," age ",[40,19031,4437],{"class":1283},[40,19033,19034],{"class":63}," 150",[40,19036,15764],{"class":50},[40,19038,19039,19041,19043,19046,19048],{"class":42,"line":264},[40,19040,13041],{"class":50},[40,19042,4520],{"class":1283},[40,19044,19045],{"class":94}," \"你个老妖精!\"",[40,19047,4787],{"class":1283},[40,19049,12162],{"class":50},[40,19051,19052,19055],{"class":42,"line":277},[40,19053,19054],{"class":1283},"            return",[40,19056,4637],{"class":50},[40,19058,19059],{"class":42,"line":290},[40,19060,5854],{"class":50},[40,19062,19063,19066,19068],{"class":42,"line":298},[40,19064,19065],{"class":50},"        m_Age ",[40,19067,1284],{"class":1283},[40,19069,11119],{"class":50},[40,19071,19072],{"class":42,"line":310},[40,19073,5513],{"class":50},[40,19075,19076],{"class":42,"line":5086},[40,19077,1413],{"emptyLinePlaceholder":1412},[40,19079,19080],{"class":42,"line":5091},[40,19081,19082],{"class":997},"    \u002F\u002F情人设置为只写\n",[40,19084,19085,19087,19090,19092,19094,19097],{"class":42,"line":5105},[40,19086,18231],{"class":1283},[40,19088,19089],{"class":596}," setLover",[40,19091,3488],{"class":50},[40,19093,18239],{"class":596},[40,19095,19096],{"class":8539}," lover",[40,19098,15764],{"class":50},[40,19100,19101,19104,19106],{"class":42,"line":5110},[40,19102,19103],{"class":50},"        m_Lover ",[40,19105,1284],{"class":1283},[40,19107,19108],{"class":50}," lover;\n",[40,19110,19111],{"class":42,"line":5902},[40,19112,5513],{"class":50},[40,19114,19115],{"class":42,"line":5916},[40,19116,1413],{"emptyLinePlaceholder":1412},[40,19118,19119],{"class":42,"line":5924},[40,19120,18544],{"class":1283},[40,19122,19123,19126],{"class":42,"line":5929},[40,19124,19125],{"class":50},"    string m_Name;",[40,19127,19128],{"class":997}," \u002F\u002F可读可写  姓名\n",[40,19130,19131],{"class":42,"line":5935},[40,19132,16532],{"class":50},[40,19134,19135,19137,19140],{"class":42,"line":5941},[40,19136,5311],{"class":1283},[40,19138,19139],{"class":50}," m_Age;",[40,19141,19142],{"class":997}," \u002F\u002F只读  年龄\n",[40,19144,19145],{"class":42,"line":5946},[40,19146,1413],{"emptyLinePlaceholder":1412},[40,19148,19149,19152],{"class":42,"line":11270},[40,19150,19151],{"class":50},"    string m_Lover;",[40,19153,19154],{"class":997}," \u002F\u002F只写  情人\n",[40,19156,19157],{"class":42,"line":11294},[40,19158,7318],{"class":50},[40,19160,19161],{"class":42,"line":11299},[40,19162,1413],{"emptyLinePlaceholder":1412},[40,19164,19165,19167,19169],{"class":42,"line":11305},[40,19166,3491],{"class":1283},[40,19168,5299],{"class":596},[40,19170,14175],{"class":50},[40,19172,19173],{"class":42,"line":11332},[40,19174,1413],{"emptyLinePlaceholder":1412},[40,19176,19177],{"class":42,"line":11337},[40,19178,18635],{"class":50},[40,19180,19181],{"class":42,"line":11343},[40,19182,19183],{"class":997},"    \u002F\u002F姓名设置\n",[40,19185,19186,19189,19191,19193,19195],{"class":42,"line":11355},[40,19187,19188],{"class":50},"    p.",[40,19190,18388],{"class":596},[40,19192,3488],{"class":50},[40,19194,11238],{"class":94},[40,19196,6043],{"class":50},[40,19198,19199,19201,19203,19206,19208,19211,19214,19216,19218],{"class":42,"line":11367},[40,19200,9852],{"class":50},[40,19202,4520],{"class":1283},[40,19204,19205],{"class":94}," \"姓名： \"",[40,19207,4787],{"class":1283},[40,19209,19210],{"class":50}," p.",[40,19212,19213],{"class":596},"getName",[40,19215,16372],{"class":50},[40,19217,4520],{"class":1283},[40,19219,12162],{"class":50},[40,19221,19222],{"class":42,"line":11379},[40,19223,1413],{"emptyLinePlaceholder":1412},[40,19225,19226],{"class":42,"line":13038},[40,19227,19228],{"class":997},"    \u002F\u002F年龄设置\n",[40,19230,19231,19233,19236,19238,19240],{"class":42,"line":13063},[40,19232,19188],{"class":50},[40,19234,19235],{"class":596},"setAge",[40,19237,3488],{"class":50},[40,19239,4134],{"class":63},[40,19241,6043],{"class":50},[40,19243,19244,19246,19248,19251,19253,19255,19258,19260,19262],{"class":42,"line":13086},[40,19245,9852],{"class":50},[40,19247,4520],{"class":1283},[40,19249,19250],{"class":94}," \"年龄： \"",[40,19252,4787],{"class":1283},[40,19254,19210],{"class":50},[40,19256,19257],{"class":596},"getAge",[40,19259,16372],{"class":50},[40,19261,4520],{"class":1283},[40,19263,12162],{"class":50},[40,19265,19266],{"class":42,"line":13110},[40,19267,1413],{"emptyLinePlaceholder":1412},[40,19269,19270],{"class":42,"line":13115},[40,19271,19272],{"class":997},"    \u002F\u002F情人设置\n",[40,19274,19275,19277,19280,19282,19285],{"class":42,"line":13120},[40,19276,19188],{"class":50},[40,19278,19279],{"class":596},"setLover",[40,19281,3488],{"class":50},[40,19283,19284],{"class":94},"\"苍井\"",[40,19286,6043],{"class":50},[40,19288,19289,19292],{"class":42,"line":13125},[40,19290,19291],{"class":997},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[40,19293,19294],{"class":997},"  \u002F\u002F只写属性，不可以读取\n",[40,19296,19297],{"class":42,"line":13134},[40,19298,1413],{"emptyLinePlaceholder":1412},[40,19300,19301,19303,19305,19307],{"class":42,"line":13139},[40,19302,5629],{"class":596},[40,19304,3488],{"class":50},[40,19306,5634],{"class":94},[40,19308,6043],{"class":50},[40,19310,19311],{"class":42,"line":13145},[40,19312,1413],{"emptyLinePlaceholder":1412},[40,19314,19315,19317,19319],{"class":42,"line":13166},[40,19316,7413],{"class":1283},[40,19318,7416],{"class":63},[40,19320,4637],{"class":50},[40,19322,19323],{"class":42,"line":13172},[40,19324,4907],{"class":50},[402,19326,19328],{"id":19327},"_814封装案例","8.1.4封装案例",[492,19330,19331],{},[495,19332,19333,19336],{},[409,19334,19335],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1338,19338,19339,19342],{},[495,19340,19341],{},"求出立方体的面积和体积",[495,19343,19344],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[31,19346,19348],{"className":3476,"code":19347,"language":3478,"meta":36,"style":36},"#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",[26,19349,19350,19356,19366,19373,19377,19381,19386,19416,19420,19430,19440,19450,19454,19463,19467,19503,19507,19516,19520,19536,19540,19545,19554,19558,19565,19569,19578,19582,19589,19593,19602,19606,19613,19617,19622,19639,19643,19689,19693,19702,19706,19710,19714,19723,19727,19731,19736,19740,19746,19752,19758,19762,19766,19771,19793,19797,19851,19855,19863,19867,19872,19877,19890,19897,19913,19924,19930,19953,19959,19982,19996,20016,20022,20033,20056,20078,20083,20089,20103,20116,20121,20135,20140,20146,20151,20165,20170,20175,20189,20201,20206,20219,20224,20229,20234,20247,20252],{"__ignoreMap":36},[40,19351,19352,19354],{"class":42,"line":43},[40,19353,5276],{"class":1283},[40,19355,5279],{"class":94},[40,19357,19358,19360,19362,19364],{"class":42,"line":54},[40,19359,5284],{"class":1283},[40,19361,5287],{"class":1283},[40,19363,5290],{"class":596},[40,19365,4637],{"class":50},[40,19367,19368,19370],{"class":42,"line":70},[40,19369,18016],{"class":1283},[40,19371,19372],{"class":596}," Cube\n",[40,19374,19375],{"class":42,"line":78},[40,19376,4888],{"class":50},[40,19378,19379],{"class":42,"line":86},[40,19380,18038],{"class":1283},[40,19382,19383],{"class":42,"line":100},[40,19384,19385],{"class":997},"    \u002F\u002F输入长宽高\n",[40,19387,19388,19390,19393,19395,19397,19400,19402,19404,19407,19409,19411,19414],{"class":42,"line":108},[40,19389,18231],{"class":1283},[40,19391,19392],{"class":596}," setLwh",[40,19394,3488],{"class":50},[40,19396,3491],{"class":1283},[40,19398,19399],{"class":8539}," l",[40,19401,1299],{"class":50},[40,19403,3491],{"class":1283},[40,19405,19406],{"class":8539}," w",[40,19408,1299],{"class":50},[40,19410,3491],{"class":1283},[40,19412,19413],{"class":8539}," h",[40,19415,1811],{"class":50},[40,19417,19418],{"class":42,"line":121},[40,19419,5356],{"class":50},[40,19421,19422,19425,19427],{"class":42,"line":134},[40,19423,19424],{"class":50},"        m_L",[40,19426,1284],{"class":1283},[40,19428,19429],{"class":50},"l;\n",[40,19431,19432,19435,19437],{"class":42,"line":146},[40,19433,19434],{"class":50},"        m_W",[40,19436,1284],{"class":1283},[40,19438,19439],{"class":50},"w;\n",[40,19441,19442,19445,19447],{"class":42,"line":154},[40,19443,19444],{"class":50},"        m_H",[40,19446,1284],{"class":1283},[40,19448,19449],{"class":50},"h;\n",[40,19451,19452],{"class":42,"line":162},[40,19453,5513],{"class":50},[40,19455,19456,19458,19461],{"class":42,"line":170},[40,19457,5311],{"class":1283},[40,19459,19460],{"class":596}," mianji",[40,19462,5302],{"class":50},[40,19464,19465],{"class":42,"line":183},[40,19466,5356],{"class":50},[40,19468,19469,19471,19473,19475,19478,19480,19483,19485,19488,19490,19493,19495,19498,19500],{"class":42,"line":196},[40,19470,18074],{"class":1283},[40,19472,18077],{"class":63},[40,19474,3934],{"class":1283},[40,19476,19477],{"class":50},"(m_L",[40,19479,3934],{"class":1283},[40,19481,19482],{"class":50},"m_W ",[40,19484,3960],{"class":1283},[40,19486,19487],{"class":50}," m_L",[40,19489,3934],{"class":1283},[40,19491,19492],{"class":50},"m_H ",[40,19494,3960],{"class":1283},[40,19496,19497],{"class":50}," m_W",[40,19499,3934],{"class":1283},[40,19501,19502],{"class":50},"m_H);\n",[40,19504,19505],{"class":42,"line":204},[40,19506,5513],{"class":50},[40,19508,19509,19511,19514],{"class":42,"line":217},[40,19510,5311],{"class":1283},[40,19512,19513],{"class":596}," tiji",[40,19515,5302],{"class":50},[40,19517,19518],{"class":42,"line":230},[40,19519,5356],{"class":50},[40,19521,19522,19524,19526,19528,19531,19533],{"class":42,"line":238},[40,19523,18074],{"class":1283},[40,19525,19487],{"class":50},[40,19527,3934],{"class":1283},[40,19529,19530],{"class":50},"m_W",[40,19532,3934],{"class":1283},[40,19534,19535],{"class":50},"m_H;\n",[40,19537,19538],{"class":42,"line":251},[40,19539,5513],{"class":50},[40,19541,19542],{"class":42,"line":264},[40,19543,19544],{"class":997},"    \u002F\u002F获取长宽高\n",[40,19546,19547,19549,19552],{"class":42,"line":277},[40,19548,5311],{"class":1283},[40,19550,19551],{"class":596}," getLength",[40,19553,5302],{"class":50},[40,19555,19556],{"class":42,"line":290},[40,19557,5356],{"class":50},[40,19559,19560,19562],{"class":42,"line":298},[40,19561,18074],{"class":1283},[40,19563,19564],{"class":50}," m_L;\n",[40,19566,19567],{"class":42,"line":310},[40,19568,5513],{"class":50},[40,19570,19571,19573,19576],{"class":42,"line":5086},[40,19572,5311],{"class":1283},[40,19574,19575],{"class":596}," getWidth",[40,19577,5302],{"class":50},[40,19579,19580],{"class":42,"line":5091},[40,19581,5356],{"class":50},[40,19583,19584,19586],{"class":42,"line":5105},[40,19585,18074],{"class":1283},[40,19587,19588],{"class":50}," m_W;\n",[40,19590,19591],{"class":42,"line":5110},[40,19592,5513],{"class":50},[40,19594,19595,19597,19600],{"class":42,"line":5902},[40,19596,5311],{"class":1283},[40,19598,19599],{"class":596}," getHeight",[40,19601,5302],{"class":50},[40,19603,19604],{"class":42,"line":5916},[40,19605,5356],{"class":50},[40,19607,19608,19610],{"class":42,"line":5924},[40,19609,18074],{"class":1283},[40,19611,19612],{"class":50}," m_H;\n",[40,19614,19615],{"class":42,"line":5929},[40,19616,5513],{"class":50},[40,19618,19619],{"class":42,"line":5935},[40,19620,19621],{"class":997},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[40,19623,19624,19627,19630,19632,19635,19637],{"class":42,"line":5941},[40,19625,19626],{"class":1283},"    bool",[40,19628,19629],{"class":596}," isEqual",[40,19631,3488],{"class":50},[40,19633,19634],{"class":596},"Cube",[40,19636,6173],{"class":8539},[40,19638,1811],{"class":50},[40,19640,19641],{"class":42,"line":5946},[40,19642,5356],{"class":50},[40,19644,19645,19647,19650,19653,19655,19657,19660,19662,19665,19668,19670,19672,19675,19677,19679,19682,19684,19686],{"class":42,"line":11270},[40,19646,5822],{"class":1283},[40,19648,19649],{"class":50}," (c.",[40,19651,19652],{"class":596},"getLength",[40,19654,16372],{"class":50},[40,19656,6273],{"class":1283},[40,19658,19659],{"class":50}," m_L ",[40,19661,5046],{"class":1283},[40,19663,19664],{"class":50}," c.",[40,19666,19667],{"class":596},"getWidth",[40,19669,16372],{"class":50},[40,19671,6273],{"class":1283},[40,19673,19674],{"class":50}," m_W ",[40,19676,5046],{"class":1283},[40,19678,19664],{"class":50},[40,19680,19681],{"class":596},"getHeight",[40,19683,16372],{"class":50},[40,19685,6273],{"class":1283},[40,19687,19688],{"class":50}," m_H)\n",[40,19690,19691],{"class":42,"line":11294},[40,19692,5835],{"class":50},[40,19694,19695,19697,19700],{"class":42,"line":11299},[40,19696,19054],{"class":1283},[40,19698,19699],{"class":63}," true",[40,19701,4637],{"class":50},[40,19703,19704],{"class":42,"line":11305},[40,19705,5854],{"class":50},[40,19707,19708],{"class":42,"line":11332},[40,19709,5895],{"class":1283},[40,19711,19712],{"class":42,"line":11337},[40,19713,5835],{"class":50},[40,19715,19716,19718,19721],{"class":42,"line":11343},[40,19717,19054],{"class":1283},[40,19719,19720],{"class":63}," false",[40,19722,4637],{"class":50},[40,19724,19725],{"class":42,"line":11355},[40,19726,5854],{"class":50},[40,19728,19729],{"class":42,"line":11367},[40,19730,5513],{"class":50},[40,19732,19733],{"class":42,"line":11379},[40,19734,19735],{"class":997},"    \u002F\u002F私有属性\n",[40,19737,19738],{"class":42,"line":13038},[40,19739,18544],{"class":1283},[40,19741,19742,19744],{"class":42,"line":13063},[40,19743,5311],{"class":1283},[40,19745,19564],{"class":50},[40,19747,19748,19750],{"class":42,"line":13086},[40,19749,5311],{"class":1283},[40,19751,19588],{"class":50},[40,19753,19754,19756],{"class":42,"line":13110},[40,19755,5311],{"class":1283},[40,19757,19612],{"class":50},[40,19759,19760],{"class":42,"line":13115},[40,19761,1413],{"emptyLinePlaceholder":1412},[40,19763,19764],{"class":42,"line":13120},[40,19765,7318],{"class":50},[40,19767,19768],{"class":42,"line":13125},[40,19769,19770],{"class":997},"\u002F\u002F全局函数判断两个立方体是否相等\n",[40,19772,19773,19775,19777,19779,19781,19784,19786,19788,19791],{"class":42,"line":13134},[40,19774,4698],{"class":1283},[40,19776,19629],{"class":596},[40,19778,3488],{"class":50},[40,19780,19634],{"class":596},[40,19782,19783],{"class":8539}," c1",[40,19785,1299],{"class":50},[40,19787,19634],{"class":596},[40,19789,19790],{"class":8539}," c2",[40,19792,1811],{"class":50},[40,19794,19795],{"class":42,"line":13139},[40,19796,4888],{"class":50},[40,19798,19799,19801,19804,19806,19808,19810,19813,19815,19818,19820,19822,19824,19826,19828,19830,19832,19834,19836,19838,19840,19842,19844,19846,19848],{"class":42,"line":13145},[40,19800,7413],{"class":1283},[40,19802,19803],{"class":50}," (c1.",[40,19805,19652],{"class":596},[40,19807,16372],{"class":50},[40,19809,6273],{"class":1283},[40,19811,19812],{"class":50}," c2.",[40,19814,19652],{"class":596},[40,19816,19817],{"class":50},"()) ",[40,19819,5046],{"class":1283},[40,19821,19803],{"class":50},[40,19823,19667],{"class":596},[40,19825,16372],{"class":50},[40,19827,6273],{"class":1283},[40,19829,19812],{"class":50},[40,19831,19667],{"class":596},[40,19833,19817],{"class":50},[40,19835,5046],{"class":1283},[40,19837,19803],{"class":50},[40,19839,19681],{"class":596},[40,19841,16372],{"class":50},[40,19843,6273],{"class":1283},[40,19845,19812],{"class":50},[40,19847,19681],{"class":596},[40,19849,19850],{"class":50},"());\n",[40,19852,19853],{"class":42,"line":13166},[40,19854,4907],{"class":50},[40,19856,19857,19859,19861],{"class":42,"line":13172},[40,19858,3491],{"class":1283},[40,19860,5299],{"class":596},[40,19862,5302],{"class":50},[40,19864,19865],{"class":42,"line":13186},[40,19866,4888],{"class":50},[40,19868,19869],{"class":42,"line":13192},[40,19870,19871],{"class":50},"    Cube c1;\n",[40,19873,19874],{"class":42,"line":13219},[40,19875,19876],{"class":997},"    \u002F\u002F输入立方体的长宽高\n",[40,19878,19879,19881,19883,19886,19888],{"class":42,"line":13228},[40,19880,4893],{"class":50},[40,19882,4520],{"class":1283},[40,19884,19885],{"class":94},"\"请输入第一个立方体的长、宽、高：\"",[40,19887,4520],{"class":1283},[40,19889,4542],{"class":50},[40,19891,19892,19894],{"class":42,"line":13234},[40,19893,5311],{"class":1283},[40,19895,19896],{"class":50}," l,w,h,l1,w1,h1;\n",[40,19898,19899,19901,19903,19905,19907,19909,19911],{"class":42,"line":13242},[40,19900,5338],{"class":50},[40,19902,4772],{"class":1283},[40,19904,3997],{"class":50},[40,19906,4772],{"class":1283},[40,19908,2784],{"class":50},[40,19910,4772],{"class":1283},[40,19912,19449],{"class":50},[40,19914,19915,19918,19921],{"class":42,"line":13247},[40,19916,19917],{"class":50},"    c1.",[40,19919,19920],{"class":596},"setLwh",[40,19922,19923],{"class":50},"(l,w,h);\n",[40,19925,19927],{"class":42,"line":19926},66,[40,19928,19929],{"class":997},"    \u002F\u002F面积\n",[40,19931,19933,19935,19937,19940,19942,19944,19947,19949,19951],{"class":42,"line":19932},67,[40,19934,4893],{"class":50},[40,19936,4520],{"class":1283},[40,19938,19939],{"class":94},"\"立方体的表面积为：\"",[40,19941,4520],{"class":1283},[40,19943,18152],{"class":50},[40,19945,19946],{"class":596},"mianji",[40,19948,5752],{"class":50},[40,19950,4520],{"class":1283},[40,19952,4542],{"class":50},[40,19954,19956],{"class":42,"line":19955},68,[40,19957,19958],{"class":997},"    \u002F\u002F体积\n",[40,19960,19962,19964,19966,19969,19971,19973,19976,19978,19980],{"class":42,"line":19961},69,[40,19963,4893],{"class":50},[40,19965,4520],{"class":1283},[40,19967,19968],{"class":94},"\"立方体的体积为：\"",[40,19970,4520],{"class":1283},[40,19972,18152],{"class":50},[40,19974,19975],{"class":596},"tiji",[40,19977,5752],{"class":50},[40,19979,4520],{"class":1283},[40,19981,4542],{"class":50},[40,19983,19985,19987,19989,19992,19994],{"class":42,"line":19984},70,[40,19986,4893],{"class":50},[40,19988,4520],{"class":1283},[40,19990,19991],{"class":94},"\"请输入第二个立方体的长、宽、高：\"",[40,19993,4520],{"class":1283},[40,19995,4542],{"class":50},[40,19997,19999,20001,20003,20006,20008,20011,20013],{"class":42,"line":19998},71,[40,20000,5338],{"class":50},[40,20002,4772],{"class":1283},[40,20004,20005],{"class":50},"l1",[40,20007,4772],{"class":1283},[40,20009,20010],{"class":50},"w1",[40,20012,4772],{"class":1283},[40,20014,20015],{"class":50},"h1;\n",[40,20017,20019],{"class":42,"line":20018},72,[40,20020,20021],{"class":50},"    Cube c2;\n",[40,20023,20025,20028,20030],{"class":42,"line":20024},73,[40,20026,20027],{"class":50},"    c2.",[40,20029,19920],{"class":596},[40,20031,20032],{"class":50},"(l1,w1,h1);\n",[40,20034,20036,20038,20040,20043,20045,20048,20050,20052,20054],{"class":42,"line":20035},74,[40,20037,4893],{"class":50},[40,20039,4520],{"class":1283},[40,20041,20042],{"class":94},"\"第二个立方体的表面积为：\"",[40,20044,4520],{"class":1283},[40,20046,20047],{"class":50},"c2.",[40,20049,19946],{"class":596},[40,20051,5752],{"class":50},[40,20053,4520],{"class":1283},[40,20055,4542],{"class":50},[40,20057,20059,20061,20063,20066,20068,20070,20072,20074,20076],{"class":42,"line":20058},75,[40,20060,4893],{"class":50},[40,20062,4520],{"class":1283},[40,20064,20065],{"class":94},"\"第二个立方体的体积为：\"",[40,20067,4520],{"class":1283},[40,20069,20047],{"class":50},[40,20071,19975],{"class":596},[40,20073,5752],{"class":50},[40,20075,4520],{"class":1283},[40,20077,4542],{"class":50},[40,20079,20081],{"class":42,"line":20080},76,[40,20082,1413],{"emptyLinePlaceholder":1412},[40,20084,20086],{"class":42,"line":20085},77,[40,20087,20088],{"class":997},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[40,20090,20092,20094,20096,20099,20101],{"class":42,"line":20091},78,[40,20093,4893],{"class":50},[40,20095,4520],{"class":1283},[40,20097,20098],{"class":94},"\"内部函数判断结果：\"",[40,20100,4520],{"class":1283},[40,20102,4542],{"class":50},[40,20104,20106,20108,20110,20113],{"class":42,"line":20105},79,[40,20107,6425],{"class":1283},[40,20109,19803],{"class":50},[40,20111,20112],{"class":596},"isEqual",[40,20114,20115],{"class":50},"(c2))\n",[40,20117,20119],{"class":42,"line":20118},80,[40,20120,5356],{"class":50},[40,20122,20124,20126,20128,20131,20133],{"class":42,"line":20123},81,[40,20125,6775],{"class":50},[40,20127,4520],{"class":1283},[40,20129,20130],{"class":94},"\"两个立方体相等\"",[40,20132,4520],{"class":1283},[40,20134,4542],{"class":50},[40,20136,20138],{"class":42,"line":20137},82,[40,20139,5513],{"class":50},[40,20141,20143],{"class":42,"line":20142},83,[40,20144,20145],{"class":1283},"    else\n",[40,20147,20149],{"class":42,"line":20148},84,[40,20150,5356],{"class":50},[40,20152,20154,20156,20158,20161,20163],{"class":42,"line":20153},85,[40,20155,6775],{"class":50},[40,20157,4520],{"class":1283},[40,20159,20160],{"class":94},"\"两个立方体不相等\"",[40,20162,4520],{"class":1283},[40,20164,4542],{"class":50},[40,20166,20168],{"class":42,"line":20167},86,[40,20169,5513],{"class":50},[40,20171,20173],{"class":42,"line":20172},87,[40,20174,1413],{"emptyLinePlaceholder":1412},[40,20176,20178,20180,20182,20185,20187],{"class":42,"line":20177},88,[40,20179,4893],{"class":50},[40,20181,4520],{"class":1283},[40,20183,20184],{"class":94},"\"全局函数判断结果：\"",[40,20186,4520],{"class":1283},[40,20188,4542],{"class":50},[40,20190,20192,20194,20196,20198],{"class":42,"line":20191},89,[40,20193,6425],{"class":1283},[40,20195,4993],{"class":50},[40,20197,20112],{"class":596},[40,20199,20200],{"class":50},"(c1, c2))\n",[40,20202,20204],{"class":42,"line":20203},90,[40,20205,5356],{"class":50},[40,20207,20209,20211,20213,20215,20217],{"class":42,"line":20208},91,[40,20210,6775],{"class":50},[40,20212,4520],{"class":1283},[40,20214,20130],{"class":94},[40,20216,4520],{"class":1283},[40,20218,4542],{"class":50},[40,20220,20222],{"class":42,"line":20221},92,[40,20223,5513],{"class":50},[40,20225,20227],{"class":42,"line":20226},93,[40,20228,20145],{"class":1283},[40,20230,20232],{"class":42,"line":20231},94,[40,20233,5356],{"class":50},[40,20235,20237,20239,20241,20243,20245],{"class":42,"line":20236},95,[40,20238,6775],{"class":50},[40,20240,4520],{"class":1283},[40,20242,20160],{"class":94},[40,20244,4520],{"class":1283},[40,20246,4542],{"class":50},[40,20248,20250],{"class":42,"line":20249},96,[40,20251,5513],{"class":50},[40,20253,20255],{"class":42,"line":20254},97,[40,20256,4907],{"class":50},[492,20258,20259],{"start":54},[495,20260,20261],{},[409,20262,20263],{},"练习案例2：点和圆的关系",[1338,20265,20266],{},[495,20267,20268],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[31,20270,20272],{"className":3476,"code":20271,"language":3478,"meta":36,"style":36},"#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",[26,20273,20274,20280,20290,20297,20304,20308,20312,20317,20351,20356,20372,20386,20390,20394,20401,20408,20412,20418,20422,20426,20430,20452,20475,20480,20494,20509,20513,20517,20523,20528,20533,20537,20563,20567,20597,20625,20653,20670,20674,20687,20691,20695,20699,20712,20716,20720,20728,20732,20736,20740,20745,20749,20760,20767,20776,20786,20797,20804,20817,20828,20838,20849,20856,20870,20875,20885,20893],{"__ignoreMap":36},[40,20275,20276,20278],{"class":42,"line":43},[40,20277,5276],{"class":1283},[40,20279,5279],{"class":94},[40,20281,20282,20284,20286,20288],{"class":42,"line":54},[40,20283,5284],{"class":1283},[40,20285,5287],{"class":1283},[40,20287,5290],{"class":596},[40,20289,4637],{"class":50},[40,20291,20292,20294],{"class":42,"line":70},[40,20293,5276],{"class":1283},[40,20295,20296],{"class":94},"\u003Ccmath>\n",[40,20298,20299,20301],{"class":42,"line":78},[40,20300,18016],{"class":1283},[40,20302,20303],{"class":596}," Point\n",[40,20305,20306],{"class":42,"line":86},[40,20307,4888],{"class":50},[40,20309,20310],{"class":42,"line":100},[40,20311,18038],{"class":1283},[40,20313,20314],{"class":42,"line":108},[40,20315,20316],{"class":997},"    \u002F\u002F赋值\n",[40,20318,20319,20321,20324,20326,20328,20331,20333,20335,20338,20341,20343,20346,20348],{"class":42,"line":121},[40,20320,18231],{"class":1283},[40,20322,20323],{"class":596}," setPoint",[40,20325,3488],{"class":50},[40,20327,17359],{"class":1283},[40,20329,20330],{"class":8539}," x",[40,20332,15757],{"class":50},[40,20334,17359],{"class":1283},[40,20336,20337],{"class":8539}," y",[40,20339,20340],{"class":50},") { m_x ",[40,20342,1284],{"class":1283},[40,20344,20345],{"class":50}," x; m_y ",[40,20347,1284],{"class":1283},[40,20349,20350],{"class":50}," y; }\n",[40,20352,20353],{"class":42,"line":134},[40,20354,20355],{"class":997},"    \u002F\u002F获取坐标\n",[40,20357,20358,20360,20363,20366,20369],{"class":42,"line":146},[40,20359,18060],{"class":1283},[40,20361,20362],{"class":596}," getX",[40,20364,20365],{"class":50},"() { ",[40,20367,20368],{"class":1283},"return",[40,20370,20371],{"class":50}," m_x; }\n",[40,20373,20374,20376,20379,20381,20383],{"class":42,"line":154},[40,20375,18060],{"class":1283},[40,20377,20378],{"class":596}," getY",[40,20380,20365],{"class":50},[40,20382,20368],{"class":1283},[40,20384,20385],{"class":50}," m_y; }\n",[40,20387,20388],{"class":42,"line":162},[40,20389,1413],{"emptyLinePlaceholder":1412},[40,20391,20392],{"class":42,"line":170},[40,20393,18544],{"class":1283},[40,20395,20396,20398],{"class":42,"line":183},[40,20397,18060],{"class":1283},[40,20399,20400],{"class":50}," m_x;\n",[40,20402,20403,20405],{"class":42,"line":196},[40,20404,18060],{"class":1283},[40,20406,20407],{"class":50}," m_y;\n",[40,20409,20410],{"class":42,"line":204},[40,20411,7318],{"class":50},[40,20413,20414,20416],{"class":42,"line":217},[40,20415,18016],{"class":1283},[40,20417,18019],{"class":596},[40,20419,20420],{"class":42,"line":230},[40,20421,4888],{"class":50},[40,20423,20424],{"class":42,"line":238},[40,20425,18038],{"class":1283},[40,20427,20428],{"class":42,"line":251},[40,20429,20316],{"class":997},[40,20431,20432,20434,20437,20439,20441,20444,20447,20449],{"class":42,"line":264},[40,20433,18231],{"class":1283},[40,20435,20436],{"class":596}," setRadius",[40,20438,3488],{"class":50},[40,20440,17359],{"class":1283},[40,20442,20443],{"class":8539}," r",[40,20445,20446],{"class":50},") { m_r ",[40,20448,1284],{"class":1283},[40,20450,20451],{"class":50}," r; }\n",[40,20453,20454,20456,20459,20461,20464,20467,20470,20472],{"class":42,"line":277},[40,20455,18231],{"class":1283},[40,20457,20458],{"class":596}," setCenter",[40,20460,3488],{"class":50},[40,20462,20463],{"class":596},"Point",[40,20465,20466],{"class":8539}," center",[40,20468,20469],{"class":50},") { m_center ",[40,20471,1284],{"class":1283},[40,20473,20474],{"class":50}," center; }\n",[40,20476,20477],{"class":42,"line":290},[40,20478,20479],{"class":997},"    \u002F\u002F获取属性\n",[40,20481,20482,20484,20487,20489,20491],{"class":42,"line":298},[40,20483,18060],{"class":1283},[40,20485,20486],{"class":596}," getRadius",[40,20488,20365],{"class":50},[40,20490,20368],{"class":1283},[40,20492,20493],{"class":50}," m_r; }\n",[40,20495,20496,20499,20502,20504,20506],{"class":42,"line":310},[40,20497,20498],{"class":596},"    Point",[40,20500,20501],{"class":596}," getCenter",[40,20503,20365],{"class":50},[40,20505,20368],{"class":1283},[40,20507,20508],{"class":50}," m_center; }\n",[40,20510,20511],{"class":42,"line":5086},[40,20512,1413],{"emptyLinePlaceholder":1412},[40,20514,20515],{"class":42,"line":5091},[40,20516,18544],{"class":1283},[40,20518,20519,20521],{"class":42,"line":5105},[40,20520,18060],{"class":1283},[40,20522,18050],{"class":50},[40,20524,20525],{"class":42,"line":5110},[40,20526,20527],{"class":997},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[40,20529,20530],{"class":42,"line":5902},[40,20531,20532],{"class":50},"    Point m_center;\n",[40,20534,20535],{"class":42,"line":5916},[40,20536,7318],{"class":50},[40,20538,20539,20541,20544,20546,20549,20551,20553,20555,20557,20559,20561],{"class":42,"line":5924},[40,20540,8687],{"class":1283},[40,20542,20543],{"class":596}," isInCircle",[40,20545,3488],{"class":50},[40,20547,20548],{"class":596},"Circle",[40,20550,13906],{"class":1283},[40,20552,3768],{"class":8539},[40,20554,1299],{"class":50},[40,20556,20463],{"class":596},[40,20558,13906],{"class":1283},[40,20560,19],{"class":8539},[40,20562,1811],{"class":50},[40,20564,20565],{"class":42,"line":5929},[40,20566,4888],{"class":50},[40,20568,20569,20571,20574,20576,20578,20581,20584,20587,20589,20591,20593,20595],{"class":42,"line":5935},[40,20570,18060],{"class":1283},[40,20572,20573],{"class":50}," dx ",[40,20575,1284],{"class":1283},[40,20577,19664],{"class":50},[40,20579,20580],{"class":596},"getCenter",[40,20582,20583],{"class":50},"().",[40,20585,20586],{"class":596},"getX",[40,20588,16372],{"class":50},[40,20590,4011],{"class":1283},[40,20592,19210],{"class":50},[40,20594,20586],{"class":596},[40,20596,8959],{"class":50},[40,20598,20599,20601,20604,20606,20608,20610,20612,20615,20617,20619,20621,20623],{"class":42,"line":5941},[40,20600,18060],{"class":1283},[40,20602,20603],{"class":50}," dy ",[40,20605,1284],{"class":1283},[40,20607,19664],{"class":50},[40,20609,20580],{"class":596},[40,20611,20583],{"class":50},[40,20613,20614],{"class":596},"getY",[40,20616,16372],{"class":50},[40,20618,4011],{"class":1283},[40,20620,19210],{"class":50},[40,20622,20614],{"class":596},[40,20624,8959],{"class":50},[40,20626,20627,20629,20632,20634,20637,20640,20642,20644,20646,20648,20650],{"class":42,"line":5946},[40,20628,18060],{"class":1283},[40,20630,20631],{"class":50}," distance ",[40,20633,1284],{"class":1283},[40,20635,20636],{"class":596}," sqrt",[40,20638,20639],{"class":50},"(dx ",[40,20641,3934],{"class":1283},[40,20643,20573],{"class":50},[40,20645,3960],{"class":1283},[40,20647,20603],{"class":50},[40,20649,3934],{"class":1283},[40,20651,20652],{"class":50}," dy);\n",[40,20654,20655,20657,20660,20662,20664,20667],{"class":42,"line":11270},[40,20656,6425],{"class":1283},[40,20658,20659],{"class":50}," (distance ",[40,20661,4387],{"class":1283},[40,20663,19664],{"class":50},[40,20665,20666],{"class":596},"getRadius",[40,20668,20669],{"class":50},"())\n",[40,20671,20672],{"class":42,"line":11294},[40,20673,5356],{"class":50},[40,20675,20676,20678,20680,20683,20685],{"class":42,"line":11299},[40,20677,12991],{"class":50},[40,20679,4520],{"class":1283},[40,20681,20682],{"class":94}," \"点在圆内\"",[40,20684,4787],{"class":1283},[40,20686,12162],{"class":50},[40,20688,20689],{"class":42,"line":11305},[40,20690,5513],{"class":50},[40,20692,20693],{"class":42,"line":11332},[40,20694,20145],{"class":1283},[40,20696,20697],{"class":42,"line":11337},[40,20698,5356],{"class":50},[40,20700,20701,20703,20705,20708,20710],{"class":42,"line":11343},[40,20702,12991],{"class":50},[40,20704,4520],{"class":1283},[40,20706,20707],{"class":94}," \"点在圆外\"",[40,20709,4787],{"class":1283},[40,20711,12162],{"class":50},[40,20713,20714],{"class":42,"line":11355},[40,20715,5513],{"class":50},[40,20717,20718],{"class":42,"line":11367},[40,20719,4907],{"class":50},[40,20721,20722,20724,20726],{"class":42,"line":11379},[40,20723,3491],{"class":1283},[40,20725,5299],{"class":596},[40,20727,5302],{"class":50},[40,20729,20730],{"class":42,"line":13038},[40,20731,4888],{"class":50},[40,20733,20734],{"class":42,"line":13063},[40,20735,18375],{"class":997},[40,20737,20738],{"class":42,"line":13086},[40,20739,18122],{"class":50},[40,20741,20742],{"class":42,"line":13110},[40,20743,20744],{"class":50},"    Point p1;\n",[40,20746,20747],{"class":42,"line":13115},[40,20748,20316],{"class":997},[40,20750,20751,20753,20755,20758],{"class":42,"line":13120},[40,20752,4893],{"class":50},[40,20754,4520],{"class":1283},[40,20756,20757],{"class":94},"\"请输入圆的半径：\"",[40,20759,4637],{"class":50},[40,20761,20762,20764],{"class":42,"line":13125},[40,20763,18060],{"class":1283},[40,20765,20766],{"class":50}," r;\n",[40,20768,20769,20771,20773],{"class":42,"line":13134},[40,20770,5338],{"class":50},[40,20772,4772],{"class":1283},[40,20774,20775],{"class":50},"r;\n",[40,20777,20778,20780,20783],{"class":42,"line":13139},[40,20779,19917],{"class":50},[40,20781,20782],{"class":596},"setRadius",[40,20784,20785],{"class":50},"(r);\n",[40,20787,20788,20790,20792,20795],{"class":42,"line":13145},[40,20789,4893],{"class":50},[40,20791,4520],{"class":1283},[40,20793,20794],{"class":94},"\"请输入圆心坐标：\"",[40,20796,4637],{"class":50},[40,20798,20799,20801],{"class":42,"line":13166},[40,20800,18060],{"class":1283},[40,20802,20803],{"class":50}," x, y;\n",[40,20805,20806,20808,20810,20812,20814],{"class":42,"line":13172},[40,20807,5338],{"class":50},[40,20809,4772],{"class":1283},[40,20811,4297],{"class":50},[40,20813,4772],{"class":1283},[40,20815,20816],{"class":50},"y;\n",[40,20818,20819,20822,20825],{"class":42,"line":13186},[40,20820,20821],{"class":50},"    p1.",[40,20823,20824],{"class":596},"setPoint",[40,20826,20827],{"class":50},"(x, y);\n",[40,20829,20830,20832,20835],{"class":42,"line":13192},[40,20831,19917],{"class":50},[40,20833,20834],{"class":596},"setCenter",[40,20836,20837],{"class":50},"(p1);\n",[40,20839,20840,20842,20844,20847],{"class":42,"line":13219},[40,20841,4893],{"class":50},[40,20843,4520],{"class":1283},[40,20845,20846],{"class":94},"\"请输入测试点坐标：\"",[40,20848,4637],{"class":50},[40,20850,20851,20853],{"class":42,"line":13228},[40,20852,18060],{"class":1283},[40,20854,20855],{"class":50}," x1, y1;\n",[40,20857,20858,20860,20862,20865,20867],{"class":42,"line":13234},[40,20859,5338],{"class":50},[40,20861,4772],{"class":1283},[40,20863,20864],{"class":50},"x1",[40,20866,4772],{"class":1283},[40,20868,20869],{"class":50},"y1;\n",[40,20871,20872],{"class":42,"line":13242},[40,20873,20874],{"class":50},"    Point p2;\n",[40,20876,20877,20880,20882],{"class":42,"line":13247},[40,20878,20879],{"class":50},"    p2.",[40,20881,20824],{"class":596},[40,20883,20884],{"class":50},"(x1, y1);\n",[40,20886,20887,20890],{"class":42,"line":19926},[40,20888,20889],{"class":596},"    isInCircle",[40,20891,20892],{"class":50},"(c1, p2);\n",[40,20894,20895],{"class":42,"line":19932},[40,20896,4907],{"class":50},[19,20898,20899],{},"在类中可以让另一个类作为本来的成员",[19,20901,20902],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,20904,20905],{},"创建point.h",[31,20907,20909],{"className":3476,"code":20908,"language":3478,"meta":36,"style":36},"#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",[26,20910,20911,20922,20928,20938,20944,20948,20953,20957,20961,20981,20985,20993,21001,21005,21009,21015,21021],{"__ignoreMap":36},[40,20912,20913,20916,20919],{"class":42,"line":43},[40,20914,20915],{"class":1283},"#pragma",[40,20917,20918],{"class":596}," once",[40,20920,20921],{"class":997}," \u002F\u002F防止头文件重复包含\n",[40,20923,20924,20926],{"class":42,"line":54},[40,20925,5276],{"class":1283},[40,20927,5279],{"class":94},[40,20929,20930,20932,20934,20936],{"class":42,"line":70},[40,20931,5284],{"class":1283},[40,20933,5287],{"class":1283},[40,20935,5290],{"class":596},[40,20937,4637],{"class":50},[40,20939,20940,20942],{"class":42,"line":78},[40,20941,18016],{"class":1283},[40,20943,20303],{"class":596},[40,20945,20946],{"class":42,"line":86},[40,20947,4888],{"class":50},[40,20949,20950],{"class":42,"line":100},[40,20951,20952],{"class":997},"\u002F\u002F做好声明与变量定义就可以\n",[40,20954,20955],{"class":42,"line":108},[40,20956,18038],{"class":1283},[40,20958,20959],{"class":42,"line":121},[40,20960,20316],{"class":997},[40,20962,20963,20965,20967,20969,20971,20973,20975,20977,20979],{"class":42,"line":134},[40,20964,18231],{"class":1283},[40,20966,20323],{"class":596},[40,20968,3488],{"class":50},[40,20970,17359],{"class":1283},[40,20972,20330],{"class":8539},[40,20974,15757],{"class":50},[40,20976,17359],{"class":1283},[40,20978,20337],{"class":8539},[40,20980,6043],{"class":50},[40,20982,20983],{"class":42,"line":146},[40,20984,20355],{"class":997},[40,20986,20987,20989,20991],{"class":42,"line":154},[40,20988,18060],{"class":1283},[40,20990,20362],{"class":596},[40,20992,8959],{"class":50},[40,20994,20995,20997,20999],{"class":42,"line":162},[40,20996,18060],{"class":1283},[40,20998,20378],{"class":596},[40,21000,8959],{"class":50},[40,21002,21003],{"class":42,"line":170},[40,21004,1413],{"emptyLinePlaceholder":1412},[40,21006,21007],{"class":42,"line":183},[40,21008,18544],{"class":1283},[40,21010,21011,21013],{"class":42,"line":196},[40,21012,18060],{"class":1283},[40,21014,20400],{"class":50},[40,21016,21017,21019],{"class":42,"line":204},[40,21018,18060],{"class":1283},[40,21020,20407],{"class":50},[40,21022,21023],{"class":42,"line":217},[40,21024,7318],{"class":50},[19,21026,21027],{},"创建point.cpp",[31,21029,21031],{"className":3476,"code":21030,"language":3478,"meta":36,"style":36},"#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",[26,21032,21033,21040,21045,21079,21083,21099],{"__ignoreMap":36},[40,21034,21035,21037],{"class":42,"line":43},[40,21036,5276],{"class":1283},[40,21038,21039],{"class":94},"\u003Cpoint.h>\n",[40,21041,21042],{"class":42,"line":54},[40,21043,21044],{"class":997},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[40,21046,21047,21049,21052,21055,21057,21059,21061,21063,21065,21067,21069,21071,21073,21075,21077],{"class":42,"line":70},[40,21048,18231],{"class":1283},[40,21050,21051],{"class":596}," Point",[40,21053,21054],{"class":50},"::",[40,21056,20824],{"class":596},[40,21058,3488],{"class":50},[40,21060,17359],{"class":1283},[40,21062,20330],{"class":8539},[40,21064,15757],{"class":50},[40,21066,17359],{"class":1283},[40,21068,20337],{"class":8539},[40,21070,20340],{"class":50},[40,21072,1284],{"class":1283},[40,21074,20345],{"class":50},[40,21076,1284],{"class":1283},[40,21078,20350],{"class":50},[40,21080,21081],{"class":42,"line":78},[40,21082,20355],{"class":997},[40,21084,21085,21087,21089,21091,21093,21095,21097],{"class":42,"line":86},[40,21086,18060],{"class":1283},[40,21088,21051],{"class":596},[40,21090,21054],{"class":50},[40,21092,20586],{"class":596},[40,21094,20365],{"class":50},[40,21096,20368],{"class":1283},[40,21098,20371],{"class":50},[40,21100,21101,21103,21105,21107,21109,21111,21113],{"class":42,"line":100},[40,21102,18060],{"class":1283},[40,21104,21051],{"class":596},[40,21106,21054],{"class":50},[40,21108,20614],{"class":596},[40,21110,20365],{"class":50},[40,21112,20368],{"class":1283},[40,21114,20385],{"class":50},[19,21116,21117],{},"创建circle.h",[31,21119,21121],{"className":3476,"code":21120,"language":3478,"meta":36,"style":36},"#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",[26,21122,21123,21130,21136,21146,21152,21158,21162,21166,21170,21184,21198,21202,21210,21218,21222,21226,21232,21236,21240],{"__ignoreMap":36},[40,21124,21125,21127],{"class":42,"line":43},[40,21126,20915],{"class":1283},[40,21128,21129],{"class":596}," once\n",[40,21131,21132,21134],{"class":42,"line":54},[40,21133,5276],{"class":1283},[40,21135,5279],{"class":94},[40,21137,21138,21140,21142,21144],{"class":42,"line":70},[40,21139,5284],{"class":1283},[40,21141,5287],{"class":1283},[40,21143,5290],{"class":596},[40,21145,4637],{"class":50},[40,21147,21148,21150],{"class":42,"line":78},[40,21149,5276],{"class":1283},[40,21151,21039],{"class":94},[40,21153,21154,21156],{"class":42,"line":86},[40,21155,18016],{"class":1283},[40,21157,18019],{"class":596},[40,21159,21160],{"class":42,"line":100},[40,21161,4888],{"class":50},[40,21163,21164],{"class":42,"line":108},[40,21165,18038],{"class":1283},[40,21167,21168],{"class":42,"line":121},[40,21169,20316],{"class":997},[40,21171,21172,21174,21176,21178,21180,21182],{"class":42,"line":134},[40,21173,18231],{"class":1283},[40,21175,20436],{"class":596},[40,21177,3488],{"class":50},[40,21179,17359],{"class":1283},[40,21181,20443],{"class":8539},[40,21183,6043],{"class":50},[40,21185,21186,21188,21190,21192,21194,21196],{"class":42,"line":146},[40,21187,18231],{"class":1283},[40,21189,20458],{"class":596},[40,21191,3488],{"class":50},[40,21193,20463],{"class":596},[40,21195,20466],{"class":8539},[40,21197,6043],{"class":50},[40,21199,21200],{"class":42,"line":154},[40,21201,20479],{"class":997},[40,21203,21204,21206,21208],{"class":42,"line":162},[40,21205,18060],{"class":1283},[40,21207,20486],{"class":596},[40,21209,8959],{"class":50},[40,21211,21212,21214,21216],{"class":42,"line":170},[40,21213,20498],{"class":596},[40,21215,20501],{"class":596},[40,21217,8959],{"class":50},[40,21219,21220],{"class":42,"line":183},[40,21221,1413],{"emptyLinePlaceholder":1412},[40,21223,21224],{"class":42,"line":196},[40,21225,18544],{"class":1283},[40,21227,21228,21230],{"class":42,"line":204},[40,21229,18060],{"class":1283},[40,21231,18050],{"class":50},[40,21233,21234],{"class":42,"line":217},[40,21235,20527],{"class":997},[40,21237,21238],{"class":42,"line":230},[40,21239,20532],{"class":50},[40,21241,21242],{"class":42,"line":238},[40,21243,7318],{"class":50},[19,21245,21246],{},"创建circle.cpp",[31,21248,21250],{"className":3476,"code":21249,"language":3478,"meta":36,"style":36},"#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",[26,21251,21252,21259,21282,21304,21309,21325],{"__ignoreMap":36},[40,21253,21254,21256],{"class":42,"line":43},[40,21255,5276],{"class":1283},[40,21257,21258],{"class":94},"\u003Ccircle.h>\n",[40,21260,21261,21263,21266,21268,21270,21272,21274,21276,21278,21280],{"class":42,"line":54},[40,21262,8687],{"class":1283},[40,21264,21265],{"class":596}," Circle",[40,21267,21054],{"class":50},[40,21269,20782],{"class":596},[40,21271,3488],{"class":50},[40,21273,17359],{"class":1283},[40,21275,20443],{"class":8539},[40,21277,20446],{"class":50},[40,21279,1284],{"class":1283},[40,21281,20451],{"class":50},[40,21283,21284,21286,21288,21290,21292,21294,21296,21298,21300,21302],{"class":42,"line":70},[40,21285,8687],{"class":1283},[40,21287,21265],{"class":596},[40,21289,21054],{"class":50},[40,21291,20834],{"class":596},[40,21293,3488],{"class":50},[40,21295,20463],{"class":596},[40,21297,20466],{"class":8539},[40,21299,20469],{"class":50},[40,21301,1284],{"class":1283},[40,21303,20474],{"class":50},[40,21305,21306],{"class":42,"line":78},[40,21307,21308],{"class":997},"\u002F\u002F获取属性\n",[40,21310,21311,21313,21315,21317,21319,21321,21323],{"class":42,"line":86},[40,21312,17359],{"class":1283},[40,21314,21265],{"class":596},[40,21316,21054],{"class":50},[40,21318,20666],{"class":596},[40,21320,20365],{"class":50},[40,21322,20368],{"class":1283},[40,21324,20493],{"class":50},[40,21326,21327,21329,21331,21333,21335,21337,21339],{"class":42,"line":100},[40,21328,20463],{"class":596},[40,21330,21265],{"class":596},[40,21332,21054],{"class":50},[40,21334,20580],{"class":596},[40,21336,20365],{"class":50},[40,21338,20368],{"class":1283},[40,21340,20508],{"class":50},[19,21342,21343],{},"使用封装的类",[31,21345,21347],{"className":3476,"code":21346,"language":3478,"meta":36,"style":36},"#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",[26,21348,21349,21355,21365,21371,21377,21401,21405,21431,21457,21481,21495,21499,21511,21515,21519,21523,21535,21539,21543,21551,21555,21559,21563,21567,21571,21581,21587,21595,21603,21613,21619,21631,21639,21647,21657,21663,21675,21679,21687,21693],{"__ignoreMap":36},[40,21350,21351,21353],{"class":42,"line":43},[40,21352,5276],{"class":1283},[40,21354,5279],{"class":94},[40,21356,21357,21359,21361,21363],{"class":42,"line":54},[40,21358,5284],{"class":1283},[40,21360,5287],{"class":1283},[40,21362,5290],{"class":596},[40,21364,4637],{"class":50},[40,21366,21367,21369],{"class":42,"line":70},[40,21368,5276],{"class":1283},[40,21370,21258],{"class":94},[40,21372,21373,21375],{"class":42,"line":78},[40,21374,5276],{"class":1283},[40,21376,21039],{"class":94},[40,21378,21379,21381,21383,21385,21387,21389,21391,21393,21395,21397,21399],{"class":42,"line":86},[40,21380,8687],{"class":1283},[40,21382,20543],{"class":596},[40,21384,3488],{"class":50},[40,21386,20548],{"class":596},[40,21388,13906],{"class":1283},[40,21390,3768],{"class":8539},[40,21392,1299],{"class":50},[40,21394,20463],{"class":596},[40,21396,13906],{"class":1283},[40,21398,19],{"class":8539},[40,21400,1811],{"class":50},[40,21402,21403],{"class":42,"line":100},[40,21404,4888],{"class":50},[40,21406,21407,21409,21411,21413,21415,21417,21419,21421,21423,21425,21427,21429],{"class":42,"line":108},[40,21408,18060],{"class":1283},[40,21410,20573],{"class":50},[40,21412,1284],{"class":1283},[40,21414,19664],{"class":50},[40,21416,20580],{"class":596},[40,21418,20583],{"class":50},[40,21420,20586],{"class":596},[40,21422,16372],{"class":50},[40,21424,4011],{"class":1283},[40,21426,19210],{"class":50},[40,21428,20586],{"class":596},[40,21430,8959],{"class":50},[40,21432,21433,21435,21437,21439,21441,21443,21445,21447,21449,21451,21453,21455],{"class":42,"line":121},[40,21434,18060],{"class":1283},[40,21436,20603],{"class":50},[40,21438,1284],{"class":1283},[40,21440,19664],{"class":50},[40,21442,20580],{"class":596},[40,21444,20583],{"class":50},[40,21446,20614],{"class":596},[40,21448,16372],{"class":50},[40,21450,4011],{"class":1283},[40,21452,19210],{"class":50},[40,21454,20614],{"class":596},[40,21456,8959],{"class":50},[40,21458,21459,21461,21463,21465,21467,21469,21471,21473,21475,21477,21479],{"class":42,"line":134},[40,21460,18060],{"class":1283},[40,21462,20631],{"class":50},[40,21464,1284],{"class":1283},[40,21466,20636],{"class":596},[40,21468,20639],{"class":50},[40,21470,3934],{"class":1283},[40,21472,20573],{"class":50},[40,21474,3960],{"class":1283},[40,21476,20603],{"class":50},[40,21478,3934],{"class":1283},[40,21480,20652],{"class":50},[40,21482,21483,21485,21487,21489,21491,21493],{"class":42,"line":146},[40,21484,6425],{"class":1283},[40,21486,20659],{"class":50},[40,21488,4387],{"class":1283},[40,21490,19664],{"class":50},[40,21492,20666],{"class":596},[40,21494,20669],{"class":50},[40,21496,21497],{"class":42,"line":154},[40,21498,5356],{"class":50},[40,21500,21501,21503,21505,21507,21509],{"class":42,"line":162},[40,21502,12991],{"class":50},[40,21504,4520],{"class":1283},[40,21506,20682],{"class":94},[40,21508,4787],{"class":1283},[40,21510,12162],{"class":50},[40,21512,21513],{"class":42,"line":170},[40,21514,5513],{"class":50},[40,21516,21517],{"class":42,"line":183},[40,21518,20145],{"class":1283},[40,21520,21521],{"class":42,"line":196},[40,21522,5356],{"class":50},[40,21524,21525,21527,21529,21531,21533],{"class":42,"line":204},[40,21526,12991],{"class":50},[40,21528,4520],{"class":1283},[40,21530,20707],{"class":94},[40,21532,4787],{"class":1283},[40,21534,12162],{"class":50},[40,21536,21537],{"class":42,"line":217},[40,21538,5513],{"class":50},[40,21540,21541],{"class":42,"line":230},[40,21542,4907],{"class":50},[40,21544,21545,21547,21549],{"class":42,"line":238},[40,21546,3491],{"class":1283},[40,21548,5299],{"class":596},[40,21550,5302],{"class":50},[40,21552,21553],{"class":42,"line":251},[40,21554,4888],{"class":50},[40,21556,21557],{"class":42,"line":264},[40,21558,18375],{"class":997},[40,21560,21561],{"class":42,"line":277},[40,21562,18122],{"class":50},[40,21564,21565],{"class":42,"line":290},[40,21566,20744],{"class":50},[40,21568,21569],{"class":42,"line":298},[40,21570,20316],{"class":997},[40,21572,21573,21575,21577,21579],{"class":42,"line":310},[40,21574,4893],{"class":50},[40,21576,4520],{"class":1283},[40,21578,20757],{"class":94},[40,21580,4637],{"class":50},[40,21582,21583,21585],{"class":42,"line":5086},[40,21584,18060],{"class":1283},[40,21586,20766],{"class":50},[40,21588,21589,21591,21593],{"class":42,"line":5091},[40,21590,5338],{"class":50},[40,21592,4772],{"class":1283},[40,21594,20775],{"class":50},[40,21596,21597,21599,21601],{"class":42,"line":5105},[40,21598,19917],{"class":50},[40,21600,20782],{"class":596},[40,21602,20785],{"class":50},[40,21604,21605,21607,21609,21611],{"class":42,"line":5110},[40,21606,4893],{"class":50},[40,21608,4520],{"class":1283},[40,21610,20794],{"class":94},[40,21612,4637],{"class":50},[40,21614,21615,21617],{"class":42,"line":5902},[40,21616,18060],{"class":1283},[40,21618,20803],{"class":50},[40,21620,21621,21623,21625,21627,21629],{"class":42,"line":5916},[40,21622,5338],{"class":50},[40,21624,4772],{"class":1283},[40,21626,4297],{"class":50},[40,21628,4772],{"class":1283},[40,21630,20816],{"class":50},[40,21632,21633,21635,21637],{"class":42,"line":5924},[40,21634,20821],{"class":50},[40,21636,20824],{"class":596},[40,21638,20827],{"class":50},[40,21640,21641,21643,21645],{"class":42,"line":5929},[40,21642,19917],{"class":50},[40,21644,20834],{"class":596},[40,21646,20837],{"class":50},[40,21648,21649,21651,21653,21655],{"class":42,"line":5935},[40,21650,4893],{"class":50},[40,21652,4520],{"class":1283},[40,21654,20846],{"class":94},[40,21656,4637],{"class":50},[40,21658,21659,21661],{"class":42,"line":5941},[40,21660,18060],{"class":1283},[40,21662,20855],{"class":50},[40,21664,21665,21667,21669,21671,21673],{"class":42,"line":5946},[40,21666,5338],{"class":50},[40,21668,4772],{"class":1283},[40,21670,20864],{"class":50},[40,21672,4772],{"class":1283},[40,21674,20869],{"class":50},[40,21676,21677],{"class":42,"line":11270},[40,21678,20874],{"class":50},[40,21680,21681,21683,21685],{"class":42,"line":11294},[40,21682,20879],{"class":50},[40,21684,20824],{"class":596},[40,21686,20884],{"class":50},[40,21688,21689,21691],{"class":42,"line":11299},[40,21690,20889],{"class":596},[40,21692,20892],{"class":50},[40,21694,21695],{"class":42,"line":11305},[40,21696,4907],{"class":50},[14,21698,21700],{"id":21699},"_82对象的初始化清理","8.2对象的初始化清理",[1338,21702,21703,21706],{},[495,21704,21705],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[495,21707,21708],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[402,21710,21712],{"id":21711},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,21714,21715,21716,21719],{},"对象的",[409,21717,21718],{},"初始化和清理","也是两个非常重要的安全问题",[19,21721,21722],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,21724,21725],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,21727,21728,21729,2046,21732,21735],{},"c++利用了",[409,21730,21731],{},"构造函数",[409,21733,21734],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,21737,21738,21739],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[409,21740,21741],{},"我们不提供构造和析构，编译器会提供",[19,21743,21744],{},[409,21745,21746],{},"编译器提供的构造函数和析构函数是空实现。",[1338,21748,21749,21752],{},[495,21750,21751],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[495,21753,21754,21755,21758],{},"析构函数：主要作用在于对象",[409,21756,21757],{},"销毁前","系统自动调用，执行一些清理工作。",[19,21760,21761,21764],{},[409,21762,21763],{},"构造函数语法：",[26,21765,21766],{},"类名(){}",[492,21768,21769,21772,21775,21778,21781],{},[495,21770,21771],{},"构造函数，没有返回值也不写void",[495,21773,21774],{},"函数名称与类名相同",[495,21776,21777],{},"构造函数可以有参数，因此可以发生重载",[495,21779,21780],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[495,21782,21783,21784,3908],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[26,21785,21786],{},"Person(){}",[19,21788,21789,17117,21792],{},[409,21790,21791],{},"析构函数语法：",[26,21793,21794],{},"~类名(){}",[492,21796,21797,21800,21803,21809],{},[495,21798,21799],{},"析构函数，没有返回值也不写void",[495,21801,21802],{},"函数名称与类名相同,在名称前加上符号  ~",[495,21804,21805,21806],{},"析构函数不可以有参数，因此",[409,21807,21808],{},"不可以发生重载",[495,21810,21811],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[31,21813,21815],{"className":3476,"code":21814,"language":3478,"meta":36,"style":36},"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",[26,21816,21817,21823,21827,21831,21836,21843,21847,21860,21864,21869,21876,21880,21893,21897,21901,21905,21909,21917,21921,21929,21933,21937,21945,21949,21954,21958,21965,21969,21982,21986,21994],{"__ignoreMap":36},[40,21818,21819,21821],{"class":42,"line":43},[40,21820,18016],{"class":1283},[40,21822,18493],{"class":596},[40,21824,21825],{"class":42,"line":54},[40,21826,4888],{"class":50},[40,21828,21829],{"class":42,"line":70},[40,21830,18038],{"class":1283},[40,21832,21833],{"class":42,"line":78},[40,21834,21835],{"class":997},"    \u002F\u002F构造函数\n",[40,21837,21838,21841],{"class":42,"line":86},[40,21839,21840],{"class":596},"    Person",[40,21842,5302],{"class":50},[40,21844,21845],{"class":42,"line":100},[40,21846,5356],{"class":50},[40,21848,21849,21851,21853,21856,21858],{"class":42,"line":108},[40,21850,12991],{"class":50},[40,21852,4520],{"class":1283},[40,21854,21855],{"class":94}," \"Person的构造函数调用\"",[40,21857,4787],{"class":1283},[40,21859,12162],{"class":50},[40,21861,21862],{"class":42,"line":121},[40,21863,5513],{"class":50},[40,21865,21866],{"class":42,"line":134},[40,21867,21868],{"class":997},"    \u002F\u002F析构函数\n",[40,21870,21871,21874],{"class":42,"line":146},[40,21872,21873],{"class":596},"    ~Person",[40,21875,5302],{"class":50},[40,21877,21878],{"class":42,"line":154},[40,21879,5356],{"class":50},[40,21881,21882,21884,21886,21889,21891],{"class":42,"line":162},[40,21883,12991],{"class":50},[40,21885,4520],{"class":1283},[40,21887,21888],{"class":94}," \"Person的析构函数调用\"",[40,21890,4787],{"class":1283},[40,21892,12162],{"class":50},[40,21894,21895],{"class":42,"line":170},[40,21896,5513],{"class":50},[40,21898,21899],{"class":42,"line":183},[40,21900,1413],{"emptyLinePlaceholder":1412},[40,21902,21903],{"class":42,"line":196},[40,21904,7318],{"class":50},[40,21906,21907],{"class":42,"line":204},[40,21908,1413],{"emptyLinePlaceholder":1412},[40,21910,21911,21913,21915],{"class":42,"line":217},[40,21912,8687],{"class":1283},[40,21914,8911],{"class":596},[40,21916,5302],{"class":50},[40,21918,21919],{"class":42,"line":230},[40,21920,4888],{"class":50},[40,21922,21923,21926],{"class":42,"line":238},[40,21924,21925],{"class":50},"    Person p;",[40,21927,21928],{"class":997},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[40,21930,21931],{"class":42,"line":251},[40,21932,4907],{"class":50},[40,21934,21935],{"class":42,"line":264},[40,21936,1413],{"emptyLinePlaceholder":1412},[40,21938,21939,21941,21943],{"class":42,"line":277},[40,21940,3491],{"class":1283},[40,21942,5299],{"class":596},[40,21944,14175],{"class":50},[40,21946,21947],{"class":42,"line":290},[40,21948,16532],{"class":50},[40,21950,21951],{"class":42,"line":298},[40,21952,21953],{"class":997},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[40,21955,21956],{"class":42,"line":310},[40,21957,1413],{"emptyLinePlaceholder":1412},[40,21959,21960,21962],{"class":42,"line":5086},[40,21961,21925],{"class":50},[40,21963,21964],{"class":997},"\u002F\u002F只有构造函数\n",[40,21966,21967],{"class":42,"line":5091},[40,21968,1413],{"emptyLinePlaceholder":1412},[40,21970,21971,21973,21975,21977,21979],{"class":42,"line":5105},[40,21972,5629],{"class":596},[40,21974,3488],{"class":50},[40,21976,5634],{"class":94},[40,21978,9289],{"class":50},[40,21980,21981],{"class":997},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[40,21983,21984],{"class":42,"line":5110},[40,21985,1413],{"emptyLinePlaceholder":1412},[40,21987,21988,21990,21992],{"class":42,"line":5902},[40,21989,7413],{"class":1283},[40,21991,7416],{"class":63},[40,21993,4637],{"class":50},[40,21995,21996],{"class":42,"line":5916},[40,21997,4907],{"class":50},[19,21999,22000],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[402,22002,22004],{"id":22003},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,22006,22007],{},"两种分类方式：",[19,22009,22010],{},"​\t按参数分为： 有参构造和无参构造",[19,22012,22013],{},"​\t按类型分为： 普通构造和拷贝构造",[19,22015,22016],{},"三种调用方式：",[19,22018,22019],{},"​\t括号法",[19,22021,22022],{},"​\t显示法",[19,22024,22025],{},"​\t隐式转换法",[31,22027,22029],{"className":3476,"code":22028,"language":3478,"meta":36,"style":36},"#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",[26,22030,22031,22037,22047,22052,22057,22062,22067,22071,22079,22083,22087,22091,22097,22101,22114,22118,22130,22134,22143,22156,22160,22164,22170,22174,22187,22191,22196,22212,22216,22221,22230,22243,22247,22253,22257,22262,22270,22274,22279,22283,22291,22295,22300,22305,22310,22315,22320,22324,22329,22334,22339,22344,22348,22353,22358,22374,22386,22391,22395,22400,22405,22410,22414,22419,22433,22446,22450,22458,22462,22468,22474,22482],{"__ignoreMap":36},[40,22032,22033,22035],{"class":42,"line":43},[40,22034,5276],{"class":1283},[40,22036,5279],{"class":94},[40,22038,22039,22041,22043,22045],{"class":42,"line":54},[40,22040,5284],{"class":1283},[40,22042,5287],{"class":1283},[40,22044,5290],{"class":596},[40,22046,4637],{"class":50},[40,22048,22049],{"class":42,"line":70},[40,22050,22051],{"class":997},"\u002F\u002F1.构造函数的分类及调用\n",[40,22053,22054],{"class":42,"line":78},[40,22055,22056],{"class":997},"\u002F\u002F分类\n",[40,22058,22059],{"class":42,"line":86},[40,22060,22061],{"class":997},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[40,22063,22064],{"class":42,"line":100},[40,22065,22066],{"class":997},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[40,22068,22069],{"class":42,"line":108},[40,22070,1413],{"emptyLinePlaceholder":1412},[40,22072,22073,22075,22077],{"class":42,"line":121},[40,22074,18016],{"class":1283},[40,22076,18891],{"class":596},[40,22078,67],{"class":50},[40,22080,22081],{"class":42,"line":134},[40,22082,4888],{"class":50},[40,22084,22085],{"class":42,"line":146},[40,22086,18038],{"class":1283},[40,22088,22089],{"class":42,"line":154},[40,22090,21835],{"class":997},[40,22092,22093,22095],{"class":42,"line":162},[40,22094,21840],{"class":596},[40,22096,5302],{"class":50},[40,22098,22099],{"class":42,"line":170},[40,22100,5356],{"class":50},[40,22102,22103,22105,22107,22110,22112],{"class":42,"line":183},[40,22104,6775],{"class":50},[40,22106,4520],{"class":1283},[40,22108,22109],{"class":94},"\"Person构造函数无参构造\"",[40,22111,4520],{"class":1283},[40,22113,4542],{"class":50},[40,22115,22116],{"class":42,"line":196},[40,22117,5513],{"class":50},[40,22119,22120,22122,22124,22126,22128],{"class":42,"line":204},[40,22121,21840],{"class":596},[40,22123,3488],{"class":50},[40,22125,3491],{"class":1283},[40,22127,4741],{"class":8539},[40,22129,1811],{"class":50},[40,22131,22132],{"class":42,"line":217},[40,22133,5356],{"class":50},[40,22135,22136,22139,22141],{"class":42,"line":230},[40,22137,22138],{"class":50},"        age",[40,22140,1284],{"class":1283},[40,22142,9520],{"class":50},[40,22144,22145,22147,22149,22152,22154],{"class":42,"line":238},[40,22146,6775],{"class":50},[40,22148,4520],{"class":1283},[40,22150,22151],{"class":94},"\"Person构造函数有参构造\"",[40,22153,4520],{"class":1283},[40,22155,4542],{"class":50},[40,22157,22158],{"class":42,"line":251},[40,22159,5513],{"class":50},[40,22161,22162],{"class":42,"line":264},[40,22163,21868],{"class":997},[40,22165,22166,22168],{"class":42,"line":277},[40,22167,21873],{"class":596},[40,22169,5302],{"class":50},[40,22171,22172],{"class":42,"line":290},[40,22173,5356],{"class":50},[40,22175,22176,22178,22180,22183,22185],{"class":42,"line":298},[40,22177,6775],{"class":50},[40,22179,4520],{"class":1283},[40,22181,22182],{"class":94},"\"Person析构函数被调用\"",[40,22184,4520],{"class":1283},[40,22186,4542],{"class":50},[40,22188,22189],{"class":42,"line":310},[40,22190,5513],{"class":50},[40,22192,22193],{"class":42,"line":5086},[40,22194,22195],{"class":997},"    \u002F\u002F拷贝构造函数\n",[40,22197,22198,22200,22202,22204,22206,22208,22210],{"class":42,"line":5091},[40,22199,21840],{"class":596},[40,22201,3488],{"class":50},[40,22203,10115],{"class":1283},[40,22205,18891],{"class":596},[40,22207,13906],{"class":1283},[40,22209,19],{"class":8539},[40,22211,1811],{"class":50},[40,22213,22214],{"class":42,"line":5105},[40,22215,5356],{"class":50},[40,22217,22218],{"class":42,"line":5110},[40,22219,22220],{"class":997},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[40,22222,22223,22225,22227],{"class":42,"line":5902},[40,22224,22138],{"class":50},[40,22226,1284],{"class":1283},[40,22228,22229],{"class":50},"p.age;\n",[40,22231,22232,22234,22236,22239,22241],{"class":42,"line":5916},[40,22233,6775],{"class":50},[40,22235,4520],{"class":1283},[40,22237,22238],{"class":94},"\"Person拷贝构造函数被调用\"",[40,22240,4520],{"class":1283},[40,22242,4542],{"class":50},[40,22244,22245],{"class":42,"line":5924},[40,22246,5513],{"class":50},[40,22248,22249,22251],{"class":42,"line":5929},[40,22250,5311],{"class":1283},[40,22252,11119],{"class":50},[40,22254,22255],{"class":42,"line":5935},[40,22256,7318],{"class":50},[40,22258,22259],{"class":42,"line":5941},[40,22260,22261],{"class":997},"\u002F\u002F调用\n",[40,22263,22264,22266,22268],{"class":42,"line":5946},[40,22265,8687],{"class":1283},[40,22267,8911],{"class":596},[40,22269,5302],{"class":50},[40,22271,22272],{"class":42,"line":11270},[40,22273,4888],{"class":50},[40,22275,22276],{"class":42,"line":11294},[40,22277,22278],{"class":997},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[40,22280,22281],{"class":42,"line":11299},[40,22282,4907],{"class":50},[40,22284,22285,22287,22289],{"class":42,"line":11305},[40,22286,8687],{"class":1283},[40,22288,8980],{"class":596},[40,22290,5302],{"class":50},[40,22292,22293],{"class":42,"line":11332},[40,22294,4888],{"class":50},[40,22296,22297],{"class":42,"line":11337},[40,22298,22299],{"class":997},"    \u002F\u002F1.括号法\n",[40,22301,22302],{"class":42,"line":11343},[40,22303,22304],{"class":997},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[40,22306,22307],{"class":42,"line":11355},[40,22308,22309],{"class":997},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[40,22311,22312],{"class":42,"line":11367},[40,22313,22314],{"class":997},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[40,22316,22317],{"class":42,"line":11379},[40,22318,22319],{"class":997},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[40,22321,22322],{"class":42,"line":13038},[40,22323,1413],{"emptyLinePlaceholder":1412},[40,22325,22326],{"class":42,"line":13063},[40,22327,22328],{"class":997},"    \u002F\u002F注意事项\n",[40,22330,22331],{"class":42,"line":13086},[40,22332,22333],{"class":997},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[40,22335,22336],{"class":42,"line":13110},[40,22337,22338],{"class":997},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[40,22340,22341],{"class":42,"line":13115},[40,22342,22343],{"class":997},"    \u002F\u002F Person p4();\n",[40,22345,22346],{"class":42,"line":13120},[40,22347,1413],{"emptyLinePlaceholder":1412},[40,22349,22350],{"class":42,"line":13125},[40,22351,22352],{"class":997},"    \u002F\u002F2.显示法\n",[40,22354,22355],{"class":42,"line":13134},[40,22356,22357],{"class":50},"    Person p1;\n",[40,22359,22360,22363,22365,22368,22370,22372],{"class":42,"line":13139},[40,22361,22362],{"class":50},"    Person p2",[40,22364,1284],{"class":1283},[40,22366,22367],{"class":596},"Person",[40,22369,3488],{"class":50},[40,22371,3925],{"class":63},[40,22373,6043],{"class":50},[40,22375,22376,22379,22381,22383],{"class":42,"line":13145},[40,22377,22378],{"class":50},"    Person p3",[40,22380,1284],{"class":1283},[40,22382,22367],{"class":596},[40,22384,22385],{"class":50},"(p2);\n",[40,22387,22388],{"class":42,"line":13166},[40,22389,22390],{"class":997},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[40,22392,22393],{"class":42,"line":13172},[40,22394,1413],{"emptyLinePlaceholder":1412},[40,22396,22397],{"class":42,"line":13186},[40,22398,22399],{"class":997},"    \u002F\u002F 注意事项2\n",[40,22401,22402],{"class":42,"line":13192},[40,22403,22404],{"class":997},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[40,22406,22407],{"class":42,"line":13219},[40,22408,22409],{"class":997},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[40,22411,22412],{"class":42,"line":13228},[40,22413,1413],{"emptyLinePlaceholder":1412},[40,22415,22416],{"class":42,"line":13234},[40,22417,22418],{"class":997},"    \u002F\u002F3.隐士转换法\n",[40,22420,22421,22424,22426,22428,22430],{"class":42,"line":13242},[40,22422,22423],{"class":50},"    Person p4",[40,22425,1284],{"class":1283},[40,22427,3925],{"class":63},[40,22429,3540],{"class":50},[40,22431,22432],{"class":997},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[40,22434,22435,22438,22440,22443],{"class":42,"line":13247},[40,22436,22437],{"class":50},"    Person p5",[40,22439,1284],{"class":1283},[40,22441,22442],{"class":50},"p4;",[40,22444,22445],{"class":997}," \u002F\u002F 这里会调用拷贝构造函数\n",[40,22447,22448],{"class":42,"line":19926},[40,22449,4907],{"class":50},[40,22451,22452,22454,22456],{"class":42,"line":19932},[40,22453,3491],{"class":1283},[40,22455,5299],{"class":596},[40,22457,5302],{"class":50},[40,22459,22460],{"class":42,"line":19955},[40,22461,4888],{"class":50},[40,22463,22464,22466],{"class":42,"line":19961},[40,22465,8956],{"class":596},[40,22467,8959],{"class":50},[40,22469,22470,22472],{"class":42,"line":19984},[40,22471,9025],{"class":596},[40,22473,8959],{"class":50},[40,22475,22476,22478,22480],{"class":42,"line":19998},[40,22477,7413],{"class":1283},[40,22479,7416],{"class":63},[40,22481,4637],{"class":50},[40,22483,22484],{"class":42,"line":20018},[40,22485,4907],{"class":50},[19,22487,22488,22491],{},[409,22489,22490],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[402,22493,22495],{"id":22494},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,22497,22498],{},"C++中拷贝构造函数调用时机通常有三种情况",[1338,22500,22501,22504,22507],{},[495,22502,22503],{},"使用一个已经创建完毕的对象来初始化一个新对象",[495,22505,22506],{},"值传递的方式给函数参数传值",[495,22508,22509],{},"以值方式返回局部对象",[31,22511,22513],{"className":3476,"code":22512,"language":3478,"meta":36,"style":36},"#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",[26,22514,22515,22521,22531,22535,22540,22544,22549,22554,22559,22565,22569,22573,22579,22583,22596,22600,22605,22617,22621,22629,22642,22646,22650,22666,22670,22679,22692,22696,22702,22706,22718,22722,22728,22732,22736,22744,22748,22761,22769,22787,22791,22796,22801,22816,22820,22833,22837,22845,22849,22853,22861,22865,22870,22879,22883,22887,22912,22922,22926,22934,22938,22949,22974,22978,22982,22986,22994,22998,23003,23008,23015,23020,23025,23030,23035,23039,23044,23048,23053,23057,23062,23067,23071,23075,23080,23085,23093],{"__ignoreMap":36},[40,22516,22517,22519],{"class":42,"line":43},[40,22518,5276],{"class":1283},[40,22520,5279],{"class":94},[40,22522,22523,22525,22527,22529],{"class":42,"line":54},[40,22524,5284],{"class":1283},[40,22526,5287],{"class":1283},[40,22528,5290],{"class":596},[40,22530,4637],{"class":50},[40,22532,22533],{"class":42,"line":70},[40,22534,1413],{"emptyLinePlaceholder":1412},[40,22536,22537],{"class":42,"line":78},[40,22538,22539],{"class":997},"\u002F\u002F拷贝构造函数调用时机\n",[40,22541,22542],{"class":42,"line":86},[40,22543,1413],{"emptyLinePlaceholder":1412},[40,22545,22546],{"class":42,"line":100},[40,22547,22548],{"class":997},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[40,22550,22551],{"class":42,"line":108},[40,22552,22553],{"class":997},"\u002F\u002F2.值传递的方式给函数参数传值\n",[40,22555,22556],{"class":42,"line":121},[40,22557,22558],{"class":997},"\u002F\u002F3.以值方式返回局部对象\n",[40,22560,22561,22563],{"class":42,"line":134},[40,22562,18016],{"class":1283},[40,22564,18493],{"class":596},[40,22566,22567],{"class":42,"line":146},[40,22568,4888],{"class":50},[40,22570,22571],{"class":42,"line":154},[40,22572,18038],{"class":1283},[40,22574,22575,22577],{"class":42,"line":162},[40,22576,21840],{"class":596},[40,22578,5302],{"class":50},[40,22580,22581],{"class":42,"line":170},[40,22582,5356],{"class":50},[40,22584,22585,22587,22589,22592,22594],{"class":42,"line":183},[40,22586,12991],{"class":50},[40,22588,4520],{"class":1283},[40,22590,22591],{"class":94}," \"Person的默认构造函数调用\"",[40,22593,4787],{"class":1283},[40,22595,12162],{"class":50},[40,22597,22598],{"class":42,"line":196},[40,22599,5513],{"class":50},[40,22601,22602],{"class":42,"line":204},[40,22603,22604],{"class":997},"    \u002F\u002F有参构造\n",[40,22606,22607,22609,22611,22613,22615],{"class":42,"line":217},[40,22608,21840],{"class":596},[40,22610,3488],{"class":50},[40,22612,3491],{"class":1283},[40,22614,19011],{"class":8539},[40,22616,1811],{"class":50},[40,22618,22619],{"class":42,"line":230},[40,22620,5356],{"class":50},[40,22622,22623,22625,22627],{"class":42,"line":238},[40,22624,19065],{"class":50},[40,22626,1284],{"class":1283},[40,22628,11119],{"class":50},[40,22630,22631,22633,22635,22638,22640],{"class":42,"line":251},[40,22632,12991],{"class":50},[40,22634,4520],{"class":1283},[40,22636,22637],{"class":94}," \"Person的有参构造函数调用\"",[40,22639,4787],{"class":1283},[40,22641,12162],{"class":50},[40,22643,22644],{"class":42,"line":264},[40,22645,5513],{"class":50},[40,22647,22648],{"class":42,"line":277},[40,22649,22195],{"class":997},[40,22651,22652,22654,22656,22658,22660,22662,22664],{"class":42,"line":290},[40,22653,21840],{"class":596},[40,22655,3488],{"class":50},[40,22657,10115],{"class":1283},[40,22659,18891],{"class":596},[40,22661,13906],{"class":1283},[40,22663,19],{"class":8539},[40,22665,1811],{"class":50},[40,22667,22668],{"class":42,"line":298},[40,22669,5356],{"class":50},[40,22671,22672,22674,22676],{"class":42,"line":310},[40,22673,19065],{"class":50},[40,22675,1284],{"class":1283},[40,22677,22678],{"class":50}," p.m_Age;\n",[40,22680,22681,22683,22685,22688,22690],{"class":42,"line":5086},[40,22682,12991],{"class":50},[40,22684,4520],{"class":1283},[40,22686,22687],{"class":94}," \"Person的拷贝构造函数调用\"",[40,22689,4787],{"class":1283},[40,22691,12162],{"class":50},[40,22693,22694],{"class":42,"line":5091},[40,22695,5513],{"class":50},[40,22697,22698,22700],{"class":42,"line":5105},[40,22699,21873],{"class":596},[40,22701,5302],{"class":50},[40,22703,22704],{"class":42,"line":5110},[40,22705,5356],{"class":50},[40,22707,22708,22710,22712,22714,22716],{"class":42,"line":5902},[40,22709,12991],{"class":50},[40,22711,4520],{"class":1283},[40,22713,21888],{"class":94},[40,22715,4787],{"class":1283},[40,22717,12162],{"class":50},[40,22719,22720],{"class":42,"line":5916},[40,22721,5513],{"class":50},[40,22723,22724,22726],{"class":42,"line":5924},[40,22725,5311],{"class":1283},[40,22727,18988],{"class":50},[40,22729,22730],{"class":42,"line":5929},[40,22731,7318],{"class":50},[40,22733,22734],{"class":42,"line":5935},[40,22735,22548],{"class":997},[40,22737,22738,22740,22742],{"class":42,"line":5941},[40,22739,8687],{"class":1283},[40,22741,8911],{"class":596},[40,22743,5302],{"class":50},[40,22745,22746],{"class":42,"line":5946},[40,22747,4888],{"class":50},[40,22749,22750,22753,22755,22757,22759],{"class":42,"line":11270},[40,22751,22752],{"class":50},"    Person ",[40,22754,10453],{"class":596},[40,22756,3488],{"class":50},[40,22758,4178],{"class":63},[40,22760,6043],{"class":50},[40,22762,22763,22765,22767],{"class":42,"line":11294},[40,22764,22752],{"class":50},[40,22766,10356],{"class":596},[40,22768,20837],{"class":50},[40,22770,22771,22773,22775,22778,22780,22783,22785],{"class":42,"line":11299},[40,22772,4893],{"class":50},[40,22774,4520],{"class":1283},[40,22776,22777],{"class":94},"\"P2的年龄为：\"",[40,22779,4520],{"class":1283},[40,22781,22782],{"class":50},"p2.m_Age",[40,22784,4520],{"class":1283},[40,22786,4542],{"class":50},[40,22788,22789],{"class":42,"line":11305},[40,22790,4907],{"class":50},[40,22792,22793],{"class":42,"line":11332},[40,22794,22795],{"class":997},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[40,22797,22798],{"class":42,"line":11337},[40,22799,22800],{"class":997},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[40,22802,22803,22805,22808,22810,22812,22814],{"class":42,"line":11343},[40,22804,8687],{"class":1283},[40,22806,22807],{"class":596}," doWork",[40,22809,3488],{"class":50},[40,22811,22367],{"class":596},[40,22813,10148],{"class":8539},[40,22815,1811],{"class":50},[40,22817,22818],{"class":42,"line":11355},[40,22819,4888],{"class":50},[40,22821,22822,22824,22826,22829,22831],{"class":42,"line":11367},[40,22823,9852],{"class":50},[40,22825,4520],{"class":1283},[40,22827,22828],{"class":94}," \"doWork函数调用\"",[40,22830,4787],{"class":1283},[40,22832,12162],{"class":50},[40,22834,22835],{"class":42,"line":11379},[40,22836,4907],{"class":50},[40,22838,22839,22841,22843],{"class":42,"line":13038},[40,22840,8687],{"class":1283},[40,22842,8980],{"class":596},[40,22844,5302],{"class":50},[40,22846,22847],{"class":42,"line":13063},[40,22848,4888],{"class":50},[40,22850,22851],{"class":42,"line":13086},[40,22852,18635],{"class":50},[40,22854,22855,22858],{"class":42,"line":13110},[40,22856,22857],{"class":596},"    doWork",[40,22859,22860],{"class":50},"(p);\n",[40,22862,22863],{"class":42,"line":13115},[40,22864,4907],{"class":50},[40,22866,22867],{"class":42,"line":13120},[40,22868,22869],{"class":997},"\u002F\u002F 3.以值方式返回局部对象\n",[40,22871,22872,22874,22877],{"class":42,"line":13125},[40,22873,22367],{"class":596},[40,22875,22876],{"class":596}," doWork2",[40,22878,5302],{"class":50},[40,22880,22881],{"class":42,"line":13134},[40,22882,4888],{"class":50},[40,22884,22885],{"class":42,"line":13139},[40,22886,22357],{"class":50},[40,22888,22889,22891,22893,22895,22897,22899,22901,22903,22905,22907,22909],{"class":42,"line":13145},[40,22890,4893],{"class":50},[40,22892,4520],{"class":1283},[40,22894,3488],{"class":50},[40,22896,3491],{"class":1283},[40,22898,9841],{"class":1283},[40,22900,3908],{"class":50},[40,22902,3833],{"class":1283},[40,22904,10453],{"class":50},[40,22906,4520],{"class":1283},[40,22908,4585],{"class":50},[40,22910,22911],{"class":997},"\u002F\u002F打印p1的地址\n",[40,22913,22914,22916,22919],{"class":42,"line":13166},[40,22915,7413],{"class":1283},[40,22917,22918],{"class":50}," p1;",[40,22920,22921],{"class":997},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[40,22923,22924],{"class":42,"line":13172},[40,22925,4907],{"class":50},[40,22927,22928,22930,22932],{"class":42,"line":13186},[40,22929,8687],{"class":1283},[40,22931,9052],{"class":596},[40,22933,5302],{"class":50},[40,22935,22936],{"class":42,"line":13192},[40,22937,4888],{"class":50},[40,22939,22940,22943,22945,22947],{"class":42,"line":13219},[40,22941,22942],{"class":50},"    Person p ",[40,22944,1284],{"class":1283},[40,22946,22876],{"class":596},[40,22948,8959],{"class":50},[40,22950,22951,22953,22955,22957,22959,22961,22963,22965,22967,22969,22971],{"class":42,"line":13228},[40,22952,4893],{"class":50},[40,22954,4520],{"class":1283},[40,22956,3488],{"class":50},[40,22958,3491],{"class":1283},[40,22960,9841],{"class":1283},[40,22962,3908],{"class":50},[40,22964,3833],{"class":1283},[40,22966,19],{"class":50},[40,22968,4520],{"class":1283},[40,22970,4585],{"class":50},[40,22972,22973],{"class":997},"\u002F\u002F打印p的地址\n",[40,22975,22976],{"class":42,"line":13234},[40,22977,4907],{"class":50},[40,22979,22980],{"class":42,"line":13242},[40,22981,1413],{"emptyLinePlaceholder":1412},[40,22983,22984],{"class":42,"line":13247},[40,22985,1413],{"emptyLinePlaceholder":1412},[40,22987,22988,22990,22992],{"class":42,"line":19926},[40,22989,3491],{"class":1283},[40,22991,5299],{"class":596},[40,22993,5302],{"class":50},[40,22995,22996],{"class":42,"line":19932},[40,22997,4888],{"class":50},[40,22999,23000],{"class":42,"line":19955},[40,23001,23002],{"class":997},"    \u002F\u002F test01();\n",[40,23004,23005],{"class":42,"line":19961},[40,23006,23007],{"class":997},"    \u002F\u002F test02();\n",[40,23009,23010,23013],{"class":42,"line":19984},[40,23011,23012],{"class":596},"    test03",[40,23014,8959],{"class":50},[40,23016,23017],{"class":42,"line":19998},[40,23018,23019],{"class":997},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[40,23021,23022],{"class":42,"line":20018},[40,23023,23024],{"class":997},"\u002F\u002F 输出结果如下：\n",[40,23026,23027],{"class":42,"line":20024},[40,23028,23029],{"class":997},"\u002F\u002F Person的默认构造函数调用\n",[40,23031,23032],{"class":42,"line":20035},[40,23033,23034],{"class":997},"\u002F\u002F 0x7fffffffceec\n",[40,23036,23037],{"class":42,"line":20058},[40,23038,23034],{"class":997},[40,23040,23041],{"class":42,"line":20080},[40,23042,23043],{"class":997},"\u002F\u002F Person的析构函数调用\n",[40,23045,23046],{"class":42,"line":20085},[40,23047,1413],{"emptyLinePlaceholder":1412},[40,23049,23050],{"class":42,"line":20091},[40,23051,23052],{"class":997},"\u002F\u002F 之前的输出结果如下：\n",[40,23054,23055],{"class":42,"line":20105},[40,23056,23029],{"class":997},[40,23058,23059],{"class":42,"line":20118},[40,23060,23061],{"class":997},"\u002F\u002F 地址\n",[40,23063,23064],{"class":42,"line":20123},[40,23065,23066],{"class":997},"\u002F\u002F Person的拷贝构造函数调用\n",[40,23068,23069],{"class":42,"line":20137},[40,23070,23043],{"class":997},[40,23072,23073],{"class":42,"line":20142},[40,23074,23061],{"class":997},[40,23076,23077],{"class":42,"line":20148},[40,23078,23079],{"class":997},"\u002F\u002F (这两次输出的地址也是不同的) \n",[40,23081,23082],{"class":42,"line":20153},[40,23083,23084],{"class":997},"\u002F\u002F Person的析构函数调用     \n",[40,23086,23087,23089,23091],{"class":42,"line":20167},[40,23088,7413],{"class":1283},[40,23090,7416],{"class":63},[40,23092,4637],{"class":50},[40,23094,23095],{"class":42,"line":20172},[40,23096,4907],{"class":50},[19,23098,23099],{},"简化版理解",[31,23101,23103],{"className":3476,"code":23102,"language":3478,"meta":36,"style":36},"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",[26,23104,23105,23113,23117,23123,23136,23147,23151,23163,23176,23184,23188,23204,23217,23226,23230,23235,23241,23254,23258,23262,23269,23273,23277,23282,23290,23294,23310,23323,23336,23340,23345,23353,23357,23361,23366,23371,23387,23395,23402,23408,23412,23416,23421,23429,23433,23437,23460,23467,23471,23475,23483,23487,23497,23519,23523,23527,23531,23539,23543,23548,23553,23559,23563,23573,23577,23585],{"__ignoreMap":36},[40,23106,23107,23109,23111],{"class":42,"line":43},[40,23108,18016],{"class":1283},[40,23110,18891],{"class":596},[40,23112,18894],{"class":50},[40,23114,23115],{"class":42,"line":54},[40,23116,18038],{"class":1283},[40,23118,23119,23121],{"class":42,"line":70},[40,23120,21840],{"class":596},[40,23122,14175],{"class":50},[40,23124,23125,23127,23129,23132,23134],{"class":42,"line":78},[40,23126,12991],{"class":50},[40,23128,4520],{"class":1283},[40,23130,23131],{"class":94}," \"无参构造函数!\"",[40,23133,4787],{"class":1283},[40,23135,12162],{"class":50},[40,23137,23138,23141,23143,23145],{"class":42,"line":86},[40,23139,23140],{"class":50},"        mAge ",[40,23142,1284],{"class":1283},[40,23144,7416],{"class":63},[40,23146,4637],{"class":50},[40,23148,23149],{"class":42,"line":100},[40,23150,5513],{"class":50},[40,23152,23153,23155,23157,23159,23161],{"class":42,"line":108},[40,23154,21840],{"class":596},[40,23156,3488],{"class":50},[40,23158,3491],{"class":1283},[40,23160,19011],{"class":8539},[40,23162,15764],{"class":50},[40,23164,23165,23167,23169,23172,23174],{"class":42,"line":121},[40,23166,12991],{"class":50},[40,23168,4520],{"class":1283},[40,23170,23171],{"class":94}," \"有参构造函数!\"",[40,23173,4787],{"class":1283},[40,23175,12162],{"class":50},[40,23177,23178,23180,23182],{"class":42,"line":134},[40,23179,23140],{"class":50},[40,23181,1284],{"class":1283},[40,23183,11119],{"class":50},[40,23185,23186],{"class":42,"line":146},[40,23187,5513],{"class":50},[40,23189,23190,23192,23194,23196,23198,23200,23202],{"class":42,"line":154},[40,23191,21840],{"class":596},[40,23193,3488],{"class":50},[40,23195,10115],{"class":1283},[40,23197,18891],{"class":596},[40,23199,3833],{"class":1283},[40,23201,10148],{"class":8539},[40,23203,15764],{"class":50},[40,23205,23206,23208,23210,23213,23215],{"class":42,"line":162},[40,23207,12991],{"class":50},[40,23209,4520],{"class":1283},[40,23211,23212],{"class":94}," \"拷贝构造函数!\"",[40,23214,4787],{"class":1283},[40,23216,12162],{"class":50},[40,23218,23219,23221,23223],{"class":42,"line":170},[40,23220,23140],{"class":50},[40,23222,1284],{"class":1283},[40,23224,23225],{"class":50}," p.mAge;\n",[40,23227,23228],{"class":42,"line":183},[40,23229,5513],{"class":50},[40,23231,23232],{"class":42,"line":196},[40,23233,23234],{"class":997},"    \u002F\u002F析构函数在释放内存之前调用\n",[40,23236,23237,23239],{"class":42,"line":204},[40,23238,21873],{"class":596},[40,23240,14175],{"class":50},[40,23242,23243,23245,23247,23250,23252],{"class":42,"line":217},[40,23244,12991],{"class":50},[40,23246,4520],{"class":1283},[40,23248,23249],{"class":94}," \"析构函数!\"",[40,23251,4787],{"class":1283},[40,23253,12162],{"class":50},[40,23255,23256],{"class":42,"line":230},[40,23257,5513],{"class":50},[40,23259,23260],{"class":42,"line":238},[40,23261,18038],{"class":1283},[40,23263,23264,23266],{"class":42,"line":251},[40,23265,5311],{"class":1283},[40,23267,23268],{"class":50}," mAge;\n",[40,23270,23271],{"class":42,"line":264},[40,23272,7318],{"class":50},[40,23274,23275],{"class":42,"line":277},[40,23276,1413],{"emptyLinePlaceholder":1412},[40,23278,23279],{"class":42,"line":290},[40,23280,23281],{"class":997},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[40,23283,23284,23286,23288],{"class":42,"line":298},[40,23285,8687],{"class":1283},[40,23287,8911],{"class":596},[40,23289,14175],{"class":50},[40,23291,23292],{"class":42,"line":310},[40,23293,1413],{"emptyLinePlaceholder":1412},[40,23295,23296,23298,23301,23303,23305,23307],{"class":42,"line":5086},[40,23297,22752],{"class":50},[40,23299,23300],{"class":596},"man",[40,23302,3488],{"class":50},[40,23304,3791],{"class":63},[40,23306,9289],{"class":50},[40,23308,23309],{"class":997}," \u002F\u002Fp对象已经创建完毕\n",[40,23311,23312,23314,23317,23320],{"class":42,"line":5091},[40,23313,22752],{"class":50},[40,23315,23316],{"class":596},"newman",[40,23318,23319],{"class":50},"(man);",[40,23321,23322],{"class":997}," \u002F\u002F调用拷贝构造函数\n",[40,23324,23325,23328,23330,23333],{"class":42,"line":5105},[40,23326,23327],{"class":50},"    Person newman2 ",[40,23329,1284],{"class":1283},[40,23331,23332],{"class":50}," man;",[40,23334,23335],{"class":997}," \u002F\u002F拷贝构造\n",[40,23337,23338],{"class":42,"line":5110},[40,23339,1413],{"emptyLinePlaceholder":1412},[40,23341,23342],{"class":42,"line":5902},[40,23343,23344],{"class":997},"    \u002F\u002FPerson newman3;\n",[40,23346,23347,23350],{"class":42,"line":5916},[40,23348,23349],{"class":997},"    \u002F\u002Fnewman3 = man;",[40,23351,23352],{"class":997}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[40,23354,23355],{"class":42,"line":5924},[40,23356,4907],{"class":50},[40,23358,23359],{"class":42,"line":5929},[40,23360,1413],{"emptyLinePlaceholder":1412},[40,23362,23363],{"class":42,"line":5935},[40,23364,23365],{"class":997},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[40,23367,23368],{"class":42,"line":5941},[40,23369,23370],{"class":997},"\u002F\u002F相当于Person p1 = p;\n",[40,23372,23373,23375,23377,23379,23381,23384],{"class":42,"line":5946},[40,23374,8687],{"class":1283},[40,23376,22807],{"class":596},[40,23378,3488],{"class":50},[40,23380,22367],{"class":596},[40,23382,23383],{"class":8539}," p1",[40,23385,23386],{"class":50},") {}\n",[40,23388,23389,23391,23393],{"class":42,"line":11270},[40,23390,8687],{"class":1283},[40,23392,8980],{"class":596},[40,23394,14175],{"class":50},[40,23396,23397,23399],{"class":42,"line":11294},[40,23398,21925],{"class":50},[40,23400,23401],{"class":997}," \u002F\u002F无参构造函数\n",[40,23403,23404,23406],{"class":42,"line":11299},[40,23405,22857],{"class":596},[40,23407,22860],{"class":50},[40,23409,23410],{"class":42,"line":11305},[40,23411,4907],{"class":50},[40,23413,23414],{"class":42,"line":11332},[40,23415,1413],{"emptyLinePlaceholder":1412},[40,23417,23418],{"class":42,"line":11337},[40,23419,23420],{"class":997},"\u002F\u002F3. 以值方式返回局部对象\n",[40,23422,23423,23425,23427],{"class":42,"line":11343},[40,23424,22367],{"class":596},[40,23426,22876],{"class":596},[40,23428,5302],{"class":50},[40,23430,23431],{"class":42,"line":11355},[40,23432,4888],{"class":50},[40,23434,23435],{"class":42,"line":11367},[40,23436,22357],{"class":50},[40,23438,23439,23441,23443,23445,23447,23449,23451,23453,23456,23458],{"class":42,"line":11379},[40,23440,9852],{"class":50},[40,23442,4520],{"class":1283},[40,23444,4993],{"class":50},[40,23446,3491],{"class":1283},[40,23448,9841],{"class":1283},[40,23450,3908],{"class":50},[40,23452,3833],{"class":1283},[40,23454,23455],{"class":50},"p1 ",[40,23457,4520],{"class":1283},[40,23459,12162],{"class":50},[40,23461,23462,23464],{"class":42,"line":13038},[40,23463,7413],{"class":1283},[40,23465,23466],{"class":50}," p1;\n",[40,23468,23469],{"class":42,"line":13063},[40,23470,4907],{"class":50},[40,23472,23473],{"class":42,"line":13086},[40,23474,1413],{"emptyLinePlaceholder":1412},[40,23476,23477,23479,23481],{"class":42,"line":13110},[40,23478,8687],{"class":1283},[40,23480,9052],{"class":596},[40,23482,5302],{"class":50},[40,23484,23485],{"class":42,"line":13115},[40,23486,4888],{"class":50},[40,23488,23489,23491,23493,23495],{"class":42,"line":13120},[40,23490,22942],{"class":50},[40,23492,1284],{"class":1283},[40,23494,22876],{"class":596},[40,23496,8959],{"class":50},[40,23498,23499,23501,23503,23505,23507,23509,23511,23513,23515,23517],{"class":42,"line":13125},[40,23500,9852],{"class":50},[40,23502,4520],{"class":1283},[40,23504,4993],{"class":50},[40,23506,3491],{"class":1283},[40,23508,9841],{"class":1283},[40,23510,3908],{"class":50},[40,23512,3833],{"class":1283},[40,23514,14770],{"class":50},[40,23516,4520],{"class":1283},[40,23518,12162],{"class":50},[40,23520,23521],{"class":42,"line":13134},[40,23522,4907],{"class":50},[40,23524,23525],{"class":42,"line":13139},[40,23526,1413],{"emptyLinePlaceholder":1412},[40,23528,23529],{"class":42,"line":13145},[40,23530,1413],{"emptyLinePlaceholder":1412},[40,23532,23533,23535,23537],{"class":42,"line":13166},[40,23534,3491],{"class":1283},[40,23536,5299],{"class":596},[40,23538,14175],{"class":50},[40,23540,23541],{"class":42,"line":13172},[40,23542,1413],{"emptyLinePlaceholder":1412},[40,23544,23545],{"class":42,"line":13186},[40,23546,23547],{"class":997},"    \u002F\u002Ftest01();\n",[40,23549,23550],{"class":42,"line":13192},[40,23551,23552],{"class":997},"    \u002F\u002Ftest02();\n",[40,23554,23555,23557],{"class":42,"line":13219},[40,23556,23012],{"class":596},[40,23558,8959],{"class":50},[40,23560,23561],{"class":42,"line":13228},[40,23562,1413],{"emptyLinePlaceholder":1412},[40,23564,23565,23567,23569,23571],{"class":42,"line":13234},[40,23566,5629],{"class":596},[40,23568,3488],{"class":50},[40,23570,5634],{"class":94},[40,23572,6043],{"class":50},[40,23574,23575],{"class":42,"line":13242},[40,23576,1413],{"emptyLinePlaceholder":1412},[40,23578,23579,23581,23583],{"class":42,"line":13247},[40,23580,7413],{"class":1283},[40,23582,7416],{"class":63},[40,23584,4637],{"class":50},[40,23586,23587],{"class":42,"line":19926},[40,23588,4907],{"class":50},[402,23590,23592],{"id":23591},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,23594,23595],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,23597,23598],{},"1．默认构造函数(无参，函数体为空)",[19,23600,23601],{},"2．默认析构函数(无参，函数体为空)",[19,23603,23604],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,23606,23607],{},"构造函数调用规则如下：",[1338,23609,23610,23613],{},[495,23611,23612],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[495,23614,23615],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[31,23617,23619],{"className":3476,"code":23618,"language":3478,"meta":36,"style":36},"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",[26,23620,23621,23629,23633,23638,23644,23656,23660,23665,23677,23686,23698,23702,23706,23722,23731,23743,23747,23751,23757,23769,23773,23777,23783,23787,23791,23799,23803,23815,23820,23828,23832,23850,23854,23858,23866,23870,23875,23883,23898,23911,23915,23920,23927,23943,23956,23960,23964,23972,23976,23982,23986,23996,24000,24008],{"__ignoreMap":36},[40,23622,23623,23625,23627],{"class":42,"line":43},[40,23624,18016],{"class":1283},[40,23626,18891],{"class":596},[40,23628,18894],{"class":50},[40,23630,23631],{"class":42,"line":54},[40,23632,18038],{"class":1283},[40,23634,23635],{"class":42,"line":70},[40,23636,23637],{"class":997},"    \u002F\u002F无参（默认）构造函数\n",[40,23639,23640,23642],{"class":42,"line":78},[40,23641,21840],{"class":596},[40,23643,14175],{"class":50},[40,23645,23646,23648,23650,23652,23654],{"class":42,"line":86},[40,23647,12991],{"class":50},[40,23649,4520],{"class":1283},[40,23651,23131],{"class":94},[40,23653,4787],{"class":1283},[40,23655,12162],{"class":50},[40,23657,23658],{"class":42,"line":100},[40,23659,5513],{"class":50},[40,23661,23662],{"class":42,"line":108},[40,23663,23664],{"class":997},"    \u002F\u002F有参构造函数\n",[40,23666,23667,23669,23671,23673,23675],{"class":42,"line":121},[40,23668,21840],{"class":596},[40,23670,3488],{"class":50},[40,23672,3491],{"class":1283},[40,23674,4741],{"class":8539},[40,23676,15764],{"class":50},[40,23678,23679,23682,23684],{"class":42,"line":134},[40,23680,23681],{"class":50},"        age ",[40,23683,1284],{"class":1283},[40,23685,4775],{"class":50},[40,23687,23688,23690,23692,23694,23696],{"class":42,"line":146},[40,23689,12991],{"class":50},[40,23691,4520],{"class":1283},[40,23693,23171],{"class":94},[40,23695,4787],{"class":1283},[40,23697,12162],{"class":50},[40,23699,23700],{"class":42,"line":154},[40,23701,5513],{"class":50},[40,23703,23704],{"class":42,"line":162},[40,23705,22195],{"class":997},[40,23707,23708,23710,23712,23714,23716,23718,23720],{"class":42,"line":170},[40,23709,21840],{"class":596},[40,23711,3488],{"class":50},[40,23713,10115],{"class":1283},[40,23715,18891],{"class":596},[40,23717,3833],{"class":1283},[40,23719,10148],{"class":8539},[40,23721,15764],{"class":50},[40,23723,23724,23726,23728],{"class":42,"line":183},[40,23725,23681],{"class":50},[40,23727,1284],{"class":1283},[40,23729,23730],{"class":50}," p.age;\n",[40,23732,23733,23735,23737,23739,23741],{"class":42,"line":196},[40,23734,12991],{"class":50},[40,23736,4520],{"class":1283},[40,23738,23212],{"class":94},[40,23740,4787],{"class":1283},[40,23742,12162],{"class":50},[40,23744,23745],{"class":42,"line":204},[40,23746,5513],{"class":50},[40,23748,23749],{"class":42,"line":217},[40,23750,21868],{"class":997},[40,23752,23753,23755],{"class":42,"line":230},[40,23754,21873],{"class":596},[40,23756,14175],{"class":50},[40,23758,23759,23761,23763,23765,23767],{"class":42,"line":238},[40,23760,12991],{"class":50},[40,23762,4520],{"class":1283},[40,23764,23249],{"class":94},[40,23766,4787],{"class":1283},[40,23768,12162],{"class":50},[40,23770,23771],{"class":42,"line":251},[40,23772,5513],{"class":50},[40,23774,23775],{"class":42,"line":264},[40,23776,18038],{"class":1283},[40,23778,23779,23781],{"class":42,"line":277},[40,23780,5311],{"class":1283},[40,23782,11119],{"class":50},[40,23784,23785],{"class":42,"line":290},[40,23786,7318],{"class":50},[40,23788,23789],{"class":42,"line":298},[40,23790,1413],{"emptyLinePlaceholder":1412},[40,23792,23793,23795,23797],{"class":42,"line":310},[40,23794,8687],{"class":1283},[40,23796,8911],{"class":596},[40,23798,5302],{"class":50},[40,23800,23801],{"class":42,"line":5086},[40,23802,4888],{"class":50},[40,23804,23805,23807,23809,23811,23813],{"class":42,"line":5091},[40,23806,22752],{"class":50},[40,23808,10453],{"class":596},[40,23810,3488],{"class":50},[40,23812,4128],{"class":63},[40,23814,6043],{"class":50},[40,23816,23817],{"class":42,"line":5105},[40,23818,23819],{"class":997},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[40,23821,23822,23824,23826],{"class":42,"line":5110},[40,23823,22752],{"class":50},[40,23825,10356],{"class":596},[40,23827,20837],{"class":50},[40,23829,23830],{"class":42,"line":5902},[40,23831,1413],{"emptyLinePlaceholder":1412},[40,23833,23834,23836,23838,23841,23843,23846,23848],{"class":42,"line":5916},[40,23835,9852],{"class":50},[40,23837,4520],{"class":1283},[40,23839,23840],{"class":94}," \"p2的年龄为： \"",[40,23842,4787],{"class":1283},[40,23844,23845],{"class":50}," p2.age ",[40,23847,4520],{"class":1283},[40,23849,12162],{"class":50},[40,23851,23852],{"class":42,"line":5924},[40,23853,4907],{"class":50},[40,23855,23856],{"class":42,"line":5929},[40,23857,1413],{"emptyLinePlaceholder":1412},[40,23859,23860,23862,23864],{"class":42,"line":5935},[40,23861,8687],{"class":1283},[40,23863,8980],{"class":596},[40,23865,5302],{"class":50},[40,23867,23868],{"class":42,"line":5941},[40,23869,4888],{"class":50},[40,23871,23872],{"class":42,"line":5946},[40,23873,23874],{"class":997},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[40,23876,23877,23880],{"class":42,"line":11270},[40,23878,23879],{"class":50},"    Person p1;",[40,23881,23882],{"class":997}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[40,23884,23885,23887,23889,23891,23893,23895],{"class":42,"line":11294},[40,23886,22752],{"class":50},[40,23888,10356],{"class":596},[40,23890,3488],{"class":50},[40,23892,3925],{"class":63},[40,23894,9289],{"class":50},[40,23896,23897],{"class":997}," \u002F\u002F用户提供的有参\n",[40,23899,23900,23902,23905,23908],{"class":42,"line":11299},[40,23901,22752],{"class":50},[40,23903,23904],{"class":596},"p3",[40,23906,23907],{"class":50},"(p2);",[40,23909,23910],{"class":997}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[40,23912,23913],{"class":42,"line":11305},[40,23914,1413],{"emptyLinePlaceholder":1412},[40,23916,23917],{"class":42,"line":11332},[40,23918,23919],{"class":997},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[40,23921,23922,23925],{"class":42,"line":11337},[40,23923,23924],{"class":50},"    Person p4;",[40,23926,23882],{"class":997},[40,23928,23929,23931,23934,23936,23938,23940],{"class":42,"line":11343},[40,23930,22752],{"class":50},[40,23932,23933],{"class":596},"p5",[40,23935,3488],{"class":50},[40,23937,3925],{"class":63},[40,23939,9289],{"class":50},[40,23941,23942],{"class":997}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[40,23944,23945,23947,23950,23953],{"class":42,"line":11355},[40,23946,22752],{"class":50},[40,23948,23949],{"class":596},"p6",[40,23951,23952],{"class":50},"(p5);",[40,23954,23955],{"class":997}," \u002F\u002F用户自己提供拷贝构造\n",[40,23957,23958],{"class":42,"line":11367},[40,23959,4907],{"class":50},[40,23961,23962],{"class":42,"line":11379},[40,23963,1413],{"emptyLinePlaceholder":1412},[40,23965,23966,23968,23970],{"class":42,"line":13038},[40,23967,3491],{"class":1283},[40,23969,5299],{"class":596},[40,23971,14175],{"class":50},[40,23973,23974],{"class":42,"line":13063},[40,23975,1413],{"emptyLinePlaceholder":1412},[40,23977,23978,23980],{"class":42,"line":13086},[40,23979,8956],{"class":596},[40,23981,8959],{"class":50},[40,23983,23984],{"class":42,"line":13110},[40,23985,1413],{"emptyLinePlaceholder":1412},[40,23987,23988,23990,23992,23994],{"class":42,"line":13115},[40,23989,5629],{"class":596},[40,23991,3488],{"class":50},[40,23993,5634],{"class":94},[40,23995,6043],{"class":50},[40,23997,23998],{"class":42,"line":13120},[40,23999,1413],{"emptyLinePlaceholder":1412},[40,24001,24002,24004,24006],{"class":42,"line":13125},[40,24003,7413],{"class":1283},[40,24005,7416],{"class":63},[40,24007,4637],{"class":50},[40,24009,24010],{"class":42,"line":13134},[40,24011,4907],{"class":50},[402,24013,24015],{"id":24014},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,24017,24018],{},"浅拷贝：简单的赋值拷贝操作",[19,24020,24021],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[31,24023,24025],{"className":3476,"code":24024,"language":3478,"meta":36,"style":36},"#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",[26,24026,24027,24033,24043,24049,24053,24057,24062,24068,24072,24085,24089,24093,24100,24104,24114,24129,24142,24146,24151,24156,24172,24176,24189,24194,24199,24204,24213,24218,24233,24237,24241,24245,24251,24255,24260,24275,24279,24290,24304,24308,24317,24321,24327,24339,24343,24351,24355,24372,24403,24411,24439,24443,24447,24455,24459,24465],{"__ignoreMap":36},[40,24028,24029,24031],{"class":42,"line":43},[40,24030,5276],{"class":1283},[40,24032,5279],{"class":94},[40,24034,24035,24037,24039,24041],{"class":42,"line":54},[40,24036,5284],{"class":1283},[40,24038,5287],{"class":1283},[40,24040,5290],{"class":596},[40,24042,4637],{"class":50},[40,24044,24045,24047],{"class":42,"line":70},[40,24046,18016],{"class":1283},[40,24048,18493],{"class":596},[40,24050,24051],{"class":42,"line":78},[40,24052,4888],{"class":50},[40,24054,24055],{"class":42,"line":86},[40,24056,18038],{"class":1283},[40,24058,24059],{"class":42,"line":100},[40,24060,24061],{"class":997},"    \u002F\u002F默认构造函数\n",[40,24063,24064,24066],{"class":42,"line":108},[40,24065,21840],{"class":596},[40,24067,5302],{"class":50},[40,24069,24070],{"class":42,"line":121},[40,24071,5356],{"class":50},[40,24073,24074,24076,24078,24081,24083],{"class":42,"line":134},[40,24075,6775],{"class":50},[40,24077,4520],{"class":1283},[40,24079,24080],{"class":94},"\"默认构造函数\"",[40,24082,4520],{"class":1283},[40,24084,4542],{"class":50},[40,24086,24087],{"class":42,"line":146},[40,24088,5513],{"class":50},[40,24090,24091],{"class":42,"line":154},[40,24092,23664],{"class":997},[40,24094,24095,24097],{"class":42,"line":162},[40,24096,21873],{"class":596},[40,24098,24099],{"class":50},"(int age,int height)\n",[40,24101,24102],{"class":42,"line":170},[40,24103,5356],{"class":50},[40,24105,24106,24109,24111],{"class":42,"line":183},[40,24107,24108],{"class":50},"        m_Age",[40,24110,1284],{"class":1283},[40,24112,24113],{"class":50},"age;\n",[40,24115,24116,24119,24121,24123,24126],{"class":42,"line":196},[40,24117,24118],{"class":50},"        m_Height",[40,24120,15039],{"class":1283},[40,24122,5708],{"class":1283},[40,24124,24125],{"class":50},"(height);",[40,24127,24128],{"class":997},"\u002F\u002F放到堆区\n",[40,24130,24131,24133,24135,24138,24140],{"class":42,"line":204},[40,24132,6775],{"class":50},[40,24134,4520],{"class":1283},[40,24136,24137],{"class":94},"\"有参构造函数\"",[40,24139,4520],{"class":1283},[40,24141,4542],{"class":50},[40,24143,24144],{"class":42,"line":217},[40,24145,5513],{"class":50},[40,24147,24148],{"class":42,"line":230},[40,24149,24150],{"class":997},"    \u002F\u002F深拷贝解决上述问题\n",[40,24152,24153],{"class":42,"line":238},[40,24154,24155],{"class":997},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[40,24157,24158,24160,24162,24164,24166,24168,24170],{"class":42,"line":251},[40,24159,21840],{"class":596},[40,24161,3488],{"class":50},[40,24163,10115],{"class":1283},[40,24165,18891],{"class":596},[40,24167,13906],{"class":1283},[40,24169,19],{"class":8539},[40,24171,1811],{"class":50},[40,24173,24174],{"class":42,"line":264},[40,24175,5356],{"class":50},[40,24177,24178,24180,24182,24185,24187],{"class":42,"line":277},[40,24179,6775],{"class":50},[40,24181,4520],{"class":1283},[40,24183,24184],{"class":94},"\"拷贝构造函数\"",[40,24186,4520],{"class":1283},[40,24188,4542],{"class":50},[40,24190,24191],{"class":42,"line":290},[40,24192,24193],{"class":997},"        \u002F\u002F编译器默认的写如下注释部分\n",[40,24195,24196],{"class":42,"line":298},[40,24197,24198],{"class":997},"        \u002F\u002Fm_Age=p.m_Age;\n",[40,24200,24201],{"class":42,"line":310},[40,24202,24203],{"class":997},"        \u002F\u002Fm_Height=p.m_Height;\n",[40,24205,24206,24208,24210],{"class":42,"line":5086},[40,24207,24108],{"class":50},[40,24209,1284],{"class":1283},[40,24211,24212],{"class":50},"p.m_Age;\n",[40,24214,24215],{"class":42,"line":5091},[40,24216,24217],{"class":997},"        \u002F\u002F深拷贝操作\n",[40,24219,24220,24222,24224,24226,24228,24230],{"class":42,"line":5105},[40,24221,24118],{"class":50},[40,24223,15039],{"class":1283},[40,24225,5708],{"class":1283},[40,24227,3488],{"class":50},[40,24229,3934],{"class":1283},[40,24231,24232],{"class":50},"p.m_Height);\n",[40,24234,24235],{"class":42,"line":5110},[40,24236,5513],{"class":50},[40,24238,24239],{"class":42,"line":5902},[40,24240,1413],{"emptyLinePlaceholder":1412},[40,24242,24243],{"class":42,"line":5916},[40,24244,21868],{"class":997},[40,24246,24247,24249],{"class":42,"line":5924},[40,24248,21873],{"class":596},[40,24250,5302],{"class":50},[40,24252,24253],{"class":42,"line":5929},[40,24254,5356],{"class":50},[40,24256,24257],{"class":42,"line":5935},[40,24258,24259],{"class":997},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[40,24261,24262,24264,24267,24270,24273],{"class":42,"line":5941},[40,24263,5822],{"class":1283},[40,24265,24266],{"class":50},"(m_Height ",[40,24268,24269],{"class":1283},"!=",[40,24271,24272],{"class":63}," NULL",[40,24274,1811],{"class":50},[40,24276,24277],{"class":42,"line":5946},[40,24278,5835],{"class":50},[40,24280,24281,24284,24287],{"class":42,"line":11270},[40,24282,24283],{"class":1283},"            delete",[40,24285,24286],{"class":50}," m_Height;",[40,24288,24289],{"class":997}," \u002F\u002F释放堆区内存\n",[40,24291,24292,24295,24297,24299,24301],{"class":42,"line":11294},[40,24293,24294],{"class":50},"            m_Height",[40,24296,1284],{"class":1283},[40,24298,5718],{"class":63},[40,24300,3540],{"class":50},[40,24302,24303],{"class":997}," \u002F\u002F防止野指针\n",[40,24305,24306],{"class":42,"line":11299},[40,24307,5854],{"class":50},[40,24309,24310,24312,24314],{"class":42,"line":11305},[40,24311,6775],{"class":50},[40,24313,4520],{"class":1283},[40,24315,24316],{"class":94},"\"Person的析构函数调用\"\n",[40,24318,24319],{"class":42,"line":11332},[40,24320,5513],{"class":50},[40,24322,24323,24325],{"class":42,"line":11337},[40,24324,5311],{"class":1283},[40,24326,18988],{"class":50},[40,24328,24329,24331,24333,24336],{"class":42,"line":11343},[40,24330,5311],{"class":1283},[40,24332,9841],{"class":1283},[40,24334,24335],{"class":50},"m_Height;",[40,24337,24338],{"class":997}," \u002F\u002F定义一个指针，指向身高\n",[40,24340,24341],{"class":42,"line":11355},[40,24342,7318],{"class":50},[40,24344,24345,24347,24349],{"class":42,"line":11367},[40,24346,8687],{"class":1283},[40,24348,8911],{"class":596},[40,24350,5302],{"class":50},[40,24352,24353],{"class":42,"line":11379},[40,24354,4888],{"class":50},[40,24356,24357,24359,24361,24363,24365,24367,24370],{"class":42,"line":13038},[40,24358,22752],{"class":50},[40,24360,10453],{"class":596},[40,24362,3488],{"class":50},[40,24364,4128],{"class":63},[40,24366,1299],{"class":50},[40,24368,24369],{"class":63},"160",[40,24371,6043],{"class":50},[40,24373,24374,24376,24378,24381,24383,24386,24388,24391,24393,24396,24398,24400],{"class":42,"line":13063},[40,24375,4893],{"class":50},[40,24377,4520],{"class":1283},[40,24379,24380],{"class":94},"\"p1的年龄为:\"",[40,24382,4520],{"class":1283},[40,24384,24385],{"class":50},"p1.m_Age",[40,24387,4520],{"class":1283},[40,24389,24390],{"class":94},"\"身高为：\"",[40,24392,9742],{"class":1283},[40,24394,24395],{"class":50},"p1.m_Height",[40,24397,4520],{"class":1283},[40,24399,4585],{"class":50},[40,24401,24402],{"class":997},"  \u002F\u002F18\n",[40,24404,24405,24407,24409],{"class":42,"line":13086},[40,24406,22752],{"class":50},[40,24408,10356],{"class":596},[40,24410,20837],{"class":50},[40,24412,24413,24415,24417,24420,24422,24424,24426,24428,24430,24433,24435,24437],{"class":42,"line":13110},[40,24414,4893],{"class":50},[40,24416,4520],{"class":1283},[40,24418,24419],{"class":94},"\"p2的年龄为：\"",[40,24421,4520],{"class":1283},[40,24423,22782],{"class":50},[40,24425,4520],{"class":1283},[40,24427,24390],{"class":94},[40,24429,9742],{"class":1283},[40,24431,24432],{"class":50},"p2.m_Height",[40,24434,4520],{"class":1283},[40,24436,4585],{"class":50},[40,24438,24402],{"class":997},[40,24440,24441],{"class":42,"line":13115},[40,24442,16532],{"class":50},[40,24444,24445],{"class":42,"line":13120},[40,24446,4907],{"class":50},[40,24448,24449,24451,24453],{"class":42,"line":13125},[40,24450,3491],{"class":1283},[40,24452,5299],{"class":596},[40,24454,5302],{"class":50},[40,24456,24457],{"class":42,"line":13134},[40,24458,4888],{"class":50},[40,24460,24461,24463],{"class":42,"line":13139},[40,24462,8956],{"class":596},[40,24464,8959],{"class":50},[40,24466,24467],{"class":42,"line":13145},[40,24468,4907],{"class":50},[19,24470,24471],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,24473,24474],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,24476,24477],{},[438,24478],{"alt":36,"src":24479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,24481,24482],{},"浅拷贝问题要使用深拷贝来解决",[19,24484,24485],{},[438,24486],{"alt":36,"src":24487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,24489,24490],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[402,24492,24494],{"id":24493},"_826初始化列表","8.2.6初始化列表",[19,24496,24497],{},"作用：初始化属性",[19,24499,8504],{},[31,24501,24504],{"className":24502,"code":24503,"language":8510},[8508],"构造函数():属性1(值1),属性2(值2).....{}\n",[26,24505,24503],{"__ignoreMap":36},[19,24507,24508],{},"例子",[31,24510,24512],{"className":3476,"code":24511,"language":3478,"meta":36,"style":36},"#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",[26,24513,24514,24520,24530,24536,24540,24545,24549,24554,24559,24564,24569,24574,24579,24583,24588,24593,24636,24645,24663,24681,24699,24703,24707,24714,24721,24728,24732,24736,24744,24748,24752,24772,24781,24785,24789,24799,24803,24811],{"__ignoreMap":36},[40,24515,24516,24518],{"class":42,"line":43},[40,24517,5276],{"class":1283},[40,24519,5279],{"class":94},[40,24521,24522,24524,24526,24528],{"class":42,"line":54},[40,24523,5284],{"class":1283},[40,24525,5287],{"class":1283},[40,24527,5290],{"class":596},[40,24529,4637],{"class":50},[40,24531,24532,24534],{"class":42,"line":70},[40,24533,18016],{"class":1283},[40,24535,18493],{"class":596},[40,24537,24538],{"class":42,"line":78},[40,24539,4888],{"class":50},[40,24541,24542],{"class":42,"line":86},[40,24543,24544],{"class":1283},"    public:\n",[40,24546,24547],{"class":42,"line":100},[40,24548,1413],{"emptyLinePlaceholder":1412},[40,24550,24551],{"class":42,"line":108},[40,24552,24553],{"class":997},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[40,24555,24556],{"class":42,"line":121},[40,24557,24558],{"class":997},"    \u002F\u002FPerson(int a, int b, int c) {\n",[40,24560,24561],{"class":42,"line":134},[40,24562,24563],{"class":997},"    \u002F\u002F  m_A = a;\n",[40,24565,24566],{"class":42,"line":146},[40,24567,24568],{"class":997},"    \u002F\u002F  m_B = b;\n",[40,24570,24571],{"class":42,"line":154},[40,24572,24573],{"class":997},"    \u002F\u002F  m_C = c;\n",[40,24575,24576],{"class":42,"line":162},[40,24577,24578],{"class":997},"    \u002F\u002F}\n",[40,24580,24581],{"class":42,"line":170},[40,24582,1413],{"emptyLinePlaceholder":1412},[40,24584,24585],{"class":42,"line":183},[40,24586,24587],{"class":997},"    \u002F\u002F初始化列表方式初始化\n",[40,24589,24590],{"class":42,"line":196},[40,24591,24592],{"class":997},"    \u002F\u002F使用有参构造函数\n",[40,24594,24595,24597,24599,24601,24603,24605,24607,24609,24611,24613,24615,24618,24621,24624,24627,24630,24633],{"class":42,"line":204},[40,24596,21840],{"class":596},[40,24598,3488],{"class":50},[40,24600,3491],{"class":1283},[40,24602,4741],{"class":8539},[40,24604,15757],{"class":50},[40,24606,3491],{"class":1283},[40,24608,6157],{"class":8539},[40,24610,15757],{"class":50},[40,24612,3491],{"class":1283},[40,24614,6173],{"class":8539},[40,24616,24617],{"class":50},") :",[40,24619,24620],{"class":596},"m_A",[40,24622,24623],{"class":50},"(a), ",[40,24625,24626],{"class":596},"m_B",[40,24628,24629],{"class":50},"(b), ",[40,24631,24632],{"class":596},"m_C",[40,24634,24635],{"class":50},"(c) {}\n",[40,24637,24638,24640,24643],{"class":42,"line":217},[40,24639,18231],{"class":1283},[40,24641,24642],{"class":596}," PrintPerson",[40,24644,14175],{"class":50},[40,24646,24647,24649,24651,24654,24656,24659,24661],{"class":42,"line":230},[40,24648,12991],{"class":50},[40,24650,4520],{"class":1283},[40,24652,24653],{"class":94}," \"mA:\"",[40,24655,4787],{"class":1283},[40,24657,24658],{"class":50}," m_A ",[40,24660,4520],{"class":1283},[40,24662,12162],{"class":50},[40,24664,24665,24667,24669,24672,24674,24677,24679],{"class":42,"line":238},[40,24666,12991],{"class":50},[40,24668,4520],{"class":1283},[40,24670,24671],{"class":94}," \"mB:\"",[40,24673,4787],{"class":1283},[40,24675,24676],{"class":50}," m_B ",[40,24678,4520],{"class":1283},[40,24680,12162],{"class":50},[40,24682,24683,24685,24687,24690,24692,24695,24697],{"class":42,"line":251},[40,24684,12991],{"class":50},[40,24686,4520],{"class":1283},[40,24688,24689],{"class":94}," \"mC:\"",[40,24691,4787],{"class":1283},[40,24693,24694],{"class":50}," m_C ",[40,24696,4520],{"class":1283},[40,24698,12162],{"class":50},[40,24700,24701],{"class":42,"line":264},[40,24702,5513],{"class":50},[40,24704,24705],{"class":42,"line":277},[40,24706,18544],{"class":1283},[40,24708,24709,24711],{"class":42,"line":290},[40,24710,5311],{"class":1283},[40,24712,24713],{"class":50}," m_A;\n",[40,24715,24716,24718],{"class":42,"line":298},[40,24717,5311],{"class":1283},[40,24719,24720],{"class":50}," m_B;\n",[40,24722,24723,24725],{"class":42,"line":310},[40,24724,5311],{"class":1283},[40,24726,24727],{"class":50}," m_C;\n",[40,24729,24730],{"class":42,"line":5086},[40,24731,7318],{"class":50},[40,24733,24734],{"class":42,"line":5091},[40,24735,1413],{"emptyLinePlaceholder":1412},[40,24737,24738,24740,24742],{"class":42,"line":5105},[40,24739,3491],{"class":1283},[40,24741,5299],{"class":596},[40,24743,9301],{"class":50},[40,24745,24746],{"class":42,"line":5110},[40,24747,4888],{"class":50},[40,24749,24750],{"class":42,"line":5902},[40,24751,1413],{"emptyLinePlaceholder":1412},[40,24753,24754,24756,24758,24760,24762,24764,24766,24768,24770],{"class":42,"line":5916},[40,24755,22752],{"class":50},[40,24757,19],{"class":596},[40,24759,3488],{"class":50},[40,24761,3698],{"class":63},[40,24763,15757],{"class":50},[40,24765,64],{"class":63},[40,24767,15757],{"class":50},[40,24769,3555],{"class":63},[40,24771,6043],{"class":50},[40,24773,24774,24776,24779],{"class":42,"line":5924},[40,24775,19188],{"class":50},[40,24777,24778],{"class":596},"PrintPerson",[40,24780,8959],{"class":50},[40,24782,24783],{"class":42,"line":5929},[40,24784,1413],{"emptyLinePlaceholder":1412},[40,24786,24787],{"class":42,"line":5935},[40,24788,1413],{"emptyLinePlaceholder":1412},[40,24790,24791,24793,24795,24797],{"class":42,"line":5941},[40,24792,5629],{"class":596},[40,24794,3488],{"class":50},[40,24796,5634],{"class":94},[40,24798,6043],{"class":50},[40,24800,24801],{"class":42,"line":5946},[40,24802,1413],{"emptyLinePlaceholder":1412},[40,24804,24805,24807,24809],{"class":42,"line":11270},[40,24806,7413],{"class":1283},[40,24808,7416],{"class":63},[40,24810,4637],{"class":50},[40,24812,24813],{"class":42,"line":11294},[40,24814,4907],{"class":50},[19,24816,24817,24818,24821,24822],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[409,24819,24820],{},"参数名就是定义的对象属性","，",[409,24823,24824],{},"属性后面的值为有参构造函数的形参",[31,24826,24828],{"className":3476,"code":24827,"language":3478,"meta":36,"style":36},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[26,24829,24830],{"__ignoreMap":36},[40,24831,24832,24834,24836,24838,24841,24843,24846,24848,24851,24853,24856,24858,24861,24863],{"class":42,"line":43},[40,24833,22367],{"class":596},[40,24835,3488],{"class":50},[40,24837,3491],{"class":1283},[40,24839,24840],{"class":50}," a.",[40,24842,3491],{"class":1283},[40,24844,24845],{"class":50}," b,",[40,24847,3491],{"class":1283},[40,24849,24850],{"class":50}," b):",[40,24852,24620],{"class":596},[40,24854,24855],{"class":50},"(a),",[40,24857,24626],{"class":596},[40,24859,24860],{"class":50},"(c),",[40,24862,24632],{"class":596},[40,24864,24865],{"class":50},"(b) {}\n",[402,24867,24869],{"id":24868},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,24871,24872],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,24874,17955],{},[31,24876,24878],{"className":3476,"code":24877,"language":3478,"meta":36,"style":36},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[26,24879,24880,24885,24890,24894,24899,24903],{"__ignoreMap":36},[40,24881,24882],{"class":42,"line":43},[40,24883,24884],{"class":50},"A{};\n",[40,24886,24887],{"class":42,"line":54},[40,24888,24889],{"class":50},"B\n",[40,24891,24892],{"class":42,"line":70},[40,24893,4888],{"class":50},[40,24895,24896],{"class":42,"line":78},[40,24897,24898],{"class":50},"    A a;\n",[40,24900,24901],{"class":42,"line":86},[40,24902,4907],{"class":50},[40,24904,24905],{"class":42,"line":100},[40,24906,24907],{"class":997},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,24909,24910],{},"案例",[31,24912,24914],{"className":3476,"code":24913,"language":3478,"meta":36,"style":36},"\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",[26,24915,24916,24921,24928,24932,24937,24942,24956,24960,24970,24981,24985,24992,24996,25009,25013,25018,25023,25027,25033,25037,25041,25045,25076,25080,25091,25095,25101,25105,25118,25122,25126,25130,25135,25140,25144,25152,25156,25173,25192,25196,25204,25208,25214],{"__ignoreMap":36},[40,24917,24918],{"class":42,"line":43},[40,24919,24920],{"class":997},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[40,24922,24923,24925],{"class":42,"line":54},[40,24924,18016],{"class":1283},[40,24926,24927],{"class":596}," Phone\n",[40,24929,24930],{"class":42,"line":70},[40,24931,4888],{"class":50},[40,24933,24934],{"class":42,"line":78},[40,24935,24936],{"class":50},"public：\n",[40,24938,24939],{"class":42,"line":86},[40,24940,24941],{"class":997},"    \u002F\u002F 赋值(构造函数)\n",[40,24943,24944,24947,24949,24951,24954],{"class":42,"line":100},[40,24945,24946],{"class":596},"    Phone",[40,24948,3488],{"class":50},[40,24950,18239],{"class":596},[40,24952,24953],{"class":8539}," pName",[40,24955,1811],{"class":50},[40,24957,24958],{"class":42,"line":108},[40,24959,5356],{"class":50},[40,24961,24962,24965,24967],{"class":42,"line":121},[40,24963,24964],{"class":50},"        m_pName",[40,24966,1284],{"class":1283},[40,24968,24969],{"class":50},"pName;\n",[40,24971,24972,24974,24976,24979],{"class":42,"line":134},[40,24973,6775],{"class":50},[40,24975,4520],{"class":1283},[40,24977,24978],{"class":94},"\"Phone的构造函数调用\"",[40,24980,4637],{"class":50},[40,24982,24983],{"class":42,"line":146},[40,24984,5513],{"class":50},[40,24986,24987,24990],{"class":42,"line":154},[40,24988,24989],{"class":596},"    ~Phone",[40,24991,5302],{"class":50},[40,24993,24994],{"class":42,"line":162},[40,24995,5356],{"class":50},[40,24997,24998,25000,25002,25005,25007],{"class":42,"line":170},[40,24999,6775],{"class":50},[40,25001,4520],{"class":1283},[40,25003,25004],{"class":94},"\"Phone析构函数调用\"",[40,25006,4520],{"class":1283},[40,25008,4542],{"class":50},[40,25010,25011],{"class":42,"line":183},[40,25012,5513],{"class":50},[40,25014,25015],{"class":42,"line":196},[40,25016,25017],{"class":997},"    \u002F\u002F\n",[40,25019,25020],{"class":42,"line":204},[40,25021,25022],{"class":50},"    string m_PName;\n",[40,25024,25025],{"class":42,"line":217},[40,25026,7318],{"class":50},[40,25028,25029,25031],{"class":42,"line":230},[40,25030,18016],{"class":1283},[40,25032,18493],{"class":596},[40,25034,25035],{"class":42,"line":238},[40,25036,4888],{"class":50},[40,25038,25039],{"class":42,"line":251},[40,25040,18038],{"class":1283},[40,25042,25043],{"class":42,"line":264},[40,25044,20316],{"class":997},[40,25046,25047,25049,25051,25053,25055,25057,25059,25062,25065,25067,25070,25073],{"class":42,"line":277},[40,25048,21840],{"class":596},[40,25050,3488],{"class":50},[40,25052,18239],{"class":596},[40,25054,18242],{"class":8539},[40,25056,1299],{"class":50},[40,25058,18239],{"class":596},[40,25060,25061],{"class":8539}," pname",[40,25063,25064],{"class":50},"):",[40,25066,18332],{"class":596},[40,25068,25069],{"class":50},"(name),m_phone.",[40,25071,25072],{"class":596},"m_PName",[40,25074,25075],{"class":50},"(pname) \n",[40,25077,25078],{"class":42,"line":290},[40,25079,5356],{"class":50},[40,25081,25082,25084,25086,25089],{"class":42,"line":298},[40,25083,6775],{"class":50},[40,25085,4520],{"class":1283},[40,25087,25088],{"class":94},"\"Person的构造函数调用\"",[40,25090,4637],{"class":50},[40,25092,25093],{"class":42,"line":310},[40,25094,5513],{"class":50},[40,25096,25097,25099],{"class":42,"line":5086},[40,25098,21873],{"class":596},[40,25100,5302],{"class":50},[40,25102,25103],{"class":42,"line":5091},[40,25104,5356],{"class":50},[40,25106,25107,25109,25111,25114,25116],{"class":42,"line":5105},[40,25108,6775],{"class":50},[40,25110,4520],{"class":1283},[40,25112,25113],{"class":94},"\"Person析构函数调用\"",[40,25115,4520],{"class":1283},[40,25117,4542],{"class":50},[40,25119,25120],{"class":42,"line":5110},[40,25121,5513],{"class":50},[40,25123,25124],{"class":42,"line":5902},[40,25125,11102],{"class":997},[40,25127,25128],{"class":42,"line":5916},[40,25129,18214],{"class":50},[40,25131,25132],{"class":42,"line":5924},[40,25133,25134],{"class":997},"    \u002F\u002F手机\n",[40,25136,25137],{"class":42,"line":5929},[40,25138,25139],{"class":50},"    Phone m_Phone;\n",[40,25141,25142],{"class":42,"line":5935},[40,25143,7318],{"class":50},[40,25145,25146,25148,25150],{"class":42,"line":5941},[40,25147,8687],{"class":1283},[40,25149,8911],{"class":596},[40,25151,5302],{"class":50},[40,25153,25154],{"class":42,"line":5946},[40,25155,4888],{"class":50},[40,25157,25158,25160,25162,25164,25166,25168,25171],{"class":42,"line":11270},[40,25159,22752],{"class":50},[40,25161,19],{"class":596},[40,25163,3488],{"class":50},[40,25165,11238],{"class":94},[40,25167,1299],{"class":50},[40,25169,25170],{"class":94},"\"安卓\"",[40,25172,6043],{"class":50},[40,25174,25175,25177,25179,25182,25184,25187,25189],{"class":42,"line":11294},[40,25176,4893],{"class":50},[40,25178,4520],{"class":1283},[40,25180,25181],{"class":50},"p.Name",[40,25183,4520],{"class":1283},[40,25185,25186],{"class":94},"\"拿着：\"",[40,25188,4520],{"class":1283},[40,25190,25191],{"class":50},"p.m_phone.m_PName;\n",[40,25193,25194],{"class":42,"line":11299},[40,25195,4907],{"class":50},[40,25197,25198,25200,25202],{"class":42,"line":11305},[40,25199,3491],{"class":1283},[40,25201,5299],{"class":596},[40,25203,5302],{"class":50},[40,25205,25206],{"class":42,"line":11332},[40,25207,4888],{"class":50},[40,25209,25210,25212],{"class":42,"line":11337},[40,25211,8956],{"class":596},[40,25213,8959],{"class":50},[40,25215,25216],{"class":42,"line":11343},[40,25217,4907],{"class":50},[19,25219,12347],{},[31,25221,25223],{"className":3476,"code":25222,"language":3478,"meta":36,"style":36},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[26,25224,25225,25230],{"__ignoreMap":36},[40,25226,25227],{"class":42,"line":43},[40,25228,25229],{"class":997},"    \u002F\u002F不需要写这个：\n",[40,25231,25232],{"class":42,"line":54},[40,25233,25234],{"class":997},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,25236,25237],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[31,25239,25241],{"className":3476,"code":25240,"language":3478,"meta":36,"style":36},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[26,25242,25243],{"__ignoreMap":36},[40,25244,25245,25247,25250,25252,25255,25258],{"class":42,"line":43},[40,25246,22367],{"class":596},[40,25248,25249],{"class":50},"(string name.string pname):",[40,25251,18332],{"class":596},[40,25253,25254],{"class":50},"(name),",[40,25256,25257],{"class":596},"m_phone",[40,25259,25260],{"class":50},"(pname) {}\n",[19,25262,25263,25264,1284,25267],{},"采用的是隐式转换法，实际为如下：\n",[26,25265,25266],{},"m_phone(pname)",[26,25268,25269],{},"Phone m_phone=pname",[19,25271,25272,25275],{},[409,25273,25274],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,25277,25278],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[402,25280,25282],{"id":25281},"_828静态对象","8.2.8静态对象",[19,25284,25285],{},"静态对象在成员对象前static，称为静态对象",[19,25287,25288],{},"静态对象分为两类：",[492,25290,25291],{},[495,25292,25293],{},"静态成员变量",[1338,25295,25296,25299,25302],{},[495,25297,25298],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[495,25300,25301],{},"②在编译阶段分配内存",[495,25303,25304],{},"③类内声明，类外初始化",[492,25306,25307],{"start":54},[495,25308,25309],{},"静态成员函数",[1338,25311,25312,25315],{},[495,25313,25314],{},"①所有对象共享同一个函数",[495,25316,25317],{},"②静态成员函数只能访问静态成员变量",[2423,25319,25321],{"id":25320},"_8281静态成员变量","8.2.8.1静态成员变量",[31,25323,25325],{"className":3476,"code":25324,"language":3478,"meta":36,"style":36},"#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",[26,25326,25327,25333,25343,25349,25353,25357,25362,25367,25372,25380,25384,25388,25392,25400,25404,25408,25413,25426,25430,25438,25442,25448],{"__ignoreMap":36},[40,25328,25329,25331],{"class":42,"line":43},[40,25330,5276],{"class":1283},[40,25332,5279],{"class":94},[40,25334,25335,25337,25339,25341],{"class":42,"line":54},[40,25336,5284],{"class":1283},[40,25338,5287],{"class":1283},[40,25340,5290],{"class":596},[40,25342,4637],{"class":50},[40,25344,25345,25347],{"class":42,"line":70},[40,25346,18016],{"class":1283},[40,25348,18493],{"class":596},[40,25350,25351],{"class":42,"line":78},[40,25352,4888],{"class":50},[40,25354,25355],{"class":42,"line":86},[40,25356,18038],{"class":1283},[40,25358,25359],{"class":42,"line":100},[40,25360,25361],{"class":997},"    \u002F\u002F非静态成员变量\n",[40,25363,25364],{"class":42,"line":108},[40,25365,25366],{"class":997},"    \u002F\u002F int m_A;\n",[40,25368,25369],{"class":42,"line":121},[40,25370,25371],{"class":997},"    \u002F\u002F定义静态成员变量\n",[40,25373,25374,25376,25378],{"class":42,"line":134},[40,25375,14342],{"class":1283},[40,25377,5708],{"class":1283},[40,25379,24713],{"class":50},[40,25381,25382],{"class":42,"line":146},[40,25383,1413],{"emptyLinePlaceholder":1412},[40,25385,25386],{"class":42,"line":154},[40,25387,1413],{"emptyLinePlaceholder":1412},[40,25389,25390],{"class":42,"line":162},[40,25391,7318],{"class":50},[40,25393,25394,25396,25398],{"class":42,"line":170},[40,25395,8687],{"class":1283},[40,25397,8911],{"class":596},[40,25399,5302],{"class":50},[40,25401,25402],{"class":42,"line":183},[40,25403,4888],{"class":50},[40,25405,25406],{"class":42,"line":196},[40,25407,18635],{"class":50},[40,25409,25410],{"class":42,"line":204},[40,25411,25412],{"class":997},"    \u002F\u002F输出类成员变量这块内存\n",[40,25414,25415,25417,25419,25422,25424],{"class":42,"line":217},[40,25416,4893],{"class":50},[40,25418,4520],{"class":1283},[40,25420,25421],{"class":50},"p.m_A",[40,25423,4520],{"class":1283},[40,25425,4542],{"class":50},[40,25427,25428],{"class":42,"line":230},[40,25429,4907],{"class":50},[40,25431,25432,25434,25436],{"class":42,"line":238},[40,25433,3491],{"class":1283},[40,25435,5299],{"class":596},[40,25437,5302],{"class":50},[40,25439,25440],{"class":42,"line":251},[40,25441,4888],{"class":50},[40,25443,25444,25446],{"class":42,"line":264},[40,25445,8956],{"class":596},[40,25447,5302],{"class":50},[40,25449,25450],{"class":42,"line":277},[40,25451,4907],{"class":50},[19,25453,25454],{},"此时输出是报错的：无法解析外部命令",[19,25456,25457],{},"解决这一问题：必须用到类内声明，类外初始化操作",[31,25459,25461],{"className":3476,"code":25460,"language":3478,"meta":36,"style":36},"#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",[26,25462,25463,25469,25479,25485,25489,25493,25498,25506,25510,25515,25530,25538,25542,25546,25551,25556,25568,25573,25584,25589,25594,25607,25611,25619,25623,25629],{"__ignoreMap":36},[40,25464,25465,25467],{"class":42,"line":43},[40,25466,5276],{"class":1283},[40,25468,5279],{"class":94},[40,25470,25471,25473,25475,25477],{"class":42,"line":54},[40,25472,5284],{"class":1283},[40,25474,5287],{"class":1283},[40,25476,5290],{"class":596},[40,25478,4637],{"class":50},[40,25480,25481,25483],{"class":42,"line":70},[40,25482,18016],{"class":1283},[40,25484,18493],{"class":596},[40,25486,25487],{"class":42,"line":78},[40,25488,4888],{"class":50},[40,25490,25491],{"class":42,"line":86},[40,25492,18038],{"class":1283},[40,25494,25495],{"class":42,"line":100},[40,25496,25497],{"class":997},"    \u002F\u002F类内声明\n",[40,25499,25500,25502,25504],{"class":42,"line":108},[40,25501,14342],{"class":1283},[40,25503,5708],{"class":1283},[40,25505,24713],{"class":50},[40,25507,25508],{"class":42,"line":121},[40,25509,7318],{"class":50},[40,25511,25512],{"class":42,"line":134},[40,25513,25514],{"class":997},"\u002F\u002F类外初始化\n",[40,25516,25517,25519,25521,25524,25526,25528],{"class":42,"line":146},[40,25518,3491],{"class":1283},[40,25520,18891],{"class":596},[40,25522,25523],{"class":50},"::m_A",[40,25525,1284],{"class":1283},[40,25527,3925],{"class":63},[40,25529,4637],{"class":50},[40,25531,25532,25534,25536],{"class":42,"line":154},[40,25533,8687],{"class":1283},[40,25535,8911],{"class":596},[40,25537,5302],{"class":50},[40,25539,25540],{"class":42,"line":162},[40,25541,4888],{"class":50},[40,25543,25544],{"class":42,"line":170},[40,25545,18635],{"class":50},[40,25547,25548],{"class":42,"line":183},[40,25549,25550],{"class":997},"    \u002F\u002F访问变量的原内存空间\n",[40,25552,25553],{"class":42,"line":196},[40,25554,25555],{"class":997},"    \u002F\u002F100\n",[40,25557,25558,25560,25562,25564,25566],{"class":42,"line":204},[40,25559,4893],{"class":50},[40,25561,4520],{"class":1283},[40,25563,25421],{"class":50},[40,25565,4520],{"class":1283},[40,25567,4542],{"class":50},[40,25569,25570],{"class":42,"line":217},[40,25571,25572],{"class":50},"    Person p2;\n",[40,25574,25575,25578,25580,25582],{"class":42,"line":230},[40,25576,25577],{"class":50},"    p2.m_A",[40,25579,1284],{"class":1283},[40,25581,5053],{"class":63},[40,25583,4637],{"class":50},[40,25585,25586],{"class":42,"line":238},[40,25587,25588],{"class":997},"    \u002F\u002F继续访问这片空间\n",[40,25590,25591],{"class":42,"line":251},[40,25592,25593],{"class":997},"    \u002F\u002F200\n",[40,25595,25596,25598,25600,25603,25605],{"class":42,"line":264},[40,25597,4893],{"class":50},[40,25599,4520],{"class":1283},[40,25601,25602],{"class":50},"p2.m_A",[40,25604,4520],{"class":1283},[40,25606,4542],{"class":50},[40,25608,25609],{"class":42,"line":277},[40,25610,4907],{"class":50},[40,25612,25613,25615,25617],{"class":42,"line":290},[40,25614,3491],{"class":1283},[40,25616,5299],{"class":596},[40,25618,5302],{"class":50},[40,25620,25621],{"class":42,"line":298},[40,25622,4888],{"class":50},[40,25624,25625,25627],{"class":42,"line":310},[40,25626,8956],{"class":596},[40,25628,8959],{"class":50},[40,25630,25631],{"class":42,"line":5086},[40,25632,4907],{"class":50},[19,25634,25635],{},[409,25636,25637],{},"静态变量的访问",[31,25639,25641],{"className":3476,"code":25640,"language":3478,"meta":36,"style":36},"#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",[26,25642,25643,25649,25659,25665,25669,25673,25677,25685,25689,25694,25702,25706,25710,25724,25739,25747,25751,25756,25761,25766,25771,25783,25788,25793,25807,25824,25828,25836,25840,25846],{"__ignoreMap":36},[40,25644,25645,25647],{"class":42,"line":43},[40,25646,5276],{"class":1283},[40,25648,5279],{"class":94},[40,25650,25651,25653,25655,25657],{"class":42,"line":54},[40,25652,5284],{"class":1283},[40,25654,5287],{"class":1283},[40,25656,5290],{"class":596},[40,25658,4637],{"class":50},[40,25660,25661,25663],{"class":42,"line":70},[40,25662,18016],{"class":1283},[40,25664,18493],{"class":596},[40,25666,25667],{"class":42,"line":78},[40,25668,4888],{"class":50},[40,25670,25671],{"class":42,"line":86},[40,25672,18038],{"class":1283},[40,25674,25675],{"class":42,"line":100},[40,25676,25497],{"class":997},[40,25678,25679,25681,25683],{"class":42,"line":108},[40,25680,14342],{"class":1283},[40,25682,5708],{"class":1283},[40,25684,24713],{"class":50},[40,25686,25687],{"class":42,"line":121},[40,25688,18544],{"class":1283},[40,25690,25691],{"class":42,"line":134},[40,25692,25693],{"class":997},"    \u002F\u002F静态成员变量也是有访问权限的\n",[40,25695,25696,25698,25700],{"class":42,"line":146},[40,25697,14342],{"class":1283},[40,25699,5708],{"class":1283},[40,25701,24720],{"class":50},[40,25703,25704],{"class":42,"line":154},[40,25705,7318],{"class":50},[40,25707,25708],{"class":42,"line":162},[40,25709,25514],{"class":997},[40,25711,25712,25714,25716,25718,25720,25722],{"class":42,"line":170},[40,25713,3491],{"class":1283},[40,25715,18891],{"class":596},[40,25717,25523],{"class":50},[40,25719,1284],{"class":1283},[40,25721,3925],{"class":63},[40,25723,4637],{"class":50},[40,25725,25726,25728,25730,25733,25735,25737],{"class":42,"line":183},[40,25727,3491],{"class":1283},[40,25729,18891],{"class":596},[40,25731,25732],{"class":50},"::m_B",[40,25734,1284],{"class":1283},[40,25736,4178],{"class":63},[40,25738,4637],{"class":50},[40,25740,25741,25743,25745],{"class":42,"line":196},[40,25742,8687],{"class":1283},[40,25744,8980],{"class":596},[40,25746,5302],{"class":50},[40,25748,25749],{"class":42,"line":204},[40,25750,4888],{"class":50},[40,25752,25753],{"class":42,"line":217},[40,25754,25755],{"class":997},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[40,25757,25758],{"class":42,"line":230},[40,25759,25760],{"class":997},"    \u002F\u002F静态成员变量有两种访问方式：\n",[40,25762,25763],{"class":42,"line":238},[40,25764,25765],{"class":997},"    \u002F\u002F1.通过对象进行访问\n",[40,25767,25768],{"class":42,"line":251},[40,25769,25770],{"class":50},"    Person p;  \n",[40,25772,25773,25775,25777,25779,25781],{"class":42,"line":264},[40,25774,4893],{"class":50},[40,25776,4520],{"class":1283},[40,25778,25421],{"class":50},[40,25780,4520],{"class":1283},[40,25782,4542],{"class":50},[40,25784,25785],{"class":42,"line":277},[40,25786,25787],{"class":997},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[40,25789,25790],{"class":42,"line":290},[40,25791,25792],{"class":997},"    \u002F\u002F2.通过类名进行访问\n",[40,25794,25795,25797,25799,25801,25803,25805],{"class":42,"line":298},[40,25796,4893],{"class":50},[40,25798,4520],{"class":1283},[40,25800,22367],{"class":596},[40,25802,25523],{"class":50},[40,25804,4520],{"class":1283},[40,25806,4542],{"class":50},[40,25808,25809,25811,25813,25815,25817,25819,25821],{"class":42,"line":310},[40,25810,4893],{"class":50},[40,25812,4520],{"class":1283},[40,25814,22367],{"class":596},[40,25816,25732],{"class":50},[40,25818,4520],{"class":1283},[40,25820,4585],{"class":50},[40,25822,25823],{"class":997}," \u002F\u002F没有访问权限，报错\n",[40,25825,25826],{"class":42,"line":5086},[40,25827,4907],{"class":50},[40,25829,25830,25832,25834],{"class":42,"line":5091},[40,25831,3491],{"class":1283},[40,25833,5299],{"class":596},[40,25835,5302],{"class":50},[40,25837,25838],{"class":42,"line":5105},[40,25839,4888],{"class":50},[40,25841,25842,25844],{"class":42,"line":5110},[40,25843,9025],{"class":596},[40,25845,8959],{"class":50},[40,25847,25848],{"class":42,"line":5902},[40,25849,4907],{"class":50},[2423,25851,25853],{"id":25852},"_8282静态成员函数","8.2.8.2静态成员函数",[19,25855,25856],{},"1.静态成员函数定义与访问",[31,25858,25860],{"className":3476,"code":25859,"language":3478,"meta":36,"style":36},"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",[26,25861,25862,25868,25872,25876,25881,25892,25896,25910,25914,25918,25926,25930,25935,25940,25944,25952,25957,25967],{"__ignoreMap":36},[40,25863,25864,25866],{"class":42,"line":43},[40,25865,18016],{"class":1283},[40,25867,18493],{"class":596},[40,25869,25870],{"class":42,"line":54},[40,25871,4888],{"class":50},[40,25873,25874],{"class":42,"line":70},[40,25875,18038],{"class":1283},[40,25877,25878],{"class":42,"line":78},[40,25879,25880],{"class":997},"    \u002F\u002F在公共权限下定义静态成员函数\n",[40,25882,25883,25885,25888,25890],{"class":42,"line":86},[40,25884,14342],{"class":1283},[40,25886,25887],{"class":1283}," void",[40,25889,14707],{"class":596},[40,25891,5302],{"class":50},[40,25893,25894],{"class":42,"line":100},[40,25895,5356],{"class":50},[40,25897,25898,25901,25903,25906,25908],{"class":42,"line":108},[40,25899,25900],{"class":50},"        coout",[40,25902,4520],{"class":1283},[40,25904,25905],{"class":94},"\"静态成员函数的调用\"",[40,25907,4520],{"class":1283},[40,25909,4542],{"class":50},[40,25911,25912],{"class":42,"line":121},[40,25913,5513],{"class":50},[40,25915,25916],{"class":42,"line":134},[40,25917,7318],{"class":50},[40,25919,25920,25922,25924],{"class":42,"line":146},[40,25921,8687],{"class":1283},[40,25923,8911],{"class":596},[40,25925,5302],{"class":50},[40,25927,25928],{"class":42,"line":154},[40,25929,4888],{"class":50},[40,25931,25932],{"class":42,"line":162},[40,25933,25934],{"class":997},"    \u002F\u002F静态成员函数的调用方式:\n",[40,25936,25937],{"class":42,"line":170},[40,25938,25939],{"class":997},"    \u002F\u002F1.通过对象访问\n",[40,25941,25942],{"class":42,"line":183},[40,25943,18635],{"class":50},[40,25945,25946,25948,25950],{"class":42,"line":196},[40,25947,19188],{"class":50},[40,25949,14873],{"class":596},[40,25951,8959],{"class":50},[40,25953,25954],{"class":42,"line":204},[40,25955,25956],{"class":997},"    \u002F\u002F2.通过类名访问\n",[40,25958,25959,25961,25963,25965],{"class":42,"line":217},[40,25960,21840],{"class":596},[40,25962,21054],{"class":50},[40,25964,14873],{"class":596},[40,25966,8959],{"class":50},[40,25968,25969],{"class":42,"line":230},[40,25970,4907],{"class":50},[492,25972,25973],{"start":54},[495,25974,25975],{},"静态成员函数只能访问静态成员变量",[31,25977,25979],{"className":3476,"code":25978,"language":3478,"meta":36,"style":36},"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",[26,25980,25981,25987,25991,25995,25999,26009,26013,26027,26032,26044,26048,26059,26069,26073,26077,26081,26091,26095,26108,26112,26116,26120,26124,26138,26146,26150,26154,26158,26162,26170,26174,26184,26189,26193,26201,26205,26211],{"__ignoreMap":36},[40,25982,25983,25985],{"class":42,"line":43},[40,25984,18016],{"class":1283},[40,25986,18493],{"class":596},[40,25988,25989],{"class":42,"line":54},[40,25990,4888],{"class":50},[40,25992,25993],{"class":42,"line":70},[40,25994,18038],{"class":1283},[40,25996,25997],{"class":42,"line":78},[40,25998,25880],{"class":997},[40,26000,26001,26003,26005,26007],{"class":42,"line":86},[40,26002,14342],{"class":1283},[40,26004,25887],{"class":1283},[40,26006,14707],{"class":596},[40,26008,5302],{"class":50},[40,26010,26011],{"class":42,"line":100},[40,26012,5356],{"class":50},[40,26014,26015,26018,26020,26022,26024],{"class":42,"line":108},[40,26016,26017],{"class":50},"        m_A",[40,26019,1284],{"class":1283},[40,26021,3791],{"class":63},[40,26023,3540],{"class":50},[40,26025,26026],{"class":997}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[40,26028,26029],{"class":42,"line":121},[40,26030,26031],{"class":997},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[40,26033,26034,26036,26038,26040,26042],{"class":42,"line":134},[40,26035,25900],{"class":50},[40,26037,4520],{"class":1283},[40,26039,25905],{"class":94},[40,26041,4520],{"class":1283},[40,26043,4542],{"class":50},[40,26045,26046],{"class":42,"line":146},[40,26047,5513],{"class":50},[40,26049,26050,26052,26054,26056],{"class":42,"line":154},[40,26051,14342],{"class":1283},[40,26053,5708],{"class":1283},[40,26055,18770],{"class":50},[40,26057,26058],{"class":997}," \u002F\u002F静态成员变量\n",[40,26060,26061,26063,26066],{"class":42,"line":162},[40,26062,5311],{"class":1283},[40,26064,26065],{"class":50}," m_B;",[40,26067,26068],{"class":997}," \u002F\u002F非静态成员变量\n",[40,26070,26071],{"class":42,"line":170},[40,26072,1413],{"emptyLinePlaceholder":1412},[40,26074,26075],{"class":42,"line":183},[40,26076,18544],{"class":1283},[40,26078,26079],{"class":42,"line":196},[40,26080,25693],{"class":997},[40,26082,26083,26085,26087,26089],{"class":42,"line":204},[40,26084,14342],{"class":1283},[40,26086,25887],{"class":1283},[40,26088,16940],{"class":596},[40,26090,5302],{"class":50},[40,26092,26093],{"class":42,"line":217},[40,26094,5356],{"class":50},[40,26096,26097,26099,26101,26104,26106],{"class":42,"line":230},[40,26098,6775],{"class":50},[40,26100,4520],{"class":1283},[40,26102,26103],{"class":94},"\"这是私有权限下的静态函数调用\"",[40,26105,4520],{"class":1283},[40,26107,4542],{"class":50},[40,26109,26110],{"class":42,"line":238},[40,26111,5513],{"class":50},[40,26113,26114],{"class":42,"line":251},[40,26115,1413],{"emptyLinePlaceholder":1412},[40,26117,26118],{"class":42,"line":264},[40,26119,1413],{"emptyLinePlaceholder":1412},[40,26121,26122],{"class":42,"line":277},[40,26123,7318],{"class":50},[40,26125,26126,26128,26130,26132,26134,26136],{"class":42,"line":290},[40,26127,3491],{"class":1283},[40,26129,18891],{"class":596},[40,26131,25523],{"class":50},[40,26133,1284],{"class":1283},[40,26135,3672],{"class":63},[40,26137,4637],{"class":50},[40,26139,26140,26142,26144],{"class":42,"line":298},[40,26141,8687],{"class":1283},[40,26143,8911],{"class":596},[40,26145,5302],{"class":50},[40,26147,26148],{"class":42,"line":310},[40,26149,4888],{"class":50},[40,26151,26152],{"class":42,"line":5086},[40,26153,25934],{"class":997},[40,26155,26156],{"class":42,"line":5091},[40,26157,25939],{"class":997},[40,26159,26160],{"class":42,"line":5105},[40,26161,18635],{"class":50},[40,26163,26164,26166,26168],{"class":42,"line":5110},[40,26165,19188],{"class":50},[40,26167,14873],{"class":596},[40,26169,8959],{"class":50},[40,26171,26172],{"class":42,"line":5902},[40,26173,25956],{"class":997},[40,26175,26176,26178,26180,26182],{"class":42,"line":5916},[40,26177,21840],{"class":596},[40,26179,21054],{"class":50},[40,26181,14873],{"class":596},[40,26183,8959],{"class":50},[40,26185,26186],{"class":42,"line":5924},[40,26187,26188],{"class":997},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[40,26190,26191],{"class":42,"line":5929},[40,26192,4907],{"class":50},[40,26194,26195,26197,26199],{"class":42,"line":5935},[40,26196,3491],{"class":1283},[40,26198,5299],{"class":596},[40,26200,5302],{"class":50},[40,26202,26203],{"class":42,"line":5941},[40,26204,4888],{"class":50},[40,26206,26207,26209],{"class":42,"line":5946},[40,26208,8956],{"class":596},[40,26210,8959],{"class":50},[40,26212,26213],{"class":42,"line":11270},[40,26214,4907],{"class":50},[402,26216,26218],{"id":26217},"_83c对象模型和this指针","8.3C++对象模型和this指针",[2423,26220,26222],{"id":26221},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,26224,26225],{},"在c++中，类内的成员变量和成员函数分开存储",[19,26227,26228],{},"只有非静态成员变量才属于类的对象上",[26230,26231,26233],"h5",{"id":26232},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[31,26235,26237],{"className":3476,"code":26236,"language":3478,"meta":36,"style":36},"#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",[26,26238,26239,26246,26256,26262,26266,26270,26274,26282,26286,26290,26313,26317,26325,26329,26335],{"__ignoreMap":36},[40,26240,26241,26243],{"class":42,"line":43},[40,26242,5276],{"class":1283},[40,26244,26245],{"class":94},"\u003Ciostraem>\n",[40,26247,26248,26250,26252,26254],{"class":42,"line":54},[40,26249,5284],{"class":1283},[40,26251,5287],{"class":1283},[40,26253,5290],{"class":596},[40,26255,4637],{"class":50},[40,26257,26258,26260],{"class":42,"line":70},[40,26259,18016],{"class":1283},[40,26261,18493],{"class":596},[40,26263,26264],{"class":42,"line":78},[40,26265,4888],{"class":50},[40,26267,26268],{"class":42,"line":86},[40,26269,1413],{"emptyLinePlaceholder":1412},[40,26271,26272],{"class":42,"line":100},[40,26273,7318],{"class":50},[40,26275,26276,26278,26280],{"class":42,"line":108},[40,26277,8687],{"class":1283},[40,26279,8911],{"class":596},[40,26281,5302],{"class":50},[40,26283,26284],{"class":42,"line":121},[40,26285,4888],{"class":50},[40,26287,26288],{"class":42,"line":134},[40,26289,18635],{"class":50},[40,26291,26292,26294,26296,26299,26301,26304,26306,26308,26310],{"class":42,"line":146},[40,26293,4893],{"class":50},[40,26295,4520],{"class":1283},[40,26297,26298],{"class":94},"\"size of p=\"",[40,26300,4520],{"class":1283},[40,26302,26303],{"class":596},"sizeoif",[40,26305,9862],{"class":50},[40,26307,4520],{"class":1283},[40,26309,4585],{"class":50},[40,26311,26312],{"class":997}," \u002F\u002F查看这个空类的占用的内存空间\n",[40,26314,26315],{"class":42,"line":154},[40,26316,4907],{"class":50},[40,26318,26319,26321,26323],{"class":42,"line":162},[40,26320,3491],{"class":1283},[40,26322,5299],{"class":596},[40,26324,5302],{"class":50},[40,26326,26327],{"class":42,"line":170},[40,26328,4888],{"class":50},[40,26330,26331,26333],{"class":42,"line":183},[40,26332,8956],{"class":596},[40,26334,8959],{"class":50},[40,26336,26337],{"class":42,"line":196},[40,26338,4907],{"class":50},[19,26340,26341],{},"输出结果为：size of p=1",[19,26343,26344],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,26346,26347],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[26230,26349,26351],{"id":26350},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[31,26353,26355],{"className":3476,"code":26354,"language":3478,"meta":36,"style":36},"#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",[26,26356,26357,26363,26373,26381,26385,26394,26398,26406,26410,26414,26433,26437,26441,26449,26453,26459],{"__ignoreMap":36},[40,26358,26359,26361],{"class":42,"line":43},[40,26360,5276],{"class":1283},[40,26362,5279],{"class":94},[40,26364,26365,26367,26369,26371],{"class":42,"line":54},[40,26366,5284],{"class":1283},[40,26368,5287],{"class":1283},[40,26370,5290],{"class":596},[40,26372,4637],{"class":50},[40,26374,26375,26377,26379],{"class":42,"line":70},[40,26376,18016],{"class":1283},[40,26378,18891],{"class":596},[40,26380,67],{"class":50},[40,26382,26383],{"class":42,"line":78},[40,26384,4888],{"class":50},[40,26386,26387,26389,26391],{"class":42,"line":86},[40,26388,5311],{"class":1283},[40,26390,18770],{"class":50},[40,26392,26393],{"class":997},"\u002F\u002F非静态成员变量\n",[40,26395,26396],{"class":42,"line":100},[40,26397,7318],{"class":50},[40,26399,26400,26402,26404],{"class":42,"line":108},[40,26401,8687],{"class":1283},[40,26403,8911],{"class":596},[40,26405,5302],{"class":50},[40,26407,26408],{"class":42,"line":121},[40,26409,4888],{"class":50},[40,26411,26412],{"class":42,"line":134},[40,26413,18635],{"class":50},[40,26415,26416,26418,26420,26422,26424,26426,26428,26430],{"class":42,"line":146},[40,26417,4893],{"class":50},[40,26419,4520],{"class":1283},[40,26421,26298],{"class":94},[40,26423,4715],{"class":1283},[40,26425,9862],{"class":50},[40,26427,4520],{"class":1283},[40,26429,4585],{"class":50},[40,26431,26432],{"class":997}," \u002F\u002F查看不是空对象时占用多少内存\n",[40,26434,26435],{"class":42,"line":154},[40,26436,1413],{"emptyLinePlaceholder":1412},[40,26438,26439],{"class":42,"line":162},[40,26440,4907],{"class":50},[40,26442,26443,26445,26447],{"class":42,"line":170},[40,26444,3491],{"class":1283},[40,26446,5299],{"class":596},[40,26448,5302],{"class":50},[40,26450,26451],{"class":42,"line":183},[40,26452,4888],{"class":50},[40,26454,26455,26457],{"class":42,"line":196},[40,26456,8956],{"class":596},[40,26458,8959],{"class":50},[40,26460,26461],{"class":42,"line":204},[40,26462,4907],{"class":50},[19,26464,26465],{},"输出结果：size of p=4",[19,26467,26468],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[492,26470,26471],{},[495,26472,26473],{},"如果加上非静态成员变量，Person类修改如下",[31,26475,26477],{"className":3476,"code":26476,"language":3478,"meta":36,"style":36},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[26,26478,26479,26485,26489,26495,26503,26507,26512],{"__ignoreMap":36},[40,26480,26481,26483],{"class":42,"line":43},[40,26482,18016],{"class":1283},[40,26484,18493],{"class":596},[40,26486,26487],{"class":42,"line":54},[40,26488,4888],{"class":50},[40,26490,26491,26493],{"class":42,"line":70},[40,26492,5311],{"class":1283},[40,26494,24713],{"class":50},[40,26496,26497,26499,26501],{"class":42,"line":78},[40,26498,14342],{"class":1283},[40,26500,5708],{"class":1283},[40,26502,24720],{"class":50},[40,26504,26505],{"class":42,"line":86},[40,26506,7318],{"class":50},[40,26508,26509],{"class":42,"line":100},[40,26510,26511],{"class":997},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[40,26513,26514,26516,26518,26520,26522,26524],{"class":42,"line":108},[40,26515,3491],{"class":1283},[40,26517,18891],{"class":596},[40,26519,25732],{"class":50},[40,26521,1284],{"class":1283},[40,26523,3672],{"class":63},[40,26525,4637],{"class":50},[19,26527,26528],{},"输出结果：4",[19,26530,26531],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[492,26533,26534],{"start":54},[495,26535,26536],{},"加上非静态成员函数",[31,26538,26540],{"className":3476,"code":26539,"language":3478,"meta":36,"style":36},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[26,26541,26542,26549,26553,26559,26567,26571,26575,26579],{"__ignoreMap":36},[40,26543,26544,26546],{"class":42,"line":43},[40,26545,18016],{"class":1283},[40,26547,26548],{"class":596},"  Person\n",[40,26550,26551],{"class":42,"line":54},[40,26552,4888],{"class":50},[40,26554,26555,26557],{"class":42,"line":70},[40,26556,5311],{"class":1283},[40,26558,24713],{"class":50},[40,26560,26561,26563,26565],{"class":42,"line":78},[40,26562,18231],{"class":1283},[40,26564,14707],{"class":596},[40,26566,5302],{"class":50},[40,26568,26569],{"class":42,"line":86},[40,26570,5356],{"class":50},[40,26572,26573],{"class":42,"line":100},[40,26574,1413],{"emptyLinePlaceholder":1412},[40,26576,26577],{"class":42,"line":108},[40,26578,5513],{"class":50},[40,26580,26581],{"class":42,"line":121},[40,26582,7318],{"class":50},[19,26584,26585],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[492,26587,26588],{"start":70},[495,26589,26590],{},"加上静态成员函数",[31,26592,26594],{"className":3476,"code":26593,"language":3478,"meta":36,"style":36},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[26,26595,26596,26602,26606,26612,26620,26624,26628,26632,26643,26647,26651,26655],{"__ignoreMap":36},[40,26597,26598,26600],{"class":42,"line":43},[40,26599,18016],{"class":1283},[40,26601,26548],{"class":596},[40,26603,26604],{"class":42,"line":54},[40,26605,4888],{"class":50},[40,26607,26608,26610],{"class":42,"line":70},[40,26609,5311],{"class":1283},[40,26611,24713],{"class":50},[40,26613,26614,26616,26618],{"class":42,"line":78},[40,26615,18231],{"class":1283},[40,26617,14707],{"class":596},[40,26619,5302],{"class":50},[40,26621,26622],{"class":42,"line":86},[40,26623,5356],{"class":50},[40,26625,26626],{"class":42,"line":100},[40,26627,1413],{"emptyLinePlaceholder":1412},[40,26629,26630],{"class":42,"line":108},[40,26631,5513],{"class":50},[40,26633,26634,26636,26638,26641],{"class":42,"line":121},[40,26635,14342],{"class":1283},[40,26637,25887],{"class":1283},[40,26639,26640],{"class":596}," func1",[40,26642,5302],{"class":50},[40,26644,26645],{"class":42,"line":134},[40,26646,5356],{"class":50},[40,26648,26649],{"class":42,"line":146},[40,26650,1413],{"emptyLinePlaceholder":1412},[40,26652,26653],{"class":42,"line":154},[40,26654,5513],{"class":50},[40,26656,26657],{"class":42,"line":162},[40,26658,7318],{"class":50},[19,26660,26528],{},[19,26662,26663],{},"解释：静态成员函数也不属于类上",[3384,26665,10996],{},{"title":36,"searchDepth":54,"depth":54,"links":26667},[26668,26674],{"id":17967,"depth":54,"text":17968,"children":26669},[26670,26671,26672,26673],{"id":17971,"depth":70,"text":17972},{"id":18696,"depth":70,"text":18697},{"id":18868,"depth":70,"text":18869},{"id":19327,"depth":70,"text":19328},{"id":21699,"depth":54,"text":21700,"children":26675},[26676,26677,26678,26679,26680,26681,26682,26683,26684],{"id":21711,"depth":70,"text":21712},{"id":22003,"depth":70,"text":22004},{"id":22494,"depth":70,"text":22495},{"id":23591,"depth":70,"text":23592},{"id":24014,"depth":70,"text":24015},{"id":24493,"depth":70,"text":24494},{"id":24868,"depth":70,"text":24869},{"id":25281,"depth":70,"text":25282},{"id":26217,"depth":70,"text":26218},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":17932,"description":26685},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":26692,"title":3478,"body":26693,"description":3413,"extension":3414,"meta":26697,"navigation":1412,"path":26699,"seo":26700,"stem":26701,"__hash__":26702},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":26694,"toc":26695},[],{"title":36,"searchDepth":54,"depth":54,"links":26696},[],{"category":26698},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":3478,"description":3413},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":26704,"title":26705,"body":26706,"description":36,"extension":3414,"meta":27294,"navigation":1412,"path":27295,"seo":27296,"stem":27297,"__hash__":27298},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":26707,"toc":27276},[26708,26711,26715,26718,26721,26724,26742,26747,26750,26753,26756,26759,26764,26767,26772,26775,26778,26782,26785,26788,26794,26797,26815,26819,26823,26826,26831,26834,26838,26841,26854,26857,26861,26864,26867,26870,26894,26897,26906,26917,26932,26964,26968,26975,26983,26987,26990,26993,26998,27002,27005,27008,27013,27016,27020,27023,27026,27031,27034,27038,27043,27047,27114,27118,27121,27124,27127,27130,27133,27139,27159,27162,27176,27184,27188,27191,27194,27199,27202,27207,27212,27215,27218,27223,27228,27231,27236,27241,27244,27249,27254,27257,27260,27265,27268,27273],[10,26709,26705],{"id":26710},"_1强化学习基本认识",[14,26712,26714],{"id":26713},"_11什么是强化学习","1.1.什么是强化学习",[19,26716,26717],{},"强化学习有两部分组成：智能体和环境；",[19,26719,26720],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,26722,26723],{},"强化学习与监督学习的区别:",[492,26725,26726,26729,26732,26735],{},[495,26727,26728],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[495,26730,26731],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[495,26733,26734],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[495,26736,26737,26738,26741],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[409,26739,26740],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,26743,26744],{},[438,26745],{"alt":36,"src":26746},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,26748,26749],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,26751,26752],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,26754,26755],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,26757,26758],{},"获取奖励",[19,26760,26761],{},[438,26762],{"alt":36,"src":26763},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,26765,26766],{},"强化学习可以分成标准强化学习和深度强化学习",[19,26768,26769],{},[438,26770],{"alt":36,"src":26771},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,26773,26774],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,26776,26777],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,26779,26781],{"id":26780},"_12强化学习应用场景","1.2.强化学习应用场景",[19,26783,26784],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,26786,26787],{},"具身智能中的应用",[19,26789,26790,26793],{},[409,26791,26792],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,26795,26796],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,26798,26799,26800,26803,26804,26807,26808,26811,26812],{},"机器人是",[409,26801,26802],{},"躯体","，深度学习是",[409,26805,26806],{},"神经元****网络","，VLA是",[409,26809,26810],{},"通用的行为逻辑","，而强化学习是",[409,26813,26814],{},"教练",[14,26816,26818],{"id":26817},"_13序列决策","1.3.序列决策",[402,26820,26822],{"id":26821},"_131智能体与环境","1.3.1.智能体与环境",[19,26824,26825],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,26827,26828],{},[438,26829],{"alt":36,"src":26830},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,26832,26833],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[402,26835,26837],{"id":26836},"_132奖励","1.3.2.奖励",[19,26839,26840],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,26842,26843,26844,26853],{},"取某个策略的表现如何。强化学习的目的就是",[409,26845,26846,26847,26852],{},"最大化",[409,26848,26849],{},[409,26850,26851],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,26855,26856],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[402,26858,26860],{"id":26859},"_133序列决策","1.3.3.序列决策",[19,26862,26863],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,26865,26866],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,26868,26869],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,26871,26872,26875,26876,26878,26879,26881,26882,26884,26885,17117,26888,17117,26891],{},[1356,26873,26874],{},"Ht"," = ",[1356,26877,4075],{},"1*, a",[1356,26880,3698],{},", r",[1356,26883,3698],{},", . . . ,* ",[1356,26886,26887],{},"ot",[1356,26889,26890],{},", at ,",[1356,26892,26893],{},"rt",[19,26895,26896],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,26898,26899,26875,26902,4993,26904,3908],{},[1356,26900,26901],{},"st",[1356,26903,3537],{},[1356,26905,26874],{},[19,26907,26908,26909,26912,26913,26916],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[409,26910,26911],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[409,26914,26915],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,26918,26919,26920,26923,26924,26927,26928,26931],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[409,26921,26922],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[409,26925,26926],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[1356,26929,26930],{},"S, A, T, R, Ω, O, γ",")。",[19,26933,26934,26935,26937,26938,26940,26941,3488,26943,26946,26947,26949,26950,3488,26953,26956,26957,26959,26960,26963],{},"其中 ",[1356,26936,4167],{}," 表示状态空间，为隐变量，",[1356,26939,3713],{}," 为动作空间，",[1356,26942,4192],{},[1356,26944,26945],{},"s ′ |s, a",") 为状态转移概率，",[1356,26948,4142],{}," 为奖励函数，",[1356,26951,26952],{},"Ω",[1356,26954,26955],{},"o|s, a",") 为观测概率，",[1356,26958,4069],{}," 为观测空间，",[1356,26961,26962],{},"γ"," 为折扣因子。",[14,26965,26967],{"id":26966},"_14动作空间","1.4.动作空间",[19,26969,26970,26971,26974],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[409,26972,26973],{},"动作空间"," ，动作空间分为:",[492,26976,26977,26980],{},[495,26978,26979],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[495,26981,26982],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,26984,26986],{"id":26985},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,26988,26989],{},"由策略、价值函数、模型三部分组成",[19,26991,26992],{},"这三者组成马尔可夫决策过程",[19,26994,26995],{},[438,26996],{"alt":36,"src":26997},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[402,26999,27001],{"id":27000},"_151策略","1.5.1.策略",[19,27003,27004],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,27006,27007],{},"策略可分为两种：",[19,27009,27010],{},[438,27011],{"alt":36,"src":27012},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,27014,27015],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[402,27017,27019],{"id":27018},"_152价值函数","1.5.2.价值函数",[19,27021,27022],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,27024,27025],{},"价值函数中有一个折扣因子，类似于存款利息",[19,27027,27028],{},[438,27029],{"alt":36,"src":27030},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,27032,27033],{},"进入某个状态采取的最优动作可以通过Q函数得到",[402,27035,27037],{"id":27036},"_153模型","1.5.3.模型",[19,27039,27040],{},[438,27041],{"alt":36,"src":27042},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,27044,27046],{"id":27045},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[3619,27048,27049,27060],{},[3622,27050,27051],{},[3625,27052,27053,27057],{},[3628,27054,27056],{"align":27055},"left","类型",[3628,27058,27059],{"align":27055},"特点",[3665,27061,27062,27072,27082,27092,27104],{},[3625,27063,27064,27069],{},[3670,27065,27066],{"align":27055},[409,27067,27068],{},"基于价值的智能体",[3670,27070,27071],{"align":27055},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[3625,27073,27074,27079],{},[3670,27075,27076],{"align":27055},[409,27077,27078],{},"基于策略的智能体",[3670,27080,27081],{"align":27055},"直接学习策略，没有学习价值函数",[3625,27083,27084,27089],{},[3670,27085,27086],{"align":27055},[409,27087,27088],{},"演员-评论员智能体",[3670,27090,27091],{"align":27055},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[3625,27093,27094,27099],{},[3670,27095,27096],{"align":27055},[409,27097,27098],{},"有模型强化学习智能体",[3670,27100,27101],{"align":27055},[438,27102],{"alt":36,"src":27103},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[3625,27105,27106,27111],{},[3670,27107,27108],{"align":27055},[409,27109,27110],{},"免模型强化学习智能体",[3670,27112,27113],{"align":27055},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,27115,27117],{"id":27116},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,27119,27120],{},"学习和规划是序列决策的两个基本问题",[19,27122,27123],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,27125,27126],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,27128,27129],{},"强化学习用到的库：Gym",[19,27131,27132],{},"Gym可以检验强化学习算法的优劣",[19,27134,27135,27138],{},[409,27136,27137],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[31,27140,27144],{"className":27141,"code":27142,"language":27143,"meta":36,"style":36},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[26,27145,27146],{"__ignoreMap":36},[40,27147,27148,27151,27153,27156],{"class":42,"line":43},[40,27149,27150],{"class":596},"pip",[40,27152,929],{"class":94},[40,27154,27155],{"class":94}," gym==",[40,27157,27158],{"class":63},"0.25.2\n",[19,27160,27161],{},"显示图形界面需要",[31,27163,27165],{"className":27141,"code":27164,"language":27143,"meta":36,"style":36},"pip install pygame\n",[26,27166,27167],{"__ignoreMap":36},[40,27168,27169,27171,27173],{"class":42,"line":43},[40,27170,27150],{"class":596},[40,27172,929],{"class":94},[40,27174,27175],{"class":94}," pygame\n",[19,27177,27178,27179],{},"有关Gym库的相关文档介绍：",[2106,27180,27183],{"href":27181,"rel":27182},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[2110],"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,27185,27187],{"id":27186},"_18一些补充基础概念","1.8.一些补充基础概念",[19,27189,27190],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,27192,27193],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,27195,27196],{},[438,27197],{"alt":36,"src":27198},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,27200,27201],{},"折扣率需要自己来设定",[19,27203,27204],{},[438,27205],{"alt":36,"src":27206},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[492,27208,27209],{},[495,27210,27211],{},"状态转移函数：",[19,27213,27214],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,27216,27217],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,27219,27220],{},[438,27221],{"alt":36,"src":27222},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[492,27224,27225],{"start":54},[495,27226,27227],{},"动作价值函数：",[19,27229,27230],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,27232,27233],{},[438,27234],{"alt":36,"src":27235},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[492,27237,27238],{"start":70},[495,27239,27240],{},"最优动作价值函数：",[19,27242,27243],{},"这个函数是对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,27245,27246],{},[438,27247],{"alt":36,"src":27248},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[492,27250,27251],{"start":78},[495,27252,27253],{},"状态价值函数:",[19,27255,27256],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,27258,27259],{},"它衡量的是“一个具体动作”的长期价值",[19,27261,27262],{},[438,27263],{"alt":36,"src":27264},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,27266,27267],{},"几个价值函数之间的比较：",[19,27269,27270],{},[438,27271],{"alt":36,"src":27272},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[3384,27274,27275],{},"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":36,"searchDepth":54,"depth":54,"links":27277},[27278,27279,27280,27285,27286,27291,27292,27293],{"id":26713,"depth":54,"text":26714},{"id":26780,"depth":54,"text":26781},{"id":26817,"depth":54,"text":26818,"children":27281},[27282,27283,27284],{"id":26821,"depth":70,"text":26822},{"id":26836,"depth":70,"text":26837},{"id":26859,"depth":70,"text":26860},{"id":26966,"depth":54,"text":26967},{"id":26985,"depth":54,"text":26986,"children":27287},[27288,27289,27290],{"id":27000,"depth":70,"text":27001},{"id":27018,"depth":70,"text":27019},{"id":27036,"depth":70,"text":27037},{"id":27045,"depth":54,"text":27046},{"id":27116,"depth":54,"text":27117},{"id":27186,"depth":54,"text":27187},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":26705,"description":36},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":27300,"title":27301,"body":27302,"description":27309,"extension":3414,"meta":27320,"navigation":1412,"path":27321,"seo":27322,"stem":27323,"__hash__":27324},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":27303,"toc":27318},[27304,27307,27310,27315],[10,27305,27301],{"id":27306},"_2马尔可夫决策过程",[19,27308,27309],{},"这是强化学习的基本框架",[19,27311,27312],{},[438,27313],{"alt":36,"src":27314},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,27316,27317],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":36,"searchDepth":54,"depth":54,"links":27319},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":27301,"description":27309},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":27326,"title":27327,"body":27328,"description":36,"extension":3414,"meta":27444,"navigation":1412,"path":27445,"seo":27446,"stem":27447,"__hash__":27448},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":27329,"toc":27439},[27330,27333,27337,27340,27345,27350,27353,27358,27361,27366,27369,27373,27378,27381,27386,27391,27396,27399,27403,27408,27411,27416,27421,27426,27431,27434],[10,27331,27327],{"id":27332},"_3动作价值函数",[14,27334,27336],{"id":27335},"_31dqn","3.1.DQN",[19,27338,27339],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,27341,27342],{},[438,27343],{"alt":36,"src":27344},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,27346,27347],{},[438,27348],{"alt":36,"src":27349},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,27351,27352],{},"DQN算法的描述：",[19,27354,27355],{},[438,27356],{"alt":36,"src":27357},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,27359,27360],{},"这里的Dense指的是全连接层",[19,27362,27363],{},[438,27364],{"alt":36,"src":27365},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,27367,27368],{},"当前观测的状态为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算法",[14,27370,27372],{"id":27371},"_32dqn的举例","3.2.DQN的举例",[19,27374,27375],{},[438,27376],{"alt":36,"src":27377},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,27379,27380],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,27382,27383],{},[438,27384],{"alt":36,"src":27385},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,27387,27388],{},[438,27389],{"alt":36,"src":27390},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,27392,27393],{},[438,27394],{"alt":36,"src":27395},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,27397,27398],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,27400,27402],{"id":27401},"_33td算法","3.3.TD算法",[19,27404,27405],{},[438,27406],{"alt":36,"src":27407},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,27409,27410],{},"强化学习TD算法公式的粗略解释：",[19,27412,27413],{},[438,27414],{"alt":36,"src":27415},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,27417,27418],{},[438,27419],{"alt":36,"src":27420},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,27422,27423],{},[438,27424],{"alt":36,"src":27425},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,27427,27428],{},[438,27429],{"alt":36,"src":27430},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,27432,27433],{},"TD算法总结：",[19,27435,27436],{},[438,27437],{"alt":36,"src":27438},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":36,"searchDepth":54,"depth":54,"links":27440},[27441,27442,27443],{"id":27335,"depth":54,"text":27336},{"id":27371,"depth":54,"text":27372},{"id":27401,"depth":54,"text":27402},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":27327,"description":36},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":27450,"title":27451,"body":27452,"description":36,"extension":3414,"meta":27685,"navigation":1412,"path":27686,"seo":27687,"stem":27688,"__hash__":27689},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":27453,"toc":27681},[27454,27457,27461,27464,27467,27472,27477,27480,27485,27490,27493,27498,27501,27506,27509,27514,27517,27522,27525,27530,27535,27538,27543,27546,27549,27554,27557,27562,27567,27571,27574,27577,27582,27587,27590,27595,27600,27603,27608,27611,27614,27619,27622,27627,27630,27635,27640,27643,27648,27653,27656,27661,27664,27669,27672],[10,27455,27451],{"id":27456},"_4策略学习",[14,27458,27460],{"id":27459},"_41概念描述","4.1.概念描述",[19,27462,27463],{},"用神经网络（策略网络）近似策略函数",[19,27465,27466],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,27468,27469],{},[438,27470],{"alt":36,"src":27471},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,27473,27474],{},[438,27475],{"alt":36,"src":27476},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,27478,27479],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,27481,27482],{},[438,27483],{"alt":36,"src":27484},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,27486,27487],{},[438,27488],{"alt":36,"src":27489},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,27491,27492],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,27494,27495],{},[438,27496],{"alt":36,"src":27497},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,27499,27500],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,27502,27503],{},[438,27504],{"alt":36,"src":27505},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,27507,27508],{},"改进theta要用到策略梯度算法",[19,27510,27511],{},[438,27512],{"alt":36,"src":27513},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,27515,27516],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,27518,27519],{},[438,27520],{"alt":36,"src":27521},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,27523,27524],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,27526,27527],{},[438,27528],{"alt":36,"src":27529},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,27531,27532],{},[438,27533],{"alt":36,"src":27534},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,27536,27537],{},"梯度公式总结：",[19,27539,27540],{},[438,27541],{"alt":36,"src":27542},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,27544,27545],{},"两个公式的分别应用场景：",[19,27547,27548],{},"对于离散的动作：",[19,27550,27551],{},[438,27552],{"alt":36,"src":27553},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,27555,27556],{},"对于连续的动作：",[19,27558,27559],{},[438,27560],{"alt":36,"src":27561},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,27563,27564],{},[438,27565],{"alt":36,"src":27566},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,27568,27570],{"id":27569},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,27572,27573],{},"使用蒙特卡洛来近似计算策略梯度",[19,27575,27576],{},"蒙特卡洛法的解释如下：",[19,27578,27579],{},[438,27580],{"alt":36,"src":27581},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,27583,27584],{},[438,27585],{"alt":36,"src":27586},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,27588,27589],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[492,27591,27592],{},[495,27593,27594],{},"方法一：reinforce算法",[19,27596,27597],{},[438,27598],{"alt":36,"src":27599},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,27601,27602],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[492,27604,27605],{"start":54},[495,27606,27607],{},"方法二：actor-critic算法",[19,27609,27610],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,27612,27613],{},"两个网络的构建：",[19,27615,27616],{},[438,27617],{"alt":36,"src":27618},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,27620,27621],{},"actor网路：",[19,27623,27624],{},[438,27625],{"alt":36,"src":27626},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,27628,27629],{},"critic网络",[19,27631,27632],{},[438,27633],{"alt":36,"src":27634},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[492,27636,27637],{"start":70},[495,27638,27639],{},"网络的训练",[19,27641,27642],{},"网络描述",[19,27644,27645],{},[438,27646],{"alt":36,"src":27647},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,27649,27650],{},[438,27651],{"alt":36,"src":27652},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,27654,27655],{},"TD算法更新梯度：",[19,27657,27658],{},[438,27659],{"alt":36,"src":27660},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,27662,27663],{},"策略网络更新梯度：",[19,27665,27666],{},[438,27667],{"alt":36,"src":27668},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,27670,27671],{},"训练整个流程的具体描述：",[19,27673,27674,27677,27678],{},[438,27675],{"alt":36,"src":27676},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[438,27679],{"alt":36,"src":27680},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":36,"searchDepth":54,"depth":54,"links":27682},[27683,27684],{"id":27459,"depth":54,"text":27460},{"id":27569,"depth":54,"text":27570},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":27451,"description":36},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":27691,"title":27692,"body":27693,"description":27700,"extension":3414,"meta":27750,"navigation":1412,"path":27751,"seo":27752,"stem":27753,"__hash__":27754},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":27694,"toc":27746},[27695,27698,27701,27705,27708,27713,27717,27720,27725,27728,27733,27738,27741],[10,27696,27692],{"id":27697},"_5alphago算法",[19,27699,27700],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,27702,27704],{"id":27703},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,27706,27707],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,27709,27710],{},[438,27711],{"alt":36,"src":27712},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,27714,27716],{"id":27715},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,27718,27719],{},"采用强化学习的方式训练策略网络",[19,27721,27722],{},[438,27723],{"alt":36,"src":27724},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,27726,27727],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,27729,27730],{},[438,27731],{"alt":36,"src":27732},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,27734,27735],{},[438,27736],{"alt":36,"src":27737},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,27739,27740],{},"强化学习训练策略网络的总结：",[19,27742,27743],{},[438,27744],{"alt":36,"src":27745},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":36,"searchDepth":54,"depth":54,"links":27747},[27748,27749],{"id":27703,"depth":54,"text":27704},{"id":27715,"depth":54,"text":27716},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":27692,"description":27700},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":27756,"title":27757,"body":27758,"description":27765,"extension":3414,"meta":27768,"navigation":1412,"path":27769,"seo":27770,"stem":27771,"__hash__":27772},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":27759,"toc":27766},[27760,27763],[10,27761,27757],{"id":27762},"_6价值网络",[19,27764,27765],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":36,"searchDepth":54,"depth":54,"links":27767},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":27757,"description":27765},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":27774,"title":27775,"body":27776,"description":27780,"extension":3414,"meta":27781,"navigation":1412,"path":27782,"seo":27783,"stem":27784,"__hash__":27785},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":27777,"toc":27778},[],{"title":36,"searchDepth":54,"depth":54,"links":27779},[],"记录自己的强化学习笔记。",{"category":26698},"\u002Fwiki\u002F2025-12-04",{"title":27775,"description":27780},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":27787,"title":27788,"body":27789,"description":3413,"extension":3414,"meta":27828,"navigation":1412,"path":27829,"seo":27830,"stem":27831,"__hash__":27832},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":27790,"toc":27826},[27791,27794,27797,27803,27806,27812,27815,27820,27823],[10,27792,27788],{"id":27793},"_1-项目概览与官方资源",[19,27795,27796],{},"官方文档：",[19,27798,27799],{},[2106,27800,27801],{"href":27801,"rel":27802},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[2110],[19,27804,27805],{},"官方代码仓库：",[19,27807,27808],{},[2106,27809,27810],{"href":27810,"rel":27811},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[2110],[19,27813,27814],{},"复现大体流程：",[19,27816,27817],{},[438,27818],{"alt":36,"src":27819},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,27821,27822],{},"本教程的目标是打通这条链路：",[19,27824,27825],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":36,"searchDepth":54,"depth":54,"links":27827},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":27788,"description":3413},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":27834,"title":27835,"body":27836,"description":3413,"extension":3414,"meta":27949,"navigation":1412,"path":27950,"seo":27951,"stem":27952,"__hash__":27953},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":27837,"toc":27944},[27838,27841,27845,27848,27855,27859,27862,27871,27881,27885,27913,27916,27941],[10,27839,27835],{"id":27840},"_2-环境准备与设备连接",[14,27842,27844],{"id":27843},"_21-系统与环境","2.1 系统与环境",[19,27846,27847],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,27849,27850,27851,27854],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[26,27852,27853],{},"lerobot"," 依赖。",[14,27856,27858],{"id":27857},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,27860,27861],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[31,27863,27865],{"className":27141,"code":27864,"language":27143,"meta":36,"style":36},"lerobot-find-out\n",[26,27866,27867],{"__ignoreMap":36},[40,27868,27869],{"class":42,"line":43},[40,27870,27864],{"class":596},[19,27872,27873,27874,3693,27877,27880],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[26,27875,27876],{},"\u002Fdev\u002FttyACM0",[26,27878,27879],{},"\u002Fdev\u002FttyACM1","）。",[14,27882,27884],{"id":27883},"_23-串口授权","2.3 串口授权",[31,27886,27888],{"className":27141,"code":27887,"language":27143,"meta":36,"style":36},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[26,27889,27890,27902],{"__ignoreMap":36},[40,27891,27892,27894,27896,27899],{"class":42,"line":43},[40,27893,923],{"class":596},[40,27895,3181],{"class":94},[40,27897,27898],{"class":63}," 666",[40,27900,27901],{"class":94}," \u002Fdev\u002FttyACM0\n",[40,27903,27904,27906,27908,27910],{"class":42,"line":54},[40,27905,923],{"class":596},[40,27907,3181],{"class":94},[40,27909,27898],{"class":63},[40,27911,27912],{"class":94}," \u002Fdev\u002FttyACM1\n",[19,27914,27915],{},"说明：",[1338,27917,27918,27923,27928,27938],{},[495,27919,27920,27922],{},[26,27921,923],{},"：以 root 权限执行命令。",[495,27924,27925,27927],{},[26,27926,1039],{},"：修改设备节点权限。",[495,27929,27930,27933,27934,27937],{},[26,27931,27932],{},"666","：",[26,27935,27936],{},"rw-rw-rw-","，所有用户可读写。",[495,27939,27940],{},"串口号必须替换为你机器上的真实端口。",[3384,27942,27943],{},"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":36,"searchDepth":54,"depth":54,"links":27945},[27946,27947,27948],{"id":27843,"depth":54,"text":27844},{"id":27857,"depth":54,"text":27858},{"id":27883,"depth":54,"text":27884},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":27835,"description":3413},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":27955,"title":27956,"body":27957,"description":3413,"extension":3414,"meta":28118,"navigation":1412,"path":28119,"seo":28120,"stem":28121,"__hash__":28122},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":27958,"toc":28114},[27959,27963,27967,27973,27976,28033,28036,28040,28043,28111],[10,27960,27962],{"id":27961},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,27964,27966],{"id":27965},"_31-配置电机-id","3.1 配置电机 ID",[19,27968,27969,27970,27972],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[26,27971,3698],{},"，需要改成机械臂链路里不冲突的编号。",[19,27974,27975],{},"方式一：用 LeRobot 命令逐步写入。",[31,27977,27979],{"className":27141,"code":27978,"language":27143,"meta":36,"style":36},"# 主臂舵机配置 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",[26,27980,27981,27986,27994,28001,28006,28010,28015,28021,28028],{"__ignoreMap":36},[40,27982,27983],{"class":42,"line":43},[40,27984,27985],{"class":997},"# 主臂舵机配置 ID\n",[40,27987,27988,27991],{"class":42,"line":54},[40,27989,27990],{"class":596},"lerobot-setup-motors",[40,27992,27993],{"class":63}," \\\n",[40,27995,27996,27999],{"class":42,"line":70},[40,27997,27998],{"class":63},"  --teleop.type=so101_leader",[40,28000,27993],{"class":63},[40,28002,28003],{"class":42,"line":78},[40,28004,28005],{"class":63},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[40,28007,28008],{"class":42,"line":86},[40,28009,1413],{"emptyLinePlaceholder":1412},[40,28011,28012],{"class":42,"line":100},[40,28013,28014],{"class":997},"# 从臂舵机配置 ID\n",[40,28016,28017,28019],{"class":42,"line":108},[40,28018,27990],{"class":596},[40,28020,27993],{"class":63},[40,28022,28023,28026],{"class":42,"line":121},[40,28024,28025],{"class":63},"  --robot.type=so101_follower",[40,28027,27993],{"class":63},[40,28029,28030],{"class":42,"line":134},[40,28031,28032],{"class":63},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,28034,28035],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,28037,28039],{"id":28038},"_32-机械臂校准","3.2 机械臂校准",[19,28041,28042],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[31,28044,28046],{"className":27141,"code":28045,"language":27143,"meta":36,"style":36},"# 主臂校准\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",[26,28047,28048,28053,28060,28066,28073,28078,28082,28087,28093,28099,28106],{"__ignoreMap":36},[40,28049,28050],{"class":42,"line":43},[40,28051,28052],{"class":997},"# 主臂校准\n",[40,28054,28055,28058],{"class":42,"line":54},[40,28056,28057],{"class":596},"lerobot-calibrate",[40,28059,27993],{"class":63},[40,28061,28062,28064],{"class":42,"line":70},[40,28063,27998],{"class":63},[40,28065,27993],{"class":63},[40,28067,28068,28071],{"class":42,"line":78},[40,28069,28070],{"class":63},"  --teleop.port=\u002Fdev\u002FttyACM0",[40,28072,27993],{"class":63},[40,28074,28075],{"class":42,"line":86},[40,28076,28077],{"class":63},"  --teleop.id=my_awesome_leader_arm\n",[40,28079,28080],{"class":42,"line":100},[40,28081,1413],{"emptyLinePlaceholder":1412},[40,28083,28084],{"class":42,"line":108},[40,28085,28086],{"class":997},"# 从臂校准\n",[40,28088,28089,28091],{"class":42,"line":121},[40,28090,28057],{"class":596},[40,28092,27993],{"class":63},[40,28094,28095,28097],{"class":42,"line":134},[40,28096,28025],{"class":63},[40,28098,27993],{"class":63},[40,28100,28101,28104],{"class":42,"line":146},[40,28102,28103],{"class":63},"  --robot.port=\u002Fdev\u002FttyACM1",[40,28105,27993],{"class":63},[40,28107,28108],{"class":42,"line":154},[40,28109,28110],{"class":63},"  --robot.id=my_awesome_follower_arm\n",[3384,28112,28113],{},"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":36,"searchDepth":54,"depth":54,"links":28115},[28116,28117],{"id":27965,"depth":54,"text":27966},{"id":28038,"depth":54,"text":28039},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":27956,"description":3413},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":28124,"title":28125,"body":28126,"description":3413,"extension":3414,"meta":28317,"navigation":1412,"path":28318,"seo":28319,"stem":28320,"__hash__":28321},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":28127,"toc":28313},[28128,28131,28135,28182,28186,28199,28262,28265,28310],[10,28129,28125],{"id":28130},"_4-遥操与相机接入",[14,28132,28134],{"id":28133},"_41-不带相机遥操","4.1 不带相机遥操",[31,28136,28138],{"className":27141,"code":28137,"language":27143,"meta":36,"style":36},"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",[26,28139,28140,28147,28153,28159,28166,28172,28178],{"__ignoreMap":36},[40,28141,28142,28145],{"class":42,"line":43},[40,28143,28144],{"class":596},"lerobot-teleoperate",[40,28146,27993],{"class":63},[40,28148,28149,28151],{"class":42,"line":54},[40,28150,28025],{"class":63},[40,28152,27993],{"class":63},[40,28154,28155,28157],{"class":42,"line":70},[40,28156,28103],{"class":63},[40,28158,27993],{"class":63},[40,28160,28161,28164],{"class":42,"line":78},[40,28162,28163],{"class":63},"  --robot.id=my_awesome_follower_arm",[40,28165,27993],{"class":63},[40,28167,28168,28170],{"class":42,"line":86},[40,28169,27998],{"class":63},[40,28171,27993],{"class":63},[40,28173,28174,28176],{"class":42,"line":100},[40,28175,28070],{"class":63},[40,28177,27993],{"class":63},[40,28179,28180],{"class":42,"line":108},[40,28181,28077],{"class":63},[14,28183,28185],{"id":28184},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[31,28187,28189],{"className":27141,"code":28188,"language":27143,"meta":36,"style":36},"lerobot-find-cameras opencv\n",[26,28190,28191],{"__ignoreMap":36},[40,28192,28193,28196],{"class":42,"line":43},[40,28194,28195],{"class":596},"lerobot-find-cameras",[40,28197,28198],{"class":94}," opencv\n",[31,28200,28202],{"className":27141,"code":28201,"language":27143,"meta":36,"style":36},"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",[26,28203,28204,28210,28216,28222,28228,28238,28244,28250,28257],{"__ignoreMap":36},[40,28205,28206,28208],{"class":42,"line":43},[40,28207,28144],{"class":596},[40,28209,27993],{"class":63},[40,28211,28212,28214],{"class":42,"line":54},[40,28213,28025],{"class":63},[40,28215,27993],{"class":63},[40,28217,28218,28220],{"class":42,"line":70},[40,28219,28103],{"class":63},[40,28221,27993],{"class":63},[40,28223,28224,28226],{"class":42,"line":78},[40,28225,28163],{"class":63},[40,28227,27993],{"class":63},[40,28229,28230,28233,28236],{"class":42,"line":86},[40,28231,28232],{"class":63},"  --robot.cameras=",[40,28234,28235],{"class":94},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[40,28237,27993],{"class":63},[40,28239,28240,28242],{"class":42,"line":100},[40,28241,27998],{"class":63},[40,28243,27993],{"class":63},[40,28245,28246,28248],{"class":42,"line":108},[40,28247,28070],{"class":63},[40,28249,27993],{"class":63},[40,28251,28252,28255],{"class":42,"line":121},[40,28253,28254],{"class":63},"  --teleop.id=my_awesome_leader_arm",[40,28256,27993],{"class":63},[40,28258,28259],{"class":42,"line":134},[40,28260,28261],{"class":63},"  --display_data=true\n",[19,28263,28264],{},"相机参数说明：",[1338,28266,28267,28273,28279,28288,28298,28304],{},[495,28268,28269,28272],{},[26,28270,28271],{},"front","：相机名称。",[495,28274,28275,28278],{},[26,28276,28277],{},"type: opencv","：相机驱动类型。",[495,28280,28281,28284,28285,27880],{},[26,28282,28283],{},"index_or_path","：设备编号或设备路径（如 ",[26,28286,28287],{},"\u002Fdev\u002Fvideo4",[495,28289,28290,28293,28294,28297],{},[26,28291,28292],{},"width"," \u002F ",[26,28295,28296],{},"height","：图像分辨率。",[495,28299,28300,28303],{},[26,28301,28302],{},"fps","：采样帧率。",[495,28305,28306,28309],{},[26,28307,28308],{},"--display_data=true","：启用实时可视化。",[3384,28311,28312],{},"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":36,"searchDepth":54,"depth":54,"links":28314},[28315,28316],{"id":28133,"depth":54,"text":28134},{"id":28184,"depth":54,"text":28185},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":28125,"description":3413},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":28323,"title":28324,"body":28325,"description":3413,"extension":3414,"meta":28495,"navigation":1412,"path":28496,"seo":28497,"stem":28498,"__hash__":28499},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":28326,"toc":28490},[28327,28331,28335,28340,28345,28348,28390,28396,28400,28447,28452,28456,28459,28467,28472,28477,28482,28487],[10,28328,28330],{"id":28329},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,28332,28334],{"id":28333},"_51-生成访问令牌","5.1 生成访问令牌",[19,28336,28337],{},[438,28338],{"alt":36,"src":28339},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,28341,28342],{},[438,28343],{"alt":36,"src":28344},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,28346,28347],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[31,28349,28351],{"className":27141,"code":28350,"language":27143,"meta":36,"style":36},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[26,28352,28353,28366],{"__ignoreMap":36},[40,28354,28355,28358,28361,28363],{"class":42,"line":43},[40,28356,28357],{"class":1283},"export",[40,28359,28360],{"class":50}," HF_TOKEN",[40,28362,1284],{"class":1283},[40,28364,28365],{"class":94},"\"your_huggingface_token\"\n",[40,28367,28368,28371,28374,28377,28380,28382,28385,28387],{"class":42,"line":54},[40,28369,28370],{"class":596},"hf",[40,28372,28373],{"class":94}," auth",[40,28375,28376],{"class":94}," login",[40,28378,28379],{"class":63}," --token",[40,28381,13046],{"class":94},[40,28383,28384],{"class":50},"$HF_TOKEN",[40,28386,3731],{"class":94},[40,28388,28389],{"class":63}," --add-to-git-credential\n",[19,28391,28392,28395],{},[26,28393,28394],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,28397,28399],{"id":28398},"_52-验证登录","5.2 验证登录",[31,28401,28403],{"className":27141,"code":28402,"language":27143,"meta":36,"style":36},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[26,28404,28405,28434],{"__ignoreMap":36},[40,28406,28407,28410,28412,28415,28417,28419,28422,28424,28427,28429,28432],{"class":42,"line":43},[40,28408,28409],{"class":50},"HF_USER",[40,28411,1284],{"class":1283},[40,28413,28414],{"class":50},"$(",[40,28416,28370],{"class":596},[40,28418,28373],{"class":94},[40,28420,28421],{"class":94}," whoami",[40,28423,1465],{"class":1283},[40,28425,28426],{"class":596}," head",[40,28428,1805],{"class":63},[40,28430,28431],{"class":63}," 1",[40,28433,1811],{"class":50},[40,28435,28436,28439,28441,28444],{"class":42,"line":54},[40,28437,28438],{"class":63},"echo",[40,28440,13046],{"class":94},[40,28442,28443],{"class":50},"$HF_USER",[40,28445,28446],{"class":94},"\"\n",[19,28448,28449],{},[438,28450],{"alt":36,"src":28451},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,28453,28455],{"id":28454},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,28457,28458],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1338,28460,28461,28464],{},[495,28462,28463],{},"Dataset Repo（用于上传演示数据）",[495,28465,28466],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,28468,28469],{},[438,28470],{"alt":36,"src":28471},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,28473,28474],{},[438,28475],{"alt":36,"src":28476},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,28478,28479],{},[438,28480],{"alt":36,"src":28481},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,28483,28484],{},[438,28485],{"alt":36,"src":28486},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[3384,28488,28489],{},"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":36,"searchDepth":54,"depth":54,"links":28491},[28492,28493,28494],{"id":28333,"depth":54,"text":28334},{"id":28398,"depth":54,"text":28399},{"id":28454,"depth":54,"text":28455},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":28324,"description":3413},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":28501,"title":28502,"body":28503,"description":3413,"extension":3414,"meta":28700,"navigation":1412,"path":28701,"seo":28702,"stem":28703,"__hash__":28704},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":28504,"toc":28695},[28505,28509,28513,28609,28617,28622,28626,28642,28645,28649,28692],[10,28506,28508],{"id":28507},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,28510,28512],{"id":28511},"_61-录制示教数据","6.1 录制示教数据",[31,28514,28516],{"className":27141,"code":28515,"language":27143,"meta":36,"style":36},"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",[26,28517,28518,28525,28531,28537,28543,28552,28558,28564,28570,28577,28587,28594,28604],{"__ignoreMap":36},[40,28519,28520,28523],{"class":42,"line":43},[40,28521,28522],{"class":596},"lerobot-record",[40,28524,27993],{"class":63},[40,28526,28527,28529],{"class":42,"line":54},[40,28528,28025],{"class":63},[40,28530,27993],{"class":63},[40,28532,28533,28535],{"class":42,"line":70},[40,28534,28103],{"class":63},[40,28536,27993],{"class":63},[40,28538,28539,28541],{"class":42,"line":78},[40,28540,28163],{"class":63},[40,28542,27993],{"class":63},[40,28544,28545,28547,28550],{"class":42,"line":86},[40,28546,28232],{"class":63},[40,28548,28549],{"class":94},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[40,28551,27993],{"class":63},[40,28553,28554,28556],{"class":42,"line":100},[40,28555,27998],{"class":63},[40,28557,27993],{"class":63},[40,28559,28560,28562],{"class":42,"line":108},[40,28561,28070],{"class":63},[40,28563,27993],{"class":63},[40,28565,28566,28568],{"class":42,"line":121},[40,28567,28254],{"class":63},[40,28569,27993],{"class":63},[40,28571,28572,28575],{"class":42,"line":134},[40,28573,28574],{"class":63},"  --display_data=true",[40,28576,27993],{"class":63},[40,28578,28579,28582,28585],{"class":42,"line":146},[40,28580,28581],{"class":63},"  --dataset.repo_id=",[40,28583,28584],{"class":94},"\"Embodied-AI-6\u002Fso101_test\"",[40,28586,27993],{"class":63},[40,28588,28589,28592],{"class":42,"line":154},[40,28590,28591],{"class":63},"  --dataset.num_episodes=10",[40,28593,27993],{"class":63},[40,28595,28596,28599,28602],{"class":42,"line":162},[40,28597,28598],{"class":63},"  --dataset.single_task=",[40,28600,28601],{"class":94},"\"Grab the green cube\"",[40,28603,27993],{"class":63},[40,28605,28606],{"class":42,"line":170},[40,28607,28608],{"class":63},"  --resume=true\n",[1338,28610,28611],{},[495,28612,28613,28616],{},[26,28614,28615],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,28618,28619],{},[438,28620],{"alt":36,"src":28621},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,28623,28625],{"id":28624},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[31,28627,28629],{"className":27141,"code":28628,"language":27143,"meta":36,"style":36},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[26,28630,28631],{"__ignoreMap":36},[40,28632,28633,28636,28639],{"class":42,"line":43},[40,28634,28635],{"class":596},"rm",[40,28637,28638],{"class":63}," -rf",[40,28640,28641],{"class":94}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,28643,28644],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,28646,28648],{"id":28647},"_63-回放指定-episode","6.3 回放指定 episode",[31,28650,28652],{"className":27141,"code":28651,"language":27143,"meta":36,"style":36},"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",[26,28653,28654,28661,28667,28673,28679,28687],{"__ignoreMap":36},[40,28655,28656,28659],{"class":42,"line":43},[40,28657,28658],{"class":596},"lerobot-replay",[40,28660,27993],{"class":63},[40,28662,28663,28665],{"class":42,"line":54},[40,28664,28025],{"class":63},[40,28666,27993],{"class":63},[40,28668,28669,28671],{"class":42,"line":70},[40,28670,28103],{"class":63},[40,28672,27993],{"class":63},[40,28674,28675,28677],{"class":42,"line":78},[40,28676,28163],{"class":63},[40,28678,27993],{"class":63},[40,28680,28681,28683,28685],{"class":42,"line":86},[40,28682,28581],{"class":63},[40,28684,28584],{"class":94},[40,28686,27993],{"class":63},[40,28688,28689],{"class":42,"line":100},[40,28690,28691],{"class":63},"  --dataset.episode=0\n",[3384,28693,28694],{},"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":36,"searchDepth":54,"depth":54,"links":28696},[28697,28698,28699],{"id":28511,"depth":54,"text":28512},{"id":28624,"depth":54,"text":28625},{"id":28647,"depth":54,"text":28648},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":28502,"description":3413},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":28706,"title":28707,"body":28708,"description":3413,"extension":3414,"meta":28836,"navigation":1412,"path":28837,"seo":28838,"stem":28839,"__hash__":28840},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":28709,"toc":28834},[28710,28714,28777,28780,28827,28832],[10,28711,28713],{"id":28712},"_7-act-模型训练","7. ACT 模型训练",[31,28715,28717],{"className":27141,"code":28716,"language":27143,"meta":36,"style":36},"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",[26,28718,28719,28726,28734,28741,28748,28755,28762,28769],{"__ignoreMap":36},[40,28720,28721,28724],{"class":42,"line":43},[40,28722,28723],{"class":596},"lerobot-train",[40,28725,27993],{"class":63},[40,28727,28728,28730,28732],{"class":42,"line":54},[40,28729,28581],{"class":63},[40,28731,28584],{"class":94},[40,28733,27993],{"class":63},[40,28735,28736,28739],{"class":42,"line":70},[40,28737,28738],{"class":63},"  --policy.type=act",[40,28740,27993],{"class":63},[40,28742,28743,28746],{"class":42,"line":78},[40,28744,28745],{"class":63},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[40,28747,27993],{"class":63},[40,28749,28750,28753],{"class":42,"line":86},[40,28751,28752],{"class":63},"  --job_name=act_so101_test",[40,28754,27993],{"class":63},[40,28756,28757,28760],{"class":42,"line":100},[40,28758,28759],{"class":63},"  --policy.device=cuda",[40,28761,27993],{"class":63},[40,28763,28764,28767],{"class":42,"line":108},[40,28765,28766],{"class":63},"  --wandb.enable=false",[40,28768,27993],{"class":63},[40,28770,28771,28774],{"class":42,"line":121},[40,28772,28773],{"class":63},"  --policy.repo_id=",[40,28775,28776],{"class":94},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,28778,28779],{},"参数说明：",[1338,28781,28782,28788,28794,28800,28806,28815,28821],{},[495,28783,28784,28787],{},[26,28785,28786],{},"--dataset.repo_id","：训练数据集仓库。",[495,28789,28790,28793],{},[26,28791,28792],{},"--policy.type=act","：策略模型类型为 ACT。",[495,28795,28796,28799],{},[26,28797,28798],{},"--output_dir","：本地训练输出目录。",[495,28801,28802,28805],{},[26,28803,28804],{},"--job_name","：训练任务名称。",[495,28807,28808,28811,28812,27880],{},[26,28809,28810],{},"--policy.device","：训练设备（如 ",[26,28813,28814],{},"cuda",[495,28816,28817,28820],{},[26,28818,28819],{},"--wandb.enable","：是否启用 WandB 可视化。",[495,28822,28823,28826],{},[26,28824,28825],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,28828,28829],{},[438,28830],{"alt":36,"src":28831},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[3384,28833,28694],{},{"title":36,"searchDepth":54,"depth":54,"links":28835},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":28707,"description":3413},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":28842,"title":28843,"body":28844,"description":3413,"extension":3414,"meta":28931,"navigation":1412,"path":28932,"seo":28933,"stem":28934,"__hash__":28935},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":28845,"toc":28929},[28846,28849,28852,28919,28927],[10,28847,28843],{"id":28848},"_8-策略部署与自动采集",[19,28850,28851],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[31,28853,28855],{"className":27141,"code":28854,"language":27143,"meta":36,"style":36},"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",[26,28856,28857,28863,28869,28875,28883,28889,28896,28904,28912],{"__ignoreMap":36},[40,28858,28859,28861],{"class":42,"line":43},[40,28860,28522],{"class":596},[40,28862,27993],{"class":63},[40,28864,28865,28867],{"class":42,"line":54},[40,28866,28025],{"class":63},[40,28868,27993],{"class":63},[40,28870,28871,28873],{"class":42,"line":70},[40,28872,28103],{"class":63},[40,28874,27993],{"class":63},[40,28876,28877,28879,28881],{"class":42,"line":78},[40,28878,28232],{"class":63},[40,28880,28549],{"class":94},[40,28882,27993],{"class":63},[40,28884,28885,28887],{"class":42,"line":86},[40,28886,28163],{"class":63},[40,28888,27993],{"class":63},[40,28890,28891,28894],{"class":42,"line":100},[40,28892,28893],{"class":63},"  --display_data=false",[40,28895,27993],{"class":63},[40,28897,28898,28900,28902],{"class":42,"line":108},[40,28899,28581],{"class":63},[40,28901,28584],{"class":94},[40,28903,27993],{"class":63},[40,28905,28906,28908,28910],{"class":42,"line":121},[40,28907,28598],{"class":63},[40,28909,28601],{"class":94},[40,28911,27993],{"class":63},[40,28913,28914,28917],{"class":42,"line":134},[40,28915,28916],{"class":63},"  --policy.path=",[40,28918,28776],{"class":94},[1338,28920,28921],{},[495,28922,28923,28926],{},[26,28924,28925],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[3384,28928,28694],{},{"title":36,"searchDepth":54,"depth":54,"links":28930},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":28843,"description":3413},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":28937,"title":28938,"body":28939,"description":3413,"extension":3414,"meta":28968,"navigation":1412,"path":28969,"seo":28970,"stem":28971,"__hash__":28972},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":28940,"toc":28966},[28941,28945,28948,28954,28957,28963],[10,28942,28944],{"id":28943},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,28946,28947],{},"项目地址：",[19,28949,28950],{},[2106,28951,28952],{"href":28952,"rel":28953},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[2110],[19,28955,28956],{},"参考教程：",[19,28958,28959],{},[2106,28960,28961],{"href":28961,"rel":28962},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[2110],[19,28964,28965],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":36,"searchDepth":54,"depth":54,"links":28967},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":28938,"description":3413},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":28974,"title":28975,"body":28976,"description":28980,"extension":3414,"meta":28981,"navigation":1412,"path":28982,"seo":28983,"stem":28984,"__hash__":28985},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":28977,"toc":28978},[],{"title":36,"searchDepth":54,"depth":54,"links":28979},[],"act复现",{"category":26698},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":28975,"description":28980},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":28987,"title":28988,"body":28989,"description":36,"extension":3414,"meta":29290,"navigation":1412,"path":29291,"seo":29292,"stem":29293,"__hash__":29294},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":28990,"toc":29282},[28991,28994,28998,29008,29015,29022,29025,29032,29035,29038,29042,29054,29058,29103,29106,29109,29112,29115,29118,29122,29160,29166,29170,29224,29229,29232,29235,29240,29243,29248,29251,29254,29258,29261,29264,29268],[10,28992,28988],{"id":28993},"_1简介",[402,28995,28997],{"id":28996},"_11什么是-docker","1.1什么是 Docker？",[19,28999,29000,29001,29004,29005],{},"Docker 是一个开源的 ",[409,29002,29003],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[409,29006,29007],{},"一次构建，到处运行。",[19,29009,29010,29011,29014],{},"“ ",[409,29012,29013],{},"一次构建，到处运行"," ”也就是说：",[492,29016,29017],{},[495,29018,29019],{},[409,29020,29021],{},"之前：",[19,29023,29024],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[492,29026,29027],{},[495,29028,29029],{},[409,29030,29031],{},"使用docker后：",[19,29033,29034],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,29036,29037],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[402,29039,29041],{"id":29040},"_12它是怎么工作的","1.2.它是怎么工作的？",[1338,29043,29044,29047],{},[495,29045,29046],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[495,29048,29049,29050,29053],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[409,29051,29052],{},"无论在哪运行都一样稳定"," 。",[402,29055,29057],{"id":29056},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[3619,29059,29060,29069],{},[3622,29061,29062],{},[3625,29063,29064,29066],{},[3628,29065,479],{"align":27055},[3628,29067,29068],{"align":27055},"解释",[3665,29070,29071,29079,29087,29095],{},[3625,29072,29073,29076],{},[3670,29074,29075],{"align":27055},"镜像",[3670,29077,29078],{"align":27055},"Image，运行容器的模板，像是一个应用快照",[3625,29080,29081,29084],{},[3670,29082,29083],{"align":27055},"容器",[3670,29085,29086],{"align":27055},"Container，运行中的镜像实例，有自己的文件系统、网络等",[3625,29088,29089,29092],{},[3670,29090,29091],{"align":27055},"Dockerfile",[3670,29093,29094],{"align":27055},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[3625,29096,29097,29100],{},[3670,29098,29099],{"align":27055},"仓库",[3670,29101,29102],{"align":27055},"Registry，存放镜像的地方，比如 Docker Hub",[19,29104,29105],{},"抽象化理解:",[19,29107,29108],{},"Docker镜像≈C++类",[19,29110,29111],{},"Docker容器≈C++类实例(即对象)",[19,29113,29114],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,29116,29117],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[402,29119,29121],{"id":29120},"_14类比理解","1.4.类比理解",[3619,29123,29124,29134],{},[3622,29125,29126],{},[3625,29127,29128,29131],{},[3628,29129,29130],{"align":27055},"传统部署",[3628,29132,29133],{"align":27055},"Docker部署",[3665,29135,29136,29144,29152],{},[3625,29137,29138,29141],{},[3670,29139,29140],{"align":27055},"手动安装依赖、调试版本不一致问题",[3670,29142,29143],{"align":27055},"一次打包环境和代码",[3625,29145,29146,29149],{},[3670,29147,29148],{"align":27055},"程序“裸奔”跑在系统上",[3670,29150,29151],{"align":27055},"程序“穿着容器”隔离运行",[3625,29153,29154,29157],{},[3670,29155,29156],{"align":27055},"容易“在我电脑上能跑”",[3670,29158,29159],{"align":27055},"保证“无论在哪都能跑”",[19,29161,29162,29163],{},"就像快递包裹： ",[409,29164,29165],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[402,29167,29169],{"id":29168},"_15docker-的核心优势","1.5.Docker 的核心优势",[3619,29171,29172,29182],{},[3622,29173,29174],{},[3625,29175,29176,29179],{},[3628,29177,29178],{"align":27055},"优势",[3628,29180,29181],{"align":27055},"说明",[3665,29183,29184,29192,29200,29208,29216],{},[3625,29185,29186,29189],{},[3670,29187,29188],{"align":27055},"轻量级",[3670,29190,29191],{"align":27055},"基于系统内核共享，启动速度快，占资源少",[3625,29193,29194,29197],{},[3670,29195,29196],{"align":27055},"跨平台",[3670,29198,29199],{"align":27055},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[3625,29201,29202,29205],{},[3670,29203,29204],{"align":27055},"易于迁移部署",[3670,29206,29207],{"align":27055},"应用和环境一起封装，不怕依赖不一致",[3625,29209,29210,29213],{},[3670,29211,29212],{"align":27055},"易于版本控制",[3670,29214,29215],{"align":27055},"镜像版本可控，支持回滚",[3625,29217,29218,29221],{},[3670,29219,29220],{"align":27055},"生态丰富",[3670,29222,29223],{"align":27055},"Docker Hub 上有成千上万的现成镜像可用",[492,29225,29226],{},[495,29227,29228],{},"在Linux上可以几乎实现无性能损失。",[19,29230,29231],{},"docker里的发行版和本机共用Linux内核。",[19,29233,29234],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[492,29236,29237],{},[495,29238,29239],{},"可以快速部署在绝大多数Linux发行版",[19,29241,29242],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[492,29244,29245],{},[495,29246,29247],{},"配置环境简单",[19,29249,29250],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,29252,29253],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[492,29255,29256],{},[495,29257,29220],{},[19,29259,29260],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,29262,29263],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[402,29265,29267],{"id":29266},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1338,29269,29270,29273,29276,29279],{},[495,29271,29272],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[495,29274,29275],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[495,29277,29278],{},"微服务架构：每个服务一个容器，灵活组合",[495,29280,29281],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":36,"searchDepth":54,"depth":54,"links":29283},[29284,29285,29286,29287,29288,29289],{"id":28996,"depth":70,"text":28997},{"id":29040,"depth":70,"text":29041},{"id":29056,"depth":70,"text":29057},{"id":29120,"depth":70,"text":29121},{"id":29168,"depth":70,"text":29169},{"id":29266,"depth":70,"text":29267},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":28988,"description":36},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":29296,"title":29297,"body":29298,"description":36,"extension":3414,"meta":30024,"navigation":1412,"path":30025,"seo":30026,"stem":30027,"__hash__":30028},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":29299,"toc":30019},[29300,29303,29307,29310,29313,29319,29325,29329,29338,29341,29398,29401,29452,29455,29537,29540,29576,29580,29591,29604,29611,29614,29694,29697,29747,29750,29773,29777,29783,29786,29802,29808,29811,29827,29833,29836,29852,29866,29872,29889,29895,29898,29909,29915,29918,29932,29938,29941,29961,29966,29969,29972,29976,29979,29982,29985,29992,29995,29998,30001,30006,30011,30016],[10,29301,29297],{"id":29302},"_2安装docker",[402,29304,29306],{"id":29305},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,29308,29309],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,29311,29312],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,29314,29315],{},[2106,29316,29317],{"href":29317,"rel":29318},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[2110],[19,29320,29321],{},[2106,29322,29323],{"href":29323,"rel":29324},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[2110],[2423,29326,29328],{"id":29327},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,29330,29331,29332,29337],{},"以下内容根据 ",[2106,29333,29336],{"href":29334,"rel":29335},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[2110],"官方文档"," 修改而来。",[19,29339,29340],{},"如果你过去安装过 docker，先删掉：",[31,29342,29344],{"className":27141,"code":29343,"language":27143,"meta":36,"style":36},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[26,29345,29346],{"__ignoreMap":36},[40,29347,29348,29350,29353,29356,29359,29362,29365,29368,29371,29374,29377,29380,29383,29386,29389,29392,29395],{"class":42,"line":43},[40,29349,6349],{"class":1283},[40,29351,29352],{"class":50}," pkg ",[40,29354,29355],{"class":1283},"in",[40,29357,29358],{"class":94}," docker.io",[40,29360,29361],{"class":94}," docker-doc",[40,29363,29364],{"class":94}," docker-compose",[40,29366,29367],{"class":94}," docker-compose-v2",[40,29369,29370],{"class":94}," podman-docker",[40,29372,29373],{"class":94}," containerd",[40,29375,29376],{"class":94}," runc",[40,29378,29379],{"class":50},"; ",[40,29381,29382],{"class":1283},"do",[40,29384,29385],{"class":596}," sudo",[40,29387,29388],{"class":94}," apt-get",[40,29390,29391],{"class":94}," remove",[40,29393,29394],{"class":50}," $pkg; ",[40,29396,29397],{"class":1283},"done\n",[19,29399,29400],{},"首先安装依赖和GPG：",[31,29402,29406],{"className":29403,"code":29404,"language":29405,"meta":36,"style":36},"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",[26,29407,29408,29413,29418,29423,29428,29433,29438,29442,29447],{"__ignoreMap":36},[40,29409,29410],{"class":42,"line":43},[40,29411,29412],{},"# Add Docker's official GPG key:\n",[40,29414,29415],{"class":42,"line":54},[40,29416,29417],{},"sudo apt-get update\n",[40,29419,29420],{"class":42,"line":70},[40,29421,29422],{},"sudo apt-get install ca-certificates curl\n",[40,29424,29425],{"class":42,"line":78},[40,29426,29427],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[40,29429,29430],{"class":42,"line":86},[40,29431,29432],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[40,29434,29435],{"class":42,"line":100},[40,29436,29437],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[40,29439,29440],{"class":42,"line":108},[40,29441,1413],{"emptyLinePlaceholder":1412},[40,29443,29444],{"class":42,"line":121},[40,29445,29446],{},"# 如果上面这行报错就弄下面这行\n",[40,29448,29449],{"class":42,"line":134},[40,29450,29451],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,29453,29454],{},"信任 Docker 的 GPG 公钥并添加仓库：",[31,29456,29458],{"className":27141,"code":29457,"language":27143,"meta":36,"style":36},"# 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",[26,29459,29460,29465,29471,29488,29520],{"__ignoreMap":36},[40,29461,29462],{"class":42,"line":43},[40,29463,29464],{"class":997},"# Add the repository to Apt sources:\n",[40,29466,29467,29469],{"class":42,"line":54},[40,29468,28438],{"class":63},[40,29470,27993],{"class":63},[40,29472,29473,29476,29479,29482,29485],{"class":42,"line":70},[40,29474,29475],{"class":94},"  \"deb [arch=$(",[40,29477,29478],{"class":596},"dpkg",[40,29480,29481],{"class":63}," --print-architecture",[40,29483,29484],{"class":94},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[40,29486,29487],{"class":63},"\\\n",[40,29489,29490,29493,29495,29497,29500,29502,29504,29506,29509,29511,29513,29516,29518],{"class":42,"line":78},[40,29491,29492],{"class":94},"  \"",[40,29494,28414],{"class":50},[40,29496,4037],{"class":63},[40,29498,29499],{"class":94}," \u002Fetc\u002Fos-release",[40,29501,2233],{"class":50},[40,29503,28438],{"class":63},[40,29505,13046],{"class":94},[40,29507,29508],{"class":50},"$VERSION_CODENAME",[40,29510,3731],{"class":94},[40,29512,3908],{"class":50},[40,29514,29515],{"class":94},"\" stable\"",[40,29517,1465],{"class":1283},[40,29519,27993],{"class":63},[40,29521,29522,29525,29528,29531,29534],{"class":42,"line":86},[40,29523,29524],{"class":596},"  sudo",[40,29526,29527],{"class":94}," tee",[40,29529,29530],{"class":94}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[40,29532,29533],{"class":1283}," >",[40,29535,29536],{"class":94}," \u002Fdev\u002Fnull\n",[19,29538,29539],{},"最后安装",[31,29541,29543],{"className":27141,"code":29542,"language":27143,"meta":36,"style":36},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[26,29544,29545,29553],{"__ignoreMap":36},[40,29546,29547,29549,29551],{"class":42,"line":43},[40,29548,923],{"class":596},[40,29550,29388],{"class":94},[40,29552,2126],{"class":94},[40,29554,29555,29557,29559,29561,29564,29567,29570,29573],{"class":42,"line":54},[40,29556,923],{"class":596},[40,29558,29388],{"class":94},[40,29560,929],{"class":94},[40,29562,29563],{"class":94}," docker-ce",[40,29565,29566],{"class":94}," docker-ce-cli",[40,29568,29569],{"class":94}," containerd.io",[40,29571,29572],{"class":94}," docker-buildx-plugin",[40,29574,29575],{"class":94}," docker-compose-plugin\n",[2423,29577,29579],{"id":29578},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,29581,29582,29583,29586,29587,29590],{},"查看自己自己包管理工具版本（dnf是 ",[409,29584,29585],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[409,29588,29589],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[31,29592,29594],{"className":27141,"code":29593,"language":27143,"meta":36,"style":36},"dnf --version\n",[26,29595,29596],{"__ignoreMap":36},[40,29597,29598,29601],{"class":42,"line":43},[40,29599,29600],{"class":596},"dnf",[40,29602,29603],{"class":63}," --version\n",[19,29605,29331,29606,29610],{},[2106,29607,29336],{"href":29608,"rel":29609},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[2110]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,29612,29613],{},"如果你之前安装过 docker，请先删掉",[31,29615,29617],{"className":27141,"code":29616,"language":27143,"meta":36,"style":36},"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",[26,29618,29619,29633,29640,29647,29654,29661,29668,29675,29682,29689],{"__ignoreMap":36},[40,29620,29621,29623,29626,29628,29631],{"class":42,"line":43},[40,29622,923],{"class":596},[40,29624,29625],{"class":94}," dnf",[40,29627,29391],{"class":94},[40,29629,29630],{"class":94}," docker",[40,29632,27993],{"class":63},[40,29634,29635,29638],{"class":42,"line":54},[40,29636,29637],{"class":94},"                  docker-client",[40,29639,27993],{"class":63},[40,29641,29642,29645],{"class":42,"line":70},[40,29643,29644],{"class":94},"                  docker-client-latest",[40,29646,27993],{"class":63},[40,29648,29649,29652],{"class":42,"line":78},[40,29650,29651],{"class":94},"                  docker-common",[40,29653,27993],{"class":63},[40,29655,29656,29659],{"class":42,"line":86},[40,29657,29658],{"class":94},"                  docker-latest",[40,29660,27993],{"class":63},[40,29662,29663,29666],{"class":42,"line":100},[40,29664,29665],{"class":94},"                  docker-latest-logrotate",[40,29667,27993],{"class":63},[40,29669,29670,29673],{"class":42,"line":108},[40,29671,29672],{"class":94},"                  docker-logrotate",[40,29674,27993],{"class":63},[40,29676,29677,29680],{"class":42,"line":121},[40,29678,29679],{"class":94},"                  docker-selinux",[40,29681,27993],{"class":63},[40,29683,29684,29687],{"class":42,"line":134},[40,29685,29686],{"class":94},"                  docker-engine-selinux",[40,29688,27993],{"class":63},[40,29690,29691],{"class":42,"line":146},[40,29692,29693],{"class":94},"                  docker-engine\n",[19,29695,29696],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[31,29698,29700],{"className":27141,"code":29699,"language":27143,"meta":36,"style":36},"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",[26,29701,29702,29716,29731],{"__ignoreMap":36},[40,29703,29704,29706,29708,29711,29713],{"class":42,"line":43},[40,29705,923],{"class":596},[40,29707,29625],{"class":94},[40,29709,29710],{"class":63}," -y",[40,29712,929],{"class":94},[40,29714,29715],{"class":94}," dnf-plugins-core\n",[40,29717,29718,29720,29722,29725,29728],{"class":42,"line":54},[40,29719,923],{"class":596},[40,29721,29625],{"class":94},[40,29723,29724],{"class":94}," config-manager",[40,29726,29727],{"class":94}," addrepo",[40,29729,29730],{"class":63}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[40,29732,29733,29735,29738,29741,29744],{"class":42,"line":70},[40,29734,923],{"class":596},[40,29736,29737],{"class":94}," sed",[40,29739,29740],{"class":63}," -i",[40,29742,29743],{"class":94}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[40,29745,29746],{"class":94}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,29748,29749],{},"最后安装：",[31,29751,29753],{"className":27141,"code":29752,"language":27143,"meta":36,"style":36},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[26,29754,29755],{"__ignoreMap":36},[40,29756,29757,29759,29761,29763,29765,29767,29769,29771],{"class":42,"line":43},[40,29758,923],{"class":596},[40,29760,29625],{"class":94},[40,29762,929],{"class":94},[40,29764,29563],{"class":94},[40,29766,29566],{"class":94},[40,29768,29569],{"class":94},[40,29770,29572],{"class":94},[40,29772,29575],{"class":94},[402,29774,29776],{"id":29775},"_22配置环境","2.2.配置环境",[2423,29778,29780,2261],{"id":29779},"_221检查-docker-服务状态",[409,29781,29782],{},"2.2.1.检查 Docker 服务状态",[19,29784,29785],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[31,29787,29789],{"className":27141,"code":29788,"language":27143,"meta":36,"style":36},"systemctl status docker\n",[26,29790,29791],{"__ignoreMap":36},[40,29792,29793,29796,29799],{"class":42,"line":43},[40,29794,29795],{"class":596},"systemctl",[40,29797,29798],{"class":94}," status",[40,29800,29801],{"class":94}," docker\n",[2423,29803,29805,2261],{"id":29804},"_222启动-docker-服务",[409,29806,29807],{},"2.2.2.启动 Docker 服务",[19,29809,29810],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[31,29812,29814],{"className":27141,"code":29813,"language":27143,"meta":36,"style":36},"sudo systemctl start docker\n",[26,29815,29816],{"__ignoreMap":36},[40,29817,29818,29820,29823,29825],{"class":42,"line":43},[40,29819,923],{"class":596},[40,29821,29822],{"class":94}," systemctl",[40,29824,7507],{"class":94},[40,29826,29801],{"class":94},[2423,29828,29830,2261],{"id":29829},"_223设置-docker-开机自启",[409,29831,29832],{},"2.2.3.设置 Docker 开机自启",[19,29834,29835],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[31,29837,29839],{"className":27141,"code":29838,"language":27143,"meta":36,"style":36},"sudo systemctl enable docker\n",[26,29840,29841],{"__ignoreMap":36},[40,29842,29843,29845,29847,29850],{"class":42,"line":43},[40,29844,923],{"class":596},[40,29846,29822],{"class":94},[40,29848,29849],{"class":94}," enable",[40,29851,29801],{"class":94},[2423,29853,29855,17117,29858,17117,29863,2261],{"id":29854},"_224将用户添加到-docker-组",[409,29856,29857],{},"2.2.4.将用户添加到",[409,29859,29860],{},[26,29861,29862],{},"docker",[409,29864,29865],{},"组",[19,29867,29868,29869,29871],{},"使用以下命令将当前用户添加到 ",[26,29870,29862],{}," 组：",[31,29873,29875],{"className":27141,"code":29874,"language":27143,"meta":36,"style":36},"sudo usermod -aG docker $USER\n",[26,29876,29877],{"__ignoreMap":36},[40,29878,29879,29881,29883,29885,29887],{"class":42,"line":43},[40,29880,923],{"class":596},[40,29882,1166],{"class":94},[40,29884,1169],{"class":63},[40,29886,29630],{"class":94},[40,29888,1175],{"class":50},[2423,29890,29892,2261],{"id":29891},"_225退出并重新登录",[409,29893,29894],{},"2.2.5.退出并重新登录",[19,29896,29897],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[31,29899,29901],{"className":27141,"code":29900,"language":27143,"meta":36,"style":36},"newgrp docker\n",[26,29902,29903],{"__ignoreMap":36},[40,29904,29905,29907],{"class":42,"line":43},[40,29906,1180],{"class":596},[40,29908,29801],{"class":94},[2423,29910,29912,2261],{"id":29911},"_226重新启动-docker-服务如果需要",[409,29913,29914],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,29916,29917],{},"确保 Docker 服务正在运行，可以使用以下命令：",[31,29919,29920],{"className":27141,"code":29813,"language":27143,"meta":36,"style":36},[26,29921,29922],{"__ignoreMap":36},[40,29923,29924,29926,29928,29930],{"class":42,"line":43},[40,29925,923],{"class":596},[40,29927,29822],{"class":94},[40,29929,7507],{"class":94},[40,29931,29801],{"class":94},[2423,29933,29935,2261],{"id":29934},"_227重启电脑后检查-docker-服务状态",[409,29936,29937],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,29939,29940],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[31,29942,29944],{"className":27141,"code":29943,"language":27143,"meta":36,"style":36},"sudo reboot\nsystemctl status docker\n",[26,29945,29946,29953],{"__ignoreMap":36},[40,29947,29948,29950],{"class":42,"line":43},[40,29949,923],{"class":596},[40,29951,29952],{"class":94}," reboot\n",[40,29954,29955,29957,29959],{"class":42,"line":54},[40,29956,29795],{"class":596},[40,29958,29798],{"class":94},[40,29960,29801],{"class":94},[19,29962,29963],{},[438,29964],{"alt":36,"src":29965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,29967,29968],{},"第三行显示enabled说明开机自启动成功",[19,29970,29971],{},"按q退出",[402,29973,29975],{"id":29974},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,29977,29978],{},"优先使用linux来使用docker是比较好的",[19,29980,29981],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,29983,29984],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,29986,29987,29988],{},"官方下载安装:",[2106,29989,29990],{"href":29990,"rel":29991},"https:\u002F\u002Fwww.docker.com\u002F",[2110],[19,29993,29994],{},"Windows的Docker显卡直通与USB直通:",[19,29996,29997],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,29999,30000],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,30002,30003],{},[438,30004],{"alt":36,"src":30005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,30007,30008],{},[438,30009],{"alt":36,"src":30010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,30012,30013],{},[438,30014],{"alt":36,"src":30015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[3384,30017,30018],{},"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":36,"searchDepth":54,"depth":54,"links":30020},[30021,30022,30023],{"id":29305,"depth":70,"text":29306},{"id":29775,"depth":70,"text":29776},{"id":29974,"depth":70,"text":29975},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":29297,"description":36},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":30030,"title":30031,"body":30032,"description":30039,"extension":3414,"meta":30732,"navigation":1412,"path":30733,"seo":30734,"stem":30735,"__hash__":30736},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":30033,"toc":30726},[30034,30037,30040,30044,30049,30054,30057,30085,30090,30099,30102,30107,30111,30118,30123,30129,30133,30136,30140,30145,30237,30242,30260,30265,30286,30291,30307,30311,30316,30345,30350,30396,30401,30445,30453,30470,30475,30491,30496,30510,30513,30516,30519,30522,30551,30554,30559,30563,30566,30569,30575,30578,30581,30584,30646,30653,30658,30661,30679,30683,30686,30703,30706,30709,30723],[10,30035,30031],{"id":30036},"_3docker直通",[19,30038,30039],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[402,30041,30043],{"id":30042},"_31usb直通","3.1.USB直通",[19,30045,30046],{},[438,30047],{"alt":36,"src":30048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[492,30050,30051],{},[495,30052,30053],{},"方法一(不是很推荐新手)：",[19,30055,30056],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[31,30058,30060],{"className":27141,"code":30059,"language":27143,"meta":36,"style":36},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[26,30061,30062,30070,30075],{"__ignoreMap":36},[40,30063,30064,30067],{"class":42,"line":43},[40,30065,30066],{"class":596},"ls",[40,30068,30069],{"class":94}," \u002Fdev\n",[40,30071,30072],{"class":42,"line":54},[40,30073,30074],{"class":997},"#例如\n",[40,30076,30077,30080,30082],{"class":42,"line":70},[40,30078,30079],{"class":50},"--device",[40,30081,1284],{"class":1283},[40,30083,30084],{"class":94},"\u002Fdev\u002Ftty_USB0\n",[492,30086,30087],{"start":54},[495,30088,30089],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[31,30091,30093],{"className":27141,"code":30092,"language":27143,"meta":36,"style":36},"--privileged\n",[26,30094,30095],{"__ignoreMap":36},[40,30096,30097],{"class":42,"line":43},[40,30098,30092],{"class":596},[19,30100,30101],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,30103,30104],{},[438,30105],{"alt":36,"src":30106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[402,30108,30110],{"id":30109},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,30112,30113,30114,30117],{},"NVIDIA Container Toolkit使用户 ",[409,30115,30116],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,30119,30120],{},[438,30121],{"alt":36,"src":30122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,30124,30125],{},[2106,30126,30127],{"href":30127,"rel":30128},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[2110],[2423,30130,30132],{"id":30131},"_321安装","3.2.1.安装",[19,30134,30135],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[26230,30137,30139],{"id":30138},"_3211ubuntu","3.2.1.1.Ubuntu",[492,30141,30142],{},[495,30143,30144],{},"配置存储库 并更新",[31,30146,30148],{"className":27141,"code":30147,"language":27143,"meta":36,"style":36},"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",[26,30149,30150,30179,30199,30211,30223,30229],{"__ignoreMap":36},[40,30151,30152,30155,30158,30161,30163,30165,30168,30171,30174,30177],{"class":42,"line":43},[40,30153,30154],{"class":596},"curl",[40,30156,30157],{"class":63}," -fsSL",[40,30159,30160],{"class":94}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[40,30162,1465],{"class":1283},[40,30164,29385],{"class":596},[40,30166,30167],{"class":94}," gpg",[40,30169,30170],{"class":63}," --dearmor",[40,30172,30173],{"class":63}," -o",[40,30175,30176],{"class":94}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[40,30178,27993],{"class":63},[40,30180,30181,30184,30186,30189,30192,30195,30197],{"class":42,"line":54},[40,30182,30183],{"class":50},"  && ",[40,30185,30154],{"class":596},[40,30187,30188],{"class":63}," -s",[40,30190,30191],{"class":63}," -L",[40,30193,30194],{"class":94}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[40,30196,1465],{"class":1283},[40,30198,27993],{"class":63},[40,30200,30201,30204,30207,30209],{"class":42,"line":70},[40,30202,30203],{"class":596},"    sed",[40,30205,30206],{"class":94}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[40,30208,1465],{"class":1283},[40,30210,27993],{"class":63},[40,30212,30213,30216,30218,30221],{"class":42,"line":78},[40,30214,30215],{"class":596},"    sudo",[40,30217,29527],{"class":94},[40,30219,30220],{"class":94}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[40,30222,27993],{"class":63},[40,30224,30225,30227],{"class":42,"line":86},[40,30226,30183],{"class":50},[40,30228,29487],{"class":63},[40,30230,30231,30233,30235],{"class":42,"line":100},[40,30232,30215],{"class":596},[40,30234,29388],{"class":94},[40,30236,2126],{"class":94},[492,30238,30239],{"start":54},[495,30240,30241],{},"安装nvidia-docker2",[31,30243,30245],{"className":27141,"code":30244,"language":27143,"meta":36,"style":36},"sudo apt-get install -y nvidia-docker2\n",[26,30246,30247],{"__ignoreMap":36},[40,30248,30249,30251,30253,30255,30257],{"class":42,"line":43},[40,30250,923],{"class":596},[40,30252,29388],{"class":94},[40,30254,929],{"class":94},[40,30256,29710],{"class":63},[40,30258,30259],{"class":94}," nvidia-docker2\n",[492,30261,30262],{"start":70},[495,30263,30264],{},"使用nvidia-ctk命令配置container runtime",[31,30266,30268],{"className":27141,"code":30267,"language":27143,"meta":36,"style":36},"sudo nvidia-ctk runtime configure --runtime=docker\n",[26,30269,30270],{"__ignoreMap":36},[40,30271,30272,30274,30277,30280,30283],{"class":42,"line":43},[40,30273,923],{"class":596},[40,30275,30276],{"class":94}," nvidia-ctk",[40,30278,30279],{"class":94}," runtime",[40,30281,30282],{"class":94}," configure",[40,30284,30285],{"class":63}," --runtime=docker\n",[492,30287,30288],{"start":78},[495,30289,30290],{},"重启docker服务:",[31,30292,30294],{"className":27141,"code":30293,"language":27143,"meta":36,"style":36},"sudo systemctl restart docker\n",[26,30295,30296],{"__ignoreMap":36},[40,30297,30298,30300,30302,30305],{"class":42,"line":43},[40,30299,923],{"class":596},[40,30301,29822],{"class":94},[40,30303,30304],{"class":94}," restart",[40,30306,29801],{"class":94},[26230,30308,30310],{"id":30309},"_3212fedora","3.2.1.2.Fedora",[492,30312,30313],{},[495,30314,30315],{},"配置存储库",[31,30317,30319],{"className":27141,"code":30318,"language":27143,"meta":36,"style":36},"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",[26,30320,30321,30336],{"__ignoreMap":36},[40,30322,30323,30325,30327,30329,30332,30334],{"class":42,"line":43},[40,30324,30154],{"class":596},[40,30326,30188],{"class":63},[40,30328,30191],{"class":63},[40,30330,30331],{"class":94}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[40,30333,1465],{"class":1283},[40,30335,27993],{"class":63},[40,30337,30338,30340,30342],{"class":42,"line":54},[40,30339,923],{"class":596},[40,30341,29527],{"class":94},[40,30343,30344],{"class":94}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[492,30346,30347],{"start":54},[495,30348,30349],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[31,30351,30353],{"className":27141,"code":30352,"language":27143,"meta":36,"style":36},"# 如果是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",[26,30354,30355,30360,30374,30378,30383],{"__ignoreMap":36},[40,30356,30357],{"class":42,"line":43},[40,30358,30359],{"class":997},"# 如果是RHEL或者Rocky（DNF4）\n",[40,30361,30362,30364,30366,30368,30371],{"class":42,"line":54},[40,30363,923],{"class":596},[40,30365,29625],{"class":94},[40,30367,29724],{"class":94},[40,30369,30370],{"class":63}," --add-repo",[40,30372,30373],{"class":94}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[40,30375,30376],{"class":42,"line":70},[40,30377,1413],{"emptyLinePlaceholder":1412},[40,30379,30380],{"class":42,"line":78},[40,30381,30382],{"class":997},"# 如果是Feodra41+（DNF5）\n",[40,30384,30385,30387,30389,30391,30393],{"class":42,"line":86},[40,30386,923],{"class":596},[40,30388,29625],{"class":94},[40,30390,29724],{"class":94},[40,30392,29727],{"class":94},[40,30394,30395],{"class":63}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[492,30397,30398],{"start":70},[495,30399,30400],{},"安装NVIDIA Container Toolki包",[31,30402,30404],{"className":27141,"code":30403,"language":27143,"meta":36,"style":36},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[26,30405,30406,30411,30424,30428,30433],{"__ignoreMap":36},[40,30407,30408],{"class":42,"line":43},[40,30409,30410],{"class":997},"# 如果是RHEL或者Rocky\n",[40,30412,30413,30415,30417,30419,30421],{"class":42,"line":54},[40,30414,923],{"class":596},[40,30416,29625],{"class":94},[40,30418,929],{"class":94},[40,30420,29710],{"class":63},[40,30422,30423],{"class":94}," nvidia-container-toolkit\n",[40,30425,30426],{"class":42,"line":70},[40,30427,1413],{"emptyLinePlaceholder":1412},[40,30429,30430],{"class":42,"line":78},[40,30431,30432],{"class":997},"# 如果是Fedora\n",[40,30434,30435,30437,30439,30441,30443],{"class":42,"line":86},[40,30436,923],{"class":596},[40,30438,29625],{"class":94},[40,30440,929],{"class":94},[40,30442,29710],{"class":63},[40,30444,30423],{"class":94},[492,30446,30447],{"start":78},[495,30448,30449,30450,30452],{},"安装nvidia-docker2 ： 在Fedora上使用",[26,30451,29600],{},"进行安装",[31,30454,30456],{"className":27141,"code":30455,"language":27143,"meta":36,"style":36},"sudo dnf install -y nvidia-docker2\n",[26,30457,30458],{"__ignoreMap":36},[40,30459,30460,30462,30464,30466,30468],{"class":42,"line":43},[40,30461,923],{"class":596},[40,30463,29625],{"class":94},[40,30465,929],{"class":94},[40,30467,29710],{"class":63},[40,30469,30259],{"class":94},[492,30471,30472],{"start":86},[495,30473,30474],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[31,30476,30477],{"className":27141,"code":30267,"language":27143,"meta":36,"style":36},[26,30478,30479],{"__ignoreMap":36},[40,30480,30481,30483,30485,30487,30489],{"class":42,"line":43},[40,30482,923],{"class":596},[40,30484,30276],{"class":94},[40,30486,30279],{"class":94},[40,30488,30282],{"class":94},[40,30490,30285],{"class":63},[492,30492,30493],{"start":100},[495,30494,30495],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[31,30497,30498],{"className":27141,"code":30293,"language":27143,"meta":36,"style":36},[26,30499,30500],{"__ignoreMap":36},[40,30501,30502,30504,30506,30508],{"class":42,"line":43},[40,30503,923],{"class":596},[40,30505,29822],{"class":94},[40,30507,30304],{"class":94},[40,30509,29801],{"class":94},[19,30511,30512],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,30514,30515],{},"方法：",[19,30517,30518],{},"1️⃣nvidia-smi",[19,30520,30521],{},"2️⃣运行nvidia cuda 容器进行测试",[31,30523,30525],{"className":27141,"code":30524,"language":27143,"meta":36,"style":36},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[26,30526,30527],{"__ignoreMap":36},[40,30528,30529,30531,30533,30536,30539,30542,30545,30548],{"class":42,"line":43},[40,30530,923],{"class":596},[40,30532,29630],{"class":94},[40,30534,30535],{"class":94}," run",[40,30537,30538],{"class":63}," --rm",[40,30540,30541],{"class":63}," --gpus",[40,30543,30544],{"class":94}," all",[40,30546,30547],{"class":94}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[40,30549,30550],{"class":94}," nvidia-smi\n",[19,30552,30553],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,30555,30556],{},[438,30557],{"alt":36,"src":30558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[402,30560,30562],{"id":30561},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,30564,30565],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,30567,30568],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,30570,30571],{},[2106,30572,30573],{"href":30573,"rel":30574},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[2110],[19,30576,30577],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,30579,30580],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,30582,30583],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[3619,30585,30586,30602],{},[3622,30587,30588],{},[3625,30589,30590,30593,30596,30599],{},[3628,30591,30592],{"align":27055},"镜像类型",[3628,30594,30595],{"align":27055},"适用场景",[3628,30597,30598],{"align":27055},"示例标签",[3628,30600,30601],{"align":27055},"大小",[3665,30603,30604,30618,30632],{},[3625,30605,30606,30609,30612,30615],{},[3670,30607,30608],{"align":27055},"base",[3670,30610,30611],{"align":27055},"仅需 CUDA 运行时库",[3670,30613,30614],{"align":27055},"12.4.0-base-ubuntu22.04",[3670,30616,30617],{"align":27055},"~240MB",[3625,30619,30620,30623,30626,30629],{},[3670,30621,30622],{"align":27055},"runtime",[3670,30624,30625],{"align":27055},"部署编译后的应用（含数学库）",[3670,30627,30628],{"align":27055},"12.4.0-runtime-ubuntu22.04",[3670,30630,30631],{"align":27055},"~2GB",[3625,30633,30634,30637,30640,30643],{},[3670,30635,30636],{"align":27055},"devel",[3670,30638,30639],{"align":27055},"开发环境（含编译工具）",[3670,30641,30642],{"align":27055},"12.4.0-devel-ubuntu22.04",[3670,30644,30645],{"align":27055},"~3GB",[19,30647,30648,30649,30652],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[26,30650,30651],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,30654,30655],{},[438,30656],{"alt":36,"src":30657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,30659,30660],{},"在dockerfile里就可以开头这么写：",[31,30662,30664],{"className":27141,"code":30663,"language":27143,"meta":36,"style":36},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[26,30665,30666,30671],{"__ignoreMap":36},[40,30667,30668],{"class":42,"line":43},[40,30669,30670],{"class":997},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[40,30672,30673,30676],{"class":42,"line":54},[40,30674,30675],{"class":596},"FROM",[40,30677,30678],{"class":94}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[402,30680,30682],{"id":30681},"_34配置以太网","3.4.配置以太网",[19,30684,30685],{},"指定网络模式",[31,30687,30689],{"className":27141,"code":30688,"language":27143,"meta":36,"style":36},"--net=host \\\n",[26,30690,30691],{"__ignoreMap":36},[40,30692,30693,30696,30698,30701],{"class":42,"line":43},[40,30694,30695],{"class":50},"--net",[40,30697,1284],{"class":1283},[40,30699,30700],{"class":94},"host",[40,30702,27993],{"class":596},[19,30704,30705],{},"启动参数里加上这行即可。具体在下方",[19,30707,30708],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1338,30710,30711,30714,30717,30720],{},[495,30712,30713],{},"--net=bridge:默认选项，表示连接到默认的网桥",[495,30715,30716],{},"--net=host:容器使用宿主机的网络",[495,30718,30719],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[495,30721,30722],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[3384,30724,30725],{},"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":36,"searchDepth":54,"depth":54,"links":30727},[30728,30729,30730,30731],{"id":30042,"depth":70,"text":30043},{"id":30109,"depth":70,"text":30110},{"id":30561,"depth":70,"text":30562},{"id":30681,"depth":70,"text":30682},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":30031,"description":30039},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":30738,"title":30739,"body":30740,"description":30747,"extension":3414,"meta":30753,"navigation":1412,"path":30754,"seo":30755,"stem":30756,"__hash__":30757},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":30741,"toc":30751},[30742,30745,30748],[10,30743,30739],{"id":30744},"_4dockerhub换源",[19,30746,30747],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,30749,30750],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":36,"searchDepth":54,"depth":54,"links":30752},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":30739,"description":30747},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":30759,"title":30760,"body":30761,"description":36,"extension":3414,"meta":31771,"navigation":1412,"path":31772,"seo":31773,"stem":31774,"__hash__":31775},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":30762,"toc":31766},[30763,30766,30770,30776,30780,30783,31123,31126,31129,31132,31137,31142,31145,31148,31151,31154,31173,31176,31187,31193,31375,31385,31401,31664,31666,31690,31705,31714,31763],[10,30764,30760],{"id":30765},"_5docker命令学习",[402,30767,30769],{"id":30768},"_51参考文档","5.1.参考文档",[19,30771,30772],{},[2106,30773,30774],{"href":30774,"rel":30775},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[2110],[402,30777,30779],{"id":30778},"_52常用命令","5.2.常用命令",[19,30781,30782],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[3619,30784,30785,30798],{},[3622,30786,30787],{},[3625,30788,30789,30792,30795],{},[3628,30790,30791],{"align":27055},"命令",[3628,30793,30794],{"align":27055},"描述",[3628,30796,30797],{"align":27055},"示例",[3665,30799,30800,30811,30822,30833,30844,30855,30866,30877,30887,30898,30909,30920,30930,30941,30952,30963,30973,30983,30993,31003,31014,31025,31036,31047,31058,31069,31079,31090,31101,31112],{},[3625,30801,30802,30805,30808],{},[3670,30803,30804],{"align":27055},"docker run",[3670,30806,30807],{"align":27055},"创建并启动一个新的容器。",[3670,30809,30810],{"align":27055},"docker run -it ubuntu bash",[3625,30812,30813,30816,30819],{},[3670,30814,30815],{"align":27055},"docker build",[3670,30817,30818],{"align":27055},"通过指定的 Dockerfile 创建一个新的镜像。",[3670,30820,30821],{"align":27055},"docker build -t myimage .",[3625,30823,30824,30827,30830],{},[3670,30825,30826],{"align":27055},"docker pull",[3670,30828,30829],{"align":27055},"从 Docker 仓库拉取镜像。",[3670,30831,30832],{"align":27055},"docker pull ubuntu",[3625,30834,30835,30838,30841],{},[3670,30836,30837],{"align":27055},"docker push",[3670,30839,30840],{"align":27055},"将本地镜像推送到 Docker 仓库。",[3670,30842,30843],{"align":27055},"docker push myimage",[3625,30845,30846,30849,30852],{},[3670,30847,30848],{"align":27055},"docker stop",[3670,30850,30851],{"align":27055},"停止一个正在运行的容器。",[3670,30853,30854],{"align":27055},"docker stop container_id",[3625,30856,30857,30860,30863],{},[3670,30858,30859],{"align":27055},"docker start",[3670,30861,30862],{"align":27055},"启动一个已经存在的容器。",[3670,30864,30865],{"align":27055},"docker start container_id",[3625,30867,30868,30871,30874],{},[3670,30869,30870],{"align":27055},"docker restart",[3670,30872,30873],{"align":27055},"重新启动容器。",[3670,30875,30876],{"align":27055},"docker restart container_id",[3625,30878,30879,30882,30885],{},[3670,30880,30881],{"align":27055},"docker ps",[3670,30883,30884],{"align":27055},"列出当前正在运行的容器。",[3670,30886,30881],{"align":27055},[3625,30888,30889,30892,30895],{},[3670,30890,30891],{"align":27055},"docker rm",[3670,30893,30894],{"align":27055},"删除一个或多个停止的容器。",[3670,30896,30897],{"align":27055},"docker rm container_id",[3625,30899,30900,30903,30906],{},[3670,30901,30902],{"align":27055},"docker exec",[3670,30904,30905],{"align":27055},"在一个正在运行的容器中执行命令。",[3670,30907,30908],{"align":27055},"docker exec -it container_id bash",[3625,30910,30911,30914,30917],{},[3670,30912,30913],{"align":27055},"docker logs",[3670,30915,30916],{"align":27055},"查看容器的日志输出。",[3670,30918,30919],{"align":27055},"docker logs container_id",[3625,30921,30922,30925,30928],{},[3670,30923,30924],{"align":27055},"docker images",[3670,30926,30927],{"align":27055},"列出本地所有镜像。",[3670,30929,30924],{"align":27055},[3625,30931,30932,30935,30938],{},[3670,30933,30934],{"align":27055},"docker rmi",[3670,30936,30937],{"align":27055},"删除一个或多个镜像。",[3670,30939,30940],{"align":27055},"docker rmi myimage",[3625,30942,30943,30946,30949],{},[3670,30944,30945],{"align":27055},"docker network",[3670,30947,30948],{"align":27055},"管理 Docker 网络。",[3670,30950,30951],{"align":27055},"docker network ls",[3625,30953,30954,30957,30960],{},[3670,30955,30956],{"align":27055},"docker volume",[3670,30958,30959],{"align":27055},"管理 Docker 数据卷。",[3670,30961,30962],{"align":27055},"docker volume ls",[3625,30964,30965,30968,30971],{},[3670,30966,30967],{"align":27055},"docker-compose up",[3670,30969,30970],{"align":27055},"启动 docker-compose.yml 中定义的所有服务。",[3670,30972,30967],{"align":27055},[3625,30974,30975,30978,30981],{},[3670,30976,30977],{"align":27055},"docker-compose down",[3670,30979,30980],{"align":27055},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[3670,30982,30977],{"align":27055},[3625,30984,30985,30988,30991],{},[3670,30986,30987],{"align":27055},"docker info",[3670,30989,30990],{"align":27055},"显示 Docker 系统的详细信息。",[3670,30992,30987],{"align":27055},[3625,30994,30995,30998,31001],{},[3670,30996,30997],{"align":27055},"docker stats",[3670,30999,31000],{"align":27055},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[3670,31002,30997],{"align":27055},[3625,31004,31005,31008,31011],{},[3670,31006,31007],{"align":27055},"docker inspect",[3670,31009,31010],{"align":27055},"查看容器或镜像的详细信息（JSON 格式）。",[3670,31012,31013],{"align":27055},"docker inspect container_id",[3625,31015,31016,31019,31022],{},[3670,31017,31018],{"align":27055},"docker save",[3670,31020,31021],{"align":27055},"将一个镜像保存为 tar 文件。",[3670,31023,31024],{"align":27055},"docker save -o myimage.tar myimage",[3625,31026,31027,31030,31033],{},[3670,31028,31029],{"align":27055},"docker load",[3670,31031,31032],{"align":27055},"从 tar 文件中加载镜像。",[3670,31034,31035],{"align":27055},"docker load -i myimage.tar",[3625,31037,31038,31041,31044],{},[3670,31039,31040],{"align":27055},"docker tag",[3670,31042,31043],{"align":27055},"为镜像添加标签（tag）。",[3670,31045,31046],{"align":27055},"docker tag myimage myimage:v1",[3625,31048,31049,31052,31055],{},[3670,31050,31051],{"align":27055},"docker buildx build",[3670,31053,31054],{"align":27055},"使用 Buildx 构建多架构镜像。",[3670,31056,31057],{"align":27055},"docker buildx build -t myimage .",[3625,31059,31060,31063,31066],{},[3670,31061,31062],{"align":27055},"docker buildx create",[3670,31064,31065],{"align":27055},"创建一个新的 Buildx 构建实例。",[3670,31067,31068],{"align":27055},"docker buildx create –use",[3625,31070,31071,31074,31077],{},[3670,31072,31073],{"align":27055},"docker buildx ls",[3670,31075,31076],{"align":27055},"列出所有可用的 Buildx 构建实例。",[3670,31078,31073],{"align":27055},[3625,31080,31081,31084,31087],{},[3670,31082,31083],{"align":27055},"docker buildx use",[3670,31085,31086],{"align":27055},"设置当前的 Buildx 构建实例。",[3670,31088,31089],{"align":27055},"docker buildx use mybuilder",[3625,31091,31092,31095,31098],{},[3670,31093,31094],{"align":27055},"docker buildx bake",[3670,31096,31097],{"align":27055},"使用 Bake 文件批量构建镜像。",[3670,31099,31100],{"align":27055},"docker buildx bake -f bake.hcl",[3625,31102,31103,31106,31109],{},[3670,31104,31105],{"align":27055},"docker buildx build –push",[3670,31107,31108],{"align":27055},"构建镜像并推送到镜像仓库。",[3670,31110,31111],{"align":27055},"docker buildx build –push -t myimage .",[3625,31113,31114,31117,31120],{},[3670,31115,31116],{"align":27055},"docker buildx build –platform",[3670,31118,31119],{"align":27055},"构建镜像并为多个平台生成支持。",[3670,31121,31122],{"align":27055},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,31124,31125],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,31127,31128],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,31130,31131],{},"docker images 可以查看已经下载的镜像",[19,31133,31134],{},[438,31135],{"alt":36,"src":31136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,31138,31139],{},[409,31140,31141],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,31143,31144],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,31146,31147],{},"docker container logs 查看容器日志",[19,31149,31150],{},"docker top 查看容器里的进程",[19,31152,31153],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[31,31155,31157],{"className":27141,"code":31156,"language":27143,"meta":36,"style":36},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[26,31158,31159],{"__ignoreMap":36},[40,31160,31161,31164,31167,31170],{"class":42,"line":43},[40,31162,31163],{"class":596},"如：docker",[40,31165,31166],{"class":94}," cp",[40,31168,31169],{"class":94}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[40,31171,31172],{"class":94}," \u002Fmydata\u002Fnginx\n",[19,31174,31175],{},"docker run时在启动容器的时候会有几个常用的选项：",[1338,31177,31178,31181,31184],{},[495,31179,31180],{},"-d选项：表示后台运行",[495,31182,31183],{},"-P选项：随机端口映射",[495,31185,31186],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[402,31188,31190],{"id":31189},"_53run命令的参数非常重要",[409,31191,31192],{},"5.3.run命令的参数（非常重要）",[3619,31194,31195,31208],{},[3622,31196,31197],{},[3625,31198,31199,31202,31205],{},[3628,31200,31201],{"align":27055},"参数\u002F配置",[3628,31203,31204],{"align":27055},"功能说明",[3628,31206,31207],{"align":27055},"重要性与参考依据",[3665,31209,31210,31221,31232,31243,31254,31265,31276,31287,31298,31309,31320,31331,31342,31353,31364],{},[3625,31211,31212,31215,31218],{},[3670,31213,31214],{"align":27055},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[3670,31216,31217],{"align":27055},"指定容器名称，便于后续管理",[3670,31219,31220],{"align":27055},"替代随机生成的容器名。",[3625,31222,31223,31226,31229],{},[3670,31224,31225],{"align":27055},"–gpus all",[3670,31227,31228],{"align":27055},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[3670,31230,31231],{"align":27055},"用于CUDA加速等GPU依赖任务。",[3625,31233,31234,31237,31240],{},[3670,31235,31236],{"align":27055},"-e NVIDIA_DRIVER_CAPABILITIES=all",[3670,31238,31239],{"align":27055},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[3670,31241,31242],{"align":27055},"确保容器内GPU功能完整67。",[3625,31244,31245,31248,31251],{},[3670,31246,31247],{"align":27055},"-dit",[3670,31249,31250],{"align":27055},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[3670,31252,31253],{"align":27055},"允许容器在后台运行并支持交互操作。",[3625,31255,31256,31259,31262],{},[3670,31257,31258],{"align":27055},"–privileged",[3670,31260,31261],{"align":27055},"赋予容器完全主机权限（可访问设备、内核模块等）",[3670,31263,31264],{"align":27055},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[3625,31266,31267,31270,31273],{},[3670,31268,31269],{"align":27055},"–net=host",[3670,31271,31272],{"align":27055},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[3670,31274,31275],{"align":27055},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[3625,31277,31278,31281,31284],{},[3670,31279,31280],{"align":27055},"–group-add audio–group-add video–group-add dialout",[3670,31282,31283],{"align":27055},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[3670,31285,31286],{"align":27055},"避免权限问题（如避免无法调用摄像头、麦克风）。",[3625,31288,31289,31292,31295],{},[3670,31290,31291],{"align":27055},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[3670,31293,31294],{"align":27055},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[3670,31296,31297],{"align":27055},"支持容器内运行图形界面应用（如OpenCV可视化）。",[3625,31299,31300,31303,31306],{},[3670,31301,31302],{"align":27055},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[3670,31304,31305],{"align":27055},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[3670,31307,31308],{"align":27055},"实现容器内图形显示。",[3625,31310,31311,31314,31317],{},[3670,31312,31313],{"align":27055},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[3670,31315,31316],{"align":27055},"挂载X11认证文件（只读）",[3670,31318,31319],{"align":27055},"确保容器有权连接宿主机显示服务。",[3625,31321,31322,31325,31328],{},[3670,31323,31324],{"align":27055},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[3670,31326,31327],{"align":27055},"挂载Wayland显示协议相关目录",[3670,31329,31330],{"align":27055},"支持Wayland协议的图形显示。",[3625,31332,31333,31336,31339],{},[3670,31334,31335],{"align":27055},"–ulimit nofile=1024:524288",[3670,31337,31338],{"align":27055},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[3670,31340,31341],{"align":27055},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[3625,31343,31344,31347,31350],{},[3670,31345,31346],{"align":27055},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[3670,31348,31349],{"align":27055},"挂载宿主机用户目录到容器内同名路径",[3670,31351,31352],{"align":27055},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[3625,31354,31355,31358,31361],{},[3670,31356,31357],{"align":27055},"-w \u002Fhome\u002Ftungchiahui",[3670,31359,31360],{"align":27055},"设置容器启动后的默认工作目录",[3670,31362,31363],{"align":27055},"直接进入项目路径，方便执行命令2324。",[3625,31365,31366,31369,31372],{},[3670,31367,31368],{"align":27055},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[3670,31370,31371],{"align":27055},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[3670,31373,31374],{"align":27055},"提供预配置的深度学习与机器人开发环境。",[19,31376,31377,31378,31380,31381,31384],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[26,31379,923],{},"加不加",[26,31382,31383],{},"sudo -E","都无所谓。",[19,31386,31387,31388,31390,31391,31393,31394,31397,31398,31400],{},"用户已经被加到docker组了，不用",[26,31389,923],{},"也行跑，其次，",[26,31392,923],{},"运行的话，你的",[26,31395,31396],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[26,31399,31396],{},"更不可能变了。",[31,31402,31404],{"className":27141,"code":31403,"language":27143,"meta":36,"style":36},"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",[26,31405,31406,31419,31429,31439,31451,31458,31465,31472,31482,31491,31500,31514,31526,31538,31547,31557,31566,31581,31614,31641,31652,31659],{"__ignoreMap":36},[40,31407,31408,31410,31412,31414,31417],{"class":42,"line":43},[40,31409,923],{"class":596},[40,31411,29630],{"class":94},[40,31413,30535],{"class":94},[40,31415,31416],{"class":63}," --name=ros_opencv_cuda",[40,31418,27993],{"class":63},[40,31420,31421,31424,31427],{"class":42,"line":54},[40,31422,31423],{"class":50},"--gpus ",[40,31425,31426],{"class":94},"all",[40,31428,27993],{"class":63},[40,31430,31431,31434,31437],{"class":42,"line":70},[40,31432,31433],{"class":50},"-e ",[40,31435,31436],{"class":94},"NVIDIA_DRIVER_CAPABILITIES=all",[40,31438,27993],{"class":63},[40,31440,31441,31443,31446,31449],{"class":42,"line":78},[40,31442,31433],{"class":50},[40,31444,31445],{"class":94},"DISPLAY=",[40,31447,31448],{"class":50},"$DISPLAY ",[40,31450,29487],{"class":63},[40,31452,31453,31456],{"class":42,"line":86},[40,31454,31455],{"class":50},"-dit ",[40,31457,29487],{"class":63},[40,31459,31460,31463],{"class":42,"line":100},[40,31461,31462],{"class":50},"--privileged ",[40,31464,29487],{"class":63},[40,31466,31467,31470],{"class":42,"line":108},[40,31468,31469],{"class":50},"--net=host ",[40,31471,29487],{"class":63},[40,31473,31474,31477,31480],{"class":42,"line":121},[40,31475,31476],{"class":50},"--group-add ",[40,31478,31479],{"class":94},"audio",[40,31481,27993],{"class":63},[40,31483,31484,31486,31489],{"class":42,"line":134},[40,31485,31476],{"class":50},[40,31487,31488],{"class":94},"video",[40,31490,27993],{"class":63},[40,31492,31493,31495,31498],{"class":42,"line":146},[40,31494,31476],{"class":50},[40,31496,31497],{"class":94},"dialout",[40,31499,27993],{"class":63},[40,31501,31502,31504,31507,31509,31512],{"class":42,"line":154},[40,31503,31433],{"class":50},[40,31505,31506],{"class":94},"XAUTHORITY=",[40,31508,31396],{"class":50},[40,31510,31511],{"class":94},"\u002F.Xauthority",[40,31513,27993],{"class":63},[40,31515,31516,31518,31521,31524],{"class":42,"line":162},[40,31517,31433],{"class":50},[40,31519,31520],{"class":94},"WAYLAND_DISPLAY=",[40,31522,31523],{"class":50},"$WAYLAND_DISPLAY ",[40,31525,29487],{"class":63},[40,31527,31528,31530,31533,31536],{"class":42,"line":170},[40,31529,31433],{"class":50},[40,31531,31532],{"class":94},"XDG_RUNTIME_DIR=",[40,31534,31535],{"class":50},"$XDG_RUNTIME_DIR ",[40,31537,29487],{"class":63},[40,31539,31540,31542,31545],{"class":42,"line":183},[40,31541,31433],{"class":50},[40,31543,31544],{"class":94},"QT_QPA_PLATFORM=xcb",[40,31546,27993],{"class":63},[40,31548,31549,31552,31555],{"class":42,"line":196},[40,31550,31551],{"class":50},"-v ",[40,31553,31554],{"class":94},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[40,31556,27993],{"class":63},[40,31558,31559,31561,31564],{"class":42,"line":204},[40,31560,31551],{"class":50},[40,31562,31563],{"class":94},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[40,31565,27993],{"class":63},[40,31567,31568,31571,31574,31576,31579],{"class":42,"line":217},[40,31569,31570],{"class":50},"-v $HOME",[40,31572,31573],{"class":94},"\u002F.Xauthority:",[40,31575,31396],{"class":50},[40,31577,31578],{"class":94},"\u002F.Xauthority:ro",[40,31580,27993],{"class":63},[40,31582,31583,31585,31588,31590,31593,31596,31598,31601,31603,31605,31607,31609,31612],{"class":42,"line":230},[40,31584,31551],{"class":50},[40,31586,31587],{"class":94},"\u002Frun\u002Fuser\u002F",[40,31589,28414],{"class":50},[40,31591,31592],{"class":596},"id",[40,31594,31595],{"class":63}," -u",[40,31597,3908],{"class":50},[40,31599,31600],{"class":94},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[40,31602,28414],{"class":50},[40,31604,31592],{"class":596},[40,31606,31595],{"class":63},[40,31608,3908],{"class":50},[40,31610,31611],{"class":94},"\u002Fwayland-0",[40,31613,27993],{"class":63},[40,31615,31616,31618,31620,31622,31624,31626,31628,31631,31633,31635,31637,31639],{"class":42,"line":238},[40,31617,31551],{"class":50},[40,31619,31587],{"class":94},[40,31621,28414],{"class":50},[40,31623,31592],{"class":596},[40,31625,31595],{"class":63},[40,31627,3908],{"class":50},[40,31629,31630],{"class":94},":\u002Frun\u002Fuser\u002F",[40,31632,28414],{"class":50},[40,31634,31592],{"class":596},[40,31636,31595],{"class":63},[40,31638,17036],{"class":50},[40,31640,29487],{"class":63},[40,31642,31643,31645,31647,31650],{"class":42,"line":251},[40,31644,31570],{"class":50},[40,31646,4336],{"class":94},[40,31648,31649],{"class":50},"$HOME ",[40,31651,29487],{"class":63},[40,31653,31654,31657],{"class":42,"line":264},[40,31655,31656],{"class":50},"-w $HOME ",[40,31658,29487],{"class":63},[40,31660,31661],{"class":42,"line":277},[40,31662,31663],{"class":50},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,31665,12347],{},[492,31667,31668,31676,31679,31682],{},[495,31669,31670,17117,31672,31675],{},[26,31671,31436],{},[26,31673,31674],{},"--gpus all","没有英伟达显卡请注释。",[495,31677,31678],{},"--name后面请自己为容器起名。",[495,31680,31681],{},"最后一行仓库名称请你自己找对应的镜像填上。",[495,31683,31684,31685,776],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[1356,31686,31687],{},[409,31688,31689],{},"请不要加",[31,31691,31693],{"className":27141,"code":31692,"language":27143,"meta":36,"style":36},"--ulimit nofile=1024:524288 \\\n",[26,31694,31695],{"__ignoreMap":36},[40,31696,31697,31700,31703],{"class":42,"line":43},[40,31698,31699],{"class":596},"--ulimit",[40,31701,31702],{"class":94}," nofile=1024:524288",[40,31704,27993],{"class":63},[19,31706,31707,31708,31713],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[1356,31709,31710],{},[409,31711,31712],{},"不建议","**.**",[31,31715,31717],{"className":27141,"code":31716,"language":27143,"meta":36,"style":36},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[26,31718,31719,31745,31754],{"__ignoreMap":36},[40,31720,31721,31724,31726,31728,31730,31732,31734,31736,31738,31741,31743],{"class":42,"line":43},[40,31722,31723],{"class":596},"--user",[40,31725,1792],{"class":50},[40,31727,31592],{"class":596},[40,31729,31595],{"class":63},[40,31731,3908],{"class":50},[40,31733,4336],{"class":94},[40,31735,28414],{"class":50},[40,31737,31592],{"class":596},[40,31739,31740],{"class":63}," -g",[40,31742,17036],{"class":50},[40,31744,29487],{"class":63},[40,31746,31747,31749,31752],{"class":42,"line":54},[40,31748,31551],{"class":50},[40,31750,31751],{"class":94},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[40,31753,27993],{"class":63},[40,31755,31756,31758,31761],{"class":42,"line":70},[40,31757,31551],{"class":50},[40,31759,31760],{"class":94},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[40,31762,27993],{"class":63},[3384,31764,31765],{},"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":36,"searchDepth":54,"depth":54,"links":31767},[31768,31769,31770],{"id":30768,"depth":70,"text":30769},{"id":30778,"depth":70,"text":30779},{"id":31189,"depth":70,"text":31192},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":30760,"description":36},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":31777,"title":31778,"body":31779,"description":36,"extension":3414,"meta":33401,"navigation":1412,"path":33402,"seo":33403,"stem":33404,"__hash__":33405},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":31780,"toc":33396},[31781,31784,31788,31791,32013,32017,32021,32024,32130,32135,32138,32143,32146,32151,32154,32159,32162,32174,32177,32182,32189,32217,32224,32300,32305,32308,32331,32333,32408,32413,32416,32420,32428,32433,32438,32442,32453,32459,32462,32465,32489,32492,32495,32522,32525,32528,32993,32996,33001,33006,33010,33033,33038,33042,33046,33049,33052,33055,33082,33085,33088,33106,33109,33112,33134,33142,33147,33152,33156,33159,33162,33165,33168,33213,33216,33234,33237,33242,33245,33266,33269,33325,33328,33333,33337,33340,33347,33350,33353,33358,33361,33377,33380,33393],[10,31782,31778],{"id":31783},"_6手动创建docker镜像",[402,31785,31787],{"id":31786},"_61dockerfile","6.1.DockerFile",[19,31789,31790],{},"常用命令：",[3619,31792,31793,31804],{},[3622,31794,31795],{},[3625,31796,31797,31800,31802],{},[3628,31798,31799],{"align":27055},"指令",[3628,31801,29181],{"align":27055},[3628,31803,30797],{"align":27055},[3665,31805,31806,31816,31832,31843,31854,31865,31876,31887,31898,31912,31926,31937,31951,31962,31973,31987,32002],{},[3625,31807,31808,31810,31813],{},[3670,31809,30675],{"align":27055},[3670,31811,31812],{"align":27055},"指定基础镜像，是 Dockerfile 的起点",[3670,31814,31815],{"align":27055},"FROM ubuntu:22.04",[3625,31817,31818,31821,31824],{},[3670,31819,31820],{"align":27055},"LABEL",[3670,31822,31823],{"align":27055},"添加元数据（如作者、版本等）",[3670,31825,31826,31827,31831],{"align":27055},"LABEL maintainer=”",[2106,31828,31830],{"href":31829},"mailto:you@example.com","you@example.com","”",[3625,31833,31834,31837,31840],{},[3670,31835,31836],{"align":27055},"ENV",[3670,31838,31839],{"align":27055},"设置环境变量",[3670,31841,31842],{"align":27055},"ENV PORT=8080",[3625,31844,31845,31848,31851],{},[3670,31846,31847],{"align":27055},"ARG",[3670,31849,31850],{"align":27055},"构建参数，只在构建期间可用",[3670,31852,31853],{"align":27055},"ARG VERSION=1.0",[3625,31855,31856,31859,31862],{},[3670,31857,31858],{"align":27055},"RUN",[3670,31860,31861],{"align":27055},"构建镜像时运行命令",[3670,31863,31864],{"align":27055},"RUN apt-get update && apt-get install -y curl",[3625,31866,31867,31870,31873],{},[3670,31868,31869],{"align":27055},"COPY",[3670,31871,31872],{"align":27055},"复制文件到镜像中",[3670,31874,31875],{"align":27055},"COPY . \u002Fapp",[3625,31877,31878,31881,31884],{},[3670,31879,31880],{"align":27055},"ADD",[3670,31882,31883],{"align":27055},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[3670,31885,31886],{"align":27055},"ADD archive.tar.gz \u002Fdata\u002F",[3625,31888,31889,31892,31895],{},[3670,31890,31891],{"align":27055},"WORKDIR",[3670,31893,31894],{"align":27055},"设置工作目录",[3670,31896,31897],{"align":27055},"WORKDIR \u002Fopt",[3625,31899,31900,31903,31906],{},[3670,31901,31902],{"align":27055},"CMD",[3670,31904,31905],{"align":27055},"设置容器启动时默认命令（可被 docker run 覆盖）",[3670,31907,31908,31909],{"align":27055},"CMD ",[40,31910,31911],{},"“node”, “index.js”",[3625,31913,31914,31917,31920],{},[3670,31915,31916],{"align":27055},"ENTRYPOINT",[3670,31918,31919],{"align":27055},"设置容器启动时固定命令（通常用于 CLI 工具等）",[3670,31921,31922,31923],{"align":27055},"ENTRYPOINT ",[40,31924,31925],{},"“python3”",[3625,31927,31928,31931,31934],{},[3670,31929,31930],{"align":27055},"EXPOSE",[3670,31932,31933],{"align":27055},"声明镜像内服务监听的端口（不会自动映射）",[3670,31935,31936],{"align":27055},"EXPOSE 80",[3625,31938,31939,31942,31945],{},[3670,31940,31941],{"align":27055},"VOLUME",[3670,31943,31944],{"align":27055},"声明数据卷挂载点",[3670,31946,31947,31948],{"align":27055},"VOLUME ",[40,31949,31950],{},"“\u002Fdata”",[3625,31952,31953,31956,31959],{},[3670,31954,31955],{"align":27055},"USER",[3670,31957,31958],{"align":27055},"设置后续命令执行的用户",[3670,31960,31961],{"align":27055},"USER appuser",[3625,31963,31964,31967,31970],{},[3670,31965,31966],{"align":27055},"ONBUILD",[3670,31968,31969],{"align":27055},"当镜像作为其他镜像基础镜像时触发的构建指令",[3670,31971,31972],{"align":27055},"ONBUILD COPY . \u002Fsrc",[3625,31974,31975,31978,31981],{},[3670,31976,31977],{"align":27055},"SHELL",[3670,31979,31980],{"align":27055},"更改默认 shell，比如将 sh -c 改为 bash -c",[3670,31982,31983,31984],{"align":27055},"SHELL ",[40,31985,31986],{},"“\u002Fbin\u002Fbash”, “-c”",[3625,31988,31989,31992,31995],{},[3670,31990,31991],{"align":27055},"HEALTHCHECK",[3670,31993,31994],{"align":27055},"定义容器运行时的健康检查命令",[3670,31996,31997,31998],{"align":27055},"`HEALTHCHECK CMD curl –fail ",[2106,31999,32000],{"href":32000,"rel":32001},"http:\u002F\u002Flocalhost:8080",[2110],[3625,32003,32004,32007,32010],{},[3670,32005,32006],{"align":27055},"STOPSIGNAL",[3670,32008,32009],{"align":27055},"容器停止时发送的信号",[3670,32011,32012],{"align":27055},"STOPSIGNAL SIGKILL",[402,32014,32016],{"id":32015},"_62自己创建容器","6.2.自己创建容器",[2423,32018,32020],{"id":32019},"_621手动创建","6.2.1.手动创建",[19,32022,32023],{},"在x86电脑上编译x86的：",[31,32025,32027],{"className":27141,"code":32026,"language":27143,"meta":36,"style":36},"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",[26,32028,32029,32045,32049,32062,32066,32079,32083,32096,32100,32113,32117],{"__ignoreMap":36},[40,32030,32031,32033,32036,32039,32042],{"class":42,"line":43},[40,32032,29862],{"class":596},[40,32034,32035],{"class":94}," build",[40,32037,32038],{"class":63}," -t",[40,32040,32041],{"class":94}," ros-melodic-cuda118-cudnn8-bionic:latest",[40,32043,32044],{"class":94}," .\n",[40,32046,32047],{"class":42,"line":54},[40,32048,1413],{"emptyLinePlaceholder":1412},[40,32050,32051,32053,32055,32057,32060],{"class":42,"line":70},[40,32052,29862],{"class":596},[40,32054,32035],{"class":94},[40,32056,32038],{"class":63},[40,32058,32059],{"class":94}," ros-noetic-focal:latest",[40,32061,32044],{"class":94},[40,32063,32064],{"class":42,"line":78},[40,32065,1413],{"emptyLinePlaceholder":1412},[40,32067,32068,32070,32072,32074,32077],{"class":42,"line":86},[40,32069,29862],{"class":596},[40,32071,32035],{"class":94},[40,32073,32038],{"class":63},[40,32075,32076],{"class":94}," ros-humble-jammy:latest",[40,32078,32044],{"class":94},[40,32080,32081],{"class":42,"line":100},[40,32082,1413],{"emptyLinePlaceholder":1412},[40,32084,32085,32087,32089,32091,32094],{"class":42,"line":108},[40,32086,29862],{"class":596},[40,32088,32035],{"class":94},[40,32090,32038],{"class":63},[40,32092,32093],{"class":94}," ros-jazzy-noble:latest",[40,32095,32044],{"class":94},[40,32097,32098],{"class":42,"line":121},[40,32099,1413],{"emptyLinePlaceholder":1412},[40,32101,32102,32104,32106,32108,32111],{"class":42,"line":134},[40,32103,29862],{"class":596},[40,32105,32035],{"class":94},[40,32107,32038],{"class":63},[40,32109,32110],{"class":94}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[40,32112,32044],{"class":94},[40,32114,32115],{"class":42,"line":146},[40,32116,1413],{"emptyLinePlaceholder":1412},[40,32118,32119,32121,32123,32125,32128],{"class":42,"line":154},[40,32120,29862],{"class":596},[40,32122,32035],{"class":94},[40,32124,32038],{"class":63},[40,32126,32127],{"class":94}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[40,32129,32044],{"class":94},[19,32131,32132],{},[438,32133],{"alt":36,"src":32134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,32136,32137],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,32139,32140],{},[438,32141],{"alt":36,"src":32142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,32144,32145],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[492,32147,32148],{},[495,32149,32150],{},"创建 Docker Hub 账户",[19,32152,32153],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[492,32155,32156],{"start":54},[495,32157,32158],{},"登录 Docker Hub",[19,32160,32161],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[31,32163,32165],{"className":27141,"code":32164,"language":27143,"meta":36,"style":36},"docker login\n",[26,32166,32167],{"__ignoreMap":36},[40,32168,32169,32171],{"class":42,"line":43},[40,32170,29862],{"class":596},[40,32172,32173],{"class":94}," login\n",[19,32175,32176],{},"输入你的 Docker Hub 用户名和密码进行验证。",[492,32178,32179],{},[495,32180,32181],{},"为你的镜像打标签",[19,32183,32184,32185,32188],{},"Docker Hub 使用 ",[26,32186,32187],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[31,32190,32192],{"className":27141,"code":32191,"language":27143,"meta":36,"style":36},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[26,32193,32194],{"__ignoreMap":36},[40,32195,32196,32198,32201,32203,32206,32209,32212,32214],{"class":42,"line":43},[40,32197,29862],{"class":596},[40,32199,32200],{"class":94}," tag",[40,32202,32093],{"class":94},[40,32204,32205],{"class":1283}," \u003C",[40,32207,32208],{"class":94},"你的用户",[40,32210,32211],{"class":50},"名",[40,32213,4437],{"class":1283},[40,32215,32216],{"class":94},"\u002Fros-jazzy-noble:latest\n",[19,32218,32219,32220,32223],{},"例如，如果你的 Docker Hub 用户名是 ",[26,32221,32222],{},"tungchiahui","，你应该执行：",[31,32225,32227],{"className":27141,"code":32226,"language":27143,"meta":36,"style":36},"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",[26,32228,32229,32240,32244,32255,32259,32270,32274,32285,32289],{"__ignoreMap":36},[40,32230,32231,32233,32235,32237],{"class":42,"line":43},[40,32232,29862],{"class":596},[40,32234,32200],{"class":94},[40,32236,32059],{"class":94},[40,32238,32239],{"class":94}," tungchiahui\u002Fros-noetic-focal:latest\n",[40,32241,32242],{"class":42,"line":54},[40,32243,1413],{"emptyLinePlaceholder":1412},[40,32245,32246,32248,32250,32252],{"class":42,"line":70},[40,32247,29862],{"class":596},[40,32249,32200],{"class":94},[40,32251,32076],{"class":94},[40,32253,32254],{"class":94}," tungchiahui\u002Fros-humble-jammy:latest\n",[40,32256,32257],{"class":42,"line":78},[40,32258,1413],{"emptyLinePlaceholder":1412},[40,32260,32261,32263,32265,32267],{"class":42,"line":86},[40,32262,29862],{"class":596},[40,32264,32200],{"class":94},[40,32266,32093],{"class":94},[40,32268,32269],{"class":94}," tungchiahui\u002Fros-jazzy-noble:latest\n",[40,32271,32272],{"class":42,"line":100},[40,32273,1413],{"emptyLinePlaceholder":1412},[40,32275,32276,32278,32280,32282],{"class":42,"line":108},[40,32277,29862],{"class":596},[40,32279,32200],{"class":94},[40,32281,32110],{"class":94},[40,32283,32284],{"class":94}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[40,32286,32287],{"class":42,"line":121},[40,32288,1413],{"emptyLinePlaceholder":1412},[40,32290,32291,32293,32295,32297],{"class":42,"line":134},[40,32292,29862],{"class":596},[40,32294,32200],{"class":94},[40,32296,32127],{"class":94},[40,32298,32299],{"class":94}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[492,32301,32302],{"start":54},[495,32303,32304],{},"推送镜像到 Docker Hub",[19,32306,32307],{},"使用以下命令将镜像推送到 Docker Hub：",[31,32309,32311],{"className":27141,"code":32310,"language":27143,"meta":36,"style":36},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[26,32312,32313],{"__ignoreMap":36},[40,32314,32315,32317,32320,32322,32324,32326,32328],{"class":42,"line":43},[40,32316,29862],{"class":596},[40,32318,32319],{"class":94}," push",[40,32321,32205],{"class":1283},[40,32323,32208],{"class":94},[40,32325,32211],{"class":50},[40,32327,4437],{"class":1283},[40,32329,32330],{"class":94},"\u002Fros-noetic-jazzy-noble:latest\n",[19,32332,17955],{},[31,32334,32336],{"className":27141,"code":32335,"language":27143,"meta":36,"style":36},"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",[26,32337,32338,32346,32350,32358,32362,32370,32374,32383,32387,32395,32399],{"__ignoreMap":36},[40,32339,32340,32342,32344],{"class":42,"line":43},[40,32341,29862],{"class":596},[40,32343,32319],{"class":94},[40,32345,32239],{"class":94},[40,32347,32348],{"class":42,"line":54},[40,32349,1413],{"emptyLinePlaceholder":1412},[40,32351,32352,32354,32356],{"class":42,"line":70},[40,32353,29862],{"class":596},[40,32355,32319],{"class":94},[40,32357,32254],{"class":94},[40,32359,32360],{"class":42,"line":78},[40,32361,1413],{"emptyLinePlaceholder":1412},[40,32363,32364,32366,32368],{"class":42,"line":86},[40,32365,29862],{"class":596},[40,32367,32319],{"class":94},[40,32369,32269],{"class":94},[40,32371,32372],{"class":42,"line":100},[40,32373,1413],{"emptyLinePlaceholder":1412},[40,32375,32376,32378,32380],{"class":42,"line":108},[40,32377,29862],{"class":596},[40,32379,32319],{"class":94},[40,32381,32382],{"class":94}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[40,32384,32385],{"class":42,"line":121},[40,32386,1413],{"emptyLinePlaceholder":1412},[40,32388,32389,32391,32393],{"class":42,"line":134},[40,32390,29862],{"class":596},[40,32392,32319],{"class":94},[40,32394,32299],{"class":94},[40,32396,32397],{"class":42,"line":146},[40,32398,1413],{"emptyLinePlaceholder":1412},[40,32400,32401,32403,32405],{"class":42,"line":154},[40,32402,29862],{"class":596},[40,32404,32319],{"class":94},[40,32406,32407],{"class":94}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[492,32409,32410],{"start":70},[495,32411,32412],{},"验证推送成功",[19,32414,32415],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,32417,32418],{},[409,32419,7107],{},[1338,32421,32422,32425],{},[495,32423,32424],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[495,32426,32427],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,32429,32430],{},[438,32431],{"alt":36,"src":32432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,32434,32435],{},[438,32436],{"alt":36,"src":32437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[2423,32439,32441],{"id":32440},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,32443,32444,32445,32448,32449,32452],{},"如果您想在 ",[409,32446,32447],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[409,32450,32451],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,32454,32455,32456],{},"1. ",[409,32457,32458],{},"启用 Docker 跨平台构建",[19,32460,32461],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,32463,32464],{},"第一步：启用 buildx（只需执行一次）",[31,32466,32468],{"className":27141,"code":32467,"language":27143,"meta":36,"style":36},"docker buildx create --name multiarch_builder --use\n",[26,32469,32470],{"__ignoreMap":36},[40,32471,32472,32474,32477,32480,32483,32486],{"class":42,"line":43},[40,32473,29862],{"class":596},[40,32475,32476],{"class":94}," buildx",[40,32478,32479],{"class":94}," create",[40,32481,32482],{"class":63}," --name",[40,32484,32485],{"class":94}," multiarch_builder",[40,32487,32488],{"class":63}," --use\n",[19,32490,32491],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,32493,32494],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[31,32496,32498],{"className":27141,"code":32497,"language":27143,"meta":36,"style":36},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[26,32499,32500],{"__ignoreMap":36},[40,32501,32502,32504,32506,32508,32511,32514,32517,32519],{"class":42,"line":43},[40,32503,29862],{"class":596},[40,32505,30535],{"class":94},[40,32507,30538],{"class":63},[40,32509,32510],{"class":63}," --privileged",[40,32512,32513],{"class":94}," multiarch\u002Fqemu-user-static",[40,32515,32516],{"class":63}," --reset",[40,32518,973],{"class":63},[40,32520,32521],{"class":94}," yes\n",[19,32523,32524],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,32526,32527],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[31,32529,32531],{"className":27141,"code":32530,"language":27143,"meta":36,"style":36},"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",[26,32532,32533,32575,32579,32584,32594,32604,32613,32619,32623,32627,32637,32645,32654,32660,32664,32668,32678,32686,32695,32701,32705,32709,32719,32727,32736,32742,32746,32750,32760,32768,32777,32783,32787,32791,32801,32809,32818,32824,32828,32832,32842,32850,32859,32865,32869,32873,32883,32891,32900,32906,32910,32914,32924,32932,32941,32947,32951,32955,32966,32974,32983,32989],{"__ignoreMap":36},[40,32534,32535,32537,32539,32541,32544,32547,32549,32551,32554,32556,32558,32560,32562,32565,32568,32570,32573],{"class":42,"line":43},[40,32536,29862],{"class":596},[40,32538,32476],{"class":94},[40,32540,32035],{"class":94},[40,32542,32543],{"class":63}," --platform",[40,32545,32546],{"class":94}," linux\u002Famd64,linux\u002Farm64",[40,32548,32038],{"class":63},[40,32550,32205],{"class":1283},[40,32552,32553],{"class":94},"你的镜像",[40,32555,32211],{"class":50},[40,32557,4437],{"class":1283},[40,32559,4336],{"class":94},[40,32561,4387],{"class":1283},[40,32563,32564],{"class":94},"标",[40,32566,32567],{"class":50},"签",[40,32569,4437],{"class":1283},[40,32571,32572],{"class":63}," --push",[40,32574,32044],{"class":94},[40,32576,32577],{"class":42,"line":54},[40,32578,1413],{"emptyLinePlaceholder":1412},[40,32580,32581],{"class":42,"line":70},[40,32582,32583],{"class":997},"# 例子：\n",[40,32585,32586,32588,32590,32592],{"class":42,"line":78},[40,32587,29862],{"class":596},[40,32589,32476],{"class":94},[40,32591,32035],{"class":94},[40,32593,27993],{"class":63},[40,32595,32596,32599,32602],{"class":42,"line":86},[40,32597,32598],{"class":50},"--platform ",[40,32600,32601],{"class":94},"linux\u002Famd64,linux\u002Farm64",[40,32603,27993],{"class":63},[40,32605,32606,32608,32611],{"class":42,"line":100},[40,32607,32038],{"class":63},[40,32609,32610],{"class":94}," tungchiahui\u002Fros:noetic-focal",[40,32612,27993],{"class":63},[40,32614,32615,32617],{"class":42,"line":108},[40,32616,32572],{"class":63},[40,32618,27993],{"class":63},[40,32620,32621],{"class":42,"line":121},[40,32622,32044],{"class":94},[40,32624,32625],{"class":42,"line":134},[40,32626,1413],{"emptyLinePlaceholder":1412},[40,32628,32629,32631,32633,32635],{"class":42,"line":146},[40,32630,29862],{"class":596},[40,32632,32476],{"class":94},[40,32634,32035],{"class":94},[40,32636,27993],{"class":63},[40,32638,32639,32641,32643],{"class":42,"line":154},[40,32640,32598],{"class":50},[40,32642,32601],{"class":94},[40,32644,27993],{"class":63},[40,32646,32647,32649,32652],{"class":42,"line":162},[40,32648,32038],{"class":63},[40,32650,32651],{"class":94}," tungchiahui\u002Fros:humble-jammy",[40,32653,27993],{"class":63},[40,32655,32656,32658],{"class":42,"line":170},[40,32657,32572],{"class":63},[40,32659,27993],{"class":63},[40,32661,32662],{"class":42,"line":183},[40,32663,32044],{"class":94},[40,32665,32666],{"class":42,"line":196},[40,32667,1413],{"emptyLinePlaceholder":1412},[40,32669,32670,32672,32674,32676],{"class":42,"line":204},[40,32671,29862],{"class":596},[40,32673,32476],{"class":94},[40,32675,32035],{"class":94},[40,32677,27993],{"class":63},[40,32679,32680,32682,32684],{"class":42,"line":217},[40,32681,32598],{"class":50},[40,32683,32601],{"class":94},[40,32685,27993],{"class":63},[40,32687,32688,32690,32693],{"class":42,"line":230},[40,32689,32038],{"class":63},[40,32691,32692],{"class":94}," tungchiahui\u002Fros:jazzy-noble",[40,32694,27993],{"class":63},[40,32696,32697,32699],{"class":42,"line":238},[40,32698,32572],{"class":63},[40,32700,27993],{"class":63},[40,32702,32703],{"class":42,"line":251},[40,32704,32044],{"class":94},[40,32706,32707],{"class":42,"line":264},[40,32708,1413],{"emptyLinePlaceholder":1412},[40,32710,32711,32713,32715,32717],{"class":42,"line":277},[40,32712,29630],{"class":596},[40,32714,32476],{"class":94},[40,32716,32035],{"class":94},[40,32718,27993],{"class":63},[40,32720,32721,32723,32725],{"class":42,"line":290},[40,32722,32598],{"class":50},[40,32724,32601],{"class":94},[40,32726,27993],{"class":63},[40,32728,32729,32731,32734],{"class":42,"line":298},[40,32730,32038],{"class":63},[40,32732,32733],{"class":94}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[40,32735,27993],{"class":63},[40,32737,32738,32740],{"class":42,"line":310},[40,32739,32572],{"class":63},[40,32741,27993],{"class":63},[40,32743,32744],{"class":42,"line":5086},[40,32745,32044],{"class":94},[40,32747,32748],{"class":42,"line":5091},[40,32749,1413],{"emptyLinePlaceholder":1412},[40,32751,32752,32754,32756,32758],{"class":42,"line":5105},[40,32753,29862],{"class":596},[40,32755,32476],{"class":94},[40,32757,32035],{"class":94},[40,32759,27993],{"class":63},[40,32761,32762,32764,32766],{"class":42,"line":5110},[40,32763,32598],{"class":50},[40,32765,32601],{"class":94},[40,32767,27993],{"class":63},[40,32769,32770,32772,32775],{"class":42,"line":5902},[40,32771,32038],{"class":63},[40,32773,32774],{"class":94}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[40,32776,27993],{"class":63},[40,32778,32779,32781],{"class":42,"line":5916},[40,32780,32572],{"class":63},[40,32782,27993],{"class":63},[40,32784,32785],{"class":42,"line":5924},[40,32786,32044],{"class":94},[40,32788,32789],{"class":42,"line":5929},[40,32790,1413],{"emptyLinePlaceholder":1412},[40,32792,32793,32795,32797,32799],{"class":42,"line":5935},[40,32794,29630],{"class":596},[40,32796,32476],{"class":94},[40,32798,32035],{"class":94},[40,32800,27993],{"class":63},[40,32802,32803,32805,32807],{"class":42,"line":5941},[40,32804,32598],{"class":50},[40,32806,32601],{"class":94},[40,32808,27993],{"class":63},[40,32810,32811,32813,32816],{"class":42,"line":5946},[40,32812,32038],{"class":63},[40,32814,32815],{"class":94}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[40,32817,27993],{"class":63},[40,32819,32820,32822],{"class":42,"line":11270},[40,32821,32572],{"class":63},[40,32823,27993],{"class":63},[40,32825,32826],{"class":42,"line":11294},[40,32827,32044],{"class":94},[40,32829,32830],{"class":42,"line":11299},[40,32831,1413],{"emptyLinePlaceholder":1412},[40,32833,32834,32836,32838,32840],{"class":42,"line":11305},[40,32835,29862],{"class":596},[40,32837,32476],{"class":94},[40,32839,32035],{"class":94},[40,32841,27993],{"class":63},[40,32843,32844,32846,32848],{"class":42,"line":11332},[40,32845,32598],{"class":50},[40,32847,32601],{"class":94},[40,32849,27993],{"class":63},[40,32851,32852,32854,32857],{"class":42,"line":11337},[40,32853,32038],{"class":63},[40,32855,32856],{"class":94}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[40,32858,27993],{"class":63},[40,32860,32861,32863],{"class":42,"line":11343},[40,32862,32572],{"class":63},[40,32864,27993],{"class":63},[40,32866,32867],{"class":42,"line":11355},[40,32868,32044],{"class":94},[40,32870,32871],{"class":42,"line":11367},[40,32872,1413],{"emptyLinePlaceholder":1412},[40,32874,32875,32877,32879,32881],{"class":42,"line":11379},[40,32876,29862],{"class":596},[40,32878,32476],{"class":94},[40,32880,32035],{"class":94},[40,32882,27993],{"class":63},[40,32884,32885,32887,32889],{"class":42,"line":13038},[40,32886,32598],{"class":50},[40,32888,32601],{"class":94},[40,32890,27993],{"class":63},[40,32892,32893,32895,32898],{"class":42,"line":13063},[40,32894,32038],{"class":63},[40,32896,32897],{"class":94}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[40,32899,27993],{"class":63},[40,32901,32902,32904],{"class":42,"line":13086},[40,32903,32572],{"class":63},[40,32905,27993],{"class":63},[40,32907,32908],{"class":42,"line":13110},[40,32909,32044],{"class":94},[40,32911,32912],{"class":42,"line":13115},[40,32913,1413],{"emptyLinePlaceholder":1412},[40,32915,32916,32918,32920,32922],{"class":42,"line":13120},[40,32917,29630],{"class":596},[40,32919,32476],{"class":94},[40,32921,32035],{"class":94},[40,32923,27993],{"class":63},[40,32925,32926,32928,32930],{"class":42,"line":13125},[40,32927,32598],{"class":50},[40,32929,32601],{"class":94},[40,32931,27993],{"class":63},[40,32933,32934,32936,32939],{"class":42,"line":13134},[40,32935,32038],{"class":63},[40,32937,32938],{"class":94}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[40,32940,27993],{"class":63},[40,32942,32943,32945],{"class":42,"line":13139},[40,32944,32572],{"class":63},[40,32946,27993],{"class":63},[40,32948,32949],{"class":42,"line":13145},[40,32950,32044],{"class":94},[40,32952,32953],{"class":42,"line":13166},[40,32954,1413],{"emptyLinePlaceholder":1412},[40,32956,32957,32960,32962,32964],{"class":42,"line":13172},[40,32958,32959],{"class":596},"  docker",[40,32961,32476],{"class":94},[40,32963,32035],{"class":94},[40,32965,27993],{"class":63},[40,32967,32968,32970,32972],{"class":42,"line":13186},[40,32969,32598],{"class":50},[40,32971,32601],{"class":94},[40,32973,27993],{"class":63},[40,32975,32976,32978,32981],{"class":42,"line":13192},[40,32977,32038],{"class":63},[40,32979,32980],{"class":94}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[40,32982,27993],{"class":63},[40,32984,32985,32987],{"class":42,"line":13219},[40,32986,32572],{"class":63},[40,32988,27993],{"class":63},[40,32990,32991],{"class":42,"line":13228},[40,32992,32044],{"class":94},[19,32994,32995],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,32997,32998],{},[438,32999],{"alt":36,"src":33000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,33002,33003],{},[438,33004],{"alt":36,"src":33005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[2423,33007,33009],{"id":33008},"_623清除构建缓存","6.2.3.清除构建缓存",[31,33011,33013],{"className":27141,"code":33012,"language":27143,"meta":36,"style":36},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[26,33014,33015,33020],{"__ignoreMap":36},[40,33016,33017],{"class":42,"line":43},[40,33018,33019],{"class":997},"# 清理BuildKit构建缓存\n",[40,33021,33022,33024,33027,33030],{"class":42,"line":54},[40,33023,29862],{"class":596},[40,33025,33026],{"class":94}," builder",[40,33028,33029],{"class":94}," prune",[40,33031,33032],{"class":63}," -f\n",[19,33034,33035],{},[438,33036],{"alt":36,"src":33037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[402,33039,33041],{"id":33040},"_63补充","6.3.补充",[2423,33043,33045],{"id":33044},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,33047,33048],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,33050,33051],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,33053,33054],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[31,33056,33058],{"className":27141,"code":33057,"language":27143,"meta":36,"style":36},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[26,33059,33060,33067],{"__ignoreMap":36},[40,33061,33062,33064],{"class":42,"line":43},[40,33063,30675],{"class":596},[40,33065,33066],{"class":94}," nginx\n",[40,33068,33069,33071,33074,33077,33079],{"class":42,"line":54},[40,33070,31858],{"class":596},[40,33072,33073],{"class":94}," echo",[40,33075,33076],{"class":94}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[40,33078,29533],{"class":1283},[40,33080,33081],{"class":94}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,33083,33084],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,33086,33087],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[31,33089,33091],{"className":27141,"code":33090,"language":27143,"meta":36,"style":36},"docker build -t nginx:tuling .\n",[26,33092,33093],{"__ignoreMap":36},[40,33094,33095,33097,33099,33101,33104],{"class":42,"line":43},[40,33096,29862],{"class":596},[40,33098,32035],{"class":94},[40,33100,32038],{"class":63},[40,33102,33103],{"class":94}," nginx:tuling",[40,33105,32044],{"class":94},[19,33107,33108],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,33110,33111],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[31,33113,33115],{"className":27141,"code":33114,"language":27143,"meta":36,"style":36},"docker run -d -p 92:80 nginx:tuling\n",[26,33116,33117],{"__ignoreMap":36},[40,33118,33119,33121,33123,33126,33128,33131],{"class":42,"line":43},[40,33120,29862],{"class":596},[40,33122,30535],{"class":94},[40,33124,33125],{"class":63}," -d",[40,33127,973],{"class":63},[40,33129,33130],{"class":94}," 92:80",[40,33132,33133],{"class":94}," nginx:tuling\n",[19,33135,33136,33137],{},"4、访问 ",[2106,33138,33141],{"href":33139,"rel":33140},"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",[2110],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,33143,33144],{},[438,33145],{"alt":36,"src":33146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,33148,33149],{},[438,33150],{"alt":36,"src":33151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[2423,33153,33155],{"id":33154},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,33157,33158],{},"只需要知道大体流程即可",[19,33160,33161],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,33163,33164],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,33166,33167],{},"2、在Dockerfile中添加以下内容",[31,33169,33171],{"className":29403,"code":33170,"language":29405,"meta":36,"style":36},"# 基于哪个镜像\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",[26,33172,33173,33178,33183,33188,33193,33198,33203,33208],{"__ignoreMap":36},[40,33174,33175],{"class":42,"line":43},[40,33176,33177],{},"# 基于哪个镜像\n",[40,33179,33180],{"class":42,"line":54},[40,33181,33182],{},"From java:8\n",[40,33184,33185],{"class":42,"line":70},[40,33186,33187],{},"# 复制文件到容器\n",[40,33189,33190],{"class":42,"line":78},[40,33191,33192],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[40,33194,33195],{"class":42,"line":86},[40,33196,33197],{},"# 声明需要暴露的端口\n",[40,33199,33200],{"class":42,"line":100},[40,33201,33202],{},"EXPOSE 8877\n",[40,33204,33205],{"class":42,"line":108},[40,33206,33207],{},"# 配置容器启动后执行的命令\n",[40,33209,33210],{"class":42,"line":121},[40,33211,33212],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,33214,33215],{},"3、使用docker build命令构建镜像",[31,33217,33219],{"className":27141,"code":33218,"language":27143,"meta":36,"style":36},"docker build -t tulingmall-member:0.0.5 .\n",[26,33220,33221],{"__ignoreMap":36},[40,33222,33223,33225,33227,33229,33232],{"class":42,"line":43},[40,33224,29862],{"class":596},[40,33226,32035],{"class":94},[40,33228,32038],{"class":63},[40,33230,33231],{"class":94}," tulingmall-member:0.0.5",[40,33233,32044],{"class":94},[19,33235,33236],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,33238,33239],{},[438,33240],{"alt":36,"src":33241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,33243,33244],{},"4、启动镜像，加-d可在后台启动",[31,33246,33248],{"className":27141,"code":33247,"language":27143,"meta":36,"style":36},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[26,33249,33250],{"__ignoreMap":36},[40,33251,33252,33254,33256,33258,33260,33263],{"class":42,"line":43},[40,33253,29862],{"class":596},[40,33255,30535],{"class":94},[40,33257,33125],{"class":63},[40,33259,973],{"class":63},[40,33261,33262],{"class":94}," 8877:8877",[40,33264,33265],{"class":94}," tulingmall-member:0.0.5\n",[19,33267,33268],{},"加上JVM参数：",[31,33270,33272],{"className":27141,"code":33271,"language":27143,"meta":36,"style":36},"# --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",[26,33273,33274,33279,33294,33304,33313,33320],{"__ignoreMap":36},[40,33275,33276],{"class":42,"line":43},[40,33277,33278],{"class":997},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[40,33280,33281,33283,33285,33288,33290,33292],{"class":42,"line":54},[40,33282,29862],{"class":596},[40,33284,30535],{"class":94},[40,33286,33287],{"class":63},"  -d",[40,33289,973],{"class":63},[40,33291,33262],{"class":94},[40,33293,27993],{"class":63},[40,33295,33296,33298,33301],{"class":42,"line":70},[40,33297,31433],{"class":50},[40,33299,33300],{"class":94},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[40,33302,33303],{"class":63},"  \\\n",[40,33305,33306,33308,33311],{"class":42,"line":78},[40,33307,31433],{"class":50},[40,33309,33310],{"class":94},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[40,33312,33303],{"class":63},[40,33314,33315,33318],{"class":42,"line":86},[40,33316,33317],{"class":50},"--cap-add=SYS_PTRACE  ",[40,33319,29487],{"class":63},[40,33321,33322],{"class":42,"line":100},[40,33323,33324],{"class":50},"tulingmall-member:0.0.5\n",[19,33326,33327],{},"5、访问会员服务接口",[19,33329,33330],{},[438,33331],{"alt":36,"src":33332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[2423,33334,33336],{"id":33335},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,33338,33339],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,33341,33342,33343],{},"阿里云docker镜像仓库：",[2106,33344,33345],{"href":33345,"rel":33346},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[2110],[19,33348,33349],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,33351,33352],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,33354,33355],{},[438,33356],{"alt":36,"src":33357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,33359,33360],{},"要把镜像推送到镜像仓库",[31,33362,33364],{"className":27141,"code":33363,"language":27143,"meta":36,"style":36},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[26,33365,33366],{"__ignoreMap":36},[40,33367,33368,33370,33372,33374],{"class":42,"line":43},[40,33369,29862],{"class":596},[40,33371,32200],{"class":94},[40,33373,33231],{"class":94},[40,33375,33376],{"class":94}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,33378,33379],{},"最后将镜像推送到远程仓库",[31,33381,33383],{"className":27141,"code":33382,"language":27143,"meta":36,"style":36},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[26,33384,33385],{"__ignoreMap":36},[40,33386,33387,33389,33391],{"class":42,"line":43},[40,33388,29862],{"class":596},[40,33390,32319],{"class":94},[40,33392,33376],{"class":94},[3384,33394,33395],{},"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":36,"searchDepth":54,"depth":54,"links":33397},[33398,33399,33400],{"id":31786,"depth":70,"text":31787},{"id":32015,"depth":70,"text":32016},{"id":33040,"depth":70,"text":33041},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":31778,"description":36},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":33407,"title":33408,"body":33409,"description":36,"extension":3414,"meta":33551,"navigation":1412,"path":33552,"seo":33553,"stem":33554,"__hash__":33555},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":33410,"toc":33549},[33411,33414,33419,33424,33427,33432,33437,33440,33445,33450,33453,33458,33461,33464,33467,33470,33473,33476,33496,33518,33521,33524,33543,33546],[10,33412,33408],{"id":33413},"_7vscode远程开发",[492,33415,33416],{},[495,33417,33418],{},"插件1：微软Docker工具",[19,33420,33421],{},[438,33422],{"alt":36,"src":33423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,33425,33426],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,33428,33429],{},[438,33430],{"alt":36,"src":33431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[492,33433,33434],{"start":54},[495,33435,33436],{},"插件2：微软Docker远程开发工具",[19,33438,33439],{},"下面这是远程开发的插件。",[19,33441,33442],{},[438,33443],{"alt":36,"src":33444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,33446,33447],{},[438,33448],{"alt":36,"src":33449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,33451,33452],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,33454,33455],{},[438,33456],{"alt":36,"src":33457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,33459,33460],{},"安装完拓展之后，vscode进行链接：",[19,33462,33463],{},"1.按ctrl+shift+p",[19,33465,33466],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,33468,33469],{},"3.选择目前运行的容器",[19,33471,33472],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,33474,33475],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[31,33477,33479],{"className":27141,"code":33478,"language":27143,"meta":36,"style":36},"docker run -v 主机目录:容器目录 image-name\n",[26,33480,33481],{"__ignoreMap":36},[40,33482,33483,33485,33487,33490,33493],{"class":42,"line":43},[40,33484,29862],{"class":596},[40,33486,30535],{"class":94},[40,33488,33489],{"class":63}," -v",[40,33491,33492],{"class":94}," 主机目录:容器目录",[40,33494,33495],{"class":94}," image-name\n",[31,33497,33499],{"className":27141,"code":33498,"language":27143,"meta":36,"style":36},"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",[26,33500,33501],{"__ignoreMap":36},[40,33502,33503,33505,33507,33510,33512,33515],{"class":42,"line":43},[40,33504,29862],{"class":596},[40,33506,30535],{"class":94},[40,33508,33509],{"class":63}," -it",[40,33511,33489],{"class":63},[40,33513,33514],{"class":94}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[40,33516,33517],{"class":94}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,33519,33520],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,33522,33523],{},"查看挂载情况：",[31,33525,33527],{"className":27141,"code":33526,"language":27143,"meta":36,"style":36},"mount | grep -i project\n",[26,33528,33529],{"__ignoreMap":36},[40,33530,33531,33534,33536,33538,33540],{"class":42,"line":43},[40,33532,33533],{"class":596},"mount",[40,33535,1465],{"class":1283},[40,33537,1468],{"class":596},[40,33539,29740],{"class":63},[40,33541,33542],{"class":94}," project\n",[19,33544,33545],{},"也可以通过ls来进行查看",[3384,33547,33548],{},"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":36,"searchDepth":54,"depth":54,"links":33550},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":33408,"description":36},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":33557,"title":33558,"body":33559,"description":3413,"extension":3414,"meta":33563,"navigation":1412,"path":33565,"seo":33566,"stem":33567,"__hash__":33568},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":33560,"toc":33561},[],{"title":36,"searchDepth":54,"depth":54,"links":33562},[],{"category":33564},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":33558,"description":3413},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":33570,"title":33571,"body":33572,"description":3413,"extension":3414,"meta":33576,"navigation":1412,"path":33577,"seo":33578,"stem":33579,"__hash__":33580},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":33573,"toc":33574},[],{"title":36,"searchDepth":54,"depth":54,"links":33575},[],{"category":33564},"\u002Fwiki\u002F2025-11-10-k8s",{"title":33571,"description":3413},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":33582,"title":33583,"body":33584,"description":3413,"extension":3414,"meta":33876,"navigation":1412,"path":33877,"seo":33878,"stem":33879,"__hash__":33880},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":33585,"toc":33874},[33586,33589,33597,33612,33617,33668,33671,33677,33863,33868,33871],[10,33587,33583],{"id":33588},"_1验证深度学习环境",[19,33590,33591,33592],{},"关于环境的安装，看",[2106,33593,33596],{"href":33594,"rel":33595},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[2110],"Pytorch-->深度学习",[19,33598,33599,33600,33603,33604,33607,33608,33611],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[26,33601,33602],{},"pytorch-cuda=12.4"," 是一个“ ",[409,33605,33606],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[409,33609,33610],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,33613,33614],{},[438,33615],{"alt":36,"src":33616},"\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",[31,33618,33620],{"className":27141,"code":33619,"language":27143,"meta":36,"style":36},"# 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",[26,33621,33622,33627],{"__ignoreMap":36},[40,33623,33624],{"class":42,"line":43},[40,33625,33626],{"class":997},"# CUDA 12.4\n",[40,33628,33629,33632,33634,33637,33640,33643,33646,33649,33651,33654,33657,33660,33663,33665],{"class":42,"line":54},[40,33630,33631],{"class":596},"conda",[40,33633,929],{"class":94},[40,33635,33636],{"class":94}," pytorch==",[40,33638,33639],{"class":63},"2.5.1",[40,33641,33642],{"class":94}," torchvision==",[40,33644,33645],{"class":63},"0.20.1",[40,33647,33648],{"class":94}," torchaudio==",[40,33650,33639],{"class":63},[40,33652,33653],{"class":94}," pytorch-cuda=",[40,33655,33656],{"class":63},"12.4",[40,33658,33659],{"class":63}," -c",[40,33661,33662],{"class":94}," pytorch",[40,33664,33659],{"class":63},[40,33666,33667],{"class":94}," nvidia\n",[19,33669,33670],{},"）：",[19,33672,33673],{},[2106,33674,33675],{"href":33675,"rel":33676},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[2110],[31,33678,33681],{"className":33679,"code":33680,"language":2323,"meta":36,"style":36},"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",[26,33682,33683,33688,33696,33701,33711,33727,33732,33742,33779,33786,33798,33814,33819,33829,33841,33851],{"__ignoreMap":36},[40,33684,33685],{"class":42,"line":43},[40,33686,33687],{"class":997},"# 对深度学习环境进行测试\n",[40,33689,33690,33693],{"class":42,"line":54},[40,33691,33692],{"class":1283},"import",[40,33694,33695],{"class":50}," torch\n",[40,33697,33698],{"class":42,"line":70},[40,33699,33700],{"class":997},"# 查看cuda是否被激活\n",[40,33702,33703,33706,33708],{"class":42,"line":78},[40,33704,33705],{"class":50},"flag",[40,33707,1284],{"class":1283},[40,33709,33710],{"class":50},"torch.cuda.is_available()\n",[40,33712,33713,33716,33718,33721,33724],{"class":42,"line":86},[40,33714,33715],{"class":63},"print",[40,33717,3488],{"class":50},[40,33719,33720],{"class":94},"\"cuda:\"",[40,33722,33723],{"class":50},", flag)   ",[40,33725,33726],{"class":997},"#返回true的话说明被激活\n",[40,33728,33729],{"class":42,"line":100},[40,33730,33731],{"class":997},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[40,33733,33734,33737,33739],{"class":42,"line":108},[40,33735,33736],{"class":50},"ngpu",[40,33738,1284],{"class":1283},[40,33740,33741],{"class":63},"1\n",[40,33743,33744,33747,33749,33752,33755,33757,33760,33763,33766,33768,33770,33772,33774,33777],{"class":42,"line":121},[40,33745,33746],{"class":50},"device",[40,33748,1284],{"class":1283},[40,33750,33751],{"class":50},"torch.device(",[40,33753,33754],{"class":94},"\"cuda:0\"",[40,33756,5035],{"class":1283},[40,33758,33759],{"class":50},"(torch.cuda.is_available() ",[40,33761,33762],{"class":1283},"and",[40,33764,33765],{"class":50}," ngpu",[40,33767,4437],{"class":1283},[40,33769,3672],{"class":63},[40,33771,17036],{"class":50},[40,33773,5032],{"class":1283},[40,33775,33776],{"class":94}," \"cpu\"",[40,33778,1811],{"class":50},[40,33780,33781,33783],{"class":42,"line":134},[40,33782,33715],{"class":63},[40,33784,33785],{"class":50},"(device)\n",[40,33787,33788,33790,33793,33795],{"class":42,"line":146},[40,33789,33715],{"class":63},[40,33791,33792],{"class":50},"(torch.cuda.get_device_name(",[40,33794,3672],{"class":63},[40,33796,33797],{"class":50},"))\n",[40,33799,33800,33802,33805,33807,33809,33811],{"class":42,"line":154},[40,33801,33715],{"class":63},[40,33803,33804],{"class":50},"(torch.rand(",[40,33806,3555],{"class":63},[40,33808,1299],{"class":50},[40,33810,3555],{"class":63},[40,33812,33813],{"class":50},").cuda())\n",[40,33815,33816],{"class":42,"line":162},[40,33817,33818],{"class":997},"# 查看cuda和cudnn的版本\n",[40,33820,33821,33824,33826],{"class":42,"line":170},[40,33822,33823],{"class":50},"cuda_version",[40,33825,1284],{"class":1283},[40,33827,33828],{"class":50},"torch.version.cuda\n",[40,33830,33831,33833,33835,33838],{"class":42,"line":183},[40,33832,33715],{"class":63},[40,33834,3488],{"class":50},[40,33836,33837],{"class":94},"\"cuda version\"",[40,33839,33840],{"class":50},",cuda_version)\n",[40,33842,33843,33846,33848],{"class":42,"line":196},[40,33844,33845],{"class":50},"cudnn_version",[40,33847,1284],{"class":1283},[40,33849,33850],{"class":50},"torch.backends.cudnn.version()\n",[40,33852,33853,33855,33857,33860],{"class":42,"line":204},[40,33854,33715],{"class":63},[40,33856,3488],{"class":50},[40,33858,33859],{"class":94},"\"cudnn version\"",[40,33861,33862],{"class":50},",cudnn_version)\n",[19,33864,33865],{},[438,33866],{"alt":36,"src":33867},"\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,33869,33870],{},"cuda:0 指的是一块显卡",[3384,33872,33873],{},"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":36,"searchDepth":54,"depth":54,"links":33875},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":33583,"description":3413},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":33882,"title":33883,"body":33884,"description":3413,"extension":3414,"meta":53688,"navigation":1412,"path":53689,"seo":53690,"stem":53691,"__hash__":53692},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":33885,"toc":53682},[33886,33889,33893,33897,33900,33905,33910,33913,33918,33923,33928,33931,33935,33940,33944,33949,33952,33957,33960,33963,33966,33969,33974,33977,33982,33987,33992,33997,34000,34004,34007,34012,34616,34621,34624,34629,34632,34635,35099,35102,35105,35108,35111,37162,37165,37170,37175,37970,37973,37978,38756,38760,40419,40423,41137,41141,41145,41150,41155,41160,41163,41168,41173,41178,41183,41188,41192,41197,42479,42484,42487,42490,42493,42648,42651,42654,43870,43875,44570,44574,44578,44583,44588,44591,44596,44601,44606,44611,44616,44621,44626,44631,44636,44641,44646,44651,44656,44661,44666,44671,44676,44681,44686,44691,44696,44701,44706,44711,44716,44721,44726,44731,44736,44741,44745,44749,44752,46230,46234,47881,47885,48579,48583,48586,48589,49133,49136,49140,49143,50540,50544,50547,51125,52912,52916,52919,53679],[10,33887,33883],{"id":33888},"_2经典神经网络",[402,33890,33892],{"id":33891},"_21lenet与alexnet","2.1.LeNet与AlexNet",[2423,33894,33896],{"id":33895},"_211原理介绍","2.1.1.原理介绍",[19,33898,33899],{},"LeNet-5",[492,33901,33902],{},[495,33903,33904],{},"原理",[19,33906,33907],{},[438,33908],{"alt":36,"src":33909},"\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,33911,33912],{},"B是batch批次；C是channel通道",[492,33914,33915],{"start":54},[495,33916,33917],{},"网络参数详细",[19,33919,33920],{},[438,33921],{"alt":36,"src":33922},"\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,33924,33925],{},[438,33926],{"alt":36,"src":33927},"\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,33929,33930],{},"AlexNet",[492,33932,33933],{},[495,33934,33904],{},[19,33936,33937],{},[438,33938],{"alt":36,"src":33939},"\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",[492,33941,33942],{"start":54},[495,33943,33917],{},[19,33945,33946],{},[438,33947],{"alt":36,"src":33948},"\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,33950,33951],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,33953,33954],{},[438,33955],{"alt":36,"src":33956},"\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,33958,33959],{},"数据处理中的图像增强操作:",[19,33961,33962],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,33964,33965],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,33967,33968],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,33970,33971],{},[438,33972],{"alt":36,"src":33973},"\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,33975,33976],{},"提升网络精确度的方法：LRN正则化",[19,33978,33979],{},[438,33980],{"alt":36,"src":33981},"\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,33983,33984],{},[438,33985],{"alt":36,"src":33986},"\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",[492,33988,33989],{"start":70},[495,33990,33991],{},"AlexNet的总结",[19,33993,33994],{},[438,33995],{"alt":36,"src":33996},"\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,33998,33999],{},"比LeNet模型要深一丢丢",[2423,34001,34003],{"id":34002},"_212代码实现","2.1.2.代码实现",[19,34005,34006],{},"（1）LeNet",[492,34008,34009],{},[495,34010,34011],{},"模型搭建",[31,34013,34015],{"className":33679,"code":34014,"language":2323,"meta":36,"style":36},"# 导入库\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",[26,34016,34017,34022,34028,34033,34046,34051,34063,34067,34087,34092,34097,34108,34113,34132,34136,34141,34190,34202,34207,34236,34271,34298,34303,34315,34320,34340,34359,34378,34382,34387,34397,34414,34425,34440,34451,34462,34477,34492,34503,34510,34514,34528,34533,34556,34561,34566,34571,34575,34580,34585,34595],{"__ignoreMap":36},[40,34018,34019],{"class":42,"line":43},[40,34020,34021],{"class":997},"# 导入库\n",[40,34023,34024,34026],{"class":42,"line":54},[40,34025,33692],{"class":1283},[40,34027,33695],{"class":50},[40,34029,34030],{"class":42,"line":70},[40,34031,34032],{"class":997},"# 导入神经网络层\n",[40,34034,34035,34038,34041,34043],{"class":42,"line":78},[40,34036,34037],{"class":1283},"from",[40,34039,34040],{"class":50}," torch ",[40,34042,33692],{"class":1283},[40,34044,34045],{"class":50}," nn\n",[40,34047,34048],{"class":42,"line":86},[40,34049,34050],{"class":997},"# 导入展示神经网络参数的包\n",[40,34052,34053,34055,34058,34060],{"class":42,"line":100},[40,34054,34037],{"class":1283},[40,34056,34057],{"class":50}," torchsummary ",[40,34059,33692],{"class":1283},[40,34061,34062],{"class":50}," summary\n",[40,34064,34065],{"class":42,"line":108},[40,34066,1413],{"emptyLinePlaceholder":1412},[40,34068,34069,34071,34074,34076,34079,34081,34084],{"class":42,"line":121},[40,34070,18016],{"class":1283},[40,34072,34073],{"class":596}," LeNet",[40,34075,3488],{"class":50},[40,34077,34078],{"class":596},"nn",[40,34080,4037],{"class":50},[40,34082,34083],{"class":596},"Module",[40,34085,34086],{"class":50},"):\n",[40,34088,34089],{"class":42,"line":134},[40,34090,34091],{"class":997},"    # 模型初始化:\n",[40,34093,34094],{"class":42,"line":146},[40,34095,34096],{"class":997},"    # 定义一些网络层和激活函数\n",[40,34098,34099,34102,34105],{"class":42,"line":154},[40,34100,34101],{"class":1283},"    def",[40,34103,34104],{"class":63}," __init__",[40,34106,34107],{"class":50},"(self):\n",[40,34109,34110],{"class":42,"line":162},[40,34111,34112],{"class":997},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[40,34114,34115,34118,34121,34124,34127,34130],{"class":42,"line":170},[40,34116,34117],{"class":63},"        super",[40,34119,34120],{"class":50},"(LeNet,",[40,34122,34123],{"class":63},"self",[40,34125,34126],{"class":50},").",[40,34128,34129],{"class":63},"__init__",[40,34131,5302],{"class":50},[40,34133,34134],{"class":42,"line":183},[40,34135,1413],{"emptyLinePlaceholder":1412},[40,34137,34138],{"class":42,"line":196},[40,34139,34140],{"class":997},"        # 定义网络层\n",[40,34142,34143,34146,34149,34151,34154,34157,34159,34161,34163,34166,34168,34170,34172,34175,34177,34179,34181,34184,34186,34188],{"class":42,"line":204},[40,34144,34145],{"class":63},"        self",[40,34147,34148],{"class":50},".c1",[40,34150,1284],{"class":1283},[40,34152,34153],{"class":50},"nn.Conv2d(",[40,34155,34156],{"class":8539},"in_channels",[40,34158,1284],{"class":1283},[40,34160,3698],{"class":63},[40,34162,1299],{"class":50},[40,34164,34165],{"class":8539},"out_channels",[40,34167,1284],{"class":1283},[40,34169,3824],{"class":63},[40,34171,1299],{"class":50},[40,34173,34174],{"class":8539},"kernel_size",[40,34176,1284],{"class":1283},[40,34178,3799],{"class":63},[40,34180,1299],{"class":50},[40,34182,34183],{"class":8539},"padding",[40,34185,1284],{"class":1283},[40,34187,64],{"class":63},[40,34189,1811],{"class":50},[40,34191,34192,34194,34197,34199],{"class":42,"line":217},[40,34193,34145],{"class":63},[40,34195,34196],{"class":50},".sig",[40,34198,1284],{"class":1283},[40,34200,34201],{"class":50},"nn.Sigmoid()\n",[40,34203,34204],{"class":42,"line":230},[40,34205,34206],{"class":997},"        # 定义池化\n",[40,34208,34209,34211,34214,34216,34219,34221,34223,34225,34227,34230,34232,34234],{"class":42,"line":238},[40,34210,34145],{"class":63},[40,34212,34213],{"class":50},".s2",[40,34215,1284],{"class":1283},[40,34217,34218],{"class":50},"nn.AvgPool2d(",[40,34220,34174],{"class":8539},[40,34222,1284],{"class":1283},[40,34224,64],{"class":63},[40,34226,1299],{"class":50},[40,34228,34229],{"class":8539},"stride",[40,34231,1284],{"class":1283},[40,34233,64],{"class":63},[40,34235,1811],{"class":50},[40,34237,34238,34240,34243,34245,34247,34249,34251,34253,34255,34257,34259,34261,34263,34265,34267,34269],{"class":42,"line":251},[40,34239,34145],{"class":63},[40,34241,34242],{"class":50},".c3",[40,34244,1284],{"class":1283},[40,34246,34153],{"class":50},[40,34248,34156],{"class":8539},[40,34250,1284],{"class":1283},[40,34252,3824],{"class":63},[40,34254,1299],{"class":50},[40,34256,34165],{"class":8539},[40,34258,1284],{"class":1283},[40,34260,4080],{"class":63},[40,34262,1299],{"class":50},[40,34264,34174],{"class":8539},[40,34266,1284],{"class":1283},[40,34268,3799],{"class":63},[40,34270,1811],{"class":50},[40,34272,34273,34275,34278,34280,34282,34284,34286,34288,34290,34292,34294,34296],{"class":42,"line":264},[40,34274,34145],{"class":63},[40,34276,34277],{"class":50},".s4",[40,34279,1284],{"class":1283},[40,34281,34218],{"class":50},[40,34283,34174],{"class":8539},[40,34285,1284],{"class":1283},[40,34287,64],{"class":63},[40,34289,1299],{"class":50},[40,34291,34229],{"class":8539},[40,34293,1284],{"class":1283},[40,34295,64],{"class":63},[40,34297,1811],{"class":50},[40,34299,34300],{"class":42,"line":277},[40,34301,34302],{"class":997},"        # 定义平展层\n",[40,34304,34305,34307,34310,34312],{"class":42,"line":290},[40,34306,34145],{"class":63},[40,34308,34309],{"class":50},".flatten",[40,34311,1284],{"class":1283},[40,34313,34314],{"class":50},"nn.Flatten()\n",[40,34316,34317],{"class":42,"line":298},[40,34318,34319],{"class":997},"        # 定义全连接层\n",[40,34321,34322,34324,34327,34329,34332,34334,34336,34338],{"class":42,"line":310},[40,34323,34145],{"class":63},[40,34325,34326],{"class":50},".f5",[40,34328,1284],{"class":1283},[40,34330,34331],{"class":50},"nn.Linear(",[40,34333,7310],{"class":63},[40,34335,1299],{"class":50},[40,34337,4294],{"class":63},[40,34339,1811],{"class":50},[40,34341,34342,34344,34347,34349,34351,34353,34355,34357],{"class":42,"line":5086},[40,34343,34145],{"class":63},[40,34345,34346],{"class":50},".f6",[40,34348,1284],{"class":1283},[40,34350,34331],{"class":50},[40,34352,4294],{"class":63},[40,34354,1299],{"class":50},[40,34356,4189],{"class":63},[40,34358,1811],{"class":50},[40,34360,34361,34363,34366,34368,34370,34372,34374,34376],{"class":42,"line":5091},[40,34362,34145],{"class":63},[40,34364,34365],{"class":50},".f7",[40,34367,1284],{"class":1283},[40,34369,34331],{"class":50},[40,34371,4189],{"class":63},[40,34373,1299],{"class":50},[40,34375,3925],{"class":63},[40,34377,1811],{"class":50},[40,34379,34380],{"class":42,"line":5105},[40,34381,1413],{"emptyLinePlaceholder":1412},[40,34383,34384],{"class":42,"line":5110},[40,34385,34386],{"class":997},"    # 写工具->写前向传播\n",[40,34388,34389,34391,34394],{"class":42,"line":5902},[40,34390,34101],{"class":1283},[40,34392,34393],{"class":596}," forward",[40,34395,34396],{"class":50},"(self,x):\n",[40,34398,34399,34402,34404,34406,34409,34411],{"class":42,"line":5916},[40,34400,34401],{"class":50},"        x",[40,34403,1284],{"class":1283},[40,34405,34123],{"class":63},[40,34407,34408],{"class":50},".sig(",[40,34410,34123],{"class":63},[40,34412,34413],{"class":50},".c1(x))\n",[40,34415,34416,34418,34420,34422],{"class":42,"line":5924},[40,34417,34401],{"class":50},[40,34419,1284],{"class":1283},[40,34421,34123],{"class":63},[40,34423,34424],{"class":50},".s2(x)\n",[40,34426,34427,34429,34431,34433,34435,34437],{"class":42,"line":5929},[40,34428,34401],{"class":50},[40,34430,1284],{"class":1283},[40,34432,34123],{"class":63},[40,34434,34408],{"class":50},[40,34436,34123],{"class":63},[40,34438,34439],{"class":50},".c3(x))\n",[40,34441,34442,34444,34446,34448],{"class":42,"line":5935},[40,34443,34401],{"class":50},[40,34445,1284],{"class":1283},[40,34447,34123],{"class":63},[40,34449,34450],{"class":50},".s4(x)\n",[40,34452,34453,34455,34457,34459],{"class":42,"line":5941},[40,34454,34401],{"class":50},[40,34456,1284],{"class":1283},[40,34458,34123],{"class":63},[40,34460,34461],{"class":50},".flatten(x)\n",[40,34463,34464,34466,34468,34470,34472,34474],{"class":42,"line":5946},[40,34465,34401],{"class":50},[40,34467,1284],{"class":1283},[40,34469,34123],{"class":63},[40,34471,34408],{"class":50},[40,34473,34123],{"class":63},[40,34475,34476],{"class":50},".f5(x))\n",[40,34478,34479,34481,34483,34485,34487,34489],{"class":42,"line":11270},[40,34480,34401],{"class":50},[40,34482,1284],{"class":1283},[40,34484,34123],{"class":63},[40,34486,34408],{"class":50},[40,34488,34123],{"class":63},[40,34490,34491],{"class":50},".f6(x))\n",[40,34493,34494,34496,34498,34500],{"class":42,"line":11294},[40,34495,34401],{"class":50},[40,34497,1284],{"class":1283},[40,34499,34123],{"class":63},[40,34501,34502],{"class":50},".f7(x)\n",[40,34504,34505,34507],{"class":42,"line":11299},[40,34506,18074],{"class":1283},[40,34508,34509],{"class":50}," x\n",[40,34511,34512],{"class":42,"line":11305},[40,34513,1413],{"emptyLinePlaceholder":1412},[40,34515,34516,34518,34521,34523,34526],{"class":42,"line":11332},[40,34517,4873],{"class":1283},[40,34519,34520],{"class":63}," __name__",[40,34522,6273],{"class":1283},[40,34524,34525],{"class":94},"\"__main__\"",[40,34527,332],{"class":50},[40,34529,34530],{"class":42,"line":11337},[40,34531,34532],{"class":997},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[40,34534,34535,34538,34540,34542,34545,34547,34550,34552,34554],{"class":42,"line":11343},[40,34536,34537],{"class":50},"    device",[40,34539,1284],{"class":1283},[40,34541,33751],{"class":50},[40,34543,34544],{"class":94},"\"cuda\"",[40,34546,5035],{"class":1283},[40,34548,34549],{"class":50}," torch.cuda.is_available() ",[40,34551,5032],{"class":1283},[40,34553,33776],{"class":94},[40,34555,1811],{"class":50},[40,34557,34558],{"class":42,"line":11355},[40,34559,34560],{"class":997},"    # 如果就是想指定用cpu用下方代码:\n",[40,34562,34563],{"class":42,"line":11367},[40,34564,34565],{"class":997},"    # device=\"cpu\"\n",[40,34567,34568],{"class":42,"line":11379},[40,34569,34570],{"class":997},"    # print(device)\n",[40,34572,34573],{"class":42,"line":13038},[40,34574,1413],{"emptyLinePlaceholder":1412},[40,34576,34577],{"class":42,"line":13063},[40,34578,34579],{"class":997},"    # 实例化模型\n",[40,34581,34582],{"class":42,"line":13086},[40,34583,34584],{"class":997},"    # 将模型放到设备中去运行\n",[40,34586,34587,34590,34592],{"class":42,"line":13110},[40,34588,34589],{"class":50},"    model",[40,34591,1284],{"class":1283},[40,34593,34594],{"class":50},"LeNet().to(device)\n",[40,34596,34597,34600,34603,34605,34607,34609,34611,34613],{"class":42,"line":13115},[40,34598,34599],{"class":63},"    print",[40,34601,34602],{"class":50},"(summary(model,(",[40,34604,3698],{"class":63},[40,34606,1299],{"class":50},[40,34608,4378],{"class":63},[40,34610,1299],{"class":50},[40,34612,4378],{"class":63},[40,34614,34615],{"class":50},")))\n",[19,34617,34618],{},[438,34619],{"alt":36,"src":34620},"\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,34622,34623],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[492,34625,34626],{"start":54},[495,34627,34628],{},"训练",[19,34630,34631],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,34633,34634],{},"在训练之前可以将数据展示看一下",[31,34636,34638],{"className":33679,"code":34637,"language":2323,"meta":36,"style":36},"# 建立画图的函数，用于展示数据\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",[26,34639,34640,34645,34650,34662,34674,34687,34692,34704,34709,34721,34726,34738,34742,34746,34767,34779,34784,34805,34816,34820,34825,34843,34854,34859,34870,34875,34886,34890,34895,34910,34923,34928,34933,34946,34959,34972,34977,34981,34986,35006,35023,35043,35056,35069,35079,35094],{"__ignoreMap":36},[40,34641,34642],{"class":42,"line":43},[40,34643,34644],{"class":997},"# 建立画图的函数，用于展示数据\n",[40,34646,34647],{"class":42,"line":54},[40,34648,34649],{"class":997},"# torchvision中包含很多内置的数据集\n",[40,34651,34652,34654,34657,34659],{"class":42,"line":70},[40,34653,34037],{"class":1283},[40,34655,34656],{"class":50}," sklearn.externals.array_api_compat.torch ",[40,34658,33692],{"class":1283},[40,34660,34661],{"class":50}," squeeze\n",[40,34663,34664,34666,34669,34671],{"class":42,"line":78},[40,34665,34037],{"class":1283},[40,34667,34668],{"class":50}," torchvision.datasets ",[40,34670,33692],{"class":1283},[40,34672,34673],{"class":50}," FashionMNIST\n",[40,34675,34676,34678,34681,34684],{"class":42,"line":86},[40,34677,33692],{"class":1283},[40,34679,34680],{"class":50}," numpy ",[40,34682,34683],{"class":1283},"as",[40,34685,34686],{"class":50}," np\n",[40,34688,34689],{"class":42,"line":100},[40,34690,34691],{"class":997},"# 引入处理数据集的包\n",[40,34693,34694,34696,34699,34701],{"class":42,"line":108},[40,34695,34037],{"class":1283},[40,34697,34698],{"class":50}," torchvision ",[40,34700,33692],{"class":1283},[40,34702,34703],{"class":50}," transforms\n",[40,34705,34706],{"class":42,"line":121},[40,34707,34708],{"class":997},"# 从torch库中引入数据处理的包\n",[40,34710,34711,34713,34716,34718],{"class":42,"line":134},[40,34712,33692],{"class":1283},[40,34714,34715],{"class":50}," torch.utils.data ",[40,34717,34683],{"class":1283},[40,34719,34720],{"class":50}," Data\n",[40,34722,34723],{"class":42,"line":146},[40,34724,34725],{"class":997},"# 导入画图的库\n",[40,34727,34728,34730,34733,34735],{"class":42,"line":154},[40,34729,33692],{"class":1283},[40,34731,34732],{"class":50}," matplotlib.pyplot ",[40,34734,34683],{"class":1283},[40,34736,34737],{"class":50}," plt\n",[40,34739,34740],{"class":42,"line":162},[40,34741,1413],{"emptyLinePlaceholder":1412},[40,34743,34744],{"class":42,"line":170},[40,34745,1413],{"emptyLinePlaceholder":1412},[40,34747,34748,34751,34753,34756,34759,34761,34764],{"class":42,"line":183},[40,34749,34750],{"class":50},"train_data",[40,34752,1284],{"class":1283},[40,34754,34755],{"class":50},"FashionMNIST(",[40,34757,34758],{"class":8539},"root",[40,34760,1284],{"class":1283},[40,34762,34763],{"class":94},"'.\u002Fdata'",[40,34765,34766],{"class":50},",\n",[40,34768,34769,34772,34774,34777],{"class":42,"line":196},[40,34770,34771],{"class":8539},"                        train",[40,34773,1284],{"class":1283},[40,34775,34776],{"class":63},"True",[40,34778,34766],{"class":50},[40,34780,34781],{"class":42,"line":204},[40,34782,34783],{"class":997},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[40,34785,34786,34789,34791,34794,34797,34799,34802],{"class":42,"line":217},[40,34787,34788],{"class":8539},"                        transform",[40,34790,1284],{"class":1283},[40,34792,34793],{"class":50},"transforms.Compose([transforms.Resize(",[40,34795,34796],{"class":8539},"size",[40,34798,1284],{"class":1283},[40,34800,34801],{"class":63},"224",[40,34803,34804],{"class":50},"),transforms.ToTensor()]),\n",[40,34806,34807,34810,34812,34814],{"class":42,"line":230},[40,34808,34809],{"class":8539},"                        download",[40,34811,1284],{"class":1283},[40,34813,34776],{"class":63},[40,34815,1811],{"class":50},[40,34817,34818],{"class":42,"line":238},[40,34819,1413],{"emptyLinePlaceholder":1412},[40,34821,34822],{"class":42,"line":251},[40,34823,34824],{"class":997},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[40,34826,34827,34830,34832,34835,34838,34840],{"class":42,"line":264},[40,34828,34829],{"class":50},"train_loader",[40,34831,1284],{"class":1283},[40,34833,34834],{"class":50},"Data.DataLoader(",[40,34836,34837],{"class":8539},"dataset",[40,34839,1284],{"class":1283},[40,34841,34842],{"class":50},"train_data,\n",[40,34844,34845,34848,34850,34852],{"class":42,"line":277},[40,34846,34847],{"class":8539},"                             batch_size",[40,34849,1284],{"class":1283},[40,34851,3684],{"class":63},[40,34853,34766],{"class":50},[40,34855,34856],{"class":42,"line":290},[40,34857,34858],{"class":997},"                             # 数据是否打乱\n",[40,34860,34861,34864,34866,34868],{"class":42,"line":298},[40,34862,34863],{"class":8539},"                             shuffle",[40,34865,1284],{"class":1283},[40,34867,34776],{"class":63},[40,34869,34766],{"class":50},[40,34871,34872],{"class":42,"line":310},[40,34873,34874],{"class":997},"                             # 规定加载数据的进程\n",[40,34876,34877,34880,34882,34884],{"class":42,"line":5086},[40,34878,34879],{"class":8539},"                             num_workers",[40,34881,1284],{"class":1283},[40,34883,3672],{"class":63},[40,34885,1811],{"class":50},[40,34887,34888],{"class":42,"line":5091},[40,34889,1413],{"emptyLinePlaceholder":1412},[40,34891,34892],{"class":42,"line":5105},[40,34893,34894],{"class":997},"# 获得一个batch的数据\n",[40,34896,34897,34899,34902,34904,34907],{"class":42,"line":5110},[40,34898,6349],{"class":1283},[40,34900,34901],{"class":50}," step,(b_x,b_y) ",[40,34903,29355],{"class":1283},[40,34905,34906],{"class":63}," enumerate",[40,34908,34909],{"class":50},"(train_loader):\n",[40,34911,34912,34914,34917,34919,34921],{"class":42,"line":5902},[40,34913,6425],{"class":1283},[40,34915,34916],{"class":50}," step ",[40,34918,4437],{"class":1283},[40,34920,7416],{"class":63},[40,34922,332],{"class":50},[40,34924,34925],{"class":42,"line":5916},[40,34926,34927],{"class":1283},"        break\n",[40,34929,34930],{"class":42,"line":5924},[40,34931,34932],{"class":997},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[40,34934,34935,34938,34940,34943],{"class":42,"line":5929},[40,34936,34937],{"class":50},"batch_x",[40,34939,1284],{"class":1283},[40,34941,34942],{"class":50},"b_x.squeeze().numpy()  ",[40,34944,34945],{"class":997},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[40,34947,34948,34951,34953,34956],{"class":42,"line":5935},[40,34949,34950],{"class":50},"batch_y",[40,34952,1284],{"class":1283},[40,34954,34955],{"class":50},"b_y.numpy()   ",[40,34957,34958],{"class":997},"#将张量转换成功numpy数组\n",[40,34960,34961,34964,34966,34969],{"class":42,"line":5941},[40,34962,34963],{"class":50},"class_label",[40,34965,1284],{"class":1283},[40,34967,34968],{"class":50},"train_data.classes  ",[40,34970,34971],{"class":997},"#训练集标签\n",[40,34973,34974],{"class":42,"line":5946},[40,34975,34976],{"class":997},"# print(class_label)\n",[40,34978,34979],{"class":42,"line":11270},[40,34980,1413],{"emptyLinePlaceholder":1412},[40,34982,34983],{"class":42,"line":11294},[40,34984,34985],{"class":997},"# 可视化一个batch的图像\n",[40,34987,34988,34991,34994,34996,34998,35000,35002,35004],{"class":42,"line":11299},[40,34989,34990],{"class":50},"plt.figure(",[40,34992,34993],{"class":8539},"figsize",[40,34995,1284],{"class":1283},[40,34997,3488],{"class":50},[40,34999,3977],{"class":63},[40,35001,1299],{"class":50},[40,35003,3799],{"class":63},[40,35005,33797],{"class":50},[40,35007,35008,35010,35013,35015,35018,35020],{"class":42,"line":11305},[40,35009,6349],{"class":1283},[40,35011,35012],{"class":50}," ii ",[40,35014,29355],{"class":1283},[40,35016,35017],{"class":50}," np.arange(",[40,35019,10681],{"class":63},[40,35021,35022],{"class":50},"(batch_y)):\n",[40,35024,35025,35028,35030,35032,35034,35037,35039,35041],{"class":42,"line":11332},[40,35026,35027],{"class":50},"    plt.subplot(",[40,35029,3773],{"class":63},[40,35031,1299],{"class":50},[40,35033,4080],{"class":63},[40,35035,35036],{"class":50},",ii ",[40,35038,3960],{"class":1283},[40,35040,28431],{"class":63},[40,35042,1811],{"class":50},[40,35044,35045,35048,35051,35053],{"class":42,"line":11337},[40,35046,35047],{"class":50},"    plt.imshow(batch_x[ii,:,:],",[40,35049,35050],{"class":8539},"cmap",[40,35052,1284],{"class":1283},[40,35054,35055],{"class":50},"plt.cm.gray)\n",[40,35057,35058,35061,35063,35065,35067],{"class":42,"line":11343},[40,35059,35060],{"class":50},"    plt.title(class_label[batch_y[ii]],",[40,35062,34796],{"class":8539},[40,35064,1284],{"class":1283},[40,35066,3925],{"class":63},[40,35068,1811],{"class":50},[40,35070,35071,35074,35077],{"class":42,"line":11355},[40,35072,35073],{"class":50},"    plt.axis(",[40,35075,35076],{"class":94},"\"off\"",[40,35078,1811],{"class":50},[40,35080,35081,35084,35087,35089,35092],{"class":42,"line":11367},[40,35082,35083],{"class":50},"    plt.subplots_adjust(",[40,35085,35086],{"class":8539},"wspace",[40,35088,1284],{"class":1283},[40,35090,35091],{"class":63},"0.05",[40,35093,1811],{"class":50},[40,35095,35096],{"class":42,"line":11379},[40,35097,35098],{"class":50},"plt.show()\n",[19,35100,35101],{},"用matplotlib进行展示的过程可以后续再补",[19,35103,35104],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,35106,35107],{},"训练次数就是按照批次过整个训练集数据的次数",[19,35109,35110],{},"模型训练：",[31,35112,35114],{"className":33679,"code":35113,"language":2323,"meta":36,"style":36},"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",[26,35115,35116,35123,35130,35134,35146,35152,35163,35173,35183,35193,35203,35208,35220,35230,35234,35238,35243,35254,35267,35278,35295,35306,35345,35361,35373,35384,35389,35400,35416,35427,35438,35449,35456,35460,35465,35470,35474,35479,35489,35510,35514,35518,35523,35528,35533,35553,35557,35562,35572,35576,35581,35590,35595,35600,35605,35615,35619,35623,35628,35633,35643,35648,35658,35663,35672,35677,35686,35691,35700,35704,35709,35719,35723,35727,35732,35747,35775,35790,35794,35799,35804,35813,35818,35827,35832,35841,35846,35855,35860,35869,35874,35883,35888,35901,35906,35916,35921,35931,35937,35943,35949,35955,35966,35972,35992,35998,36009,36015,36021,36027,36033,36039,36045,36051,36071,36077,36093,36099,36113,36119,36134,36140,36149,36155,36164,36170,36176,36185,36191,36202,36208,36227,36233,36244,36250,36270,36286,36292,36306,36312,36318,36329,36335,36341,36351,36357,36368,36374,36384,36389,36395,36444,36491,36496,36502,36521,36527,36547,36553,36559,36569,36574,36580,36596,36641,36647,36653,36659,36670,36676,36682,36688,36706,36720,36729,36738,36747,36756,36762,36768,36776,36781,36787,36798,36804,36824,36830,36836,36842,36859,36865,36871,36877,36883,36889,36916,36940,36946,36952,36958,36969,36980,36986,37003,37026,37049,37055,37060,37069,37079,37085,37090,37096,37109,37115,37126,37137,37156],{"__ignoreMap":36},[40,35117,35118,35120],{"class":42,"line":43},[40,35119,33692],{"class":1283},[40,35121,35122],{"class":50}," copy\n",[40,35124,35125,35127],{"class":42,"line":54},[40,35126,33692],{"class":1283},[40,35128,35129],{"class":50}," time\n",[40,35131,35132],{"class":42,"line":70},[40,35133,1413],{"emptyLinePlaceholder":1412},[40,35135,35136,35138,35141,35143],{"class":42,"line":78},[40,35137,33692],{"class":1283},[40,35139,35140],{"class":50}," pandas ",[40,35142,34683],{"class":1283},[40,35144,35145],{"class":50}," pd\n",[40,35147,35148,35150],{"class":42,"line":86},[40,35149,33692],{"class":1283},[40,35151,33695],{"class":50},[40,35153,35154,35156,35158,35160],{"class":42,"line":100},[40,35155,34037],{"class":1283},[40,35157,34715],{"class":50},[40,35159,33692],{"class":1283},[40,35161,35162],{"class":50}," Dataset\n",[40,35164,35165,35167,35169,35171],{"class":42,"line":108},[40,35166,34037],{"class":1283},[40,35168,34668],{"class":50},[40,35170,33692],{"class":1283},[40,35172,34673],{"class":50},[40,35174,35175,35177,35179,35181],{"class":42,"line":121},[40,35176,34037],{"class":1283},[40,35178,34698],{"class":50},[40,35180,33692],{"class":1283},[40,35182,34703],{"class":50},[40,35184,35185,35187,35189,35191],{"class":42,"line":134},[40,35186,33692],{"class":1283},[40,35188,34715],{"class":50},[40,35190,34683],{"class":1283},[40,35192,34720],{"class":50},[40,35194,35195,35197,35199,35201],{"class":42,"line":146},[40,35196,33692],{"class":1283},[40,35198,34732],{"class":50},[40,35200,34683],{"class":1283},[40,35202,34737],{"class":50},[40,35204,35205],{"class":42,"line":154},[40,35206,35207],{"class":997},"# 导入模型\n",[40,35209,35210,35212,35215,35217],{"class":42,"line":162},[40,35211,34037],{"class":1283},[40,35213,35214],{"class":50}," model ",[40,35216,33692],{"class":1283},[40,35218,35219],{"class":50}," LeNet\n",[40,35221,35222,35224,35226,35228],{"class":42,"line":170},[40,35223,34037],{"class":1283},[40,35225,34040],{"class":50},[40,35227,33692],{"class":1283},[40,35229,34045],{"class":50},[40,35231,35232],{"class":42,"line":183},[40,35233,1413],{"emptyLinePlaceholder":1412},[40,35235,35236],{"class":42,"line":196},[40,35237,1413],{"emptyLinePlaceholder":1412},[40,35239,35240],{"class":42,"line":204},[40,35241,35242],{"class":997},"# 处理训练集与验证集函数--->划分数据集\n",[40,35244,35245,35248,35251],{"class":42,"line":217},[40,35246,35247],{"class":1283},"def",[40,35249,35250],{"class":596}," train_val_data_process",[40,35252,35253],{"class":50},"():\n",[40,35255,35256,35259,35261,35263,35265],{"class":42,"line":230},[40,35257,35258],{"class":50},"    train_data",[40,35260,1284],{"class":1283},[40,35262,34755],{"class":50},[40,35264,34763],{"class":94},[40,35266,34766],{"class":50},[40,35268,35269,35272,35274,35276],{"class":42,"line":238},[40,35270,35271],{"class":8539},"                            train",[40,35273,1284],{"class":1283},[40,35275,34776],{"class":63},[40,35277,34766],{"class":50},[40,35279,35280,35283,35285,35287,35289,35291,35293],{"class":42,"line":251},[40,35281,35282],{"class":8539},"                            transform",[40,35284,1284],{"class":1283},[40,35286,34793],{"class":50},[40,35288,34796],{"class":8539},[40,35290,1284],{"class":1283},[40,35292,4378],{"class":63},[40,35294,34804],{"class":50},[40,35296,35297,35300,35302,35304],{"class":42,"line":264},[40,35298,35299],{"class":8539},"                            download",[40,35301,1284],{"class":1283},[40,35303,34776],{"class":63},[40,35305,1811],{"class":50},[40,35307,35308,35311,35313,35316,35319,35321,35324,35326,35328,35331,35333,35335,35338,35340,35342],{"class":42,"line":277},[40,35309,35310],{"class":50},"    train_data,val_data",[40,35312,1284],{"class":1283},[40,35314,35315],{"class":50},"Data.random_split(train_data,[",[40,35317,35318],{"class":63},"round",[40,35320,3488],{"class":50},[40,35322,35323],{"class":63},"0.8",[40,35325,3934],{"class":1283},[40,35327,10681],{"class":63},[40,35329,35330],{"class":50},"(train_data)),",[40,35332,35318],{"class":63},[40,35334,3488],{"class":50},[40,35336,35337],{"class":63},"0.2",[40,35339,3934],{"class":1283},[40,35341,10681],{"class":63},[40,35343,35344],{"class":50},"(train_data))])\n",[40,35346,35347,35350,35352,35355,35357,35359],{"class":42,"line":290},[40,35348,35349],{"class":50},"    train_dataloader ",[40,35351,1284],{"class":1283},[40,35353,35354],{"class":50}," Data.DataLoader(",[40,35356,34837],{"class":8539},[40,35358,1284],{"class":1283},[40,35360,34842],{"class":50},[40,35362,35363,35366,35368,35371],{"class":42,"line":298},[40,35364,35365],{"class":8539},"                                       batch_size",[40,35367,1284],{"class":1283},[40,35369,35370],{"class":63},"128",[40,35372,34766],{"class":50},[40,35374,35375,35378,35380,35382],{"class":42,"line":310},[40,35376,35377],{"class":8539},"                                       shuffle",[40,35379,1284],{"class":1283},[40,35381,34776],{"class":63},[40,35383,34766],{"class":50},[40,35385,35386],{"class":42,"line":5086},[40,35387,35388],{"class":997},"                                       # 规定8个进程\n",[40,35390,35391,35394,35396,35398],{"class":42,"line":5091},[40,35392,35393],{"class":8539},"                                       num_workers",[40,35395,1284],{"class":1283},[40,35397,3874],{"class":63},[40,35399,1811],{"class":50},[40,35401,35402,35405,35407,35409,35411,35413],{"class":42,"line":5105},[40,35403,35404],{"class":50},"    val_dataloader",[40,35406,1284],{"class":1283},[40,35408,34834],{"class":50},[40,35410,34837],{"class":8539},[40,35412,1284],{"class":1283},[40,35414,35415],{"class":50},"val_data,\n",[40,35417,35418,35421,35423,35425],{"class":42,"line":5110},[40,35419,35420],{"class":8539},"                                   batch_size",[40,35422,1284],{"class":1283},[40,35424,35370],{"class":63},[40,35426,34766],{"class":50},[40,35428,35429,35432,35434,35436],{"class":42,"line":5902},[40,35430,35431],{"class":8539},"                                   shuffle",[40,35433,1284],{"class":1283},[40,35435,34776],{"class":63},[40,35437,34766],{"class":50},[40,35439,35440,35443,35445,35447],{"class":42,"line":5916},[40,35441,35442],{"class":8539},"                                   num_workers",[40,35444,1284],{"class":1283},[40,35446,3874],{"class":63},[40,35448,1811],{"class":50},[40,35450,35451,35453],{"class":42,"line":5924},[40,35452,7413],{"class":1283},[40,35454,35455],{"class":50}," train_dataloader,val_dataloader\n",[40,35457,35458],{"class":42,"line":5929},[40,35459,1413],{"emptyLinePlaceholder":1412},[40,35461,35462],{"class":42,"line":5935},[40,35463,35464],{"class":997},"# 验证是否出错\n",[40,35466,35467],{"class":42,"line":5941},[40,35468,35469],{"class":997},"# train_val_data_process()\n",[40,35471,35472],{"class":42,"line":5946},[40,35473,1413],{"emptyLinePlaceholder":1412},[40,35475,35476],{"class":42,"line":11270},[40,35477,35478],{"class":997},"# 定义模型训练函数\n",[40,35480,35481,35483,35486],{"class":42,"line":11294},[40,35482,35247],{"class":1283},[40,35484,35485],{"class":596}," train_model_process",[40,35487,35488],{"class":50},"(model,train_dataloader,val_dataloader,num_epochs):\n",[40,35490,35491,35493,35495,35497,35499,35501,35503,35505,35508],{"class":42,"line":11299},[40,35492,34537],{"class":50},[40,35494,1284],{"class":1283},[40,35496,33751],{"class":50},[40,35498,34544],{"class":94},[40,35500,5035],{"class":1283},[40,35502,34549],{"class":50},[40,35504,5032],{"class":1283},[40,35506,35507],{"class":94}," 'cpu'",[40,35509,1811],{"class":50},[40,35511,35512],{"class":42,"line":11305},[40,35513,1413],{"emptyLinePlaceholder":1412},[40,35515,35516],{"class":42,"line":11332},[40,35517,1413],{"emptyLinePlaceholder":1412},[40,35519,35520],{"class":42,"line":11337},[40,35521,35522],{"class":997},"    # 定义优化器\n",[40,35524,35525],{"class":42,"line":11343},[40,35526,35527],{"class":997},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[40,35529,35530],{"class":42,"line":11355},[40,35531,35532],{"class":997},"    # lr为学习率\n",[40,35534,35535,35538,35540,35543,35546,35548,35551],{"class":42,"line":11367},[40,35536,35537],{"class":50},"    optimizer",[40,35539,1284],{"class":1283},[40,35541,35542],{"class":50},"torch.optim.Adam(model.parameters(),",[40,35544,35545],{"class":8539},"lr",[40,35547,1284],{"class":1283},[40,35549,35550],{"class":63},"0.001",[40,35552,1811],{"class":50},[40,35554,35555],{"class":42,"line":11379},[40,35556,1413],{"emptyLinePlaceholder":1412},[40,35558,35559],{"class":42,"line":13038},[40,35560,35561],{"class":997},"    # 定义损失函数使用交叉熵损失函数\n",[40,35563,35564,35567,35569],{"class":42,"line":13063},[40,35565,35566],{"class":50},"    criterion",[40,35568,1284],{"class":1283},[40,35570,35571],{"class":50},"nn.CrossEntropyLoss()\n",[40,35573,35574],{"class":42,"line":13086},[40,35575,1413],{"emptyLinePlaceholder":1412},[40,35577,35578],{"class":42,"line":13110},[40,35579,35580],{"class":997},"    # 将模型放到GPU中进行训练\n",[40,35582,35583,35585,35587],{"class":42,"line":13115},[40,35584,34589],{"class":50},[40,35586,1284],{"class":1283},[40,35588,35589],{"class":50},"model.to(device)\n",[40,35591,35592],{"class":42,"line":13120},[40,35593,35594],{"class":997},"    # 复制当前模型的参数\n",[40,35596,35597],{"class":42,"line":13125},[40,35598,35599],{"class":997},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[40,35601,35602],{"class":42,"line":13134},[40,35603,35604],{"class":997},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[40,35606,35607,35610,35612],{"class":42,"line":13139},[40,35608,35609],{"class":50},"    best_model_wts",[40,35611,1284],{"class":1283},[40,35613,35614],{"class":50},"copy.deepcopy(model.state_dict())\n",[40,35616,35617],{"class":42,"line":13145},[40,35618,1413],{"emptyLinePlaceholder":1412},[40,35620,35621],{"class":42,"line":13166},[40,35622,1413],{"emptyLinePlaceholder":1412},[40,35624,35625],{"class":42,"line":13172},[40,35626,35627],{"class":997},"    # 初始化参数\n",[40,35629,35630],{"class":42,"line":13186},[40,35631,35632],{"class":997},"    # 最高准确度\n",[40,35634,35635,35638,35640],{"class":42,"line":13192},[40,35636,35637],{"class":50},"    best_acc",[40,35639,1284],{"class":1283},[40,35641,35642],{"class":63},"0.0\n",[40,35644,35645],{"class":42,"line":13219},[40,35646,35647],{"class":997},"    # 训练集损失列表\n",[40,35649,35650,35653,35655],{"class":42,"line":13228},[40,35651,35652],{"class":50},"    train_loss_all",[40,35654,1284],{"class":1283},[40,35656,35657],{"class":50},"[]\n",[40,35659,35660],{"class":42,"line":13234},[40,35661,35662],{"class":997},"    # 验证集函数列表\n",[40,35664,35665,35668,35670],{"class":42,"line":13242},[40,35666,35667],{"class":50},"    val_loss_all",[40,35669,1284],{"class":1283},[40,35671,35657],{"class":50},[40,35673,35674],{"class":42,"line":13247},[40,35675,35676],{"class":997},"    # 训练集准确度列表\n",[40,35678,35679,35682,35684],{"class":42,"line":19926},[40,35680,35681],{"class":50},"    train_acc_all",[40,35683,1284],{"class":1283},[40,35685,35657],{"class":50},[40,35687,35688],{"class":42,"line":19932},[40,35689,35690],{"class":997},"    # 验证集准确度列表\n",[40,35692,35693,35696,35698],{"class":42,"line":19955},[40,35694,35695],{"class":50},"    val_acc_all",[40,35697,1284],{"class":1283},[40,35699,35657],{"class":50},[40,35701,35702],{"class":42,"line":19961},[40,35703,1413],{"emptyLinePlaceholder":1412},[40,35705,35706],{"class":42,"line":19984},[40,35707,35708],{"class":997},"    # 保存当前时间--->方便看每轮训练的时间\n",[40,35710,35711,35714,35716],{"class":42,"line":19998},[40,35712,35713],{"class":50},"    since",[40,35715,1284],{"class":1283},[40,35717,35718],{"class":50},"time.time()\n",[40,35720,35721],{"class":42,"line":20018},[40,35722,1413],{"emptyLinePlaceholder":1412},[40,35724,35725],{"class":42,"line":20024},[40,35726,1413],{"emptyLinePlaceholder":1412},[40,35728,35729],{"class":42,"line":20035},[40,35730,35731],{"class":997},"    # 准备工作完成--->开始训练模型\n",[40,35733,35734,35736,35739,35741,35744],{"class":42,"line":20058},[40,35735,6525],{"class":1283},[40,35737,35738],{"class":50}," epoch ",[40,35740,29355],{"class":1283},[40,35742,35743],{"class":63}," range",[40,35745,35746],{"class":50},"(num_epochs):\n",[40,35748,35749,35752,35754,35757,35760,35762,35764,35766,35769,35771,35773],{"class":42,"line":20080},[40,35750,35751],{"class":63},"        print",[40,35753,3488],{"class":50},[40,35755,35756],{"class":94},"\"Epoch ",[40,35758,35759],{"class":63},"{}",[40,35761,4063],{"class":94},[40,35763,35759],{"class":63},[40,35765,3731],{"class":94},[40,35767,35768],{"class":50},".format(epoch,num_epochs",[40,35770,4011],{"class":1283},[40,35772,3698],{"class":63},[40,35774,33797],{"class":50},[40,35776,35777,35779,35781,35784,35786,35788],{"class":42,"line":20085},[40,35778,35751],{"class":63},[40,35780,3488],{"class":50},[40,35782,35783],{"class":94},"\"-\"",[40,35785,3934],{"class":1283},[40,35787,3925],{"class":63},[40,35789,1811],{"class":50},[40,35791,35792],{"class":42,"line":20091},[40,35793,1413],{"emptyLinePlaceholder":1412},[40,35795,35796],{"class":42,"line":20105},[40,35797,35798],{"class":997},"        # 初始化参数\n",[40,35800,35801],{"class":42,"line":20118},[40,35802,35803],{"class":997},"        # 训练集损失函数\n",[40,35805,35806,35809,35811],{"class":42,"line":20123},[40,35807,35808],{"class":50},"        train_loss",[40,35810,1284],{"class":1283},[40,35812,35642],{"class":63},[40,35814,35815],{"class":42,"line":20137},[40,35816,35817],{"class":997},"        # 训练集准确度\n",[40,35819,35820,35823,35825],{"class":42,"line":20142},[40,35821,35822],{"class":50},"        train_corrects",[40,35824,1284],{"class":1283},[40,35826,6409],{"class":63},[40,35828,35829],{"class":42,"line":20148},[40,35830,35831],{"class":997},"        # 验证集损失函数\n",[40,35833,35834,35837,35839],{"class":42,"line":20153},[40,35835,35836],{"class":50},"        val_loss",[40,35838,1284],{"class":1283},[40,35840,35642],{"class":63},[40,35842,35843],{"class":42,"line":20167},[40,35844,35845],{"class":997},"        # 验证集准确度\n",[40,35847,35848,35851,35853],{"class":42,"line":20172},[40,35849,35850],{"class":50},"        val_corrects",[40,35852,1284],{"class":1283},[40,35854,6409],{"class":63},[40,35856,35857],{"class":42,"line":20177},[40,35858,35859],{"class":997},"        # 训练集样本数量\n",[40,35861,35862,35865,35867],{"class":42,"line":20191},[40,35863,35864],{"class":50},"        train_num",[40,35866,1284],{"class":1283},[40,35868,6409],{"class":63},[40,35870,35871],{"class":42,"line":20203},[40,35872,35873],{"class":997},"        # 验证集样本数量\n",[40,35875,35876,35879,35881],{"class":42,"line":20208},[40,35877,35878],{"class":50},"        val_num",[40,35880,1284],{"class":1283},[40,35882,6409],{"class":63},[40,35884,35885],{"class":42,"line":20221},[40,35886,35887],{"class":997},"        # 将数据放到设备,并开始训练\n",[40,35889,35890,35892,35894,35896,35898],{"class":42,"line":20226},[40,35891,6727],{"class":1283},[40,35893,34901],{"class":50},[40,35895,29355],{"class":1283},[40,35897,34906],{"class":63},[40,35899,35900],{"class":50},"(train_dataloader):\n",[40,35902,35903],{"class":42,"line":20231},[40,35904,35905],{"class":997},"            # 将特征放入到训练设备\n",[40,35907,35908,35911,35913],{"class":42,"line":20236},[40,35909,35910],{"class":50},"            b_x",[40,35912,1284],{"class":1283},[40,35914,35915],{"class":50},"b_x.to(device)\n",[40,35917,35918],{"class":42,"line":20249},[40,35919,35920],{"class":997},"            # 将标签放入到训练设备当中\n",[40,35922,35923,35926,35928],{"class":42,"line":20254},[40,35924,35925],{"class":50},"            b_y",[40,35927,1284],{"class":1283},[40,35929,35930],{"class":50},"b_y.to(device)\n",[40,35932,35934],{"class":42,"line":35933},98,[40,35935,35936],{"class":997},"            # 设置模型为训练模式\n",[40,35938,35940],{"class":42,"line":35939},99,[40,35941,35942],{"class":50},"            model.train()\n",[40,35944,35946],{"class":42,"line":35945},100,[40,35947,35948],{"class":997},"            # 将数据放到模型当中,开始前向传播\n",[40,35950,35952],{"class":42,"line":35951},101,[40,35953,35954],{"class":997},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[40,35956,35958,35961,35963],{"class":42,"line":35957},102,[40,35959,35960],{"class":50},"            output",[40,35962,1284],{"class":1283},[40,35964,35965],{"class":50},"model(b_x)\n",[40,35967,35969],{"class":42,"line":35968},103,[40,35970,35971],{"class":997},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[40,35973,35975,35978,35980,35983,35986,35988,35990],{"class":42,"line":35974},104,[40,35976,35977],{"class":50},"            pre_lab",[40,35979,1284],{"class":1283},[40,35981,35982],{"class":50},"torch.argmax(output,",[40,35984,35985],{"class":8539},"dim",[40,35987,1284],{"class":1283},[40,35989,3698],{"class":63},[40,35991,1811],{"class":50},[40,35993,35995],{"class":42,"line":35994},105,[40,35996,35997],{"class":997},"            # 计算每一个batch的损失函数\n",[40,35999,36001,36004,36006],{"class":42,"line":36000},106,[40,36002,36003],{"class":50},"            loss",[40,36005,1284],{"class":1283},[40,36007,36008],{"class":50},"criterion(output,b_y)\n",[40,36010,36012],{"class":42,"line":36011},107,[40,36013,36014],{"class":997},"            # 将梯度初始化为0\n",[40,36016,36018],{"class":42,"line":36017},108,[40,36019,36020],{"class":50},"            optimizer.zero_grad()\n",[40,36022,36024],{"class":42,"line":36023},109,[40,36025,36026],{"class":997},"            # 梯度置为0后再进行反向传播\n",[40,36028,36030],{"class":42,"line":36029},110,[40,36031,36032],{"class":50},"            loss.backward()\n",[40,36034,36036],{"class":42,"line":36035},111,[40,36037,36038],{"class":997},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[40,36040,36042],{"class":42,"line":36041},112,[40,36043,36044],{"class":50},"            optimizer.step()\n",[40,36046,36048],{"class":42,"line":36047},113,[40,36049,36050],{"class":997},"            # loss.item()指的是batch的平均损失\n",[40,36052,36054,36057,36059,36062,36064,36067,36069],{"class":42,"line":36053},114,[40,36055,36056],{"class":50},"            train_loss",[40,36058,12799],{"class":1283},[40,36060,36061],{"class":50},"loss.item()",[40,36063,3934],{"class":1283},[40,36065,36066],{"class":50},"b_x.size(",[40,36068,3672],{"class":63},[40,36070,1811],{"class":50},[40,36072,36074],{"class":42,"line":36073},115,[40,36075,36076],{"class":997},"            # 计算每个批次中正确预测的数量\n",[40,36078,36080,36083,36085,36088,36090],{"class":42,"line":36079},116,[40,36081,36082],{"class":50},"            train_corrects",[40,36084,12799],{"class":1283},[40,36086,36087],{"class":50},"torch.sum(pre_lab",[40,36089,6273],{"class":1283},[40,36091,36092],{"class":50},"b_y.data)\n",[40,36094,36096],{"class":42,"line":36095},117,[40,36097,36098],{"class":997},"            # 计算目前为止一共处理了多少样本\n",[40,36100,36102,36105,36107,36109,36111],{"class":42,"line":36101},118,[40,36103,36104],{"class":50},"            train_num",[40,36106,12799],{"class":1283},[40,36108,36066],{"class":50},[40,36110,3672],{"class":63},[40,36112,1811],{"class":50},[40,36114,36116],{"class":42,"line":36115},119,[40,36117,36118],{"class":997},"        # 验证数据\n",[40,36120,36122,36124,36127,36129,36131],{"class":42,"line":36121},120,[40,36123,6727],{"class":1283},[40,36125,36126],{"class":50}," step ,(b_x,b_y) ",[40,36128,29355],{"class":1283},[40,36130,34906],{"class":63},[40,36132,36133],{"class":50},"(val_dataloader):\n",[40,36135,36137],{"class":42,"line":36136},121,[40,36138,36139],{"class":997},"            # 将特征放到验证设备当中\n",[40,36141,36143,36145,36147],{"class":42,"line":36142},122,[40,36144,35910],{"class":50},[40,36146,1284],{"class":1283},[40,36148,35915],{"class":50},[40,36150,36152],{"class":42,"line":36151},123,[40,36153,36154],{"class":997},"            # 将标签放到放到训练设备当中\n",[40,36156,36158,36160,36162],{"class":42,"line":36157},124,[40,36159,35925],{"class":50},[40,36161,1284],{"class":1283},[40,36163,35930],{"class":50},[40,36165,36167],{"class":42,"line":36166},125,[40,36168,36169],{"class":997},"            # 开启验证模式，设置模型为评估模式\n",[40,36171,36173],{"class":42,"line":36172},126,[40,36174,36175],{"class":50},"            model.eval()\n",[40,36177,36179,36182],{"class":42,"line":36178},127,[40,36180,36181],{"class":1283},"            with",[40,36183,36184],{"class":50}," torch.no_grad():\n",[40,36186,36188],{"class":42,"line":36187},128,[40,36189,36190],{"class":997},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[40,36192,36194,36197,36199],{"class":42,"line":36193},129,[40,36195,36196],{"class":50},"                output ",[40,36198,1284],{"class":1283},[40,36200,36201],{"class":50}," model(b_x)\n",[40,36203,36205],{"class":42,"line":36204},130,[40,36206,36207],{"class":997},"                # 查找每一行中最大值对应的下标\n",[40,36209,36211,36214,36216,36219,36221,36223,36225],{"class":42,"line":36210},131,[40,36212,36213],{"class":50},"                pre_lab ",[40,36215,1284],{"class":1283},[40,36217,36218],{"class":50}," torch.argmax(output, ",[40,36220,35985],{"class":8539},[40,36222,1284],{"class":1283},[40,36224,3698],{"class":63},[40,36226,1811],{"class":50},[40,36228,36230],{"class":42,"line":36229},132,[40,36231,36232],{"class":997},"                # 计算验证集上的当前 batch 损失\n",[40,36234,36236,36239,36241],{"class":42,"line":36235},133,[40,36237,36238],{"class":50},"                val_batch_loss ",[40,36240,1284],{"class":1283},[40,36242,36243],{"class":50}," criterion(output, b_y)\n",[40,36245,36247],{"class":42,"line":36246},134,[40,36248,36249],{"class":997},"                # 对损失函数进行累加（按样本数加权）\n",[40,36251,36253,36256,36258,36261,36263,36266,36268],{"class":42,"line":36252},135,[40,36254,36255],{"class":50},"                val_loss ",[40,36257,12799],{"class":1283},[40,36259,36260],{"class":50}," val_batch_loss.item() ",[40,36262,3934],{"class":1283},[40,36264,36265],{"class":50}," b_x.size(",[40,36267,3672],{"class":63},[40,36269,1811],{"class":50},[40,36271,36273,36276,36278,36281,36283],{"class":42,"line":36272},136,[40,36274,36275],{"class":50},"                val_corrects ",[40,36277,12799],{"class":1283},[40,36279,36280],{"class":50}," torch.sum(pre_lab ",[40,36282,6273],{"class":1283},[40,36284,36285],{"class":50}," b_y.data)\n",[40,36287,36289],{"class":42,"line":36288},137,[40,36290,36291],{"class":997},"                # 当前用于验证的样本数量\n",[40,36293,36295,36298,36300,36302,36304],{"class":42,"line":36294},138,[40,36296,36297],{"class":50},"            val_num ",[40,36299,12799],{"class":1283},[40,36301,36265],{"class":50},[40,36303,3672],{"class":63},[40,36305,1811],{"class":50},[40,36307,36309],{"class":42,"line":36308},139,[40,36310,36311],{"class":997},"        # 计算并保存每一次迭代的loss值和准确率\n",[40,36313,36315],{"class":42,"line":36314},140,[40,36316,36317],{"class":997},"        # 计算并保存训练集的loss值\n",[40,36319,36321,36324,36326],{"class":42,"line":36320},141,[40,36322,36323],{"class":50},"        train_loss_all.append(train_loss",[40,36325,4063],{"class":1283},[40,36327,36328],{"class":50},"train_num)\n",[40,36330,36332],{"class":42,"line":36331},142,[40,36333,36334],{"class":997},"        # 取双精度\n",[40,36336,36338],{"class":42,"line":36337},143,[40,36339,36340],{"class":997},"        # 计算并保存训练集的准确率\n",[40,36342,36344,36347,36349],{"class":42,"line":36343},144,[40,36345,36346],{"class":50},"        train_acc_all.append(train_corrects.double().item()",[40,36348,4063],{"class":1283},[40,36350,36328],{"class":50},[40,36352,36354],{"class":42,"line":36353},145,[40,36355,36356],{"class":997},"        # 计算并保存验证集的loss值\n",[40,36358,36360,36363,36365],{"class":42,"line":36359},146,[40,36361,36362],{"class":50},"        val_loss_all.append(val_loss",[40,36364,4063],{"class":1283},[40,36366,36367],{"class":50},"val_num)\n",[40,36369,36371],{"class":42,"line":36370},147,[40,36372,36373],{"class":997},"        # 计算并保存验证集的准确率\n",[40,36375,36377,36380,36382],{"class":42,"line":36376},148,[40,36378,36379],{"class":50},"        val_acc_all.append(val_corrects.double().item()",[40,36381,4063],{"class":1283},[40,36383,36367],{"class":50},[40,36385,36387],{"class":42,"line":36386},149,[40,36388,1413],{"emptyLinePlaceholder":1412},[40,36390,36392],{"class":42,"line":36391},150,[40,36393,36394],{"class":997},"        # 打印训练一轮的loss值和准确率\n",[40,36396,36398,36400,36402,36404,36406,36409,36411,36414,36416,36419,36421,36423,36425,36427,36430,36432,36434,36437,36439,36441],{"class":42,"line":36397},151,[40,36399,35751],{"class":63},[40,36401,3488],{"class":50},[40,36403,6916],{"class":94},[40,36405,35759],{"class":63},[40,36407,36408],{"class":94},"train loss:",[40,36410,4373],{"class":63},[40,36412,36413],{"class":1283},":.4f",[40,36415,4423],{"class":63},[40,36417,36418],{"class":94}," train acc:",[40,36420,4373],{"class":63},[40,36422,36413],{"class":1283},[40,36424,4423],{"class":63},[40,36426,6916],{"class":94},[40,36428,36429],{"class":50},".format(epoch,train_loss_all[",[40,36431,4011],{"class":1283},[40,36433,3698],{"class":63},[40,36435,36436],{"class":50},"],train_acc_all[",[40,36438,4011],{"class":1283},[40,36440,3698],{"class":63},[40,36442,36443],{"class":50},"]))\n",[40,36445,36447,36449,36451,36453,36455,36458,36460,36462,36464,36467,36469,36471,36473,36475,36478,36480,36482,36485,36487,36489],{"class":42,"line":36446},152,[40,36448,35751],{"class":63},[40,36450,3488],{"class":50},[40,36452,6916],{"class":94},[40,36454,35759],{"class":63},[40,36456,36457],{"class":94},"val loss:",[40,36459,4373],{"class":63},[40,36461,36413],{"class":1283},[40,36463,4423],{"class":63},[40,36465,36466],{"class":94}," val acc:",[40,36468,4373],{"class":63},[40,36470,36413],{"class":1283},[40,36472,4423],{"class":63},[40,36474,6916],{"class":94},[40,36476,36477],{"class":50},".format(epoch,val_loss_all[",[40,36479,4011],{"class":1283},[40,36481,3698],{"class":63},[40,36483,36484],{"class":50},"],val_acc_all[",[40,36486,4011],{"class":1283},[40,36488,3698],{"class":63},[40,36490,36443],{"class":50},[40,36492,36494],{"class":42,"line":36493},153,[40,36495,1413],{"emptyLinePlaceholder":1412},[40,36497,36499],{"class":42,"line":36498},154,[40,36500,36501],{"class":997},"        # 判断准确度--->保存最优模型\n",[40,36503,36505,36507,36510,36512,36514,36516,36518],{"class":42,"line":36504},155,[40,36506,5822],{"class":1283},[40,36508,36509],{"class":50}," val_acc_all[",[40,36511,4011],{"class":1283},[40,36513,3698],{"class":63},[40,36515,4417],{"class":50},[40,36517,4437],{"class":1283},[40,36519,36520],{"class":50},"best_acc:\n",[40,36522,36524],{"class":42,"line":36523},156,[40,36525,36526],{"class":997},"            # 保存当前模型准确度\n",[40,36528,36530,36533,36535,36537,36540,36542,36544],{"class":42,"line":36529},157,[40,36531,36532],{"class":50},"            best_acc:",[40,36534,3526],{"class":63},[40,36536,1284],{"class":1283},[40,36538,36539],{"class":50},"val_acc_all[",[40,36541,4011],{"class":1283},[40,36543,3698],{"class":63},[40,36545,36546],{"class":50},"]\n",[40,36548,36550],{"class":42,"line":36549},158,[40,36551,36552],{"class":997},"            # 保存当前的准确度\n",[40,36554,36556],{"class":42,"line":36555},159,[40,36557,36558],{"class":997},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[40,36560,36562,36565,36567],{"class":42,"line":36561},160,[40,36563,36564],{"class":50},"            best_model_wts",[40,36566,1284],{"class":1283},[40,36568,35614],{"class":50},[40,36570,36572],{"class":42,"line":36571},161,[40,36573,1413],{"emptyLinePlaceholder":1412},[40,36575,36577],{"class":42,"line":36576},162,[40,36578,36579],{"class":997},"        # 计算耗时\n",[40,36581,36583,36586,36588,36591,36593],{"class":42,"line":36582},163,[40,36584,36585],{"class":50},"        time_use",[40,36587,1284],{"class":1283},[40,36589,36590],{"class":50},"time.time()",[40,36592,4011],{"class":1283},[40,36594,36595],{"class":50},"since\n",[40,36597,36599,36601,36603,36606,36608,36611,36613,36615,36617,36619,36621,36624,36627,36630,36632,36635,36637,36639],{"class":42,"line":36598},164,[40,36600,35751],{"class":63},[40,36602,3488],{"class":50},[40,36604,36605],{"class":94},"'训练和验证耗费的时间",[40,36607,4373],{"class":63},[40,36609,36610],{"class":1283},":.0f",[40,36612,4423],{"class":63},[40,36614,4023],{"class":94},[40,36616,4373],{"class":63},[40,36618,36610],{"class":1283},[40,36620,4423],{"class":63},[40,36622,36623],{"class":94},"s'",[40,36625,36626],{"class":50},".format(time_use",[40,36628,36629],{"class":1283},"\u002F\u002F",[40,36631,4384],{"class":63},[40,36633,36634],{"class":50},",time_use",[40,36636,3808],{"class":1283},[40,36638,4384],{"class":63},[40,36640,33797],{"class":50},[40,36642,36644],{"class":42,"line":36643},165,[40,36645,36646],{"class":997},"    # 选择最优参数\n",[40,36648,36650],{"class":42,"line":36649},166,[40,36651,36652],{"class":997},"    # 加载最高准确率下的模型参数\n",[40,36654,36656],{"class":42,"line":36655},167,[40,36657,36658],{"class":997},"    # model.load_state_dict(best_model_wts)\n",[40,36660,36662,36665,36668],{"class":42,"line":36661},168,[40,36663,36664],{"class":50},"    torch.save(model.state_dict(best_model_wts), ",[40,36666,36667],{"class":94},"'.\u002Fbest_model.pth'",[40,36669,1811],{"class":50},[40,36671,36673],{"class":42,"line":36672},169,[40,36674,36675],{"class":997},"    # 或者写成\n",[40,36677,36679],{"class":42,"line":36678},170,[40,36680,36681],{"class":997},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[40,36683,36685],{"class":42,"line":36684},171,[40,36686,36687],{"class":997},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[40,36689,36691,36694,36696,36699,36702,36704],{"class":42,"line":36690},172,[40,36692,36693],{"class":50},"    train_process",[40,36695,1284],{"class":1283},[40,36697,36698],{"class":50},"pd.DataFrame(",[40,36700,36701],{"class":8539},"data",[40,36703,1284],{"class":1283},[40,36705,4888],{"class":50},[40,36707,36709,36712,36714,36717],{"class":42,"line":36708},173,[40,36710,36711],{"class":94},"        \"epoch\"",[40,36713,4336],{"class":50},[40,36715,36716],{"class":63},"range",[40,36718,36719],{"class":50},"(num_epochs),\n",[40,36721,36723,36726],{"class":42,"line":36722},174,[40,36724,36725],{"class":94},"        \"train_loss_all\"",[40,36727,36728],{"class":50},":train_loss_all,\n",[40,36730,36732,36735],{"class":42,"line":36731},175,[40,36733,36734],{"class":94},"        \"val_loss_all\"",[40,36736,36737],{"class":50},":val_loss_all,\n",[40,36739,36741,36744],{"class":42,"line":36740},176,[40,36742,36743],{"class":94},"        \"train_acc_all\"",[40,36745,36746],{"class":50},":train_acc_all,\n",[40,36748,36750,36753],{"class":42,"line":36749},177,[40,36751,36752],{"class":94},"        \"val_acc_all\"",[40,36754,36755],{"class":50},":val_acc_all\n",[40,36757,36759],{"class":42,"line":36758},178,[40,36760,36761],{"class":50},"    })\n",[40,36763,36765],{"class":42,"line":36764},179,[40,36766,36767],{"class":997},"    # 返回训练保存的过程\n",[40,36769,36771,36773],{"class":42,"line":36770},180,[40,36772,7413],{"class":1283},[40,36774,36775],{"class":50}," train_process\n",[40,36777,36779],{"class":42,"line":36778},181,[40,36780,1413],{"emptyLinePlaceholder":1412},[40,36782,36784],{"class":42,"line":36783},182,[40,36785,36786],{"class":997},"# 将loss值和精度按照图片的形式展示出来\n",[40,36788,36790,36792,36795],{"class":42,"line":36789},183,[40,36791,35247],{"class":1283},[40,36793,36794],{"class":596}," matplot_acc_loss",[40,36796,36797],{"class":50},"(train_process):\n",[40,36799,36801],{"class":42,"line":36800},184,[40,36802,36803],{"class":997},"    # 设置图的大小\n",[40,36805,36807,36810,36812,36814,36816,36818,36820,36822],{"class":42,"line":36806},185,[40,36808,36809],{"class":50},"    plt.figure(",[40,36811,34993],{"class":8539},[40,36813,1284],{"class":1283},[40,36815,3488],{"class":50},[40,36817,3977],{"class":63},[40,36819,1299],{"class":50},[40,36821,3773],{"class":63},[40,36823,33797],{"class":50},[40,36825,36827],{"class":42,"line":36826},186,[40,36828,36829],{"class":997},"    # 设置图中有几张图\n",[40,36831,36833],{"class":42,"line":36832},187,[40,36834,36835],{"class":997},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[40,36837,36839],{"class":42,"line":36838},188,[40,36840,36841],{"class":997},"    # ①loss图\n",[40,36843,36845,36847,36849,36851,36853,36855,36857],{"class":42,"line":36844},189,[40,36846,35027],{"class":50},[40,36848,3698],{"class":63},[40,36850,1299],{"class":50},[40,36852,64],{"class":63},[40,36854,1299],{"class":50},[40,36856,3698],{"class":63},[40,36858,1811],{"class":50},[40,36860,36862],{"class":42,"line":36861},190,[40,36863,36864],{"class":997},"    # 补充:\n",[40,36866,36868],{"class":42,"line":36867},191,[40,36869,36870],{"class":997},"    # plt.subplot(nrows, ncols, index)\n",[40,36872,36874],{"class":42,"line":36873},192,[40,36875,36876],{"class":997},"    # nrows：行数\n",[40,36878,36880],{"class":42,"line":36879},193,[40,36881,36882],{"class":997},"    # ncols：列数\n",[40,36884,36886],{"class":42,"line":36885},194,[40,36887,36888],{"class":997},"    # index：目前选中第几个子图（从1开始）\n",[40,36890,36892,36895,36898,36901,36904,36906,36909,36911,36914],{"class":42,"line":36891},195,[40,36893,36894],{"class":50},"    plt.plot(train_process[",[40,36896,36897],{"class":94},"\"epoch\"",[40,36899,36900],{"class":50},"],train_process.train_loss_all,",[40,36902,36903],{"class":94},"'ro-'",[40,36905,1299],{"class":50},[40,36907,36908],{"class":8539},"label",[40,36910,1284],{"class":1283},[40,36912,36913],{"class":94},"'train loss'",[40,36915,1811],{"class":50},[40,36917,36919,36921,36923,36926,36929,36931,36933,36935,36938],{"class":42,"line":36918},196,[40,36920,36894],{"class":50},[40,36922,36897],{"class":94},[40,36924,36925],{"class":50},"],train_process.val_loss_all,",[40,36927,36928],{"class":94},"'bs--'",[40,36930,1299],{"class":50},[40,36932,36908],{"class":8539},[40,36934,1284],{"class":1283},[40,36936,36937],{"class":94},"'val loss'",[40,36939,1811],{"class":50},[40,36941,36943],{"class":42,"line":36942},197,[40,36944,36945],{"class":997},"    # 添加一个图例\n",[40,36947,36949],{"class":42,"line":36948},198,[40,36950,36951],{"class":50},"    plt.legend()\n",[40,36953,36955],{"class":42,"line":36954},199,[40,36956,36957],{"class":997},"    # 给轴添加标签\n",[40,36959,36961,36964,36967],{"class":42,"line":36960},200,[40,36962,36963],{"class":50},"    plt.xlabel(",[40,36965,36966],{"class":94},"'epoch'",[40,36968,1811],{"class":50},[40,36970,36972,36975,36978],{"class":42,"line":36971},201,[40,36973,36974],{"class":50},"    plt.ylabel(",[40,36976,36977],{"class":94},"'loss'",[40,36979,1811],{"class":50},[40,36981,36983],{"class":42,"line":36982},202,[40,36984,36985],{"class":997},"    # ②准确度图\n",[40,36987,36989,36991,36993,36995,36997,36999,37001],{"class":42,"line":36988},203,[40,36990,35027],{"class":50},[40,36992,3698],{"class":63},[40,36994,1299],{"class":50},[40,36996,64],{"class":63},[40,36998,1299],{"class":50},[40,37000,64],{"class":63},[40,37002,1811],{"class":50},[40,37004,37006,37008,37010,37013,37015,37017,37019,37021,37024],{"class":42,"line":37005},204,[40,37007,36894],{"class":50},[40,37009,36897],{"class":94},[40,37011,37012],{"class":50},"],train_process.train_acc_all,",[40,37014,36903],{"class":94},[40,37016,1299],{"class":50},[40,37018,36908],{"class":8539},[40,37020,1284],{"class":1283},[40,37022,37023],{"class":94},"'train acc'",[40,37025,1811],{"class":50},[40,37027,37029,37031,37033,37036,37038,37040,37042,37044,37047],{"class":42,"line":37028},205,[40,37030,36894],{"class":50},[40,37032,36897],{"class":94},[40,37034,37035],{"class":50},"],train_process.val_acc_all,",[40,37037,36928],{"class":94},[40,37039,1299],{"class":50},[40,37041,36908],{"class":8539},[40,37043,1284],{"class":1283},[40,37045,37046],{"class":94},"'val acc'",[40,37048,1811],{"class":50},[40,37050,37052],{"class":42,"line":37051},206,[40,37053,37054],{"class":997},"    # 添加图例\n",[40,37056,37058],{"class":42,"line":37057},207,[40,37059,36951],{"class":50},[40,37061,37063,37065,37067],{"class":42,"line":37062},208,[40,37064,36963],{"class":50},[40,37066,36897],{"class":94},[40,37068,1811],{"class":50},[40,37070,37072,37074,37077],{"class":42,"line":37071},209,[40,37073,36974],{"class":50},[40,37075,37076],{"class":94},"\"acc\"",[40,37078,1811],{"class":50},[40,37080,37082],{"class":42,"line":37081},210,[40,37083,37084],{"class":50},"    plt.show()\n",[40,37086,37088],{"class":42,"line":37087},211,[40,37089,1413],{"emptyLinePlaceholder":1412},[40,37091,37093],{"class":42,"line":37092},212,[40,37094,37095],{"class":997},"# 正式开始训练:\n",[40,37097,37099,37101,37103,37105,37107],{"class":42,"line":37098},213,[40,37100,4873],{"class":1283},[40,37102,34520],{"class":63},[40,37104,6273],{"class":1283},[40,37106,34525],{"class":94},[40,37108,332],{"class":50},[40,37110,37112],{"class":42,"line":37111},214,[40,37113,37114],{"class":997},"    # 将模型实例化\n",[40,37116,37118,37121,37123],{"class":42,"line":37117},215,[40,37119,37120],{"class":50},"    LeNet",[40,37122,1284],{"class":1283},[40,37124,37125],{"class":50},"LeNet()\n",[40,37127,37129,37132,37134],{"class":42,"line":37128},216,[40,37130,37131],{"class":50},"    train_dataloader,val_dataloader",[40,37133,1284],{"class":1283},[40,37135,37136],{"class":50},"train_val_data_process()\n",[40,37138,37140,37142,37144,37147,37150,37152,37154],{"class":42,"line":37139},217,[40,37141,36693],{"class":50},[40,37143,1284],{"class":1283},[40,37145,37146],{"class":50},"train_model_process(LeNet,train_dataloader,val_dataloader,",[40,37148,37149],{"class":8539},"num_epochs",[40,37151,1284],{"class":1283},[40,37153,4178],{"class":63},[40,37155,1811],{"class":50},[40,37157,37159],{"class":42,"line":37158},218,[40,37160,37161],{"class":50},"    matplot_acc_loss(train_process)\n",[19,37163,37164],{},"画图的补充点学习：",[19,37166,37167],{},[438,37168],{"alt":36,"src":37169},"\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",[492,37171,37172],{"start":70},[495,37173,37174],{},"测试",[31,37176,37178],{"className":33679,"code":37177,"language":2323,"meta":36,"style":36},"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",[26,37179,37180,37186,37196,37208,37218,37223,37233,37243,37247,37252,37261,37278,37290,37307,37318,37334,37339,37350,37361,37372,37379,37383,37388,37398,37403,37420,37428,37432,37437,37446,37455,37459,37464,37469,37474,37481,37486,37498,37508,37518,37523,37527,37532,37541,37546,37562,37567,37572,37577,37591,37596,37610,37614,37619,37634,37639,37651,37655,37660,37672,37677,37685,37690,37695,37705,37710,37719,37724,37729,37733,37738,37743,37759,37767,37772,37777,37836,37842,37847,37858,37866,37874,37878,37883,37887,37892,37900,37905,37921,37926,37936,37946],{"__ignoreMap":36},[40,37181,37182,37184],{"class":42,"line":43},[40,37183,33692],{"class":1283},[40,37185,33695],{"class":50},[40,37187,37188,37190,37192,37194],{"class":42,"line":54},[40,37189,33692],{"class":1283},[40,37191,34715],{"class":50},[40,37193,34683],{"class":1283},[40,37195,34720],{"class":50},[40,37197,37198,37200,37203,37205],{"class":42,"line":70},[40,37199,34037],{"class":1283},[40,37201,37202],{"class":50}," jupyter_client.consoleapp ",[40,37204,33692],{"class":1283},[40,37206,37207],{"class":50}," classes\n",[40,37209,37210,37212,37214,37216],{"class":42,"line":78},[40,37211,34037],{"class":1283},[40,37213,34698],{"class":50},[40,37215,33692],{"class":1283},[40,37217,34703],{"class":50},[40,37219,37220],{"class":42,"line":86},[40,37221,37222],{"class":997},"# 导入数据集\n",[40,37224,37225,37227,37229,37231],{"class":42,"line":100},[40,37226,34037],{"class":1283},[40,37228,34668],{"class":50},[40,37230,33692],{"class":1283},[40,37232,34673],{"class":50},[40,37234,37235,37237,37239,37241],{"class":42,"line":108},[40,37236,34037],{"class":1283},[40,37238,35214],{"class":50},[40,37240,33692],{"class":1283},[40,37242,35219],{"class":50},[40,37244,37245],{"class":42,"line":121},[40,37246,1413],{"emptyLinePlaceholder":1412},[40,37248,37249],{"class":42,"line":134},[40,37250,37251],{"class":997},"# 测试数据处理\n",[40,37253,37254,37256,37259],{"class":42,"line":146},[40,37255,35247],{"class":1283},[40,37257,37258],{"class":596}," test_data_process",[40,37260,35253],{"class":50},[40,37262,37263,37266,37268,37270,37272,37274,37276],{"class":42,"line":154},[40,37264,37265],{"class":50},"    test_data",[40,37267,1284],{"class":1283},[40,37269,34755],{"class":50},[40,37271,34758],{"class":8539},[40,37273,1284],{"class":1283},[40,37275,34763],{"class":94},[40,37277,34766],{"class":50},[40,37279,37280,37283,37285,37288],{"class":42,"line":162},[40,37281,37282],{"class":8539},"                           train",[40,37284,1284],{"class":1283},[40,37286,37287],{"class":63},"False",[40,37289,34766],{"class":50},[40,37291,37292,37295,37297,37299,37301,37303,37305],{"class":42,"line":170},[40,37293,37294],{"class":8539},"                           transform",[40,37296,1284],{"class":1283},[40,37298,34793],{"class":50},[40,37300,34796],{"class":8539},[40,37302,1284],{"class":1283},[40,37304,4378],{"class":63},[40,37306,34804],{"class":50},[40,37308,37309,37312,37314,37316],{"class":42,"line":183},[40,37310,37311],{"class":8539},"                           download",[40,37313,1284],{"class":1283},[40,37315,34776],{"class":63},[40,37317,1811],{"class":50},[40,37319,37320,37323,37325,37327,37329,37331],{"class":42,"line":196},[40,37321,37322],{"class":50},"    test_dataloader",[40,37324,1284],{"class":1283},[40,37326,34834],{"class":50},[40,37328,34837],{"class":8539},[40,37330,1284],{"class":1283},[40,37332,37333],{"class":50},"test_data,\n",[40,37335,37336],{"class":42,"line":204},[40,37337,37338],{"class":997},"                                    # 这里是一张一张进行测试\n",[40,37340,37341,37344,37346,37348],{"class":42,"line":217},[40,37342,37343],{"class":8539},"                                    batch_size",[40,37345,1284],{"class":1283},[40,37347,3698],{"class":63},[40,37349,34766],{"class":50},[40,37351,37352,37355,37357,37359],{"class":42,"line":230},[40,37353,37354],{"class":8539},"                                    shuffle",[40,37356,1284],{"class":1283},[40,37358,34776],{"class":63},[40,37360,34766],{"class":50},[40,37362,37363,37366,37368,37370],{"class":42,"line":238},[40,37364,37365],{"class":8539},"                                    num_workers",[40,37367,1284],{"class":1283},[40,37369,3672],{"class":63},[40,37371,1811],{"class":50},[40,37373,37374,37376],{"class":42,"line":251},[40,37375,7413],{"class":1283},[40,37377,37378],{"class":50}," test_dataloader\n",[40,37380,37381],{"class":42,"line":264},[40,37382,1413],{"emptyLinePlaceholder":1412},[40,37384,37385],{"class":42,"line":277},[40,37386,37387],{"class":997},"# 定义模型测试函数\n",[40,37389,37390,37392,37395],{"class":42,"line":290},[40,37391,35247],{"class":1283},[40,37393,37394],{"class":596}," test_model_process",[40,37396,37397],{"class":50},"(model,test_dataloader):\n",[40,37399,37400],{"class":42,"line":298},[40,37401,37402],{"class":997},"    # 将模型放到设备当中，先进行判断\n",[40,37404,37405,37407,37409,37411,37413,37415,37417],{"class":42,"line":310},[40,37406,34537],{"class":50},[40,37408,1284],{"class":1283},[40,37410,34544],{"class":94},[40,37412,5035],{"class":1283},[40,37414,34549],{"class":50},[40,37416,5032],{"class":1283},[40,37418,37419],{"class":94}," \"cpu\"\n",[40,37421,37422,37424,37426],{"class":42,"line":5086},[40,37423,34589],{"class":50},[40,37425,1284],{"class":1283},[40,37427,35589],{"class":50},[40,37429,37430],{"class":42,"line":5091},[40,37431,1413],{"emptyLinePlaceholder":1412},[40,37433,37434],{"class":42,"line":5105},[40,37435,37436],{"class":997},"    # 设置初始化参数\n",[40,37438,37439,37442,37444],{"class":42,"line":5110},[40,37440,37441],{"class":50},"    test_corrects",[40,37443,1284],{"class":1283},[40,37445,35642],{"class":63},[40,37447,37448,37451,37453],{"class":42,"line":5902},[40,37449,37450],{"class":50},"    test_num",[40,37452,1284],{"class":1283},[40,37454,6409],{"class":63},[40,37456,37457],{"class":42,"line":5916},[40,37458,1413],{"emptyLinePlaceholder":1412},[40,37460,37461],{"class":42,"line":5924},[40,37462,37463],{"class":997},"    # 进行模型测试\n",[40,37465,37466],{"class":42,"line":5929},[40,37467,37468],{"class":997},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[40,37470,37471],{"class":42,"line":5935},[40,37472,37473],{"class":997},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[40,37475,37476,37479],{"class":42,"line":5941},[40,37477,37478],{"class":1283},"    with",[40,37480,36184],{"class":50},[40,37482,37483],{"class":42,"line":5946},[40,37484,37485],{"class":997},"        # 从数据中进行\n",[40,37487,37488,37490,37493,37495],{"class":42,"line":11270},[40,37489,6727],{"class":1283},[40,37491,37492],{"class":50}," test_data_x,test_data_y ",[40,37494,29355],{"class":1283},[40,37496,37497],{"class":50}," test_dataloader:\n",[40,37499,37500,37503,37505],{"class":42,"line":11294},[40,37501,37502],{"class":50},"            test_data_x",[40,37504,1284],{"class":1283},[40,37506,37507],{"class":50},"test_data_x.to(device)\n",[40,37509,37510,37513,37515],{"class":42,"line":11299},[40,37511,37512],{"class":50},"            test_data_y",[40,37514,1284],{"class":1283},[40,37516,37517],{"class":50},"test_data_y.to(device)\n",[40,37519,37520],{"class":42,"line":11305},[40,37521,37522],{"class":997},"            # 设置为验证模式\n",[40,37524,37525],{"class":42,"line":11332},[40,37526,36175],{"class":50},[40,37528,37529],{"class":42,"line":11337},[40,37530,37531],{"class":997},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[40,37533,37534,37536,37538],{"class":42,"line":11343},[40,37535,35960],{"class":50},[40,37537,1284],{"class":1283},[40,37539,37540],{"class":50},"model(test_data_x)\n",[40,37542,37543],{"class":42,"line":11355},[40,37544,37545],{"class":997},"            # 查找每一行中最大值对应的下标\n",[40,37547,37548,37550,37552,37554,37556,37558,37560],{"class":42,"line":11367},[40,37549,35977],{"class":50},[40,37551,1284],{"class":1283},[40,37553,35982],{"class":50},[40,37555,35985],{"class":8539},[40,37557,1284],{"class":1283},[40,37559,3698],{"class":63},[40,37561,1811],{"class":50},[40,37563,37564],{"class":42,"line":11379},[40,37565,37566],{"class":997},"            # 计算正确率\n",[40,37568,37569],{"class":42,"line":13038},[40,37570,37571],{"class":997},"            # .data表示是一个不带梯度信息的tensor\n",[40,37573,37574],{"class":42,"line":13063},[40,37575,37576],{"class":997},"            # 如果预测正确，则准确度test_corrects加1\n",[40,37578,37579,37582,37584,37586,37588],{"class":42,"line":13086},[40,37580,37581],{"class":50},"            test_corrects",[40,37583,12799],{"class":1283},[40,37585,36087],{"class":50},[40,37587,6273],{"class":1283},[40,37589,37590],{"class":50},"test_data_y.data)\n",[40,37592,37593],{"class":42,"line":13110},[40,37594,37595],{"class":997},"            # 将所有的测试样本进行累计\n",[40,37597,37598,37601,37603,37606,37608],{"class":42,"line":13115},[40,37599,37600],{"class":50},"            test_num",[40,37602,12799],{"class":1283},[40,37604,37605],{"class":50},"test_data_x.size(",[40,37607,3672],{"class":63},[40,37609,1811],{"class":50},[40,37611,37612],{"class":42,"line":13120},[40,37613,1413],{"emptyLinePlaceholder":1412},[40,37615,37616],{"class":42,"line":13125},[40,37617,37618],{"class":997},"        # 计算准确度\n",[40,37620,37621,37624,37626,37629,37631],{"class":42,"line":13134},[40,37622,37623],{"class":50},"        test_acc",[40,37625,1284],{"class":1283},[40,37627,37628],{"class":50},"test_corrects.double().item()",[40,37630,4063],{"class":1283},[40,37632,37633],{"class":50},"test_num\n",[40,37635,37636],{"class":42,"line":13139},[40,37637,37638],{"class":997},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[40,37640,37641,37643,37645,37648],{"class":42,"line":13145},[40,37642,35751],{"class":63},[40,37644,3488],{"class":50},[40,37646,37647],{"class":94},"\"测试的准确率：\"",[40,37649,37650],{"class":50},",test_acc)\n",[40,37652,37653],{"class":42,"line":13166},[40,37654,1413],{"emptyLinePlaceholder":1412},[40,37656,37657],{"class":42,"line":13172},[40,37658,37659],{"class":997},"# 实现模型的测试功能\n",[40,37661,37662,37664,37666,37668,37670],{"class":42,"line":13186},[40,37663,4873],{"class":1283},[40,37665,34520],{"class":63},[40,37667,6273],{"class":1283},[40,37669,34525],{"class":94},[40,37671,332],{"class":50},[40,37673,37674],{"class":42,"line":13192},[40,37675,37676],{"class":997},"    # 加载模型\n",[40,37678,37679,37681,37683],{"class":42,"line":13219},[40,37680,34589],{"class":50},[40,37682,1284],{"class":1283},[40,37684,37125],{"class":50},[40,37686,37687],{"class":42,"line":13228},[40,37688,37689],{"class":997},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[40,37691,37692],{"class":42,"line":13234},[40,37693,37694],{"class":997},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[40,37696,37697,37700,37703],{"class":42,"line":13242},[40,37698,37699],{"class":50},"    model.load_state_dict(torch.load(",[40,37701,37702],{"class":94},"'best_model.pth'",[40,37704,33797],{"class":50},[40,37706,37707],{"class":42,"line":13247},[40,37708,37709],{"class":997},"    # 数据加载\n",[40,37711,37712,37714,37716],{"class":42,"line":19926},[40,37713,37322],{"class":50},[40,37715,1284],{"class":1283},[40,37717,37718],{"class":50},"test_data_process()\n",[40,37720,37721],{"class":42,"line":19932},[40,37722,37723],{"class":997},"    # 加载模型测试的函数\n",[40,37725,37726],{"class":42,"line":19955},[40,37727,37728],{"class":50},"    test_model_process(model,test_dataloader)\n",[40,37730,37731],{"class":42,"line":19961},[40,37732,1413],{"emptyLinePlaceholder":1412},[40,37734,37735],{"class":42,"line":19984},[40,37736,37737],{"class":997},"    # 验证集推理实现：\n",[40,37739,37740],{"class":42,"line":19998},[40,37741,37742],{"class":997},"    # 加载数据加载的更详细一些\n",[40,37744,37745,37747,37749,37751,37753,37755,37757],{"class":42,"line":20018},[40,37746,34537],{"class":50},[40,37748,1284],{"class":1283},[40,37750,34544],{"class":94},[40,37752,5035],{"class":1283},[40,37754,34549],{"class":50},[40,37756,5032],{"class":1283},[40,37758,37419],{"class":94},[40,37760,37761,37763,37765],{"class":42,"line":20024},[40,37762,34589],{"class":50},[40,37764,1284],{"class":1283},[40,37766,35589],{"class":50},[40,37768,37769],{"class":42,"line":20035},[40,37770,37771],{"class":997},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[40,37773,37774],{"class":42,"line":20058},[40,37775,37776],{"class":997},"    # 顺序不可改变\n",[40,37778,37779,37782,37784,37786,37789,37791,37794,37796,37799,37801,37804,37806,37809,37811,37814,37816,37819,37821,37824,37826,37829,37831,37834],{"class":42,"line":20080},[40,37780,37781],{"class":50},"    classes",[40,37783,1284],{"class":1283},[40,37785,4367],{"class":50},[40,37787,37788],{"class":94},"'T-shirt\u002Ftop'",[40,37790,1299],{"class":50},[40,37792,37793],{"class":94},"'Trouser'",[40,37795,1299],{"class":50},[40,37797,37798],{"class":94},"'Pullover'",[40,37800,1299],{"class":50},[40,37802,37803],{"class":94},"'Dress'",[40,37805,1299],{"class":50},[40,37807,37808],{"class":94},"'Coat'",[40,37810,1299],{"class":50},[40,37812,37813],{"class":94},"'Sandal'",[40,37815,1299],{"class":50},[40,37817,37818],{"class":94},"'Shirt'",[40,37820,1299],{"class":50},[40,37822,37823],{"class":94},"'Sneaker'",[40,37825,1299],{"class":50},[40,37827,37828],{"class":94},"'Bag'",[40,37830,1299],{"class":50},[40,37832,37833],{"class":94},"'Ankle boot'",[40,37835,36546],{"class":50},[40,37837,37838,37840],{"class":42,"line":20085},[40,37839,37478],{"class":1283},[40,37841,36184],{"class":50},[40,37843,37844],{"class":42,"line":20091},[40,37845,37846],{"class":997},"        # 将数据和标签都放到设备当中\n",[40,37848,37849,37851,37854,37856],{"class":42,"line":20105},[40,37850,6727],{"class":1283},[40,37852,37853],{"class":50}," b_x,b_y ",[40,37855,29355],{"class":1283},[40,37857,37497],{"class":50},[40,37859,37860,37862,37864],{"class":42,"line":20118},[40,37861,35910],{"class":50},[40,37863,1284],{"class":1283},[40,37865,35915],{"class":50},[40,37867,37868,37870,37872],{"class":42,"line":20123},[40,37869,35925],{"class":50},[40,37871,1284],{"class":1283},[40,37873,35930],{"class":50},[40,37875,37876],{"class":42,"line":20137},[40,37877,1413],{"emptyLinePlaceholder":1412},[40,37879,37880],{"class":42,"line":20142},[40,37881,37882],{"class":997},"            # 设置模型为验证模式\n",[40,37884,37885],{"class":42,"line":20148},[40,37886,36175],{"class":50},[40,37888,37889],{"class":42,"line":20153},[40,37890,37891],{"class":997},"            # 模型推理结果\n",[40,37893,37894,37896,37898],{"class":42,"line":20167},[40,37895,35960],{"class":50},[40,37897,1284],{"class":1283},[40,37899,35965],{"class":50},[40,37901,37902],{"class":42,"line":20172},[40,37903,37904],{"class":997},"            # 获取最大下标，最大下标就是类别号\n",[40,37906,37907,37909,37911,37913,37915,37917,37919],{"class":42,"line":20177},[40,37908,35977],{"class":50},[40,37910,1284],{"class":1283},[40,37912,35982],{"class":50},[40,37914,35985],{"class":8539},[40,37916,1284],{"class":1283},[40,37918,3698],{"class":63},[40,37920,1811],{"class":50},[40,37922,37923],{"class":42,"line":20191},[40,37924,37925],{"class":997},"            # 取出张量中的数值\n",[40,37927,37928,37931,37933],{"class":42,"line":20203},[40,37929,37930],{"class":50},"            result",[40,37932,1284],{"class":1283},[40,37934,37935],{"class":50},"pre_lab.item()\n",[40,37937,37938,37941,37943],{"class":42,"line":20208},[40,37939,37940],{"class":50},"            label",[40,37942,1284],{"class":1283},[40,37944,37945],{"class":50},"b_y.item()\n",[40,37947,37948,37951,37953,37956,37959,37962,37964,37967],{"class":42,"line":20221},[40,37949,37950],{"class":63},"            print",[40,37952,3488],{"class":50},[40,37954,37955],{"class":94},"\"预测值：\"",[40,37957,37958],{"class":50},",classes[result],",[40,37960,37961],{"class":94},"\"------\"",[40,37963,1299],{"class":50},[40,37965,37966],{"class":94},"\"真实值：\"",[40,37968,37969],{"class":50},",classes[label])\n",[19,37971,37972],{},"（2）AlexNet",[492,37974,37975],{},[495,37976,37977],{},"神经网络构建",[31,37979,37981],{"className":33679,"code":37980,"language":2323,"meta":36,"style":36},"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",[26,37982,37983,37989,37999,38009,38021,38025,38042,38050,38065,38077,38119,38146,38189,38215,38259,38302,38345,38372,38376,38386,38391,38419,38438,38457,38461,38466,38474,38489,38499,38513,38523,38538,38553,38568,38579,38583,38588,38598,38613,38618,38632,38647,38659,38664,38675,38680,38686,38691,38703,38723,38728,38737],{"__ignoreMap":36},[40,37984,37985,37987],{"class":42,"line":43},[40,37986,33692],{"class":1283},[40,37988,33695],{"class":50},[40,37990,37991,37993,37995,37997],{"class":42,"line":54},[40,37992,34037],{"class":1283},[40,37994,34040],{"class":50},[40,37996,33692],{"class":1283},[40,37998,34045],{"class":50},[40,38000,38001,38003,38005,38007],{"class":42,"line":70},[40,38002,34037],{"class":1283},[40,38004,34057],{"class":50},[40,38006,33692],{"class":1283},[40,38008,34062],{"class":50},[40,38010,38011,38013,38016,38018],{"class":42,"line":78},[40,38012,33692],{"class":1283},[40,38014,38015],{"class":50}," torch.nn.functional ",[40,38017,34683],{"class":1283},[40,38019,38020],{"class":50}," F\n",[40,38022,38023],{"class":42,"line":86},[40,38024,1413],{"emptyLinePlaceholder":1412},[40,38026,38027,38029,38032,38034,38036,38038,38040],{"class":42,"line":100},[40,38028,18016],{"class":1283},[40,38030,38031],{"class":596}," AlexNet",[40,38033,3488],{"class":50},[40,38035,34078],{"class":596},[40,38037,4037],{"class":50},[40,38039,34083],{"class":596},[40,38041,34086],{"class":50},[40,38043,38044,38046,38048],{"class":42,"line":108},[40,38045,34101],{"class":1283},[40,38047,34104],{"class":63},[40,38049,34107],{"class":50},[40,38051,38052,38054,38057,38059,38061,38063],{"class":42,"line":121},[40,38053,34117],{"class":63},[40,38055,38056],{"class":50},"(AlexNet,",[40,38058,34123],{"class":63},[40,38060,34126],{"class":50},[40,38062,34129],{"class":63},[40,38064,5302],{"class":50},[40,38066,38067,38069,38072,38074],{"class":42,"line":134},[40,38068,34145],{"class":63},[40,38070,38071],{"class":50},".ReLu",[40,38073,1284],{"class":1283},[40,38075,38076],{"class":50},"nn.ReLU()\n",[40,38078,38079,38081,38083,38085,38087,38089,38091,38093,38095,38097,38099,38101,38103,38105,38107,38109,38111,38113,38115,38117],{"class":42,"line":146},[40,38080,34145],{"class":63},[40,38082,34148],{"class":50},[40,38084,1284],{"class":1283},[40,38086,34153],{"class":50},[40,38088,34156],{"class":8539},[40,38090,1284],{"class":1283},[40,38092,3698],{"class":63},[40,38094,1299],{"class":50},[40,38096,34165],{"class":8539},[40,38098,1284],{"class":1283},[40,38100,3690],{"class":63},[40,38102,1299],{"class":50},[40,38104,34174],{"class":8539},[40,38106,1284],{"class":1283},[40,38108,3951],{"class":63},[40,38110,1299],{"class":50},[40,38112,34229],{"class":8539},[40,38114,1284],{"class":1283},[40,38116,3773],{"class":63},[40,38118,1811],{"class":50},[40,38120,38121,38123,38125,38127,38130,38132,38134,38136,38138,38140,38142,38144],{"class":42,"line":154},[40,38122,34145],{"class":63},[40,38124,34213],{"class":50},[40,38126,1284],{"class":1283},[40,38128,38129],{"class":50},"nn.MaxPool2d(",[40,38131,34174],{"class":8539},[40,38133,1284],{"class":1283},[40,38135,3555],{"class":63},[40,38137,1299],{"class":50},[40,38139,34229],{"class":8539},[40,38141,1284],{"class":1283},[40,38143,64],{"class":63},[40,38145,1811],{"class":50},[40,38147,38148,38150,38152,38154,38156,38158,38160,38162,38164,38166,38168,38171,38173,38175,38177,38179,38181,38183,38185,38187],{"class":42,"line":162},[40,38149,34145],{"class":63},[40,38151,34242],{"class":50},[40,38153,1284],{"class":1283},[40,38155,34153],{"class":50},[40,38157,34156],{"class":8539},[40,38159,1284],{"class":1283},[40,38161,3690],{"class":63},[40,38163,1299],{"class":50},[40,38165,34165],{"class":8539},[40,38167,1284],{"class":1283},[40,38169,38170],{"class":63},"256",[40,38172,1299],{"class":50},[40,38174,34174],{"class":8539},[40,38176,1284],{"class":1283},[40,38178,3799],{"class":63},[40,38180,1299],{"class":50},[40,38182,34183],{"class":8539},[40,38184,1284],{"class":1283},[40,38186,64],{"class":63},[40,38188,1811],{"class":50},[40,38190,38191,38193,38195,38197,38199,38201,38203,38205,38207,38209,38211,38213],{"class":42,"line":170},[40,38192,34145],{"class":63},[40,38194,34277],{"class":50},[40,38196,1284],{"class":1283},[40,38198,38129],{"class":50},[40,38200,34174],{"class":8539},[40,38202,1284],{"class":1283},[40,38204,3555],{"class":63},[40,38206,1299],{"class":50},[40,38208,34229],{"class":8539},[40,38210,1284],{"class":1283},[40,38212,64],{"class":63},[40,38214,1811],{"class":50},[40,38216,38217,38219,38222,38224,38226,38228,38230,38232,38234,38236,38238,38241,38243,38245,38247,38249,38251,38253,38255,38257],{"class":42,"line":183},[40,38218,34145],{"class":63},[40,38220,38221],{"class":50},".c5",[40,38223,1284],{"class":1283},[40,38225,34153],{"class":50},[40,38227,34156],{"class":8539},[40,38229,1284],{"class":1283},[40,38231,38170],{"class":63},[40,38233,1299],{"class":50},[40,38235,34165],{"class":8539},[40,38237,1284],{"class":1283},[40,38239,38240],{"class":63},"384",[40,38242,1299],{"class":50},[40,38244,34174],{"class":8539},[40,38246,1284],{"class":1283},[40,38248,3555],{"class":63},[40,38250,1299],{"class":50},[40,38252,34183],{"class":8539},[40,38254,1284],{"class":1283},[40,38256,3698],{"class":63},[40,38258,1811],{"class":50},[40,38260,38261,38263,38266,38268,38270,38272,38274,38276,38278,38280,38282,38284,38286,38288,38290,38292,38294,38296,38298,38300],{"class":42,"line":196},[40,38262,34145],{"class":63},[40,38264,38265],{"class":50},".c6",[40,38267,1284],{"class":1283},[40,38269,34153],{"class":50},[40,38271,34156],{"class":8539},[40,38273,1284],{"class":1283},[40,38275,38240],{"class":63},[40,38277,1299],{"class":50},[40,38279,34165],{"class":8539},[40,38281,1284],{"class":1283},[40,38283,38240],{"class":63},[40,38285,1299],{"class":50},[40,38287,34174],{"class":8539},[40,38289,1284],{"class":1283},[40,38291,3555],{"class":63},[40,38293,1299],{"class":50},[40,38295,34183],{"class":8539},[40,38297,1284],{"class":1283},[40,38299,3698],{"class":63},[40,38301,1811],{"class":50},[40,38303,38304,38306,38309,38311,38313,38315,38317,38319,38321,38323,38325,38327,38329,38331,38333,38335,38337,38339,38341,38343],{"class":42,"line":204},[40,38305,34145],{"class":63},[40,38307,38308],{"class":50},".c7",[40,38310,1284],{"class":1283},[40,38312,34153],{"class":50},[40,38314,34156],{"class":8539},[40,38316,1284],{"class":1283},[40,38318,38240],{"class":63},[40,38320,1299],{"class":50},[40,38322,34165],{"class":8539},[40,38324,1284],{"class":1283},[40,38326,38170],{"class":63},[40,38328,1299],{"class":50},[40,38330,34174],{"class":8539},[40,38332,1284],{"class":1283},[40,38334,3555],{"class":63},[40,38336,1299],{"class":50},[40,38338,34183],{"class":8539},[40,38340,1284],{"class":1283},[40,38342,3698],{"class":63},[40,38344,1811],{"class":50},[40,38346,38347,38349,38352,38354,38356,38358,38360,38362,38364,38366,38368,38370],{"class":42,"line":217},[40,38348,34145],{"class":63},[40,38350,38351],{"class":50},".s8",[40,38353,1284],{"class":1283},[40,38355,38129],{"class":50},[40,38357,34174],{"class":8539},[40,38359,1284],{"class":1283},[40,38361,3555],{"class":63},[40,38363,1299],{"class":50},[40,38365,34229],{"class":8539},[40,38367,1284],{"class":1283},[40,38369,64],{"class":63},[40,38371,1811],{"class":50},[40,38373,38374],{"class":42,"line":230},[40,38375,34302],{"class":997},[40,38377,38378,38380,38382,38384],{"class":42,"line":238},[40,38379,34145],{"class":63},[40,38381,34309],{"class":50},[40,38383,1284],{"class":1283},[40,38385,34314],{"class":50},[40,38387,38388],{"class":42,"line":251},[40,38389,38390],{"class":997},"       # 定义全连接层\n",[40,38392,38393,38395,38398,38400,38402,38404,38406,38408,38410,38412,38414,38417],{"class":42,"line":264},[40,38394,34145],{"class":63},[40,38396,38397],{"class":50},".f1",[40,38399,1284],{"class":1283},[40,38401,34331],{"class":50},[40,38403,3824],{"class":63},[40,38405,3934],{"class":1283},[40,38407,3824],{"class":63},[40,38409,3934],{"class":1283},[40,38411,38170],{"class":63},[40,38413,1299],{"class":50},[40,38415,38416],{"class":63},"4096",[40,38418,1811],{"class":50},[40,38420,38421,38423,38426,38428,38430,38432,38434,38436],{"class":42,"line":277},[40,38422,34145],{"class":63},[40,38424,38425],{"class":50},".f2",[40,38427,1284],{"class":1283},[40,38429,34331],{"class":50},[40,38431,38416],{"class":63},[40,38433,1299],{"class":50},[40,38435,38416],{"class":63},[40,38437,1811],{"class":50},[40,38439,38440,38442,38445,38447,38449,38451,38453,38455],{"class":42,"line":290},[40,38441,34145],{"class":63},[40,38443,38444],{"class":50},".f3",[40,38446,1284],{"class":1283},[40,38448,34331],{"class":50},[40,38450,38416],{"class":63},[40,38452,1299],{"class":50},[40,38454,3925],{"class":63},[40,38456,1811],{"class":50},[40,38458,38459],{"class":42,"line":298},[40,38460,1413],{"emptyLinePlaceholder":1412},[40,38462,38463],{"class":42,"line":310},[40,38464,38465],{"class":997},"    # 定义前向传播\n",[40,38467,38468,38470,38472],{"class":42,"line":5086},[40,38469,34101],{"class":1283},[40,38471,34393],{"class":596},[40,38473,34396],{"class":50},[40,38475,38476,38478,38480,38482,38485,38487],{"class":42,"line":5091},[40,38477,34401],{"class":50},[40,38479,1284],{"class":1283},[40,38481,34123],{"class":63},[40,38483,38484],{"class":50},".ReLu(",[40,38486,34123],{"class":63},[40,38488,34413],{"class":50},[40,38490,38491,38493,38495,38497],{"class":42,"line":5105},[40,38492,34401],{"class":50},[40,38494,1284],{"class":1283},[40,38496,34123],{"class":63},[40,38498,34424],{"class":50},[40,38500,38501,38503,38505,38507,38509,38511],{"class":42,"line":5110},[40,38502,34401],{"class":50},[40,38504,1284],{"class":1283},[40,38506,34123],{"class":63},[40,38508,38484],{"class":50},[40,38510,34123],{"class":63},[40,38512,34439],{"class":50},[40,38514,38515,38517,38519,38521],{"class":42,"line":5902},[40,38516,34401],{"class":50},[40,38518,1284],{"class":1283},[40,38520,34123],{"class":63},[40,38522,34450],{"class":50},[40,38524,38525,38527,38529,38531,38533,38535],{"class":42,"line":5916},[40,38526,34401],{"class":50},[40,38528,1284],{"class":1283},[40,38530,34123],{"class":63},[40,38532,38484],{"class":50},[40,38534,34123],{"class":63},[40,38536,38537],{"class":50},".c5(x))\n",[40,38539,38540,38542,38544,38546,38548,38550],{"class":42,"line":5924},[40,38541,34401],{"class":50},[40,38543,1284],{"class":1283},[40,38545,34123],{"class":63},[40,38547,38484],{"class":50},[40,38549,34123],{"class":63},[40,38551,38552],{"class":50},".c6(x))\n",[40,38554,38555,38557,38559,38561,38563,38565],{"class":42,"line":5929},[40,38556,34401],{"class":50},[40,38558,1284],{"class":1283},[40,38560,34123],{"class":63},[40,38562,38484],{"class":50},[40,38564,34123],{"class":63},[40,38566,38567],{"class":50},".c7(x))\n",[40,38569,38570,38572,38574,38576],{"class":42,"line":5935},[40,38571,34401],{"class":50},[40,38573,1284],{"class":1283},[40,38575,34123],{"class":63},[40,38577,38578],{"class":50},".s8(x)\n",[40,38580,38581],{"class":42,"line":5941},[40,38582,1413],{"emptyLinePlaceholder":1412},[40,38584,38585],{"class":42,"line":5946},[40,38586,38587],{"class":997},"        # 展平加线性全连接层\n",[40,38589,38590,38592,38594,38596],{"class":42,"line":11270},[40,38591,34401],{"class":50},[40,38593,1284],{"class":1283},[40,38595,34123],{"class":63},[40,38597,34461],{"class":50},[40,38599,38600,38602,38604,38606,38608,38610],{"class":42,"line":11294},[40,38601,34401],{"class":50},[40,38603,1284],{"class":1283},[40,38605,34123],{"class":63},[40,38607,38484],{"class":50},[40,38609,34123],{"class":63},[40,38611,38612],{"class":50},".f1(x))\n",[40,38614,38615],{"class":42,"line":11299},[40,38616,38617],{"class":997},"        # 还需要dropout对神经元随机进行失活\n",[40,38619,38620,38622,38624,38627,38630],{"class":42,"line":11305},[40,38621,34401],{"class":50},[40,38623,1284],{"class":1283},[40,38625,38626],{"class":50},"F.dropout(x,",[40,38628,38629],{"class":63},"0.5",[40,38631,1811],{"class":50},[40,38633,38634,38636,38638,38640,38642,38644],{"class":42,"line":11332},[40,38635,34401],{"class":50},[40,38637,1284],{"class":1283},[40,38639,34123],{"class":63},[40,38641,38484],{"class":50},[40,38643,34123],{"class":63},[40,38645,38646],{"class":50},".f2(x))\n",[40,38648,38649,38651,38653,38655,38657],{"class":42,"line":11337},[40,38650,34401],{"class":50},[40,38652,1284],{"class":1283},[40,38654,38626],{"class":50},[40,38656,38629],{"class":63},[40,38658,1811],{"class":50},[40,38660,38661],{"class":42,"line":11343},[40,38662,38663],{"class":997},"        # 直接输出\n",[40,38665,38666,38668,38670,38672],{"class":42,"line":11355},[40,38667,34401],{"class":50},[40,38669,1284],{"class":1283},[40,38671,34123],{"class":63},[40,38673,38674],{"class":50},".f3(x)\n",[40,38676,38677],{"class":42,"line":11367},[40,38678,38679],{"class":997},"        # 前向传播输出\n",[40,38681,38682,38684],{"class":42,"line":11379},[40,38683,18074],{"class":1283},[40,38685,34509],{"class":50},[40,38687,38688],{"class":42,"line":13038},[40,38689,38690],{"class":997},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[40,38692,38693,38695,38697,38699,38701],{"class":42,"line":13063},[40,38694,4873],{"class":1283},[40,38696,34520],{"class":63},[40,38698,6273],{"class":1283},[40,38700,34525],{"class":94},[40,38702,332],{"class":50},[40,38704,38705,38707,38709,38711,38713,38715,38717,38719,38721],{"class":42,"line":13086},[40,38706,34537],{"class":50},[40,38708,1284],{"class":1283},[40,38710,33751],{"class":50},[40,38712,34544],{"class":94},[40,38714,5035],{"class":1283},[40,38716,34549],{"class":50},[40,38718,5032],{"class":1283},[40,38720,33776],{"class":94},[40,38722,1811],{"class":50},[40,38724,38725],{"class":42,"line":13110},[40,38726,38727],{"class":997},"    # 模型实例化，然后将实例化的模型放到设备中\n",[40,38729,38730,38732,38734],{"class":42,"line":13115},[40,38731,34589],{"class":50},[40,38733,1284],{"class":1283},[40,38735,38736],{"class":50},"AlexNet().to(device)\n",[40,38738,38739,38741,38743,38745,38747,38750,38752,38754],{"class":42,"line":13120},[40,38740,34599],{"class":63},[40,38742,34602],{"class":50},[40,38744,3698],{"class":63},[40,38746,1299],{"class":50},[40,38748,38749],{"class":63},"227",[40,38751,1299],{"class":50},[40,38753,38749],{"class":63},[40,38755,34615],{"class":50},[492,38757,38758],{"start":54},[495,38759,34628],{},[31,38761,38763],{"className":33679,"code":38762,"language":2323,"meta":36,"style":36},"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",[26,38764,38765,38771,38777,38787,38793,38803,38813,38823,38833,38843,38847,38858,38868,38872,38876,38880,38888,38900,38910,38926,38936,38968,38982,38992,39002,39006,39016,39030,39040,39050,39060,39066,39070,39074,39078,39082,39086,39094,39114,39118,39122,39126,39130,39134,39150,39154,39158,39166,39170,39174,39182,39186,39190,39194,39202,39206,39210,39214,39218,39226,39230,39238,39242,39250,39254,39262,39266,39274,39278,39282,39290,39294,39298,39302,39314,39338,39352,39356,39360,39364,39372,39376,39384,39388,39396,39400,39408,39412,39420,39424,39432,39436,39448,39452,39460,39464,39472,39476,39480,39484,39488,39496,39500,39516,39520,39528,39532,39536,39540,39544,39548,39552,39556,39572,39576,39588,39592,39604,39608,39620,39624,39632,39636,39644,39648,39652,39657,39663,39667,39676,39680,39697,39701,39710,39714,39732,39745,39750,39763,39767,39771,39779,39783,39787,39795,39799,39807,39811,39819,39823,39827,39869,39911,39915,39919,39935,39939,39955,39959,39963,39971,39975,39979,39991,40029,40034,40039,40048,40052,40066,40076,40082,40088,40094,40100,40104,40108,40114,40118,40122,40130,40134,40152,40156,40160,40164,40180,40184,40188,40192,40196,40200,40220,40240,40244,40248,40252,40260,40268,40272,40288,40308,40328,40332,40336,40344,40352,40356,40360,40364,40376,40380,40390,40398,40415],{"__ignoreMap":36},[40,38766,38767,38769],{"class":42,"line":43},[40,38768,33692],{"class":1283},[40,38770,35122],{"class":50},[40,38772,38773,38775],{"class":42,"line":54},[40,38774,33692],{"class":1283},[40,38776,35129],{"class":50},[40,38778,38779,38781,38783,38785],{"class":42,"line":70},[40,38780,33692],{"class":1283},[40,38782,35140],{"class":50},[40,38784,34683],{"class":1283},[40,38786,35145],{"class":50},[40,38788,38789,38791],{"class":42,"line":78},[40,38790,33692],{"class":1283},[40,38792,33695],{"class":50},[40,38794,38795,38797,38799,38801],{"class":42,"line":86},[40,38796,34037],{"class":1283},[40,38798,34715],{"class":50},[40,38800,33692],{"class":1283},[40,38802,35162],{"class":50},[40,38804,38805,38807,38809,38811],{"class":42,"line":100},[40,38806,34037],{"class":1283},[40,38808,34668],{"class":50},[40,38810,33692],{"class":1283},[40,38812,34673],{"class":50},[40,38814,38815,38817,38819,38821],{"class":42,"line":108},[40,38816,34037],{"class":1283},[40,38818,34698],{"class":50},[40,38820,33692],{"class":1283},[40,38822,34703],{"class":50},[40,38824,38825,38827,38829,38831],{"class":42,"line":121},[40,38826,33692],{"class":1283},[40,38828,34715],{"class":50},[40,38830,34683],{"class":1283},[40,38832,34720],{"class":50},[40,38834,38835,38837,38839,38841],{"class":42,"line":134},[40,38836,33692],{"class":1283},[40,38838,34732],{"class":50},[40,38840,34683],{"class":1283},[40,38842,34737],{"class":50},[40,38844,38845],{"class":42,"line":146},[40,38846,35207],{"class":997},[40,38848,38849,38851,38853,38855],{"class":42,"line":154},[40,38850,34037],{"class":1283},[40,38852,35214],{"class":50},[40,38854,33692],{"class":1283},[40,38856,38857],{"class":50}," AlexNet\n",[40,38859,38860,38862,38864,38866],{"class":42,"line":162},[40,38861,34037],{"class":1283},[40,38863,34040],{"class":50},[40,38865,33692],{"class":1283},[40,38867,34045],{"class":50},[40,38869,38870],{"class":42,"line":170},[40,38871,1413],{"emptyLinePlaceholder":1412},[40,38873,38874],{"class":42,"line":183},[40,38875,1413],{"emptyLinePlaceholder":1412},[40,38877,38878],{"class":42,"line":196},[40,38879,35242],{"class":997},[40,38881,38882,38884,38886],{"class":42,"line":204},[40,38883,35247],{"class":1283},[40,38885,35250],{"class":596},[40,38887,35253],{"class":50},[40,38889,38890,38892,38894,38896,38898],{"class":42,"line":217},[40,38891,35258],{"class":50},[40,38893,1284],{"class":1283},[40,38895,34755],{"class":50},[40,38897,34763],{"class":94},[40,38899,34766],{"class":50},[40,38901,38902,38904,38906,38908],{"class":42,"line":230},[40,38903,35271],{"class":8539},[40,38905,1284],{"class":1283},[40,38907,34776],{"class":63},[40,38909,34766],{"class":50},[40,38911,38912,38914,38916,38918,38920,38922,38924],{"class":42,"line":238},[40,38913,35282],{"class":8539},[40,38915,1284],{"class":1283},[40,38917,34793],{"class":50},[40,38919,34796],{"class":8539},[40,38921,1284],{"class":1283},[40,38923,38749],{"class":63},[40,38925,34804],{"class":50},[40,38927,38928,38930,38932,38934],{"class":42,"line":251},[40,38929,35299],{"class":8539},[40,38931,1284],{"class":1283},[40,38933,34776],{"class":63},[40,38935,1811],{"class":50},[40,38937,38938,38940,38942,38944,38946,38948,38950,38952,38954,38956,38958,38960,38962,38964,38966],{"class":42,"line":264},[40,38939,35310],{"class":50},[40,38941,1284],{"class":1283},[40,38943,35315],{"class":50},[40,38945,35318],{"class":63},[40,38947,3488],{"class":50},[40,38949,35323],{"class":63},[40,38951,3934],{"class":1283},[40,38953,10681],{"class":63},[40,38955,35330],{"class":50},[40,38957,35318],{"class":63},[40,38959,3488],{"class":50},[40,38961,35337],{"class":63},[40,38963,3934],{"class":1283},[40,38965,10681],{"class":63},[40,38967,35344],{"class":50},[40,38969,38970,38972,38974,38976,38978,38980],{"class":42,"line":277},[40,38971,35349],{"class":50},[40,38973,1284],{"class":1283},[40,38975,35354],{"class":50},[40,38977,34837],{"class":8539},[40,38979,1284],{"class":1283},[40,38981,34842],{"class":50},[40,38983,38984,38986,38988,38990],{"class":42,"line":290},[40,38985,35365],{"class":8539},[40,38987,1284],{"class":1283},[40,38989,35370],{"class":63},[40,38991,34766],{"class":50},[40,38993,38994,38996,38998,39000],{"class":42,"line":298},[40,38995,35377],{"class":8539},[40,38997,1284],{"class":1283},[40,38999,34776],{"class":63},[40,39001,34766],{"class":50},[40,39003,39004],{"class":42,"line":310},[40,39005,35388],{"class":997},[40,39007,39008,39010,39012,39014],{"class":42,"line":5086},[40,39009,35393],{"class":8539},[40,39011,1284],{"class":1283},[40,39013,3874],{"class":63},[40,39015,1811],{"class":50},[40,39017,39018,39020,39022,39024,39026,39028],{"class":42,"line":5091},[40,39019,35404],{"class":50},[40,39021,1284],{"class":1283},[40,39023,34834],{"class":50},[40,39025,34837],{"class":8539},[40,39027,1284],{"class":1283},[40,39029,35415],{"class":50},[40,39031,39032,39034,39036,39038],{"class":42,"line":5105},[40,39033,35420],{"class":8539},[40,39035,1284],{"class":1283},[40,39037,35370],{"class":63},[40,39039,34766],{"class":50},[40,39041,39042,39044,39046,39048],{"class":42,"line":5110},[40,39043,35431],{"class":8539},[40,39045,1284],{"class":1283},[40,39047,34776],{"class":63},[40,39049,34766],{"class":50},[40,39051,39052,39054,39056,39058],{"class":42,"line":5902},[40,39053,35442],{"class":8539},[40,39055,1284],{"class":1283},[40,39057,3874],{"class":63},[40,39059,1811],{"class":50},[40,39061,39062,39064],{"class":42,"line":5916},[40,39063,7413],{"class":1283},[40,39065,35455],{"class":50},[40,39067,39068],{"class":42,"line":5924},[40,39069,1413],{"emptyLinePlaceholder":1412},[40,39071,39072],{"class":42,"line":5929},[40,39073,35464],{"class":997},[40,39075,39076],{"class":42,"line":5935},[40,39077,35469],{"class":997},[40,39079,39080],{"class":42,"line":5941},[40,39081,1413],{"emptyLinePlaceholder":1412},[40,39083,39084],{"class":42,"line":5946},[40,39085,35478],{"class":997},[40,39087,39088,39090,39092],{"class":42,"line":11270},[40,39089,35247],{"class":1283},[40,39091,35485],{"class":596},[40,39093,35488],{"class":50},[40,39095,39096,39098,39100,39102,39104,39106,39108,39110,39112],{"class":42,"line":11294},[40,39097,34537],{"class":50},[40,39099,1284],{"class":1283},[40,39101,33751],{"class":50},[40,39103,34544],{"class":94},[40,39105,5035],{"class":1283},[40,39107,34549],{"class":50},[40,39109,5032],{"class":1283},[40,39111,35507],{"class":94},[40,39113,1811],{"class":50},[40,39115,39116],{"class":42,"line":11299},[40,39117,1413],{"emptyLinePlaceholder":1412},[40,39119,39120],{"class":42,"line":11305},[40,39121,1413],{"emptyLinePlaceholder":1412},[40,39123,39124],{"class":42,"line":11332},[40,39125,35522],{"class":997},[40,39127,39128],{"class":42,"line":11337},[40,39129,35527],{"class":997},[40,39131,39132],{"class":42,"line":11343},[40,39133,35532],{"class":997},[40,39135,39136,39138,39140,39142,39144,39146,39148],{"class":42,"line":11355},[40,39137,35537],{"class":50},[40,39139,1284],{"class":1283},[40,39141,35542],{"class":50},[40,39143,35545],{"class":8539},[40,39145,1284],{"class":1283},[40,39147,35550],{"class":63},[40,39149,1811],{"class":50},[40,39151,39152],{"class":42,"line":11367},[40,39153,1413],{"emptyLinePlaceholder":1412},[40,39155,39156],{"class":42,"line":11379},[40,39157,35561],{"class":997},[40,39159,39160,39162,39164],{"class":42,"line":13038},[40,39161,35566],{"class":50},[40,39163,1284],{"class":1283},[40,39165,35571],{"class":50},[40,39167,39168],{"class":42,"line":13063},[40,39169,1413],{"emptyLinePlaceholder":1412},[40,39171,39172],{"class":42,"line":13086},[40,39173,35580],{"class":997},[40,39175,39176,39178,39180],{"class":42,"line":13110},[40,39177,34589],{"class":50},[40,39179,1284],{"class":1283},[40,39181,35589],{"class":50},[40,39183,39184],{"class":42,"line":13115},[40,39185,35594],{"class":997},[40,39187,39188],{"class":42,"line":13120},[40,39189,35599],{"class":997},[40,39191,39192],{"class":42,"line":13125},[40,39193,35604],{"class":997},[40,39195,39196,39198,39200],{"class":42,"line":13134},[40,39197,35609],{"class":50},[40,39199,1284],{"class":1283},[40,39201,35614],{"class":50},[40,39203,39204],{"class":42,"line":13139},[40,39205,1413],{"emptyLinePlaceholder":1412},[40,39207,39208],{"class":42,"line":13145},[40,39209,1413],{"emptyLinePlaceholder":1412},[40,39211,39212],{"class":42,"line":13166},[40,39213,35627],{"class":997},[40,39215,39216],{"class":42,"line":13172},[40,39217,35632],{"class":997},[40,39219,39220,39222,39224],{"class":42,"line":13186},[40,39221,35637],{"class":50},[40,39223,1284],{"class":1283},[40,39225,35642],{"class":63},[40,39227,39228],{"class":42,"line":13192},[40,39229,35647],{"class":997},[40,39231,39232,39234,39236],{"class":42,"line":13219},[40,39233,35652],{"class":50},[40,39235,1284],{"class":1283},[40,39237,35657],{"class":50},[40,39239,39240],{"class":42,"line":13228},[40,39241,35662],{"class":997},[40,39243,39244,39246,39248],{"class":42,"line":13234},[40,39245,35667],{"class":50},[40,39247,1284],{"class":1283},[40,39249,35657],{"class":50},[40,39251,39252],{"class":42,"line":13242},[40,39253,35676],{"class":997},[40,39255,39256,39258,39260],{"class":42,"line":13247},[40,39257,35681],{"class":50},[40,39259,1284],{"class":1283},[40,39261,35657],{"class":50},[40,39263,39264],{"class":42,"line":19926},[40,39265,35690],{"class":997},[40,39267,39268,39270,39272],{"class":42,"line":19932},[40,39269,35695],{"class":50},[40,39271,1284],{"class":1283},[40,39273,35657],{"class":50},[40,39275,39276],{"class":42,"line":19955},[40,39277,1413],{"emptyLinePlaceholder":1412},[40,39279,39280],{"class":42,"line":19961},[40,39281,35708],{"class":997},[40,39283,39284,39286,39288],{"class":42,"line":19984},[40,39285,35713],{"class":50},[40,39287,1284],{"class":1283},[40,39289,35718],{"class":50},[40,39291,39292],{"class":42,"line":19998},[40,39293,1413],{"emptyLinePlaceholder":1412},[40,39295,39296],{"class":42,"line":20018},[40,39297,1413],{"emptyLinePlaceholder":1412},[40,39299,39300],{"class":42,"line":20024},[40,39301,35731],{"class":997},[40,39303,39304,39306,39308,39310,39312],{"class":42,"line":20035},[40,39305,6525],{"class":1283},[40,39307,35738],{"class":50},[40,39309,29355],{"class":1283},[40,39311,35743],{"class":63},[40,39313,35746],{"class":50},[40,39315,39316,39318,39320,39322,39324,39326,39328,39330,39332,39334,39336],{"class":42,"line":20058},[40,39317,35751],{"class":63},[40,39319,3488],{"class":50},[40,39321,35756],{"class":94},[40,39323,35759],{"class":63},[40,39325,4063],{"class":94},[40,39327,35759],{"class":63},[40,39329,3731],{"class":94},[40,39331,35768],{"class":50},[40,39333,4011],{"class":1283},[40,39335,3698],{"class":63},[40,39337,33797],{"class":50},[40,39339,39340,39342,39344,39346,39348,39350],{"class":42,"line":20080},[40,39341,35751],{"class":63},[40,39343,3488],{"class":50},[40,39345,35783],{"class":94},[40,39347,3934],{"class":1283},[40,39349,3925],{"class":63},[40,39351,1811],{"class":50},[40,39353,39354],{"class":42,"line":20085},[40,39355,1413],{"emptyLinePlaceholder":1412},[40,39357,39358],{"class":42,"line":20091},[40,39359,35798],{"class":997},[40,39361,39362],{"class":42,"line":20105},[40,39363,35803],{"class":997},[40,39365,39366,39368,39370],{"class":42,"line":20118},[40,39367,35808],{"class":50},[40,39369,1284],{"class":1283},[40,39371,35642],{"class":63},[40,39373,39374],{"class":42,"line":20123},[40,39375,35817],{"class":997},[40,39377,39378,39380,39382],{"class":42,"line":20137},[40,39379,35822],{"class":50},[40,39381,1284],{"class":1283},[40,39383,6409],{"class":63},[40,39385,39386],{"class":42,"line":20142},[40,39387,35831],{"class":997},[40,39389,39390,39392,39394],{"class":42,"line":20148},[40,39391,35836],{"class":50},[40,39393,1284],{"class":1283},[40,39395,35642],{"class":63},[40,39397,39398],{"class":42,"line":20153},[40,39399,35845],{"class":997},[40,39401,39402,39404,39406],{"class":42,"line":20167},[40,39403,35850],{"class":50},[40,39405,1284],{"class":1283},[40,39407,6409],{"class":63},[40,39409,39410],{"class":42,"line":20172},[40,39411,35859],{"class":997},[40,39413,39414,39416,39418],{"class":42,"line":20177},[40,39415,35864],{"class":50},[40,39417,1284],{"class":1283},[40,39419,6409],{"class":63},[40,39421,39422],{"class":42,"line":20191},[40,39423,35873],{"class":997},[40,39425,39426,39428,39430],{"class":42,"line":20203},[40,39427,35878],{"class":50},[40,39429,1284],{"class":1283},[40,39431,6409],{"class":63},[40,39433,39434],{"class":42,"line":20208},[40,39435,35887],{"class":997},[40,39437,39438,39440,39442,39444,39446],{"class":42,"line":20221},[40,39439,6727],{"class":1283},[40,39441,34901],{"class":50},[40,39443,29355],{"class":1283},[40,39445,34906],{"class":63},[40,39447,35900],{"class":50},[40,39449,39450],{"class":42,"line":20226},[40,39451,35905],{"class":997},[40,39453,39454,39456,39458],{"class":42,"line":20231},[40,39455,35910],{"class":50},[40,39457,1284],{"class":1283},[40,39459,35915],{"class":50},[40,39461,39462],{"class":42,"line":20236},[40,39463,35920],{"class":997},[40,39465,39466,39468,39470],{"class":42,"line":20249},[40,39467,35925],{"class":50},[40,39469,1284],{"class":1283},[40,39471,35930],{"class":50},[40,39473,39474],{"class":42,"line":20254},[40,39475,35936],{"class":997},[40,39477,39478],{"class":42,"line":35933},[40,39479,35942],{"class":50},[40,39481,39482],{"class":42,"line":35939},[40,39483,35948],{"class":997},[40,39485,39486],{"class":42,"line":35945},[40,39487,35954],{"class":997},[40,39489,39490,39492,39494],{"class":42,"line":35951},[40,39491,35960],{"class":50},[40,39493,1284],{"class":1283},[40,39495,35965],{"class":50},[40,39497,39498],{"class":42,"line":35957},[40,39499,35971],{"class":997},[40,39501,39502,39504,39506,39508,39510,39512,39514],{"class":42,"line":35968},[40,39503,35977],{"class":50},[40,39505,1284],{"class":1283},[40,39507,35982],{"class":50},[40,39509,35985],{"class":8539},[40,39511,1284],{"class":1283},[40,39513,3698],{"class":63},[40,39515,1811],{"class":50},[40,39517,39518],{"class":42,"line":35974},[40,39519,35997],{"class":997},[40,39521,39522,39524,39526],{"class":42,"line":35994},[40,39523,36003],{"class":50},[40,39525,1284],{"class":1283},[40,39527,36008],{"class":50},[40,39529,39530],{"class":42,"line":36000},[40,39531,36014],{"class":997},[40,39533,39534],{"class":42,"line":36011},[40,39535,36020],{"class":50},[40,39537,39538],{"class":42,"line":36017},[40,39539,36026],{"class":997},[40,39541,39542],{"class":42,"line":36023},[40,39543,36032],{"class":50},[40,39545,39546],{"class":42,"line":36029},[40,39547,36038],{"class":997},[40,39549,39550],{"class":42,"line":36035},[40,39551,36044],{"class":50},[40,39553,39554],{"class":42,"line":36041},[40,39555,36050],{"class":997},[40,39557,39558,39560,39562,39564,39566,39568,39570],{"class":42,"line":36047},[40,39559,36056],{"class":50},[40,39561,12799],{"class":1283},[40,39563,36061],{"class":50},[40,39565,3934],{"class":1283},[40,39567,36066],{"class":50},[40,39569,3672],{"class":63},[40,39571,1811],{"class":50},[40,39573,39574],{"class":42,"line":36053},[40,39575,36076],{"class":997},[40,39577,39578,39580,39582,39584,39586],{"class":42,"line":36073},[40,39579,36082],{"class":50},[40,39581,12799],{"class":1283},[40,39583,36087],{"class":50},[40,39585,6273],{"class":1283},[40,39587,36092],{"class":50},[40,39589,39590],{"class":42,"line":36079},[40,39591,36098],{"class":997},[40,39593,39594,39596,39598,39600,39602],{"class":42,"line":36095},[40,39595,36104],{"class":50},[40,39597,12799],{"class":1283},[40,39599,36066],{"class":50},[40,39601,3672],{"class":63},[40,39603,1811],{"class":50},[40,39605,39606],{"class":42,"line":36101},[40,39607,36118],{"class":997},[40,39609,39610,39612,39614,39616,39618],{"class":42,"line":36115},[40,39611,6727],{"class":1283},[40,39613,36126],{"class":50},[40,39615,29355],{"class":1283},[40,39617,34906],{"class":63},[40,39619,36133],{"class":50},[40,39621,39622],{"class":42,"line":36121},[40,39623,36139],{"class":997},[40,39625,39626,39628,39630],{"class":42,"line":36136},[40,39627,35910],{"class":50},[40,39629,1284],{"class":1283},[40,39631,35915],{"class":50},[40,39633,39634],{"class":42,"line":36142},[40,39635,36154],{"class":997},[40,39637,39638,39640,39642],{"class":42,"line":36151},[40,39639,35925],{"class":50},[40,39641,1284],{"class":1283},[40,39643,35930],{"class":50},[40,39645,39646],{"class":42,"line":36157},[40,39647,36169],{"class":997},[40,39649,39650],{"class":42,"line":36166},[40,39651,36175],{"class":50},[40,39653,39654],{"class":42,"line":36172},[40,39655,39656],{"class":997},"            # 验证时不计算梯度以节省内存\u002F计算\n",[40,39658,39659,39661],{"class":42,"line":36178},[40,39660,36181],{"class":1283},[40,39662,36184],{"class":50},[40,39664,39665],{"class":42,"line":36187},[40,39666,36190],{"class":997},[40,39668,39669,39672,39674],{"class":42,"line":36193},[40,39670,39671],{"class":50},"                output",[40,39673,1284],{"class":1283},[40,39675,35965],{"class":50},[40,39677,39678],{"class":42,"line":36204},[40,39679,36207],{"class":997},[40,39681,39682,39685,39687,39689,39691,39693,39695],{"class":42,"line":36210},[40,39683,39684],{"class":50},"                pre_lab",[40,39686,1284],{"class":1283},[40,39688,35982],{"class":50},[40,39690,35985],{"class":8539},[40,39692,1284],{"class":1283},[40,39694,3698],{"class":63},[40,39696,1811],{"class":50},[40,39698,39699],{"class":42,"line":36229},[40,39700,36232],{"class":997},[40,39702,39703,39706,39708],{"class":42,"line":36235},[40,39704,39705],{"class":50},"                val_batch_loss",[40,39707,1284],{"class":1283},[40,39709,36008],{"class":50},[40,39711,39712],{"class":42,"line":36246},[40,39713,36249],{"class":997},[40,39715,39716,39719,39721,39724,39726,39728,39730],{"class":42,"line":36252},[40,39717,39718],{"class":50},"                val_loss",[40,39720,12799],{"class":1283},[40,39722,39723],{"class":50},"val_batch_loss.item()",[40,39725,3934],{"class":1283},[40,39727,36066],{"class":50},[40,39729,3672],{"class":63},[40,39731,1811],{"class":50},[40,39733,39734,39737,39739,39741,39743],{"class":42,"line":36272},[40,39735,39736],{"class":50},"                val_corrects",[40,39738,12799],{"class":1283},[40,39740,36087],{"class":50},[40,39742,6273],{"class":1283},[40,39744,36092],{"class":50},[40,39746,39747],{"class":42,"line":36288},[40,39748,39749],{"class":997},"            # 当前用于验证的样本数量\n",[40,39751,39752,39755,39757,39759,39761],{"class":42,"line":36294},[40,39753,39754],{"class":50},"            val_num",[40,39756,12799],{"class":1283},[40,39758,36066],{"class":50},[40,39760,3672],{"class":63},[40,39762,1811],{"class":50},[40,39764,39765],{"class":42,"line":36308},[40,39766,36311],{"class":997},[40,39768,39769],{"class":42,"line":36314},[40,39770,36317],{"class":997},[40,39772,39773,39775,39777],{"class":42,"line":36320},[40,39774,36323],{"class":50},[40,39776,4063],{"class":1283},[40,39778,36328],{"class":50},[40,39780,39781],{"class":42,"line":36331},[40,39782,36334],{"class":997},[40,39784,39785],{"class":42,"line":36337},[40,39786,36340],{"class":997},[40,39788,39789,39791,39793],{"class":42,"line":36343},[40,39790,36346],{"class":50},[40,39792,4063],{"class":1283},[40,39794,36328],{"class":50},[40,39796,39797],{"class":42,"line":36353},[40,39798,36356],{"class":997},[40,39800,39801,39803,39805],{"class":42,"line":36359},[40,39802,36362],{"class":50},[40,39804,4063],{"class":1283},[40,39806,36367],{"class":50},[40,39808,39809],{"class":42,"line":36370},[40,39810,36373],{"class":997},[40,39812,39813,39815,39817],{"class":42,"line":36376},[40,39814,36379],{"class":50},[40,39816,4063],{"class":1283},[40,39818,36367],{"class":50},[40,39820,39821],{"class":42,"line":36386},[40,39822,1413],{"emptyLinePlaceholder":1412},[40,39824,39825],{"class":42,"line":36391},[40,39826,36394],{"class":997},[40,39828,39829,39831,39833,39835,39837,39839,39841,39843,39845,39847,39849,39851,39853,39855,39857,39859,39861,39863,39865,39867],{"class":42,"line":36397},[40,39830,35751],{"class":63},[40,39832,3488],{"class":50},[40,39834,6916],{"class":94},[40,39836,35759],{"class":63},[40,39838,36408],{"class":94},[40,39840,4373],{"class":63},[40,39842,36413],{"class":1283},[40,39844,4423],{"class":63},[40,39846,36418],{"class":94},[40,39848,4373],{"class":63},[40,39850,36413],{"class":1283},[40,39852,4423],{"class":63},[40,39854,6916],{"class":94},[40,39856,36429],{"class":50},[40,39858,4011],{"class":1283},[40,39860,3698],{"class":63},[40,39862,36436],{"class":50},[40,39864,4011],{"class":1283},[40,39866,3698],{"class":63},[40,39868,36443],{"class":50},[40,39870,39871,39873,39875,39877,39879,39881,39883,39885,39887,39889,39891,39893,39895,39897,39899,39901,39903,39905,39907,39909],{"class":42,"line":36446},[40,39872,35751],{"class":63},[40,39874,3488],{"class":50},[40,39876,6916],{"class":94},[40,39878,35759],{"class":63},[40,39880,36457],{"class":94},[40,39882,4373],{"class":63},[40,39884,36413],{"class":1283},[40,39886,4423],{"class":63},[40,39888,36466],{"class":94},[40,39890,4373],{"class":63},[40,39892,36413],{"class":1283},[40,39894,4423],{"class":63},[40,39896,6916],{"class":94},[40,39898,36477],{"class":50},[40,39900,4011],{"class":1283},[40,39902,3698],{"class":63},[40,39904,36484],{"class":50},[40,39906,4011],{"class":1283},[40,39908,3698],{"class":63},[40,39910,36443],{"class":50},[40,39912,39913],{"class":42,"line":36493},[40,39914,1413],{"emptyLinePlaceholder":1412},[40,39916,39917],{"class":42,"line":36498},[40,39918,36501],{"class":997},[40,39920,39921,39923,39925,39927,39929,39931,39933],{"class":42,"line":36504},[40,39922,5822],{"class":1283},[40,39924,36509],{"class":50},[40,39926,4011],{"class":1283},[40,39928,3698],{"class":63},[40,39930,4417],{"class":50},[40,39932,4437],{"class":1283},[40,39934,36520],{"class":50},[40,39936,39937],{"class":42,"line":36523},[40,39938,36526],{"class":997},[40,39940,39941,39943,39945,39947,39949,39951,39953],{"class":42,"line":36529},[40,39942,36532],{"class":50},[40,39944,3526],{"class":63},[40,39946,1284],{"class":1283},[40,39948,36539],{"class":50},[40,39950,4011],{"class":1283},[40,39952,3698],{"class":63},[40,39954,36546],{"class":50},[40,39956,39957],{"class":42,"line":36549},[40,39958,36552],{"class":997},[40,39960,39961],{"class":42,"line":36555},[40,39962,36558],{"class":997},[40,39964,39965,39967,39969],{"class":42,"line":36561},[40,39966,36564],{"class":50},[40,39968,1284],{"class":1283},[40,39970,35614],{"class":50},[40,39972,39973],{"class":42,"line":36571},[40,39974,1413],{"emptyLinePlaceholder":1412},[40,39976,39977],{"class":42,"line":36576},[40,39978,36579],{"class":997},[40,39980,39981,39983,39985,39987,39989],{"class":42,"line":36582},[40,39982,36585],{"class":50},[40,39984,1284],{"class":1283},[40,39986,36590],{"class":50},[40,39988,4011],{"class":1283},[40,39990,36595],{"class":50},[40,39992,39993,39995,39997,39999,40001,40003,40005,40007,40009,40011,40013,40015,40017,40019,40021,40023,40025,40027],{"class":42,"line":36598},[40,39994,35751],{"class":63},[40,39996,3488],{"class":50},[40,39998,36605],{"class":94},[40,40000,4373],{"class":63},[40,40002,36610],{"class":1283},[40,40004,4423],{"class":63},[40,40006,4023],{"class":94},[40,40008,4373],{"class":63},[40,40010,36610],{"class":1283},[40,40012,4423],{"class":63},[40,40014,36623],{"class":94},[40,40016,36626],{"class":50},[40,40018,36629],{"class":1283},[40,40020,4384],{"class":63},[40,40022,36634],{"class":50},[40,40024,3808],{"class":1283},[40,40026,4384],{"class":63},[40,40028,33797],{"class":50},[40,40030,40031],{"class":42,"line":36643},[40,40032,40033],{"class":997},"    # 选择最优参数并保存\n",[40,40035,40036],{"class":42,"line":36649},[40,40037,40038],{"class":997},"    # 保存最佳模型权重字典\n",[40,40040,40041,40044,40046],{"class":42,"line":36655},[40,40042,40043],{"class":50},"    torch.save(best_model_wts,",[40,40045,36667],{"class":94},[40,40047,1811],{"class":50},[40,40049,40050],{"class":42,"line":36661},[40,40051,36687],{"class":997},[40,40053,40054,40056,40058,40060,40062,40064],{"class":42,"line":36672},[40,40055,36693],{"class":50},[40,40057,1284],{"class":1283},[40,40059,36698],{"class":50},[40,40061,36701],{"class":8539},[40,40063,1284],{"class":1283},[40,40065,4888],{"class":50},[40,40067,40068,40070,40072,40074],{"class":42,"line":36678},[40,40069,36711],{"class":94},[40,40071,4336],{"class":50},[40,40073,36716],{"class":63},[40,40075,36719],{"class":50},[40,40077,40078,40080],{"class":42,"line":36684},[40,40079,36725],{"class":94},[40,40081,36728],{"class":50},[40,40083,40084,40086],{"class":42,"line":36690},[40,40085,36734],{"class":94},[40,40087,36737],{"class":50},[40,40089,40090,40092],{"class":42,"line":36708},[40,40091,36743],{"class":94},[40,40093,36746],{"class":50},[40,40095,40096,40098],{"class":42,"line":36722},[40,40097,36752],{"class":94},[40,40099,36755],{"class":50},[40,40101,40102],{"class":42,"line":36731},[40,40103,36761],{"class":50},[40,40105,40106],{"class":42,"line":36740},[40,40107,36767],{"class":997},[40,40109,40110,40112],{"class":42,"line":36749},[40,40111,7413],{"class":1283},[40,40113,36775],{"class":50},[40,40115,40116],{"class":42,"line":36758},[40,40117,1413],{"emptyLinePlaceholder":1412},[40,40119,40120],{"class":42,"line":36764},[40,40121,36786],{"class":997},[40,40123,40124,40126,40128],{"class":42,"line":36770},[40,40125,35247],{"class":1283},[40,40127,36794],{"class":596},[40,40129,36797],{"class":50},[40,40131,40132],{"class":42,"line":36778},[40,40133,36803],{"class":997},[40,40135,40136,40138,40140,40142,40144,40146,40148,40150],{"class":42,"line":36783},[40,40137,36809],{"class":50},[40,40139,34993],{"class":8539},[40,40141,1284],{"class":1283},[40,40143,3488],{"class":50},[40,40145,3977],{"class":63},[40,40147,1299],{"class":50},[40,40149,3773],{"class":63},[40,40151,33797],{"class":50},[40,40153,40154],{"class":42,"line":36789},[40,40155,36829],{"class":997},[40,40157,40158],{"class":42,"line":36800},[40,40159,36835],{"class":997},[40,40161,40162],{"class":42,"line":36806},[40,40163,36841],{"class":997},[40,40165,40166,40168,40170,40172,40174,40176,40178],{"class":42,"line":36826},[40,40167,35027],{"class":50},[40,40169,3698],{"class":63},[40,40171,1299],{"class":50},[40,40173,64],{"class":63},[40,40175,1299],{"class":50},[40,40177,3698],{"class":63},[40,40179,1811],{"class":50},[40,40181,40182],{"class":42,"line":36832},[40,40183,36864],{"class":997},[40,40185,40186],{"class":42,"line":36838},[40,40187,36870],{"class":997},[40,40189,40190],{"class":42,"line":36844},[40,40191,36876],{"class":997},[40,40193,40194],{"class":42,"line":36861},[40,40195,36882],{"class":997},[40,40197,40198],{"class":42,"line":36867},[40,40199,36888],{"class":997},[40,40201,40202,40204,40206,40208,40210,40212,40214,40216,40218],{"class":42,"line":36873},[40,40203,36894],{"class":50},[40,40205,36897],{"class":94},[40,40207,36900],{"class":50},[40,40209,36903],{"class":94},[40,40211,1299],{"class":50},[40,40213,36908],{"class":8539},[40,40215,1284],{"class":1283},[40,40217,36913],{"class":94},[40,40219,1811],{"class":50},[40,40221,40222,40224,40226,40228,40230,40232,40234,40236,40238],{"class":42,"line":36879},[40,40223,36894],{"class":50},[40,40225,36897],{"class":94},[40,40227,36925],{"class":50},[40,40229,36928],{"class":94},[40,40231,1299],{"class":50},[40,40233,36908],{"class":8539},[40,40235,1284],{"class":1283},[40,40237,36937],{"class":94},[40,40239,1811],{"class":50},[40,40241,40242],{"class":42,"line":36885},[40,40243,36945],{"class":997},[40,40245,40246],{"class":42,"line":36891},[40,40247,36951],{"class":50},[40,40249,40250],{"class":42,"line":36918},[40,40251,36957],{"class":997},[40,40253,40254,40256,40258],{"class":42,"line":36942},[40,40255,36963],{"class":50},[40,40257,36966],{"class":94},[40,40259,1811],{"class":50},[40,40261,40262,40264,40266],{"class":42,"line":36948},[40,40263,36974],{"class":50},[40,40265,36977],{"class":94},[40,40267,1811],{"class":50},[40,40269,40270],{"class":42,"line":36954},[40,40271,36985],{"class":997},[40,40273,40274,40276,40278,40280,40282,40284,40286],{"class":42,"line":36960},[40,40275,35027],{"class":50},[40,40277,3698],{"class":63},[40,40279,1299],{"class":50},[40,40281,64],{"class":63},[40,40283,1299],{"class":50},[40,40285,64],{"class":63},[40,40287,1811],{"class":50},[40,40289,40290,40292,40294,40296,40298,40300,40302,40304,40306],{"class":42,"line":36971},[40,40291,36894],{"class":50},[40,40293,36897],{"class":94},[40,40295,37012],{"class":50},[40,40297,36903],{"class":94},[40,40299,1299],{"class":50},[40,40301,36908],{"class":8539},[40,40303,1284],{"class":1283},[40,40305,37023],{"class":94},[40,40307,1811],{"class":50},[40,40309,40310,40312,40314,40316,40318,40320,40322,40324,40326],{"class":42,"line":36982},[40,40311,36894],{"class":50},[40,40313,36897],{"class":94},[40,40315,37035],{"class":50},[40,40317,36928],{"class":94},[40,40319,1299],{"class":50},[40,40321,36908],{"class":8539},[40,40323,1284],{"class":1283},[40,40325,37046],{"class":94},[40,40327,1811],{"class":50},[40,40329,40330],{"class":42,"line":36988},[40,40331,37054],{"class":997},[40,40333,40334],{"class":42,"line":37005},[40,40335,36951],{"class":50},[40,40337,40338,40340,40342],{"class":42,"line":37028},[40,40339,36963],{"class":50},[40,40341,36897],{"class":94},[40,40343,1811],{"class":50},[40,40345,40346,40348,40350],{"class":42,"line":37051},[40,40347,36974],{"class":50},[40,40349,37076],{"class":94},[40,40351,1811],{"class":50},[40,40353,40354],{"class":42,"line":37057},[40,40355,37084],{"class":50},[40,40357,40358],{"class":42,"line":37062},[40,40359,1413],{"emptyLinePlaceholder":1412},[40,40361,40362],{"class":42,"line":37071},[40,40363,37095],{"class":997},[40,40365,40366,40368,40370,40372,40374],{"class":42,"line":37081},[40,40367,4873],{"class":1283},[40,40369,34520],{"class":63},[40,40371,6273],{"class":1283},[40,40373,34525],{"class":94},[40,40375,332],{"class":50},[40,40377,40378],{"class":42,"line":37087},[40,40379,37114],{"class":997},[40,40381,40382,40385,40387],{"class":42,"line":37092},[40,40383,40384],{"class":50},"    AlexNet",[40,40386,1284],{"class":1283},[40,40388,40389],{"class":50},"AlexNet()\n",[40,40391,40392,40394,40396],{"class":42,"line":37098},[40,40393,37131],{"class":50},[40,40395,1284],{"class":1283},[40,40397,37136],{"class":50},[40,40399,40400,40402,40404,40407,40409,40411,40413],{"class":42,"line":37111},[40,40401,36693],{"class":50},[40,40403,1284],{"class":1283},[40,40405,40406],{"class":50},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[40,40408,37149],{"class":8539},[40,40410,1284],{"class":1283},[40,40412,4178],{"class":63},[40,40414,1811],{"class":50},[40,40416,40417],{"class":42,"line":37117},[40,40418,37161],{"class":50},[492,40420,40421],{"start":70},[495,40422,37174],{},[31,40424,40426],{"className":33679,"code":40425,"language":2323,"meta":36,"style":36},"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",[26,40427,40428,40434,40444,40454,40464,40468,40478,40488,40499,40503,40507,40511,40519,40535,40545,40561,40571,40585,40589,40599,40609,40619,40625,40629,40633,40641,40645,40661,40669,40673,40677,40685,40693,40697,40701,40705,40709,40715,40719,40729,40737,40745,40749,40753,40757,40765,40769,40785,40789,40793,40797,40809,40813,40825,40829,40833,40845,40849,40859,40863,40867,40879,40883,40891,40895,40899,40907,40911,40919,40923,40927,40931,40935,40939,40955,40963,40967,40971,41019,41025,41029,41039,41047,41055,41059,41063,41067,41071,41079,41083,41099,41103,41111,41119],{"__ignoreMap":36},[40,40429,40430,40432],{"class":42,"line":43},[40,40431,33692],{"class":1283},[40,40433,33695],{"class":50},[40,40435,40436,40438,40440,40442],{"class":42,"line":54},[40,40437,33692],{"class":1283},[40,40439,34715],{"class":50},[40,40441,34683],{"class":1283},[40,40443,34720],{"class":50},[40,40445,40446,40448,40450,40452],{"class":42,"line":70},[40,40447,34037],{"class":1283},[40,40449,37202],{"class":50},[40,40451,33692],{"class":1283},[40,40453,37207],{"class":50},[40,40455,40456,40458,40460,40462],{"class":42,"line":78},[40,40457,34037],{"class":1283},[40,40459,34698],{"class":50},[40,40461,33692],{"class":1283},[40,40463,34703],{"class":50},[40,40465,40466],{"class":42,"line":86},[40,40467,37222],{"class":997},[40,40469,40470,40472,40474,40476],{"class":42,"line":100},[40,40471,34037],{"class":1283},[40,40473,34668],{"class":50},[40,40475,33692],{"class":1283},[40,40477,34673],{"class":50},[40,40479,40480,40482,40484,40486],{"class":42,"line":108},[40,40481,34037],{"class":1283},[40,40483,35214],{"class":50},[40,40485,33692],{"class":1283},[40,40487,38857],{"class":50},[40,40489,40490,40492,40495,40497],{"class":42,"line":121},[40,40491,34037],{"class":1283},[40,40493,40494],{"class":50}," 练习.AlexNet.model ",[40,40496,33692],{"class":1283},[40,40498,38857],{"class":50},[40,40500,40501],{"class":42,"line":134},[40,40502,1413],{"emptyLinePlaceholder":1412},[40,40504,40505],{"class":42,"line":146},[40,40506,1413],{"emptyLinePlaceholder":1412},[40,40508,40509],{"class":42,"line":154},[40,40510,37251],{"class":997},[40,40512,40513,40515,40517],{"class":42,"line":162},[40,40514,35247],{"class":1283},[40,40516,37258],{"class":596},[40,40518,35253],{"class":50},[40,40520,40521,40523,40525,40527,40529,40531,40533],{"class":42,"line":170},[40,40522,37265],{"class":50},[40,40524,1284],{"class":1283},[40,40526,34755],{"class":50},[40,40528,34758],{"class":8539},[40,40530,1284],{"class":1283},[40,40532,34763],{"class":94},[40,40534,34766],{"class":50},[40,40536,40537,40539,40541,40543],{"class":42,"line":183},[40,40538,37282],{"class":8539},[40,40540,1284],{"class":1283},[40,40542,37287],{"class":63},[40,40544,34766],{"class":50},[40,40546,40547,40549,40551,40553,40555,40557,40559],{"class":42,"line":196},[40,40548,37294],{"class":8539},[40,40550,1284],{"class":1283},[40,40552,34793],{"class":50},[40,40554,34796],{"class":8539},[40,40556,1284],{"class":1283},[40,40558,38749],{"class":63},[40,40560,34804],{"class":50},[40,40562,40563,40565,40567,40569],{"class":42,"line":204},[40,40564,37311],{"class":8539},[40,40566,1284],{"class":1283},[40,40568,34776],{"class":63},[40,40570,1811],{"class":50},[40,40572,40573,40575,40577,40579,40581,40583],{"class":42,"line":217},[40,40574,37322],{"class":50},[40,40576,1284],{"class":1283},[40,40578,34834],{"class":50},[40,40580,34837],{"class":8539},[40,40582,1284],{"class":1283},[40,40584,37333],{"class":50},[40,40586,40587],{"class":42,"line":230},[40,40588,37338],{"class":997},[40,40590,40591,40593,40595,40597],{"class":42,"line":238},[40,40592,37343],{"class":8539},[40,40594,1284],{"class":1283},[40,40596,3698],{"class":63},[40,40598,34766],{"class":50},[40,40600,40601,40603,40605,40607],{"class":42,"line":251},[40,40602,37354],{"class":8539},[40,40604,1284],{"class":1283},[40,40606,34776],{"class":63},[40,40608,34766],{"class":50},[40,40610,40611,40613,40615,40617],{"class":42,"line":264},[40,40612,37365],{"class":8539},[40,40614,1284],{"class":1283},[40,40616,3672],{"class":63},[40,40618,1811],{"class":50},[40,40620,40621,40623],{"class":42,"line":277},[40,40622,7413],{"class":1283},[40,40624,37378],{"class":50},[40,40626,40627],{"class":42,"line":290},[40,40628,1413],{"emptyLinePlaceholder":1412},[40,40630,40631],{"class":42,"line":298},[40,40632,37387],{"class":997},[40,40634,40635,40637,40639],{"class":42,"line":310},[40,40636,35247],{"class":1283},[40,40638,37394],{"class":596},[40,40640,37397],{"class":50},[40,40642,40643],{"class":42,"line":5086},[40,40644,37402],{"class":997},[40,40646,40647,40649,40651,40653,40655,40657,40659],{"class":42,"line":5091},[40,40648,34537],{"class":50},[40,40650,1284],{"class":1283},[40,40652,34544],{"class":94},[40,40654,5035],{"class":1283},[40,40656,34549],{"class":50},[40,40658,5032],{"class":1283},[40,40660,37419],{"class":94},[40,40662,40663,40665,40667],{"class":42,"line":5105},[40,40664,34589],{"class":50},[40,40666,1284],{"class":1283},[40,40668,35589],{"class":50},[40,40670,40671],{"class":42,"line":5110},[40,40672,1413],{"emptyLinePlaceholder":1412},[40,40674,40675],{"class":42,"line":5902},[40,40676,37436],{"class":997},[40,40678,40679,40681,40683],{"class":42,"line":5916},[40,40680,37441],{"class":50},[40,40682,1284],{"class":1283},[40,40684,35642],{"class":63},[40,40686,40687,40689,40691],{"class":42,"line":5924},[40,40688,37450],{"class":50},[40,40690,1284],{"class":1283},[40,40692,6409],{"class":63},[40,40694,40695],{"class":42,"line":5929},[40,40696,1413],{"emptyLinePlaceholder":1412},[40,40698,40699],{"class":42,"line":5935},[40,40700,37463],{"class":997},[40,40702,40703],{"class":42,"line":5941},[40,40704,37468],{"class":997},[40,40706,40707],{"class":42,"line":5946},[40,40708,37473],{"class":997},[40,40710,40711,40713],{"class":42,"line":11270},[40,40712,37478],{"class":1283},[40,40714,36184],{"class":50},[40,40716,40717],{"class":42,"line":11294},[40,40718,37485],{"class":997},[40,40720,40721,40723,40725,40727],{"class":42,"line":11299},[40,40722,6727],{"class":1283},[40,40724,37492],{"class":50},[40,40726,29355],{"class":1283},[40,40728,37497],{"class":50},[40,40730,40731,40733,40735],{"class":42,"line":11305},[40,40732,37502],{"class":50},[40,40734,1284],{"class":1283},[40,40736,37507],{"class":50},[40,40738,40739,40741,40743],{"class":42,"line":11332},[40,40740,37512],{"class":50},[40,40742,1284],{"class":1283},[40,40744,37517],{"class":50},[40,40746,40747],{"class":42,"line":11337},[40,40748,37522],{"class":997},[40,40750,40751],{"class":42,"line":11343},[40,40752,36175],{"class":50},[40,40754,40755],{"class":42,"line":11355},[40,40756,37531],{"class":997},[40,40758,40759,40761,40763],{"class":42,"line":11367},[40,40760,35960],{"class":50},[40,40762,1284],{"class":1283},[40,40764,37540],{"class":50},[40,40766,40767],{"class":42,"line":11379},[40,40768,37545],{"class":997},[40,40770,40771,40773,40775,40777,40779,40781,40783],{"class":42,"line":13038},[40,40772,35977],{"class":50},[40,40774,1284],{"class":1283},[40,40776,35982],{"class":50},[40,40778,35985],{"class":8539},[40,40780,1284],{"class":1283},[40,40782,3698],{"class":63},[40,40784,1811],{"class":50},[40,40786,40787],{"class":42,"line":13063},[40,40788,37566],{"class":997},[40,40790,40791],{"class":42,"line":13086},[40,40792,37571],{"class":997},[40,40794,40795],{"class":42,"line":13110},[40,40796,37576],{"class":997},[40,40798,40799,40801,40803,40805,40807],{"class":42,"line":13115},[40,40800,37581],{"class":50},[40,40802,12799],{"class":1283},[40,40804,36087],{"class":50},[40,40806,6273],{"class":1283},[40,40808,37590],{"class":50},[40,40810,40811],{"class":42,"line":13120},[40,40812,37595],{"class":997},[40,40814,40815,40817,40819,40821,40823],{"class":42,"line":13125},[40,40816,37600],{"class":50},[40,40818,12799],{"class":1283},[40,40820,37605],{"class":50},[40,40822,3672],{"class":63},[40,40824,1811],{"class":50},[40,40826,40827],{"class":42,"line":13134},[40,40828,1413],{"emptyLinePlaceholder":1412},[40,40830,40831],{"class":42,"line":13139},[40,40832,37618],{"class":997},[40,40834,40835,40837,40839,40841,40843],{"class":42,"line":13145},[40,40836,37623],{"class":50},[40,40838,1284],{"class":1283},[40,40840,37628],{"class":50},[40,40842,4063],{"class":1283},[40,40844,37633],{"class":50},[40,40846,40847],{"class":42,"line":13166},[40,40848,37638],{"class":997},[40,40850,40851,40853,40855,40857],{"class":42,"line":13172},[40,40852,35751],{"class":63},[40,40854,3488],{"class":50},[40,40856,37647],{"class":94},[40,40858,37650],{"class":50},[40,40860,40861],{"class":42,"line":13186},[40,40862,1413],{"emptyLinePlaceholder":1412},[40,40864,40865],{"class":42,"line":13192},[40,40866,37659],{"class":997},[40,40868,40869,40871,40873,40875,40877],{"class":42,"line":13219},[40,40870,4873],{"class":1283},[40,40872,34520],{"class":63},[40,40874,6273],{"class":1283},[40,40876,34525],{"class":94},[40,40878,332],{"class":50},[40,40880,40881],{"class":42,"line":13228},[40,40882,37676],{"class":997},[40,40884,40885,40887,40889],{"class":42,"line":13234},[40,40886,34589],{"class":50},[40,40888,1284],{"class":1283},[40,40890,40389],{"class":50},[40,40892,40893],{"class":42,"line":13242},[40,40894,37689],{"class":997},[40,40896,40897],{"class":42,"line":13247},[40,40898,37694],{"class":997},[40,40900,40901,40903,40905],{"class":42,"line":19926},[40,40902,37699],{"class":50},[40,40904,37702],{"class":94},[40,40906,33797],{"class":50},[40,40908,40909],{"class":42,"line":19932},[40,40910,37709],{"class":997},[40,40912,40913,40915,40917],{"class":42,"line":19955},[40,40914,37322],{"class":50},[40,40916,1284],{"class":1283},[40,40918,37718],{"class":50},[40,40920,40921],{"class":42,"line":19961},[40,40922,37723],{"class":997},[40,40924,40925],{"class":42,"line":19984},[40,40926,37728],{"class":50},[40,40928,40929],{"class":42,"line":19998},[40,40930,1413],{"emptyLinePlaceholder":1412},[40,40932,40933],{"class":42,"line":20018},[40,40934,37737],{"class":997},[40,40936,40937],{"class":42,"line":20024},[40,40938,37742],{"class":997},[40,40940,40941,40943,40945,40947,40949,40951,40953],{"class":42,"line":20035},[40,40942,34537],{"class":50},[40,40944,1284],{"class":1283},[40,40946,34544],{"class":94},[40,40948,5035],{"class":1283},[40,40950,34549],{"class":50},[40,40952,5032],{"class":1283},[40,40954,37419],{"class":94},[40,40956,40957,40959,40961],{"class":42,"line":20058},[40,40958,34589],{"class":50},[40,40960,1284],{"class":1283},[40,40962,35589],{"class":50},[40,40964,40965],{"class":42,"line":20080},[40,40966,37771],{"class":997},[40,40968,40969],{"class":42,"line":20085},[40,40970,37776],{"class":997},[40,40972,40973,40975,40977,40979,40981,40983,40985,40987,40989,40991,40993,40995,40997,40999,41001,41003,41005,41007,41009,41011,41013,41015,41017],{"class":42,"line":20091},[40,40974,37781],{"class":50},[40,40976,1284],{"class":1283},[40,40978,4367],{"class":50},[40,40980,37788],{"class":94},[40,40982,1299],{"class":50},[40,40984,37793],{"class":94},[40,40986,1299],{"class":50},[40,40988,37798],{"class":94},[40,40990,1299],{"class":50},[40,40992,37803],{"class":94},[40,40994,1299],{"class":50},[40,40996,37808],{"class":94},[40,40998,1299],{"class":50},[40,41000,37813],{"class":94},[40,41002,1299],{"class":50},[40,41004,37818],{"class":94},[40,41006,1299],{"class":50},[40,41008,37823],{"class":94},[40,41010,1299],{"class":50},[40,41012,37828],{"class":94},[40,41014,1299],{"class":50},[40,41016,37833],{"class":94},[40,41018,36546],{"class":50},[40,41020,41021,41023],{"class":42,"line":20105},[40,41022,37478],{"class":1283},[40,41024,36184],{"class":50},[40,41026,41027],{"class":42,"line":20118},[40,41028,37846],{"class":997},[40,41030,41031,41033,41035,41037],{"class":42,"line":20123},[40,41032,6727],{"class":1283},[40,41034,37853],{"class":50},[40,41036,29355],{"class":1283},[40,41038,37497],{"class":50},[40,41040,41041,41043,41045],{"class":42,"line":20137},[40,41042,35910],{"class":50},[40,41044,1284],{"class":1283},[40,41046,35915],{"class":50},[40,41048,41049,41051,41053],{"class":42,"line":20142},[40,41050,35925],{"class":50},[40,41052,1284],{"class":1283},[40,41054,35930],{"class":50},[40,41056,41057],{"class":42,"line":20148},[40,41058,1413],{"emptyLinePlaceholder":1412},[40,41060,41061],{"class":42,"line":20153},[40,41062,37882],{"class":997},[40,41064,41065],{"class":42,"line":20167},[40,41066,36175],{"class":50},[40,41068,41069],{"class":42,"line":20172},[40,41070,37891],{"class":997},[40,41072,41073,41075,41077],{"class":42,"line":20177},[40,41074,35960],{"class":50},[40,41076,1284],{"class":1283},[40,41078,35965],{"class":50},[40,41080,41081],{"class":42,"line":20191},[40,41082,37904],{"class":997},[40,41084,41085,41087,41089,41091,41093,41095,41097],{"class":42,"line":20203},[40,41086,35977],{"class":50},[40,41088,1284],{"class":1283},[40,41090,35982],{"class":50},[40,41092,35985],{"class":8539},[40,41094,1284],{"class":1283},[40,41096,3698],{"class":63},[40,41098,1811],{"class":50},[40,41100,41101],{"class":42,"line":20208},[40,41102,37925],{"class":997},[40,41104,41105,41107,41109],{"class":42,"line":20221},[40,41106,37930],{"class":50},[40,41108,1284],{"class":1283},[40,41110,37935],{"class":50},[40,41112,41113,41115,41117],{"class":42,"line":20226},[40,41114,37940],{"class":50},[40,41116,1284],{"class":1283},[40,41118,37945],{"class":50},[40,41120,41121,41123,41125,41127,41129,41131,41133,41135],{"class":42,"line":20231},[40,41122,37950],{"class":63},[40,41124,3488],{"class":50},[40,41126,37955],{"class":94},[40,41128,37958],{"class":50},[40,41130,37961],{"class":94},[40,41132,1299],{"class":50},[40,41134,37966],{"class":94},[40,41136,37969],{"class":50},[402,41138,41140],{"id":41139},"_22vgg","2.2.VGG",[2423,41142,41144],{"id":41143},"_221原理","2.2.1.原理",[19,41146,41147],{},[438,41148],{"alt":36,"src":41149},"\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,41151,41152],{},[438,41153],{"alt":36,"src":41154},"\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,41156,41157],{},[438,41158],{"alt":36,"src":41159},"\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,41161,41162],{},"参数详细描述：",[19,41164,41165],{},[438,41166],{"alt":36,"src":41167},"\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,41169,41170],{},[438,41171],{"alt":36,"src":41172},"\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,41174,41175],{},[438,41176],{"alt":36,"src":41177},"\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,41179,41180],{},[438,41181],{"alt":36,"src":41182},"\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,41184,41185],{},[438,41186],{"alt":36,"src":41187},"\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",[2423,41189,41191],{"id":41190},"_222代码实现","2.2.2.代码实现",[492,41193,41194],{},[495,41195,41196],{},"网络搭建",[31,41198,41200],{"className":33679,"code":41199,"language":2323,"meta":36,"style":36},"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",[26,41201,41202,41208,41220,41230,41240,41244,41261,41269,41288,41293,41298,41310,41348,41353,41389,41393,41422,41427,41432,41443,41479,41483,41519,41523,41551,41555,41560,41571,41607,41611,41647,41651,41687,41691,41719,41723,41728,41739,41776,41780,41816,41820,41856,41860,41888,41892,41897,41908,41944,41948,41984,41988,42024,42028,42056,42060,42065,42076,42081,42086,42091,42112,42116,42128,42132,42144,42148,42152,42157,42162,42177,42182,42192,42197,42212,42217,42236,42241,42250,42255,42265,42270,42275,42289,42294,42308,42316,42320,42324,42332,42343,42354,42365,42376,42387,42398,42404,42408,42413,42426,42446,42452,42461],{"__ignoreMap":36},[40,41203,41204,41206],{"class":42,"line":43},[40,41205,33692],{"class":1283},[40,41207,33695],{"class":50},[40,41209,41210,41212,41215,41217],{"class":42,"line":54},[40,41211,34037],{"class":1283},[40,41213,41214],{"class":50}," sympy.core.sympify ",[40,41216,33692],{"class":1283},[40,41218,41219],{"class":50}," kernS\n",[40,41221,41222,41224,41226,41228],{"class":42,"line":70},[40,41223,34037],{"class":1283},[40,41225,34040],{"class":50},[40,41227,33692],{"class":1283},[40,41229,34045],{"class":50},[40,41231,41232,41234,41236,41238],{"class":42,"line":78},[40,41233,34037],{"class":1283},[40,41235,34057],{"class":50},[40,41237,33692],{"class":1283},[40,41239,34062],{"class":50},[40,41241,41242],{"class":42,"line":86},[40,41243,1413],{"emptyLinePlaceholder":1412},[40,41245,41246,41248,41251,41253,41255,41257,41259],{"class":42,"line":100},[40,41247,18016],{"class":1283},[40,41249,41250],{"class":596}," VGG16",[40,41252,3488],{"class":50},[40,41254,34078],{"class":596},[40,41256,4037],{"class":50},[40,41258,34083],{"class":596},[40,41260,34086],{"class":50},[40,41262,41263,41265,41267],{"class":42,"line":108},[40,41264,34101],{"class":1283},[40,41266,34104],{"class":63},[40,41268,34107],{"class":50},[40,41270,41271,41273,41275,41278,41280,41282,41284,41286],{"class":42,"line":121},[40,41272,34117],{"class":63},[40,41274,3488],{"class":50},[40,41276,41277],{"class":63},"VGG16",[40,41279,15757],{"class":50},[40,41281,34123],{"class":63},[40,41283,34126],{"class":50},[40,41285,34129],{"class":63},[40,41287,5302],{"class":50},[40,41289,41290],{"class":42,"line":134},[40,41291,41292],{"class":997},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[40,41294,41295],{"class":42,"line":146},[40,41296,41297],{"class":997},"        # 这里用的是灰度图\n",[40,41299,41300,41302,41305,41307],{"class":42,"line":154},[40,41301,34145],{"class":63},[40,41303,41304],{"class":50},".block1",[40,41306,1284],{"class":1283},[40,41308,41309],{"class":50},"nn.Sequential(\n",[40,41311,41312,41315,41317,41319,41321,41323,41325,41327,41329,41331,41333,41335,41337,41339,41341,41343,41345],{"class":42,"line":162},[40,41313,41314],{"class":50},"            nn.Conv2d(",[40,41316,34156],{"class":8539},[40,41318,1284],{"class":1283},[40,41320,3698],{"class":63},[40,41322,1299],{"class":50},[40,41324,34165],{"class":8539},[40,41326,1284],{"class":1283},[40,41328,3684],{"class":63},[40,41330,1299],{"class":50},[40,41332,34174],{"class":8539},[40,41334,1284],{"class":1283},[40,41336,3555],{"class":63},[40,41338,1299],{"class":50},[40,41340,34183],{"class":8539},[40,41342,1284],{"class":1283},[40,41344,3698],{"class":63},[40,41346,41347],{"class":50},"),\n",[40,41349,41350],{"class":42,"line":170},[40,41351,41352],{"class":50},"            nn.ReLU(),\n",[40,41354,41355,41357,41359,41361,41363,41365,41367,41369,41371,41373,41375,41377,41379,41381,41383,41385,41387],{"class":42,"line":183},[40,41356,41314],{"class":50},[40,41358,34156],{"class":8539},[40,41360,1284],{"class":1283},[40,41362,3684],{"class":63},[40,41364,1299],{"class":50},[40,41366,34165],{"class":8539},[40,41368,1284],{"class":1283},[40,41370,3684],{"class":63},[40,41372,1299],{"class":50},[40,41374,34174],{"class":8539},[40,41376,1284],{"class":1283},[40,41378,3555],{"class":63},[40,41380,1299],{"class":50},[40,41382,34183],{"class":8539},[40,41384,1284],{"class":1283},[40,41386,3698],{"class":63},[40,41388,41347],{"class":50},[40,41390,41391],{"class":42,"line":196},[40,41392,41352],{"class":50},[40,41394,41395,41398,41400,41402,41404,41406,41408,41410,41412,41414,41416,41418,41420],{"class":42,"line":204},[40,41396,41397],{"class":50},"            nn.MaxPool2d(",[40,41399,34174],{"class":8539},[40,41401,1284],{"class":1283},[40,41403,64],{"class":63},[40,41405,1299],{"class":50},[40,41407,34229],{"class":8539},[40,41409,1284],{"class":1283},[40,41411,64],{"class":63},[40,41413,1299],{"class":50},[40,41415,34183],{"class":8539},[40,41417,1284],{"class":1283},[40,41419,3672],{"class":63},[40,41421,1811],{"class":50},[40,41423,41424],{"class":42,"line":217},[40,41425,41426],{"class":50},"        )\n",[40,41428,41429],{"class":42,"line":230},[40,41430,41431],{"class":997},"        # 第二层\n",[40,41433,41434,41436,41439,41441],{"class":42,"line":238},[40,41435,34145],{"class":63},[40,41437,41438],{"class":50},".block2",[40,41440,1284],{"class":1283},[40,41442,41309],{"class":50},[40,41444,41445,41447,41449,41451,41453,41455,41457,41459,41461,41463,41465,41467,41469,41471,41473,41475,41477],{"class":42,"line":251},[40,41446,41314],{"class":50},[40,41448,34156],{"class":8539},[40,41450,1284],{"class":1283},[40,41452,3684],{"class":63},[40,41454,1299],{"class":50},[40,41456,34165],{"class":8539},[40,41458,1284],{"class":1283},[40,41460,35370],{"class":63},[40,41462,1299],{"class":50},[40,41464,34174],{"class":8539},[40,41466,1284],{"class":1283},[40,41468,3555],{"class":63},[40,41470,1299],{"class":50},[40,41472,34183],{"class":8539},[40,41474,1284],{"class":1283},[40,41476,3698],{"class":63},[40,41478,41347],{"class":50},[40,41480,41481],{"class":42,"line":264},[40,41482,41352],{"class":50},[40,41484,41485,41487,41489,41491,41493,41495,41497,41499,41501,41503,41505,41507,41509,41511,41513,41515,41517],{"class":42,"line":277},[40,41486,41314],{"class":50},[40,41488,34156],{"class":8539},[40,41490,1284],{"class":1283},[40,41492,35370],{"class":63},[40,41494,1299],{"class":50},[40,41496,34165],{"class":8539},[40,41498,1284],{"class":1283},[40,41500,35370],{"class":63},[40,41502,1299],{"class":50},[40,41504,34174],{"class":8539},[40,41506,1284],{"class":1283},[40,41508,3555],{"class":63},[40,41510,1299],{"class":50},[40,41512,34183],{"class":8539},[40,41514,1284],{"class":1283},[40,41516,3698],{"class":63},[40,41518,41347],{"class":50},[40,41520,41521],{"class":42,"line":290},[40,41522,41352],{"class":50},[40,41524,41525,41527,41529,41531,41533,41535,41537,41539,41541,41543,41545,41547,41549],{"class":42,"line":298},[40,41526,41397],{"class":50},[40,41528,34174],{"class":8539},[40,41530,1284],{"class":1283},[40,41532,64],{"class":63},[40,41534,1299],{"class":50},[40,41536,34229],{"class":8539},[40,41538,1284],{"class":1283},[40,41540,64],{"class":63},[40,41542,1299],{"class":50},[40,41544,34183],{"class":8539},[40,41546,1284],{"class":1283},[40,41548,3672],{"class":63},[40,41550,1811],{"class":50},[40,41552,41553],{"class":42,"line":310},[40,41554,41426],{"class":50},[40,41556,41557],{"class":42,"line":5086},[40,41558,41559],{"class":997},"        # 第三层\n",[40,41561,41562,41564,41567,41569],{"class":42,"line":5091},[40,41563,34145],{"class":63},[40,41565,41566],{"class":50},".block3",[40,41568,1284],{"class":1283},[40,41570,41309],{"class":50},[40,41572,41573,41575,41577,41579,41581,41583,41585,41587,41589,41591,41593,41595,41597,41599,41601,41603,41605],{"class":42,"line":5105},[40,41574,41314],{"class":50},[40,41576,34156],{"class":8539},[40,41578,1284],{"class":1283},[40,41580,35370],{"class":63},[40,41582,1299],{"class":50},[40,41584,34165],{"class":8539},[40,41586,1284],{"class":1283},[40,41588,38170],{"class":63},[40,41590,1299],{"class":50},[40,41592,34174],{"class":8539},[40,41594,1284],{"class":1283},[40,41596,3555],{"class":63},[40,41598,1299],{"class":50},[40,41600,34183],{"class":8539},[40,41602,1284],{"class":1283},[40,41604,3698],{"class":63},[40,41606,41347],{"class":50},[40,41608,41609],{"class":42,"line":5110},[40,41610,41352],{"class":50},[40,41612,41613,41615,41617,41619,41621,41623,41625,41627,41629,41631,41633,41635,41637,41639,41641,41643,41645],{"class":42,"line":5902},[40,41614,41314],{"class":50},[40,41616,34156],{"class":8539},[40,41618,1284],{"class":1283},[40,41620,38170],{"class":63},[40,41622,1299],{"class":50},[40,41624,34165],{"class":8539},[40,41626,1284],{"class":1283},[40,41628,38170],{"class":63},[40,41630,1299],{"class":50},[40,41632,34174],{"class":8539},[40,41634,1284],{"class":1283},[40,41636,3555],{"class":63},[40,41638,1299],{"class":50},[40,41640,34183],{"class":8539},[40,41642,1284],{"class":1283},[40,41644,3698],{"class":63},[40,41646,41347],{"class":50},[40,41648,41649],{"class":42,"line":5916},[40,41650,41352],{"class":50},[40,41652,41653,41655,41657,41659,41661,41663,41665,41667,41669,41671,41673,41675,41677,41679,41681,41683,41685],{"class":42,"line":5924},[40,41654,41314],{"class":50},[40,41656,34156],{"class":8539},[40,41658,1284],{"class":1283},[40,41660,38170],{"class":63},[40,41662,1299],{"class":50},[40,41664,34165],{"class":8539},[40,41666,1284],{"class":1283},[40,41668,38170],{"class":63},[40,41670,1299],{"class":50},[40,41672,34174],{"class":8539},[40,41674,1284],{"class":1283},[40,41676,3555],{"class":63},[40,41678,1299],{"class":50},[40,41680,34183],{"class":8539},[40,41682,1284],{"class":1283},[40,41684,3698],{"class":63},[40,41686,41347],{"class":50},[40,41688,41689],{"class":42,"line":5929},[40,41690,41352],{"class":50},[40,41692,41693,41695,41697,41699,41701,41703,41705,41707,41709,41711,41713,41715,41717],{"class":42,"line":5935},[40,41694,41397],{"class":50},[40,41696,34174],{"class":8539},[40,41698,1284],{"class":1283},[40,41700,64],{"class":63},[40,41702,1299],{"class":50},[40,41704,34229],{"class":8539},[40,41706,1284],{"class":1283},[40,41708,64],{"class":63},[40,41710,1299],{"class":50},[40,41712,34183],{"class":8539},[40,41714,1284],{"class":1283},[40,41716,3672],{"class":63},[40,41718,1811],{"class":50},[40,41720,41721],{"class":42,"line":5941},[40,41722,41426],{"class":50},[40,41724,41725],{"class":42,"line":5946},[40,41726,41727],{"class":997},"        # 第四层\n",[40,41729,41730,41732,41735,41737],{"class":42,"line":11270},[40,41731,34145],{"class":63},[40,41733,41734],{"class":50},".block4",[40,41736,1284],{"class":1283},[40,41738,41309],{"class":50},[40,41740,41741,41743,41745,41747,41749,41751,41753,41755,41758,41760,41762,41764,41766,41768,41770,41772,41774],{"class":42,"line":11294},[40,41742,41314],{"class":50},[40,41744,34156],{"class":8539},[40,41746,1284],{"class":1283},[40,41748,38170],{"class":63},[40,41750,1299],{"class":50},[40,41752,34165],{"class":8539},[40,41754,1284],{"class":1283},[40,41756,41757],{"class":63},"512",[40,41759,1299],{"class":50},[40,41761,34174],{"class":8539},[40,41763,1284],{"class":1283},[40,41765,3555],{"class":63},[40,41767,1299],{"class":50},[40,41769,34183],{"class":8539},[40,41771,1284],{"class":1283},[40,41773,3698],{"class":63},[40,41775,41347],{"class":50},[40,41777,41778],{"class":42,"line":11299},[40,41779,41352],{"class":50},[40,41781,41782,41784,41786,41788,41790,41792,41794,41796,41798,41800,41802,41804,41806,41808,41810,41812,41814],{"class":42,"line":11305},[40,41783,41314],{"class":50},[40,41785,34156],{"class":8539},[40,41787,1284],{"class":1283},[40,41789,41757],{"class":63},[40,41791,1299],{"class":50},[40,41793,34165],{"class":8539},[40,41795,1284],{"class":1283},[40,41797,41757],{"class":63},[40,41799,1299],{"class":50},[40,41801,34174],{"class":8539},[40,41803,1284],{"class":1283},[40,41805,3555],{"class":63},[40,41807,1299],{"class":50},[40,41809,34183],{"class":8539},[40,41811,1284],{"class":1283},[40,41813,3698],{"class":63},[40,41815,41347],{"class":50},[40,41817,41818],{"class":42,"line":11332},[40,41819,41352],{"class":50},[40,41821,41822,41824,41826,41828,41830,41832,41834,41836,41838,41840,41842,41844,41846,41848,41850,41852,41854],{"class":42,"line":11337},[40,41823,41314],{"class":50},[40,41825,34156],{"class":8539},[40,41827,1284],{"class":1283},[40,41829,41757],{"class":63},[40,41831,1299],{"class":50},[40,41833,34165],{"class":8539},[40,41835,1284],{"class":1283},[40,41837,41757],{"class":63},[40,41839,1299],{"class":50},[40,41841,34174],{"class":8539},[40,41843,1284],{"class":1283},[40,41845,3555],{"class":63},[40,41847,1299],{"class":50},[40,41849,34183],{"class":8539},[40,41851,1284],{"class":1283},[40,41853,3698],{"class":63},[40,41855,41347],{"class":50},[40,41857,41858],{"class":42,"line":11343},[40,41859,41352],{"class":50},[40,41861,41862,41864,41866,41868,41870,41872,41874,41876,41878,41880,41882,41884,41886],{"class":42,"line":11355},[40,41863,41397],{"class":50},[40,41865,34174],{"class":8539},[40,41867,1284],{"class":1283},[40,41869,64],{"class":63},[40,41871,1299],{"class":50},[40,41873,34229],{"class":8539},[40,41875,1284],{"class":1283},[40,41877,64],{"class":63},[40,41879,1299],{"class":50},[40,41881,34183],{"class":8539},[40,41883,1284],{"class":1283},[40,41885,3672],{"class":63},[40,41887,1811],{"class":50},[40,41889,41890],{"class":42,"line":11367},[40,41891,41426],{"class":50},[40,41893,41894],{"class":42,"line":11379},[40,41895,41896],{"class":997},"        # 第五层\n",[40,41898,41899,41901,41904,41906],{"class":42,"line":13038},[40,41900,34145],{"class":63},[40,41902,41903],{"class":50},".block5",[40,41905,1284],{"class":1283},[40,41907,41309],{"class":50},[40,41909,41910,41912,41914,41916,41918,41920,41922,41924,41926,41928,41930,41932,41934,41936,41938,41940,41942],{"class":42,"line":13063},[40,41911,41314],{"class":50},[40,41913,34156],{"class":8539},[40,41915,1284],{"class":1283},[40,41917,41757],{"class":63},[40,41919,1299],{"class":50},[40,41921,34165],{"class":8539},[40,41923,1284],{"class":1283},[40,41925,41757],{"class":63},[40,41927,1299],{"class":50},[40,41929,34174],{"class":8539},[40,41931,1284],{"class":1283},[40,41933,3555],{"class":63},[40,41935,1299],{"class":50},[40,41937,34183],{"class":8539},[40,41939,1284],{"class":1283},[40,41941,3698],{"class":63},[40,41943,41347],{"class":50},[40,41945,41946],{"class":42,"line":13086},[40,41947,41352],{"class":50},[40,41949,41950,41952,41954,41956,41958,41960,41962,41964,41966,41968,41970,41972,41974,41976,41978,41980,41982],{"class":42,"line":13110},[40,41951,41314],{"class":50},[40,41953,34156],{"class":8539},[40,41955,1284],{"class":1283},[40,41957,41757],{"class":63},[40,41959,1299],{"class":50},[40,41961,34165],{"class":8539},[40,41963,1284],{"class":1283},[40,41965,41757],{"class":63},[40,41967,1299],{"class":50},[40,41969,34174],{"class":8539},[40,41971,1284],{"class":1283},[40,41973,3555],{"class":63},[40,41975,1299],{"class":50},[40,41977,34183],{"class":8539},[40,41979,1284],{"class":1283},[40,41981,3698],{"class":63},[40,41983,41347],{"class":50},[40,41985,41986],{"class":42,"line":13115},[40,41987,41352],{"class":50},[40,41989,41990,41992,41994,41996,41998,42000,42002,42004,42006,42008,42010,42012,42014,42016,42018,42020,42022],{"class":42,"line":13120},[40,41991,41314],{"class":50},[40,41993,34156],{"class":8539},[40,41995,1284],{"class":1283},[40,41997,41757],{"class":63},[40,41999,1299],{"class":50},[40,42001,34165],{"class":8539},[40,42003,1284],{"class":1283},[40,42005,41757],{"class":63},[40,42007,1299],{"class":50},[40,42009,34174],{"class":8539},[40,42011,1284],{"class":1283},[40,42013,3555],{"class":63},[40,42015,1299],{"class":50},[40,42017,34183],{"class":8539},[40,42019,1284],{"class":1283},[40,42021,3698],{"class":63},[40,42023,41347],{"class":50},[40,42025,42026],{"class":42,"line":13125},[40,42027,41352],{"class":50},[40,42029,42030,42032,42034,42036,42038,42040,42042,42044,42046,42048,42050,42052,42054],{"class":42,"line":13134},[40,42031,41397],{"class":50},[40,42033,34174],{"class":8539},[40,42035,1284],{"class":1283},[40,42037,64],{"class":63},[40,42039,1299],{"class":50},[40,42041,34229],{"class":8539},[40,42043,1284],{"class":1283},[40,42045,64],{"class":63},[40,42047,1299],{"class":50},[40,42049,34183],{"class":8539},[40,42051,1284],{"class":1283},[40,42053,3672],{"class":63},[40,42055,1811],{"class":50},[40,42057,42058],{"class":42,"line":13139},[40,42059,41426],{"class":50},[40,42061,42062],{"class":42,"line":13145},[40,42063,42064],{"class":997},"        # 全连接层\n",[40,42066,42067,42069,42072,42074],{"class":42,"line":13166},[40,42068,34145],{"class":63},[40,42070,42071],{"class":50},".block6",[40,42073,1284],{"class":1283},[40,42075,41309],{"class":50},[40,42077,42078],{"class":42,"line":13172},[40,42079,42080],{"class":997},"            # 平展操作\n",[40,42082,42083],{"class":42,"line":13186},[40,42084,42085],{"class":997},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[40,42087,42088],{"class":42,"line":13192},[40,42089,42090],{"class":50},"            nn.Flatten(),\n",[40,42092,42093,42096,42098,42100,42102,42104,42106,42108,42110],{"class":42,"line":13219},[40,42094,42095],{"class":50},"            nn.Linear(",[40,42097,3849],{"class":63},[40,42099,3934],{"class":1283},[40,42101,3849],{"class":63},[40,42103,3934],{"class":1283},[40,42105,41757],{"class":63},[40,42107,1299],{"class":50},[40,42109,38170],{"class":63},[40,42111,41347],{"class":50},[40,42113,42114],{"class":42,"line":13228},[40,42115,41352],{"class":50},[40,42117,42118,42120,42122,42124,42126],{"class":42,"line":13234},[40,42119,42095],{"class":50},[40,42121,38170],{"class":63},[40,42123,1299],{"class":50},[40,42125,35370],{"class":63},[40,42127,41347],{"class":50},[40,42129,42130],{"class":42,"line":13242},[40,42131,41352],{"class":50},[40,42133,42134,42136,42138,42140,42142],{"class":42,"line":13247},[40,42135,42095],{"class":50},[40,42137,35370],{"class":63},[40,42139,1299],{"class":50},[40,42141,3925],{"class":63},[40,42143,1811],{"class":50},[40,42145,42146],{"class":42,"line":19926},[40,42147,41426],{"class":50},[40,42149,42150],{"class":42,"line":19932},[40,42151,1413],{"emptyLinePlaceholder":1412},[40,42153,42154],{"class":42,"line":19955},[40,42155,42156],{"class":997},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[40,42158,42159],{"class":42,"line":19961},[40,42160,42161],{"class":997},"        # 循环遍历模型\n",[40,42163,42164,42166,42169,42171,42174],{"class":42,"line":19984},[40,42165,6727],{"class":1283},[40,42167,42168],{"class":50}," m ",[40,42170,29355],{"class":1283},[40,42172,42173],{"class":63}," self",[40,42175,42176],{"class":50},".modules():\n",[40,42178,42179],{"class":42,"line":19998},[40,42180,42181],{"class":997},"            # print(m)\n",[40,42183,42184,42186,42189],{"class":42,"line":20018},[40,42185,7965],{"class":1283},[40,42187,42188],{"class":63}," isinstance",[40,42190,42191],{"class":50},"(m,nn.Conv2d):\n",[40,42193,42194],{"class":42,"line":20024},[40,42195,42196],{"class":997},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[40,42198,42199,42202,42205,42207,42210],{"class":42,"line":20035},[40,42200,42201],{"class":50},"                nn.init.kaiming_normal_(m.weight,",[40,42203,42204],{"class":8539},"nonlinearity",[40,42206,1284],{"class":1283},[40,42208,42209],{"class":94},"'relu'",[40,42211,1811],{"class":50},[40,42213,42214],{"class":42,"line":20058},[40,42215,42216],{"class":997},"                # 判断b参数是否存在\n",[40,42218,42219,42222,42225,42228,42231,42234],{"class":42,"line":20080},[40,42220,42221],{"class":1283},"                if",[40,42223,42224],{"class":50}," m.bias ",[40,42226,42227],{"class":1283},"is",[40,42229,42230],{"class":1283}," not",[40,42232,42233],{"class":63}," None",[40,42235,332],{"class":50},[40,42237,42238],{"class":42,"line":20085},[40,42239,42240],{"class":997},"                    # 如果参数不存在的化初始化b=0\n",[40,42242,42243,42246,42248],{"class":42,"line":20091},[40,42244,42245],{"class":50},"                    nn.init.constant_(m.bias,",[40,42247,3672],{"class":63},[40,42249,1811],{"class":50},[40,42251,42252],{"class":42,"line":20105},[40,42253,42254],{"class":997},"            # 全连接层初始化\n",[40,42256,42257,42260,42262],{"class":42,"line":20118},[40,42258,42259],{"class":1283},"            elif",[40,42261,42188],{"class":63},[40,42263,42264],{"class":50},"(m,nn.Linear):\n",[40,42266,42267],{"class":42,"line":20123},[40,42268,42269],{"class":997},"                # 这个初始化方法是利用的是正太分布的方式\n",[40,42271,42272],{"class":42,"line":20137},[40,42273,42274],{"class":997},"                # 均值为0，方差为0.01\n",[40,42276,42277,42280,42282,42284,42287],{"class":42,"line":20142},[40,42278,42279],{"class":50},"                nn.init.normal_(m.weight,",[40,42281,3672],{"class":63},[40,42283,1299],{"class":50},[40,42285,42286],{"class":63},"0.01",[40,42288,1811],{"class":50},[40,42290,42291],{"class":42,"line":20148},[40,42292,42293],{"class":997},"                # 初始化b参数\n",[40,42295,42296,42298,42300,42302,42304,42306],{"class":42,"line":20153},[40,42297,42221],{"class":1283},[40,42299,42224],{"class":50},[40,42301,42227],{"class":1283},[40,42303,42230],{"class":1283},[40,42305,42233],{"class":63},[40,42307,332],{"class":50},[40,42309,42310,42312,42314],{"class":42,"line":20167},[40,42311,42245],{"class":50},[40,42313,3672],{"class":63},[40,42315,1811],{"class":50},[40,42317,42318],{"class":42,"line":20172},[40,42319,1413],{"emptyLinePlaceholder":1412},[40,42321,42322],{"class":42,"line":20177},[40,42323,38465],{"class":997},[40,42325,42326,42328,42330],{"class":42,"line":20191},[40,42327,34101],{"class":1283},[40,42329,34393],{"class":596},[40,42331,34396],{"class":50},[40,42333,42334,42336,42338,42340],{"class":42,"line":20203},[40,42335,34401],{"class":50},[40,42337,1284],{"class":1283},[40,42339,34123],{"class":63},[40,42341,42342],{"class":50},".block1(x)\n",[40,42344,42345,42347,42349,42351],{"class":42,"line":20208},[40,42346,34401],{"class":50},[40,42348,1284],{"class":1283},[40,42350,34123],{"class":63},[40,42352,42353],{"class":50},".block2(x)\n",[40,42355,42356,42358,42360,42362],{"class":42,"line":20221},[40,42357,34401],{"class":50},[40,42359,1284],{"class":1283},[40,42361,34123],{"class":63},[40,42363,42364],{"class":50},".block3(x)\n",[40,42366,42367,42369,42371,42373],{"class":42,"line":20226},[40,42368,34401],{"class":50},[40,42370,1284],{"class":1283},[40,42372,34123],{"class":63},[40,42374,42375],{"class":50},".block4(x)\n",[40,42377,42378,42380,42382,42384],{"class":42,"line":20231},[40,42379,34401],{"class":50},[40,42381,1284],{"class":1283},[40,42383,34123],{"class":63},[40,42385,42386],{"class":50},".block5(x)\n",[40,42388,42389,42391,42393,42395],{"class":42,"line":20236},[40,42390,34401],{"class":50},[40,42392,1284],{"class":1283},[40,42394,34123],{"class":63},[40,42396,42397],{"class":50},".block6(x)\n",[40,42399,42400,42402],{"class":42,"line":20249},[40,42401,18074],{"class":1283},[40,42403,34509],{"class":50},[40,42405,42406],{"class":42,"line":20254},[40,42407,1413],{"emptyLinePlaceholder":1412},[40,42409,42410],{"class":42,"line":35933},[40,42411,42412],{"class":997},"# 验证模型\n",[40,42414,42415,42417,42419,42421,42424],{"class":42,"line":35939},[40,42416,4873],{"class":1283},[40,42418,34520],{"class":63},[40,42420,6273],{"class":1283},[40,42422,42423],{"class":94},"'__main__'",[40,42425,332],{"class":50},[40,42427,42428,42430,42432,42434,42436,42438,42440,42442,42444],{"class":42,"line":35945},[40,42429,34537],{"class":50},[40,42431,1284],{"class":1283},[40,42433,33751],{"class":50},[40,42435,34544],{"class":94},[40,42437,5035],{"class":1283},[40,42439,34549],{"class":50},[40,42441,5032],{"class":1283},[40,42443,33776],{"class":94},[40,42445,1811],{"class":50},[40,42447,42448,42450],{"class":42,"line":35951},[40,42449,34599],{"class":63},[40,42451,33785],{"class":50},[40,42453,42454,42456,42458],{"class":42,"line":35957},[40,42455,34589],{"class":50},[40,42457,1284],{"class":1283},[40,42459,42460],{"class":50},"VGG16().to(device)\n",[40,42462,42463,42465,42467,42469,42471,42473,42475,42477],{"class":42,"line":35968},[40,42464,34599],{"class":63},[40,42466,34602],{"class":50},[40,42468,3698],{"class":63},[40,42470,1299],{"class":50},[40,42472,34801],{"class":63},[40,42474,1299],{"class":50},[40,42476,34801],{"class":63},[40,42478,34615],{"class":50},[492,42480,42481],{"start":54},[495,42482,42483],{},"训练代码",[19,42485,42486],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,42488,42489],{},"解决方式:",[19,42491,42492],{},"①权重初始化",[31,42494,42496],{"className":33679,"code":42495,"language":2323,"meta":36,"style":36},"# 权重初始化,保证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",[26,42497,42498,42503,42508,42520,42525,42533,42538,42551,42556,42570,42575,42584,42589,42598,42603,42608,42621,42626,42640],{"__ignoreMap":36},[40,42499,42500],{"class":42,"line":43},[40,42501,42502],{"class":997},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[40,42504,42505],{"class":42,"line":54},[40,42506,42507],{"class":997},"# 循环遍历模型\n",[40,42509,42510,42512,42514,42516,42518],{"class":42,"line":70},[40,42511,6349],{"class":1283},[40,42513,42168],{"class":50},[40,42515,29355],{"class":1283},[40,42517,42173],{"class":63},[40,42519,42176],{"class":50},[40,42521,42522],{"class":42,"line":78},[40,42523,42524],{"class":997},"    # print(m)\n",[40,42526,42527,42529,42531],{"class":42,"line":86},[40,42528,6425],{"class":1283},[40,42530,42188],{"class":63},[40,42532,42191],{"class":50},[40,42534,42535],{"class":42,"line":100},[40,42536,42537],{"class":997},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[40,42539,42540,42543,42545,42547,42549],{"class":42,"line":108},[40,42541,42542],{"class":50},"        nn.init.kaiming_normal_(m.weight,",[40,42544,42204],{"class":8539},[40,42546,1284],{"class":1283},[40,42548,42209],{"class":94},[40,42550,1811],{"class":50},[40,42552,42553],{"class":42,"line":121},[40,42554,42555],{"class":997},"        # 判断b参数是否存在\n",[40,42557,42558,42560,42562,42564,42566,42568],{"class":42,"line":134},[40,42559,5822],{"class":1283},[40,42561,42224],{"class":50},[40,42563,42227],{"class":1283},[40,42565,42230],{"class":1283},[40,42567,42233],{"class":63},[40,42569,332],{"class":50},[40,42571,42572],{"class":42,"line":146},[40,42573,42574],{"class":997},"            # 如果参数不存在的化初始化b=0\n",[40,42576,42577,42580,42582],{"class":42,"line":154},[40,42578,42579],{"class":50},"            nn.init.constant_(m.bias,",[40,42581,3672],{"class":63},[40,42583,1811],{"class":50},[40,42585,42586],{"class":42,"line":162},[40,42587,42588],{"class":997},"    # 全连接层初始化\n",[40,42590,42591,42594,42596],{"class":42,"line":170},[40,42592,42593],{"class":1283},"    elif",[40,42595,42188],{"class":63},[40,42597,42264],{"class":50},[40,42599,42600],{"class":42,"line":183},[40,42601,42602],{"class":997},"        # 这个初始化方法是利用的是正太分布的方式\n",[40,42604,42605],{"class":42,"line":196},[40,42606,42607],{"class":997},"        # 均值为0，方差为0.01\n",[40,42609,42610,42613,42615,42617,42619],{"class":42,"line":204},[40,42611,42612],{"class":50},"        nn.init.normal_(m.weight,",[40,42614,3672],{"class":63},[40,42616,1299],{"class":50},[40,42618,42286],{"class":63},[40,42620,1811],{"class":50},[40,42622,42623],{"class":42,"line":217},[40,42624,42625],{"class":997},"        # 初始化b参数\n",[40,42627,42628,42630,42632,42634,42636,42638],{"class":42,"line":230},[40,42629,5822],{"class":1283},[40,42631,42224],{"class":50},[40,42633,42227],{"class":1283},[40,42635,42230],{"class":1283},[40,42637,42233],{"class":63},[40,42639,332],{"class":50},[40,42641,42642,42644,42646],{"class":42,"line":238},[40,42643,42579],{"class":50},[40,42645,3672],{"class":63},[40,42647,1811],{"class":50},[19,42649,42650],{},"②尽可能地增加批次",[19,42652,42653],{},"训练完整代码：",[31,42655,42656],{"className":33679,"code":41199,"language":2323,"meta":36,"style":36},[26,42657,42658,42664,42674,42684,42694,42698,42714,42722,42740,42744,42748,42758,42794,42798,42834,42838,42866,42870,42874,42884,42920,42924,42960,42964,42992,42996,43000,43010,43046,43050,43086,43090,43126,43130,43158,43162,43166,43176,43212,43216,43252,43256,43292,43296,43324,43328,43332,43342,43378,43382,43418,43422,43458,43462,43490,43494,43498,43508,43512,43516,43520,43540,43544,43556,43560,43572,43576,43580,43584,43588,43600,43604,43612,43616,43628,43632,43646,43650,43658,43662,43670,43674,43678,43690,43694,43708,43716,43720,43724,43732,43742,43752,43762,43772,43782,43792,43798,43802,43806,43818,43838,43844,43852],{"__ignoreMap":36},[40,42659,42660,42662],{"class":42,"line":43},[40,42661,33692],{"class":1283},[40,42663,33695],{"class":50},[40,42665,42666,42668,42670,42672],{"class":42,"line":54},[40,42667,34037],{"class":1283},[40,42669,41214],{"class":50},[40,42671,33692],{"class":1283},[40,42673,41219],{"class":50},[40,42675,42676,42678,42680,42682],{"class":42,"line":70},[40,42677,34037],{"class":1283},[40,42679,34040],{"class":50},[40,42681,33692],{"class":1283},[40,42683,34045],{"class":50},[40,42685,42686,42688,42690,42692],{"class":42,"line":78},[40,42687,34037],{"class":1283},[40,42689,34057],{"class":50},[40,42691,33692],{"class":1283},[40,42693,34062],{"class":50},[40,42695,42696],{"class":42,"line":86},[40,42697,1413],{"emptyLinePlaceholder":1412},[40,42699,42700,42702,42704,42706,42708,42710,42712],{"class":42,"line":100},[40,42701,18016],{"class":1283},[40,42703,41250],{"class":596},[40,42705,3488],{"class":50},[40,42707,34078],{"class":596},[40,42709,4037],{"class":50},[40,42711,34083],{"class":596},[40,42713,34086],{"class":50},[40,42715,42716,42718,42720],{"class":42,"line":108},[40,42717,34101],{"class":1283},[40,42719,34104],{"class":63},[40,42721,34107],{"class":50},[40,42723,42724,42726,42728,42730,42732,42734,42736,42738],{"class":42,"line":121},[40,42725,34117],{"class":63},[40,42727,3488],{"class":50},[40,42729,41277],{"class":63},[40,42731,15757],{"class":50},[40,42733,34123],{"class":63},[40,42735,34126],{"class":50},[40,42737,34129],{"class":63},[40,42739,5302],{"class":50},[40,42741,42742],{"class":42,"line":134},[40,42743,41292],{"class":997},[40,42745,42746],{"class":42,"line":146},[40,42747,41297],{"class":997},[40,42749,42750,42752,42754,42756],{"class":42,"line":154},[40,42751,34145],{"class":63},[40,42753,41304],{"class":50},[40,42755,1284],{"class":1283},[40,42757,41309],{"class":50},[40,42759,42760,42762,42764,42766,42768,42770,42772,42774,42776,42778,42780,42782,42784,42786,42788,42790,42792],{"class":42,"line":162},[40,42761,41314],{"class":50},[40,42763,34156],{"class":8539},[40,42765,1284],{"class":1283},[40,42767,3698],{"class":63},[40,42769,1299],{"class":50},[40,42771,34165],{"class":8539},[40,42773,1284],{"class":1283},[40,42775,3684],{"class":63},[40,42777,1299],{"class":50},[40,42779,34174],{"class":8539},[40,42781,1284],{"class":1283},[40,42783,3555],{"class":63},[40,42785,1299],{"class":50},[40,42787,34183],{"class":8539},[40,42789,1284],{"class":1283},[40,42791,3698],{"class":63},[40,42793,41347],{"class":50},[40,42795,42796],{"class":42,"line":170},[40,42797,41352],{"class":50},[40,42799,42800,42802,42804,42806,42808,42810,42812,42814,42816,42818,42820,42822,42824,42826,42828,42830,42832],{"class":42,"line":183},[40,42801,41314],{"class":50},[40,42803,34156],{"class":8539},[40,42805,1284],{"class":1283},[40,42807,3684],{"class":63},[40,42809,1299],{"class":50},[40,42811,34165],{"class":8539},[40,42813,1284],{"class":1283},[40,42815,3684],{"class":63},[40,42817,1299],{"class":50},[40,42819,34174],{"class":8539},[40,42821,1284],{"class":1283},[40,42823,3555],{"class":63},[40,42825,1299],{"class":50},[40,42827,34183],{"class":8539},[40,42829,1284],{"class":1283},[40,42831,3698],{"class":63},[40,42833,41347],{"class":50},[40,42835,42836],{"class":42,"line":196},[40,42837,41352],{"class":50},[40,42839,42840,42842,42844,42846,42848,42850,42852,42854,42856,42858,42860,42862,42864],{"class":42,"line":204},[40,42841,41397],{"class":50},[40,42843,34174],{"class":8539},[40,42845,1284],{"class":1283},[40,42847,64],{"class":63},[40,42849,1299],{"class":50},[40,42851,34229],{"class":8539},[40,42853,1284],{"class":1283},[40,42855,64],{"class":63},[40,42857,1299],{"class":50},[40,42859,34183],{"class":8539},[40,42861,1284],{"class":1283},[40,42863,3672],{"class":63},[40,42865,1811],{"class":50},[40,42867,42868],{"class":42,"line":217},[40,42869,41426],{"class":50},[40,42871,42872],{"class":42,"line":230},[40,42873,41431],{"class":997},[40,42875,42876,42878,42880,42882],{"class":42,"line":238},[40,42877,34145],{"class":63},[40,42879,41438],{"class":50},[40,42881,1284],{"class":1283},[40,42883,41309],{"class":50},[40,42885,42886,42888,42890,42892,42894,42896,42898,42900,42902,42904,42906,42908,42910,42912,42914,42916,42918],{"class":42,"line":251},[40,42887,41314],{"class":50},[40,42889,34156],{"class":8539},[40,42891,1284],{"class":1283},[40,42893,3684],{"class":63},[40,42895,1299],{"class":50},[40,42897,34165],{"class":8539},[40,42899,1284],{"class":1283},[40,42901,35370],{"class":63},[40,42903,1299],{"class":50},[40,42905,34174],{"class":8539},[40,42907,1284],{"class":1283},[40,42909,3555],{"class":63},[40,42911,1299],{"class":50},[40,42913,34183],{"class":8539},[40,42915,1284],{"class":1283},[40,42917,3698],{"class":63},[40,42919,41347],{"class":50},[40,42921,42922],{"class":42,"line":264},[40,42923,41352],{"class":50},[40,42925,42926,42928,42930,42932,42934,42936,42938,42940,42942,42944,42946,42948,42950,42952,42954,42956,42958],{"class":42,"line":277},[40,42927,41314],{"class":50},[40,42929,34156],{"class":8539},[40,42931,1284],{"class":1283},[40,42933,35370],{"class":63},[40,42935,1299],{"class":50},[40,42937,34165],{"class":8539},[40,42939,1284],{"class":1283},[40,42941,35370],{"class":63},[40,42943,1299],{"class":50},[40,42945,34174],{"class":8539},[40,42947,1284],{"class":1283},[40,42949,3555],{"class":63},[40,42951,1299],{"class":50},[40,42953,34183],{"class":8539},[40,42955,1284],{"class":1283},[40,42957,3698],{"class":63},[40,42959,41347],{"class":50},[40,42961,42962],{"class":42,"line":290},[40,42963,41352],{"class":50},[40,42965,42966,42968,42970,42972,42974,42976,42978,42980,42982,42984,42986,42988,42990],{"class":42,"line":298},[40,42967,41397],{"class":50},[40,42969,34174],{"class":8539},[40,42971,1284],{"class":1283},[40,42973,64],{"class":63},[40,42975,1299],{"class":50},[40,42977,34229],{"class":8539},[40,42979,1284],{"class":1283},[40,42981,64],{"class":63},[40,42983,1299],{"class":50},[40,42985,34183],{"class":8539},[40,42987,1284],{"class":1283},[40,42989,3672],{"class":63},[40,42991,1811],{"class":50},[40,42993,42994],{"class":42,"line":310},[40,42995,41426],{"class":50},[40,42997,42998],{"class":42,"line":5086},[40,42999,41559],{"class":997},[40,43001,43002,43004,43006,43008],{"class":42,"line":5091},[40,43003,34145],{"class":63},[40,43005,41566],{"class":50},[40,43007,1284],{"class":1283},[40,43009,41309],{"class":50},[40,43011,43012,43014,43016,43018,43020,43022,43024,43026,43028,43030,43032,43034,43036,43038,43040,43042,43044],{"class":42,"line":5105},[40,43013,41314],{"class":50},[40,43015,34156],{"class":8539},[40,43017,1284],{"class":1283},[40,43019,35370],{"class":63},[40,43021,1299],{"class":50},[40,43023,34165],{"class":8539},[40,43025,1284],{"class":1283},[40,43027,38170],{"class":63},[40,43029,1299],{"class":50},[40,43031,34174],{"class":8539},[40,43033,1284],{"class":1283},[40,43035,3555],{"class":63},[40,43037,1299],{"class":50},[40,43039,34183],{"class":8539},[40,43041,1284],{"class":1283},[40,43043,3698],{"class":63},[40,43045,41347],{"class":50},[40,43047,43048],{"class":42,"line":5110},[40,43049,41352],{"class":50},[40,43051,43052,43054,43056,43058,43060,43062,43064,43066,43068,43070,43072,43074,43076,43078,43080,43082,43084],{"class":42,"line":5902},[40,43053,41314],{"class":50},[40,43055,34156],{"class":8539},[40,43057,1284],{"class":1283},[40,43059,38170],{"class":63},[40,43061,1299],{"class":50},[40,43063,34165],{"class":8539},[40,43065,1284],{"class":1283},[40,43067,38170],{"class":63},[40,43069,1299],{"class":50},[40,43071,34174],{"class":8539},[40,43073,1284],{"class":1283},[40,43075,3555],{"class":63},[40,43077,1299],{"class":50},[40,43079,34183],{"class":8539},[40,43081,1284],{"class":1283},[40,43083,3698],{"class":63},[40,43085,41347],{"class":50},[40,43087,43088],{"class":42,"line":5916},[40,43089,41352],{"class":50},[40,43091,43092,43094,43096,43098,43100,43102,43104,43106,43108,43110,43112,43114,43116,43118,43120,43122,43124],{"class":42,"line":5924},[40,43093,41314],{"class":50},[40,43095,34156],{"class":8539},[40,43097,1284],{"class":1283},[40,43099,38170],{"class":63},[40,43101,1299],{"class":50},[40,43103,34165],{"class":8539},[40,43105,1284],{"class":1283},[40,43107,38170],{"class":63},[40,43109,1299],{"class":50},[40,43111,34174],{"class":8539},[40,43113,1284],{"class":1283},[40,43115,3555],{"class":63},[40,43117,1299],{"class":50},[40,43119,34183],{"class":8539},[40,43121,1284],{"class":1283},[40,43123,3698],{"class":63},[40,43125,41347],{"class":50},[40,43127,43128],{"class":42,"line":5929},[40,43129,41352],{"class":50},[40,43131,43132,43134,43136,43138,43140,43142,43144,43146,43148,43150,43152,43154,43156],{"class":42,"line":5935},[40,43133,41397],{"class":50},[40,43135,34174],{"class":8539},[40,43137,1284],{"class":1283},[40,43139,64],{"class":63},[40,43141,1299],{"class":50},[40,43143,34229],{"class":8539},[40,43145,1284],{"class":1283},[40,43147,64],{"class":63},[40,43149,1299],{"class":50},[40,43151,34183],{"class":8539},[40,43153,1284],{"class":1283},[40,43155,3672],{"class":63},[40,43157,1811],{"class":50},[40,43159,43160],{"class":42,"line":5941},[40,43161,41426],{"class":50},[40,43163,43164],{"class":42,"line":5946},[40,43165,41727],{"class":997},[40,43167,43168,43170,43172,43174],{"class":42,"line":11270},[40,43169,34145],{"class":63},[40,43171,41734],{"class":50},[40,43173,1284],{"class":1283},[40,43175,41309],{"class":50},[40,43177,43178,43180,43182,43184,43186,43188,43190,43192,43194,43196,43198,43200,43202,43204,43206,43208,43210],{"class":42,"line":11294},[40,43179,41314],{"class":50},[40,43181,34156],{"class":8539},[40,43183,1284],{"class":1283},[40,43185,38170],{"class":63},[40,43187,1299],{"class":50},[40,43189,34165],{"class":8539},[40,43191,1284],{"class":1283},[40,43193,41757],{"class":63},[40,43195,1299],{"class":50},[40,43197,34174],{"class":8539},[40,43199,1284],{"class":1283},[40,43201,3555],{"class":63},[40,43203,1299],{"class":50},[40,43205,34183],{"class":8539},[40,43207,1284],{"class":1283},[40,43209,3698],{"class":63},[40,43211,41347],{"class":50},[40,43213,43214],{"class":42,"line":11299},[40,43215,41352],{"class":50},[40,43217,43218,43220,43222,43224,43226,43228,43230,43232,43234,43236,43238,43240,43242,43244,43246,43248,43250],{"class":42,"line":11305},[40,43219,41314],{"class":50},[40,43221,34156],{"class":8539},[40,43223,1284],{"class":1283},[40,43225,41757],{"class":63},[40,43227,1299],{"class":50},[40,43229,34165],{"class":8539},[40,43231,1284],{"class":1283},[40,43233,41757],{"class":63},[40,43235,1299],{"class":50},[40,43237,34174],{"class":8539},[40,43239,1284],{"class":1283},[40,43241,3555],{"class":63},[40,43243,1299],{"class":50},[40,43245,34183],{"class":8539},[40,43247,1284],{"class":1283},[40,43249,3698],{"class":63},[40,43251,41347],{"class":50},[40,43253,43254],{"class":42,"line":11332},[40,43255,41352],{"class":50},[40,43257,43258,43260,43262,43264,43266,43268,43270,43272,43274,43276,43278,43280,43282,43284,43286,43288,43290],{"class":42,"line":11337},[40,43259,41314],{"class":50},[40,43261,34156],{"class":8539},[40,43263,1284],{"class":1283},[40,43265,41757],{"class":63},[40,43267,1299],{"class":50},[40,43269,34165],{"class":8539},[40,43271,1284],{"class":1283},[40,43273,41757],{"class":63},[40,43275,1299],{"class":50},[40,43277,34174],{"class":8539},[40,43279,1284],{"class":1283},[40,43281,3555],{"class":63},[40,43283,1299],{"class":50},[40,43285,34183],{"class":8539},[40,43287,1284],{"class":1283},[40,43289,3698],{"class":63},[40,43291,41347],{"class":50},[40,43293,43294],{"class":42,"line":11343},[40,43295,41352],{"class":50},[40,43297,43298,43300,43302,43304,43306,43308,43310,43312,43314,43316,43318,43320,43322],{"class":42,"line":11355},[40,43299,41397],{"class":50},[40,43301,34174],{"class":8539},[40,43303,1284],{"class":1283},[40,43305,64],{"class":63},[40,43307,1299],{"class":50},[40,43309,34229],{"class":8539},[40,43311,1284],{"class":1283},[40,43313,64],{"class":63},[40,43315,1299],{"class":50},[40,43317,34183],{"class":8539},[40,43319,1284],{"class":1283},[40,43321,3672],{"class":63},[40,43323,1811],{"class":50},[40,43325,43326],{"class":42,"line":11367},[40,43327,41426],{"class":50},[40,43329,43330],{"class":42,"line":11379},[40,43331,41896],{"class":997},[40,43333,43334,43336,43338,43340],{"class":42,"line":13038},[40,43335,34145],{"class":63},[40,43337,41903],{"class":50},[40,43339,1284],{"class":1283},[40,43341,41309],{"class":50},[40,43343,43344,43346,43348,43350,43352,43354,43356,43358,43360,43362,43364,43366,43368,43370,43372,43374,43376],{"class":42,"line":13063},[40,43345,41314],{"class":50},[40,43347,34156],{"class":8539},[40,43349,1284],{"class":1283},[40,43351,41757],{"class":63},[40,43353,1299],{"class":50},[40,43355,34165],{"class":8539},[40,43357,1284],{"class":1283},[40,43359,41757],{"class":63},[40,43361,1299],{"class":50},[40,43363,34174],{"class":8539},[40,43365,1284],{"class":1283},[40,43367,3555],{"class":63},[40,43369,1299],{"class":50},[40,43371,34183],{"class":8539},[40,43373,1284],{"class":1283},[40,43375,3698],{"class":63},[40,43377,41347],{"class":50},[40,43379,43380],{"class":42,"line":13086},[40,43381,41352],{"class":50},[40,43383,43384,43386,43388,43390,43392,43394,43396,43398,43400,43402,43404,43406,43408,43410,43412,43414,43416],{"class":42,"line":13110},[40,43385,41314],{"class":50},[40,43387,34156],{"class":8539},[40,43389,1284],{"class":1283},[40,43391,41757],{"class":63},[40,43393,1299],{"class":50},[40,43395,34165],{"class":8539},[40,43397,1284],{"class":1283},[40,43399,41757],{"class":63},[40,43401,1299],{"class":50},[40,43403,34174],{"class":8539},[40,43405,1284],{"class":1283},[40,43407,3555],{"class":63},[40,43409,1299],{"class":50},[40,43411,34183],{"class":8539},[40,43413,1284],{"class":1283},[40,43415,3698],{"class":63},[40,43417,41347],{"class":50},[40,43419,43420],{"class":42,"line":13115},[40,43421,41352],{"class":50},[40,43423,43424,43426,43428,43430,43432,43434,43436,43438,43440,43442,43444,43446,43448,43450,43452,43454,43456],{"class":42,"line":13120},[40,43425,41314],{"class":50},[40,43427,34156],{"class":8539},[40,43429,1284],{"class":1283},[40,43431,41757],{"class":63},[40,43433,1299],{"class":50},[40,43435,34165],{"class":8539},[40,43437,1284],{"class":1283},[40,43439,41757],{"class":63},[40,43441,1299],{"class":50},[40,43443,34174],{"class":8539},[40,43445,1284],{"class":1283},[40,43447,3555],{"class":63},[40,43449,1299],{"class":50},[40,43451,34183],{"class":8539},[40,43453,1284],{"class":1283},[40,43455,3698],{"class":63},[40,43457,41347],{"class":50},[40,43459,43460],{"class":42,"line":13125},[40,43461,41352],{"class":50},[40,43463,43464,43466,43468,43470,43472,43474,43476,43478,43480,43482,43484,43486,43488],{"class":42,"line":13134},[40,43465,41397],{"class":50},[40,43467,34174],{"class":8539},[40,43469,1284],{"class":1283},[40,43471,64],{"class":63},[40,43473,1299],{"class":50},[40,43475,34229],{"class":8539},[40,43477,1284],{"class":1283},[40,43479,64],{"class":63},[40,43481,1299],{"class":50},[40,43483,34183],{"class":8539},[40,43485,1284],{"class":1283},[40,43487,3672],{"class":63},[40,43489,1811],{"class":50},[40,43491,43492],{"class":42,"line":13139},[40,43493,41426],{"class":50},[40,43495,43496],{"class":42,"line":13145},[40,43497,42064],{"class":997},[40,43499,43500,43502,43504,43506],{"class":42,"line":13166},[40,43501,34145],{"class":63},[40,43503,42071],{"class":50},[40,43505,1284],{"class":1283},[40,43507,41309],{"class":50},[40,43509,43510],{"class":42,"line":13172},[40,43511,42080],{"class":997},[40,43513,43514],{"class":42,"line":13186},[40,43515,42085],{"class":997},[40,43517,43518],{"class":42,"line":13192},[40,43519,42090],{"class":50},[40,43521,43522,43524,43526,43528,43530,43532,43534,43536,43538],{"class":42,"line":13219},[40,43523,42095],{"class":50},[40,43525,3849],{"class":63},[40,43527,3934],{"class":1283},[40,43529,3849],{"class":63},[40,43531,3934],{"class":1283},[40,43533,41757],{"class":63},[40,43535,1299],{"class":50},[40,43537,38170],{"class":63},[40,43539,41347],{"class":50},[40,43541,43542],{"class":42,"line":13228},[40,43543,41352],{"class":50},[40,43545,43546,43548,43550,43552,43554],{"class":42,"line":13234},[40,43547,42095],{"class":50},[40,43549,38170],{"class":63},[40,43551,1299],{"class":50},[40,43553,35370],{"class":63},[40,43555,41347],{"class":50},[40,43557,43558],{"class":42,"line":13242},[40,43559,41352],{"class":50},[40,43561,43562,43564,43566,43568,43570],{"class":42,"line":13247},[40,43563,42095],{"class":50},[40,43565,35370],{"class":63},[40,43567,1299],{"class":50},[40,43569,3925],{"class":63},[40,43571,1811],{"class":50},[40,43573,43574],{"class":42,"line":19926},[40,43575,41426],{"class":50},[40,43577,43578],{"class":42,"line":19932},[40,43579,1413],{"emptyLinePlaceholder":1412},[40,43581,43582],{"class":42,"line":19955},[40,43583,42156],{"class":997},[40,43585,43586],{"class":42,"line":19961},[40,43587,42161],{"class":997},[40,43589,43590,43592,43594,43596,43598],{"class":42,"line":19984},[40,43591,6727],{"class":1283},[40,43593,42168],{"class":50},[40,43595,29355],{"class":1283},[40,43597,42173],{"class":63},[40,43599,42176],{"class":50},[40,43601,43602],{"class":42,"line":19998},[40,43603,42181],{"class":997},[40,43605,43606,43608,43610],{"class":42,"line":20018},[40,43607,7965],{"class":1283},[40,43609,42188],{"class":63},[40,43611,42191],{"class":50},[40,43613,43614],{"class":42,"line":20024},[40,43615,42196],{"class":997},[40,43617,43618,43620,43622,43624,43626],{"class":42,"line":20035},[40,43619,42201],{"class":50},[40,43621,42204],{"class":8539},[40,43623,1284],{"class":1283},[40,43625,42209],{"class":94},[40,43627,1811],{"class":50},[40,43629,43630],{"class":42,"line":20058},[40,43631,42216],{"class":997},[40,43633,43634,43636,43638,43640,43642,43644],{"class":42,"line":20080},[40,43635,42221],{"class":1283},[40,43637,42224],{"class":50},[40,43639,42227],{"class":1283},[40,43641,42230],{"class":1283},[40,43643,42233],{"class":63},[40,43645,332],{"class":50},[40,43647,43648],{"class":42,"line":20085},[40,43649,42240],{"class":997},[40,43651,43652,43654,43656],{"class":42,"line":20091},[40,43653,42245],{"class":50},[40,43655,3672],{"class":63},[40,43657,1811],{"class":50},[40,43659,43660],{"class":42,"line":20105},[40,43661,42254],{"class":997},[40,43663,43664,43666,43668],{"class":42,"line":20118},[40,43665,42259],{"class":1283},[40,43667,42188],{"class":63},[40,43669,42264],{"class":50},[40,43671,43672],{"class":42,"line":20123},[40,43673,42269],{"class":997},[40,43675,43676],{"class":42,"line":20137},[40,43677,42274],{"class":997},[40,43679,43680,43682,43684,43686,43688],{"class":42,"line":20142},[40,43681,42279],{"class":50},[40,43683,3672],{"class":63},[40,43685,1299],{"class":50},[40,43687,42286],{"class":63},[40,43689,1811],{"class":50},[40,43691,43692],{"class":42,"line":20148},[40,43693,42293],{"class":997},[40,43695,43696,43698,43700,43702,43704,43706],{"class":42,"line":20153},[40,43697,42221],{"class":1283},[40,43699,42224],{"class":50},[40,43701,42227],{"class":1283},[40,43703,42230],{"class":1283},[40,43705,42233],{"class":63},[40,43707,332],{"class":50},[40,43709,43710,43712,43714],{"class":42,"line":20167},[40,43711,42245],{"class":50},[40,43713,3672],{"class":63},[40,43715,1811],{"class":50},[40,43717,43718],{"class":42,"line":20172},[40,43719,1413],{"emptyLinePlaceholder":1412},[40,43721,43722],{"class":42,"line":20177},[40,43723,38465],{"class":997},[40,43725,43726,43728,43730],{"class":42,"line":20191},[40,43727,34101],{"class":1283},[40,43729,34393],{"class":596},[40,43731,34396],{"class":50},[40,43733,43734,43736,43738,43740],{"class":42,"line":20203},[40,43735,34401],{"class":50},[40,43737,1284],{"class":1283},[40,43739,34123],{"class":63},[40,43741,42342],{"class":50},[40,43743,43744,43746,43748,43750],{"class":42,"line":20208},[40,43745,34401],{"class":50},[40,43747,1284],{"class":1283},[40,43749,34123],{"class":63},[40,43751,42353],{"class":50},[40,43753,43754,43756,43758,43760],{"class":42,"line":20221},[40,43755,34401],{"class":50},[40,43757,1284],{"class":1283},[40,43759,34123],{"class":63},[40,43761,42364],{"class":50},[40,43763,43764,43766,43768,43770],{"class":42,"line":20226},[40,43765,34401],{"class":50},[40,43767,1284],{"class":1283},[40,43769,34123],{"class":63},[40,43771,42375],{"class":50},[40,43773,43774,43776,43778,43780],{"class":42,"line":20231},[40,43775,34401],{"class":50},[40,43777,1284],{"class":1283},[40,43779,34123],{"class":63},[40,43781,42386],{"class":50},[40,43783,43784,43786,43788,43790],{"class":42,"line":20236},[40,43785,34401],{"class":50},[40,43787,1284],{"class":1283},[40,43789,34123],{"class":63},[40,43791,42397],{"class":50},[40,43793,43794,43796],{"class":42,"line":20249},[40,43795,18074],{"class":1283},[40,43797,34509],{"class":50},[40,43799,43800],{"class":42,"line":20254},[40,43801,1413],{"emptyLinePlaceholder":1412},[40,43803,43804],{"class":42,"line":35933},[40,43805,42412],{"class":997},[40,43807,43808,43810,43812,43814,43816],{"class":42,"line":35939},[40,43809,4873],{"class":1283},[40,43811,34520],{"class":63},[40,43813,6273],{"class":1283},[40,43815,42423],{"class":94},[40,43817,332],{"class":50},[40,43819,43820,43822,43824,43826,43828,43830,43832,43834,43836],{"class":42,"line":35945},[40,43821,34537],{"class":50},[40,43823,1284],{"class":1283},[40,43825,33751],{"class":50},[40,43827,34544],{"class":94},[40,43829,5035],{"class":1283},[40,43831,34549],{"class":50},[40,43833,5032],{"class":1283},[40,43835,33776],{"class":94},[40,43837,1811],{"class":50},[40,43839,43840,43842],{"class":42,"line":35951},[40,43841,34599],{"class":63},[40,43843,33785],{"class":50},[40,43845,43846,43848,43850],{"class":42,"line":35957},[40,43847,34589],{"class":50},[40,43849,1284],{"class":1283},[40,43851,42460],{"class":50},[40,43853,43854,43856,43858,43860,43862,43864,43866,43868],{"class":42,"line":35968},[40,43855,34599],{"class":63},[40,43857,34602],{"class":50},[40,43859,3698],{"class":63},[40,43861,1299],{"class":50},[40,43863,34801],{"class":63},[40,43865,1299],{"class":50},[40,43867,34801],{"class":63},[40,43869,34615],{"class":50},[492,43871,43872],{"start":70},[495,43873,43874],{},"测试代码",[31,43876,43878],{"className":33679,"code":43877,"language":2323,"meta":36,"style":36},"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",[26,43879,43880,43886,43896,43906,43910,43920,43931,43935,43939,43943,43951,43967,43977,43993,44003,44017,44021,44031,44041,44051,44057,44061,44065,44073,44077,44093,44101,44105,44109,44117,44125,44129,44133,44137,44141,44147,44151,44161,44169,44177,44181,44185,44189,44197,44201,44217,44221,44225,44229,44241,44245,44257,44261,44265,44277,44281,44291,44295,44299,44311,44315,44324,44328,44332,44340,44344,44352,44356,44360,44364,44368,44372,44388,44396,44400,44404,44452,44458,44462,44472,44480,44488,44492,44496,44500,44504,44512,44516,44532,44536,44544,44552],{"__ignoreMap":36},[40,43881,43882,43884],{"class":42,"line":43},[40,43883,33692],{"class":1283},[40,43885,33695],{"class":50},[40,43887,43888,43890,43892,43894],{"class":42,"line":54},[40,43889,33692],{"class":1283},[40,43891,34715],{"class":50},[40,43893,34683],{"class":1283},[40,43895,34720],{"class":50},[40,43897,43898,43900,43902,43904],{"class":42,"line":70},[40,43899,34037],{"class":1283},[40,43901,34698],{"class":50},[40,43903,33692],{"class":1283},[40,43905,34703],{"class":50},[40,43907,43908],{"class":42,"line":78},[40,43909,37222],{"class":997},[40,43911,43912,43914,43916,43918],{"class":42,"line":86},[40,43913,34037],{"class":1283},[40,43915,34668],{"class":50},[40,43917,33692],{"class":1283},[40,43919,34673],{"class":50},[40,43921,43922,43924,43926,43928],{"class":42,"line":100},[40,43923,34037],{"class":1283},[40,43925,35214],{"class":50},[40,43927,33692],{"class":1283},[40,43929,43930],{"class":63}," VGG16\n",[40,43932,43933],{"class":42,"line":108},[40,43934,1413],{"emptyLinePlaceholder":1412},[40,43936,43937],{"class":42,"line":121},[40,43938,1413],{"emptyLinePlaceholder":1412},[40,43940,43941],{"class":42,"line":134},[40,43942,37251],{"class":997},[40,43944,43945,43947,43949],{"class":42,"line":146},[40,43946,35247],{"class":1283},[40,43948,37258],{"class":596},[40,43950,35253],{"class":50},[40,43952,43953,43955,43957,43959,43961,43963,43965],{"class":42,"line":154},[40,43954,37265],{"class":50},[40,43956,1284],{"class":1283},[40,43958,34755],{"class":50},[40,43960,34758],{"class":8539},[40,43962,1284],{"class":1283},[40,43964,34763],{"class":94},[40,43966,34766],{"class":50},[40,43968,43969,43971,43973,43975],{"class":42,"line":162},[40,43970,37282],{"class":8539},[40,43972,1284],{"class":1283},[40,43974,37287],{"class":63},[40,43976,34766],{"class":50},[40,43978,43979,43981,43983,43985,43987,43989,43991],{"class":42,"line":170},[40,43980,37294],{"class":8539},[40,43982,1284],{"class":1283},[40,43984,34793],{"class":50},[40,43986,34796],{"class":8539},[40,43988,1284],{"class":1283},[40,43990,34801],{"class":63},[40,43992,34804],{"class":50},[40,43994,43995,43997,43999,44001],{"class":42,"line":183},[40,43996,37311],{"class":8539},[40,43998,1284],{"class":1283},[40,44000,34776],{"class":63},[40,44002,1811],{"class":50},[40,44004,44005,44007,44009,44011,44013,44015],{"class":42,"line":196},[40,44006,37322],{"class":50},[40,44008,1284],{"class":1283},[40,44010,34834],{"class":50},[40,44012,34837],{"class":8539},[40,44014,1284],{"class":1283},[40,44016,37333],{"class":50},[40,44018,44019],{"class":42,"line":204},[40,44020,37338],{"class":997},[40,44022,44023,44025,44027,44029],{"class":42,"line":217},[40,44024,37343],{"class":8539},[40,44026,1284],{"class":1283},[40,44028,3698],{"class":63},[40,44030,34766],{"class":50},[40,44032,44033,44035,44037,44039],{"class":42,"line":230},[40,44034,37354],{"class":8539},[40,44036,1284],{"class":1283},[40,44038,34776],{"class":63},[40,44040,34766],{"class":50},[40,44042,44043,44045,44047,44049],{"class":42,"line":238},[40,44044,37365],{"class":8539},[40,44046,1284],{"class":1283},[40,44048,3672],{"class":63},[40,44050,1811],{"class":50},[40,44052,44053,44055],{"class":42,"line":251},[40,44054,7413],{"class":1283},[40,44056,37378],{"class":50},[40,44058,44059],{"class":42,"line":264},[40,44060,1413],{"emptyLinePlaceholder":1412},[40,44062,44063],{"class":42,"line":277},[40,44064,37387],{"class":997},[40,44066,44067,44069,44071],{"class":42,"line":290},[40,44068,35247],{"class":1283},[40,44070,37394],{"class":596},[40,44072,37397],{"class":50},[40,44074,44075],{"class":42,"line":298},[40,44076,37402],{"class":997},[40,44078,44079,44081,44083,44085,44087,44089,44091],{"class":42,"line":310},[40,44080,34537],{"class":50},[40,44082,1284],{"class":1283},[40,44084,34544],{"class":94},[40,44086,5035],{"class":1283},[40,44088,34549],{"class":50},[40,44090,5032],{"class":1283},[40,44092,37419],{"class":94},[40,44094,44095,44097,44099],{"class":42,"line":5086},[40,44096,34589],{"class":50},[40,44098,1284],{"class":1283},[40,44100,35589],{"class":50},[40,44102,44103],{"class":42,"line":5091},[40,44104,1413],{"emptyLinePlaceholder":1412},[40,44106,44107],{"class":42,"line":5105},[40,44108,37436],{"class":997},[40,44110,44111,44113,44115],{"class":42,"line":5110},[40,44112,37441],{"class":50},[40,44114,1284],{"class":1283},[40,44116,35642],{"class":63},[40,44118,44119,44121,44123],{"class":42,"line":5902},[40,44120,37450],{"class":50},[40,44122,1284],{"class":1283},[40,44124,6409],{"class":63},[40,44126,44127],{"class":42,"line":5916},[40,44128,1413],{"emptyLinePlaceholder":1412},[40,44130,44131],{"class":42,"line":5924},[40,44132,37463],{"class":997},[40,44134,44135],{"class":42,"line":5929},[40,44136,37468],{"class":997},[40,44138,44139],{"class":42,"line":5935},[40,44140,37473],{"class":997},[40,44142,44143,44145],{"class":42,"line":5941},[40,44144,37478],{"class":1283},[40,44146,36184],{"class":50},[40,44148,44149],{"class":42,"line":5946},[40,44150,37485],{"class":997},[40,44152,44153,44155,44157,44159],{"class":42,"line":11270},[40,44154,6727],{"class":1283},[40,44156,37492],{"class":50},[40,44158,29355],{"class":1283},[40,44160,37497],{"class":50},[40,44162,44163,44165,44167],{"class":42,"line":11294},[40,44164,37502],{"class":50},[40,44166,1284],{"class":1283},[40,44168,37507],{"class":50},[40,44170,44171,44173,44175],{"class":42,"line":11299},[40,44172,37512],{"class":50},[40,44174,1284],{"class":1283},[40,44176,37517],{"class":50},[40,44178,44179],{"class":42,"line":11305},[40,44180,37522],{"class":997},[40,44182,44183],{"class":42,"line":11332},[40,44184,36175],{"class":50},[40,44186,44187],{"class":42,"line":11337},[40,44188,37531],{"class":997},[40,44190,44191,44193,44195],{"class":42,"line":11343},[40,44192,35960],{"class":50},[40,44194,1284],{"class":1283},[40,44196,37540],{"class":50},[40,44198,44199],{"class":42,"line":11355},[40,44200,37545],{"class":997},[40,44202,44203,44205,44207,44209,44211,44213,44215],{"class":42,"line":11367},[40,44204,35977],{"class":50},[40,44206,1284],{"class":1283},[40,44208,35982],{"class":50},[40,44210,35985],{"class":8539},[40,44212,1284],{"class":1283},[40,44214,3698],{"class":63},[40,44216,1811],{"class":50},[40,44218,44219],{"class":42,"line":11379},[40,44220,37566],{"class":997},[40,44222,44223],{"class":42,"line":13038},[40,44224,37571],{"class":997},[40,44226,44227],{"class":42,"line":13063},[40,44228,37576],{"class":997},[40,44230,44231,44233,44235,44237,44239],{"class":42,"line":13086},[40,44232,37581],{"class":50},[40,44234,12799],{"class":1283},[40,44236,36087],{"class":50},[40,44238,6273],{"class":1283},[40,44240,37590],{"class":50},[40,44242,44243],{"class":42,"line":13110},[40,44244,37595],{"class":997},[40,44246,44247,44249,44251,44253,44255],{"class":42,"line":13115},[40,44248,37600],{"class":50},[40,44250,12799],{"class":1283},[40,44252,37605],{"class":50},[40,44254,3672],{"class":63},[40,44256,1811],{"class":50},[40,44258,44259],{"class":42,"line":13120},[40,44260,1413],{"emptyLinePlaceholder":1412},[40,44262,44263],{"class":42,"line":13125},[40,44264,37618],{"class":997},[40,44266,44267,44269,44271,44273,44275],{"class":42,"line":13134},[40,44268,37623],{"class":50},[40,44270,1284],{"class":1283},[40,44272,37628],{"class":50},[40,44274,4063],{"class":1283},[40,44276,37633],{"class":50},[40,44278,44279],{"class":42,"line":13139},[40,44280,37638],{"class":997},[40,44282,44283,44285,44287,44289],{"class":42,"line":13145},[40,44284,35751],{"class":63},[40,44286,3488],{"class":50},[40,44288,37647],{"class":94},[40,44290,37650],{"class":50},[40,44292,44293],{"class":42,"line":13166},[40,44294,1413],{"emptyLinePlaceholder":1412},[40,44296,44297],{"class":42,"line":13172},[40,44298,37659],{"class":997},[40,44300,44301,44303,44305,44307,44309],{"class":42,"line":13186},[40,44302,4873],{"class":1283},[40,44304,34520],{"class":63},[40,44306,6273],{"class":1283},[40,44308,34525],{"class":94},[40,44310,332],{"class":50},[40,44312,44313],{"class":42,"line":13192},[40,44314,37676],{"class":997},[40,44316,44317,44319,44321],{"class":42,"line":13219},[40,44318,34589],{"class":50},[40,44320,1284],{"class":1283},[40,44322,44323],{"class":50},"VGG16()\n",[40,44325,44326],{"class":42,"line":13228},[40,44327,37689],{"class":997},[40,44329,44330],{"class":42,"line":13234},[40,44331,37694],{"class":997},[40,44333,44334,44336,44338],{"class":42,"line":13242},[40,44335,37699],{"class":50},[40,44337,37702],{"class":94},[40,44339,33797],{"class":50},[40,44341,44342],{"class":42,"line":13247},[40,44343,37709],{"class":997},[40,44345,44346,44348,44350],{"class":42,"line":19926},[40,44347,37322],{"class":50},[40,44349,1284],{"class":1283},[40,44351,37718],{"class":50},[40,44353,44354],{"class":42,"line":19932},[40,44355,37723],{"class":997},[40,44357,44358],{"class":42,"line":19955},[40,44359,37728],{"class":50},[40,44361,44362],{"class":42,"line":19961},[40,44363,1413],{"emptyLinePlaceholder":1412},[40,44365,44366],{"class":42,"line":19984},[40,44367,37737],{"class":997},[40,44369,44370],{"class":42,"line":19998},[40,44371,37742],{"class":997},[40,44373,44374,44376,44378,44380,44382,44384,44386],{"class":42,"line":20018},[40,44375,34537],{"class":50},[40,44377,1284],{"class":1283},[40,44379,34544],{"class":94},[40,44381,5035],{"class":1283},[40,44383,34549],{"class":50},[40,44385,5032],{"class":1283},[40,44387,37419],{"class":94},[40,44389,44390,44392,44394],{"class":42,"line":20024},[40,44391,34589],{"class":50},[40,44393,1284],{"class":1283},[40,44395,35589],{"class":50},[40,44397,44398],{"class":42,"line":20035},[40,44399,37771],{"class":997},[40,44401,44402],{"class":42,"line":20058},[40,44403,37776],{"class":997},[40,44405,44406,44408,44410,44412,44414,44416,44418,44420,44422,44424,44426,44428,44430,44432,44434,44436,44438,44440,44442,44444,44446,44448,44450],{"class":42,"line":20080},[40,44407,37781],{"class":50},[40,44409,1284],{"class":1283},[40,44411,4367],{"class":50},[40,44413,37788],{"class":94},[40,44415,1299],{"class":50},[40,44417,37793],{"class":94},[40,44419,1299],{"class":50},[40,44421,37798],{"class":94},[40,44423,1299],{"class":50},[40,44425,37803],{"class":94},[40,44427,1299],{"class":50},[40,44429,37808],{"class":94},[40,44431,1299],{"class":50},[40,44433,37813],{"class":94},[40,44435,1299],{"class":50},[40,44437,37818],{"class":94},[40,44439,1299],{"class":50},[40,44441,37823],{"class":94},[40,44443,1299],{"class":50},[40,44445,37828],{"class":94},[40,44447,1299],{"class":50},[40,44449,37833],{"class":94},[40,44451,36546],{"class":50},[40,44453,44454,44456],{"class":42,"line":20085},[40,44455,37478],{"class":1283},[40,44457,36184],{"class":50},[40,44459,44460],{"class":42,"line":20091},[40,44461,37846],{"class":997},[40,44463,44464,44466,44468,44470],{"class":42,"line":20105},[40,44465,6727],{"class":1283},[40,44467,37853],{"class":50},[40,44469,29355],{"class":1283},[40,44471,37497],{"class":50},[40,44473,44474,44476,44478],{"class":42,"line":20118},[40,44475,35910],{"class":50},[40,44477,1284],{"class":1283},[40,44479,35915],{"class":50},[40,44481,44482,44484,44486],{"class":42,"line":20123},[40,44483,35925],{"class":50},[40,44485,1284],{"class":1283},[40,44487,35930],{"class":50},[40,44489,44490],{"class":42,"line":20137},[40,44491,1413],{"emptyLinePlaceholder":1412},[40,44493,44494],{"class":42,"line":20142},[40,44495,37882],{"class":997},[40,44497,44498],{"class":42,"line":20148},[40,44499,36175],{"class":50},[40,44501,44502],{"class":42,"line":20153},[40,44503,37891],{"class":997},[40,44505,44506,44508,44510],{"class":42,"line":20167},[40,44507,35960],{"class":50},[40,44509,1284],{"class":1283},[40,44511,35965],{"class":50},[40,44513,44514],{"class":42,"line":20172},[40,44515,37904],{"class":997},[40,44517,44518,44520,44522,44524,44526,44528,44530],{"class":42,"line":20177},[40,44519,35977],{"class":50},[40,44521,1284],{"class":1283},[40,44523,35982],{"class":50},[40,44525,35985],{"class":8539},[40,44527,1284],{"class":1283},[40,44529,3698],{"class":63},[40,44531,1811],{"class":50},[40,44533,44534],{"class":42,"line":20191},[40,44535,37925],{"class":997},[40,44537,44538,44540,44542],{"class":42,"line":20203},[40,44539,37930],{"class":50},[40,44541,1284],{"class":1283},[40,44543,37935],{"class":50},[40,44545,44546,44548,44550],{"class":42,"line":20208},[40,44547,37940],{"class":50},[40,44549,1284],{"class":1283},[40,44551,37945],{"class":50},[40,44553,44554,44556,44558,44560,44562,44564,44566,44568],{"class":42,"line":20221},[40,44555,37950],{"class":63},[40,44557,3488],{"class":50},[40,44559,37955],{"class":94},[40,44561,37958],{"class":50},[40,44563,37961],{"class":94},[40,44565,1299],{"class":50},[40,44567,37966],{"class":94},[40,44569,37969],{"class":50},[402,44571,44573],{"id":44572},"_23googlenet","2.3.GoogLeNet",[2423,44575,44577],{"id":44576},"_231原理","2.3.1.原理",[492,44579,44580],{},[495,44581,44582],{},"网络结构",[19,44584,44585],{},[438,44586],{"alt":36,"src":44587},"\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,44589,44590],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,44592,44593],{},[438,44594],{"alt":36,"src":44595},"\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,44597,44598],{},[438,44599],{"alt":36,"src":44600},"\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,44602,44603],{},[438,44604],{"alt":36,"src":44605},"\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",[492,44607,44608],{"start":54},[495,44609,44610],{},"1x1卷积的优点",[19,44612,44613],{},[438,44614],{"alt":36,"src":44615},"\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",[492,44617,44618],{"start":70},[495,44619,44620],{},"全局平均池化层优点",[19,44622,44623],{},[438,44624],{"alt":36,"src":44625},"\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,44627,44628],{},[438,44629],{"alt":36,"src":44630},"\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",[492,44632,44633],{"start":78},[495,44634,44635],{},"参数详细描述",[19,44637,44638],{},[438,44639],{"alt":36,"src":44640},"\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,44642,44643],{},[438,44644],{"alt":36,"src":44645},"\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,44647,44648],{},[438,44649],{"alt":36,"src":44650},"\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,44652,44653],{},[438,44654],{"alt":36,"src":44655},"\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,44657,44658],{},[438,44659],{"alt":36,"src":44660},"\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,44662,44663],{},[438,44664],{"alt":36,"src":44665},"\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,44667,44668],{},[438,44669],{"alt":36,"src":44670},"\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,44672,44673],{},[438,44674],{"alt":36,"src":44675},"\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,44677,44678],{},[438,44679],{"alt":36,"src":44680},"\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,44682,44683],{},[438,44684],{"alt":36,"src":44685},"\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,44687,44688],{},[438,44689],{"alt":36,"src":44690},"\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,44692,44693],{},[438,44694],{"alt":36,"src":44695},"\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,44697,44698],{},[438,44699],{"alt":36,"src":44700},"\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,44702,44703],{},[438,44704],{"alt":36,"src":44705},"\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,44707,44708],{},[438,44709],{"alt":36,"src":44710},"\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,44712,44713],{},[438,44714],{"alt":36,"src":44715},"\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,44717,44718],{},[438,44719],{"alt":36,"src":44720},"\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,44722,44723],{},[438,44724],{"alt":36,"src":44725},"\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,44727,44728],{},[438,44729],{"alt":36,"src":44730},"\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,44732,44733],{},[438,44734],{"alt":36,"src":44735},"\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,44737,44738],{},[438,44739],{"alt":36,"src":44740},"\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",[2423,44742,44744],{"id":44743},"_232代码实现","2.3.2.代码实现",[492,44746,44747],{},[495,44748,34011],{},[19,44750,44751],{},"根据原理一步一步搭建即可",[31,44753,44755],{"className":33679,"code":44754,"language":2323,"meta":36,"style":36},"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",[26,44756,44757,44763,44773,44783,44787,44804,44813,44828,44838,44843,44876,44881,44918,44965,44970,45006,45053,45058,45063,45098,45130,45134,45142,45158,45182,45207,45228,45233,45248,45252,45256,45261,45278,45283,45292,45307,45318,45362,45366,45394,45398,45409,45437,45441,45478,45482,45510,45514,45525,45561,45593,45621,45625,45636,45670,45702,45734,45767,45801,45829,45833,45844,45877,45909,45923,45927,45940,45944,45949,45961,45969,45991,45996,46001,46006,46011,46016,46021,46035,46043,46052,46065,46080,46089,46093,46101,46112,46123,46134,46145,46156,46162,46166,46171,46183,46203,46212],{"__ignoreMap":36},[40,44758,44759,44761],{"class":42,"line":43},[40,44760,33692],{"class":1283},[40,44762,33695],{"class":50},[40,44764,44765,44767,44769,44771],{"class":42,"line":54},[40,44766,34037],{"class":1283},[40,44768,34040],{"class":50},[40,44770,33692],{"class":1283},[40,44772,34045],{"class":50},[40,44774,44775,44777,44779,44781],{"class":42,"line":70},[40,44776,34037],{"class":1283},[40,44778,34057],{"class":50},[40,44780,33692],{"class":1283},[40,44782,34062],{"class":50},[40,44784,44785],{"class":42,"line":78},[40,44786,1413],{"emptyLinePlaceholder":1412},[40,44788,44789,44791,44794,44796,44798,44800,44802],{"class":42,"line":86},[40,44790,18016],{"class":1283},[40,44792,44793],{"class":596}," Inception",[40,44795,3488],{"class":50},[40,44797,34078],{"class":596},[40,44799,4037],{"class":50},[40,44801,34083],{"class":596},[40,44803,34086],{"class":50},[40,44805,44806,44808,44810],{"class":42,"line":100},[40,44807,34101],{"class":1283},[40,44809,34104],{"class":63},[40,44811,44812],{"class":50},"(self,in_channels,c1,c2,c3,c4):\n",[40,44814,44815,44817,44820,44822,44824,44826],{"class":42,"line":108},[40,44816,34117],{"class":63},[40,44818,44819],{"class":50},"(Inception,",[40,44821,34123],{"class":63},[40,44823,34126],{"class":50},[40,44825,34129],{"class":63},[40,44827,5302],{"class":50},[40,44829,44830,44832,44834,44836],{"class":42,"line":121},[40,44831,34145],{"class":63},[40,44833,38071],{"class":50},[40,44835,1284],{"class":1283},[40,44837,38076],{"class":50},[40,44839,44840],{"class":42,"line":134},[40,44841,44842],{"class":997},"        # 路线1：定义1*1卷积\n",[40,44844,44845,44847,44850,44852,44854,44856,44858,44861,44863,44865,44868,44870,44872,44874],{"class":42,"line":146},[40,44846,34145],{"class":63},[40,44848,44849],{"class":50},".p1_1",[40,44851,1284],{"class":1283},[40,44853,34153],{"class":50},[40,44855,34156],{"class":8539},[40,44857,1284],{"class":1283},[40,44859,44860],{"class":50},"in_channels,",[40,44862,34165],{"class":8539},[40,44864,1284],{"class":1283},[40,44866,44867],{"class":50},"c1,",[40,44869,34174],{"class":8539},[40,44871,1284],{"class":1283},[40,44873,3698],{"class":63},[40,44875,1811],{"class":50},[40,44877,44878],{"class":42,"line":154},[40,44879,44880],{"class":997},"        # 路线2：定义1*1卷积和3*3\n",[40,44882,44883,44885,44888,44890,44892,44894,44896,44898,44900,44902,44905,44907,44910,44912,44914,44916],{"class":42,"line":162},[40,44884,34145],{"class":63},[40,44886,44887],{"class":50},".p2_1",[40,44889,1284],{"class":1283},[40,44891,34153],{"class":50},[40,44893,34156],{"class":8539},[40,44895,1284],{"class":1283},[40,44897,44860],{"class":50},[40,44899,34165],{"class":8539},[40,44901,1284],{"class":1283},[40,44903,44904],{"class":50},"c2[",[40,44906,3672],{"class":63},[40,44908,44909],{"class":50},"],",[40,44911,34174],{"class":8539},[40,44913,1284],{"class":1283},[40,44915,3698],{"class":63},[40,44917,1811],{"class":50},[40,44919,44920,44922,44925,44927,44929,44931,44933,44935,44937,44939,44941,44943,44945,44947,44949,44951,44953,44955,44957,44959,44961,44963],{"class":42,"line":170},[40,44921,34145],{"class":63},[40,44923,44924],{"class":50},".p2_2",[40,44926,1284],{"class":1283},[40,44928,34153],{"class":50},[40,44930,34156],{"class":8539},[40,44932,1284],{"class":1283},[40,44934,44904],{"class":50},[40,44936,3672],{"class":63},[40,44938,44909],{"class":50},[40,44940,34165],{"class":8539},[40,44942,1284],{"class":1283},[40,44944,44904],{"class":50},[40,44946,3698],{"class":63},[40,44948,44909],{"class":50},[40,44950,34174],{"class":8539},[40,44952,1284],{"class":1283},[40,44954,3555],{"class":63},[40,44956,1299],{"class":50},[40,44958,34183],{"class":8539},[40,44960,1284],{"class":1283},[40,44962,3698],{"class":63},[40,44964,1811],{"class":50},[40,44966,44967],{"class":42,"line":183},[40,44968,44969],{"class":997},"        # 路线3：定义1*1卷积和5*5\n",[40,44971,44972,44974,44977,44979,44981,44983,44985,44987,44989,44991,44994,44996,44998,45000,45002,45004],{"class":42,"line":196},[40,44973,34145],{"class":63},[40,44975,44976],{"class":50},".p3_1",[40,44978,1284],{"class":1283},[40,44980,34153],{"class":50},[40,44982,34156],{"class":8539},[40,44984,1284],{"class":1283},[40,44986,44860],{"class":50},[40,44988,34165],{"class":8539},[40,44990,1284],{"class":1283},[40,44992,44993],{"class":50},"c3[",[40,44995,3672],{"class":63},[40,44997,44909],{"class":50},[40,44999,34174],{"class":8539},[40,45001,1284],{"class":1283},[40,45003,3698],{"class":63},[40,45005,1811],{"class":50},[40,45007,45008,45010,45013,45015,45017,45019,45021,45023,45025,45027,45029,45031,45033,45035,45037,45039,45041,45043,45045,45047,45049,45051],{"class":42,"line":204},[40,45009,34145],{"class":63},[40,45011,45012],{"class":50},".p3_2",[40,45014,1284],{"class":1283},[40,45016,34153],{"class":50},[40,45018,34156],{"class":8539},[40,45020,1284],{"class":1283},[40,45022,44993],{"class":50},[40,45024,3672],{"class":63},[40,45026,44909],{"class":50},[40,45028,34165],{"class":8539},[40,45030,1284],{"class":1283},[40,45032,44993],{"class":50},[40,45034,3698],{"class":63},[40,45036,44909],{"class":50},[40,45038,34174],{"class":8539},[40,45040,1284],{"class":1283},[40,45042,3799],{"class":63},[40,45044,1299],{"class":50},[40,45046,34183],{"class":8539},[40,45048,1284],{"class":1283},[40,45050,64],{"class":63},[40,45052,1811],{"class":50},[40,45054,45055],{"class":42,"line":217},[40,45056,45057],{"class":997},"        # 路线4：定义3*3最大池化和1*1卷积\n",[40,45059,45060],{"class":42,"line":230},[40,45061,45062],{"class":997},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[40,45064,45065,45067,45070,45072,45074,45076,45078,45080,45082,45084,45086,45088,45090,45092,45094,45096],{"class":42,"line":238},[40,45066,34145],{"class":63},[40,45068,45069],{"class":50},".p4_1",[40,45071,1284],{"class":1283},[40,45073,38129],{"class":50},[40,45075,34174],{"class":8539},[40,45077,1284],{"class":1283},[40,45079,3555],{"class":63},[40,45081,1299],{"class":50},[40,45083,34229],{"class":8539},[40,45085,1284],{"class":1283},[40,45087,3698],{"class":63},[40,45089,1299],{"class":50},[40,45091,34183],{"class":8539},[40,45093,1284],{"class":1283},[40,45095,3698],{"class":63},[40,45097,1811],{"class":50},[40,45099,45100,45102,45105,45107,45109,45111,45113,45115,45117,45119,45122,45124,45126,45128],{"class":42,"line":251},[40,45101,34145],{"class":63},[40,45103,45104],{"class":50},".p4_2",[40,45106,1284],{"class":1283},[40,45108,34153],{"class":50},[40,45110,34156],{"class":8539},[40,45112,1284],{"class":1283},[40,45114,44860],{"class":50},[40,45116,34165],{"class":8539},[40,45118,1284],{"class":1283},[40,45120,45121],{"class":50},"c4,",[40,45123,34174],{"class":8539},[40,45125,1284],{"class":1283},[40,45127,3698],{"class":63},[40,45129,1811],{"class":50},[40,45131,45132],{"class":42,"line":264},[40,45133,1413],{"emptyLinePlaceholder":1412},[40,45135,45136,45138,45140],{"class":42,"line":277},[40,45137,34101],{"class":1283},[40,45139,34393],{"class":596},[40,45141,34396],{"class":50},[40,45143,45144,45147,45149,45151,45153,45155],{"class":42,"line":290},[40,45145,45146],{"class":50},"        p1",[40,45148,1284],{"class":1283},[40,45150,34123],{"class":63},[40,45152,38484],{"class":50},[40,45154,34123],{"class":63},[40,45156,45157],{"class":50},".p1_1(x))\n",[40,45159,45160,45162,45164,45166,45168,45170,45173,45175,45177,45179],{"class":42,"line":298},[40,45161,10408],{"class":50},[40,45163,1284],{"class":1283},[40,45165,34123],{"class":63},[40,45167,38484],{"class":50},[40,45169,34123],{"class":63},[40,45171,45172],{"class":50},".p2_2(",[40,45174,34123],{"class":63},[40,45176,38484],{"class":50},[40,45178,34123],{"class":63},[40,45180,45181],{"class":50},".p2_1(x))))\n",[40,45183,45184,45187,45189,45191,45193,45195,45198,45200,45202,45204],{"class":42,"line":310},[40,45185,45186],{"class":50},"        p3",[40,45188,1284],{"class":1283},[40,45190,34123],{"class":63},[40,45192,38484],{"class":50},[40,45194,34123],{"class":63},[40,45196,45197],{"class":50},".p3_2(",[40,45199,34123],{"class":63},[40,45201,38484],{"class":50},[40,45203,34123],{"class":63},[40,45205,45206],{"class":50},".p3_1(x))))\n",[40,45208,45209,45212,45214,45216,45218,45220,45223,45225],{"class":42,"line":5086},[40,45210,45211],{"class":50},"        p4",[40,45213,1284],{"class":1283},[40,45215,34123],{"class":63},[40,45217,38484],{"class":50},[40,45219,34123],{"class":63},[40,45221,45222],{"class":50},".p4_2(",[40,45224,34123],{"class":63},[40,45226,45227],{"class":50},".p4_1(x)))\n",[40,45229,45230],{"class":42,"line":5091},[40,45231,45232],{"class":997},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[40,45234,45235,45237,45240,45242,45244,45246],{"class":42,"line":5105},[40,45236,18074],{"class":1283},[40,45238,45239],{"class":50}," torch.cat((p1,p2,p3,p4),",[40,45241,35985],{"class":8539},[40,45243,1284],{"class":1283},[40,45245,3698],{"class":63},[40,45247,1811],{"class":50},[40,45249,45250],{"class":42,"line":5110},[40,45251,1413],{"emptyLinePlaceholder":1412},[40,45253,45254],{"class":42,"line":5902},[40,45255,1413],{"emptyLinePlaceholder":1412},[40,45257,45258],{"class":42,"line":5916},[40,45259,45260],{"class":997},"# 搭建GoogLeNet网络\n",[40,45262,45263,45265,45268,45270,45272,45274,45276],{"class":42,"line":5924},[40,45264,18016],{"class":1283},[40,45266,45267],{"class":596}," GoogLeNet",[40,45269,3488],{"class":50},[40,45271,34078],{"class":596},[40,45273,4037],{"class":50},[40,45275,34083],{"class":596},[40,45277,34086],{"class":50},[40,45279,45280],{"class":42,"line":5929},[40,45281,45282],{"class":997},"    # 必须把Inception导入到里边\n",[40,45284,45285,45287,45289],{"class":42,"line":5935},[40,45286,34101],{"class":1283},[40,45288,34104],{"class":63},[40,45290,45291],{"class":50},"(self,Inception):\n",[40,45293,45294,45296,45299,45301,45303,45305],{"class":42,"line":5941},[40,45295,34117],{"class":63},[40,45297,45298],{"class":50},"(GoogLeNet,",[40,45300,34123],{"class":63},[40,45302,34126],{"class":50},[40,45304,34129],{"class":63},[40,45306,5302],{"class":50},[40,45308,45309,45311,45314,45316],{"class":42,"line":5946},[40,45310,34145],{"class":63},[40,45312,45313],{"class":50},".b1",[40,45315,1284],{"class":1283},[40,45317,41309],{"class":50},[40,45319,45320,45322,45324,45326,45328,45330,45332,45334,45336,45338,45340,45342,45344,45346,45348,45350,45352,45354,45356,45358,45360],{"class":42,"line":11270},[40,45321,41314],{"class":50},[40,45323,34156],{"class":8539},[40,45325,1284],{"class":1283},[40,45327,3698],{"class":63},[40,45329,1299],{"class":50},[40,45331,34165],{"class":8539},[40,45333,1284],{"class":1283},[40,45335,3684],{"class":63},[40,45337,1299],{"class":50},[40,45339,34174],{"class":8539},[40,45341,1284],{"class":1283},[40,45343,3849],{"class":63},[40,45345,1299],{"class":50},[40,45347,34229],{"class":8539},[40,45349,1284],{"class":1283},[40,45351,64],{"class":63},[40,45353,1299],{"class":50},[40,45355,34183],{"class":8539},[40,45357,1284],{"class":1283},[40,45359,3555],{"class":63},[40,45361,41347],{"class":50},[40,45363,45364],{"class":42,"line":11294},[40,45365,41352],{"class":50},[40,45367,45368,45370,45372,45374,45376,45378,45380,45382,45384,45386,45388,45390,45392],{"class":42,"line":11299},[40,45369,41397],{"class":50},[40,45371,34174],{"class":8539},[40,45373,1284],{"class":1283},[40,45375,3555],{"class":63},[40,45377,1299],{"class":50},[40,45379,34229],{"class":8539},[40,45381,1284],{"class":1283},[40,45383,64],{"class":63},[40,45385,1299],{"class":50},[40,45387,34183],{"class":8539},[40,45389,1284],{"class":1283},[40,45391,3698],{"class":63},[40,45393,1811],{"class":50},[40,45395,45396],{"class":42,"line":11305},[40,45397,41426],{"class":50},[40,45399,45400,45402,45405,45407],{"class":42,"line":11332},[40,45401,34145],{"class":63},[40,45403,45404],{"class":50},".b2",[40,45406,1284],{"class":1283},[40,45408,41309],{"class":50},[40,45410,45411,45413,45415,45417,45419,45421,45423,45425,45427,45429,45431,45433,45435],{"class":42,"line":11337},[40,45412,41314],{"class":50},[40,45414,34156],{"class":8539},[40,45416,1284],{"class":1283},[40,45418,3684],{"class":63},[40,45420,1299],{"class":50},[40,45422,34165],{"class":8539},[40,45424,1284],{"class":1283},[40,45426,3684],{"class":63},[40,45428,1299],{"class":50},[40,45430,34174],{"class":8539},[40,45432,1284],{"class":1283},[40,45434,3698],{"class":63},[40,45436,41347],{"class":50},[40,45438,45439],{"class":42,"line":11343},[40,45440,41352],{"class":50},[40,45442,45443,45445,45447,45449,45451,45453,45455,45457,45460,45462,45464,45466,45468,45470,45472,45474,45476],{"class":42,"line":11355},[40,45444,41314],{"class":50},[40,45446,34156],{"class":8539},[40,45448,1284],{"class":1283},[40,45450,3684],{"class":63},[40,45452,1299],{"class":50},[40,45454,34165],{"class":8539},[40,45456,1284],{"class":1283},[40,45458,45459],{"class":63},"192",[40,45461,1299],{"class":50},[40,45463,34174],{"class":8539},[40,45465,1284],{"class":1283},[40,45467,3555],{"class":63},[40,45469,1299],{"class":50},[40,45471,34183],{"class":8539},[40,45473,1284],{"class":1283},[40,45475,3698],{"class":63},[40,45477,41347],{"class":50},[40,45479,45480],{"class":42,"line":11367},[40,45481,41352],{"class":50},[40,45483,45484,45486,45488,45490,45492,45494,45496,45498,45500,45502,45504,45506,45508],{"class":42,"line":11379},[40,45485,41397],{"class":50},[40,45487,34174],{"class":8539},[40,45489,1284],{"class":1283},[40,45491,3555],{"class":63},[40,45493,1299],{"class":50},[40,45495,34229],{"class":8539},[40,45497,1284],{"class":1283},[40,45499,64],{"class":63},[40,45501,1299],{"class":50},[40,45503,34183],{"class":8539},[40,45505,1284],{"class":1283},[40,45507,3698],{"class":63},[40,45509,1811],{"class":50},[40,45511,45512],{"class":42,"line":13038},[40,45513,41426],{"class":50},[40,45515,45516,45518,45521,45523],{"class":42,"line":13063},[40,45517,34145],{"class":63},[40,45519,45520],{"class":50},".b3",[40,45522,1284],{"class":1283},[40,45524,41309],{"class":50},[40,45526,45527,45530,45532,45534,45536,45539,45541,45543,45545,45548,45550,45552,45554,45557,45559],{"class":42,"line":13086},[40,45528,45529],{"class":50},"            Inception(",[40,45531,45459],{"class":63},[40,45533,1299],{"class":50},[40,45535,3684],{"class":63},[40,45537,45538],{"class":50},",(",[40,45540,3690],{"class":63},[40,45542,1299],{"class":50},[40,45544,35370],{"class":63},[40,45546,45547],{"class":50},"),(",[40,45549,4080],{"class":63},[40,45551,1299],{"class":50},[40,45553,3678],{"class":63},[40,45555,45556],{"class":50},"),",[40,45558,3678],{"class":63},[40,45560,41347],{"class":50},[40,45562,45563,45565,45567,45569,45571,45573,45575,45577,45579,45581,45583,45585,45587,45589,45591],{"class":42,"line":13110},[40,45564,45529],{"class":50},[40,45566,38170],{"class":63},[40,45568,1299],{"class":50},[40,45570,35370],{"class":63},[40,45572,45538],{"class":50},[40,45574,35370],{"class":63},[40,45576,1299],{"class":50},[40,45578,45459],{"class":63},[40,45580,45547],{"class":50},[40,45582,3678],{"class":63},[40,45584,1299],{"class":50},[40,45586,3690],{"class":63},[40,45588,45556],{"class":50},[40,45590,3684],{"class":63},[40,45592,41347],{"class":50},[40,45594,45595,45597,45599,45601,45603,45605,45607,45609,45611,45613,45615,45617,45619],{"class":42,"line":13115},[40,45596,41397],{"class":50},[40,45598,34174],{"class":8539},[40,45600,1284],{"class":1283},[40,45602,3555],{"class":63},[40,45604,1299],{"class":50},[40,45606,34229],{"class":8539},[40,45608,1284],{"class":1283},[40,45610,64],{"class":63},[40,45612,1299],{"class":50},[40,45614,34183],{"class":8539},[40,45616,1284],{"class":1283},[40,45618,3698],{"class":63},[40,45620,1811],{"class":50},[40,45622,45623],{"class":42,"line":13120},[40,45624,41426],{"class":50},[40,45626,45627,45629,45632,45634],{"class":42,"line":13125},[40,45628,34145],{"class":63},[40,45630,45631],{"class":50},".b4",[40,45633,1284],{"class":1283},[40,45635,41309],{"class":50},[40,45637,45638,45640,45643,45645,45647,45649,45651,45653,45656,45658,45660,45662,45664,45666,45668],{"class":42,"line":13134},[40,45639,45529],{"class":50},[40,45641,45642],{"class":63},"480",[40,45644,1299],{"class":50},[40,45646,45459],{"class":63},[40,45648,45538],{"class":50},[40,45650,3690],{"class":63},[40,45652,1299],{"class":50},[40,45654,45655],{"class":63},"208",[40,45657,45547],{"class":50},[40,45659,4080],{"class":63},[40,45661,1299],{"class":50},[40,45663,4086],{"class":63},[40,45665,45556],{"class":50},[40,45667,3684],{"class":63},[40,45669,41347],{"class":50},[40,45671,45672,45674,45676,45678,45680,45682,45684,45686,45688,45690,45692,45694,45696,45698,45700],{"class":42,"line":13139},[40,45673,45529],{"class":50},[40,45675,41757],{"class":63},[40,45677,1299],{"class":50},[40,45679,24369],{"class":63},[40,45681,45538],{"class":50},[40,45683,4097],{"class":63},[40,45685,1299],{"class":50},[40,45687,34801],{"class":63},[40,45689,45547],{"class":50},[40,45691,4277],{"class":63},[40,45693,1299],{"class":50},[40,45695,3684],{"class":63},[40,45697,45556],{"class":50},[40,45699,3684],{"class":63},[40,45701,41347],{"class":50},[40,45703,45704,45706,45708,45710,45712,45714,45716,45718,45720,45722,45724,45726,45728,45730,45732],{"class":42,"line":13145},[40,45705,45529],{"class":50},[40,45707,41757],{"class":63},[40,45709,1299],{"class":50},[40,45711,35370],{"class":63},[40,45713,45538],{"class":50},[40,45715,35370],{"class":63},[40,45717,1299],{"class":50},[40,45719,38170],{"class":63},[40,45721,45547],{"class":50},[40,45723,4277],{"class":63},[40,45725,1299],{"class":50},[40,45727,3684],{"class":63},[40,45729,45556],{"class":50},[40,45731,3684],{"class":63},[40,45733,41347],{"class":50},[40,45735,45736,45738,45740,45742,45744,45746,45748,45750,45753,45755,45757,45759,45761,45763,45765],{"class":42,"line":13166},[40,45737,45529],{"class":50},[40,45739,41757],{"class":63},[40,45741,1299],{"class":50},[40,45743,4097],{"class":63},[40,45745,45538],{"class":50},[40,45747,35370],{"class":63},[40,45749,1299],{"class":50},[40,45751,45752],{"class":63},"288",[40,45754,45547],{"class":50},[40,45756,3678],{"class":63},[40,45758,1299],{"class":50},[40,45760,3684],{"class":63},[40,45762,45556],{"class":50},[40,45764,3684],{"class":63},[40,45766,41347],{"class":50},[40,45768,45769,45771,45774,45776,45778,45780,45782,45784,45787,45789,45791,45793,45795,45797,45799],{"class":42,"line":13172},[40,45770,45529],{"class":50},[40,45772,45773],{"class":63},"528",[40,45775,1299],{"class":50},[40,45777,38170],{"class":63},[40,45779,45538],{"class":50},[40,45781,24369],{"class":63},[40,45783,1299],{"class":50},[40,45785,45786],{"class":63},"320",[40,45788,45547],{"class":50},[40,45790,3678],{"class":63},[40,45792,1299],{"class":50},[40,45794,35370],{"class":63},[40,45796,45556],{"class":50},[40,45798,35370],{"class":63},[40,45800,41347],{"class":50},[40,45802,45803,45805,45807,45809,45811,45813,45815,45817,45819,45821,45823,45825,45827],{"class":42,"line":13186},[40,45804,41397],{"class":50},[40,45806,34174],{"class":8539},[40,45808,1284],{"class":1283},[40,45810,3555],{"class":63},[40,45812,1299],{"class":50},[40,45814,34229],{"class":8539},[40,45816,1284],{"class":1283},[40,45818,64],{"class":63},[40,45820,1299],{"class":50},[40,45822,34183],{"class":8539},[40,45824,1284],{"class":1283},[40,45826,3698],{"class":63},[40,45828,1811],{"class":50},[40,45830,45831],{"class":42,"line":13192},[40,45832,41426],{"class":50},[40,45834,45835,45837,45840,45842],{"class":42,"line":13219},[40,45836,34145],{"class":63},[40,45838,45839],{"class":50},".b5",[40,45841,1284],{"class":1283},[40,45843,41309],{"class":50},[40,45845,45846,45848,45851,45853,45855,45857,45859,45861,45863,45865,45867,45869,45871,45873,45875],{"class":42,"line":13228},[40,45847,45529],{"class":50},[40,45849,45850],{"class":63},"832",[40,45852,1299],{"class":50},[40,45854,38170],{"class":63},[40,45856,45538],{"class":50},[40,45858,24369],{"class":63},[40,45860,1299],{"class":50},[40,45862,45786],{"class":63},[40,45864,45547],{"class":50},[40,45866,3678],{"class":63},[40,45868,1299],{"class":50},[40,45870,35370],{"class":63},[40,45872,45556],{"class":50},[40,45874,35370],{"class":63},[40,45876,41347],{"class":50},[40,45878,45879,45881,45883,45885,45887,45889,45891,45893,45895,45897,45899,45901,45903,45905,45907],{"class":42,"line":13234},[40,45880,45529],{"class":50},[40,45882,45850],{"class":63},[40,45884,1299],{"class":50},[40,45886,38240],{"class":63},[40,45888,45538],{"class":50},[40,45890,45459],{"class":63},[40,45892,1299],{"class":50},[40,45894,38240],{"class":63},[40,45896,45547],{"class":50},[40,45898,4086],{"class":63},[40,45900,1299],{"class":50},[40,45902,35370],{"class":63},[40,45904,45556],{"class":50},[40,45906,35370],{"class":63},[40,45908,41347],{"class":50},[40,45910,45911,45914,45916,45918,45920],{"class":42,"line":13242},[40,45912,45913],{"class":50},"            nn.AdaptiveAvgPool2d((",[40,45915,3698],{"class":63},[40,45917,1299],{"class":50},[40,45919,3698],{"class":63},[40,45921,45922],{"class":50},")),\n",[40,45924,45925],{"class":42,"line":13247},[40,45926,42090],{"class":50},[40,45928,45929,45931,45934,45936,45938],{"class":42,"line":19926},[40,45930,42095],{"class":50},[40,45932,45933],{"class":63},"1024",[40,45935,1299],{"class":50},[40,45937,3925],{"class":63},[40,45939,1811],{"class":50},[40,45941,45942],{"class":42,"line":19932},[40,45943,41426],{"class":50},[40,45945,45946],{"class":42,"line":19955},[40,45947,45948],{"class":997},"        # 对模型参数初始化\n",[40,45950,45951,45953,45955,45957,45959],{"class":42,"line":19961},[40,45952,6727],{"class":1283},[40,45954,42168],{"class":50},[40,45956,29355],{"class":1283},[40,45958,42173],{"class":63},[40,45960,42176],{"class":50},[40,45962,45963,45965,45967],{"class":42,"line":19984},[40,45964,7965],{"class":1283},[40,45966,42188],{"class":63},[40,45968,42191],{"class":50},[40,45970,45971,45973,45976,45978,45981,45983,45985,45987,45989],{"class":42,"line":19998},[40,45972,42201],{"class":50},[40,45974,45975],{"class":8539},"mode",[40,45977,1284],{"class":1283},[40,45979,45980],{"class":94},"'fan_out'",[40,45982,1299],{"class":50},[40,45984,42204],{"class":8539},[40,45986,1284],{"class":1283},[40,45988,42209],{"class":94},[40,45990,1811],{"class":50},[40,45992,45993],{"class":42,"line":20018},[40,45994,45995],{"class":997},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[40,45997,45998],{"class":42,"line":20024},[40,45999,46000],{"class":997},"                # ② mode = 'fan_out'决定使用的fan值：\n",[40,46002,46003],{"class":42,"line":20035},[40,46004,46005],{"class":997},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[40,46007,46008],{"class":42,"line":20058},[40,46009,46010],{"class":997},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[40,46012,46013],{"class":42,"line":20080},[40,46014,46015],{"class":997},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[40,46017,46018],{"class":42,"line":20085},[40,46019,46020],{"class":997},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[40,46022,46023,46025,46027,46029,46031,46033],{"class":42,"line":20091},[40,46024,42221],{"class":1283},[40,46026,42224],{"class":50},[40,46028,42227],{"class":1283},[40,46030,42230],{"class":1283},[40,46032,42233],{"class":63},[40,46034,332],{"class":50},[40,46036,46037,46039,46041],{"class":42,"line":20105},[40,46038,42245],{"class":50},[40,46040,3672],{"class":63},[40,46042,1811],{"class":50},[40,46044,46045,46048,46050],{"class":42,"line":20118},[40,46046,46047],{"class":1283},"                elif",[40,46049,42188],{"class":63},[40,46051,42264],{"class":50},[40,46053,46054,46057,46059,46061,46063],{"class":42,"line":20123},[40,46055,46056],{"class":50},"                    nn.init.normal_(m.weight,",[40,46058,3672],{"class":63},[40,46060,1299],{"class":50},[40,46062,42286],{"class":63},[40,46064,1811],{"class":50},[40,46066,46067,46070,46072,46074,46076,46078],{"class":42,"line":20137},[40,46068,46069],{"class":1283},"                    if",[40,46071,42224],{"class":50},[40,46073,42227],{"class":1283},[40,46075,42230],{"class":1283},[40,46077,42233],{"class":63},[40,46079,332],{"class":50},[40,46081,46082,46085,46087],{"class":42,"line":20142},[40,46083,46084],{"class":50},"                        nn.init.constant_(m.bias,",[40,46086,3672],{"class":63},[40,46088,1811],{"class":50},[40,46090,46091],{"class":42,"line":20148},[40,46092,38465],{"class":997},[40,46094,46095,46097,46099],{"class":42,"line":20153},[40,46096,34101],{"class":1283},[40,46098,34393],{"class":596},[40,46100,34396],{"class":50},[40,46102,46103,46105,46107,46109],{"class":42,"line":20167},[40,46104,34401],{"class":50},[40,46106,1284],{"class":1283},[40,46108,34123],{"class":63},[40,46110,46111],{"class":50},".b1(x)\n",[40,46113,46114,46116,46118,46120],{"class":42,"line":20172},[40,46115,34401],{"class":50},[40,46117,1284],{"class":1283},[40,46119,34123],{"class":63},[40,46121,46122],{"class":50},".b2(x)\n",[40,46124,46125,46127,46129,46131],{"class":42,"line":20177},[40,46126,34401],{"class":50},[40,46128,1284],{"class":1283},[40,46130,34123],{"class":63},[40,46132,46133],{"class":50},".b3(x)\n",[40,46135,46136,46138,46140,46142],{"class":42,"line":20191},[40,46137,34401],{"class":50},[40,46139,1284],{"class":1283},[40,46141,34123],{"class":63},[40,46143,46144],{"class":50},".b4(x)\n",[40,46146,46147,46149,46151,46153],{"class":42,"line":20203},[40,46148,34401],{"class":50},[40,46150,1284],{"class":1283},[40,46152,34123],{"class":63},[40,46154,46155],{"class":50},".b5(x)\n",[40,46157,46158,46160],{"class":42,"line":20208},[40,46159,18074],{"class":1283},[40,46161,34509],{"class":50},[40,46163,46164],{"class":42,"line":20221},[40,46165,1413],{"emptyLinePlaceholder":1412},[40,46167,46168],{"class":42,"line":20226},[40,46169,46170],{"class":997},"# 模型展示\n",[40,46172,46173,46175,46177,46179,46181],{"class":42,"line":20231},[40,46174,4873],{"class":1283},[40,46176,34520],{"class":63},[40,46178,6273],{"class":1283},[40,46180,34525],{"class":94},[40,46182,332],{"class":50},[40,46184,46185,46187,46189,46191,46193,46195,46197,46199,46201],{"class":42,"line":20236},[40,46186,34537],{"class":50},[40,46188,1284],{"class":1283},[40,46190,33751],{"class":50},[40,46192,34544],{"class":94},[40,46194,5035],{"class":1283},[40,46196,34549],{"class":50},[40,46198,5032],{"class":1283},[40,46200,33776],{"class":94},[40,46202,1811],{"class":50},[40,46204,46205,46207,46209],{"class":42,"line":20249},[40,46206,34589],{"class":50},[40,46208,1284],{"class":1283},[40,46210,46211],{"class":50},"GoogLeNet(Inception).to(device)\n",[40,46213,46214,46216,46218,46220,46222,46224,46226,46228],{"class":42,"line":20254},[40,46215,34599],{"class":63},[40,46217,34602],{"class":50},[40,46219,3698],{"class":63},[40,46221,1299],{"class":50},[40,46223,34801],{"class":63},[40,46225,1299],{"class":50},[40,46227,34801],{"class":63},[40,46229,34615],{"class":50},[492,46231,46232],{"start":54},[495,46233,42483],{},[31,46235,46237],{"className":33679,"code":46236,"language":2323,"meta":36,"style":36},"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",[26,46238,46239,46245,46251,46261,46267,46277,46287,46297,46307,46317,46321,46332,46342,46346,46350,46354,46362,46374,46384,46400,46410,46442,46456,46466,46476,46480,46490,46504,46514,46524,46534,46540,46544,46548,46552,46556,46560,46568,46588,46592,46596,46600,46604,46608,46624,46628,46632,46640,46644,46648,46656,46660,46664,46668,46676,46680,46684,46688,46692,46700,46704,46712,46716,46724,46728,46736,46740,46748,46752,46756,46764,46768,46772,46776,46788,46812,46826,46830,46834,46838,46846,46850,46858,46862,46870,46874,46882,46886,46894,46898,46906,46910,46922,46926,46934,46938,46946,46950,46954,46958,46962,46970,46974,46990,46994,47002,47006,47010,47014,47018,47022,47026,47030,47046,47050,47062,47066,47078,47082,47094,47098,47106,47110,47118,47122,47126,47130,47136,47140,47148,47152,47168,47172,47180,47184,47200,47212,47216,47228,47232,47236,47244,47248,47252,47260,47264,47272,47276,47284,47288,47292,47334,47376,47380,47384,47400,47404,47420,47424,47428,47436,47440,47444,47456,47494,47498,47502,47510,47514,47528,47538,47544,47550,47556,47562,47566,47570,47576,47580,47584,47592,47596,47614,47618,47622,47626,47642,47646,47650,47654,47658,47662,47682,47702,47706,47710,47714,47722,47730,47734,47750,47770,47790,47794,47798,47806,47814,47818,47822,47826,47838,47842,47852,47860,47877],{"__ignoreMap":36},[40,46240,46241,46243],{"class":42,"line":43},[40,46242,33692],{"class":1283},[40,46244,35122],{"class":50},[40,46246,46247,46249],{"class":42,"line":54},[40,46248,33692],{"class":1283},[40,46250,35129],{"class":50},[40,46252,46253,46255,46257,46259],{"class":42,"line":70},[40,46254,33692],{"class":1283},[40,46256,35140],{"class":50},[40,46258,34683],{"class":1283},[40,46260,35145],{"class":50},[40,46262,46263,46265],{"class":42,"line":78},[40,46264,33692],{"class":1283},[40,46266,33695],{"class":50},[40,46268,46269,46271,46273,46275],{"class":42,"line":86},[40,46270,34037],{"class":1283},[40,46272,34715],{"class":50},[40,46274,33692],{"class":1283},[40,46276,35162],{"class":50},[40,46278,46279,46281,46283,46285],{"class":42,"line":100},[40,46280,34037],{"class":1283},[40,46282,34668],{"class":50},[40,46284,33692],{"class":1283},[40,46286,34673],{"class":50},[40,46288,46289,46291,46293,46295],{"class":42,"line":108},[40,46290,34037],{"class":1283},[40,46292,34698],{"class":50},[40,46294,33692],{"class":1283},[40,46296,34703],{"class":50},[40,46298,46299,46301,46303,46305],{"class":42,"line":121},[40,46300,33692],{"class":1283},[40,46302,34715],{"class":50},[40,46304,34683],{"class":1283},[40,46306,34720],{"class":50},[40,46308,46309,46311,46313,46315],{"class":42,"line":134},[40,46310,33692],{"class":1283},[40,46312,34732],{"class":50},[40,46314,34683],{"class":1283},[40,46316,34737],{"class":50},[40,46318,46319],{"class":42,"line":146},[40,46320,35207],{"class":997},[40,46322,46323,46325,46327,46329],{"class":42,"line":154},[40,46324,34037],{"class":1283},[40,46326,35214],{"class":50},[40,46328,33692],{"class":1283},[40,46330,46331],{"class":50}," GoogLeNet, Inception\n",[40,46333,46334,46336,46338,46340],{"class":42,"line":162},[40,46335,34037],{"class":1283},[40,46337,34040],{"class":50},[40,46339,33692],{"class":1283},[40,46341,34045],{"class":50},[40,46343,46344],{"class":42,"line":170},[40,46345,1413],{"emptyLinePlaceholder":1412},[40,46347,46348],{"class":42,"line":183},[40,46349,1413],{"emptyLinePlaceholder":1412},[40,46351,46352],{"class":42,"line":196},[40,46353,35242],{"class":997},[40,46355,46356,46358,46360],{"class":42,"line":204},[40,46357,35247],{"class":1283},[40,46359,35250],{"class":596},[40,46361,35253],{"class":50},[40,46363,46364,46366,46368,46370,46372],{"class":42,"line":217},[40,46365,35258],{"class":50},[40,46367,1284],{"class":1283},[40,46369,34755],{"class":50},[40,46371,34763],{"class":94},[40,46373,34766],{"class":50},[40,46375,46376,46378,46380,46382],{"class":42,"line":230},[40,46377,35271],{"class":8539},[40,46379,1284],{"class":1283},[40,46381,34776],{"class":63},[40,46383,34766],{"class":50},[40,46385,46386,46388,46390,46392,46394,46396,46398],{"class":42,"line":238},[40,46387,35282],{"class":8539},[40,46389,1284],{"class":1283},[40,46391,34793],{"class":50},[40,46393,34796],{"class":8539},[40,46395,1284],{"class":1283},[40,46397,38749],{"class":63},[40,46399,34804],{"class":50},[40,46401,46402,46404,46406,46408],{"class":42,"line":251},[40,46403,35299],{"class":8539},[40,46405,1284],{"class":1283},[40,46407,34776],{"class":63},[40,46409,1811],{"class":50},[40,46411,46412,46414,46416,46418,46420,46422,46424,46426,46428,46430,46432,46434,46436,46438,46440],{"class":42,"line":264},[40,46413,35310],{"class":50},[40,46415,1284],{"class":1283},[40,46417,35315],{"class":50},[40,46419,35318],{"class":63},[40,46421,3488],{"class":50},[40,46423,35323],{"class":63},[40,46425,3934],{"class":1283},[40,46427,10681],{"class":63},[40,46429,35330],{"class":50},[40,46431,35318],{"class":63},[40,46433,3488],{"class":50},[40,46435,35337],{"class":63},[40,46437,3934],{"class":1283},[40,46439,10681],{"class":63},[40,46441,35344],{"class":50},[40,46443,46444,46446,46448,46450,46452,46454],{"class":42,"line":277},[40,46445,35349],{"class":50},[40,46447,1284],{"class":1283},[40,46449,35354],{"class":50},[40,46451,34837],{"class":8539},[40,46453,1284],{"class":1283},[40,46455,34842],{"class":50},[40,46457,46458,46460,46462,46464],{"class":42,"line":290},[40,46459,35365],{"class":8539},[40,46461,1284],{"class":1283},[40,46463,3678],{"class":63},[40,46465,34766],{"class":50},[40,46467,46468,46470,46472,46474],{"class":42,"line":298},[40,46469,35377],{"class":8539},[40,46471,1284],{"class":1283},[40,46473,34776],{"class":63},[40,46475,34766],{"class":50},[40,46477,46478],{"class":42,"line":310},[40,46479,35388],{"class":997},[40,46481,46482,46484,46486,46488],{"class":42,"line":5086},[40,46483,35393],{"class":8539},[40,46485,1284],{"class":1283},[40,46487,3874],{"class":63},[40,46489,1811],{"class":50},[40,46491,46492,46494,46496,46498,46500,46502],{"class":42,"line":5091},[40,46493,35404],{"class":50},[40,46495,1284],{"class":1283},[40,46497,34834],{"class":50},[40,46499,34837],{"class":8539},[40,46501,1284],{"class":1283},[40,46503,35415],{"class":50},[40,46505,46506,46508,46510,46512],{"class":42,"line":5105},[40,46507,35420],{"class":8539},[40,46509,1284],{"class":1283},[40,46511,3678],{"class":63},[40,46513,34766],{"class":50},[40,46515,46516,46518,46520,46522],{"class":42,"line":5110},[40,46517,35431],{"class":8539},[40,46519,1284],{"class":1283},[40,46521,34776],{"class":63},[40,46523,34766],{"class":50},[40,46525,46526,46528,46530,46532],{"class":42,"line":5902},[40,46527,35442],{"class":8539},[40,46529,1284],{"class":1283},[40,46531,3874],{"class":63},[40,46533,1811],{"class":50},[40,46535,46536,46538],{"class":42,"line":5916},[40,46537,7413],{"class":1283},[40,46539,35455],{"class":50},[40,46541,46542],{"class":42,"line":5924},[40,46543,1413],{"emptyLinePlaceholder":1412},[40,46545,46546],{"class":42,"line":5929},[40,46547,35464],{"class":997},[40,46549,46550],{"class":42,"line":5935},[40,46551,35469],{"class":997},[40,46553,46554],{"class":42,"line":5941},[40,46555,1413],{"emptyLinePlaceholder":1412},[40,46557,46558],{"class":42,"line":5946},[40,46559,35478],{"class":997},[40,46561,46562,46564,46566],{"class":42,"line":11270},[40,46563,35247],{"class":1283},[40,46565,35485],{"class":596},[40,46567,35488],{"class":50},[40,46569,46570,46572,46574,46576,46578,46580,46582,46584,46586],{"class":42,"line":11294},[40,46571,34537],{"class":50},[40,46573,1284],{"class":1283},[40,46575,33751],{"class":50},[40,46577,34544],{"class":94},[40,46579,5035],{"class":1283},[40,46581,34549],{"class":50},[40,46583,5032],{"class":1283},[40,46585,35507],{"class":94},[40,46587,1811],{"class":50},[40,46589,46590],{"class":42,"line":11299},[40,46591,1413],{"emptyLinePlaceholder":1412},[40,46593,46594],{"class":42,"line":11305},[40,46595,1413],{"emptyLinePlaceholder":1412},[40,46597,46598],{"class":42,"line":11332},[40,46599,35522],{"class":997},[40,46601,46602],{"class":42,"line":11337},[40,46603,35527],{"class":997},[40,46605,46606],{"class":42,"line":11343},[40,46607,35532],{"class":997},[40,46609,46610,46612,46614,46616,46618,46620,46622],{"class":42,"line":11355},[40,46611,35537],{"class":50},[40,46613,1284],{"class":1283},[40,46615,35542],{"class":50},[40,46617,35545],{"class":8539},[40,46619,1284],{"class":1283},[40,46621,35550],{"class":63},[40,46623,1811],{"class":50},[40,46625,46626],{"class":42,"line":11367},[40,46627,1413],{"emptyLinePlaceholder":1412},[40,46629,46630],{"class":42,"line":11379},[40,46631,35561],{"class":997},[40,46633,46634,46636,46638],{"class":42,"line":13038},[40,46635,35566],{"class":50},[40,46637,1284],{"class":1283},[40,46639,35571],{"class":50},[40,46641,46642],{"class":42,"line":13063},[40,46643,1413],{"emptyLinePlaceholder":1412},[40,46645,46646],{"class":42,"line":13086},[40,46647,35580],{"class":997},[40,46649,46650,46652,46654],{"class":42,"line":13110},[40,46651,34589],{"class":50},[40,46653,1284],{"class":1283},[40,46655,35589],{"class":50},[40,46657,46658],{"class":42,"line":13115},[40,46659,35594],{"class":997},[40,46661,46662],{"class":42,"line":13120},[40,46663,35599],{"class":997},[40,46665,46666],{"class":42,"line":13125},[40,46667,35604],{"class":997},[40,46669,46670,46672,46674],{"class":42,"line":13134},[40,46671,35609],{"class":50},[40,46673,1284],{"class":1283},[40,46675,35614],{"class":50},[40,46677,46678],{"class":42,"line":13139},[40,46679,1413],{"emptyLinePlaceholder":1412},[40,46681,46682],{"class":42,"line":13145},[40,46683,1413],{"emptyLinePlaceholder":1412},[40,46685,46686],{"class":42,"line":13166},[40,46687,35627],{"class":997},[40,46689,46690],{"class":42,"line":13172},[40,46691,35632],{"class":997},[40,46693,46694,46696,46698],{"class":42,"line":13186},[40,46695,35637],{"class":50},[40,46697,1284],{"class":1283},[40,46699,35642],{"class":63},[40,46701,46702],{"class":42,"line":13192},[40,46703,35647],{"class":997},[40,46705,46706,46708,46710],{"class":42,"line":13219},[40,46707,35652],{"class":50},[40,46709,1284],{"class":1283},[40,46711,35657],{"class":50},[40,46713,46714],{"class":42,"line":13228},[40,46715,35662],{"class":997},[40,46717,46718,46720,46722],{"class":42,"line":13234},[40,46719,35667],{"class":50},[40,46721,1284],{"class":1283},[40,46723,35657],{"class":50},[40,46725,46726],{"class":42,"line":13242},[40,46727,35676],{"class":997},[40,46729,46730,46732,46734],{"class":42,"line":13247},[40,46731,35681],{"class":50},[40,46733,1284],{"class":1283},[40,46735,35657],{"class":50},[40,46737,46738],{"class":42,"line":19926},[40,46739,35690],{"class":997},[40,46741,46742,46744,46746],{"class":42,"line":19932},[40,46743,35695],{"class":50},[40,46745,1284],{"class":1283},[40,46747,35657],{"class":50},[40,46749,46750],{"class":42,"line":19955},[40,46751,1413],{"emptyLinePlaceholder":1412},[40,46753,46754],{"class":42,"line":19961},[40,46755,35708],{"class":997},[40,46757,46758,46760,46762],{"class":42,"line":19984},[40,46759,35713],{"class":50},[40,46761,1284],{"class":1283},[40,46763,35718],{"class":50},[40,46765,46766],{"class":42,"line":19998},[40,46767,1413],{"emptyLinePlaceholder":1412},[40,46769,46770],{"class":42,"line":20018},[40,46771,1413],{"emptyLinePlaceholder":1412},[40,46773,46774],{"class":42,"line":20024},[40,46775,35731],{"class":997},[40,46777,46778,46780,46782,46784,46786],{"class":42,"line":20035},[40,46779,6525],{"class":1283},[40,46781,35738],{"class":50},[40,46783,29355],{"class":1283},[40,46785,35743],{"class":63},[40,46787,35746],{"class":50},[40,46789,46790,46792,46794,46796,46798,46800,46802,46804,46806,46808,46810],{"class":42,"line":20058},[40,46791,35751],{"class":63},[40,46793,3488],{"class":50},[40,46795,35756],{"class":94},[40,46797,35759],{"class":63},[40,46799,4063],{"class":94},[40,46801,35759],{"class":63},[40,46803,3731],{"class":94},[40,46805,35768],{"class":50},[40,46807,4011],{"class":1283},[40,46809,3698],{"class":63},[40,46811,33797],{"class":50},[40,46813,46814,46816,46818,46820,46822,46824],{"class":42,"line":20080},[40,46815,35751],{"class":63},[40,46817,3488],{"class":50},[40,46819,35783],{"class":94},[40,46821,3934],{"class":1283},[40,46823,3925],{"class":63},[40,46825,1811],{"class":50},[40,46827,46828],{"class":42,"line":20085},[40,46829,1413],{"emptyLinePlaceholder":1412},[40,46831,46832],{"class":42,"line":20091},[40,46833,35798],{"class":997},[40,46835,46836],{"class":42,"line":20105},[40,46837,35803],{"class":997},[40,46839,46840,46842,46844],{"class":42,"line":20118},[40,46841,35808],{"class":50},[40,46843,1284],{"class":1283},[40,46845,35642],{"class":63},[40,46847,46848],{"class":42,"line":20123},[40,46849,35817],{"class":997},[40,46851,46852,46854,46856],{"class":42,"line":20137},[40,46853,35822],{"class":50},[40,46855,1284],{"class":1283},[40,46857,6409],{"class":63},[40,46859,46860],{"class":42,"line":20142},[40,46861,35831],{"class":997},[40,46863,46864,46866,46868],{"class":42,"line":20148},[40,46865,35836],{"class":50},[40,46867,1284],{"class":1283},[40,46869,35642],{"class":63},[40,46871,46872],{"class":42,"line":20153},[40,46873,35845],{"class":997},[40,46875,46876,46878,46880],{"class":42,"line":20167},[40,46877,35850],{"class":50},[40,46879,1284],{"class":1283},[40,46881,6409],{"class":63},[40,46883,46884],{"class":42,"line":20172},[40,46885,35859],{"class":997},[40,46887,46888,46890,46892],{"class":42,"line":20177},[40,46889,35864],{"class":50},[40,46891,1284],{"class":1283},[40,46893,6409],{"class":63},[40,46895,46896],{"class":42,"line":20191},[40,46897,35873],{"class":997},[40,46899,46900,46902,46904],{"class":42,"line":20203},[40,46901,35878],{"class":50},[40,46903,1284],{"class":1283},[40,46905,6409],{"class":63},[40,46907,46908],{"class":42,"line":20208},[40,46909,35887],{"class":997},[40,46911,46912,46914,46916,46918,46920],{"class":42,"line":20221},[40,46913,6727],{"class":1283},[40,46915,34901],{"class":50},[40,46917,29355],{"class":1283},[40,46919,34906],{"class":63},[40,46921,35900],{"class":50},[40,46923,46924],{"class":42,"line":20226},[40,46925,35905],{"class":997},[40,46927,46928,46930,46932],{"class":42,"line":20231},[40,46929,35910],{"class":50},[40,46931,1284],{"class":1283},[40,46933,35915],{"class":50},[40,46935,46936],{"class":42,"line":20236},[40,46937,35920],{"class":997},[40,46939,46940,46942,46944],{"class":42,"line":20249},[40,46941,35925],{"class":50},[40,46943,1284],{"class":1283},[40,46945,35930],{"class":50},[40,46947,46948],{"class":42,"line":20254},[40,46949,35936],{"class":997},[40,46951,46952],{"class":42,"line":35933},[40,46953,35942],{"class":50},[40,46955,46956],{"class":42,"line":35939},[40,46957,35948],{"class":997},[40,46959,46960],{"class":42,"line":35945},[40,46961,35954],{"class":997},[40,46963,46964,46966,46968],{"class":42,"line":35951},[40,46965,35960],{"class":50},[40,46967,1284],{"class":1283},[40,46969,35965],{"class":50},[40,46971,46972],{"class":42,"line":35957},[40,46973,35971],{"class":997},[40,46975,46976,46978,46980,46982,46984,46986,46988],{"class":42,"line":35968},[40,46977,35977],{"class":50},[40,46979,1284],{"class":1283},[40,46981,35982],{"class":50},[40,46983,35985],{"class":8539},[40,46985,1284],{"class":1283},[40,46987,3698],{"class":63},[40,46989,1811],{"class":50},[40,46991,46992],{"class":42,"line":35974},[40,46993,35997],{"class":997},[40,46995,46996,46998,47000],{"class":42,"line":35994},[40,46997,36003],{"class":50},[40,46999,1284],{"class":1283},[40,47001,36008],{"class":50},[40,47003,47004],{"class":42,"line":36000},[40,47005,36014],{"class":997},[40,47007,47008],{"class":42,"line":36011},[40,47009,36020],{"class":50},[40,47011,47012],{"class":42,"line":36017},[40,47013,36026],{"class":997},[40,47015,47016],{"class":42,"line":36023},[40,47017,36032],{"class":50},[40,47019,47020],{"class":42,"line":36029},[40,47021,36038],{"class":997},[40,47023,47024],{"class":42,"line":36035},[40,47025,36044],{"class":50},[40,47027,47028],{"class":42,"line":36041},[40,47029,36050],{"class":997},[40,47031,47032,47034,47036,47038,47040,47042,47044],{"class":42,"line":36047},[40,47033,36056],{"class":50},[40,47035,12799],{"class":1283},[40,47037,36061],{"class":50},[40,47039,3934],{"class":1283},[40,47041,36066],{"class":50},[40,47043,3672],{"class":63},[40,47045,1811],{"class":50},[40,47047,47048],{"class":42,"line":36053},[40,47049,36076],{"class":997},[40,47051,47052,47054,47056,47058,47060],{"class":42,"line":36073},[40,47053,36082],{"class":50},[40,47055,12799],{"class":1283},[40,47057,36087],{"class":50},[40,47059,6273],{"class":1283},[40,47061,36092],{"class":50},[40,47063,47064],{"class":42,"line":36079},[40,47065,36098],{"class":997},[40,47067,47068,47070,47072,47074,47076],{"class":42,"line":36095},[40,47069,36104],{"class":50},[40,47071,12799],{"class":1283},[40,47073,36066],{"class":50},[40,47075,3672],{"class":63},[40,47077,1811],{"class":50},[40,47079,47080],{"class":42,"line":36101},[40,47081,36118],{"class":997},[40,47083,47084,47086,47088,47090,47092],{"class":42,"line":36115},[40,47085,6727],{"class":1283},[40,47087,36126],{"class":50},[40,47089,29355],{"class":1283},[40,47091,34906],{"class":63},[40,47093,36133],{"class":50},[40,47095,47096],{"class":42,"line":36121},[40,47097,36139],{"class":997},[40,47099,47100,47102,47104],{"class":42,"line":36136},[40,47101,35910],{"class":50},[40,47103,1284],{"class":1283},[40,47105,35915],{"class":50},[40,47107,47108],{"class":42,"line":36142},[40,47109,36154],{"class":997},[40,47111,47112,47114,47116],{"class":42,"line":36151},[40,47113,35925],{"class":50},[40,47115,1284],{"class":1283},[40,47117,35930],{"class":50},[40,47119,47120],{"class":42,"line":36157},[40,47121,36169],{"class":997},[40,47123,47124],{"class":42,"line":36166},[40,47125,36175],{"class":50},[40,47127,47128],{"class":42,"line":36172},[40,47129,39656],{"class":997},[40,47131,47132,47134],{"class":42,"line":36178},[40,47133,36181],{"class":1283},[40,47135,36184],{"class":50},[40,47137,47138],{"class":42,"line":36187},[40,47139,36190],{"class":997},[40,47141,47142,47144,47146],{"class":42,"line":36193},[40,47143,39671],{"class":50},[40,47145,1284],{"class":1283},[40,47147,35965],{"class":50},[40,47149,47150],{"class":42,"line":36204},[40,47151,36207],{"class":997},[40,47153,47154,47156,47158,47160,47162,47164,47166],{"class":42,"line":36210},[40,47155,39684],{"class":50},[40,47157,1284],{"class":1283},[40,47159,35982],{"class":50},[40,47161,35985],{"class":8539},[40,47163,1284],{"class":1283},[40,47165,3698],{"class":63},[40,47167,1811],{"class":50},[40,47169,47170],{"class":42,"line":36229},[40,47171,36232],{"class":997},[40,47173,47174,47176,47178],{"class":42,"line":36235},[40,47175,39705],{"class":50},[40,47177,1284],{"class":1283},[40,47179,36008],{"class":50},[40,47181,47182],{"class":42,"line":36246},[40,47183,36249],{"class":997},[40,47185,47186,47188,47190,47192,47194,47196,47198],{"class":42,"line":36252},[40,47187,39718],{"class":50},[40,47189,12799],{"class":1283},[40,47191,39723],{"class":50},[40,47193,3934],{"class":1283},[40,47195,36066],{"class":50},[40,47197,3672],{"class":63},[40,47199,1811],{"class":50},[40,47201,47202,47204,47206,47208,47210],{"class":42,"line":36272},[40,47203,39736],{"class":50},[40,47205,12799],{"class":1283},[40,47207,36087],{"class":50},[40,47209,6273],{"class":1283},[40,47211,36092],{"class":50},[40,47213,47214],{"class":42,"line":36288},[40,47215,39749],{"class":997},[40,47217,47218,47220,47222,47224,47226],{"class":42,"line":36294},[40,47219,39754],{"class":50},[40,47221,12799],{"class":1283},[40,47223,36066],{"class":50},[40,47225,3672],{"class":63},[40,47227,1811],{"class":50},[40,47229,47230],{"class":42,"line":36308},[40,47231,36311],{"class":997},[40,47233,47234],{"class":42,"line":36314},[40,47235,36317],{"class":997},[40,47237,47238,47240,47242],{"class":42,"line":36320},[40,47239,36323],{"class":50},[40,47241,4063],{"class":1283},[40,47243,36328],{"class":50},[40,47245,47246],{"class":42,"line":36331},[40,47247,36334],{"class":997},[40,47249,47250],{"class":42,"line":36337},[40,47251,36340],{"class":997},[40,47253,47254,47256,47258],{"class":42,"line":36343},[40,47255,36346],{"class":50},[40,47257,4063],{"class":1283},[40,47259,36328],{"class":50},[40,47261,47262],{"class":42,"line":36353},[40,47263,36356],{"class":997},[40,47265,47266,47268,47270],{"class":42,"line":36359},[40,47267,36362],{"class":50},[40,47269,4063],{"class":1283},[40,47271,36367],{"class":50},[40,47273,47274],{"class":42,"line":36370},[40,47275,36373],{"class":997},[40,47277,47278,47280,47282],{"class":42,"line":36376},[40,47279,36379],{"class":50},[40,47281,4063],{"class":1283},[40,47283,36367],{"class":50},[40,47285,47286],{"class":42,"line":36386},[40,47287,1413],{"emptyLinePlaceholder":1412},[40,47289,47290],{"class":42,"line":36391},[40,47291,36394],{"class":997},[40,47293,47294,47296,47298,47300,47302,47304,47306,47308,47310,47312,47314,47316,47318,47320,47322,47324,47326,47328,47330,47332],{"class":42,"line":36397},[40,47295,35751],{"class":63},[40,47297,3488],{"class":50},[40,47299,6916],{"class":94},[40,47301,35759],{"class":63},[40,47303,36408],{"class":94},[40,47305,4373],{"class":63},[40,47307,36413],{"class":1283},[40,47309,4423],{"class":63},[40,47311,36418],{"class":94},[40,47313,4373],{"class":63},[40,47315,36413],{"class":1283},[40,47317,4423],{"class":63},[40,47319,6916],{"class":94},[40,47321,36429],{"class":50},[40,47323,4011],{"class":1283},[40,47325,3698],{"class":63},[40,47327,36436],{"class":50},[40,47329,4011],{"class":1283},[40,47331,3698],{"class":63},[40,47333,36443],{"class":50},[40,47335,47336,47338,47340,47342,47344,47346,47348,47350,47352,47354,47356,47358,47360,47362,47364,47366,47368,47370,47372,47374],{"class":42,"line":36446},[40,47337,35751],{"class":63},[40,47339,3488],{"class":50},[40,47341,6916],{"class":94},[40,47343,35759],{"class":63},[40,47345,36457],{"class":94},[40,47347,4373],{"class":63},[40,47349,36413],{"class":1283},[40,47351,4423],{"class":63},[40,47353,36466],{"class":94},[40,47355,4373],{"class":63},[40,47357,36413],{"class":1283},[40,47359,4423],{"class":63},[40,47361,6916],{"class":94},[40,47363,36477],{"class":50},[40,47365,4011],{"class":1283},[40,47367,3698],{"class":63},[40,47369,36484],{"class":50},[40,47371,4011],{"class":1283},[40,47373,3698],{"class":63},[40,47375,36443],{"class":50},[40,47377,47378],{"class":42,"line":36493},[40,47379,1413],{"emptyLinePlaceholder":1412},[40,47381,47382],{"class":42,"line":36498},[40,47383,36501],{"class":997},[40,47385,47386,47388,47390,47392,47394,47396,47398],{"class":42,"line":36504},[40,47387,5822],{"class":1283},[40,47389,36509],{"class":50},[40,47391,4011],{"class":1283},[40,47393,3698],{"class":63},[40,47395,4417],{"class":50},[40,47397,4437],{"class":1283},[40,47399,36520],{"class":50},[40,47401,47402],{"class":42,"line":36523},[40,47403,36526],{"class":997},[40,47405,47406,47408,47410,47412,47414,47416,47418],{"class":42,"line":36529},[40,47407,36532],{"class":50},[40,47409,3526],{"class":63},[40,47411,1284],{"class":1283},[40,47413,36539],{"class":50},[40,47415,4011],{"class":1283},[40,47417,3698],{"class":63},[40,47419,36546],{"class":50},[40,47421,47422],{"class":42,"line":36549},[40,47423,36552],{"class":997},[40,47425,47426],{"class":42,"line":36555},[40,47427,36558],{"class":997},[40,47429,47430,47432,47434],{"class":42,"line":36561},[40,47431,36564],{"class":50},[40,47433,1284],{"class":1283},[40,47435,35614],{"class":50},[40,47437,47438],{"class":42,"line":36571},[40,47439,1413],{"emptyLinePlaceholder":1412},[40,47441,47442],{"class":42,"line":36576},[40,47443,36579],{"class":997},[40,47445,47446,47448,47450,47452,47454],{"class":42,"line":36582},[40,47447,36585],{"class":50},[40,47449,1284],{"class":1283},[40,47451,36590],{"class":50},[40,47453,4011],{"class":1283},[40,47455,36595],{"class":50},[40,47457,47458,47460,47462,47464,47466,47468,47470,47472,47474,47476,47478,47480,47482,47484,47486,47488,47490,47492],{"class":42,"line":36598},[40,47459,35751],{"class":63},[40,47461,3488],{"class":50},[40,47463,36605],{"class":94},[40,47465,4373],{"class":63},[40,47467,36610],{"class":1283},[40,47469,4423],{"class":63},[40,47471,4023],{"class":94},[40,47473,4373],{"class":63},[40,47475,36610],{"class":1283},[40,47477,4423],{"class":63},[40,47479,36623],{"class":94},[40,47481,36626],{"class":50},[40,47483,36629],{"class":1283},[40,47485,4384],{"class":63},[40,47487,36634],{"class":50},[40,47489,3808],{"class":1283},[40,47491,4384],{"class":63},[40,47493,33797],{"class":50},[40,47495,47496],{"class":42,"line":36643},[40,47497,40033],{"class":997},[40,47499,47500],{"class":42,"line":36649},[40,47501,40038],{"class":997},[40,47503,47504,47506,47508],{"class":42,"line":36655},[40,47505,40043],{"class":50},[40,47507,36667],{"class":94},[40,47509,1811],{"class":50},[40,47511,47512],{"class":42,"line":36661},[40,47513,36687],{"class":997},[40,47515,47516,47518,47520,47522,47524,47526],{"class":42,"line":36672},[40,47517,36693],{"class":50},[40,47519,1284],{"class":1283},[40,47521,36698],{"class":50},[40,47523,36701],{"class":8539},[40,47525,1284],{"class":1283},[40,47527,4888],{"class":50},[40,47529,47530,47532,47534,47536],{"class":42,"line":36678},[40,47531,36711],{"class":94},[40,47533,4336],{"class":50},[40,47535,36716],{"class":63},[40,47537,36719],{"class":50},[40,47539,47540,47542],{"class":42,"line":36684},[40,47541,36725],{"class":94},[40,47543,36728],{"class":50},[40,47545,47546,47548],{"class":42,"line":36690},[40,47547,36734],{"class":94},[40,47549,36737],{"class":50},[40,47551,47552,47554],{"class":42,"line":36708},[40,47553,36743],{"class":94},[40,47555,36746],{"class":50},[40,47557,47558,47560],{"class":42,"line":36722},[40,47559,36752],{"class":94},[40,47561,36755],{"class":50},[40,47563,47564],{"class":42,"line":36731},[40,47565,36761],{"class":50},[40,47567,47568],{"class":42,"line":36740},[40,47569,36767],{"class":997},[40,47571,47572,47574],{"class":42,"line":36749},[40,47573,7413],{"class":1283},[40,47575,36775],{"class":50},[40,47577,47578],{"class":42,"line":36758},[40,47579,1413],{"emptyLinePlaceholder":1412},[40,47581,47582],{"class":42,"line":36764},[40,47583,36786],{"class":997},[40,47585,47586,47588,47590],{"class":42,"line":36770},[40,47587,35247],{"class":1283},[40,47589,36794],{"class":596},[40,47591,36797],{"class":50},[40,47593,47594],{"class":42,"line":36778},[40,47595,36803],{"class":997},[40,47597,47598,47600,47602,47604,47606,47608,47610,47612],{"class":42,"line":36783},[40,47599,36809],{"class":50},[40,47601,34993],{"class":8539},[40,47603,1284],{"class":1283},[40,47605,3488],{"class":50},[40,47607,3977],{"class":63},[40,47609,1299],{"class":50},[40,47611,3773],{"class":63},[40,47613,33797],{"class":50},[40,47615,47616],{"class":42,"line":36789},[40,47617,36829],{"class":997},[40,47619,47620],{"class":42,"line":36800},[40,47621,36835],{"class":997},[40,47623,47624],{"class":42,"line":36806},[40,47625,36841],{"class":997},[40,47627,47628,47630,47632,47634,47636,47638,47640],{"class":42,"line":36826},[40,47629,35027],{"class":50},[40,47631,3698],{"class":63},[40,47633,1299],{"class":50},[40,47635,64],{"class":63},[40,47637,1299],{"class":50},[40,47639,3698],{"class":63},[40,47641,1811],{"class":50},[40,47643,47644],{"class":42,"line":36832},[40,47645,36864],{"class":997},[40,47647,47648],{"class":42,"line":36838},[40,47649,36870],{"class":997},[40,47651,47652],{"class":42,"line":36844},[40,47653,36876],{"class":997},[40,47655,47656],{"class":42,"line":36861},[40,47657,36882],{"class":997},[40,47659,47660],{"class":42,"line":36867},[40,47661,36888],{"class":997},[40,47663,47664,47666,47668,47670,47672,47674,47676,47678,47680],{"class":42,"line":36873},[40,47665,36894],{"class":50},[40,47667,36897],{"class":94},[40,47669,36900],{"class":50},[40,47671,36903],{"class":94},[40,47673,1299],{"class":50},[40,47675,36908],{"class":8539},[40,47677,1284],{"class":1283},[40,47679,36913],{"class":94},[40,47681,1811],{"class":50},[40,47683,47684,47686,47688,47690,47692,47694,47696,47698,47700],{"class":42,"line":36879},[40,47685,36894],{"class":50},[40,47687,36897],{"class":94},[40,47689,36925],{"class":50},[40,47691,36928],{"class":94},[40,47693,1299],{"class":50},[40,47695,36908],{"class":8539},[40,47697,1284],{"class":1283},[40,47699,36937],{"class":94},[40,47701,1811],{"class":50},[40,47703,47704],{"class":42,"line":36885},[40,47705,36945],{"class":997},[40,47707,47708],{"class":42,"line":36891},[40,47709,36951],{"class":50},[40,47711,47712],{"class":42,"line":36918},[40,47713,36957],{"class":997},[40,47715,47716,47718,47720],{"class":42,"line":36942},[40,47717,36963],{"class":50},[40,47719,36966],{"class":94},[40,47721,1811],{"class":50},[40,47723,47724,47726,47728],{"class":42,"line":36948},[40,47725,36974],{"class":50},[40,47727,36977],{"class":94},[40,47729,1811],{"class":50},[40,47731,47732],{"class":42,"line":36954},[40,47733,36985],{"class":997},[40,47735,47736,47738,47740,47742,47744,47746,47748],{"class":42,"line":36960},[40,47737,35027],{"class":50},[40,47739,3698],{"class":63},[40,47741,1299],{"class":50},[40,47743,64],{"class":63},[40,47745,1299],{"class":50},[40,47747,64],{"class":63},[40,47749,1811],{"class":50},[40,47751,47752,47754,47756,47758,47760,47762,47764,47766,47768],{"class":42,"line":36971},[40,47753,36894],{"class":50},[40,47755,36897],{"class":94},[40,47757,37012],{"class":50},[40,47759,36903],{"class":94},[40,47761,1299],{"class":50},[40,47763,36908],{"class":8539},[40,47765,1284],{"class":1283},[40,47767,37023],{"class":94},[40,47769,1811],{"class":50},[40,47771,47772,47774,47776,47778,47780,47782,47784,47786,47788],{"class":42,"line":36982},[40,47773,36894],{"class":50},[40,47775,36897],{"class":94},[40,47777,37035],{"class":50},[40,47779,36928],{"class":94},[40,47781,1299],{"class":50},[40,47783,36908],{"class":8539},[40,47785,1284],{"class":1283},[40,47787,37046],{"class":94},[40,47789,1811],{"class":50},[40,47791,47792],{"class":42,"line":36988},[40,47793,37054],{"class":997},[40,47795,47796],{"class":42,"line":37005},[40,47797,36951],{"class":50},[40,47799,47800,47802,47804],{"class":42,"line":37028},[40,47801,36963],{"class":50},[40,47803,36897],{"class":94},[40,47805,1811],{"class":50},[40,47807,47808,47810,47812],{"class":42,"line":37051},[40,47809,36974],{"class":50},[40,47811,37076],{"class":94},[40,47813,1811],{"class":50},[40,47815,47816],{"class":42,"line":37057},[40,47817,37084],{"class":50},[40,47819,47820],{"class":42,"line":37062},[40,47821,1413],{"emptyLinePlaceholder":1412},[40,47823,47824],{"class":42,"line":37071},[40,47825,37095],{"class":997},[40,47827,47828,47830,47832,47834,47836],{"class":42,"line":37081},[40,47829,4873],{"class":1283},[40,47831,34520],{"class":63},[40,47833,6273],{"class":1283},[40,47835,34525],{"class":94},[40,47837,332],{"class":50},[40,47839,47840],{"class":42,"line":37087},[40,47841,37114],{"class":997},[40,47843,47844,47847,47849],{"class":42,"line":37092},[40,47845,47846],{"class":50},"    GoogLeNet",[40,47848,1284],{"class":1283},[40,47850,47851],{"class":50},"GoogLeNet(Inception)\n",[40,47853,47854,47856,47858],{"class":42,"line":37098},[40,47855,37131],{"class":50},[40,47857,1284],{"class":1283},[40,47859,37136],{"class":50},[40,47861,47862,47864,47866,47869,47871,47873,47875],{"class":42,"line":37111},[40,47863,36693],{"class":50},[40,47865,1284],{"class":1283},[40,47867,47868],{"class":50},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[40,47870,37149],{"class":8539},[40,47872,1284],{"class":1283},[40,47874,4428],{"class":63},[40,47876,1811],{"class":50},[40,47878,47879],{"class":42,"line":37117},[40,47880,37161],{"class":50},[492,47882,47883],{"start":70},[495,47884,43874],{},[31,47886,47888],{"className":33679,"code":47887,"language":2323,"meta":36,"style":36},"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",[26,47889,47890,47896,47906,47916,47920,47930,47941,47945,47949,47953,47961,47977,47987,48003,48013,48027,48031,48041,48051,48061,48067,48071,48075,48083,48087,48103,48111,48115,48119,48127,48135,48139,48143,48147,48151,48157,48161,48171,48179,48187,48191,48195,48199,48207,48211,48227,48231,48235,48239,48251,48255,48267,48271,48275,48287,48291,48301,48305,48309,48321,48325,48333,48337,48341,48349,48353,48361,48365,48369,48373,48377,48381,48397,48405,48409,48413,48461,48467,48471,48481,48489,48497,48501,48505,48509,48513,48521,48525,48541,48545,48553,48561],{"__ignoreMap":36},[40,47891,47892,47894],{"class":42,"line":43},[40,47893,33692],{"class":1283},[40,47895,33695],{"class":50},[40,47897,47898,47900,47902,47904],{"class":42,"line":54},[40,47899,33692],{"class":1283},[40,47901,34715],{"class":50},[40,47903,34683],{"class":1283},[40,47905,34720],{"class":50},[40,47907,47908,47910,47912,47914],{"class":42,"line":70},[40,47909,34037],{"class":1283},[40,47911,34698],{"class":50},[40,47913,33692],{"class":1283},[40,47915,34703],{"class":50},[40,47917,47918],{"class":42,"line":78},[40,47919,37222],{"class":997},[40,47921,47922,47924,47926,47928],{"class":42,"line":86},[40,47923,34037],{"class":1283},[40,47925,34668],{"class":50},[40,47927,33692],{"class":1283},[40,47929,34673],{"class":50},[40,47931,47932,47934,47936,47938],{"class":42,"line":100},[40,47933,34037],{"class":1283},[40,47935,35214],{"class":50},[40,47937,33692],{"class":1283},[40,47939,47940],{"class":50}," GoogLeNet,Inception\n",[40,47942,47943],{"class":42,"line":108},[40,47944,1413],{"emptyLinePlaceholder":1412},[40,47946,47947],{"class":42,"line":121},[40,47948,1413],{"emptyLinePlaceholder":1412},[40,47950,47951],{"class":42,"line":134},[40,47952,37251],{"class":997},[40,47954,47955,47957,47959],{"class":42,"line":146},[40,47956,35247],{"class":1283},[40,47958,37258],{"class":596},[40,47960,35253],{"class":50},[40,47962,47963,47965,47967,47969,47971,47973,47975],{"class":42,"line":154},[40,47964,37265],{"class":50},[40,47966,1284],{"class":1283},[40,47968,34755],{"class":50},[40,47970,34758],{"class":8539},[40,47972,1284],{"class":1283},[40,47974,34763],{"class":94},[40,47976,34766],{"class":50},[40,47978,47979,47981,47983,47985],{"class":42,"line":162},[40,47980,37282],{"class":8539},[40,47982,1284],{"class":1283},[40,47984,37287],{"class":63},[40,47986,34766],{"class":50},[40,47988,47989,47991,47993,47995,47997,47999,48001],{"class":42,"line":170},[40,47990,37294],{"class":8539},[40,47992,1284],{"class":1283},[40,47994,34793],{"class":50},[40,47996,34796],{"class":8539},[40,47998,1284],{"class":1283},[40,48000,38749],{"class":63},[40,48002,34804],{"class":50},[40,48004,48005,48007,48009,48011],{"class":42,"line":183},[40,48006,37311],{"class":8539},[40,48008,1284],{"class":1283},[40,48010,34776],{"class":63},[40,48012,1811],{"class":50},[40,48014,48015,48017,48019,48021,48023,48025],{"class":42,"line":196},[40,48016,37322],{"class":50},[40,48018,1284],{"class":1283},[40,48020,34834],{"class":50},[40,48022,34837],{"class":8539},[40,48024,1284],{"class":1283},[40,48026,37333],{"class":50},[40,48028,48029],{"class":42,"line":204},[40,48030,37338],{"class":997},[40,48032,48033,48035,48037,48039],{"class":42,"line":217},[40,48034,37343],{"class":8539},[40,48036,1284],{"class":1283},[40,48038,3698],{"class":63},[40,48040,34766],{"class":50},[40,48042,48043,48045,48047,48049],{"class":42,"line":230},[40,48044,37354],{"class":8539},[40,48046,1284],{"class":1283},[40,48048,34776],{"class":63},[40,48050,34766],{"class":50},[40,48052,48053,48055,48057,48059],{"class":42,"line":238},[40,48054,37365],{"class":8539},[40,48056,1284],{"class":1283},[40,48058,3672],{"class":63},[40,48060,1811],{"class":50},[40,48062,48063,48065],{"class":42,"line":251},[40,48064,7413],{"class":1283},[40,48066,37378],{"class":50},[40,48068,48069],{"class":42,"line":264},[40,48070,1413],{"emptyLinePlaceholder":1412},[40,48072,48073],{"class":42,"line":277},[40,48074,37387],{"class":997},[40,48076,48077,48079,48081],{"class":42,"line":290},[40,48078,35247],{"class":1283},[40,48080,37394],{"class":596},[40,48082,37397],{"class":50},[40,48084,48085],{"class":42,"line":298},[40,48086,37402],{"class":997},[40,48088,48089,48091,48093,48095,48097,48099,48101],{"class":42,"line":310},[40,48090,34537],{"class":50},[40,48092,1284],{"class":1283},[40,48094,34544],{"class":94},[40,48096,5035],{"class":1283},[40,48098,34549],{"class":50},[40,48100,5032],{"class":1283},[40,48102,37419],{"class":94},[40,48104,48105,48107,48109],{"class":42,"line":5086},[40,48106,34589],{"class":50},[40,48108,1284],{"class":1283},[40,48110,35589],{"class":50},[40,48112,48113],{"class":42,"line":5091},[40,48114,1413],{"emptyLinePlaceholder":1412},[40,48116,48117],{"class":42,"line":5105},[40,48118,37436],{"class":997},[40,48120,48121,48123,48125],{"class":42,"line":5110},[40,48122,37441],{"class":50},[40,48124,1284],{"class":1283},[40,48126,35642],{"class":63},[40,48128,48129,48131,48133],{"class":42,"line":5902},[40,48130,37450],{"class":50},[40,48132,1284],{"class":1283},[40,48134,6409],{"class":63},[40,48136,48137],{"class":42,"line":5916},[40,48138,1413],{"emptyLinePlaceholder":1412},[40,48140,48141],{"class":42,"line":5924},[40,48142,37463],{"class":997},[40,48144,48145],{"class":42,"line":5929},[40,48146,37468],{"class":997},[40,48148,48149],{"class":42,"line":5935},[40,48150,37473],{"class":997},[40,48152,48153,48155],{"class":42,"line":5941},[40,48154,37478],{"class":1283},[40,48156,36184],{"class":50},[40,48158,48159],{"class":42,"line":5946},[40,48160,37485],{"class":997},[40,48162,48163,48165,48167,48169],{"class":42,"line":11270},[40,48164,6727],{"class":1283},[40,48166,37492],{"class":50},[40,48168,29355],{"class":1283},[40,48170,37497],{"class":50},[40,48172,48173,48175,48177],{"class":42,"line":11294},[40,48174,37502],{"class":50},[40,48176,1284],{"class":1283},[40,48178,37507],{"class":50},[40,48180,48181,48183,48185],{"class":42,"line":11299},[40,48182,37512],{"class":50},[40,48184,1284],{"class":1283},[40,48186,37517],{"class":50},[40,48188,48189],{"class":42,"line":11305},[40,48190,37522],{"class":997},[40,48192,48193],{"class":42,"line":11332},[40,48194,36175],{"class":50},[40,48196,48197],{"class":42,"line":11337},[40,48198,37531],{"class":997},[40,48200,48201,48203,48205],{"class":42,"line":11343},[40,48202,35960],{"class":50},[40,48204,1284],{"class":1283},[40,48206,37540],{"class":50},[40,48208,48209],{"class":42,"line":11355},[40,48210,37545],{"class":997},[40,48212,48213,48215,48217,48219,48221,48223,48225],{"class":42,"line":11367},[40,48214,35977],{"class":50},[40,48216,1284],{"class":1283},[40,48218,35982],{"class":50},[40,48220,35985],{"class":8539},[40,48222,1284],{"class":1283},[40,48224,3698],{"class":63},[40,48226,1811],{"class":50},[40,48228,48229],{"class":42,"line":11379},[40,48230,37566],{"class":997},[40,48232,48233],{"class":42,"line":13038},[40,48234,37571],{"class":997},[40,48236,48237],{"class":42,"line":13063},[40,48238,37576],{"class":997},[40,48240,48241,48243,48245,48247,48249],{"class":42,"line":13086},[40,48242,37581],{"class":50},[40,48244,12799],{"class":1283},[40,48246,36087],{"class":50},[40,48248,6273],{"class":1283},[40,48250,37590],{"class":50},[40,48252,48253],{"class":42,"line":13110},[40,48254,37595],{"class":997},[40,48256,48257,48259,48261,48263,48265],{"class":42,"line":13115},[40,48258,37600],{"class":50},[40,48260,12799],{"class":1283},[40,48262,37605],{"class":50},[40,48264,3672],{"class":63},[40,48266,1811],{"class":50},[40,48268,48269],{"class":42,"line":13120},[40,48270,1413],{"emptyLinePlaceholder":1412},[40,48272,48273],{"class":42,"line":13125},[40,48274,37618],{"class":997},[40,48276,48277,48279,48281,48283,48285],{"class":42,"line":13134},[40,48278,37623],{"class":50},[40,48280,1284],{"class":1283},[40,48282,37628],{"class":50},[40,48284,4063],{"class":1283},[40,48286,37633],{"class":50},[40,48288,48289],{"class":42,"line":13139},[40,48290,37638],{"class":997},[40,48292,48293,48295,48297,48299],{"class":42,"line":13145},[40,48294,35751],{"class":63},[40,48296,3488],{"class":50},[40,48298,37647],{"class":94},[40,48300,37650],{"class":50},[40,48302,48303],{"class":42,"line":13166},[40,48304,1413],{"emptyLinePlaceholder":1412},[40,48306,48307],{"class":42,"line":13172},[40,48308,37659],{"class":997},[40,48310,48311,48313,48315,48317,48319],{"class":42,"line":13186},[40,48312,4873],{"class":1283},[40,48314,34520],{"class":63},[40,48316,6273],{"class":1283},[40,48318,34525],{"class":94},[40,48320,332],{"class":50},[40,48322,48323],{"class":42,"line":13192},[40,48324,37676],{"class":997},[40,48326,48327,48329,48331],{"class":42,"line":13219},[40,48328,34589],{"class":50},[40,48330,1284],{"class":1283},[40,48332,47851],{"class":50},[40,48334,48335],{"class":42,"line":13228},[40,48336,37689],{"class":997},[40,48338,48339],{"class":42,"line":13234},[40,48340,37694],{"class":997},[40,48342,48343,48345,48347],{"class":42,"line":13242},[40,48344,37699],{"class":50},[40,48346,37702],{"class":94},[40,48348,33797],{"class":50},[40,48350,48351],{"class":42,"line":13247},[40,48352,37709],{"class":997},[40,48354,48355,48357,48359],{"class":42,"line":19926},[40,48356,37322],{"class":50},[40,48358,1284],{"class":1283},[40,48360,37718],{"class":50},[40,48362,48363],{"class":42,"line":19932},[40,48364,37723],{"class":997},[40,48366,48367],{"class":42,"line":19955},[40,48368,37728],{"class":50},[40,48370,48371],{"class":42,"line":19961},[40,48372,1413],{"emptyLinePlaceholder":1412},[40,48374,48375],{"class":42,"line":19984},[40,48376,37737],{"class":997},[40,48378,48379],{"class":42,"line":19998},[40,48380,37742],{"class":997},[40,48382,48383,48385,48387,48389,48391,48393,48395],{"class":42,"line":20018},[40,48384,34537],{"class":50},[40,48386,1284],{"class":1283},[40,48388,34544],{"class":94},[40,48390,5035],{"class":1283},[40,48392,34549],{"class":50},[40,48394,5032],{"class":1283},[40,48396,37419],{"class":94},[40,48398,48399,48401,48403],{"class":42,"line":20024},[40,48400,34589],{"class":50},[40,48402,1284],{"class":1283},[40,48404,35589],{"class":50},[40,48406,48407],{"class":42,"line":20035},[40,48408,37771],{"class":997},[40,48410,48411],{"class":42,"line":20058},[40,48412,37776],{"class":997},[40,48414,48415,48417,48419,48421,48423,48425,48427,48429,48431,48433,48435,48437,48439,48441,48443,48445,48447,48449,48451,48453,48455,48457,48459],{"class":42,"line":20080},[40,48416,37781],{"class":50},[40,48418,1284],{"class":1283},[40,48420,4367],{"class":50},[40,48422,37788],{"class":94},[40,48424,1299],{"class":50},[40,48426,37793],{"class":94},[40,48428,1299],{"class":50},[40,48430,37798],{"class":94},[40,48432,1299],{"class":50},[40,48434,37803],{"class":94},[40,48436,1299],{"class":50},[40,48438,37808],{"class":94},[40,48440,1299],{"class":50},[40,48442,37813],{"class":94},[40,48444,1299],{"class":50},[40,48446,37818],{"class":94},[40,48448,1299],{"class":50},[40,48450,37823],{"class":94},[40,48452,1299],{"class":50},[40,48454,37828],{"class":94},[40,48456,1299],{"class":50},[40,48458,37833],{"class":94},[40,48460,36546],{"class":50},[40,48462,48463,48465],{"class":42,"line":20085},[40,48464,37478],{"class":1283},[40,48466,36184],{"class":50},[40,48468,48469],{"class":42,"line":20091},[40,48470,37846],{"class":997},[40,48472,48473,48475,48477,48479],{"class":42,"line":20105},[40,48474,6727],{"class":1283},[40,48476,37853],{"class":50},[40,48478,29355],{"class":1283},[40,48480,37497],{"class":50},[40,48482,48483,48485,48487],{"class":42,"line":20118},[40,48484,35910],{"class":50},[40,48486,1284],{"class":1283},[40,48488,35915],{"class":50},[40,48490,48491,48493,48495],{"class":42,"line":20123},[40,48492,35925],{"class":50},[40,48494,1284],{"class":1283},[40,48496,35930],{"class":50},[40,48498,48499],{"class":42,"line":20137},[40,48500,1413],{"emptyLinePlaceholder":1412},[40,48502,48503],{"class":42,"line":20142},[40,48504,37882],{"class":997},[40,48506,48507],{"class":42,"line":20148},[40,48508,36175],{"class":50},[40,48510,48511],{"class":42,"line":20153},[40,48512,37891],{"class":997},[40,48514,48515,48517,48519],{"class":42,"line":20167},[40,48516,35960],{"class":50},[40,48518,1284],{"class":1283},[40,48520,35965],{"class":50},[40,48522,48523],{"class":42,"line":20172},[40,48524,37904],{"class":997},[40,48526,48527,48529,48531,48533,48535,48537,48539],{"class":42,"line":20177},[40,48528,35977],{"class":50},[40,48530,1284],{"class":1283},[40,48532,35982],{"class":50},[40,48534,35985],{"class":8539},[40,48536,1284],{"class":1283},[40,48538,3698],{"class":63},[40,48540,1811],{"class":50},[40,48542,48543],{"class":42,"line":20191},[40,48544,37925],{"class":997},[40,48546,48547,48549,48551],{"class":42,"line":20203},[40,48548,37930],{"class":50},[40,48550,1284],{"class":1283},[40,48552,37935],{"class":50},[40,48554,48555,48557,48559],{"class":42,"line":20208},[40,48556,37940],{"class":50},[40,48558,1284],{"class":1283},[40,48560,37945],{"class":50},[40,48562,48563,48565,48567,48569,48571,48573,48575,48577],{"class":42,"line":20221},[40,48564,37950],{"class":63},[40,48566,3488],{"class":50},[40,48568,37955],{"class":94},[40,48570,37958],{"class":50},[40,48572,37961],{"class":94},[40,48574,1299],{"class":50},[40,48576,37966],{"class":94},[40,48578,37969],{"class":50},[402,48580,48582],{"id":48581},"_24训练自己的数据集","2.4.训练自己的数据集",[19,48584,48585],{},"猫狗分类任务",[19,48587,48588],{},"划分数据集和验证集",[31,48590,48592],{"className":33679,"code":48591,"language":2323,"meta":36,"style":36},"# 创建脚本，用于划分数据集和验证集\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",[26,48593,48594,48599,48606,48611,48622,48629,48633,48643,48657,48666,48670,48675,48685,48705,48709,48714,48724,48735,48748,48752,48757,48766,48776,48787,48791,48796,48806,48810,48815,48820,48825,48830,48835,48839,48849,48876,48889,48901,48928,48933,48938,48952,48957,48969,48984,48999,49007,49011,49016,49022,49034,49047,49052,49057,49062,49112,49118,49122],{"__ignoreMap":36},[40,48595,48596],{"class":42,"line":43},[40,48597,48598],{"class":997},"# 创建脚本，用于划分数据集和验证集\n",[40,48600,48601,48603],{"class":42,"line":54},[40,48602,33692],{"class":1283},[40,48604,48605],{"class":50}," os\n",[40,48607,48608],{"class":42,"line":70},[40,48609,48610],{"class":997},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[40,48612,48613,48615,48618,48620],{"class":42,"line":78},[40,48614,34037],{"class":1283},[40,48616,48617],{"class":50}," shutil ",[40,48619,33692],{"class":1283},[40,48621,35122],{"class":50},[40,48623,48624,48626],{"class":42,"line":86},[40,48625,33692],{"class":1283},[40,48627,48628],{"class":50}," random\n",[40,48630,48631],{"class":42,"line":100},[40,48632,1413],{"emptyLinePlaceholder":1412},[40,48634,48635,48637,48640],{"class":42,"line":108},[40,48636,35247],{"class":1283},[40,48638,48639],{"class":596}," mkfile",[40,48641,48642],{"class":50},"(file):\n",[40,48644,48645,48647,48649,48652,48655],{"class":42,"line":121},[40,48646,6425],{"class":1283},[40,48648,42230],{"class":1283},[40,48650,48651],{"class":50}," os.path.exists(",[40,48653,48654],{"class":8539},"file",[40,48656,34086],{"class":50},[40,48658,48659,48662,48664],{"class":42,"line":134},[40,48660,48661],{"class":50},"        os.makedirs(",[40,48663,48654],{"class":8539},[40,48665,1811],{"class":50},[40,48667,48668],{"class":42,"line":146},[40,48669,1413],{"emptyLinePlaceholder":1412},[40,48671,48672],{"class":42,"line":154},[40,48673,48674],{"class":997},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[40,48676,48677,48680,48682],{"class":42,"line":162},[40,48678,48679],{"class":50},"file_path",[40,48681,1284],{"class":1283},[40,48683,48684],{"class":94},"'data_cat_dog'\n",[40,48686,48687,48690,48692,48695,48697,48700,48702],{"class":42,"line":170},[40,48688,48689],{"class":50},"flower_class",[40,48691,1284],{"class":1283},[40,48693,48694],{"class":50},"[cla ",[40,48696,6349],{"class":1283},[40,48698,48699],{"class":50}," cla ",[40,48701,29355],{"class":1283},[40,48703,48704],{"class":50}," os.listdir(file_path)]\n",[40,48706,48707],{"class":42,"line":183},[40,48708,1413],{"emptyLinePlaceholder":1412},[40,48710,48711],{"class":42,"line":196},[40,48712,48713],{"class":997},"# 创建训练集train文件夹\n",[40,48715,48716,48719,48722],{"class":42,"line":204},[40,48717,48718],{"class":50},"mkfile(",[40,48720,48721],{"class":94},"'data\u002Ftrain'",[40,48723,1811],{"class":50},[40,48725,48726,48728,48730,48732],{"class":42,"line":217},[40,48727,6349],{"class":1283},[40,48729,48699],{"class":50},[40,48731,29355],{"class":1283},[40,48733,48734],{"class":50}," flower_class:\n",[40,48736,48737,48740,48743,48745],{"class":42,"line":230},[40,48738,48739],{"class":50},"    mkfile(",[40,48741,48742],{"class":94},"'data\u002Ftrain\u002F'",[40,48744,3960],{"class":1283},[40,48746,48747],{"class":50},"cla)\n",[40,48749,48750],{"class":42,"line":238},[40,48751,1413],{"emptyLinePlaceholder":1412},[40,48753,48754],{"class":42,"line":251},[40,48755,48756],{"class":997},"# 创建验证集val文件夹\n",[40,48758,48759,48761,48764],{"class":42,"line":264},[40,48760,48718],{"class":50},[40,48762,48763],{"class":94},"'data\u002Ftest'",[40,48765,1811],{"class":50},[40,48767,48768,48770,48772,48774],{"class":42,"line":277},[40,48769,6349],{"class":1283},[40,48771,48699],{"class":50},[40,48773,29355],{"class":1283},[40,48775,48734],{"class":50},[40,48777,48778,48780,48783,48785],{"class":42,"line":290},[40,48779,48739],{"class":50},[40,48781,48782],{"class":94},"'data\u002Ftest\u002F'",[40,48784,3960],{"class":1283},[40,48786,48747],{"class":50},[40,48788,48789],{"class":42,"line":298},[40,48790,1413],{"emptyLinePlaceholder":1412},[40,48792,48793],{"class":42,"line":310},[40,48794,48795],{"class":997},"# 划分比例，训练集：测试集=9：1\n",[40,48797,48798,48801,48803],{"class":42,"line":5086},[40,48799,48800],{"class":50},"split_rate",[40,48802,1284],{"class":1283},[40,48804,48805],{"class":63},"0.1\n",[40,48807,48808],{"class":42,"line":5091},[40,48809,1413],{"emptyLinePlaceholder":1412},[40,48811,48812],{"class":42,"line":5105},[40,48813,48814],{"class":997},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[40,48816,48817],{"class":42,"line":5110},[40,48818,48819],{"class":997},"# cla_path：当前类别的原始图片路径\n",[40,48821,48822],{"class":42,"line":5902},[40,48823,48824],{"class":997},"# images：当前类别下所有图片的文件名列表\n",[40,48826,48827],{"class":42,"line":5916},[40,48828,48829],{"class":997},"# num：该类别图片总数\n",[40,48831,48832],{"class":42,"line":5924},[40,48833,48834],{"class":997},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[40,48836,48837],{"class":42,"line":5929},[40,48838,1413],{"emptyLinePlaceholder":1412},[40,48840,48841,48843,48845,48847],{"class":42,"line":5935},[40,48842,6349],{"class":1283},[40,48844,48699],{"class":50},[40,48846,29355],{"class":1283},[40,48848,48734],{"class":50},[40,48850,48851,48854,48856,48859,48861,48864,48867,48869,48871,48873],{"class":42,"line":5941},[40,48852,48853],{"class":50},"    cla_path ",[40,48855,1284],{"class":1283},[40,48857,48858],{"class":50}," file_path ",[40,48860,3960],{"class":1283},[40,48862,48863],{"class":94}," '\u002F'",[40,48865,48866],{"class":1283}," +",[40,48868,48699],{"class":50},[40,48870,3960],{"class":1283},[40,48872,48863],{"class":94},[40,48874,48875],{"class":997},"  # 某一类别的子目录\n",[40,48877,48878,48881,48883,48886],{"class":42,"line":5946},[40,48879,48880],{"class":50},"    images ",[40,48882,1284],{"class":1283},[40,48884,48885],{"class":50}," os.listdir(cla_path)  ",[40,48887,48888],{"class":997},"# iamges 列表存储了该目录下所有图像的名称\n",[40,48890,48891,48894,48896,48898],{"class":42,"line":11270},[40,48892,48893],{"class":50},"    num ",[40,48895,1284],{"class":1283},[40,48897,10654],{"class":63},[40,48899,48900],{"class":50},"(images)\n",[40,48902,48903,48906,48908,48911,48913,48915,48917,48920,48922,48925],{"class":42,"line":11294},[40,48904,48905],{"class":50},"    eval_index ",[40,48907,1284],{"class":1283},[40,48909,48910],{"class":50}," random.sample(images, ",[40,48912,3972],{"class":8539},[40,48914,1284],{"class":1283},[40,48916,3491],{"class":63},[40,48918,48919],{"class":50},"(num ",[40,48921,3934],{"class":1283},[40,48923,48924],{"class":50}," split_rate))  ",[40,48926,48927],{"class":997},"# 从images列表中随机抽取 k 个图像名称\n",[40,48929,48930],{"class":42,"line":11299},[40,48931,48932],{"class":997},"    # 遍历该类别下的所有图片\n",[40,48934,48935],{"class":42,"line":11305},[40,48936,48937],{"class":997},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[40,48939,48940,48942,48945,48947,48949],{"class":42,"line":11332},[40,48941,6525],{"class":1283},[40,48943,48944],{"class":50}," index, image ",[40,48946,29355],{"class":1283},[40,48948,34906],{"class":63},[40,48950,48951],{"class":50},"(images):\n",[40,48953,48954],{"class":42,"line":11337},[40,48955,48956],{"class":997},"        # eval_index 中保存验证集val的图像名称\n",[40,48958,48959,48961,48964,48966],{"class":42,"line":11343},[40,48960,5822],{"class":1283},[40,48962,48963],{"class":50}," image ",[40,48965,29355],{"class":1283},[40,48967,48968],{"class":50}," eval_index:\n",[40,48970,48971,48974,48976,48979,48981],{"class":42,"line":11355},[40,48972,48973],{"class":50},"            image_path ",[40,48975,1284],{"class":1283},[40,48977,48978],{"class":50}," cla_path ",[40,48980,3960],{"class":1283},[40,48982,48983],{"class":50}," image\n",[40,48985,48986,48989,48991,48994,48996],{"class":42,"line":11367},[40,48987,48988],{"class":50},"            new_path ",[40,48990,1284],{"class":1283},[40,48992,48993],{"class":94}," 'data\u002Ftest\u002F'",[40,48995,48866],{"class":1283},[40,48997,48998],{"class":50}," cla\n",[40,49000,49001,49004],{"class":42,"line":11379},[40,49002,49003],{"class":50},"            copy(image_path, new_path)  ",[40,49005,49006],{"class":997},"# 将选中的图像复制到新路径\n",[40,49008,49009],{"class":42,"line":13038},[40,49010,1413],{"emptyLinePlaceholder":1412},[40,49012,49013],{"class":42,"line":13063},[40,49014,49015],{"class":997},"        # 其余的图像保存在训练集train中\n",[40,49017,49018,49020],{"class":42,"line":13086},[40,49019,5859],{"class":1283},[40,49021,332],{"class":50},[40,49023,49024,49026,49028,49030,49032],{"class":42,"line":13110},[40,49025,48973],{"class":50},[40,49027,1284],{"class":1283},[40,49029,48978],{"class":50},[40,49031,3960],{"class":1283},[40,49033,48983],{"class":50},[40,49035,49036,49038,49040,49043,49045],{"class":42,"line":13115},[40,49037,48988],{"class":50},[40,49039,1284],{"class":1283},[40,49041,49042],{"class":94}," 'data\u002Ftrain\u002F'",[40,49044,48866],{"class":1283},[40,49046,48998],{"class":50},[40,49048,49049],{"class":42,"line":13120},[40,49050,49051],{"class":50},"            copy(image_path, new_path)\n",[40,49053,49054],{"class":42,"line":13125},[40,49055,49056],{"class":997},"            # 打印进度条信息\n",[40,49058,49059],{"class":42,"line":13134},[40,49060,49061],{"class":997},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[40,49063,49064,49066,49068,49070,49073,49075,49077,49080,49082,49084,49086,49089,49092,49094,49096,49099,49102,49104,49106,49109],{"class":42,"line":13139},[40,49065,35751],{"class":63},[40,49067,3488],{"class":50},[40,49069,3731],{"class":94},[40,49071,49072],{"class":63},"\\r",[40,49074,4367],{"class":94},[40,49076,35759],{"class":63},[40,49078,49079],{"class":94},"] processing [",[40,49081,35759],{"class":63},[40,49083,4063],{"class":94},[40,49085,35759],{"class":63},[40,49087,49088],{"class":94},"]\"",[40,49090,49091],{"class":50},".format(cla, index ",[40,49093,3960],{"class":1283},[40,49095,28431],{"class":63},[40,49097,49098],{"class":50},", num), ",[40,49100,49101],{"class":8539},"end",[40,49103,1284],{"class":1283},[40,49105,285],{"class":94},[40,49107,49108],{"class":50},")  ",[40,49110,49111],{"class":997},"# processing bar\n",[40,49113,49114,49116],{"class":42,"line":13145},[40,49115,34599],{"class":63},[40,49117,5302],{"class":50},[40,49119,49120],{"class":42,"line":13166},[40,49121,1413],{"emptyLinePlaceholder":1412},[40,49123,49124,49126,49128,49131],{"class":42,"line":13172},[40,49125,33715],{"class":63},[40,49127,3488],{"class":50},[40,49129,49130],{"class":94},"\"processing done!\"",[40,49132,1811],{"class":50},[19,49134,49135],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[2423,49137,49139],{"id":49138},"_242模型代码","2.4.2.模型代码",[19,49141,49142],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[31,49144,49146],{"className":33679,"code":49145,"language":2323,"meta":36,"style":36},"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",[26,49147,49148,49154,49164,49174,49178,49194,49202,49216,49226,49230,49260,49264,49298,49344,49348,49382,49428,49432,49436,49470,49500,49504,49512,49526,49548,49570,49588,49592,49606,49610,49614,49630,49634,49642,49656,49666,49710,49714,49742,49746,49756,49784,49788,49824,49828,49856,49860,49870,49902,49934,49962,49966,49976,50008,50040,50072,50104,50136,50164,50168,50178,50210,50242,50254,50258,50270,50274,50278,50290,50298,50318,50322,50326,50330,50334,50338,50342,50356,50364,50372,50384,50398,50406,50410,50418,50428,50438,50448,50458,50468,50474,50478,50482,50494,50514,50522],{"__ignoreMap":36},[40,49149,49150,49152],{"class":42,"line":43},[40,49151,33692],{"class":1283},[40,49153,33695],{"class":50},[40,49155,49156,49158,49160,49162],{"class":42,"line":54},[40,49157,34037],{"class":1283},[40,49159,34040],{"class":50},[40,49161,33692],{"class":1283},[40,49163,34045],{"class":50},[40,49165,49166,49168,49170,49172],{"class":42,"line":70},[40,49167,34037],{"class":1283},[40,49169,34057],{"class":50},[40,49171,33692],{"class":1283},[40,49173,34062],{"class":50},[40,49175,49176],{"class":42,"line":78},[40,49177,1413],{"emptyLinePlaceholder":1412},[40,49179,49180,49182,49184,49186,49188,49190,49192],{"class":42,"line":86},[40,49181,18016],{"class":1283},[40,49183,44793],{"class":596},[40,49185,3488],{"class":50},[40,49187,34078],{"class":596},[40,49189,4037],{"class":50},[40,49191,34083],{"class":596},[40,49193,34086],{"class":50},[40,49195,49196,49198,49200],{"class":42,"line":100},[40,49197,34101],{"class":1283},[40,49199,34104],{"class":63},[40,49201,44812],{"class":50},[40,49203,49204,49206,49208,49210,49212,49214],{"class":42,"line":108},[40,49205,34117],{"class":63},[40,49207,44819],{"class":50},[40,49209,34123],{"class":63},[40,49211,34126],{"class":50},[40,49213,34129],{"class":63},[40,49215,5302],{"class":50},[40,49217,49218,49220,49222,49224],{"class":42,"line":121},[40,49219,34145],{"class":63},[40,49221,38071],{"class":50},[40,49223,1284],{"class":1283},[40,49225,38076],{"class":50},[40,49227,49228],{"class":42,"line":134},[40,49229,44842],{"class":997},[40,49231,49232,49234,49236,49238,49240,49242,49244,49246,49248,49250,49252,49254,49256,49258],{"class":42,"line":146},[40,49233,34145],{"class":63},[40,49235,44849],{"class":50},[40,49237,1284],{"class":1283},[40,49239,34153],{"class":50},[40,49241,34156],{"class":8539},[40,49243,1284],{"class":1283},[40,49245,44860],{"class":50},[40,49247,34165],{"class":8539},[40,49249,1284],{"class":1283},[40,49251,44867],{"class":50},[40,49253,34174],{"class":8539},[40,49255,1284],{"class":1283},[40,49257,3698],{"class":63},[40,49259,1811],{"class":50},[40,49261,49262],{"class":42,"line":154},[40,49263,44880],{"class":997},[40,49265,49266,49268,49270,49272,49274,49276,49278,49280,49282,49284,49286,49288,49290,49292,49294,49296],{"class":42,"line":162},[40,49267,34145],{"class":63},[40,49269,44887],{"class":50},[40,49271,1284],{"class":1283},[40,49273,34153],{"class":50},[40,49275,34156],{"class":8539},[40,49277,1284],{"class":1283},[40,49279,44860],{"class":50},[40,49281,34165],{"class":8539},[40,49283,1284],{"class":1283},[40,49285,44904],{"class":50},[40,49287,3672],{"class":63},[40,49289,44909],{"class":50},[40,49291,34174],{"class":8539},[40,49293,1284],{"class":1283},[40,49295,3698],{"class":63},[40,49297,1811],{"class":50},[40,49299,49300,49302,49304,49306,49308,49310,49312,49314,49316,49318,49320,49322,49324,49326,49328,49330,49332,49334,49336,49338,49340,49342],{"class":42,"line":170},[40,49301,34145],{"class":63},[40,49303,44924],{"class":50},[40,49305,1284],{"class":1283},[40,49307,34153],{"class":50},[40,49309,34156],{"class":8539},[40,49311,1284],{"class":1283},[40,49313,44904],{"class":50},[40,49315,3672],{"class":63},[40,49317,44909],{"class":50},[40,49319,34165],{"class":8539},[40,49321,1284],{"class":1283},[40,49323,44904],{"class":50},[40,49325,3698],{"class":63},[40,49327,44909],{"class":50},[40,49329,34174],{"class":8539},[40,49331,1284],{"class":1283},[40,49333,3555],{"class":63},[40,49335,1299],{"class":50},[40,49337,34183],{"class":8539},[40,49339,1284],{"class":1283},[40,49341,3698],{"class":63},[40,49343,1811],{"class":50},[40,49345,49346],{"class":42,"line":183},[40,49347,44969],{"class":997},[40,49349,49350,49352,49354,49356,49358,49360,49362,49364,49366,49368,49370,49372,49374,49376,49378,49380],{"class":42,"line":196},[40,49351,34145],{"class":63},[40,49353,44976],{"class":50},[40,49355,1284],{"class":1283},[40,49357,34153],{"class":50},[40,49359,34156],{"class":8539},[40,49361,1284],{"class":1283},[40,49363,44860],{"class":50},[40,49365,34165],{"class":8539},[40,49367,1284],{"class":1283},[40,49369,44993],{"class":50},[40,49371,3672],{"class":63},[40,49373,44909],{"class":50},[40,49375,34174],{"class":8539},[40,49377,1284],{"class":1283},[40,49379,3698],{"class":63},[40,49381,1811],{"class":50},[40,49383,49384,49386,49388,49390,49392,49394,49396,49398,49400,49402,49404,49406,49408,49410,49412,49414,49416,49418,49420,49422,49424,49426],{"class":42,"line":204},[40,49385,34145],{"class":63},[40,49387,45012],{"class":50},[40,49389,1284],{"class":1283},[40,49391,34153],{"class":50},[40,49393,34156],{"class":8539},[40,49395,1284],{"class":1283},[40,49397,44993],{"class":50},[40,49399,3672],{"class":63},[40,49401,44909],{"class":50},[40,49403,34165],{"class":8539},[40,49405,1284],{"class":1283},[40,49407,44993],{"class":50},[40,49409,3698],{"class":63},[40,49411,44909],{"class":50},[40,49413,34174],{"class":8539},[40,49415,1284],{"class":1283},[40,49417,3799],{"class":63},[40,49419,1299],{"class":50},[40,49421,34183],{"class":8539},[40,49423,1284],{"class":1283},[40,49425,64],{"class":63},[40,49427,1811],{"class":50},[40,49429,49430],{"class":42,"line":217},[40,49431,45057],{"class":997},[40,49433,49434],{"class":42,"line":230},[40,49435,45062],{"class":997},[40,49437,49438,49440,49442,49444,49446,49448,49450,49452,49454,49456,49458,49460,49462,49464,49466,49468],{"class":42,"line":238},[40,49439,34145],{"class":63},[40,49441,45069],{"class":50},[40,49443,1284],{"class":1283},[40,49445,38129],{"class":50},[40,49447,34174],{"class":8539},[40,49449,1284],{"class":1283},[40,49451,3555],{"class":63},[40,49453,1299],{"class":50},[40,49455,34229],{"class":8539},[40,49457,1284],{"class":1283},[40,49459,3698],{"class":63},[40,49461,1299],{"class":50},[40,49463,34183],{"class":8539},[40,49465,1284],{"class":1283},[40,49467,3698],{"class":63},[40,49469,1811],{"class":50},[40,49471,49472,49474,49476,49478,49480,49482,49484,49486,49488,49490,49492,49494,49496,49498],{"class":42,"line":251},[40,49473,34145],{"class":63},[40,49475,45104],{"class":50},[40,49477,1284],{"class":1283},[40,49479,34153],{"class":50},[40,49481,34156],{"class":8539},[40,49483,1284],{"class":1283},[40,49485,44860],{"class":50},[40,49487,34165],{"class":8539},[40,49489,1284],{"class":1283},[40,49491,45121],{"class":50},[40,49493,34174],{"class":8539},[40,49495,1284],{"class":1283},[40,49497,3698],{"class":63},[40,49499,1811],{"class":50},[40,49501,49502],{"class":42,"line":264},[40,49503,1413],{"emptyLinePlaceholder":1412},[40,49505,49506,49508,49510],{"class":42,"line":277},[40,49507,34101],{"class":1283},[40,49509,34393],{"class":596},[40,49511,34396],{"class":50},[40,49513,49514,49516,49518,49520,49522,49524],{"class":42,"line":290},[40,49515,45146],{"class":50},[40,49517,1284],{"class":1283},[40,49519,34123],{"class":63},[40,49521,38484],{"class":50},[40,49523,34123],{"class":63},[40,49525,45157],{"class":50},[40,49527,49528,49530,49532,49534,49536,49538,49540,49542,49544,49546],{"class":42,"line":298},[40,49529,10408],{"class":50},[40,49531,1284],{"class":1283},[40,49533,34123],{"class":63},[40,49535,38484],{"class":50},[40,49537,34123],{"class":63},[40,49539,45172],{"class":50},[40,49541,34123],{"class":63},[40,49543,38484],{"class":50},[40,49545,34123],{"class":63},[40,49547,45181],{"class":50},[40,49549,49550,49552,49554,49556,49558,49560,49562,49564,49566,49568],{"class":42,"line":310},[40,49551,45186],{"class":50},[40,49553,1284],{"class":1283},[40,49555,34123],{"class":63},[40,49557,38484],{"class":50},[40,49559,34123],{"class":63},[40,49561,45197],{"class":50},[40,49563,34123],{"class":63},[40,49565,38484],{"class":50},[40,49567,34123],{"class":63},[40,49569,45206],{"class":50},[40,49571,49572,49574,49576,49578,49580,49582,49584,49586],{"class":42,"line":5086},[40,49573,45211],{"class":50},[40,49575,1284],{"class":1283},[40,49577,34123],{"class":63},[40,49579,38484],{"class":50},[40,49581,34123],{"class":63},[40,49583,45222],{"class":50},[40,49585,34123],{"class":63},[40,49587,45227],{"class":50},[40,49589,49590],{"class":42,"line":5091},[40,49591,45232],{"class":997},[40,49593,49594,49596,49598,49600,49602,49604],{"class":42,"line":5105},[40,49595,18074],{"class":1283},[40,49597,45239],{"class":50},[40,49599,35985],{"class":8539},[40,49601,1284],{"class":1283},[40,49603,3698],{"class":63},[40,49605,1811],{"class":50},[40,49607,49608],{"class":42,"line":5110},[40,49609,1413],{"emptyLinePlaceholder":1412},[40,49611,49612],{"class":42,"line":5902},[40,49613,45260],{"class":997},[40,49615,49616,49618,49620,49622,49624,49626,49628],{"class":42,"line":5916},[40,49617,18016],{"class":1283},[40,49619,45267],{"class":596},[40,49621,3488],{"class":50},[40,49623,34078],{"class":596},[40,49625,4037],{"class":50},[40,49627,34083],{"class":596},[40,49629,34086],{"class":50},[40,49631,49632],{"class":42,"line":5924},[40,49633,45282],{"class":997},[40,49635,49636,49638,49640],{"class":42,"line":5929},[40,49637,34101],{"class":1283},[40,49639,34104],{"class":63},[40,49641,45291],{"class":50},[40,49643,49644,49646,49648,49650,49652,49654],{"class":42,"line":5935},[40,49645,34117],{"class":63},[40,49647,45298],{"class":50},[40,49649,34123],{"class":63},[40,49651,34126],{"class":50},[40,49653,34129],{"class":63},[40,49655,5302],{"class":50},[40,49657,49658,49660,49662,49664],{"class":42,"line":5941},[40,49659,34145],{"class":63},[40,49661,45313],{"class":50},[40,49663,1284],{"class":1283},[40,49665,41309],{"class":50},[40,49667,49668,49670,49672,49674,49676,49678,49680,49682,49684,49686,49688,49690,49692,49694,49696,49698,49700,49702,49704,49706,49708],{"class":42,"line":5946},[40,49669,41314],{"class":50},[40,49671,34156],{"class":8539},[40,49673,1284],{"class":1283},[40,49675,3555],{"class":63},[40,49677,1299],{"class":50},[40,49679,34165],{"class":8539},[40,49681,1284],{"class":1283},[40,49683,3684],{"class":63},[40,49685,1299],{"class":50},[40,49687,34174],{"class":8539},[40,49689,1284],{"class":1283},[40,49691,3849],{"class":63},[40,49693,1299],{"class":50},[40,49695,34229],{"class":8539},[40,49697,1284],{"class":1283},[40,49699,64],{"class":63},[40,49701,1299],{"class":50},[40,49703,34183],{"class":8539},[40,49705,1284],{"class":1283},[40,49707,3555],{"class":63},[40,49709,41347],{"class":50},[40,49711,49712],{"class":42,"line":11270},[40,49713,41352],{"class":50},[40,49715,49716,49718,49720,49722,49724,49726,49728,49730,49732,49734,49736,49738,49740],{"class":42,"line":11294},[40,49717,41397],{"class":50},[40,49719,34174],{"class":8539},[40,49721,1284],{"class":1283},[40,49723,3555],{"class":63},[40,49725,1299],{"class":50},[40,49727,34229],{"class":8539},[40,49729,1284],{"class":1283},[40,49731,64],{"class":63},[40,49733,1299],{"class":50},[40,49735,34183],{"class":8539},[40,49737,1284],{"class":1283},[40,49739,3698],{"class":63},[40,49741,1811],{"class":50},[40,49743,49744],{"class":42,"line":11299},[40,49745,41426],{"class":50},[40,49747,49748,49750,49752,49754],{"class":42,"line":11305},[40,49749,34145],{"class":63},[40,49751,45404],{"class":50},[40,49753,1284],{"class":1283},[40,49755,41309],{"class":50},[40,49757,49758,49760,49762,49764,49766,49768,49770,49772,49774,49776,49778,49780,49782],{"class":42,"line":11332},[40,49759,41314],{"class":50},[40,49761,34156],{"class":8539},[40,49763,1284],{"class":1283},[40,49765,3684],{"class":63},[40,49767,1299],{"class":50},[40,49769,34165],{"class":8539},[40,49771,1284],{"class":1283},[40,49773,3684],{"class":63},[40,49775,1299],{"class":50},[40,49777,34174],{"class":8539},[40,49779,1284],{"class":1283},[40,49781,3698],{"class":63},[40,49783,41347],{"class":50},[40,49785,49786],{"class":42,"line":11337},[40,49787,41352],{"class":50},[40,49789,49790,49792,49794,49796,49798,49800,49802,49804,49806,49808,49810,49812,49814,49816,49818,49820,49822],{"class":42,"line":11343},[40,49791,41314],{"class":50},[40,49793,34156],{"class":8539},[40,49795,1284],{"class":1283},[40,49797,3684],{"class":63},[40,49799,1299],{"class":50},[40,49801,34165],{"class":8539},[40,49803,1284],{"class":1283},[40,49805,45459],{"class":63},[40,49807,1299],{"class":50},[40,49809,34174],{"class":8539},[40,49811,1284],{"class":1283},[40,49813,3555],{"class":63},[40,49815,1299],{"class":50},[40,49817,34183],{"class":8539},[40,49819,1284],{"class":1283},[40,49821,3698],{"class":63},[40,49823,41347],{"class":50},[40,49825,49826],{"class":42,"line":11355},[40,49827,41352],{"class":50},[40,49829,49830,49832,49834,49836,49838,49840,49842,49844,49846,49848,49850,49852,49854],{"class":42,"line":11367},[40,49831,41397],{"class":50},[40,49833,34174],{"class":8539},[40,49835,1284],{"class":1283},[40,49837,3555],{"class":63},[40,49839,1299],{"class":50},[40,49841,34229],{"class":8539},[40,49843,1284],{"class":1283},[40,49845,64],{"class":63},[40,49847,1299],{"class":50},[40,49849,34183],{"class":8539},[40,49851,1284],{"class":1283},[40,49853,3698],{"class":63},[40,49855,1811],{"class":50},[40,49857,49858],{"class":42,"line":11379},[40,49859,41426],{"class":50},[40,49861,49862,49864,49866,49868],{"class":42,"line":13038},[40,49863,34145],{"class":63},[40,49865,45520],{"class":50},[40,49867,1284],{"class":1283},[40,49869,41309],{"class":50},[40,49871,49872,49874,49876,49878,49880,49882,49884,49886,49888,49890,49892,49894,49896,49898,49900],{"class":42,"line":13063},[40,49873,45529],{"class":50},[40,49875,45459],{"class":63},[40,49877,1299],{"class":50},[40,49879,3684],{"class":63},[40,49881,45538],{"class":50},[40,49883,3690],{"class":63},[40,49885,1299],{"class":50},[40,49887,35370],{"class":63},[40,49889,45547],{"class":50},[40,49891,4080],{"class":63},[40,49893,1299],{"class":50},[40,49895,3678],{"class":63},[40,49897,45556],{"class":50},[40,49899,3678],{"class":63},[40,49901,41347],{"class":50},[40,49903,49904,49906,49908,49910,49912,49914,49916,49918,49920,49922,49924,49926,49928,49930,49932],{"class":42,"line":13086},[40,49905,45529],{"class":50},[40,49907,38170],{"class":63},[40,49909,1299],{"class":50},[40,49911,35370],{"class":63},[40,49913,45538],{"class":50},[40,49915,35370],{"class":63},[40,49917,1299],{"class":50},[40,49919,45459],{"class":63},[40,49921,45547],{"class":50},[40,49923,3678],{"class":63},[40,49925,1299],{"class":50},[40,49927,3690],{"class":63},[40,49929,45556],{"class":50},[40,49931,3684],{"class":63},[40,49933,41347],{"class":50},[40,49935,49936,49938,49940,49942,49944,49946,49948,49950,49952,49954,49956,49958,49960],{"class":42,"line":13110},[40,49937,41397],{"class":50},[40,49939,34174],{"class":8539},[40,49941,1284],{"class":1283},[40,49943,3555],{"class":63},[40,49945,1299],{"class":50},[40,49947,34229],{"class":8539},[40,49949,1284],{"class":1283},[40,49951,64],{"class":63},[40,49953,1299],{"class":50},[40,49955,34183],{"class":8539},[40,49957,1284],{"class":1283},[40,49959,3698],{"class":63},[40,49961,1811],{"class":50},[40,49963,49964],{"class":42,"line":13115},[40,49965,41426],{"class":50},[40,49967,49968,49970,49972,49974],{"class":42,"line":13120},[40,49969,34145],{"class":63},[40,49971,45631],{"class":50},[40,49973,1284],{"class":1283},[40,49975,41309],{"class":50},[40,49977,49978,49980,49982,49984,49986,49988,49990,49992,49994,49996,49998,50000,50002,50004,50006],{"class":42,"line":13125},[40,49979,45529],{"class":50},[40,49981,45642],{"class":63},[40,49983,1299],{"class":50},[40,49985,45459],{"class":63},[40,49987,45538],{"class":50},[40,49989,3690],{"class":63},[40,49991,1299],{"class":50},[40,49993,45655],{"class":63},[40,49995,45547],{"class":50},[40,49997,4080],{"class":63},[40,49999,1299],{"class":50},[40,50001,4086],{"class":63},[40,50003,45556],{"class":50},[40,50005,3684],{"class":63},[40,50007,41347],{"class":50},[40,50009,50010,50012,50014,50016,50018,50020,50022,50024,50026,50028,50030,50032,50034,50036,50038],{"class":42,"line":13134},[40,50011,45529],{"class":50},[40,50013,41757],{"class":63},[40,50015,1299],{"class":50},[40,50017,24369],{"class":63},[40,50019,45538],{"class":50},[40,50021,4097],{"class":63},[40,50023,1299],{"class":50},[40,50025,34801],{"class":63},[40,50027,45547],{"class":50},[40,50029,4277],{"class":63},[40,50031,1299],{"class":50},[40,50033,3684],{"class":63},[40,50035,45556],{"class":50},[40,50037,3684],{"class":63},[40,50039,41347],{"class":50},[40,50041,50042,50044,50046,50048,50050,50052,50054,50056,50058,50060,50062,50064,50066,50068,50070],{"class":42,"line":13139},[40,50043,45529],{"class":50},[40,50045,41757],{"class":63},[40,50047,1299],{"class":50},[40,50049,35370],{"class":63},[40,50051,45538],{"class":50},[40,50053,35370],{"class":63},[40,50055,1299],{"class":50},[40,50057,38170],{"class":63},[40,50059,45547],{"class":50},[40,50061,4277],{"class":63},[40,50063,1299],{"class":50},[40,50065,3684],{"class":63},[40,50067,45556],{"class":50},[40,50069,3684],{"class":63},[40,50071,41347],{"class":50},[40,50073,50074,50076,50078,50080,50082,50084,50086,50088,50090,50092,50094,50096,50098,50100,50102],{"class":42,"line":13145},[40,50075,45529],{"class":50},[40,50077,41757],{"class":63},[40,50079,1299],{"class":50},[40,50081,4097],{"class":63},[40,50083,45538],{"class":50},[40,50085,35370],{"class":63},[40,50087,1299],{"class":50},[40,50089,45752],{"class":63},[40,50091,45547],{"class":50},[40,50093,3678],{"class":63},[40,50095,1299],{"class":50},[40,50097,3684],{"class":63},[40,50099,45556],{"class":50},[40,50101,3684],{"class":63},[40,50103,41347],{"class":50},[40,50105,50106,50108,50110,50112,50114,50116,50118,50120,50122,50124,50126,50128,50130,50132,50134],{"class":42,"line":13166},[40,50107,45529],{"class":50},[40,50109,45773],{"class":63},[40,50111,1299],{"class":50},[40,50113,38170],{"class":63},[40,50115,45538],{"class":50},[40,50117,24369],{"class":63},[40,50119,1299],{"class":50},[40,50121,45786],{"class":63},[40,50123,45547],{"class":50},[40,50125,3678],{"class":63},[40,50127,1299],{"class":50},[40,50129,35370],{"class":63},[40,50131,45556],{"class":50},[40,50133,35370],{"class":63},[40,50135,41347],{"class":50},[40,50137,50138,50140,50142,50144,50146,50148,50150,50152,50154,50156,50158,50160,50162],{"class":42,"line":13172},[40,50139,41397],{"class":50},[40,50141,34174],{"class":8539},[40,50143,1284],{"class":1283},[40,50145,3555],{"class":63},[40,50147,1299],{"class":50},[40,50149,34229],{"class":8539},[40,50151,1284],{"class":1283},[40,50153,64],{"class":63},[40,50155,1299],{"class":50},[40,50157,34183],{"class":8539},[40,50159,1284],{"class":1283},[40,50161,3698],{"class":63},[40,50163,1811],{"class":50},[40,50165,50166],{"class":42,"line":13186},[40,50167,41426],{"class":50},[40,50169,50170,50172,50174,50176],{"class":42,"line":13192},[40,50171,34145],{"class":63},[40,50173,45839],{"class":50},[40,50175,1284],{"class":1283},[40,50177,41309],{"class":50},[40,50179,50180,50182,50184,50186,50188,50190,50192,50194,50196,50198,50200,50202,50204,50206,50208],{"class":42,"line":13219},[40,50181,45529],{"class":50},[40,50183,45850],{"class":63},[40,50185,1299],{"class":50},[40,50187,38170],{"class":63},[40,50189,45538],{"class":50},[40,50191,24369],{"class":63},[40,50193,1299],{"class":50},[40,50195,45786],{"class":63},[40,50197,45547],{"class":50},[40,50199,3678],{"class":63},[40,50201,1299],{"class":50},[40,50203,35370],{"class":63},[40,50205,45556],{"class":50},[40,50207,35370],{"class":63},[40,50209,41347],{"class":50},[40,50211,50212,50214,50216,50218,50220,50222,50224,50226,50228,50230,50232,50234,50236,50238,50240],{"class":42,"line":13228},[40,50213,45529],{"class":50},[40,50215,45850],{"class":63},[40,50217,1299],{"class":50},[40,50219,38240],{"class":63},[40,50221,45538],{"class":50},[40,50223,45459],{"class":63},[40,50225,1299],{"class":50},[40,50227,38240],{"class":63},[40,50229,45547],{"class":50},[40,50231,4086],{"class":63},[40,50233,1299],{"class":50},[40,50235,35370],{"class":63},[40,50237,45556],{"class":50},[40,50239,35370],{"class":63},[40,50241,41347],{"class":50},[40,50243,50244,50246,50248,50250,50252],{"class":42,"line":13234},[40,50245,45913],{"class":50},[40,50247,3698],{"class":63},[40,50249,1299],{"class":50},[40,50251,3698],{"class":63},[40,50253,45922],{"class":50},[40,50255,50256],{"class":42,"line":13242},[40,50257,42090],{"class":50},[40,50259,50260,50262,50264,50266,50268],{"class":42,"line":13247},[40,50261,42095],{"class":50},[40,50263,45933],{"class":63},[40,50265,1299],{"class":50},[40,50267,64],{"class":63},[40,50269,1811],{"class":50},[40,50271,50272],{"class":42,"line":19926},[40,50273,41426],{"class":50},[40,50275,50276],{"class":42,"line":19932},[40,50277,45948],{"class":997},[40,50279,50280,50282,50284,50286,50288],{"class":42,"line":19955},[40,50281,6727],{"class":1283},[40,50283,42168],{"class":50},[40,50285,29355],{"class":1283},[40,50287,42173],{"class":63},[40,50289,42176],{"class":50},[40,50291,50292,50294,50296],{"class":42,"line":19961},[40,50293,7965],{"class":1283},[40,50295,42188],{"class":63},[40,50297,42191],{"class":50},[40,50299,50300,50302,50304,50306,50308,50310,50312,50314,50316],{"class":42,"line":19984},[40,50301,42201],{"class":50},[40,50303,45975],{"class":8539},[40,50305,1284],{"class":1283},[40,50307,45980],{"class":94},[40,50309,1299],{"class":50},[40,50311,42204],{"class":8539},[40,50313,1284],{"class":1283},[40,50315,42209],{"class":94},[40,50317,1811],{"class":50},[40,50319,50320],{"class":42,"line":19998},[40,50321,45995],{"class":997},[40,50323,50324],{"class":42,"line":20018},[40,50325,46000],{"class":997},[40,50327,50328],{"class":42,"line":20024},[40,50329,46005],{"class":997},[40,50331,50332],{"class":42,"line":20035},[40,50333,46010],{"class":997},[40,50335,50336],{"class":42,"line":20058},[40,50337,46015],{"class":997},[40,50339,50340],{"class":42,"line":20080},[40,50341,46020],{"class":997},[40,50343,50344,50346,50348,50350,50352,50354],{"class":42,"line":20085},[40,50345,42221],{"class":1283},[40,50347,42224],{"class":50},[40,50349,42227],{"class":1283},[40,50351,42230],{"class":1283},[40,50353,42233],{"class":63},[40,50355,332],{"class":50},[40,50357,50358,50360,50362],{"class":42,"line":20091},[40,50359,42245],{"class":50},[40,50361,3672],{"class":63},[40,50363,1811],{"class":50},[40,50365,50366,50368,50370],{"class":42,"line":20105},[40,50367,46047],{"class":1283},[40,50369,42188],{"class":63},[40,50371,42264],{"class":50},[40,50373,50374,50376,50378,50380,50382],{"class":42,"line":20118},[40,50375,46056],{"class":50},[40,50377,3672],{"class":63},[40,50379,1299],{"class":50},[40,50381,42286],{"class":63},[40,50383,1811],{"class":50},[40,50385,50386,50388,50390,50392,50394,50396],{"class":42,"line":20123},[40,50387,46069],{"class":1283},[40,50389,42224],{"class":50},[40,50391,42227],{"class":1283},[40,50393,42230],{"class":1283},[40,50395,42233],{"class":63},[40,50397,332],{"class":50},[40,50399,50400,50402,50404],{"class":42,"line":20137},[40,50401,46084],{"class":50},[40,50403,3672],{"class":63},[40,50405,1811],{"class":50},[40,50407,50408],{"class":42,"line":20142},[40,50409,38465],{"class":997},[40,50411,50412,50414,50416],{"class":42,"line":20148},[40,50413,34101],{"class":1283},[40,50415,34393],{"class":596},[40,50417,34396],{"class":50},[40,50419,50420,50422,50424,50426],{"class":42,"line":20153},[40,50421,34401],{"class":50},[40,50423,1284],{"class":1283},[40,50425,34123],{"class":63},[40,50427,46111],{"class":50},[40,50429,50430,50432,50434,50436],{"class":42,"line":20167},[40,50431,34401],{"class":50},[40,50433,1284],{"class":1283},[40,50435,34123],{"class":63},[40,50437,46122],{"class":50},[40,50439,50440,50442,50444,50446],{"class":42,"line":20172},[40,50441,34401],{"class":50},[40,50443,1284],{"class":1283},[40,50445,34123],{"class":63},[40,50447,46133],{"class":50},[40,50449,50450,50452,50454,50456],{"class":42,"line":20177},[40,50451,34401],{"class":50},[40,50453,1284],{"class":1283},[40,50455,34123],{"class":63},[40,50457,46144],{"class":50},[40,50459,50460,50462,50464,50466],{"class":42,"line":20191},[40,50461,34401],{"class":50},[40,50463,1284],{"class":1283},[40,50465,34123],{"class":63},[40,50467,46155],{"class":50},[40,50469,50470,50472],{"class":42,"line":20203},[40,50471,18074],{"class":1283},[40,50473,34509],{"class":50},[40,50475,50476],{"class":42,"line":20208},[40,50477,1413],{"emptyLinePlaceholder":1412},[40,50479,50480],{"class":42,"line":20221},[40,50481,46170],{"class":997},[40,50483,50484,50486,50488,50490,50492],{"class":42,"line":20226},[40,50485,4873],{"class":1283},[40,50487,34520],{"class":63},[40,50489,6273],{"class":1283},[40,50491,34525],{"class":94},[40,50493,332],{"class":50},[40,50495,50496,50498,50500,50502,50504,50506,50508,50510,50512],{"class":42,"line":20231},[40,50497,34537],{"class":50},[40,50499,1284],{"class":1283},[40,50501,33751],{"class":50},[40,50503,34544],{"class":94},[40,50505,5035],{"class":1283},[40,50507,34549],{"class":50},[40,50509,5032],{"class":1283},[40,50511,33776],{"class":94},[40,50513,1811],{"class":50},[40,50515,50516,50518,50520],{"class":42,"line":20236},[40,50517,34589],{"class":50},[40,50519,1284],{"class":1283},[40,50521,46211],{"class":50},[40,50523,50524,50526,50528,50530,50532,50534,50536,50538],{"class":42,"line":20249},[40,50525,34599],{"class":63},[40,50527,34602],{"class":50},[40,50529,3698],{"class":63},[40,50531,1299],{"class":50},[40,50533,34801],{"class":63},[40,50535,1299],{"class":50},[40,50537,34801],{"class":63},[40,50539,34615],{"class":50},[2423,50541,50543],{"id":50542},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,50545,50546],{},"计算图片的均值与方差，用于训练中归一化处理操作",[31,50548,50550],{"className":33679,"code":50549,"language":2323,"meta":36,"style":36},"# 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",[26,50551,50552,50557,50570,50575,50581,50586,50596,50600,50605,50615,50619,50624,50634,50651,50655,50660,50672,50684,50715,50724,50734,50744,50748,50753,50768,50772,50777,50782,50787,50797,50802,50827,50831,50836,50851,50855,50868,50872,50877,50882,50887,50892,50897,50907,50917,50940,50948,50956,50964,50968,50980,50984,50989,50993,50997,51004,51024,51048,51055,51069,51074,51079,51083,51097,51101,51113],{"__ignoreMap":36},[40,50553,50554],{"class":42,"line":43},[40,50555,50556],{"class":997},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[40,50558,50559,50561,50564,50567],{"class":42,"line":54},[40,50560,34037],{"class":1283},[40,50562,50563],{"class":63}," PIL",[40,50565,50566],{"class":1283}," import",[40,50568,50569],{"class":50}," Image\n",[40,50571,50572],{"class":42,"line":70},[40,50573,50574],{"class":997},"# os 用来处理文件夹和文件路径\n",[40,50576,50577,50579],{"class":42,"line":78},[40,50578,33692],{"class":1283},[40,50580,48605],{"class":50},[40,50582,50583],{"class":42,"line":86},[40,50584,50585],{"class":997},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[40,50587,50588,50590,50592,50594],{"class":42,"line":100},[40,50589,33692],{"class":1283},[40,50591,34680],{"class":50},[40,50593,34683],{"class":1283},[40,50595,34686],{"class":50},[40,50597,50598],{"class":42,"line":108},[40,50599,1413],{"emptyLinePlaceholder":1412},[40,50601,50602],{"class":42,"line":121},[40,50603,50604],{"class":997},"# 文件夹路径，包含所有图片文件\n",[40,50606,50607,50610,50612],{"class":42,"line":134},[40,50608,50609],{"class":50},"folder_path ",[40,50611,1284],{"class":1283},[40,50613,50614],{"class":94}," 'data_cat_dog'\n",[40,50616,50617],{"class":42,"line":146},[40,50618,1413],{"emptyLinePlaceholder":1412},[40,50620,50621],{"class":42,"line":154},[40,50622,50623],{"class":997},"# 初始化累积变量\n",[40,50625,50626,50629,50631],{"class":42,"line":162},[40,50627,50628],{"class":50},"total_pixels ",[40,50630,1284],{"class":1283},[40,50632,50633],{"class":63}," 0\n",[40,50635,50636,50639,50641,50644,50646,50648],{"class":42,"line":170},[40,50637,50638],{"class":50},"sum_normalized_pixel_values ",[40,50640,1284],{"class":1283},[40,50642,50643],{"class":50}," np.zeros(",[40,50645,3555],{"class":63},[40,50647,49108],{"class":50},[40,50649,50650],{"class":997},"# 如果是RGB图像，需要三个通道的均值和方差\n",[40,50652,50653],{"class":42,"line":183},[40,50654,1413],{"emptyLinePlaceholder":1412},[40,50656,50657],{"class":42,"line":196},[40,50658,50659],{"class":997},"# 遍历文件夹中的图片文件\n",[40,50661,50662,50664,50667,50669],{"class":42,"line":204},[40,50663,6349],{"class":1283},[40,50665,50666],{"class":50}," root, dirs, files ",[40,50668,29355],{"class":1283},[40,50670,50671],{"class":50}," os.walk(folder_path):\n",[40,50673,50674,50676,50679,50681],{"class":42,"line":217},[40,50675,6525],{"class":1283},[40,50677,50678],{"class":50}," filename ",[40,50680,29355],{"class":1283},[40,50682,50683],{"class":50}," files:\n",[40,50685,50686,50688,50691,50694,50696,50699,50701,50704,50706,50709,50712],{"class":42,"line":230},[40,50687,5822],{"class":1283},[40,50689,50690],{"class":50}," filename.endswith((",[40,50692,50693],{"class":94},"'.jpg'",[40,50695,15757],{"class":50},[40,50697,50698],{"class":94},"'.jpeg'",[40,50700,15757],{"class":50},[40,50702,50703],{"class":94},"'.png'",[40,50705,15757],{"class":50},[40,50707,50708],{"class":94},"'.bmp'",[40,50710,50711],{"class":50},")):  ",[40,50713,50714],{"class":997},"# 可根据实际情况添加其他格式\n",[40,50716,50717,50719,50721],{"class":42,"line":238},[40,50718,48973],{"class":50},[40,50720,1284],{"class":1283},[40,50722,50723],{"class":50}," os.path.join(root, filename)\n",[40,50725,50726,50729,50731],{"class":42,"line":251},[40,50727,50728],{"class":50},"            image ",[40,50730,1284],{"class":1283},[40,50732,50733],{"class":50}," Image.open(image_path)\n",[40,50735,50736,50739,50741],{"class":42,"line":264},[40,50737,50738],{"class":50},"            image_array ",[40,50740,1284],{"class":1283},[40,50742,50743],{"class":50}," np.array(image)\n",[40,50745,50746],{"class":42,"line":277},[40,50747,1413],{"emptyLinePlaceholder":1412},[40,50749,50750],{"class":42,"line":290},[40,50751,50752],{"class":997},"            # 归一化像素值到0-1之间\n",[40,50754,50755,50758,50760,50763,50765],{"class":42,"line":298},[40,50756,50757],{"class":50},"            normalized_image_array ",[40,50759,1284],{"class":1283},[40,50761,50762],{"class":50}," image_array ",[40,50764,4063],{"class":1283},[40,50766,50767],{"class":63}," 255.0\n",[40,50769,50770],{"class":42,"line":310},[40,50771,1413],{"emptyLinePlaceholder":1412},[40,50773,50774],{"class":42,"line":5086},[40,50775,50776],{"class":997},"            # print(image_path)\n",[40,50778,50779],{"class":42,"line":5091},[40,50780,50781],{"class":997},"            # print(normalized_image_array.shape)\n",[40,50783,50784],{"class":42,"line":5105},[40,50785,50786],{"class":997},"            # 累积归一化后的像素值和像素数量\n",[40,50788,50789,50792,50794],{"class":42,"line":5110},[40,50790,50791],{"class":50},"            total_pixels ",[40,50793,12799],{"class":1283},[40,50795,50796],{"class":50}," normalized_image_array.size\n",[40,50798,50799],{"class":42,"line":5902},[40,50800,50801],{"class":997},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[40,50803,50804,50807,50809,50812,50815,50817,50819,50821,50823,50825],{"class":42,"line":5916},[40,50805,50806],{"class":50},"            sum_normalized_pixel_values ",[40,50808,12799],{"class":1283},[40,50810,50811],{"class":50}," np.sum(normalized_image_array, ",[40,50813,50814],{"class":8539},"axis",[40,50816,1284],{"class":1283},[40,50818,3488],{"class":50},[40,50820,3672],{"class":63},[40,50822,15757],{"class":50},[40,50824,3698],{"class":63},[40,50826,33797],{"class":50},[40,50828,50829],{"class":42,"line":5924},[40,50830,1413],{"emptyLinePlaceholder":1412},[40,50832,50833],{"class":42,"line":5929},[40,50834,50835],{"class":997},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[40,50837,50838,50841,50843,50846,50848],{"class":42,"line":5935},[40,50839,50840],{"class":50},"mean ",[40,50842,1284],{"class":1283},[40,50844,50845],{"class":50}," sum_normalized_pixel_values ",[40,50847,4063],{"class":1283},[40,50849,50850],{"class":50}," total_pixels\n",[40,50852,50853],{"class":42,"line":5941},[40,50854,1413],{"emptyLinePlaceholder":1412},[40,50856,50857,50860,50862,50864,50866],{"class":42,"line":5946},[40,50858,50859],{"class":50},"sum_squared_diff ",[40,50861,1284],{"class":1283},[40,50863,50643],{"class":50},[40,50865,3555],{"class":63},[40,50867,1811],{"class":50},[40,50869,50870],{"class":42,"line":11270},[40,50871,1413],{"emptyLinePlaceholder":1412},[40,50873,50874],{"class":42,"line":11294},[40,50875,50876],{"class":997},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[40,50878,50879],{"class":42,"line":11299},[40,50880,50881],{"class":997},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[40,50883,50884],{"class":42,"line":11305},[40,50885,50886],{"class":997},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[40,50888,50889],{"class":42,"line":11332},[40,50890,50891],{"class":997},"# Image.open(image_path)：打开图片\n",[40,50893,50894],{"class":42,"line":11337},[40,50895,50896],{"class":997},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[40,50898,50899,50901,50903,50905],{"class":42,"line":11343},[40,50900,6349],{"class":1283},[40,50902,50666],{"class":50},[40,50904,29355],{"class":1283},[40,50906,50671],{"class":50},[40,50908,50909,50911,50913,50915],{"class":42,"line":11355},[40,50910,6525],{"class":1283},[40,50912,50678],{"class":50},[40,50914,29355],{"class":1283},[40,50916,50683],{"class":50},[40,50918,50919,50921,50923,50925,50927,50929,50931,50933,50935,50937],{"class":42,"line":11367},[40,50920,5822],{"class":1283},[40,50922,50690],{"class":50},[40,50924,50693],{"class":94},[40,50926,15757],{"class":50},[40,50928,50698],{"class":94},[40,50930,15757],{"class":50},[40,50932,50703],{"class":94},[40,50934,15757],{"class":50},[40,50936,50708],{"class":94},[40,50938,50939],{"class":50},")):\n",[40,50941,50942,50944,50946],{"class":42,"line":11379},[40,50943,48973],{"class":50},[40,50945,1284],{"class":1283},[40,50947,50723],{"class":50},[40,50949,50950,50952,50954],{"class":42,"line":13038},[40,50951,50728],{"class":50},[40,50953,1284],{"class":1283},[40,50955,50733],{"class":50},[40,50957,50958,50960,50962],{"class":42,"line":13063},[40,50959,50738],{"class":50},[40,50961,1284],{"class":1283},[40,50963,50743],{"class":50},[40,50965,50966],{"class":42,"line":13086},[40,50967,50752],{"class":997},[40,50969,50970,50972,50974,50976,50978],{"class":42,"line":13110},[40,50971,50757],{"class":50},[40,50973,1284],{"class":1283},[40,50975,50762],{"class":50},[40,50977,4063],{"class":1283},[40,50979,50767],{"class":63},[40,50981,50982],{"class":42,"line":13115},[40,50983,50781],{"class":997},[40,50985,50986],{"class":42,"line":13120},[40,50987,50988],{"class":997},"            # print(mean.shape)\n",[40,50990,50991],{"class":42,"line":13125},[40,50992,50776],{"class":997},[40,50994,50995],{"class":42,"line":13134},[40,50996,1413],{"emptyLinePlaceholder":1412},[40,50998,50999,51002],{"class":42,"line":13139},[40,51000,51001],{"class":1283},"            try",[40,51003,332],{"class":50},[40,51005,51006,51009,51011,51014,51016,51019,51021],{"class":42,"line":13145},[40,51007,51008],{"class":50},"                diff ",[40,51010,1284],{"class":1283},[40,51012,51013],{"class":50}," (normalized_image_array ",[40,51015,4011],{"class":1283},[40,51017,51018],{"class":50}," mean) ",[40,51020,13983],{"class":1283},[40,51022,51023],{"class":63}," 2\n",[40,51025,51026,51029,51031,51034,51036,51038,51040,51042,51044,51046],{"class":42,"line":13166},[40,51027,51028],{"class":50},"                sum_squared_diff ",[40,51030,12799],{"class":1283},[40,51032,51033],{"class":50}," np.sum(diff, ",[40,51035,50814],{"class":8539},[40,51037,1284],{"class":1283},[40,51039,3488],{"class":50},[40,51041,3672],{"class":63},[40,51043,15757],{"class":50},[40,51045,3698],{"class":63},[40,51047,33797],{"class":50},[40,51049,51050,51053],{"class":42,"line":13172},[40,51051,51052],{"class":1283},"            except",[40,51054,332],{"class":50},[40,51056,51057,51060,51062,51064,51067],{"class":42,"line":13186},[40,51058,51059],{"class":63},"                print",[40,51061,3488],{"class":50},[40,51063,3537],{"class":1283},[40,51065,51066],{"class":94},"\"捕获到自定义异常\"",[40,51068,1811],{"class":50},[40,51070,51071],{"class":42,"line":13192},[40,51072,51073],{"class":997},"            # diff = (normalized_image_array - mean) ** 2\n",[40,51075,51076],{"class":42,"line":13219},[40,51077,51078],{"class":997},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[40,51080,51081],{"class":42,"line":13228},[40,51082,1413],{"emptyLinePlaceholder":1412},[40,51084,51085,51088,51090,51093,51095],{"class":42,"line":13234},[40,51086,51087],{"class":50},"variance ",[40,51089,1284],{"class":1283},[40,51091,51092],{"class":50}," sum_squared_diff ",[40,51094,4063],{"class":1283},[40,51096,50850],{"class":50},[40,51098,51099],{"class":42,"line":13242},[40,51100,1413],{"emptyLinePlaceholder":1412},[40,51102,51103,51105,51107,51110],{"class":42,"line":13247},[40,51104,33715],{"class":63},[40,51106,3488],{"class":50},[40,51108,51109],{"class":94},"\"Mean:\"",[40,51111,51112],{"class":50},", mean)\n",[40,51114,51115,51117,51119,51122],{"class":42,"line":19926},[40,51116,33715],{"class":63},[40,51118,3488],{"class":50},[40,51120,51121],{"class":94},"\"Variance:\"",[40,51123,51124],{"class":50},", variance)\n",[31,51126,51128],{"className":33679,"code":51127,"language":2323,"meta":36,"style":36},"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",[26,51129,51130,51136,51142,51152,51158,51168,51182,51192,51202,51212,51216,51226,51236,51240,51244,51252,51257,51262,51281,51285,51290,51295,51300,51305,51346,51351,51361,51366,51379,51384,51389,51394,51399,51404,51408,51413,51418,51440,51444,51476,51490,51500,51510,51514,51524,51538,51548,51558,51568,51574,51578,51582,51586,51590,51594,51602,51622,51626,51630,51634,51638,51654,51658,51662,51670,51674,51678,51686,51690,51694,51698,51706,51710,51714,51718,51726,51730,51738,51742,51750,51754,51762,51766,51774,51778,51782,51790,51794,51798,51810,51834,51848,51852,51856,51860,51868,51872,51880,51884,51892,51896,51904,51908,51916,51920,51928,51932,51944,51948,51956,51960,51968,51972,51976,51980,51984,51992,51996,52012,52016,52024,52028,52032,52036,52040,52044,52048,52052,52068,52072,52084,52088,52100,52104,52116,52120,52128,52132,52140,52144,52148,52152,52158,52162,52170,52174,52190,52194,52202,52206,52222,52234,52238,52250,52254,52258,52266,52270,52274,52282,52286,52294,52298,52306,52310,52314,52356,52398,52402,52406,52422,52426,52442,52446,52450,52458,52462,52466,52478,52516,52520,52524,52532,52536,52550,52560,52566,52572,52578,52584,52588,52592,52598,52602,52606,52614,52618,52636,52640,52644,52648,52664,52668,52672,52676,52680,52684,52704,52724,52728,52732,52736,52744,52752,52756,52772,52792,52812,52816,52821,52830,52839,52844,52849,52854,52867,52872,52881,52890,52907],{"__ignoreMap":36},[40,51131,51132,51134],{"class":42,"line":43},[40,51133,33692],{"class":1283},[40,51135,35122],{"class":50},[40,51137,51138,51140],{"class":42,"line":54},[40,51139,33692],{"class":1283},[40,51141,35129],{"class":50},[40,51143,51144,51146,51148,51150],{"class":42,"line":70},[40,51145,33692],{"class":1283},[40,51147,35140],{"class":50},[40,51149,34683],{"class":1283},[40,51151,35145],{"class":50},[40,51153,51154,51156],{"class":42,"line":78},[40,51155,33692],{"class":1283},[40,51157,33695],{"class":50},[40,51159,51160,51162,51164,51166],{"class":42,"line":86},[40,51161,34037],{"class":1283},[40,51163,34715],{"class":50},[40,51165,33692],{"class":1283},[40,51167,35162],{"class":50},[40,51169,51170,51172,51174,51176,51179],{"class":42,"line":100},[40,51171,34037],{"class":1283},[40,51173,34668],{"class":50},[40,51175,33692],{"class":1283},[40,51177,51178],{"class":50}," ImageFolder ",[40,51180,51181],{"class":997},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[40,51183,51184,51186,51188,51190],{"class":42,"line":108},[40,51185,34037],{"class":1283},[40,51187,34698],{"class":50},[40,51189,33692],{"class":1283},[40,51191,34703],{"class":50},[40,51193,51194,51196,51198,51200],{"class":42,"line":121},[40,51195,33692],{"class":1283},[40,51197,34715],{"class":50},[40,51199,34683],{"class":1283},[40,51201,34720],{"class":50},[40,51203,51204,51206,51208,51210],{"class":42,"line":134},[40,51205,33692],{"class":1283},[40,51207,34732],{"class":50},[40,51209,34683],{"class":1283},[40,51211,34737],{"class":50},[40,51213,51214],{"class":42,"line":146},[40,51215,35207],{"class":997},[40,51217,51218,51220,51222,51224],{"class":42,"line":154},[40,51219,34037],{"class":1283},[40,51221,35214],{"class":50},[40,51223,33692],{"class":1283},[40,51225,46331],{"class":50},[40,51227,51228,51230,51232,51234],{"class":42,"line":162},[40,51229,34037],{"class":1283},[40,51231,34040],{"class":50},[40,51233,33692],{"class":1283},[40,51235,34045],{"class":50},[40,51237,51238],{"class":42,"line":170},[40,51239,1413],{"emptyLinePlaceholder":1412},[40,51241,51242],{"class":42,"line":183},[40,51243,35242],{"class":997},[40,51245,51246,51248,51250],{"class":42,"line":196},[40,51247,35247],{"class":1283},[40,51249,35250],{"class":596},[40,51251,35253],{"class":50},[40,51253,51254],{"class":42,"line":204},[40,51255,51256],{"class":997},"    # 导入自己的数据集，并进行数据处理\n",[40,51258,51259],{"class":42,"line":217},[40,51260,51261],{"class":997},"    # 定义数据集的路径\n",[40,51263,51264,51267,51269,51271,51273,51275,51279],{"class":42,"line":230},[40,51265,51266],{"class":63},"    ROOT_PATH",[40,51268,1284],{"class":1283},[40,51270,4148],{"class":1283},[40,51272,3731],{"class":94},[40,51274,4037],{"class":63},[40,51276,51278],{"class":51277},"sA_wV","\u002Fdata\u002Ftrain",[40,51280,28446],{"class":94},[40,51282,51283],{"class":42,"line":238},[40,51284,1413],{"emptyLinePlaceholder":1412},[40,51286,51287],{"class":42,"line":251},[40,51288,51289],{"class":997},"    # 定义归一化方法\n",[40,51291,51292],{"class":42,"line":264},[40,51293,51294],{"class":997},"    # 这里需要先计算一下数据集的均值和方差\n",[40,51296,51297],{"class":42,"line":277},[40,51298,51299],{"class":997},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[40,51301,51302],{"class":42,"line":290},[40,51303,51304],{"class":997},"    # 第一个参数是均值，第二个参数是方差\n",[40,51306,51307,51310,51312,51315,51318,51320,51323,51325,51328,51331,51334,51336,51339,51341,51344],{"class":42,"line":298},[40,51308,51309],{"class":50},"    normalize",[40,51311,1284],{"class":1283},[40,51313,51314],{"class":50},"transforms.Normalize([",[40,51316,51317],{"class":63},"0.162",[40,51319,1299],{"class":50},[40,51321,51322],{"class":63},"0.151",[40,51324,1299],{"class":50},[40,51326,51327],{"class":63},"0.138",[40,51329,51330],{"class":50},"],[",[40,51332,51333],{"class":63},"0.058",[40,51335,1299],{"class":50},[40,51337,51338],{"class":63},"0.052",[40,51340,1299],{"class":50},[40,51342,51343],{"class":63},"0.048",[40,51345,7980],{"class":50},[40,51347,51348],{"class":42,"line":310},[40,51349,51350],{"class":997},"    # 定义数据集处理方法变量\n",[40,51352,51353,51356,51358],{"class":42,"line":5086},[40,51354,51355],{"class":50},"    train_transform",[40,51357,1284],{"class":1283},[40,51359,51360],{"class":50},"transforms.Compose([\n",[40,51362,51363],{"class":42,"line":5091},[40,51364,51365],{"class":997},"        # 调整图像大小为224*224\n",[40,51367,51368,51371,51373,51375,51377],{"class":42,"line":5105},[40,51369,51370],{"class":50},"        transforms.Resize((",[40,51372,34801],{"class":63},[40,51374,1299],{"class":50},[40,51376,34801],{"class":63},[40,51378,45922],{"class":50},[40,51380,51381],{"class":42,"line":5110},[40,51382,51383],{"class":997},"        # 将图像转换为张量\n",[40,51385,51386],{"class":42,"line":5902},[40,51387,51388],{"class":50},"        transforms.ToTensor(),\n",[40,51390,51391],{"class":42,"line":5916},[40,51392,51393],{"class":50},"        normalize])\n",[40,51395,51396],{"class":42,"line":5924},[40,51397,51398],{"class":997},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[40,51400,51401],{"class":42,"line":5929},[40,51402,51403],{"class":997},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[40,51405,51406],{"class":42,"line":5935},[40,51407,1413],{"emptyLinePlaceholder":1412},[40,51409,51410],{"class":42,"line":5941},[40,51411,51412],{"class":997},"    # 加载数据集\n",[40,51414,51415],{"class":42,"line":5946},[40,51416,51417],{"class":997},"    # 传入数据集路径与处理方法\n",[40,51419,51420,51422,51424,51427,51430,51432,51435,51437],{"class":42,"line":11270},[40,51421,35258],{"class":50},[40,51423,1284],{"class":1283},[40,51425,51426],{"class":50},"ImageFolder(",[40,51428,51429],{"class":63},"ROOT_PATH",[40,51431,1299],{"class":50},[40,51433,51434],{"class":8539},"transform",[40,51436,1284],{"class":1283},[40,51438,51439],{"class":50},"train_transform)\n",[40,51441,51442],{"class":42,"line":11294},[40,51443,1413],{"emptyLinePlaceholder":1412},[40,51445,51446,51448,51450,51452,51454,51456,51458,51460,51462,51464,51466,51468,51470,51472,51474],{"class":42,"line":11299},[40,51447,35310],{"class":50},[40,51449,1284],{"class":1283},[40,51451,35315],{"class":50},[40,51453,35318],{"class":63},[40,51455,3488],{"class":50},[40,51457,35323],{"class":63},[40,51459,3934],{"class":1283},[40,51461,10681],{"class":63},[40,51463,35330],{"class":50},[40,51465,35318],{"class":63},[40,51467,3488],{"class":50},[40,51469,35337],{"class":63},[40,51471,3934],{"class":1283},[40,51473,10681],{"class":63},[40,51475,35344],{"class":50},[40,51477,51478,51480,51482,51484,51486,51488],{"class":42,"line":11305},[40,51479,35349],{"class":50},[40,51481,1284],{"class":1283},[40,51483,35354],{"class":50},[40,51485,34837],{"class":8539},[40,51487,1284],{"class":1283},[40,51489,34842],{"class":50},[40,51491,51492,51494,51496,51498],{"class":42,"line":11332},[40,51493,35365],{"class":8539},[40,51495,1284],{"class":1283},[40,51497,3678],{"class":63},[40,51499,34766],{"class":50},[40,51501,51502,51504,51506,51508],{"class":42,"line":11337},[40,51503,35377],{"class":8539},[40,51505,1284],{"class":1283},[40,51507,34776],{"class":63},[40,51509,34766],{"class":50},[40,51511,51512],{"class":42,"line":11343},[40,51513,35388],{"class":997},[40,51515,51516,51518,51520,51522],{"class":42,"line":11355},[40,51517,35393],{"class":8539},[40,51519,1284],{"class":1283},[40,51521,3874],{"class":63},[40,51523,1811],{"class":50},[40,51525,51526,51528,51530,51532,51534,51536],{"class":42,"line":11367},[40,51527,35404],{"class":50},[40,51529,1284],{"class":1283},[40,51531,34834],{"class":50},[40,51533,34837],{"class":8539},[40,51535,1284],{"class":1283},[40,51537,35415],{"class":50},[40,51539,51540,51542,51544,51546],{"class":42,"line":11379},[40,51541,35420],{"class":8539},[40,51543,1284],{"class":1283},[40,51545,3678],{"class":63},[40,51547,34766],{"class":50},[40,51549,51550,51552,51554,51556],{"class":42,"line":13038},[40,51551,35431],{"class":8539},[40,51553,1284],{"class":1283},[40,51555,34776],{"class":63},[40,51557,34766],{"class":50},[40,51559,51560,51562,51564,51566],{"class":42,"line":13063},[40,51561,35442],{"class":8539},[40,51563,1284],{"class":1283},[40,51565,3874],{"class":63},[40,51567,1811],{"class":50},[40,51569,51570,51572],{"class":42,"line":13086},[40,51571,7413],{"class":1283},[40,51573,35455],{"class":50},[40,51575,51576],{"class":42,"line":13110},[40,51577,1413],{"emptyLinePlaceholder":1412},[40,51579,51580],{"class":42,"line":13115},[40,51581,35464],{"class":997},[40,51583,51584],{"class":42,"line":13120},[40,51585,35469],{"class":997},[40,51587,51588],{"class":42,"line":13125},[40,51589,1413],{"emptyLinePlaceholder":1412},[40,51591,51592],{"class":42,"line":13134},[40,51593,35478],{"class":997},[40,51595,51596,51598,51600],{"class":42,"line":13139},[40,51597,35247],{"class":1283},[40,51599,35485],{"class":596},[40,51601,35488],{"class":50},[40,51603,51604,51606,51608,51610,51612,51614,51616,51618,51620],{"class":42,"line":13145},[40,51605,34537],{"class":50},[40,51607,1284],{"class":1283},[40,51609,33751],{"class":50},[40,51611,34544],{"class":94},[40,51613,5035],{"class":1283},[40,51615,34549],{"class":50},[40,51617,5032],{"class":1283},[40,51619,35507],{"class":94},[40,51621,1811],{"class":50},[40,51623,51624],{"class":42,"line":13166},[40,51625,1413],{"emptyLinePlaceholder":1412},[40,51627,51628],{"class":42,"line":13172},[40,51629,35522],{"class":997},[40,51631,51632],{"class":42,"line":13186},[40,51633,35527],{"class":997},[40,51635,51636],{"class":42,"line":13192},[40,51637,35532],{"class":997},[40,51639,51640,51642,51644,51646,51648,51650,51652],{"class":42,"line":13219},[40,51641,35537],{"class":50},[40,51643,1284],{"class":1283},[40,51645,35542],{"class":50},[40,51647,35545],{"class":8539},[40,51649,1284],{"class":1283},[40,51651,35550],{"class":63},[40,51653,1811],{"class":50},[40,51655,51656],{"class":42,"line":13228},[40,51657,1413],{"emptyLinePlaceholder":1412},[40,51659,51660],{"class":42,"line":13234},[40,51661,35561],{"class":997},[40,51663,51664,51666,51668],{"class":42,"line":13242},[40,51665,35566],{"class":50},[40,51667,1284],{"class":1283},[40,51669,35571],{"class":50},[40,51671,51672],{"class":42,"line":13247},[40,51673,1413],{"emptyLinePlaceholder":1412},[40,51675,51676],{"class":42,"line":19926},[40,51677,35580],{"class":997},[40,51679,51680,51682,51684],{"class":42,"line":19932},[40,51681,34589],{"class":50},[40,51683,1284],{"class":1283},[40,51685,35589],{"class":50},[40,51687,51688],{"class":42,"line":19955},[40,51689,35594],{"class":997},[40,51691,51692],{"class":42,"line":19961},[40,51693,35599],{"class":997},[40,51695,51696],{"class":42,"line":19984},[40,51697,35604],{"class":997},[40,51699,51700,51702,51704],{"class":42,"line":19998},[40,51701,35609],{"class":50},[40,51703,1284],{"class":1283},[40,51705,35614],{"class":50},[40,51707,51708],{"class":42,"line":20018},[40,51709,1413],{"emptyLinePlaceholder":1412},[40,51711,51712],{"class":42,"line":20024},[40,51713,35627],{"class":997},[40,51715,51716],{"class":42,"line":20035},[40,51717,35632],{"class":997},[40,51719,51720,51722,51724],{"class":42,"line":20058},[40,51721,35637],{"class":50},[40,51723,1284],{"class":1283},[40,51725,35642],{"class":63},[40,51727,51728],{"class":42,"line":20080},[40,51729,35647],{"class":997},[40,51731,51732,51734,51736],{"class":42,"line":20085},[40,51733,35652],{"class":50},[40,51735,1284],{"class":1283},[40,51737,35657],{"class":50},[40,51739,51740],{"class":42,"line":20091},[40,51741,35662],{"class":997},[40,51743,51744,51746,51748],{"class":42,"line":20105},[40,51745,35667],{"class":50},[40,51747,1284],{"class":1283},[40,51749,35657],{"class":50},[40,51751,51752],{"class":42,"line":20118},[40,51753,35676],{"class":997},[40,51755,51756,51758,51760],{"class":42,"line":20123},[40,51757,35681],{"class":50},[40,51759,1284],{"class":1283},[40,51761,35657],{"class":50},[40,51763,51764],{"class":42,"line":20137},[40,51765,35690],{"class":997},[40,51767,51768,51770,51772],{"class":42,"line":20142},[40,51769,35695],{"class":50},[40,51771,1284],{"class":1283},[40,51773,35657],{"class":50},[40,51775,51776],{"class":42,"line":20148},[40,51777,1413],{"emptyLinePlaceholder":1412},[40,51779,51780],{"class":42,"line":20153},[40,51781,35708],{"class":997},[40,51783,51784,51786,51788],{"class":42,"line":20167},[40,51785,35713],{"class":50},[40,51787,1284],{"class":1283},[40,51789,35718],{"class":50},[40,51791,51792],{"class":42,"line":20172},[40,51793,1413],{"emptyLinePlaceholder":1412},[40,51795,51796],{"class":42,"line":20177},[40,51797,35731],{"class":997},[40,51799,51800,51802,51804,51806,51808],{"class":42,"line":20191},[40,51801,6525],{"class":1283},[40,51803,35738],{"class":50},[40,51805,29355],{"class":1283},[40,51807,35743],{"class":63},[40,51809,35746],{"class":50},[40,51811,51812,51814,51816,51818,51820,51822,51824,51826,51828,51830,51832],{"class":42,"line":20203},[40,51813,35751],{"class":63},[40,51815,3488],{"class":50},[40,51817,35756],{"class":94},[40,51819,35759],{"class":63},[40,51821,4063],{"class":94},[40,51823,35759],{"class":63},[40,51825,3731],{"class":94},[40,51827,35768],{"class":50},[40,51829,4011],{"class":1283},[40,51831,3698],{"class":63},[40,51833,33797],{"class":50},[40,51835,51836,51838,51840,51842,51844,51846],{"class":42,"line":20208},[40,51837,35751],{"class":63},[40,51839,3488],{"class":50},[40,51841,35783],{"class":94},[40,51843,3934],{"class":1283},[40,51845,3925],{"class":63},[40,51847,1811],{"class":50},[40,51849,51850],{"class":42,"line":20221},[40,51851,1413],{"emptyLinePlaceholder":1412},[40,51853,51854],{"class":42,"line":20226},[40,51855,35798],{"class":997},[40,51857,51858],{"class":42,"line":20231},[40,51859,35803],{"class":997},[40,51861,51862,51864,51866],{"class":42,"line":20236},[40,51863,35808],{"class":50},[40,51865,1284],{"class":1283},[40,51867,35642],{"class":63},[40,51869,51870],{"class":42,"line":20249},[40,51871,35817],{"class":997},[40,51873,51874,51876,51878],{"class":42,"line":20254},[40,51875,35822],{"class":50},[40,51877,1284],{"class":1283},[40,51879,6409],{"class":63},[40,51881,51882],{"class":42,"line":35933},[40,51883,35831],{"class":997},[40,51885,51886,51888,51890],{"class":42,"line":35939},[40,51887,35836],{"class":50},[40,51889,1284],{"class":1283},[40,51891,35642],{"class":63},[40,51893,51894],{"class":42,"line":35945},[40,51895,35845],{"class":997},[40,51897,51898,51900,51902],{"class":42,"line":35951},[40,51899,35850],{"class":50},[40,51901,1284],{"class":1283},[40,51903,6409],{"class":63},[40,51905,51906],{"class":42,"line":35957},[40,51907,35859],{"class":997},[40,51909,51910,51912,51914],{"class":42,"line":35968},[40,51911,35864],{"class":50},[40,51913,1284],{"class":1283},[40,51915,6409],{"class":63},[40,51917,51918],{"class":42,"line":35974},[40,51919,35873],{"class":997},[40,51921,51922,51924,51926],{"class":42,"line":35994},[40,51923,35878],{"class":50},[40,51925,1284],{"class":1283},[40,51927,6409],{"class":63},[40,51929,51930],{"class":42,"line":36000},[40,51931,35887],{"class":997},[40,51933,51934,51936,51938,51940,51942],{"class":42,"line":36011},[40,51935,6727],{"class":1283},[40,51937,34901],{"class":50},[40,51939,29355],{"class":1283},[40,51941,34906],{"class":63},[40,51943,35900],{"class":50},[40,51945,51946],{"class":42,"line":36017},[40,51947,35905],{"class":997},[40,51949,51950,51952,51954],{"class":42,"line":36023},[40,51951,35910],{"class":50},[40,51953,1284],{"class":1283},[40,51955,35915],{"class":50},[40,51957,51958],{"class":42,"line":36029},[40,51959,35920],{"class":997},[40,51961,51962,51964,51966],{"class":42,"line":36035},[40,51963,35925],{"class":50},[40,51965,1284],{"class":1283},[40,51967,35930],{"class":50},[40,51969,51970],{"class":42,"line":36041},[40,51971,35936],{"class":997},[40,51973,51974],{"class":42,"line":36047},[40,51975,35942],{"class":50},[40,51977,51978],{"class":42,"line":36053},[40,51979,35948],{"class":997},[40,51981,51982],{"class":42,"line":36073},[40,51983,35954],{"class":997},[40,51985,51986,51988,51990],{"class":42,"line":36079},[40,51987,35960],{"class":50},[40,51989,1284],{"class":1283},[40,51991,35965],{"class":50},[40,51993,51994],{"class":42,"line":36095},[40,51995,35971],{"class":997},[40,51997,51998,52000,52002,52004,52006,52008,52010],{"class":42,"line":36101},[40,51999,35977],{"class":50},[40,52001,1284],{"class":1283},[40,52003,35982],{"class":50},[40,52005,35985],{"class":8539},[40,52007,1284],{"class":1283},[40,52009,3698],{"class":63},[40,52011,1811],{"class":50},[40,52013,52014],{"class":42,"line":36115},[40,52015,35997],{"class":997},[40,52017,52018,52020,52022],{"class":42,"line":36121},[40,52019,36003],{"class":50},[40,52021,1284],{"class":1283},[40,52023,36008],{"class":50},[40,52025,52026],{"class":42,"line":36136},[40,52027,36014],{"class":997},[40,52029,52030],{"class":42,"line":36142},[40,52031,36020],{"class":50},[40,52033,52034],{"class":42,"line":36151},[40,52035,36026],{"class":997},[40,52037,52038],{"class":42,"line":36157},[40,52039,36032],{"class":50},[40,52041,52042],{"class":42,"line":36166},[40,52043,36038],{"class":997},[40,52045,52046],{"class":42,"line":36172},[40,52047,36044],{"class":50},[40,52049,52050],{"class":42,"line":36178},[40,52051,36050],{"class":997},[40,52053,52054,52056,52058,52060,52062,52064,52066],{"class":42,"line":36187},[40,52055,36056],{"class":50},[40,52057,12799],{"class":1283},[40,52059,36061],{"class":50},[40,52061,3934],{"class":1283},[40,52063,36066],{"class":50},[40,52065,3672],{"class":63},[40,52067,1811],{"class":50},[40,52069,52070],{"class":42,"line":36193},[40,52071,36076],{"class":997},[40,52073,52074,52076,52078,52080,52082],{"class":42,"line":36204},[40,52075,36082],{"class":50},[40,52077,12799],{"class":1283},[40,52079,36087],{"class":50},[40,52081,6273],{"class":1283},[40,52083,36092],{"class":50},[40,52085,52086],{"class":42,"line":36210},[40,52087,36098],{"class":997},[40,52089,52090,52092,52094,52096,52098],{"class":42,"line":36229},[40,52091,36104],{"class":50},[40,52093,12799],{"class":1283},[40,52095,36066],{"class":50},[40,52097,3672],{"class":63},[40,52099,1811],{"class":50},[40,52101,52102],{"class":42,"line":36235},[40,52103,36118],{"class":997},[40,52105,52106,52108,52110,52112,52114],{"class":42,"line":36246},[40,52107,6727],{"class":1283},[40,52109,36126],{"class":50},[40,52111,29355],{"class":1283},[40,52113,34906],{"class":63},[40,52115,36133],{"class":50},[40,52117,52118],{"class":42,"line":36252},[40,52119,36139],{"class":997},[40,52121,52122,52124,52126],{"class":42,"line":36272},[40,52123,35910],{"class":50},[40,52125,1284],{"class":1283},[40,52127,35915],{"class":50},[40,52129,52130],{"class":42,"line":36288},[40,52131,36154],{"class":997},[40,52133,52134,52136,52138],{"class":42,"line":36294},[40,52135,35925],{"class":50},[40,52137,1284],{"class":1283},[40,52139,35930],{"class":50},[40,52141,52142],{"class":42,"line":36308},[40,52143,36169],{"class":997},[40,52145,52146],{"class":42,"line":36314},[40,52147,36175],{"class":50},[40,52149,52150],{"class":42,"line":36320},[40,52151,39656],{"class":997},[40,52153,52154,52156],{"class":42,"line":36331},[40,52155,36181],{"class":1283},[40,52157,36184],{"class":50},[40,52159,52160],{"class":42,"line":36337},[40,52161,36190],{"class":997},[40,52163,52164,52166,52168],{"class":42,"line":36343},[40,52165,39671],{"class":50},[40,52167,1284],{"class":1283},[40,52169,35965],{"class":50},[40,52171,52172],{"class":42,"line":36353},[40,52173,36207],{"class":997},[40,52175,52176,52178,52180,52182,52184,52186,52188],{"class":42,"line":36359},[40,52177,39684],{"class":50},[40,52179,1284],{"class":1283},[40,52181,35982],{"class":50},[40,52183,35985],{"class":8539},[40,52185,1284],{"class":1283},[40,52187,3698],{"class":63},[40,52189,1811],{"class":50},[40,52191,52192],{"class":42,"line":36370},[40,52193,36232],{"class":997},[40,52195,52196,52198,52200],{"class":42,"line":36376},[40,52197,39705],{"class":50},[40,52199,1284],{"class":1283},[40,52201,36008],{"class":50},[40,52203,52204],{"class":42,"line":36386},[40,52205,36249],{"class":997},[40,52207,52208,52210,52212,52214,52216,52218,52220],{"class":42,"line":36391},[40,52209,39718],{"class":50},[40,52211,12799],{"class":1283},[40,52213,39723],{"class":50},[40,52215,3934],{"class":1283},[40,52217,36066],{"class":50},[40,52219,3672],{"class":63},[40,52221,1811],{"class":50},[40,52223,52224,52226,52228,52230,52232],{"class":42,"line":36397},[40,52225,39736],{"class":50},[40,52227,12799],{"class":1283},[40,52229,36087],{"class":50},[40,52231,6273],{"class":1283},[40,52233,36092],{"class":50},[40,52235,52236],{"class":42,"line":36446},[40,52237,39749],{"class":997},[40,52239,52240,52242,52244,52246,52248],{"class":42,"line":36493},[40,52241,39754],{"class":50},[40,52243,12799],{"class":1283},[40,52245,36066],{"class":50},[40,52247,3672],{"class":63},[40,52249,1811],{"class":50},[40,52251,52252],{"class":42,"line":36498},[40,52253,36311],{"class":997},[40,52255,52256],{"class":42,"line":36504},[40,52257,36317],{"class":997},[40,52259,52260,52262,52264],{"class":42,"line":36523},[40,52261,36323],{"class":50},[40,52263,4063],{"class":1283},[40,52265,36328],{"class":50},[40,52267,52268],{"class":42,"line":36529},[40,52269,36334],{"class":997},[40,52271,52272],{"class":42,"line":36549},[40,52273,36340],{"class":997},[40,52275,52276,52278,52280],{"class":42,"line":36555},[40,52277,36346],{"class":50},[40,52279,4063],{"class":1283},[40,52281,36328],{"class":50},[40,52283,52284],{"class":42,"line":36561},[40,52285,36356],{"class":997},[40,52287,52288,52290,52292],{"class":42,"line":36571},[40,52289,36362],{"class":50},[40,52291,4063],{"class":1283},[40,52293,36367],{"class":50},[40,52295,52296],{"class":42,"line":36576},[40,52297,36373],{"class":997},[40,52299,52300,52302,52304],{"class":42,"line":36582},[40,52301,36379],{"class":50},[40,52303,4063],{"class":1283},[40,52305,36367],{"class":50},[40,52307,52308],{"class":42,"line":36598},[40,52309,1413],{"emptyLinePlaceholder":1412},[40,52311,52312],{"class":42,"line":36643},[40,52313,36394],{"class":997},[40,52315,52316,52318,52320,52322,52324,52326,52328,52330,52332,52334,52336,52338,52340,52342,52344,52346,52348,52350,52352,52354],{"class":42,"line":36649},[40,52317,35751],{"class":63},[40,52319,3488],{"class":50},[40,52321,6916],{"class":94},[40,52323,35759],{"class":63},[40,52325,36408],{"class":94},[40,52327,4373],{"class":63},[40,52329,36413],{"class":1283},[40,52331,4423],{"class":63},[40,52333,36418],{"class":94},[40,52335,4373],{"class":63},[40,52337,36413],{"class":1283},[40,52339,4423],{"class":63},[40,52341,6916],{"class":94},[40,52343,36429],{"class":50},[40,52345,4011],{"class":1283},[40,52347,3698],{"class":63},[40,52349,36436],{"class":50},[40,52351,4011],{"class":1283},[40,52353,3698],{"class":63},[40,52355,36443],{"class":50},[40,52357,52358,52360,52362,52364,52366,52368,52370,52372,52374,52376,52378,52380,52382,52384,52386,52388,52390,52392,52394,52396],{"class":42,"line":36655},[40,52359,35751],{"class":63},[40,52361,3488],{"class":50},[40,52363,6916],{"class":94},[40,52365,35759],{"class":63},[40,52367,36457],{"class":94},[40,52369,4373],{"class":63},[40,52371,36413],{"class":1283},[40,52373,4423],{"class":63},[40,52375,36466],{"class":94},[40,52377,4373],{"class":63},[40,52379,36413],{"class":1283},[40,52381,4423],{"class":63},[40,52383,6916],{"class":94},[40,52385,36477],{"class":50},[40,52387,4011],{"class":1283},[40,52389,3698],{"class":63},[40,52391,36484],{"class":50},[40,52393,4011],{"class":1283},[40,52395,3698],{"class":63},[40,52397,36443],{"class":50},[40,52399,52400],{"class":42,"line":36661},[40,52401,1413],{"emptyLinePlaceholder":1412},[40,52403,52404],{"class":42,"line":36672},[40,52405,36501],{"class":997},[40,52407,52408,52410,52412,52414,52416,52418,52420],{"class":42,"line":36678},[40,52409,5822],{"class":1283},[40,52411,36509],{"class":50},[40,52413,4011],{"class":1283},[40,52415,3698],{"class":63},[40,52417,4417],{"class":50},[40,52419,4437],{"class":1283},[40,52421,36520],{"class":50},[40,52423,52424],{"class":42,"line":36684},[40,52425,36526],{"class":997},[40,52427,52428,52430,52432,52434,52436,52438,52440],{"class":42,"line":36690},[40,52429,36532],{"class":50},[40,52431,3526],{"class":63},[40,52433,1284],{"class":1283},[40,52435,36539],{"class":50},[40,52437,4011],{"class":1283},[40,52439,3698],{"class":63},[40,52441,36546],{"class":50},[40,52443,52444],{"class":42,"line":36708},[40,52445,36552],{"class":997},[40,52447,52448],{"class":42,"line":36722},[40,52449,36558],{"class":997},[40,52451,52452,52454,52456],{"class":42,"line":36731},[40,52453,36564],{"class":50},[40,52455,1284],{"class":1283},[40,52457,35614],{"class":50},[40,52459,52460],{"class":42,"line":36740},[40,52461,1413],{"emptyLinePlaceholder":1412},[40,52463,52464],{"class":42,"line":36749},[40,52465,36579],{"class":997},[40,52467,52468,52470,52472,52474,52476],{"class":42,"line":36758},[40,52469,36585],{"class":50},[40,52471,1284],{"class":1283},[40,52473,36590],{"class":50},[40,52475,4011],{"class":1283},[40,52477,36595],{"class":50},[40,52479,52480,52482,52484,52486,52488,52490,52492,52494,52496,52498,52500,52502,52504,52506,52508,52510,52512,52514],{"class":42,"line":36764},[40,52481,35751],{"class":63},[40,52483,3488],{"class":50},[40,52485,36605],{"class":94},[40,52487,4373],{"class":63},[40,52489,36610],{"class":1283},[40,52491,4423],{"class":63},[40,52493,4023],{"class":94},[40,52495,4373],{"class":63},[40,52497,36610],{"class":1283},[40,52499,4423],{"class":63},[40,52501,36623],{"class":94},[40,52503,36626],{"class":50},[40,52505,36629],{"class":1283},[40,52507,4384],{"class":63},[40,52509,36634],{"class":50},[40,52511,3808],{"class":1283},[40,52513,4384],{"class":63},[40,52515,33797],{"class":50},[40,52517,52518],{"class":42,"line":36770},[40,52519,40033],{"class":997},[40,52521,52522],{"class":42,"line":36778},[40,52523,40038],{"class":997},[40,52525,52526,52528,52530],{"class":42,"line":36783},[40,52527,40043],{"class":50},[40,52529,36667],{"class":94},[40,52531,1811],{"class":50},[40,52533,52534],{"class":42,"line":36789},[40,52535,36687],{"class":997},[40,52537,52538,52540,52542,52544,52546,52548],{"class":42,"line":36800},[40,52539,36693],{"class":50},[40,52541,1284],{"class":1283},[40,52543,36698],{"class":50},[40,52545,36701],{"class":8539},[40,52547,1284],{"class":1283},[40,52549,4888],{"class":50},[40,52551,52552,52554,52556,52558],{"class":42,"line":36806},[40,52553,36711],{"class":94},[40,52555,4336],{"class":50},[40,52557,36716],{"class":63},[40,52559,36719],{"class":50},[40,52561,52562,52564],{"class":42,"line":36826},[40,52563,36725],{"class":94},[40,52565,36728],{"class":50},[40,52567,52568,52570],{"class":42,"line":36832},[40,52569,36734],{"class":94},[40,52571,36737],{"class":50},[40,52573,52574,52576],{"class":42,"line":36838},[40,52575,36743],{"class":94},[40,52577,36746],{"class":50},[40,52579,52580,52582],{"class":42,"line":36844},[40,52581,36752],{"class":94},[40,52583,36755],{"class":50},[40,52585,52586],{"class":42,"line":36861},[40,52587,36761],{"class":50},[40,52589,52590],{"class":42,"line":36867},[40,52591,36767],{"class":997},[40,52593,52594,52596],{"class":42,"line":36873},[40,52595,7413],{"class":1283},[40,52597,36775],{"class":50},[40,52599,52600],{"class":42,"line":36879},[40,52601,1413],{"emptyLinePlaceholder":1412},[40,52603,52604],{"class":42,"line":36885},[40,52605,36786],{"class":997},[40,52607,52608,52610,52612],{"class":42,"line":36891},[40,52609,35247],{"class":1283},[40,52611,36794],{"class":596},[40,52613,36797],{"class":50},[40,52615,52616],{"class":42,"line":36918},[40,52617,36803],{"class":997},[40,52619,52620,52622,52624,52626,52628,52630,52632,52634],{"class":42,"line":36942},[40,52621,36809],{"class":50},[40,52623,34993],{"class":8539},[40,52625,1284],{"class":1283},[40,52627,3488],{"class":50},[40,52629,3977],{"class":63},[40,52631,1299],{"class":50},[40,52633,3773],{"class":63},[40,52635,33797],{"class":50},[40,52637,52638],{"class":42,"line":36948},[40,52639,36829],{"class":997},[40,52641,52642],{"class":42,"line":36954},[40,52643,36835],{"class":997},[40,52645,52646],{"class":42,"line":36960},[40,52647,36841],{"class":997},[40,52649,52650,52652,52654,52656,52658,52660,52662],{"class":42,"line":36971},[40,52651,35027],{"class":50},[40,52653,3698],{"class":63},[40,52655,1299],{"class":50},[40,52657,64],{"class":63},[40,52659,1299],{"class":50},[40,52661,3698],{"class":63},[40,52663,1811],{"class":50},[40,52665,52666],{"class":42,"line":36982},[40,52667,36864],{"class":997},[40,52669,52670],{"class":42,"line":36988},[40,52671,36870],{"class":997},[40,52673,52674],{"class":42,"line":37005},[40,52675,36876],{"class":997},[40,52677,52678],{"class":42,"line":37028},[40,52679,36882],{"class":997},[40,52681,52682],{"class":42,"line":37051},[40,52683,36888],{"class":997},[40,52685,52686,52688,52690,52692,52694,52696,52698,52700,52702],{"class":42,"line":37057},[40,52687,36894],{"class":50},[40,52689,36897],{"class":94},[40,52691,36900],{"class":50},[40,52693,36903],{"class":94},[40,52695,1299],{"class":50},[40,52697,36908],{"class":8539},[40,52699,1284],{"class":1283},[40,52701,36913],{"class":94},[40,52703,1811],{"class":50},[40,52705,52706,52708,52710,52712,52714,52716,52718,52720,52722],{"class":42,"line":37062},[40,52707,36894],{"class":50},[40,52709,36897],{"class":94},[40,52711,36925],{"class":50},[40,52713,36928],{"class":94},[40,52715,1299],{"class":50},[40,52717,36908],{"class":8539},[40,52719,1284],{"class":1283},[40,52721,36937],{"class":94},[40,52723,1811],{"class":50},[40,52725,52726],{"class":42,"line":37071},[40,52727,36945],{"class":997},[40,52729,52730],{"class":42,"line":37081},[40,52731,36951],{"class":50},[40,52733,52734],{"class":42,"line":37087},[40,52735,36957],{"class":997},[40,52737,52738,52740,52742],{"class":42,"line":37092},[40,52739,36963],{"class":50},[40,52741,36966],{"class":94},[40,52743,1811],{"class":50},[40,52745,52746,52748,52750],{"class":42,"line":37098},[40,52747,36974],{"class":50},[40,52749,36977],{"class":94},[40,52751,1811],{"class":50},[40,52753,52754],{"class":42,"line":37111},[40,52755,36985],{"class":997},[40,52757,52758,52760,52762,52764,52766,52768,52770],{"class":42,"line":37117},[40,52759,35027],{"class":50},[40,52761,3698],{"class":63},[40,52763,1299],{"class":50},[40,52765,64],{"class":63},[40,52767,1299],{"class":50},[40,52769,64],{"class":63},[40,52771,1811],{"class":50},[40,52773,52774,52776,52778,52780,52782,52784,52786,52788,52790],{"class":42,"line":37128},[40,52775,36894],{"class":50},[40,52777,36897],{"class":94},[40,52779,37012],{"class":50},[40,52781,36903],{"class":94},[40,52783,1299],{"class":50},[40,52785,36908],{"class":8539},[40,52787,1284],{"class":1283},[40,52789,37023],{"class":94},[40,52791,1811],{"class":50},[40,52793,52794,52796,52798,52800,52802,52804,52806,52808,52810],{"class":42,"line":37139},[40,52795,36894],{"class":50},[40,52797,36897],{"class":94},[40,52799,37035],{"class":50},[40,52801,36928],{"class":94},[40,52803,1299],{"class":50},[40,52805,36908],{"class":8539},[40,52807,1284],{"class":1283},[40,52809,37046],{"class":94},[40,52811,1811],{"class":50},[40,52813,52814],{"class":42,"line":37158},[40,52815,37054],{"class":997},[40,52817,52819],{"class":42,"line":52818},219,[40,52820,36951],{"class":50},[40,52822,52824,52826,52828],{"class":42,"line":52823},220,[40,52825,36963],{"class":50},[40,52827,36897],{"class":94},[40,52829,1811],{"class":50},[40,52831,52833,52835,52837],{"class":42,"line":52832},221,[40,52834,36974],{"class":50},[40,52836,37076],{"class":94},[40,52838,1811],{"class":50},[40,52840,52842],{"class":42,"line":52841},222,[40,52843,37084],{"class":50},[40,52845,52847],{"class":42,"line":52846},223,[40,52848,1413],{"emptyLinePlaceholder":1412},[40,52850,52852],{"class":42,"line":52851},224,[40,52853,37095],{"class":997},[40,52855,52857,52859,52861,52863,52865],{"class":42,"line":52856},225,[40,52858,4873],{"class":1283},[40,52860,34520],{"class":63},[40,52862,6273],{"class":1283},[40,52864,34525],{"class":94},[40,52866,332],{"class":50},[40,52868,52870],{"class":42,"line":52869},226,[40,52871,37114],{"class":997},[40,52873,52875,52877,52879],{"class":42,"line":52874},227,[40,52876,47846],{"class":50},[40,52878,1284],{"class":1283},[40,52880,47851],{"class":50},[40,52882,52884,52886,52888],{"class":42,"line":52883},228,[40,52885,37131],{"class":50},[40,52887,1284],{"class":1283},[40,52889,37136],{"class":50},[40,52891,52893,52895,52897,52899,52901,52903,52905],{"class":42,"line":52892},229,[40,52894,36693],{"class":50},[40,52896,1284],{"class":1283},[40,52898,47868],{"class":50},[40,52900,37149],{"class":8539},[40,52902,1284],{"class":1283},[40,52904,4384],{"class":63},[40,52906,1811],{"class":50},[40,52908,52910],{"class":42,"line":52909},230,[40,52911,37161],{"class":50},[2423,52913,52915],{"id":52914},"_242测试代码","2.4.2.测试代码",[19,52917,52918],{},"使用测试集进行测试与推理",[31,52920,52922],{"className":33679,"code":52921,"language":2323,"meta":36,"style":36},"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",[26,52923,52924,52930,52940,52950,52961,52971,52975,52979,52987,52992,52996,53013,53017,53021,53025,53029,53033,53065,53069,53077,53081,53093,53097,53101,53105,53109,53113,53117,53121,53125,53143,53157,53161,53171,53181,53191,53197,53201,53205,53213,53217,53233,53241,53245,53249,53257,53265,53269,53273,53277,53281,53287,53291,53301,53309,53317,53321,53325,53329,53337,53341,53357,53361,53365,53369,53381,53385,53397,53401,53405,53417,53421,53431,53435,53439,53451,53455,53463,53467,53471,53479,53483,53491,53495,53499,53503,53507,53511,53527,53535,53539,53543,53561,53567,53571,53581,53589,53597,53601,53605,53609,53613,53621,53625,53641,53645,53653,53661],{"__ignoreMap":36},[40,52925,52926,52928],{"class":42,"line":43},[40,52927,33692],{"class":1283},[40,52929,33695],{"class":50},[40,52931,52932,52934,52936,52938],{"class":42,"line":54},[40,52933,33692],{"class":1283},[40,52935,34715],{"class":50},[40,52937,34683],{"class":1283},[40,52939,34720],{"class":50},[40,52941,52942,52944,52946,52948],{"class":42,"line":70},[40,52943,34037],{"class":1283},[40,52945,34698],{"class":50},[40,52947,33692],{"class":1283},[40,52949,34703],{"class":50},[40,52951,52952,52954,52956,52958],{"class":42,"line":78},[40,52953,34037],{"class":1283},[40,52955,34668],{"class":50},[40,52957,33692],{"class":1283},[40,52959,52960],{"class":50}," ImageFolder\n",[40,52962,52963,52965,52967,52969],{"class":42,"line":86},[40,52964,34037],{"class":1283},[40,52966,35214],{"class":50},[40,52968,33692],{"class":1283},[40,52970,47940],{"class":50},[40,52972,52973],{"class":42,"line":100},[40,52974,1413],{"emptyLinePlaceholder":1412},[40,52976,52977],{"class":42,"line":108},[40,52978,37251],{"class":997},[40,52980,52981,52983,52985],{"class":42,"line":121},[40,52982,35247],{"class":1283},[40,52984,37258],{"class":596},[40,52986,35253],{"class":50},[40,52988,52989],{"class":42,"line":134},[40,52990,52991],{"class":997},"   # 导入自己的数据集，并进行数据处理\n",[40,52993,52994],{"class":42,"line":146},[40,52995,51261],{"class":997},[40,52997,52998,53000,53002,53004,53006,53008,53011],{"class":42,"line":154},[40,52999,51266],{"class":63},[40,53001,1284],{"class":1283},[40,53003,4148],{"class":1283},[40,53005,3731],{"class":94},[40,53007,4037],{"class":63},[40,53009,53010],{"class":51277},"\u002Fdata\u002Ftest",[40,53012,28446],{"class":94},[40,53014,53015],{"class":42,"line":162},[40,53016,1413],{"emptyLinePlaceholder":1412},[40,53018,53019],{"class":42,"line":170},[40,53020,51289],{"class":997},[40,53022,53023],{"class":42,"line":183},[40,53024,51294],{"class":997},[40,53026,53027],{"class":42,"line":196},[40,53028,51299],{"class":997},[40,53030,53031],{"class":42,"line":204},[40,53032,51304],{"class":997},[40,53034,53035,53037,53039,53041,53043,53045,53047,53049,53051,53053,53055,53057,53059,53061,53063],{"class":42,"line":217},[40,53036,51309],{"class":50},[40,53038,1284],{"class":1283},[40,53040,51314],{"class":50},[40,53042,51317],{"class":63},[40,53044,1299],{"class":50},[40,53046,51322],{"class":63},[40,53048,1299],{"class":50},[40,53050,51327],{"class":63},[40,53052,51330],{"class":50},[40,53054,51333],{"class":63},[40,53056,1299],{"class":50},[40,53058,51338],{"class":63},[40,53060,1299],{"class":50},[40,53062,51343],{"class":63},[40,53064,7980],{"class":50},[40,53066,53067],{"class":42,"line":230},[40,53068,51350],{"class":997},[40,53070,53071,53073,53075],{"class":42,"line":238},[40,53072,51355],{"class":50},[40,53074,1284],{"class":1283},[40,53076,51360],{"class":50},[40,53078,53079],{"class":42,"line":251},[40,53080,51365],{"class":997},[40,53082,53083,53085,53087,53089,53091],{"class":42,"line":264},[40,53084,51370],{"class":50},[40,53086,34801],{"class":63},[40,53088,1299],{"class":50},[40,53090,34801],{"class":63},[40,53092,45922],{"class":50},[40,53094,53095],{"class":42,"line":277},[40,53096,51383],{"class":997},[40,53098,53099],{"class":42,"line":290},[40,53100,51388],{"class":50},[40,53102,53103],{"class":42,"line":298},[40,53104,51393],{"class":50},[40,53106,53107],{"class":42,"line":310},[40,53108,51398],{"class":997},[40,53110,53111],{"class":42,"line":5086},[40,53112,51403],{"class":997},[40,53114,53115],{"class":42,"line":5091},[40,53116,1413],{"emptyLinePlaceholder":1412},[40,53118,53119],{"class":42,"line":5105},[40,53120,51412],{"class":997},[40,53122,53123],{"class":42,"line":5110},[40,53124,51417],{"class":997},[40,53126,53127,53129,53131,53133,53135,53137,53139,53141],{"class":42,"line":5902},[40,53128,37265],{"class":50},[40,53130,1284],{"class":1283},[40,53132,51426],{"class":50},[40,53134,51429],{"class":63},[40,53136,1299],{"class":50},[40,53138,51434],{"class":8539},[40,53140,1284],{"class":1283},[40,53142,51439],{"class":50},[40,53144,53145,53147,53149,53151,53153,53155],{"class":42,"line":5916},[40,53146,37322],{"class":50},[40,53148,1284],{"class":1283},[40,53150,34834],{"class":50},[40,53152,34837],{"class":8539},[40,53154,1284],{"class":1283},[40,53156,37333],{"class":50},[40,53158,53159],{"class":42,"line":5924},[40,53160,37338],{"class":997},[40,53162,53163,53165,53167,53169],{"class":42,"line":5929},[40,53164,37343],{"class":8539},[40,53166,1284],{"class":1283},[40,53168,3698],{"class":63},[40,53170,34766],{"class":50},[40,53172,53173,53175,53177,53179],{"class":42,"line":5935},[40,53174,37354],{"class":8539},[40,53176,1284],{"class":1283},[40,53178,34776],{"class":63},[40,53180,34766],{"class":50},[40,53182,53183,53185,53187,53189],{"class":42,"line":5941},[40,53184,37365],{"class":8539},[40,53186,1284],{"class":1283},[40,53188,3672],{"class":63},[40,53190,1811],{"class":50},[40,53192,53193,53195],{"class":42,"line":5946},[40,53194,7413],{"class":1283},[40,53196,37378],{"class":50},[40,53198,53199],{"class":42,"line":11270},[40,53200,1413],{"emptyLinePlaceholder":1412},[40,53202,53203],{"class":42,"line":11294},[40,53204,37387],{"class":997},[40,53206,53207,53209,53211],{"class":42,"line":11299},[40,53208,35247],{"class":1283},[40,53210,37394],{"class":596},[40,53212,37397],{"class":50},[40,53214,53215],{"class":42,"line":11305},[40,53216,37402],{"class":997},[40,53218,53219,53221,53223,53225,53227,53229,53231],{"class":42,"line":11332},[40,53220,34537],{"class":50},[40,53222,1284],{"class":1283},[40,53224,34544],{"class":94},[40,53226,5035],{"class":1283},[40,53228,34549],{"class":50},[40,53230,5032],{"class":1283},[40,53232,37419],{"class":94},[40,53234,53235,53237,53239],{"class":42,"line":11337},[40,53236,34589],{"class":50},[40,53238,1284],{"class":1283},[40,53240,35589],{"class":50},[40,53242,53243],{"class":42,"line":11343},[40,53244,1413],{"emptyLinePlaceholder":1412},[40,53246,53247],{"class":42,"line":11355},[40,53248,37436],{"class":997},[40,53250,53251,53253,53255],{"class":42,"line":11367},[40,53252,37441],{"class":50},[40,53254,1284],{"class":1283},[40,53256,35642],{"class":63},[40,53258,53259,53261,53263],{"class":42,"line":11379},[40,53260,37450],{"class":50},[40,53262,1284],{"class":1283},[40,53264,6409],{"class":63},[40,53266,53267],{"class":42,"line":13038},[40,53268,1413],{"emptyLinePlaceholder":1412},[40,53270,53271],{"class":42,"line":13063},[40,53272,37463],{"class":997},[40,53274,53275],{"class":42,"line":13086},[40,53276,37468],{"class":997},[40,53278,53279],{"class":42,"line":13110},[40,53280,37473],{"class":997},[40,53282,53283,53285],{"class":42,"line":13115},[40,53284,37478],{"class":1283},[40,53286,36184],{"class":50},[40,53288,53289],{"class":42,"line":13120},[40,53290,37485],{"class":997},[40,53292,53293,53295,53297,53299],{"class":42,"line":13125},[40,53294,6727],{"class":1283},[40,53296,37492],{"class":50},[40,53298,29355],{"class":1283},[40,53300,37497],{"class":50},[40,53302,53303,53305,53307],{"class":42,"line":13134},[40,53304,37502],{"class":50},[40,53306,1284],{"class":1283},[40,53308,37507],{"class":50},[40,53310,53311,53313,53315],{"class":42,"line":13139},[40,53312,37512],{"class":50},[40,53314,1284],{"class":1283},[40,53316,37517],{"class":50},[40,53318,53319],{"class":42,"line":13145},[40,53320,37522],{"class":997},[40,53322,53323],{"class":42,"line":13166},[40,53324,36175],{"class":50},[40,53326,53327],{"class":42,"line":13172},[40,53328,37531],{"class":997},[40,53330,53331,53333,53335],{"class":42,"line":13186},[40,53332,35960],{"class":50},[40,53334,1284],{"class":1283},[40,53336,37540],{"class":50},[40,53338,53339],{"class":42,"line":13192},[40,53340,37545],{"class":997},[40,53342,53343,53345,53347,53349,53351,53353,53355],{"class":42,"line":13219},[40,53344,35977],{"class":50},[40,53346,1284],{"class":1283},[40,53348,35982],{"class":50},[40,53350,35985],{"class":8539},[40,53352,1284],{"class":1283},[40,53354,3698],{"class":63},[40,53356,1811],{"class":50},[40,53358,53359],{"class":42,"line":13228},[40,53360,37566],{"class":997},[40,53362,53363],{"class":42,"line":13234},[40,53364,37571],{"class":997},[40,53366,53367],{"class":42,"line":13242},[40,53368,37576],{"class":997},[40,53370,53371,53373,53375,53377,53379],{"class":42,"line":13247},[40,53372,37581],{"class":50},[40,53374,12799],{"class":1283},[40,53376,36087],{"class":50},[40,53378,6273],{"class":1283},[40,53380,37590],{"class":50},[40,53382,53383],{"class":42,"line":19926},[40,53384,37595],{"class":997},[40,53386,53387,53389,53391,53393,53395],{"class":42,"line":19932},[40,53388,37600],{"class":50},[40,53390,12799],{"class":1283},[40,53392,37605],{"class":50},[40,53394,3672],{"class":63},[40,53396,1811],{"class":50},[40,53398,53399],{"class":42,"line":19955},[40,53400,1413],{"emptyLinePlaceholder":1412},[40,53402,53403],{"class":42,"line":19961},[40,53404,37618],{"class":997},[40,53406,53407,53409,53411,53413,53415],{"class":42,"line":19984},[40,53408,37623],{"class":50},[40,53410,1284],{"class":1283},[40,53412,37628],{"class":50},[40,53414,4063],{"class":1283},[40,53416,37633],{"class":50},[40,53418,53419],{"class":42,"line":19998},[40,53420,37638],{"class":997},[40,53422,53423,53425,53427,53429],{"class":42,"line":20018},[40,53424,35751],{"class":63},[40,53426,3488],{"class":50},[40,53428,37647],{"class":94},[40,53430,37650],{"class":50},[40,53432,53433],{"class":42,"line":20024},[40,53434,1413],{"emptyLinePlaceholder":1412},[40,53436,53437],{"class":42,"line":20035},[40,53438,37659],{"class":997},[40,53440,53441,53443,53445,53447,53449],{"class":42,"line":20058},[40,53442,4873],{"class":1283},[40,53444,34520],{"class":63},[40,53446,6273],{"class":1283},[40,53448,34525],{"class":94},[40,53450,332],{"class":50},[40,53452,53453],{"class":42,"line":20080},[40,53454,37676],{"class":997},[40,53456,53457,53459,53461],{"class":42,"line":20085},[40,53458,34589],{"class":50},[40,53460,1284],{"class":1283},[40,53462,47851],{"class":50},[40,53464,53465],{"class":42,"line":20091},[40,53466,37689],{"class":997},[40,53468,53469],{"class":42,"line":20105},[40,53470,37694],{"class":997},[40,53472,53473,53475,53477],{"class":42,"line":20118},[40,53474,37699],{"class":50},[40,53476,37702],{"class":94},[40,53478,33797],{"class":50},[40,53480,53481],{"class":42,"line":20123},[40,53482,37709],{"class":997},[40,53484,53485,53487,53489],{"class":42,"line":20137},[40,53486,37322],{"class":50},[40,53488,1284],{"class":1283},[40,53490,37718],{"class":50},[40,53492,53493],{"class":42,"line":20142},[40,53494,37723],{"class":997},[40,53496,53497],{"class":42,"line":20148},[40,53498,37728],{"class":50},[40,53500,53501],{"class":42,"line":20153},[40,53502,1413],{"emptyLinePlaceholder":1412},[40,53504,53505],{"class":42,"line":20167},[40,53506,37737],{"class":997},[40,53508,53509],{"class":42,"line":20172},[40,53510,37742],{"class":997},[40,53512,53513,53515,53517,53519,53521,53523,53525],{"class":42,"line":20177},[40,53514,34537],{"class":50},[40,53516,1284],{"class":1283},[40,53518,34544],{"class":94},[40,53520,5035],{"class":1283},[40,53522,34549],{"class":50},[40,53524,5032],{"class":1283},[40,53526,37419],{"class":94},[40,53528,53529,53531,53533],{"class":42,"line":20191},[40,53530,34589],{"class":50},[40,53532,1284],{"class":1283},[40,53534,35589],{"class":50},[40,53536,53537],{"class":42,"line":20203},[40,53538,37771],{"class":997},[40,53540,53541],{"class":42,"line":20208},[40,53542,37776],{"class":997},[40,53544,53545,53547,53549,53551,53554,53556,53559],{"class":42,"line":20221},[40,53546,37781],{"class":50},[40,53548,1284],{"class":1283},[40,53550,4367],{"class":50},[40,53552,53553],{"class":94},"'猫'",[40,53555,1299],{"class":50},[40,53557,53558],{"class":94},"'狗'",[40,53560,36546],{"class":50},[40,53562,53563,53565],{"class":42,"line":20226},[40,53564,37478],{"class":1283},[40,53566,36184],{"class":50},[40,53568,53569],{"class":42,"line":20231},[40,53570,37846],{"class":997},[40,53572,53573,53575,53577,53579],{"class":42,"line":20236},[40,53574,6727],{"class":1283},[40,53576,37853],{"class":50},[40,53578,29355],{"class":1283},[40,53580,37497],{"class":50},[40,53582,53583,53585,53587],{"class":42,"line":20249},[40,53584,35910],{"class":50},[40,53586,1284],{"class":1283},[40,53588,35915],{"class":50},[40,53590,53591,53593,53595],{"class":42,"line":20254},[40,53592,35925],{"class":50},[40,53594,1284],{"class":1283},[40,53596,35930],{"class":50},[40,53598,53599],{"class":42,"line":35933},[40,53600,1413],{"emptyLinePlaceholder":1412},[40,53602,53603],{"class":42,"line":35939},[40,53604,37882],{"class":997},[40,53606,53607],{"class":42,"line":35945},[40,53608,36175],{"class":50},[40,53610,53611],{"class":42,"line":35951},[40,53612,37891],{"class":997},[40,53614,53615,53617,53619],{"class":42,"line":35957},[40,53616,35960],{"class":50},[40,53618,1284],{"class":1283},[40,53620,35965],{"class":50},[40,53622,53623],{"class":42,"line":35968},[40,53624,37904],{"class":997},[40,53626,53627,53629,53631,53633,53635,53637,53639],{"class":42,"line":35974},[40,53628,35977],{"class":50},[40,53630,1284],{"class":1283},[40,53632,35982],{"class":50},[40,53634,35985],{"class":8539},[40,53636,1284],{"class":1283},[40,53638,3698],{"class":63},[40,53640,1811],{"class":50},[40,53642,53643],{"class":42,"line":35994},[40,53644,37925],{"class":997},[40,53646,53647,53649,53651],{"class":42,"line":36000},[40,53648,37930],{"class":50},[40,53650,1284],{"class":1283},[40,53652,37935],{"class":50},[40,53654,53655,53657,53659],{"class":42,"line":36011},[40,53656,37940],{"class":50},[40,53658,1284],{"class":1283},[40,53660,37945],{"class":50},[40,53662,53663,53665,53667,53669,53671,53673,53675,53677],{"class":42,"line":36017},[40,53664,37950],{"class":63},[40,53666,3488],{"class":50},[40,53668,37955],{"class":94},[40,53670,37958],{"class":50},[40,53672,37961],{"class":94},[40,53674,1299],{"class":50},[40,53676,37966],{"class":94},[40,53678,37969],{"class":50},[3384,53680,53681],{},"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":36,"searchDepth":54,"depth":54,"links":53683},[53684,53685,53686,53687],{"id":33891,"depth":70,"text":33892},{"id":41139,"depth":70,"text":41140},{"id":44572,"depth":70,"text":44573},{"id":48581,"depth":70,"text":48582},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":33883,"description":3413},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":53694,"title":53695,"body":53696,"description":3413,"extension":3414,"meta":53703,"navigation":1412,"path":53704,"seo":53705,"stem":53706,"__hash__":53707},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":53697,"toc":53701},[53698],[10,53699,53695],{"id":53700},"_3yolo模型学习",{"title":36,"searchDepth":54,"depth":54,"links":53702},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":53695,"description":3413},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":53709,"title":53710,"body":53711,"description":53718,"extension":3414,"meta":53719,"navigation":1412,"path":53721,"seo":53722,"stem":53723,"__hash__":53724},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":53712,"toc":53716},[53713],[19,53714,53715],{},"yolo模型还未补充",{"title":36,"searchDepth":54,"depth":54,"links":53717},[],"深度学习学习",{"category":53720},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":53710,"description":53718},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":53726,"title":53727,"body":53728,"description":3413,"extension":3414,"meta":53753,"navigation":1412,"path":53754,"seo":53755,"stem":53756,"__hash__":53757},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":53729,"toc":53751},[53730,53733,53736,53741,53748],[10,53731,53727],{"id":53732},"_1工具",[19,53734,53735],{},"提示错误插件：有问题会提前报错",[19,53737,53738],{},[438,53739],{"alt":36,"src":53740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,53742,53743],{},[2106,53744,53747],{"href":53745,"rel":53746},"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",[2110],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,53749,53750],{},"alt键加上下箭头可以实现语句的移动",{"title":36,"searchDepth":54,"depth":54,"links":53752},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":53727,"description":3413},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":53759,"title":53760,"body":53761,"description":3413,"extension":3414,"meta":56623,"navigation":1412,"path":56624,"seo":56625,"stem":56626,"__hash__":56627},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":53762,"toc":56574},[53763,53766,53770,53774,53779,53782,53787,53791,53798,53803,53810,53815,53822,53827,53831,53836,53839,53843,53848,53852,53857,53860,53863,53866,53869,53872,53875,53878,53881,53886,53891,53896,53900,53903,53906,53910,53915,53918,53926,53931,53948,53956,53961,53966,53971,53976,53981,53984,53989,53994,53998,54007,54012,54017,54021,54026,54029,54033,54038,54046,54051,54056,54059,54064,54069,54074,54077,54080,54083,54088,54093,54096,54101,54104,54109,54112,54115,54118,54123,54126,54129,54144,54149,54154,54159,54162,54165,54168,54182,54185,54190,54195,54198,54201,54204,54207,54210,54213,54216,54220,54224,54229,54233,54236,54241,54246,54249,54254,54257,54261,54266,54269,54272,54275,54278,54281,54284,54287,54290,54293,54297,54302,54307,54312,54315,54318,54322,54327,54330,54334,54337,54340,54345,54348,54351,54355,54359,54362,54367,54372,54375,54404,54409,54414,54419,54424,54428,54433,54437,54442,54445,54449,54453,54458,54462,54467,54472,54476,54481,54484,54486,54489,54494,54498,54503,54507,54511,54516,54521,54526,54531,54535,54540,54545,54550,54553,54556,54561,54564,54569,54574,54579,54584,54588,55393,55397,55740,55745,55748,55751,55754,55757,55760,55763,55766,55769,55771,55774,55776,55779,55783,55788,55791,55794,55797,55801,55806,55811,55831,55834,55838,55843,55848,55865,55869,55898,55902,55924,55926,55965,55973,55979,55983,55986,55989,55994,55999,56002,56005,56008,56013,56018,56021,56024,56027,56030,56033,56036,56039,56042,56045,56048,56051,56053,56056,56059,56062,56065,56068,56071,56074,56077,56081,56086,56089,56094,56097,56100,56103,56106,56109,56112,56115,56117,56120,56123,56126,56129,56132,56135,56139,56142,56151,56154,56159,56162,56167,56170,56173,56176,56179,56182,56185,56188,56192,56196,56199,56202,56207,56212,56217,56221,56226,56231,56234,56237,56240,56243,56246,56251,56254,56259,56261,56266,56269,56273,56278,56281,56284,56289,56293,56296,56301,56304,56307,56336,56341,56344,56347,56350,56353,56356,56360,56363,56449,56453,56456,56461,56466,56473,56476,56479,56482,56485,56488,56493,56498,56501,56504,56507,56510,56513,56516,56519,56522,56525,56527,56530,56534,56539,56544,56549,56552,56557,56562,56565,56568,56571],[10,53764,53760],{"id":53765},"_2基础语法",[14,53767,53769],{"id":53768},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[402,53771,53773],{"id":53772},"_211-js组成","2.1.1 js组成",[492,53775,53776],{},[495,53777,53778],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,53780,53781],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[492,53783,53784],{"start":54},[495,53785,53786],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[402,53788,53790],{"id":53789},"_212-js书写位置","2.1.2 js书写位置",[492,53792,53793],{},[495,53794,53795],{},[409,53796,53797],{},"内部 JavaScript",[19,53799,53800],{},[438,53801],{"alt":36,"src":53802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[492,53804,53805],{"start":54},[495,53806,53807],{},[409,53808,53809],{},"外部 JavaScript",[19,53811,53812],{},[438,53813],{"alt":36,"src":53814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[492,53816,53817],{"start":70},[495,53818,53819],{},[409,53820,53821],{},"内联 JavaScript",[19,53823,53824],{},[438,53825],{"alt":36,"src":53826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[402,53828,53830],{"id":53829},"_213-javascript注释","2.1.3 JavaScript注释",[19,53832,53833],{},[438,53834],{"alt":36,"src":53835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,53837,53838],{},"alt+shift+a一定要记住！",[402,53840,53842],{"id":53841},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,53844,53845],{},[438,53846],{"alt":36,"src":53847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[402,53849,53851],{"id":53850},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[492,53853,53854],{},[495,53855,53856],{},"输出语法：",[19,53858,53859],{},"①document.write('要出的内容')",[19,53861,53862],{},"向body内输出内容；",[19,53864,53865],{},"如果输出的内容写的是标签，也会被解析cheng",[19,53867,53868],{},"②alert('要出的内容')",[19,53870,53871],{},"页面弹出警告对话框",[19,53873,53874],{},"③console.log('控制台打印')",[19,53876,53877],{},"控制台输出语法，程序员调试使用",[19,53879,53880],{},"输入log就行，自动生成：",[19,53882,53883],{},[438,53884],{"alt":36,"src":53885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[492,53887,53888],{"start":54},[495,53889,53890],{},"输入语法：",[19,53892,53893],{},[438,53894],{"alt":36,"src":53895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[402,53897,53899],{"id":53898},"_2116-字面量","21.1.6 字面量",[19,53901,53902],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,53904,53905],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,53907,53909],{"id":53908},"_22-变量","2.2 变量",[492,53911,53912],{},[495,53913,53914],{},"变量声明",[19,53916,53917],{},"let 变量名",[1338,53919,53920,53923],{},[495,53921,53922],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[495,53924,53925],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[492,53927,53928],{"start":54},[495,53929,53930],{},"变量赋值",[31,53932,53936],{"className":53933,"code":53934,"language":53935,"meta":36,"style":36},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[26,53937,53938,53943],{"__ignoreMap":36},[40,53939,53940],{"class":42,"line":43},[40,53941,53942],{"class":50},"let age\n",[40,53944,53945],{"class":42,"line":54},[40,53946,53947],{"class":50},"age=18\n",[492,53949,53950,53953],{"start":70},[495,53951,53952],{},"连这些（变量的初始化）：let age=18",[495,53954,53955],{},"更新变量",[19,53957,53958],{},[438,53959],{"alt":36,"src":53960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[492,53962,53963],{"start":86},[495,53964,53965],{},"声明多个变量",[19,53967,53968],{},[438,53969],{"alt":36,"src":53970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[492,53972,53973],{"start":100},[495,53974,53975],{},"变量命名规则与规范",[19,53977,53978],{},[438,53979],{"alt":36,"src":53980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,53982,53983],{},"遵守小驼峰！",[492,53985,53986],{"start":108},[495,53987,53988],{},"变量拓展-let和var的区别",[19,53990,53991],{},[438,53992],{"alt":36,"src":53993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,53995,53997],{"id":53996},"_23-数组","2.3 数组",[31,53999,54001],{"className":53933,"code":54000,"language":53935,"meta":36,"style":36},"let arr = []\n",[26,54002,54003],{"__ignoreMap":36},[40,54004,54005],{"class":42,"line":43},[40,54006,54000],{"class":50},[19,54008,54009],{},[438,54010],{"alt":36,"src":54011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,54013,54014],{},[438,54015],{"alt":36,"src":54016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,54018,54020],{"id":54019},"_24-常量","2.4 常量",[19,54022,54023],{},[438,54024],{"alt":36,"src":54025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,54027,54028],{},"const — 类似于 let ，但是变量的值无法被修改",[14,54030,54032],{"id":54031},"_25-数据类型","2.5 数据类型",[19,54034,54035],{},[438,54036],{"alt":36,"src":54037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[492,54039,54040,54043],{},[495,54041,54042],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[495,54044,54045],{},"算数运算符：",[19,54047,54048],{},[438,54049],{"alt":36,"src":54050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[492,54052,54053],{"start":70},[495,54054,54055],{},"数字类型（Number）",[19,54057,54058],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,54060,54061],{},[438,54062],{"alt":36,"src":54063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[492,54065,54066],{"start":78},[495,54067,54068],{},"字符串类型（string）",[19,54070,54071],{},[438,54072],{"alt":36,"src":54073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,54075,54076],{},"反引号也是可以使用的",[19,54078,54079],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,54081,54082],{},"例如：document.write(\"我今年\"+age+\"岁\")",[492,54084,54085],{"start":86},[495,54086,54087],{},"模板字符串",[19,54089,54090],{},[438,54091],{"alt":36,"src":54092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,54094,54095],{},"类似于python的字符串格式化",[492,54097,54098],{"start":100},[495,54099,54100],{},"布尔类型",[19,54102,54103],{},"true 和 false",[492,54105,54106],{"start":108},[495,54107,54108],{},"未定义类型（underfined）",[19,54110,54111],{},"表示没有赋值",[19,54113,54114],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,54116,54117],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[492,54119,54120],{"start":121},[495,54121,54122],{},"null（空类型）",[19,54124,54125],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,54127,54128],{},"赋值了，但是内容为空",[31,54130,54132],{"className":53933,"code":54131,"language":53935,"meta":36,"style":36},"typeof null\n输出的是'object'，是一个对象数据类型\n",[26,54133,54134,54139],{"__ignoreMap":36},[40,54135,54136],{"class":42,"line":43},[40,54137,54138],{"class":50},"typeof null\n",[40,54140,54141],{"class":42,"line":54},[40,54142,54143],{"class":50},"输出的是'object'，是一个对象数据类型\n",[492,54145,54146],{"start":134},[495,54147,54148],{},"控制台检测数据类型",[19,54150,54151],{},[438,54152],{"alt":36,"src":54153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[492,54155,54156],{"start":146},[495,54157,54158],{},"类型转换",[19,54160,54161],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,54163,54164],{},"转换方式：隐式转换和显示转换",[19,54166,54167],{},"①隐式转换",[1338,54169,54170,54173,54176,54179],{},[495,54171,54172],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[495,54174,54175],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[495,54177,54178],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[495,54180,54181],{},"任何数据和字符串相加结果都是字符串",[19,54183,54184],{},"②显示转换",[19,54186,54187],{},[438,54188],{"alt":36,"src":54189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,54191,54192],{},[438,54193],{"alt":36,"src":54194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,54196,54197],{},"在输入的时候要用好隐式转换，简单写起来",[19,54199,54200],{},"let num = +prompt(’请输入数字：‘)",[19,54202,54203],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,54205,54206],{},"console.log(parseInt('12.333px'))",[19,54208,54209],{},"输出为：12",[19,54211,54212],{},"console.log(parseInt('a'a'a12.333px'))",[19,54214,54215],{},"输出：NaN",[14,54217,54219],{"id":54218},"_26-运算符","2.6 运算符",[402,54221,54223],{"id":54222},"_261-赋值运算符","2.6.1 赋值运算符",[19,54225,54226],{},[438,54227],{"alt":36,"src":54228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[402,54230,54232],{"id":54231},"_262-一元运算符","2.6.2 一元运算符",[19,54234,54235],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,54237,54238],{},[438,54239],{"alt":36,"src":54240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,54242,54243],{},[438,54244],{"alt":36,"src":54245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,54247,54248],{},"两者的区别：",[19,54250,54251],{},[438,54252],{"alt":36,"src":54253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,54255,54256],{},"前置先自加；后置后加，代码执行完之后再加",[402,54258,54260],{"id":54259},"_263-比较运算符","2.6.3 比较运算符",[19,54262,54263],{},[438,54264],{"alt":36,"src":54265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,54267,54268],{},"比较运算符也有隐式转换",[19,54270,54271],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,54273,54274],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,54276,54277],{},"要使用三等，开发的时候",[19,54279,54280],{},"NaN不等于任何人，包括它自己",[19,54282,54283],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,54285,54286],{},"7\u002F10=0.7",[19,54288,54289],{},"最后：0.5+0.2=0.7",[19,54291,54292],{},"字符串比较，比较的是字符对应的ASCII码",[402,54294,54296],{"id":54295},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,54298,54299],{},[438,54300],{"alt":36,"src":54301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,54303,54304],{},[438,54305],{"alt":36,"src":54306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,54308,54309],{},[438,54310],{"alt":36,"src":54311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,54313,54314],{},"上述题目选D",[19,54316,54317],{},"与真2假1；或真1假2",[402,54319,54321],{"id":54320},"_265-运算符优先级","2.6.5 运算符优先级",[19,54323,54324],{},[438,54325],{"alt":36,"src":54326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,54328,54329],{},"先算逻辑与，后算逻辑或",[14,54331,54333],{"id":54332},"_27-语句","2.7 语句",[19,54335,54336],{},"表达式：是可以被求值的代码，会有结果给我们",[19,54338,54339],{},"语句：语句是可以被执行的代码，例如prompt()",[19,54341,54342],{},[438,54343],{"alt":36,"src":54344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,54346,54347],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,54349,54350],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[402,54352,54354],{"id":54353},"_271-分支语句","2.7.1 分支语句",[2423,54356,54358],{"id":54357},"_2711-if分支语句","2.7.1.1 if分支语句",[19,54360,54361],{},"if语句单行简单的话，可以不写{}，写在一行就行",[492,54363,54364],{},[495,54365,54366],{},"单分支语句",[19,54368,54369],{},[438,54370],{"alt":36,"src":54371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,54373,54374],{},"除了0，所有数字都为真",[31,54376,54378],{"className":53933,"code":54377,"language":53935,"meta":36,"style":36},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[26,54379,54380,54385,54390,54395,54399],{"__ignoreMap":36},[40,54381,54382],{"class":42,"line":43},[40,54383,54384],{"class":50},"if（0) {\n",[40,54386,54387],{"class":42,"line":54},[40,54388,54389],{"class":50},"    let a=1\n",[40,54391,54392],{"class":42,"line":70},[40,54393,54394],{"class":50},"    alert(typeof a)\n",[40,54396,54397],{"class":42,"line":78},[40,54398,4907],{"class":50},[40,54400,54401],{"class":42,"line":86},[40,54402,54403],{"class":50},"不输出，括号为假\n",[492,54405,54406],{"start":54},[495,54407,54408],{},"双分支语句",[19,54410,54411],{},[438,54412],{"alt":36,"src":54413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[492,54415,54416],{"start":70},[495,54417,54418],{},"多分支语句",[19,54420,54421],{},[438,54422],{"alt":36,"src":54423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[2423,54425,54427],{"id":54426},"_2712-三元运算符","2.7.1.2 三元运算符",[19,54429,54430],{},[438,54431],{"alt":36,"src":54432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[2423,54434,54436],{"id":54435},"_2713-switch语句","2.7.1.3 switch语句",[19,54438,54439],{},[438,54440],{"alt":36,"src":54441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,54443,54444],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[402,54446,54448],{"id":54447},"_272-循环语句","2.7.2 循环语句",[2423,54450,54452],{"id":54451},"_2721-断点演示","2.7.2.1 断点演示",[19,54454,54455],{},[438,54456],{"alt":36,"src":54457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[2423,54459,54461],{"id":54460},"_2722-while循环","2.7.2.2 while循环",[19,54463,54464],{},[438,54465],{"alt":36,"src":54466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,54468,54469],{},[438,54470],{"alt":36,"src":54471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[2423,54473,54475],{"id":54474},"_2723-for循环","2.7.2.3 for循环",[19,54477,54478],{},[438,54479],{"alt":36,"src":54480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,54482,54483],{},"for(;;) {",[19,54485,4423],{},[19,54487,54488],{},"表示无限循环",[19,54490,54491],{},[438,54492],{"alt":36,"src":54493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[2423,54495,54497],{"id":54496},"_2724-循环的退出","2.7.2.4 循环的退出",[19,54499,54500],{},[438,54501],{"alt":36,"src":54502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,54504,54506],{"id":54505},"_28-数组","2.8 数组",[402,54508,54510],{"id":54509},"_281-基础认识","2.8.1 基础认识",[19,54512,54513],{},[438,54514],{"alt":36,"src":54515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,54517,54518],{},[438,54519],{"alt":36,"src":54520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,54522,54523],{},[438,54524],{"alt":36,"src":54525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,54527,54528],{},[438,54529],{"alt":36,"src":54530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[402,54532,54534],{"id":54533},"_282-操作数组","2.8.2 操作数组",[19,54536,54537],{},[438,54538],{"alt":36,"src":54539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[492,54541,54542],{},[495,54543,54544],{},"添加元素",[19,54546,54547],{},[438,54548],{"alt":36,"src":54549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,54551,54552],{},"console.log(arr.push('green'))",[19,54554,54555],{},"输出结果：为新数组的长度",[19,54557,54558],{},[438,54559],{"alt":36,"src":54560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,54562,54563],{},"push用的非常多，一定要记住",[492,54565,54566],{},[495,54567,54568],{},"删除元素",[19,54570,54571],{},[438,54572],{"alt":36,"src":54573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,54575,54576],{},[438,54577],{"alt":36,"src":54578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,54580,54581],{},[438,54582],{"alt":36,"src":54583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[402,54585,54587],{"id":54586},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[31,54589,54591],{"className":53933,"code":54590,"language":53935,"meta":36,"style":36},"\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",[26,54592,54593,54607,54623,54627,54636,54654,54678,54700,54714,54722,54729,54740,54751,54755,54759,54766,54778,54793,54806,54825,54842,54857,54869,54881,54893,54897,54901,54912,54922,54934,54946,54958,54969,54973,54977,54989,54993,55007,55011,55015,55026,55040,55052,55066,55070,55079,55088,55092,55101,55105,55114,55119,55124,55137,55165,55170,55175,55200,55205,55209,55214,55219,55234,55238,55243,55273,55285,55301,55317,55331,55336,55343,55347,55352,55365,55373,55381,55385],{"__ignoreMap":36},[40,54594,54595,54598,54601,54604],{"class":42,"line":43},[40,54596,54597],{"class":50},"\u003C!",[40,54599,54600],{"class":46},"DOCTYPE",[40,54602,54603],{"class":596}," html",[40,54605,54606],{"class":50},">\n",[40,54608,54609,54611,54613,54616,54618,54621],{"class":42,"line":54},[40,54610,4387],{"class":50},[40,54612,53935],{"class":46},[40,54614,54615],{"class":596}," lang",[40,54617,1284],{"class":50},[40,54619,54620],{"class":94},"\"en\"",[40,54622,54606],{"class":50},[40,54624,54625],{"class":42,"line":70},[40,54626,1413],{"emptyLinePlaceholder":1412},[40,54628,54629,54631,54634],{"class":42,"line":78},[40,54630,4387],{"class":50},[40,54632,54633],{"class":46},"head",[40,54635,54606],{"class":50},[40,54637,54638,54641,54644,54647,54649,54652],{"class":42,"line":86},[40,54639,54640],{"class":50},"    \u003C",[40,54642,54643],{"class":46},"meta",[40,54645,54646],{"class":596}," charset",[40,54648,1284],{"class":50},[40,54650,54651],{"class":94},"\"UTF-8\"",[40,54653,54606],{"class":50},[40,54655,54656,54658,54660,54663,54665,54668,54671,54673,54676],{"class":42,"line":100},[40,54657,54640],{"class":50},[40,54659,54643],{"class":46},[40,54661,54662],{"class":596}," http-equiv",[40,54664,1284],{"class":50},[40,54666,54667],{"class":94},"\"X-UA-Compatible\"",[40,54669,54670],{"class":596}," content",[40,54672,1284],{"class":50},[40,54674,54675],{"class":94},"\"IE=edge\"",[40,54677,54606],{"class":50},[40,54679,54680,54682,54684,54686,54688,54691,54693,54695,54698],{"class":42,"line":108},[40,54681,54640],{"class":50},[40,54683,54643],{"class":46},[40,54685,18242],{"class":596},[40,54687,1284],{"class":50},[40,54689,54690],{"class":94},"\"viewport\"",[40,54692,54670],{"class":596},[40,54694,1284],{"class":50},[40,54696,54697],{"class":94},"\"width=device-width, initial-scale=1.0\"",[40,54699,54606],{"class":50},[40,54701,54702,54704,54707,54710,54712],{"class":42,"line":121},[40,54703,54640],{"class":50},[40,54705,54706],{"class":46},"title",[40,54708,54709],{"class":50},">Document\u003C\u002F",[40,54711,54706],{"class":46},[40,54713,54606],{"class":50},[40,54715,54716,54718,54720],{"class":42,"line":134},[40,54717,54640],{"class":50},[40,54719,3384],{"class":46},[40,54721,54606],{"class":50},[40,54723,54724,54727],{"class":42,"line":146},[40,54725,54726],{"class":46},"        *",[40,54728,18894],{"class":50},[40,54730,54731,54734,54736,54738],{"class":42,"line":154},[40,54732,54733],{"class":63},"            margin",[40,54735,60],{"class":50},[40,54737,3672],{"class":63},[40,54739,4637],{"class":50},[40,54741,54742,54745,54747,54749],{"class":42,"line":162},[40,54743,54744],{"class":63},"            padding",[40,54746,60],{"class":50},[40,54748,3672],{"class":63},[40,54750,4637],{"class":50},[40,54752,54753],{"class":42,"line":170},[40,54754,5854],{"class":50},[40,54756,54757],{"class":42,"line":183},[40,54758,1413],{"emptyLinePlaceholder":1412},[40,54760,54761,54764],{"class":42,"line":196},[40,54762,54763],{"class":596},"        .box",[40,54765,18894],{"class":50},[40,54767,54768,54771,54773,54776],{"class":42,"line":204},[40,54769,54770],{"class":63},"            display",[40,54772,60],{"class":50},[40,54774,54775],{"class":63},"flex",[40,54777,4637],{"class":50},[40,54779,54780,54783,54785,54788,54791],{"class":42,"line":217},[40,54781,54782],{"class":63},"            width",[40,54784,60],{"class":50},[40,54786,54787],{"class":63},"700",[40,54789,54790],{"class":1283},"px",[40,54792,4637],{"class":50},[40,54794,54795,54798,54800,54802,54804],{"class":42,"line":230},[40,54796,54797],{"class":63},"            height",[40,54799,60],{"class":50},[40,54801,7296],{"class":63},[40,54803,54790],{"class":1283},[40,54805,4637],{"class":50},[40,54807,54808,54811,54813,54815,54817,54820,54823],{"class":42,"line":238},[40,54809,54810],{"class":63},"            border-left",[40,54812,60],{"class":50},[40,54814,3698],{"class":63},[40,54816,54790],{"class":1283},[40,54818,54819],{"class":63}," solid",[40,54821,54822],{"class":63}," pink",[40,54824,4637],{"class":50},[40,54826,54827,54830,54832,54834,54836,54838,54840],{"class":42,"line":251},[40,54828,54829],{"class":63},"            border-bottom",[40,54831,60],{"class":50},[40,54833,3698],{"class":63},[40,54835,54790],{"class":1283},[40,54837,54819],{"class":63},[40,54839,54822],{"class":63},[40,54841,4637],{"class":50},[40,54843,54844,54846,54848,54850,54852,54855],{"class":42,"line":264},[40,54845,54733],{"class":63},[40,54847,60],{"class":50},[40,54849,4134],{"class":63},[40,54851,54790],{"class":1283},[40,54853,54854],{"class":63}," auto",[40,54856,4637],{"class":50},[40,54858,54859,54862,54864,54867],{"class":42,"line":277},[40,54860,54861],{"class":63},"            justify-content",[40,54863,60],{"class":50},[40,54865,54866],{"class":63},"space-around",[40,54868,4637],{"class":50},[40,54870,54871,54874,54876,54879],{"class":42,"line":290},[40,54872,54873],{"class":63},"            align-items",[40,54875,60],{"class":50},[40,54877,54878],{"class":63},"flex-end",[40,54880,4637],{"class":50},[40,54882,54883,54886,54888,54891],{"class":42,"line":298},[40,54884,54885],{"class":63},"            text-align",[40,54887,60],{"class":50},[40,54889,54890],{"class":63},"center",[40,54892,4637],{"class":50},[40,54894,54895],{"class":42,"line":310},[40,54896,5854],{"class":50},[40,54898,54899],{"class":42,"line":5086},[40,54900,1413],{"emptyLinePlaceholder":1412},[40,54902,54903,54905,54907,54910],{"class":42,"line":5091},[40,54904,54763],{"class":596},[40,54906,4437],{"class":1283},[40,54908,54909],{"class":46},"div",[40,54911,18894],{"class":50},[40,54913,54914,54916,54918,54920],{"class":42,"line":5105},[40,54915,54770],{"class":63},[40,54917,60],{"class":50},[40,54919,54775],{"class":63},[40,54921,4637],{"class":50},[40,54923,54924,54926,54928,54930,54932],{"class":42,"line":5110},[40,54925,54782],{"class":63},[40,54927,60],{"class":50},[40,54929,4134],{"class":63},[40,54931,54790],{"class":1283},[40,54933,4637],{"class":50},[40,54935,54936,54939,54941,54944],{"class":42,"line":5902},[40,54937,54938],{"class":63},"            background-color",[40,54940,60],{"class":50},[40,54942,54943],{"class":63},"pink",[40,54945,4637],{"class":50},[40,54947,54948,54951,54953,54956],{"class":42,"line":5916},[40,54949,54950],{"class":63},"            flex-direction",[40,54952,60],{"class":50},[40,54954,54955],{"class":63},"column",[40,54957,4637],{"class":50},[40,54959,54960,54962,54964,54967],{"class":42,"line":5924},[40,54961,54861],{"class":63},[40,54963,60],{"class":50},[40,54965,54966],{"class":63},"space-between",[40,54968,4637],{"class":50},[40,54970,54971],{"class":42,"line":5929},[40,54972,5854],{"class":50},[40,54974,54975],{"class":42,"line":5935},[40,54976,1413],{"emptyLinePlaceholder":1412},[40,54978,54979,54981,54984,54987],{"class":42,"line":5941},[40,54980,54763],{"class":596},[40,54982,54983],{"class":46}," div",[40,54985,54986],{"class":46}," span",[40,54988,18894],{"class":50},[40,54990,54991],{"class":42,"line":5946},[40,54992,1413],{"emptyLinePlaceholder":1412},[40,54994,54995,54998,55000,55003,55005],{"class":42,"line":11270},[40,54996,54997],{"class":63},"            margin-top",[40,54999,60],{"class":50},[40,55001,55002],{"class":63},"-20",[40,55004,54790],{"class":1283},[40,55006,4637],{"class":50},[40,55008,55009],{"class":42,"line":11294},[40,55010,5854],{"class":50},[40,55012,55013],{"class":42,"line":11299},[40,55014,1413],{"emptyLinePlaceholder":1412},[40,55016,55017,55019,55021,55024],{"class":42,"line":11305},[40,55018,54763],{"class":596},[40,55020,54983],{"class":46},[40,55022,55023],{"class":46}," h4",[40,55025,18894],{"class":50},[40,55027,55028,55031,55033,55036,55038],{"class":42,"line":11332},[40,55029,55030],{"class":63},"            margin-bottom",[40,55032,60],{"class":50},[40,55034,55035],{"class":63},"-35",[40,55037,54790],{"class":1283},[40,55039,4637],{"class":50},[40,55041,55042,55044,55046,55048,55050],{"class":42,"line":11337},[40,55043,54782],{"class":63},[40,55045,60],{"class":50},[40,55047,3836],{"class":63},[40,55049,54790],{"class":1283},[40,55051,4637],{"class":50},[40,55053,55054,55057,55059,55062,55064],{"class":42,"line":11343},[40,55055,55056],{"class":63},"            margin-left",[40,55058,60],{"class":50},[40,55060,55061],{"class":63},"-10",[40,55063,54790],{"class":1283},[40,55065,4637],{"class":50},[40,55067,55068],{"class":42,"line":11355},[40,55069,5854],{"class":50},[40,55071,55072,55075,55077],{"class":42,"line":11367},[40,55073,55074],{"class":50},"    \u003C\u002F",[40,55076,3384],{"class":46},[40,55078,54606],{"class":50},[40,55080,55081,55084,55086],{"class":42,"line":11379},[40,55082,55083],{"class":50},"\u003C\u002F",[40,55085,54633],{"class":46},[40,55087,54606],{"class":50},[40,55089,55090],{"class":42,"line":13038},[40,55091,1413],{"emptyLinePlaceholder":1412},[40,55093,55094,55096,55099],{"class":42,"line":13063},[40,55095,4387],{"class":50},[40,55097,55098],{"class":46},"body",[40,55100,54606],{"class":50},[40,55102,55103],{"class":42,"line":13086},[40,55104,1413],{"emptyLinePlaceholder":1412},[40,55106,55107,55109,55112],{"class":42,"line":13110},[40,55108,54640],{"class":50},[40,55110,55111],{"class":46},"script",[40,55113,54606],{"class":50},[40,55115,55116],{"class":42,"line":13115},[40,55117,55118],{"class":997},"        \u002F\u002F 1. 四次弹框效果\n",[40,55120,55121],{"class":42,"line":13120},[40,55122,55123],{"class":997},"        \u002F\u002F 声明一个新的数组\n",[40,55125,55126,55129,55132,55134],{"class":42,"line":13125},[40,55127,55128],{"class":1283},"        let",[40,55130,55131],{"class":50}," arr ",[40,55133,1284],{"class":1283},[40,55135,55136],{"class":50}," []\n",[40,55138,55139,55141,55143,55146,55148,55150,55152,55154,55156,55159,55161,55163],{"class":42,"line":13134},[40,55140,6727],{"class":1283},[40,55142,4993],{"class":50},[40,55144,55145],{"class":1283},"let",[40,55147,12760],{"class":50},[40,55149,1284],{"class":1283},[40,55151,28431],{"class":63},[40,55153,12767],{"class":50},[40,55155,4930],{"class":1283},[40,55157,55158],{"class":63}," 4",[40,55160,6538],{"class":50},[40,55162,5618],{"class":1283},[40,55164,15764],{"class":50},[40,55166,55167],{"class":42,"line":13139},[40,55168,55169],{"class":997},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[40,55171,55172],{"class":42,"line":13145},[40,55173,55174],{"class":997},"            \u002F\u002F arr.push(num)\n",[40,55176,55177,55180,55183,55185,55188,55190,55193,55195,55198],{"class":42,"line":13166},[40,55178,55179],{"class":50},"            arr.",[40,55181,55182],{"class":596},"push",[40,55184,3488],{"class":50},[40,55186,55187],{"class":596},"prompt",[40,55189,3488],{"class":50},[40,55191,55192],{"class":94},"`请输入第${",[40,55194,3920],{"class":50},[40,55196,55197],{"class":94},"}季度的数据:`",[40,55199,33797],{"class":50},[40,55201,55202],{"class":42,"line":13172},[40,55203,55204],{"class":997},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[40,55206,55207],{"class":42,"line":13186},[40,55208,5854],{"class":50},[40,55210,55211],{"class":42,"line":13192},[40,55212,55213],{"class":997},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[40,55215,55216],{"class":42,"line":13219},[40,55217,55218],{"class":997},"        \u002F\u002F 盒子开头\n",[40,55220,55221,55224,55227,55229,55232],{"class":42,"line":13228},[40,55222,55223],{"class":50},"        document.",[40,55225,55226],{"class":596},"write",[40,55228,3488],{"class":50},[40,55230,55231],{"class":94},"` \u003Cdiv class=\"box\">`",[40,55233,1811],{"class":50},[40,55235,55236],{"class":42,"line":13234},[40,55237,1413],{"emptyLinePlaceholder":1412},[40,55239,55240],{"class":42,"line":13242},[40,55241,55242],{"class":997},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[40,55244,55245,55247,55249,55251,55253,55255,55257,55259,55261,55264,55267,55269,55271],{"class":42,"line":13247},[40,55246,6727],{"class":1283},[40,55248,4993],{"class":50},[40,55250,55145],{"class":1283},[40,55252,12760],{"class":50},[40,55254,1284],{"class":1283},[40,55256,7416],{"class":63},[40,55258,12767],{"class":50},[40,55260,4387],{"class":1283},[40,55262,55263],{"class":50}," arr.",[40,55265,55266],{"class":63},"length",[40,55268,6538],{"class":50},[40,55270,5618],{"class":1283},[40,55272,15764],{"class":50},[40,55274,55275,55278,55280,55282],{"class":42,"line":19926},[40,55276,55277],{"class":50},"            document.",[40,55279,55226],{"class":596},[40,55281,3488],{"class":50},[40,55283,55284],{"class":94},"`\n",[40,55286,55287,55290,55292,55294,55296,55298],{"class":42,"line":19932},[40,55288,55289],{"class":94},"              \u003Cdiv style=\"height: ${",[40,55291,7203],{"class":50},[40,55293,4367],{"class":94},[40,55295,3920],{"class":50},[40,55297,4417],{"class":94},[40,55299,55300],{"class":94},"}px;\">\n",[40,55302,55303,55306,55308,55310,55312,55314],{"class":42,"line":19955},[40,55304,55305],{"class":94},"                \u003Cspan>${",[40,55307,7203],{"class":50},[40,55309,4367],{"class":94},[40,55311,3920],{"class":50},[40,55313,4417],{"class":94},[40,55315,55316],{"class":94},"}\u003C\u002Fspan>\n",[40,55318,55319,55322,55324,55326,55328],{"class":42,"line":19961},[40,55320,55321],{"class":94},"                \u003Ch4>第${",[40,55323,3920],{"class":50},[40,55325,48866],{"class":1283},[40,55327,28431],{"class":63},[40,55329,55330],{"class":94},"}季度\u003C\u002Fh4>\n",[40,55332,55333],{"class":42,"line":19984},[40,55334,55335],{"class":94},"              \u003C\u002Fdiv>          \n",[40,55337,55338,55341],{"class":42,"line":19998},[40,55339,55340],{"class":94},"            `",[40,55342,1811],{"class":50},[40,55344,55345],{"class":42,"line":20018},[40,55346,5854],{"class":50},[40,55348,55349],{"class":42,"line":20024},[40,55350,55351],{"class":997},"        \u002F\u002F 盒子结尾\n",[40,55353,55354,55356,55358,55360,55363],{"class":42,"line":20035},[40,55355,55223],{"class":50},[40,55357,55226],{"class":596},[40,55359,3488],{"class":50},[40,55361,55362],{"class":94},"` \u003C\u002Fdiv>`",[40,55364,1811],{"class":50},[40,55366,55367,55369,55371],{"class":42,"line":20058},[40,55368,55074],{"class":50},[40,55370,55111],{"class":46},[40,55372,54606],{"class":50},[40,55374,55375,55377,55379],{"class":42,"line":20080},[40,55376,55083],{"class":50},[40,55378,55098],{"class":46},[40,55380,54606],{"class":50},[40,55382,55383],{"class":42,"line":20085},[40,55384,1413],{"emptyLinePlaceholder":1412},[40,55386,55387,55389,55391],{"class":42,"line":20091},[40,55388,55083],{"class":50},[40,55390,53935],{"class":46},[40,55392,54606],{"class":50},[402,55394,55396],{"id":55395},"_284-冒泡排序","2.8.4 冒泡排序",[31,55398,55400],{"className":53933,"code":55399,"language":53935,"meta":36,"style":36},"\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",[26,55401,55402,55412,55426,55430,55438,55453,55473,55485,55493,55497,55505,55513,55545,55578,55615,55620,55639,55644,55657,55672,55688,55692,55697,55701,55711,55720,55728,55732],{"__ignoreMap":36},[40,55403,55404,55406,55408,55410],{"class":42,"line":43},[40,55405,54597],{"class":50},[40,55407,54600],{"class":46},[40,55409,54603],{"class":596},[40,55411,54606],{"class":50},[40,55413,55414,55416,55418,55420,55422,55424],{"class":42,"line":54},[40,55415,4387],{"class":50},[40,55417,53935],{"class":46},[40,55419,54615],{"class":596},[40,55421,1284],{"class":50},[40,55423,54620],{"class":94},[40,55425,54606],{"class":50},[40,55427,55428],{"class":42,"line":70},[40,55429,1413],{"emptyLinePlaceholder":1412},[40,55431,55432,55434,55436],{"class":42,"line":78},[40,55433,4387],{"class":50},[40,55435,54633],{"class":46},[40,55437,54606],{"class":50},[40,55439,55440,55443,55445,55447,55449,55451],{"class":42,"line":86},[40,55441,55442],{"class":50},"  \u003C",[40,55444,54643],{"class":46},[40,55446,54646],{"class":596},[40,55448,1284],{"class":50},[40,55450,54651],{"class":94},[40,55452,54606],{"class":50},[40,55454,55455,55457,55459,55461,55463,55465,55467,55469,55471],{"class":42,"line":100},[40,55456,55442],{"class":50},[40,55458,54643],{"class":46},[40,55460,18242],{"class":596},[40,55462,1284],{"class":50},[40,55464,54690],{"class":94},[40,55466,54670],{"class":596},[40,55468,1284],{"class":50},[40,55470,54697],{"class":94},[40,55472,54606],{"class":50},[40,55474,55475,55477,55479,55481,55483],{"class":42,"line":108},[40,55476,55442],{"class":50},[40,55478,54706],{"class":46},[40,55480,54709],{"class":50},[40,55482,54706],{"class":46},[40,55484,54606],{"class":50},[40,55486,55487,55489,55491],{"class":42,"line":121},[40,55488,55083],{"class":50},[40,55490,54633],{"class":46},[40,55492,54606],{"class":50},[40,55494,55495],{"class":42,"line":134},[40,55496,1413],{"emptyLinePlaceholder":1412},[40,55498,55499,55501,55503],{"class":42,"line":146},[40,55500,4387],{"class":50},[40,55502,55098],{"class":46},[40,55504,54606],{"class":50},[40,55506,55507,55509,55511],{"class":42,"line":154},[40,55508,55442],{"class":50},[40,55510,55111],{"class":46},[40,55512,54606],{"class":50},[40,55514,55515,55518,55520,55522,55525,55527,55529,55531,55533,55535,55537,55539,55541,55543],{"class":42,"line":162},[40,55516,55517],{"class":1283},"    let",[40,55519,55131],{"class":50},[40,55521,1284],{"class":1283},[40,55523,55524],{"class":50}," [",[40,55526,3799],{"class":63},[40,55528,15757],{"class":50},[40,55530,3773],{"class":63},[40,55532,15757],{"class":50},[40,55534,3555],{"class":63},[40,55536,15757],{"class":50},[40,55538,64],{"class":63},[40,55540,15757],{"class":50},[40,55542,3698],{"class":63},[40,55544,36546],{"class":50},[40,55546,55547,55549,55551,55553,55555,55557,55559,55561,55563,55565,55567,55570,55572,55574,55576],{"class":42,"line":170},[40,55548,6525],{"class":1283},[40,55550,4993],{"class":50},[40,55552,55145],{"class":1283},[40,55554,12760],{"class":50},[40,55556,1284],{"class":1283},[40,55558,7416],{"class":63},[40,55560,12767],{"class":50},[40,55562,4387],{"class":1283},[40,55564,55263],{"class":50},[40,55566,55266],{"class":63},[40,55568,55569],{"class":1283}," -",[40,55571,28431],{"class":63},[40,55573,6538],{"class":50},[40,55575,5618],{"class":1283},[40,55577,15764],{"class":50},[40,55579,55580,55583,55585,55587,55589,55591,55593,55595,55597,55599,55601,55603,55605,55607,55609,55611,55613],{"class":42,"line":183},[40,55581,55582],{"class":1283},"      for",[40,55584,4993],{"class":50},[40,55586,55145],{"class":1283},[40,55588,12822],{"class":50},[40,55590,1284],{"class":1283},[40,55592,7416],{"class":63},[40,55594,12829],{"class":50},[40,55596,4387],{"class":1283},[40,55598,55263],{"class":50},[40,55600,55266],{"class":63},[40,55602,55569],{"class":1283},[40,55604,12760],{"class":50},[40,55606,4011],{"class":1283},[40,55608,28431],{"class":63},[40,55610,12836],{"class":50},[40,55612,5618],{"class":1283},[40,55614,15764],{"class":50},[40,55616,55617],{"class":42,"line":196},[40,55618,55619],{"class":997},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[40,55621,55622,55624,55627,55629,55632,55634,55636],{"class":42,"line":204},[40,55623,5822],{"class":1283},[40,55625,55626],{"class":50}," (arr[j] ",[40,55628,4437],{"class":1283},[40,55630,55631],{"class":50}," arr[j ",[40,55633,3960],{"class":1283},[40,55635,28431],{"class":63},[40,55637,55638],{"class":50},"]) {\n",[40,55640,55641],{"class":42,"line":217},[40,55642,55643],{"class":997},"          \u002F\u002F 交换两个变量\n",[40,55645,55646,55649,55652,55654],{"class":42,"line":230},[40,55647,55648],{"class":1283},"          let",[40,55650,55651],{"class":50}," tmp ",[40,55653,1284],{"class":1283},[40,55655,55656],{"class":50}," arr[j]\n",[40,55658,55659,55662,55664,55666,55668,55670],{"class":42,"line":238},[40,55660,55661],{"class":50},"          arr[j] ",[40,55663,1284],{"class":1283},[40,55665,55631],{"class":50},[40,55667,3960],{"class":1283},[40,55669,28431],{"class":63},[40,55671,36546],{"class":50},[40,55673,55674,55677,55679,55681,55683,55685],{"class":42,"line":251},[40,55675,55676],{"class":50},"          arr[j ",[40,55678,3960],{"class":1283},[40,55680,28431],{"class":63},[40,55682,7766],{"class":50},[40,55684,1284],{"class":1283},[40,55686,55687],{"class":50}," tmp\n",[40,55689,55690],{"class":42,"line":264},[40,55691,5854],{"class":50},[40,55693,55694],{"class":42,"line":277},[40,55695,55696],{"class":50},"      }\n",[40,55698,55699],{"class":42,"line":290},[40,55700,5513],{"class":50},[40,55702,55703,55706,55708],{"class":42,"line":298},[40,55704,55705],{"class":50},"    document.",[40,55707,55226],{"class":596},[40,55709,55710],{"class":50},"(arr)\n",[40,55712,55713,55716,55718],{"class":42,"line":310},[40,55714,55715],{"class":50},"  \u003C\u002F",[40,55717,55111],{"class":46},[40,55719,54606],{"class":50},[40,55721,55722,55724,55726],{"class":42,"line":5086},[40,55723,55083],{"class":50},[40,55725,55098],{"class":46},[40,55727,54606],{"class":50},[40,55729,55730],{"class":42,"line":5091},[40,55731,1413],{"emptyLinePlaceholder":1412},[40,55733,55734,55736,55738],{"class":42,"line":5105},[40,55735,55083],{"class":50},[40,55737,53935],{"class":46},[40,55739,54606],{"class":50},[19,55741,55742],{},[438,55743],{"alt":36,"src":55744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,55746,55747],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,55749,55750],{},"let arr = [4, 2, 5, 1, 3]",[19,55752,55753],{},"\u002F\u002F 1.升序排列写法",[19,55755,55756],{},"arr.sort(function (a, b) {",[19,55758,55759],{},"return a - b",[19,55761,55762],{},"})",[19,55764,55765],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,55767,55768],{},"\u002F\u002F 降序排列写法",[19,55770,55756],{},[19,55772,55773],{},"return b - a",[19,55775,55762],{},[19,55777,55778],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,55780,55782],{"id":55781},"_29-函数","2.9 函数",[19,55784,55785],{},[438,55786],{"alt":36,"src":55787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,55789,55790],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,55792,55793],{},"函数的声明用function",[19,55795,55796],{},"函数里边可以嵌套函数",[402,55798,55800],{"id":55799},"_291-函数传参","2.9.1 函数传参",[19,55802,55803],{},[438,55804],{"alt":36,"src":55805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,55807,55808],{},[438,55809],{"alt":36,"src":55810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1338,55812,55813,55816,55819,55822,55825,55828],{},[495,55814,55815],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[495,55817,55818],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[495,55820,55821],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[495,55823,55824],{},"开发中尽量保持形参和实参个数一致",[495,55826,55827],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[495,55829,55830],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,55832,55833],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[402,55835,55837],{"id":55836},"_292-函数的返回值","2.9.2 函数的返回值",[19,55839,55840],{},[438,55841],{"alt":36,"src":55842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,55844,55845],{},[438,55846],{"alt":36,"src":55847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1338,55849,55850,55853,55856,55859,55862],{},[495,55851,55852],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[495,55854,55855],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[495,55857,55858],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[495,55860,55861],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[495,55863,55864],{},"断点调试:进入函数内部看执行过程F11",[402,55866,55868],{"id":55867},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[31,55870,55872],{"className":53933,"code":55871,"language":53935,"meta":36,"style":36},"    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",[26,55873,55874,55879,55884,55888,55893],{"__ignoreMap":36},[40,55875,55876],{"class":42,"line":43},[40,55877,55878],{"class":50},"    function fn(a, b) {\n",[40,55880,55881],{"class":42,"line":54},[40,55882,55883],{"class":50},"      console.log(a + b);\n",[40,55885,55886],{"class":42,"line":70},[40,55887,5513],{"class":50},[40,55889,55890],{"class":42,"line":78},[40,55891,55892],{"class":50},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[40,55894,55895],{"class":42,"line":86},[40,55896,55897],{"class":50},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[402,55899,55901],{"id":55900},"_294-作用域","2.9.4 作用域",[1338,55903,55904,55910,55915,55918,55921],{},[495,55905,55906,55907],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[409,55908,55909],{},"作用域",[495,55911,55912],{},[409,55913,55914],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[495,55916,55917],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[495,55919,55920],{},"函数内部可以直接所使用全局变量",[495,55922,55923],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,55925,17955],{},[31,55927,55929],{"className":53933,"code":55928,"language":53935,"meta":36,"style":36},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[26,55930,55931,55936,55941,55945,55950,55955,55960],{"__ignoreMap":36},[40,55932,55933],{"class":42,"line":43},[40,55934,55935],{"class":50},"    function fun() {\n",[40,55937,55938],{"class":42,"line":54},[40,55939,55940],{"class":50},"      num = 10\n",[40,55942,55943],{"class":42,"line":70},[40,55944,5513],{"class":50},[40,55946,55947],{"class":42,"line":78},[40,55948,55949],{"class":50},"    fun()\n",[40,55951,55952],{"class":42,"line":86},[40,55953,55954],{"class":50},"    console.log(num)\n",[40,55956,55957],{"class":42,"line":100},[40,55958,55959],{"class":50},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[40,55961,55962],{"class":42,"line":108},[40,55963,55964],{"class":50},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1338,55966,55967,55970],{},[495,55968,55969],{},"函数内部的形参可以看做是局部变量",[495,55971,55972],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,55974,55975,55976],{},"变量访问原则： ",[409,55977,55978],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[402,55980,55982],{"id":55981},"_295-匿名函数","2.9.5 匿名函数",[19,55984,55985],{},"函数可以分为具名函数和匿名函数",[19,55987,55988],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[492,55990,55991],{},[495,55992,55993],{},"函数表达式",[19,55995,55996],{},[438,55997],{"alt":36,"src":55998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,56000,56001],{},"里边也可以写参数",[19,56003,56004],{},"具名函数调用位置可以随意调整；",[19,56006,56007],{},"匿名函数函数表达式形式只能在声明后才可以使用",[492,56009,56010],{"start":54},[495,56011,56012],{},"立即执行函数",[19,56014,56015],{},[438,56016],{"alt":36,"src":56017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,56019,56020],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,56022,56023],{},"写法：两个小括号，然后在第一个小括号中写function",[19,56025,56026],{},"(function () {})();",[19,56028,56029],{},"不要落下最后的;",[19,56031,56032],{},"立即执行函数必须要加;",[19,56034,56035],{},"分号写前写后都没问题",[19,56037,56038],{},"写前：",[19,56040,56041],{},"(function() {})()",[19,56043,56044],{},";(function () {})();",[19,56046,56047],{},"写后:",[19,56049,56050],{},"(function() {})();",[19,56052,56026],{},[19,56054,56055],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,56057,56058],{},"还有一种写法：",[19,56060,56061],{},"(function(){}());",[19,56063,56064],{},"或者:",[19,56066,56067],{},"!function(){}();",[19,56069,56070],{},"立即执行函数有时候也是可以加名字的：",[19,56072,56073],{},"(function flexible(window,document) {}(window,document));",[19,56075,56076],{},"省一些调用方法",[402,56078,56080],{"id":56079},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,56082,56083],{},[438,56084],{"alt":36,"src":56085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,56087,56088],{},"这样就不用非得给x,y初始化了",[19,56090,56091],{},[438,56092],{"alt":36,"src":56093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,56095,56096],{},"代码执行时先看左边",[19,56098,56099],{},"例如：console.log(false && 3+5)",[19,56101,56102],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,56104,56105],{},"&&都是真时，就返回最后一个真值",[19,56107,56108],{},"console.log(11 && 22)",[19,56110,56111],{},"输出22",[19,56113,56114],{},"逻辑与：遇真则真",[19,56116,17955],{},[19,56118,56119],{},"let age=1",[19,56121,56122],{},"console.log(11 || age++)",[19,56124,56125],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,56127,56128],{},"console.log(11 || 22)",[19,56130,56131],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,56133,56134],{},"||如果都是假的话，就取最后一个假的值了",[402,56136,56138],{"id":56137},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,56140,56141],{},"显示转换：",[19,56143,56144,56147,56148],{},[409,56145,56146],{},"记忆","： ",[409,56149,56150],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,56152,56153],{},"空字符串为假，其他字符串全为真",[19,56155,56156],{},[438,56157],{"alt":36,"src":56158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,56160,56161],{},"隐式转换：",[19,56163,56164],{},[438,56165],{"alt":36,"src":56166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,56168,56169],{},"隐式转换:",[19,56171,56172],{},"null+3=3",[19,56174,56175],{},"undefined+3=NaN",[19,56177,56178],{},"null==undefined 输出true,他两个都当0看",[19,56180,56181],{},"null===undefined 输出false",[19,56183,56184],{},"undefined做任何操作都是NaN",[19,56186,56187],{},"NaN不等于NaN，NaN表示计算错误",[14,56189,56191],{"id":56190},"_210-对象","2.10 对象",[402,56193,56195],{"id":56194},"_2101-对象的介绍","2.10.1 对象的介绍",[19,56197,56198],{},"对象也是一种数据类型，里边的数据是无序的",[19,56200,56201],{},"对象由属性和方法组成",[19,56203,56204],{},[438,56205],{"alt":36,"src":56206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,56208,56209],{},[438,56210],{"alt":36,"src":56211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,56213,56214],{},[438,56215],{"alt":36,"src":56216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[402,56218,56220],{"id":56219},"_2102-对象属性","2.10.2 对象属性",[19,56222,56223],{},[438,56224],{"alt":36,"src":56225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[492,56227,56228],{},[495,56229,56230],{},"查询对象",[19,56232,56233],{},"对象名.属性 goods.uname",[19,56235,56236],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,56238,56239],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,56241,56242],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,56244,56245],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[492,56247,56248],{"start":54},[495,56249,56250],{},"重新赋值",[19,56252,56253],{},"对象名.属性=新值",[492,56255,56256],{"start":70},[495,56257,56258],{},"增加新数据",[19,56260,56253],{},[492,56262,56263],{"start":78},[495,56264,56265],{},"删除对象中的属性",[19,56267,56268],{},"delete 对象名.属性",[402,56270,56272],{"id":56271},"_2103-对象方法","2.10.3 对象方法",[19,56274,56275],{},[438,56276],{"alt":36,"src":56277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,56279,56280],{},"后边跟的是匿名函数",[19,56282,56283],{},"对象外面的叫函数；对象内部的叫方法",[19,56285,56286],{},[438,56287],{"alt":36,"src":56288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[402,56290,56292],{"id":56291},"_2104-遍历对象","2.10.4 遍历对象",[19,56294,56295],{},"理解为加括号的python字典遍历",[19,56297,56298],{},[438,56299],{"alt":36,"src":56300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,56302,56303],{},"k是字符串类型",[19,56305,56306],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[31,56308,56310],{"className":53933,"code":56309,"language":53935,"meta":36,"style":36},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[26,56311,56312,56317,56322,56327,56332],{"__ignoreMap":36},[40,56313,56314],{"class":42,"line":43},[40,56315,56316],{"class":50},"   let arr = [1, 2, 3]\n",[40,56318,56319],{"class":42,"line":54},[40,56320,56321],{"class":50},"    for (let k in arr) {\n",[40,56323,56324],{"class":42,"line":70},[40,56325,56326],{"class":50},"      console.log(k)\n",[40,56328,56329],{"class":42,"line":78},[40,56330,56331],{"class":50},"      console.log(arr[k])\n",[40,56333,56334],{"class":42,"line":86},[40,56335,5513],{"class":50},[19,56337,56338],{},[438,56339],{"alt":36,"src":56340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,56342,56343],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,56345,56346],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,56348,56349],{},"for in 得到的k是属性名",[55111,56351,56352],{},"\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,56354,56355],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[402,56357,56359],{"id":56358},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,56361,56362],{},"数组中放对象信息",[31,56364,56368],{"className":56365,"code":56366,"language":56367,"meta":36,"style":36},"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",[26,56369,56370,56378,56383,56388,56393,56398,56403,56408,56413,56418,56423,56428,56433,56437,56441],{"__ignoreMap":36},[40,56371,56372,56374,56376],{"class":42,"line":43},[40,56373,4387],{"class":50},[40,56375,55111],{"class":46},[40,56377,54606],{"class":50},[40,56379,56380],{"class":42,"line":54},[40,56381,56382],{"class":50},"    let students = [\n",[40,56384,56385],{"class":42,"line":70},[40,56386,56387],{"class":50},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[40,56389,56390],{"class":42,"line":78},[40,56391,56392],{"class":50},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[40,56394,56395],{"class":42,"line":86},[40,56396,56397],{"class":50},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[40,56399,56400],{"class":42,"line":100},[40,56401,56402],{"class":50},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[40,56404,56405],{"class":42,"line":108},[40,56406,56407],{"class":50},"    ]\n",[40,56409,56410],{"class":42,"line":121},[40,56411,56412],{"class":50},"    for (let i = 0; i \u003C students.length; i++) {\n",[40,56414,56415],{"class":42,"line":134},[40,56416,56417],{"class":50},"      for (let k in students[i]) {\n",[40,56419,56420],{"class":42,"line":146},[40,56421,56422],{"class":50},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[40,56424,56425],{"class":42,"line":154},[40,56426,56427],{"class":50},"        \u002F\u002F输出每个人的名字：\n",[40,56429,56430],{"class":42,"line":162},[40,56431,56432],{"class":50},"        \u002F\u002Fconsole.log(students[i].name)\n",[40,56434,56435],{"class":42,"line":170},[40,56436,55696],{"class":50},[40,56438,56439],{"class":42,"line":183},[40,56440,5513],{"class":50},[40,56442,56443,56445,56447],{"class":42,"line":196},[40,56444,55715],{"class":50},[40,56446,55111],{"class":46},[40,56448,54606],{"class":50},[402,56450,56452],{"id":56451},"_2106-内置对象","2.10.6 内置对象",[19,56454,56455],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[492,56457,56458],{},[495,56459,56460],{},"数学对象Math",[19,56462,56463],{},[438,56464],{"alt":36,"src":56465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,56467,56468],{},[2106,56469,56472],{"href":56470,"rel":56471},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[2110],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,56474,56475],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,56477,56478],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,56480,56481],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,56483,56484],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,56486,56487],{},"null属于对象数据类型",[492,56489,56490],{"start":54},[495,56491,56492],{},"生成任意范围随机数",[19,56494,56495],{},[438,56496],{"alt":36,"src":56497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,56499,56500],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,56502,56503],{},"乘以几就取不到几",[19,56505,56506],{},"取数组中的随机元素：",[19,56508,56509],{},"let arr = ['red', 'green', 'blue']",[19,56511,56512],{},"let random = Math.floor(Math.random() * arr.length)",[19,56514,56515],{},"console.log(arr[random])",[19,56517,56518],{},"这个函数得到的是全闭区间",[19,56520,56521],{},"function getRandom(N, M) {",[19,56523,56524],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,56526,4423],{},[19,56528,56529],{},"console.log(getRandom(4, 8))",[402,56531,56533],{"id":56532},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,56535,56536],{},[438,56537],{"alt":36,"src":56538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,56540,56541],{},[438,56542],{"alt":36,"src":56543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,56545,56546],{},[438,56547],{"alt":36,"src":56548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,56550,56551],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,56553,56554],{},[438,56555],{"alt":36,"src":56556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,56558,56559],{},[438,56560],{"alt":36,"src":56561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,56563,56564],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,56566,56567],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,56569,56570],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[3384,56572,56573],{},"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":36,"searchDepth":54,"depth":54,"links":56575},[56576,56584,56585,56586,56587,56588,56595,56599,56605,56614],{"id":53768,"depth":54,"text":53769,"children":56577},[56578,56579,56580,56581,56582,56583],{"id":53772,"depth":70,"text":53773},{"id":53789,"depth":70,"text":53790},{"id":53829,"depth":70,"text":53830},{"id":53841,"depth":70,"text":53842},{"id":53850,"depth":70,"text":53851},{"id":53898,"depth":70,"text":53899},{"id":53908,"depth":54,"text":53909},{"id":53996,"depth":54,"text":53997},{"id":54019,"depth":54,"text":54020},{"id":54031,"depth":54,"text":54032},{"id":54218,"depth":54,"text":54219,"children":56589},[56590,56591,56592,56593,56594],{"id":54222,"depth":70,"text":54223},{"id":54231,"depth":70,"text":54232},{"id":54259,"depth":70,"text":54260},{"id":54295,"depth":70,"text":54296},{"id":54320,"depth":70,"text":54321},{"id":54332,"depth":54,"text":54333,"children":56596},[56597,56598],{"id":54353,"depth":70,"text":54354},{"id":54447,"depth":70,"text":54448},{"id":54505,"depth":54,"text":54506,"children":56600},[56601,56602,56603,56604],{"id":54509,"depth":70,"text":54510},{"id":54533,"depth":70,"text":54534},{"id":54586,"depth":70,"text":54587},{"id":55395,"depth":70,"text":55396},{"id":55781,"depth":54,"text":55782,"children":56606},[56607,56608,56609,56610,56611,56612,56613],{"id":55799,"depth":70,"text":55800},{"id":55836,"depth":70,"text":55837},{"id":55867,"depth":70,"text":55868},{"id":55900,"depth":70,"text":55901},{"id":55981,"depth":70,"text":55982},{"id":56079,"depth":70,"text":56080},{"id":56137,"depth":70,"text":56138},{"id":56190,"depth":54,"text":56191,"children":56615},[56616,56617,56618,56619,56620,56621,56622],{"id":56194,"depth":70,"text":56195},{"id":56219,"depth":70,"text":56220},{"id":56271,"depth":70,"text":56272},{"id":56291,"depth":70,"text":56292},{"id":56358,"depth":70,"text":56359},{"id":56451,"depth":70,"text":56452},{"id":56532,"depth":70,"text":56533},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":53760,"description":3413},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":56629,"title":56630,"body":56631,"description":3413,"extension":3414,"meta":79968,"navigation":1412,"path":79969,"seo":79970,"stem":79971,"__hash__":79972},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":56632,"toc":79908},[56633,56636,56639,56642,56647,56650,56653,56656,56660,56664,56670,56675,56683,56690,56693,56697,56702,56707,56712,56715,56718,56729,56732,56736,56739,56742,56747,56752,56757,56760,56763,56855,56858,56863,56866,56871,56874,56877,56882,56885,56890,56894,56897,56911,56915,56920,56923,56926,56930,56935,56938,56942,56946,56951,56955,56960,56963,56966,56969,56972,56975,56978,56983,56988,57016,57019,57022,57025,57030,57033,57036,57039,57042,57046,57075,57079,57084,57089,57092,57095,57098,57103,57218,57223,57228,57389,57394,57397,57401,57406,57411,57414,57417,57420,57423,57426,57429,57432,57435,57438,57441,57444,57447,57450,57453,57455,57458,57461,57464,57469,57473,57870,57873,57879,57883,57888,59170,59175,59178,59181,59184,59189,60385,60389,60395,60400,60403,60408,60413,60417,60421,60426,60429,60434,60437,60440,60444,61352,61355,61359,61580,61583,61586,61589,61815,61818,62042,62045,62049,62054,62057,62060,62288,62291,62324,62327,62331,62336,62340,62343,62346,62349,62352,62355,62358,62361,62366,63646,63650,63653,64746,64750,64753,64756,64759,64762,64766,64769,64772,64774,64782,66263,66267,66270,66273,66276,66485,66488,66492,66496,66501,66506,66509,66512,66517,66521,66526,66529,66638,66642,66647,66652,66655,66658,66662,66667,66672,66677,66680,66683,66694,66697,66702,66707,66710,66713,66786,66790,66795,66798,66800,66811,66815,66820,68146,68149,68152,68155,68157,68160,68163,68166,68169,68172,68175,68178,68181,68184,68187,68190,68193,68195,68197,68200,68204,69298,69301,69304,69320,69334,69337,69342,69348,69353,69357,69361,69366,69370,69375,69817,69822,69825,69829,69834,69837,69840,69844,69849,69853,69858,69863,69867,69872,69877,69880,69885,69890,69894,69899,69904,70008,70011,70015,70020,70386,70389,70392,70395,70398,70401,70404,70407,70410,71706,71710,71715,71720,71723,71726,71729,71732,71734,71739,71744,71747,71751,71756,71761,71766,71769,71772,71775,71778,71781,71786,71789,71793,71798,71803,71807,71812,71815,71820,71823,71826,71829,71832,71835,71840,71843,71846,71849,71852,71856,71861,71864,71868,71873,71876,71879,71883,71912,71915,71919,71923,71928,71932,71937,71940,71943,71946,71949,71952,71955,71958,71961,71964,71967,71970,71973,71976,71979,71983,71988,71993,71996,72000,72004,72009,72012,72016,72019,72022,72027,72032,72037,72042,72047,72050,72053,72058,72063,72067,72072,72075,72080,72083,72086,72089,72092,72097,72100,72109,72113,72118,72121,72124,72128,72131,72136,72140,72143,72149,72155,72159,72185,72188,73747,73750,74246,74249,74254,74259,74264,74268,74273,74278,74283,74287,74292,74295,74298,74301,74304,74308,74311,74316,74319,74324,74328,74333,74336,74341,74346,74351,74354,74357,74362,74367,74370,74373,74377,74380,74385,74388,74393,74396,74401,74406,74411,74414,74419,74484,74487,74498,74502,74507,74679,74683,74688,74691,74694,74697,74701,74712,74716,74719,74724,74729,74732,74735,74738,74741,74744,74746,74749,74752,74755,74760,74763,74768,74771,74775,74778,74781,74795,74799,74802,74857,74862,74865,74868,74873,74876,74880,74885,75014,75018,75023,75028,75109,75114,75118,75121,75126,75131,75137,75140,75143,75146,75150,75155,75158,75169,75173,75190,78237,78241,78244,78247,78250,78271,78275,78278,78286,78289,78294,78297,78300,78305,78310,78314,78335,78339,78344,78347,78350,78353,78356,78360,78365,78368,78372,78377,78380,78385,78388,78393,78396,78401,79604,79608,79613,79616,79621,79905],[10,56634,56630],{"id":56635},"_3web-apis",[19,56637,56638],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,56640,56641],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,56643,56644],{},[438,56645],{"alt":36,"src":56646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,56648,56649],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,56651,56652],{},"建议数组和对象使用 const 来声明",[19,56654,56655],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,56657,56659],{"id":56658},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[402,56661,56663],{"id":56662},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,56665,56666,56669],{},[26,56667,56668],{},"document"," = HTML 文件解析后的对象化表示；",[19,56671,56672,56674],{},[26,56673,56668],{}," ≠ HTML 文件本身",[19,56676,56677,56682],{},[409,56678,56679],{},[26,56680,56681],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,56684,56685,56689],{},[409,56686,56687],{},[26,56688,56668],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,56691,56692],{},"document实际上为window.document的简写",[402,56694,56696],{"id":56695},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,56698,56699],{},[438,56700],{"alt":36,"src":56701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,56703,56704],{},[438,56705],{"alt":36,"src":56706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,56708,56709],{},[438,56710],{"alt":36,"src":56711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,56713,56714],{},"console.dir()",[19,56716,56717],{},"dir用来打印对象",[1338,56719,56720,56723,56726],{},[495,56721,56722],{},"任何一个标签，都是一个对象",[495,56724,56725],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[495,56727,56728],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,56730,56731],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[402,56733,56735],{"id":56734},"_312-获取dom对象","3.1.2 获取DoM对象",[19,56737,56738],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,56740,56741],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,56743,56744],{},[409,56745,56746],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[492,56748,56749],{},[495,56750,56751],{},"利用CSS选择器来获取标签元素",[19,56753,56754],{},[438,56755],{"alt":36,"src":56756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,56758,56759],{},"里边的选择器必须必须加引号！！！",[19,56761,56762],{},"只选择第一个元素",[31,56764,56766],{"className":56365,"code":56765,"language":56367,"meta":36,"style":36},"\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",[26,56767,56768,56776,56797,56816,56824,56829,56834,56839,56847],{"__ignoreMap":36},[40,56769,56770,56772,56774],{"class":42,"line":43},[40,56771,4387],{"class":50},[40,56773,55098],{"class":46},[40,56775,54606],{"class":50},[40,56777,56778,56780,56782,56785,56787,56790,56793,56795],{"class":42,"line":54},[40,56779,55442],{"class":50},[40,56781,54909],{"class":46},[40,56783,56784],{"class":596}," class",[40,56786,1284],{"class":50},[40,56788,56789],{"class":94},"\"box\"",[40,56791,56792],{"class":50},">123\u003C\u002F",[40,56794,54909],{"class":46},[40,56796,54606],{"class":50},[40,56798,56799,56801,56803,56805,56807,56809,56812,56814],{"class":42,"line":70},[40,56800,55442],{"class":50},[40,56802,54909],{"class":46},[40,56804,56784],{"class":596},[40,56806,1284],{"class":50},[40,56808,56789],{"class":94},[40,56810,56811],{"class":50},">456\u003C\u002F",[40,56813,54909],{"class":46},[40,56815,54606],{"class":50},[40,56817,56818,56820,56822],{"class":42,"line":78},[40,56819,55442],{"class":50},[40,56821,55111],{"class":46},[40,56823,54606],{"class":50},[40,56825,56826],{"class":42,"line":86},[40,56827,56828],{"class":50},"    \u002F\u002F 1.获取匹配的第一个元素\n",[40,56830,56831],{"class":42,"line":100},[40,56832,56833],{"class":50},"    const box = document.querySelector('div')\n",[40,56835,56836],{"class":42,"line":108},[40,56837,56838],{"class":50},"    console.dir(box)\n",[40,56840,56841,56843,56845],{"class":42,"line":121},[40,56842,55715],{"class":50},[40,56844,55111],{"class":46},[40,56846,54606],{"class":50},[40,56848,56849,56851,56853],{"class":42,"line":134},[40,56850,55083],{"class":50},[40,56852,55098],{"class":46},[40,56854,54606],{"class":50},[19,56856,56857],{},"只选123，不选456",[19,56859,56860],{},[438,56861],{"alt":36,"src":56862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,56864,56865],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,56867,56868],{},[438,56869],{"alt":36,"src":56870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,56872,56873],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,56875,56876],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[492,56878,56879],{"start":54},[495,56880,56881],{},"其他方法来获取标签元素",[19,56883,56884],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,56886,56887],{},[438,56888],{"alt":36,"src":56889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[402,56891,56893],{"id":56892},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,56895,56896],{},"设置修改DOM元素内容有两种方式：",[1338,56898,56899,56902,56905,56908],{},[495,56900,56901],{},"元素.innerText=''",[495,56903,56904],{},"元素.innerHTML=''",[495,56906,56907],{},"不写字符串输出数字也是可以的",[495,56909,56910],{},"元素.innerHtml=1",[2423,56912,56914],{"id":56913},"_3131-innertext","3.1.3.1 innerText",[19,56916,56917],{},[438,56918],{"alt":36,"src":56919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,56921,56922],{},"思路：实现了修改盒子中的内容！",[19,56924,56925],{},"它只显示纯文本，不解析标签",[2423,56927,56929],{"id":56928},"_3132-innerhtml","3.1.3.2 innerHTML",[19,56931,56932],{},[438,56933],{"alt":36,"src":56934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,56936,56937],{},"相比于innerText，他的强大之处在于可以解析标签",[402,56939,56941],{"id":56940},"_314-操作元素属性","3.1.4 操作元素属性",[2423,56943,56945],{"id":56944},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,56947,56948],{},[438,56949],{"alt":36,"src":56950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[2423,56952,56954],{"id":56953},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,56956,56957],{},[438,56958],{"alt":36,"src":56959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,56961,56962],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,56964,56965],{},"div.style.backgroundColor = 'hotpink'",[19,56967,56968],{},"如果按照css的写法，-表示减，就会出错",[19,56970,56971],{},"body元素不需要再获取，直接用就行！！！！！！",[19,56973,56974],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,56976,56977],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,56979,56980],{},[438,56981],{"alt":36,"src":56982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,56984,56985],{},[438,56986],{"alt":36,"src":56987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[492,56989,56990,56993,56996,56999,57002,57005],{},[495,56991,56992],{},"className这个方式就是修改很多样式的时候来使用的！",[495,56994,56995],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[495,56997,56998],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[495,57000,57001],{},"className为属性名，如果还用class的话就导致与关键字冲突",[495,57003,57004],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[495,57006,57007,57008,57013],{},"解析标签的时候就变为了",[54909,57009],{"className":57010},[57011,57012],"nav","box",[57014,57015],"br",{},[19,57017,57018],{},"例子：",[54909,57020],{"className":57021},[57011],[55111,57023,57024],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,57026,57027],{},[438,57028],{"alt":36,"src":57029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,57031,57032],{},"追加和删除类名用classList",[19,57034,57035],{},"常用于类似于开关的操作",[19,57037,57038],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,57040,57041],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[2423,57043,57045],{"id":57044},"_3143-牢记点","3.1.4.3 牢记点",[492,57047,57048,57051,57054,57057,57060,57063,57066,57069,57072],{},[495,57049,57050],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[495,57052,57053],{},"使用style属性操作css时不要忘记引号",[495,57055,57056],{},"使用className或者classList时也不要忘记引号",[495,57058,57059],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[495,57061,57062],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[495,57064,57065],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[495,57067,57068],{},"若： let arr=['1','2',3] arr[0]=1",[495,57070,57071],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[495,57073,57074],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[402,57076,57078],{"id":57077},"_315-操作表单元素","3.1.5 操作表单元素",[492,57080,57081],{},[495,57082,57083],{},"天生的属性",[19,57085,57086],{},[438,57087],{"alt":36,"src":57088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,57090,57091],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,57093,57094],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,57096,57097],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,57099,57100],{},[438,57101],{"alt":36,"src":57102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[31,57104,57106],{"className":53933,"code":57105,"language":53935,"meta":36,"style":36},"在复选框中如果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",[26,57107,57108,57113,57145,57150,57155,57160,57165,57169,57174,57179,57196,57208,57213],{"__ignoreMap":36},[40,57109,57110],{"class":42,"line":43},[40,57111,57112],{"class":50},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[40,57114,57115,57117,57120,57123,57125,57128,57130,57132,57134,57136,57138,57140,57143],{"class":42,"line":54},[40,57116,4387],{"class":50},[40,57118,57119],{"class":46},"input",[40,57121,57122],{"class":596}," type",[40,57124,1284],{"class":50},[40,57126,57127],{"class":94},"\"checkbox\"",[40,57129,18242],{"class":596},[40,57131,1284],{"class":50},[40,57133,285],{"class":94},[40,57135,18281],{"class":596},[40,57137,1284],{"class":50},[40,57139,285],{"class":94},[40,57141,57142],{"class":596}," checked",[40,57144,54606],{"class":50},[40,57146,57147],{"class":42,"line":70},[40,57148,57149],{"class":50},"不选的话：\n",[40,57151,57152],{"class":42,"line":78},[40,57153,57154],{"class":50},"const input = document.querySelector('input')\n",[40,57156,57157],{"class":42,"line":86},[40,57158,57159],{"class":50},"input.checked=false\n",[40,57161,57162],{"class":42,"line":100},[40,57163,57164],{"class":50},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[40,57166,57167],{"class":42,"line":108},[40,57168,1413],{"emptyLinePlaceholder":1412},[40,57170,57171],{"class":42,"line":121},[40,57172,57173],{"class":50},"禁用按钮：\n",[40,57175,57176],{"class":42,"line":134},[40,57177,57178],{"class":50},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[40,57180,57181,57183,57186,57189,57192,57194],{"class":42,"line":146},[40,57182,4387],{"class":50},[40,57184,57185],{"class":46},"button",[40,57187,57188],{"class":596}," disabled",[40,57190,57191],{"class":50},">点击\u003C\u002F",[40,57193,57185],{"class":46},[40,57195,54606],{"class":50},[40,57197,57198,57200,57202,57204,57206],{"class":42,"line":154},[40,57199,4387],{"class":50},[40,57201,57185],{"class":46},[40,57203,57191],{"class":50},[40,57205,57185],{"class":46},[40,57207,54606],{"class":50},[40,57209,57210],{"class":42,"line":162},[40,57211,57212],{"class":50},"const bt = document.querySelector('button')\n",[40,57214,57215],{"class":42,"line":170},[40,57216,57217],{"class":50},"bt.disabled = false\n",[492,57219,57220],{"start":54},[495,57221,57222],{},"自定义属性",[19,57224,57225],{},[438,57226],{"alt":36,"src":57227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[31,57229,57231],{"className":56365,"code":57230,"language":56367,"meta":36,"style":36},"\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",[26,57232,57233,57241,57269,57288,57307,57326,57345,57353,57358,57363,57368,57373,57381],{"__ignoreMap":36},[40,57234,57235,57237,57239],{"class":42,"line":43},[40,57236,4387],{"class":50},[40,57238,55098],{"class":46},[40,57240,54606],{"class":50},[40,57242,57243,57245,57247,57250,57252,57254,57257,57259,57262,57265,57267],{"class":42,"line":54},[40,57244,55442],{"class":50},[40,57246,54909],{"class":46},[40,57248,57249],{"class":596}," data-id",[40,57251,1284],{"class":50},[40,57253,7002],{"class":94},[40,57255,57256],{"class":596}," data-spm",[40,57258,1284],{"class":50},[40,57260,57261],{"class":94},"\"我不知道\"",[40,57263,57264],{"class":50},">1\u003C\u002F",[40,57266,54909],{"class":46},[40,57268,54606],{"class":50},[40,57270,57271,57273,57275,57277,57279,57281,57284,57286],{"class":42,"line":70},[40,57272,55442],{"class":50},[40,57274,54909],{"class":46},[40,57276,57249],{"class":596},[40,57278,1284],{"class":50},[40,57280,7025],{"class":94},[40,57282,57283],{"class":50},">2\u003C\u002F",[40,57285,54909],{"class":46},[40,57287,54606],{"class":50},[40,57289,57290,57292,57294,57296,57298,57300,57303,57305],{"class":42,"line":78},[40,57291,55442],{"class":50},[40,57293,54909],{"class":46},[40,57295,57249],{"class":596},[40,57297,1284],{"class":50},[40,57299,7038],{"class":94},[40,57301,57302],{"class":50},">3\u003C\u002F",[40,57304,54909],{"class":46},[40,57306,54606],{"class":50},[40,57308,57309,57311,57313,57315,57317,57319,57322,57324],{"class":42,"line":86},[40,57310,55442],{"class":50},[40,57312,54909],{"class":46},[40,57314,57249],{"class":596},[40,57316,1284],{"class":50},[40,57318,7051],{"class":94},[40,57320,57321],{"class":50},">4\u003C\u002F",[40,57323,54909],{"class":46},[40,57325,54606],{"class":50},[40,57327,57328,57330,57332,57334,57336,57338,57341,57343],{"class":42,"line":100},[40,57329,55442],{"class":50},[40,57331,54909],{"class":46},[40,57333,57249],{"class":596},[40,57335,1284],{"class":50},[40,57337,7071],{"class":94},[40,57339,57340],{"class":50},">5\u003C\u002F",[40,57342,54909],{"class":46},[40,57344,54606],{"class":50},[40,57346,57347,57349,57351],{"class":42,"line":108},[40,57348,55442],{"class":50},[40,57350,55111],{"class":46},[40,57352,54606],{"class":50},[40,57354,57355],{"class":42,"line":121},[40,57356,57357],{"class":50},"    const one = document.querySelector('div')\n",[40,57359,57360],{"class":42,"line":134},[40,57361,57362],{"class":50},"    console.log(one.dataset)\n",[40,57364,57365],{"class":42,"line":146},[40,57366,57367],{"class":50},"    console.log(one.dataset.id)\n",[40,57369,57370],{"class":42,"line":154},[40,57371,57372],{"class":50},"    console.log(one.dataset.spm)\n",[40,57374,57375,57377,57379],{"class":42,"line":162},[40,57376,55715],{"class":50},[40,57378,55111],{"class":46},[40,57380,54606],{"class":50},[40,57382,57383,57385,57387],{"class":42,"line":170},[40,57384,55083],{"class":50},[40,57386,55098],{"class":46},[40,57388,54606],{"class":50},[19,57390,57391],{},[438,57392],{"alt":36,"src":57393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,57395,57396],{},"document.querySelector选择的是第一个对象（元素）",[402,57398,57400],{"id":57399},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,57402,57403],{},[438,57404],{"alt":36,"src":57405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,57407,57408],{},[438,57409],{"alt":36,"src":57410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,57412,57413],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[55111,57415,57416],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,57418,57419],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[55111,57421,57422],{},"\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,57424,57425],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,57427,57428],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,57430,57431],{},"单位为毫秒！！！",[19,57433,57434],{},"可以搭配匿名函数来用！！！",[19,57436,57437],{},"setInterval(function () {",[19,57439,57440],{},"alert('两秒执行一次')",[19,57442,57443],{},"}, 2000)",[19,57445,57446],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,57448,57449],{},"function fn() {",[19,57451,57452],{},"document.write(1)",[19,57454,4423],{},[19,57456,57457],{},"setInterval(fn, 1000)",[19,57459,57460],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,57462,57463],{},"setInterval('fn()', 1000)",[19,57465,57466],{},[438,57467],{"alt":36,"src":57468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[2423,57470,57472],{"id":57471},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[31,57474,57476],{"className":53933,"code":57475,"language":53935,"meta":36,"style":36},"\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",[26,57477,57478,57488,57502,57506,57514,57528,57548,57560,57568,57572,57580,57617,57622,57627,57632,57640,57648,57670,57678,57683,57705,57710,57715,57726,57731,57751,57759,57774,57789,57800,57805,57815,57825,57829,57838,57842,57850,57858,57862],{"__ignoreMap":36},[40,57479,57480,57482,57484,57486],{"class":42,"line":43},[40,57481,54597],{"class":50},[40,57483,54600],{"class":46},[40,57485,54603],{"class":596},[40,57487,54606],{"class":50},[40,57489,57490,57492,57494,57496,57498,57500],{"class":42,"line":54},[40,57491,4387],{"class":50},[40,57493,53935],{"class":46},[40,57495,54615],{"class":596},[40,57497,1284],{"class":50},[40,57499,54620],{"class":94},[40,57501,54606],{"class":50},[40,57503,57504],{"class":42,"line":70},[40,57505,1413],{"emptyLinePlaceholder":1412},[40,57507,57508,57510,57512],{"class":42,"line":78},[40,57509,4387],{"class":50},[40,57511,54633],{"class":46},[40,57513,54606],{"class":50},[40,57515,57516,57518,57520,57522,57524,57526],{"class":42,"line":86},[40,57517,55442],{"class":50},[40,57519,54643],{"class":46},[40,57521,54646],{"class":596},[40,57523,1284],{"class":50},[40,57525,54651],{"class":94},[40,57527,54606],{"class":50},[40,57529,57530,57532,57534,57536,57538,57540,57542,57544,57546],{"class":42,"line":100},[40,57531,55442],{"class":50},[40,57533,54643],{"class":46},[40,57535,18242],{"class":596},[40,57537,1284],{"class":50},[40,57539,54690],{"class":94},[40,57541,54670],{"class":596},[40,57543,1284],{"class":50},[40,57545,54697],{"class":94},[40,57547,54606],{"class":50},[40,57549,57550,57552,57554,57556,57558],{"class":42,"line":108},[40,57551,55442],{"class":50},[40,57553,54706],{"class":46},[40,57555,54709],{"class":50},[40,57557,54706],{"class":46},[40,57559,54606],{"class":50},[40,57561,57562,57564,57566],{"class":42,"line":121},[40,57563,55083],{"class":50},[40,57565,54633],{"class":46},[40,57567,54606],{"class":50},[40,57569,57570],{"class":42,"line":134},[40,57571,1413],{"emptyLinePlaceholder":1412},[40,57573,57574,57576,57578],{"class":42,"line":146},[40,57575,4387],{"class":50},[40,57577,55098],{"class":46},[40,57579,54606],{"class":50},[40,57581,57582,57584,57587,57589,57591,57593,57595,57597,57599,57602,57604,57607,57610,57612,57615],{"class":42,"line":154},[40,57583,55442],{"class":50},[40,57585,57586],{"class":46},"textarea",[40,57588,18242],{"class":596},[40,57590,1284],{"class":50},[40,57592,285],{"class":94},[40,57594,18281],{"class":596},[40,57596,1284],{"class":50},[40,57598,285],{"class":94},[40,57600,57601],{"class":596}," cols",[40,57603,1284],{"class":50},[40,57605,57606],{"class":94},"\"30\"",[40,57608,57609],{"class":596}," rows",[40,57611,1284],{"class":50},[40,57613,57614],{"class":94},"\"10\"",[40,57616,54606],{"class":50},[40,57618,57619],{"class":42,"line":162},[40,57620,57621],{"class":50},"        用户注册协议\n",[40,57623,57624],{"class":42,"line":170},[40,57625,57626],{"class":50},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[40,57628,57629],{"class":42,"line":183},[40,57630,57631],{"class":50},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[40,57633,57634,57636,57638],{"class":42,"line":196},[40,57635,55074],{"class":50},[40,57637,57586],{"class":46},[40,57639,54606],{"class":50},[40,57641,57642,57644,57646],{"class":42,"line":204},[40,57643,55442],{"class":50},[40,57645,57014],{"class":46},[40,57647,54606],{"class":50},[40,57649,57650,57652,57654,57656,57658,57661,57663,57666,57668],{"class":42,"line":217},[40,57651,55442],{"class":50},[40,57653,57185],{"class":46},[40,57655,56784],{"class":596},[40,57657,1284],{"class":50},[40,57659,57660],{"class":94},"\"btn\"",[40,57662,57188],{"class":596},[40,57664,57665],{"class":50},">我已经阅读用户协议(5)\u003C\u002F",[40,57667,57185],{"class":46},[40,57669,54606],{"class":50},[40,57671,57672,57674,57676],{"class":42,"line":230},[40,57673,55442],{"class":50},[40,57675,55111],{"class":46},[40,57677,54606],{"class":50},[40,57679,57680],{"class":42,"line":238},[40,57681,57682],{"class":997},"    \u002F\u002F 1. 获取元素\n",[40,57684,57685,57687,57690,57692,57695,57698,57700,57703],{"class":42,"line":251},[40,57686,14543],{"class":1283},[40,57688,57689],{"class":63}," btn",[40,57691,16886],{"class":1283},[40,57693,57694],{"class":50}," document.",[40,57696,57697],{"class":596},"querySelector",[40,57699,3488],{"class":50},[40,57701,57702],{"class":94},"'.btn'",[40,57704,1811],{"class":50},[40,57706,57707],{"class":42,"line":264},[40,57708,57709],{"class":997},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[40,57711,57712],{"class":42,"line":277},[40,57713,57714],{"class":997},"    \u002F\u002F 2. 倒计时\n",[40,57716,57717,57719,57721,57723],{"class":42,"line":290},[40,57718,55517],{"class":1283},[40,57720,12760],{"class":50},[40,57722,1284],{"class":1283},[40,57724,57725],{"class":63}," 5\n",[40,57727,57728],{"class":42,"line":298},[40,57729,57730],{"class":997},"    \u002F\u002F 2.1 开启定时器\n",[40,57732,57733,57735,57738,57740,57743,57745,57748],{"class":42,"line":310},[40,57734,55517],{"class":1283},[40,57736,57737],{"class":50}," n ",[40,57739,1284],{"class":1283},[40,57741,57742],{"class":596}," setInterval",[40,57744,3488],{"class":50},[40,57746,57747],{"class":1283},"function",[40,57749,57750],{"class":50}," () {\n",[40,57752,57753,57756],{"class":42,"line":5086},[40,57754,57755],{"class":50},"      i",[40,57757,57758],{"class":1283},"--\n",[40,57760,57761,57764,57766,57769,57771],{"class":42,"line":5091},[40,57762,57763],{"class":50},"      btn.innerHTML ",[40,57765,1284],{"class":1283},[40,57767,57768],{"class":94}," `我已经阅读用户协议(${",[40,57770,3920],{"class":50},[40,57772,57773],{"class":94},"})`\n",[40,57775,57776,57779,57782,57785,57787],{"class":42,"line":5105},[40,57777,57778],{"class":1283},"      if",[40,57780,57781],{"class":50}," (i ",[40,57783,57784],{"class":1283},"===",[40,57786,7416],{"class":63},[40,57788,15764],{"class":50},[40,57790,57791,57794,57797],{"class":42,"line":5110},[40,57792,57793],{"class":596},"        clearInterval",[40,57795,57796],{"class":50},"(n)  ",[40,57798,57799],{"class":997},"\u002F\u002F 关闭定时器\n",[40,57801,57802],{"class":42,"line":5902},[40,57803,57804],{"class":997},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[40,57806,57807,57810,57812],{"class":42,"line":5916},[40,57808,57809],{"class":50},"        btn.disabled ",[40,57811,1284],{"class":1283},[40,57813,57814],{"class":63}," false\n",[40,57816,57817,57820,57822],{"class":42,"line":5924},[40,57818,57819],{"class":50},"        btn.innerHTML ",[40,57821,1284],{"class":1283},[40,57823,57824],{"class":94}," '同意'\n",[40,57826,57827],{"class":42,"line":5929},[40,57828,55696],{"class":50},[40,57830,57831,57834,57836],{"class":42,"line":5935},[40,57832,57833],{"class":50},"    }, ",[40,57835,9733],{"class":63},[40,57837,1811],{"class":50},[40,57839,57840],{"class":42,"line":5941},[40,57841,1413],{"emptyLinePlaceholder":1412},[40,57843,57844,57846,57848],{"class":42,"line":5946},[40,57845,55715],{"class":50},[40,57847,55111],{"class":46},[40,57849,54606],{"class":50},[40,57851,57852,57854,57856],{"class":42,"line":11270},[40,57853,55083],{"class":50},[40,57855,55098],{"class":46},[40,57857,54606],{"class":50},[40,57859,57860],{"class":42,"line":11294},[40,57861,1413],{"emptyLinePlaceholder":1412},[40,57863,57864,57866,57868],{"class":42,"line":11299},[40,57865,55083],{"class":50},[40,57867,53935],{"class":46},[40,57869,54606],{"class":50},[19,57871,57872],{},"不要一直想着用死循环,避免死循环",[19,57874,57875,57878],{},[26,57876,57877],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[2423,57880,57882],{"id":57881},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[492,57884,57885],{},[495,57886,57887],{},"法1",[31,57889,57891],{"className":53933,"code":57890,"language":53935,"meta":36,"style":36},"\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",[26,57892,57893,57903,57917,57921,57929,57943,57963,57975,57983,57989,58000,58011,58015,58019,58026,58038,58042,58046,58053,58065,58079,58092,58106,58110,58114,58121,58132,58143,58154,58166,58178,58190,58194,58198,58206,58216,58229,58241,58254,58258,58262,58269,58279,58291,58303,58314,58325,58335,58347,58359,58363,58367,58376,58388,58400,58428,58441,58445,58449,58456,58467,58471,58479,58487,58491,58499,58513,58528,58552,58560,58575,58588,58596,58617,58629,58641,58653,58665,58677,58689,58701,58710,58718,58726,58734,58746,58769,58788,58807,58826,58845,58864,58883,58903,58907,58927,58946,58966,58987,58998,59015,59025,59035,59045,59050,59055,59060,59065,59090,59103,59107,59130,59134,59142,59150,59158,59162],{"__ignoreMap":36},[40,57894,57895,57897,57899,57901],{"class":42,"line":43},[40,57896,54597],{"class":50},[40,57898,54600],{"class":46},[40,57900,54603],{"class":596},[40,57902,54606],{"class":50},[40,57904,57905,57907,57909,57911,57913,57915],{"class":42,"line":54},[40,57906,4387],{"class":50},[40,57908,53935],{"class":46},[40,57910,54615],{"class":596},[40,57912,1284],{"class":50},[40,57914,54620],{"class":94},[40,57916,54606],{"class":50},[40,57918,57919],{"class":42,"line":70},[40,57920,1413],{"emptyLinePlaceholder":1412},[40,57922,57923,57925,57927],{"class":42,"line":78},[40,57924,4387],{"class":50},[40,57926,54633],{"class":46},[40,57928,54606],{"class":50},[40,57930,57931,57933,57935,57937,57939,57941],{"class":42,"line":86},[40,57932,55442],{"class":50},[40,57934,54643],{"class":46},[40,57936,54646],{"class":596},[40,57938,1284],{"class":50},[40,57940,54651],{"class":94},[40,57942,54606],{"class":50},[40,57944,57945,57947,57949,57951,57953,57955,57957,57959,57961],{"class":42,"line":100},[40,57946,55442],{"class":50},[40,57948,54643],{"class":46},[40,57950,18242],{"class":596},[40,57952,1284],{"class":50},[40,57954,54690],{"class":94},[40,57956,54670],{"class":596},[40,57958,1284],{"class":50},[40,57960,54697],{"class":94},[40,57962,54606],{"class":50},[40,57964,57965,57967,57969,57971,57973],{"class":42,"line":108},[40,57966,55442],{"class":50},[40,57968,54706],{"class":46},[40,57970,54709],{"class":50},[40,57972,54706],{"class":46},[40,57974,54606],{"class":50},[40,57976,57977,57979,57981],{"class":42,"line":121},[40,57978,55442],{"class":50},[40,57980,3384],{"class":46},[40,57982,54606],{"class":50},[40,57984,57985,57987],{"class":42,"line":134},[40,57986,9726],{"class":46},[40,57988,18894],{"class":50},[40,57990,57991,57994,57996,57998],{"class":42,"line":146},[40,57992,57993],{"class":63},"      padding",[40,57995,60],{"class":50},[40,57997,3672],{"class":63},[40,57999,4637],{"class":50},[40,58001,58002,58005,58007,58009],{"class":42,"line":154},[40,58003,58004],{"class":63},"      margin",[40,58006,60],{"class":50},[40,58008,3672],{"class":63},[40,58010,4637],{"class":50},[40,58012,58013],{"class":42,"line":162},[40,58014,5513],{"class":50},[40,58016,58017],{"class":42,"line":170},[40,58018,1413],{"emptyLinePlaceholder":1412},[40,58020,58021,58024],{"class":42,"line":183},[40,58022,58023],{"class":46},"    li",[40,58025,18894],{"class":50},[40,58027,58028,58031,58033,58036],{"class":42,"line":196},[40,58029,58030],{"class":63},"      list-style",[40,58032,60],{"class":50},[40,58034,58035],{"class":63},"none",[40,58037,4637],{"class":50},[40,58039,58040],{"class":42,"line":204},[40,58041,5513],{"class":50},[40,58043,58044],{"class":42,"line":217},[40,58045,1413],{"emptyLinePlaceholder":1412},[40,58047,58048,58051],{"class":42,"line":230},[40,58049,58050],{"class":596},"    .box",[40,58052,18894],{"class":50},[40,58054,58055,58058,58060,58063],{"class":42,"line":238},[40,58056,58057],{"class":63},"      position",[40,58059,60],{"class":50},[40,58061,58062],{"class":63},"relative",[40,58064,4637],{"class":50},[40,58066,58067,58070,58072,58075,58077],{"class":42,"line":251},[40,58068,58069],{"class":63},"      width",[40,58071,60],{"class":50},[40,58073,58074],{"class":63},"976",[40,58076,54790],{"class":1283},[40,58078,4637],{"class":50},[40,58080,58081,58084,58086,58088,58090],{"class":42,"line":264},[40,58082,58083],{"class":63},"      height",[40,58085,60],{"class":50},[40,58087,4881],{"class":63},[40,58089,54790],{"class":1283},[40,58091,4637],{"class":50},[40,58093,58094,58096,58098,58100,58102,58104],{"class":42,"line":277},[40,58095,58004],{"class":63},[40,58097,60],{"class":50},[40,58099,3791],{"class":63},[40,58101,54790],{"class":1283},[40,58103,54854],{"class":63},[40,58105,4637],{"class":50},[40,58107,58108],{"class":42,"line":290},[40,58109,5513],{"class":50},[40,58111,58112],{"class":42,"line":298},[40,58113,1413],{"emptyLinePlaceholder":1412},[40,58115,58116,58119],{"class":42,"line":310},[40,58117,58118],{"class":596},"    .slider-footer",[40,58120,18894],{"class":50},[40,58122,58123,58125,58127,58130],{"class":42,"line":5086},[40,58124,58057],{"class":63},[40,58126,60],{"class":50},[40,58128,58129],{"class":63},"absolute",[40,58131,4637],{"class":50},[40,58133,58134,58137,58139,58141],{"class":42,"line":5091},[40,58135,58136],{"class":63},"      left",[40,58138,60],{"class":50},[40,58140,3672],{"class":63},[40,58142,4637],{"class":50},[40,58144,58145,58148,58150,58152],{"class":42,"line":5105},[40,58146,58147],{"class":63},"      bottom",[40,58149,60],{"class":50},[40,58151,3672],{"class":63},[40,58153,4637],{"class":50},[40,58155,58156,58158,58160,58162,58164],{"class":42,"line":5110},[40,58157,58069],{"class":63},[40,58159,60],{"class":50},[40,58161,3791],{"class":63},[40,58163,3808],{"class":1283},[40,58165,4637],{"class":50},[40,58167,58168,58170,58172,58174,58176],{"class":42,"line":5902},[40,58169,58083],{"class":63},[40,58171,60],{"class":50},[40,58173,4054],{"class":63},[40,58175,3808],{"class":1283},[40,58177,4637],{"class":50},[40,58179,58180,58183,58185,58188],{"class":42,"line":5916},[40,58181,58182],{"class":63},"      background-color",[40,58184,60],{"class":50},[40,58186,58187],{"class":63},"skyblue",[40,58189,4637],{"class":50},[40,58191,58192],{"class":42,"line":5924},[40,58193,5513],{"class":50},[40,58195,58196],{"class":42,"line":5929},[40,58197,1413],{"emptyLinePlaceholder":1412},[40,58199,58200,58202,58204],{"class":42,"line":5935},[40,58201,58118],{"class":596},[40,58203,10148],{"class":46},[40,58205,18894],{"class":50},[40,58207,58208,58210,58212,58214],{"class":42,"line":5941},[40,58209,58057],{"class":63},[40,58211,60],{"class":50},[40,58213,58129],{"class":63},[40,58215,4637],{"class":50},[40,58217,58218,58221,58223,58225,58227],{"class":42,"line":5946},[40,58219,58220],{"class":63},"      font-size",[40,58222,60],{"class":50},[40,58224,4378],{"class":63},[40,58226,54790],{"class":1283},[40,58228,4637],{"class":50},[40,58230,58231,58233,58235,58237,58239],{"class":42,"line":11270},[40,58232,58136],{"class":63},[40,58234,60],{"class":50},[40,58236,4178],{"class":63},[40,58238,54790],{"class":1283},[40,58240,4637],{"class":50},[40,58242,58243,58246,58248,58250,58252],{"class":42,"line":11294},[40,58244,58245],{"class":63},"      top",[40,58247,60],{"class":50},[40,58249,3799],{"class":63},[40,58251,54790],{"class":1283},[40,58253,4637],{"class":50},[40,58255,58256],{"class":42,"line":11299},[40,58257,5513],{"class":50},[40,58259,58260],{"class":42,"line":11305},[40,58261,1413],{"emptyLinePlaceholder":1412},[40,58263,58264,58267],{"class":42,"line":11332},[40,58265,58266],{"class":46},"    ul",[40,58268,18894],{"class":50},[40,58270,58271,58273,58275,58277],{"class":42,"line":11337},[40,58272,58057],{"class":63},[40,58274,60],{"class":50},[40,58276,58129],{"class":63},[40,58278,4637],{"class":50},[40,58280,58281,58283,58285,58287,58289],{"class":42,"line":11343},[40,58282,58245],{"class":63},[40,58284,60],{"class":50},[40,58286,4259],{"class":63},[40,58288,54790],{"class":1283},[40,58290,4637],{"class":50},[40,58292,58293,58295,58297,58299,58301],{"class":42,"line":11355},[40,58294,58136],{"class":63},[40,58296,60],{"class":50},[40,58298,4178],{"class":63},[40,58300,54790],{"class":1283},[40,58302,4637],{"class":50},[40,58304,58305,58308,58310,58312],{"class":42,"line":11367},[40,58306,58307],{"class":63},"      display",[40,58309,60],{"class":50},[40,58311,54775],{"class":63},[40,58313,4637],{"class":50},[40,58315,58316,58319,58321,58323],{"class":42,"line":11379},[40,58317,58318],{"class":63},"      justify-content",[40,58320,60],{"class":50},[40,58322,54966],{"class":63},[40,58324,4637],{"class":50},[40,58326,58327,58329,58331,58333],{"class":42,"line":13038},[40,58328,58057],{"class":63},[40,58330,60],{"class":50},[40,58332,58129],{"class":63},[40,58334,4637],{"class":50},[40,58336,58337,58339,58341,58343,58345],{"class":42,"line":13063},[40,58338,58069],{"class":63},[40,58340,60],{"class":50},[40,58342,7315],{"class":63},[40,58344,54790],{"class":1283},[40,58346,4637],{"class":50},[40,58348,58349,58351,58353,58355,58357],{"class":42,"line":13086},[40,58350,58083],{"class":63},[40,58352,60],{"class":50},[40,58354,4178],{"class":63},[40,58356,54790],{"class":1283},[40,58358,4637],{"class":50},[40,58360,58361],{"class":42,"line":13110},[40,58362,5513],{"class":50},[40,58364,58365],{"class":42,"line":13115},[40,58366,1413],{"emptyLinePlaceholder":1412},[40,58368,58369,58371,58374],{"class":42,"line":13120},[40,58370,58266],{"class":46},[40,58372,58373],{"class":46}," li",[40,58375,18894],{"class":50},[40,58377,58378,58380,58382,58384,58386],{"class":42,"line":13125},[40,58379,58069],{"class":63},[40,58381,60],{"class":50},[40,58383,4178],{"class":63},[40,58385,54790],{"class":1283},[40,58387,4637],{"class":50},[40,58389,58390,58392,58394,58396,58398],{"class":42,"line":13134},[40,58391,58083],{"class":63},[40,58393,60],{"class":50},[40,58395,4178],{"class":63},[40,58397,54790],{"class":1283},[40,58399,4637],{"class":50},[40,58401,58402,58404,58406,58409,58411,58413,58415,58417,58419,58421,58423,58426],{"class":42,"line":13139},[40,58403,58182],{"class":63},[40,58405,60],{"class":50},[40,58407,58408],{"class":63},"rgba",[40,58410,3488],{"class":50},[40,58412,3672],{"class":63},[40,58414,15757],{"class":50},[40,58416,3672],{"class":63},[40,58418,15757],{"class":50},[40,58420,3672],{"class":63},[40,58422,15757],{"class":50},[40,58424,58425],{"class":63},".4",[40,58427,6043],{"class":50},[40,58429,58430,58433,58435,58437,58439],{"class":42,"line":13145},[40,58431,58432],{"class":63},"      border-radius",[40,58434,60],{"class":50},[40,58436,3925],{"class":63},[40,58438,54790],{"class":1283},[40,58440,4637],{"class":50},[40,58442,58443],{"class":42,"line":13166},[40,58444,5513],{"class":50},[40,58446,58447],{"class":42,"line":13172},[40,58448,1413],{"emptyLinePlaceholder":1412},[40,58450,58451,58454],{"class":42,"line":13186},[40,58452,58453],{"class":596},"    .activate",[40,58455,18894],{"class":50},[40,58457,58458,58460,58462,58465],{"class":42,"line":13192},[40,58459,58182],{"class":63},[40,58461,60],{"class":50},[40,58463,58464],{"class":63},"#f7f7f7",[40,58466,4637],{"class":50},[40,58468,58469],{"class":42,"line":13219},[40,58470,5513],{"class":50},[40,58472,58473,58475,58477],{"class":42,"line":13228},[40,58474,55715],{"class":50},[40,58476,3384],{"class":46},[40,58478,54606],{"class":50},[40,58480,58481,58483,58485],{"class":42,"line":13234},[40,58482,55083],{"class":50},[40,58484,54633],{"class":46},[40,58486,54606],{"class":50},[40,58488,58489],{"class":42,"line":13242},[40,58490,1413],{"emptyLinePlaceholder":1412},[40,58492,58493,58495,58497],{"class":42,"line":13247},[40,58494,4387],{"class":50},[40,58496,55098],{"class":46},[40,58498,54606],{"class":50},[40,58500,58501,58503,58505,58507,58509,58511],{"class":42,"line":19926},[40,58502,55442],{"class":50},[40,58504,54909],{"class":46},[40,58506,56784],{"class":596},[40,58508,1284],{"class":50},[40,58510,56789],{"class":94},[40,58512,54606],{"class":50},[40,58514,58515,58517,58519,58521,58523,58526],{"class":42,"line":19932},[40,58516,54640],{"class":50},[40,58518,54909],{"class":46},[40,58520,56784],{"class":596},[40,58522,1284],{"class":50},[40,58524,58525],{"class":94},"\"slider-wrapper\"",[40,58527,54606],{"class":50},[40,58529,58530,58533,58535,58538,58540,58543,58546,58548,58550],{"class":42,"line":19955},[40,58531,58532],{"class":50},"      \u003C",[40,58534,438],{"class":46},[40,58536,58537],{"class":596}," src",[40,58539,1284],{"class":50},[40,58541,58542],{"class":94},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[40,58544,58545],{"class":596}," alt",[40,58547,1284],{"class":50},[40,58549,285],{"class":94},[40,58551,54606],{"class":50},[40,58553,58554,58556,58558],{"class":42,"line":19961},[40,58555,55074],{"class":50},[40,58557,54909],{"class":46},[40,58559,54606],{"class":50},[40,58561,58562,58564,58566,58568,58570,58573],{"class":42,"line":19984},[40,58563,54640],{"class":50},[40,58565,54909],{"class":46},[40,58567,56784],{"class":596},[40,58569,1284],{"class":50},[40,58571,58572],{"class":94},"\"slider-footer\"",[40,58574,54606],{"class":50},[40,58576,58577,58579,58581,58584,58586],{"class":42,"line":19998},[40,58578,58532],{"class":50},[40,58580,19],{"class":46},[40,58582,58583],{"class":50},">对人类来说会不会太超前了?\u003C\u002F",[40,58585,19],{"class":46},[40,58587,54606],{"class":50},[40,58589,58590,58592,58594],{"class":42,"line":20018},[40,58591,58532],{"class":50},[40,58593,1338],{"class":46},[40,58595,54606],{"class":50},[40,58597,58598,58601,58603,58605,58607,58610,58613,58615],{"class":42,"line":20024},[40,58599,58600],{"class":50},"        \u003C",[40,58602,495],{"class":46},[40,58604,56784],{"class":596},[40,58606,1284],{"class":50},[40,58608,58609],{"class":94},"\"activate\"",[40,58611,58612],{"class":50},">\u003C\u002F",[40,58614,495],{"class":46},[40,58616,54606],{"class":50},[40,58618,58619,58621,58623,58625,58627],{"class":42,"line":20035},[40,58620,58600],{"class":50},[40,58622,495],{"class":46},[40,58624,58612],{"class":50},[40,58626,495],{"class":46},[40,58628,54606],{"class":50},[40,58630,58631,58633,58635,58637,58639],{"class":42,"line":20058},[40,58632,58600],{"class":50},[40,58634,495],{"class":46},[40,58636,58612],{"class":50},[40,58638,495],{"class":46},[40,58640,54606],{"class":50},[40,58642,58643,58645,58647,58649,58651],{"class":42,"line":20080},[40,58644,58600],{"class":50},[40,58646,495],{"class":46},[40,58648,58612],{"class":50},[40,58650,495],{"class":46},[40,58652,54606],{"class":50},[40,58654,58655,58657,58659,58661,58663],{"class":42,"line":20085},[40,58656,58600],{"class":50},[40,58658,495],{"class":46},[40,58660,58612],{"class":50},[40,58662,495],{"class":46},[40,58664,54606],{"class":50},[40,58666,58667,58669,58671,58673,58675],{"class":42,"line":20091},[40,58668,58600],{"class":50},[40,58670,495],{"class":46},[40,58672,58612],{"class":50},[40,58674,495],{"class":46},[40,58676,54606],{"class":50},[40,58678,58679,58681,58683,58685,58687],{"class":42,"line":20105},[40,58680,58600],{"class":50},[40,58682,495],{"class":46},[40,58684,58612],{"class":50},[40,58686,495],{"class":46},[40,58688,54606],{"class":50},[40,58690,58691,58693,58695,58697,58699],{"class":42,"line":20118},[40,58692,58600],{"class":50},[40,58694,495],{"class":46},[40,58696,58612],{"class":50},[40,58698,495],{"class":46},[40,58700,54606],{"class":50},[40,58702,58703,58706,58708],{"class":42,"line":20123},[40,58704,58705],{"class":50},"      \u003C\u002F",[40,58707,1338],{"class":46},[40,58709,54606],{"class":50},[40,58711,58712,58714,58716],{"class":42,"line":20137},[40,58713,55074],{"class":50},[40,58715,54909],{"class":46},[40,58717,54606],{"class":50},[40,58719,58720,58722,58724],{"class":42,"line":20142},[40,58721,55715],{"class":50},[40,58723,54909],{"class":46},[40,58725,54606],{"class":50},[40,58727,58728,58730,58732],{"class":42,"line":20148},[40,58729,55442],{"class":50},[40,58731,55111],{"class":46},[40,58733,54606],{"class":50},[40,58735,58736,58738,58741,58743],{"class":42,"line":20153},[40,58737,14543],{"class":1283},[40,58739,58740],{"class":63}," arrImage",[40,58742,16886],{"class":1283},[40,58744,58745],{"class":50}," [\n",[40,58747,58748,58751,58754,58757,58760,58763,58766],{"class":42,"line":20167},[40,58749,58750],{"class":50},"      { url: ",[40,58752,58753],{"class":94},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[40,58755,58756],{"class":50},", title: ",[40,58758,58759],{"class":94},"'对人类来说会不会太超前了?'",[40,58761,58762],{"class":50},", color: ",[40,58764,58765],{"class":94},"'rgba(100,67,68)'",[40,58767,58768],{"class":50}," },\n",[40,58770,58771,58773,58776,58778,58781,58783,58786],{"class":42,"line":20172},[40,58772,58750],{"class":50},[40,58774,58775],{"class":94},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[40,58777,58756],{"class":50},[40,58779,58780],{"class":94},"'开启剑与雪的黑暗传说!'",[40,58782,58762],{"class":50},[40,58784,58785],{"class":94},"'rgba(43,35,26)'",[40,58787,58768],{"class":50},[40,58789,58790,58792,58795,58797,58800,58802,58805],{"class":42,"line":20177},[40,58791,58750],{"class":50},[40,58793,58794],{"class":94},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[40,58796,58756],{"class":50},[40,58798,58799],{"class":94},"'真正的jo厨出现了!'",[40,58801,58762],{"class":50},[40,58803,58804],{"class":94},"'rgba(36,31,33)'",[40,58806,58768],{"class":50},[40,58808,58809,58811,58814,58816,58819,58821,58824],{"class":42,"line":20191},[40,58810,58750],{"class":50},[40,58812,58813],{"class":94},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[40,58815,58756],{"class":50},[40,58817,58818],{"class":94},"'李玉刚:让世界通过b站看到东方大国文化'",[40,58820,58762],{"class":50},[40,58822,58823],{"class":94},"'rgba(139,98,66)'",[40,58825,58768],{"class":50},[40,58827,58828,58830,58833,58835,58838,58840,58843],{"class":42,"line":20203},[40,58829,58750],{"class":50},[40,58831,58832],{"class":94},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[40,58834,58756],{"class":50},[40,58836,58837],{"class":94},"'快来分享你的寒假日常吧'",[40,58839,58762],{"class":50},[40,58841,58842],{"class":94},"'rgba(67,90,92)'",[40,58844,58768],{"class":50},[40,58846,58847,58849,58852,58854,58857,58859,58862],{"class":42,"line":20208},[40,58848,58750],{"class":50},[40,58850,58851],{"class":94},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[40,58853,58756],{"class":50},[40,58855,58856],{"class":94},"'哔哩哔哩小年YEAR'",[40,58858,58762],{"class":50},[40,58860,58861],{"class":94},"'rgba(166,131,143)'",[40,58863,58768],{"class":50},[40,58865,58866,58868,58871,58873,58876,58878,58881],{"class":42,"line":20221},[40,58867,58750],{"class":50},[40,58869,58870],{"class":94},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[40,58872,58756],{"class":50},[40,58874,58875],{"class":94},"'一站式解决你的电脑配置问题'",[40,58877,58762],{"class":50},[40,58879,58880],{"class":94},"'rgba(53,29,25)'",[40,58882,58768],{"class":50},[40,58884,58885,58887,58890,58892,58895,58897,58900],{"class":42,"line":20226},[40,58886,58750],{"class":50},[40,58888,58889],{"class":94},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[40,58891,58756],{"class":50},[40,58893,58894],{"class":94},"'谁不想和小猫咪贴贴呢?'",[40,58896,58762],{"class":50},[40,58898,58899],{"class":94},"'rgba(99,72,114)'",[40,58901,58902],{"class":50}," }\n",[40,58904,58905],{"class":42,"line":20231},[40,58906,56407],{"class":50},[40,58908,58909,58911,58914,58916,58918,58920,58922,58925],{"class":42,"line":20236},[40,58910,14543],{"class":1283},[40,58912,58913],{"class":63}," img",[40,58915,16886],{"class":1283},[40,58917,57694],{"class":50},[40,58919,57697],{"class":596},[40,58921,3488],{"class":50},[40,58923,58924],{"class":94},"'.slider-wrapper img'",[40,58926,1811],{"class":50},[40,58928,58929,58931,58933,58935,58937,58939,58941,58944],{"class":42,"line":20249},[40,58930,14543],{"class":1283},[40,58932,10148],{"class":63},[40,58934,16886],{"class":1283},[40,58936,57694],{"class":50},[40,58938,57697],{"class":596},[40,58940,3488],{"class":50},[40,58942,58943],{"class":94},"'.slider-footer p'",[40,58945,1811],{"class":50},[40,58947,58948,58950,58953,58955,58957,58959,58961,58964],{"class":42,"line":20254},[40,58949,14543],{"class":1283},[40,58951,58952],{"class":63}," color",[40,58954,16886],{"class":1283},[40,58956,57694],{"class":50},[40,58958,57697],{"class":596},[40,58960,3488],{"class":50},[40,58962,58963],{"class":94},"'.slider-footer'",[40,58965,1811],{"class":50},[40,58967,58968,58970,58973,58975,58977,58980,58982,58985],{"class":42,"line":35933},[40,58969,14543],{"class":1283},[40,58971,58972],{"class":63}," lis",[40,58974,16886],{"class":1283},[40,58976,57694],{"class":50},[40,58978,58979],{"class":596},"querySelectorAll",[40,58981,3488],{"class":50},[40,58983,58984],{"class":94},"'.slider-footer ul li'",[40,58986,1811],{"class":50},[40,58988,58989,58991,58993,58995],{"class":42,"line":35939},[40,58990,55517],{"class":1283},[40,58992,12760],{"class":50},[40,58994,1284],{"class":1283},[40,58996,58997],{"class":63}," 1\n",[40,58999,59000,59002,59005,59007,59009,59011,59013],{"class":42,"line":35945},[40,59001,55517],{"class":1283},[40,59003,59004],{"class":50}," timer ",[40,59006,1284],{"class":1283},[40,59008,57742],{"class":596},[40,59010,3488],{"class":50},[40,59012,57747],{"class":1283},[40,59014,57750],{"class":50},[40,59016,59017,59020,59022],{"class":42,"line":35951},[40,59018,59019],{"class":50},"      img.src ",[40,59021,1284],{"class":1283},[40,59023,59024],{"class":50}," arrImage[i].url\n",[40,59026,59027,59030,59032],{"class":42,"line":35957},[40,59028,59029],{"class":50},"      p.innerHTML ",[40,59031,1284],{"class":1283},[40,59033,59034],{"class":50}," arrImage[i].title\n",[40,59036,59037,59040,59042],{"class":42,"line":35968},[40,59038,59039],{"class":50},"      color.style.backgroundColor ",[40,59041,1284],{"class":1283},[40,59043,59044],{"class":50}," arrImage[i].color\n",[40,59046,59047],{"class":42,"line":35974},[40,59048,59049],{"class":997},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[40,59051,59052],{"class":42,"line":35994},[40,59053,59054],{"class":997},"      \u002F\u002F li.classList.add('activate')\n",[40,59056,59057],{"class":42,"line":36000},[40,59058,59059],{"class":997},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[40,59061,59062],{"class":42,"line":36011},[40,59063,59064],{"class":997},"      \u002F\u002F lis[i].classList.remove('activate')\n",[40,59066,59067,59070,59072,59074,59077,59080,59083,59085,59088],{"class":42,"line":36017},[40,59068,59069],{"class":50},"      document.",[40,59071,57697],{"class":596},[40,59073,3488],{"class":50},[40,59075,59076],{"class":94},"'.activate'",[40,59078,59079],{"class":50},")?.classList.",[40,59081,59082],{"class":596},"toggle",[40,59084,3488],{"class":50},[40,59086,59087],{"class":94},"'activate'",[40,59089,1811],{"class":50},[40,59091,59092,59095,59097,59099,59101],{"class":42,"line":36023},[40,59093,59094],{"class":50},"      lis[i].classList.",[40,59096,8657],{"class":596},[40,59098,3488],{"class":50},[40,59100,59087],{"class":94},[40,59102,1811],{"class":50},[40,59104,59105],{"class":42,"line":36029},[40,59106,1413],{"emptyLinePlaceholder":1412},[40,59108,59109,59112,59114,59116,59118,59120,59122,59124,59127],{"class":42,"line":36035},[40,59110,59111],{"class":50},"      i ",[40,59113,1284],{"class":1283},[40,59115,57781],{"class":50},[40,59117,3960],{"class":1283},[40,59119,28431],{"class":63},[40,59121,17036],{"class":50},[40,59123,3808],{"class":1283},[40,59125,59126],{"class":50}," arrImage.",[40,59128,59129],{"class":63},"length\n",[40,59131,59132],{"class":42,"line":36041},[40,59133,1413],{"emptyLinePlaceholder":1412},[40,59135,59136,59138,59140],{"class":42,"line":36047},[40,59137,57833],{"class":50},[40,59139,9733],{"class":63},[40,59141,1811],{"class":50},[40,59143,59144,59146,59148],{"class":42,"line":36053},[40,59145,55715],{"class":50},[40,59147,55111],{"class":46},[40,59149,54606],{"class":50},[40,59151,59152,59154,59156],{"class":42,"line":36073},[40,59153,55083],{"class":50},[40,59155,55098],{"class":46},[40,59157,54606],{"class":50},[40,59159,59160],{"class":42,"line":36079},[40,59161,1413],{"emptyLinePlaceholder":1412},[40,59163,59164,59166,59168],{"class":42,"line":36095},[40,59165,55083],{"class":50},[40,59167,53935],{"class":46},[40,59169,54606],{"class":50},[19,59171,59172],{},[438,59173],{"alt":36,"src":59174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,59176,59177],{},"?.就是短路保护,确保输出正常进行",[19,59179,59180],{},"不要忘记取余%,有时候可以用",[19,59182,59183],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[492,59185,59186],{"start":54},[495,59187,59188],{},"法2",[31,59190,59192],{"className":53933,"code":59191,"language":53935,"meta":36,"style":36},"\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",[26,59193,59194,59204,59218,59222,59230,59244,59264,59276,59284,59290,59300,59310,59314,59318,59324,59334,59338,59342,59348,59358,59370,59382,59396,59400,59404,59410,59420,59430,59440,59452,59464,59474,59478,59482,59490,59500,59512,59524,59536,59540,59544,59550,59560,59572,59584,59594,59604,59614,59626,59638,59642,59646,59654,59666,59678,59704,59716,59720,59724,59730,59740,59744,59752,59760,59764,59772,59786,59800,59820,59828,59842,59854,59862,59880,59892,59904,59916,59928,59940,59952,59964,59972,59980,59988,59996,60007,60023,60039,60055,60071,60087,60103,60119,60135,60139,60144,60162,60180,60190,60195,60200,60211,60217,60232,60241,60245,60250,60259,60264,60273,60278,60283,60288,60311,60341,60345,60353,60357,60365,60373,60377],{"__ignoreMap":36},[40,59195,59196,59198,59200,59202],{"class":42,"line":43},[40,59197,54597],{"class":50},[40,59199,54600],{"class":46},[40,59201,54603],{"class":596},[40,59203,54606],{"class":50},[40,59205,59206,59208,59210,59212,59214,59216],{"class":42,"line":54},[40,59207,4387],{"class":50},[40,59209,53935],{"class":46},[40,59211,54615],{"class":596},[40,59213,1284],{"class":50},[40,59215,54620],{"class":94},[40,59217,54606],{"class":50},[40,59219,59220],{"class":42,"line":70},[40,59221,1413],{"emptyLinePlaceholder":1412},[40,59223,59224,59226,59228],{"class":42,"line":78},[40,59225,4387],{"class":50},[40,59227,54633],{"class":46},[40,59229,54606],{"class":50},[40,59231,59232,59234,59236,59238,59240,59242],{"class":42,"line":86},[40,59233,55442],{"class":50},[40,59235,54643],{"class":46},[40,59237,54646],{"class":596},[40,59239,1284],{"class":50},[40,59241,54651],{"class":94},[40,59243,54606],{"class":50},[40,59245,59246,59248,59250,59252,59254,59256,59258,59260,59262],{"class":42,"line":100},[40,59247,55442],{"class":50},[40,59249,54643],{"class":46},[40,59251,18242],{"class":596},[40,59253,1284],{"class":50},[40,59255,54690],{"class":94},[40,59257,54670],{"class":596},[40,59259,1284],{"class":50},[40,59261,54697],{"class":94},[40,59263,54606],{"class":50},[40,59265,59266,59268,59270,59272,59274],{"class":42,"line":108},[40,59267,55442],{"class":50},[40,59269,54706],{"class":46},[40,59271,54709],{"class":50},[40,59273,54706],{"class":46},[40,59275,54606],{"class":50},[40,59277,59278,59280,59282],{"class":42,"line":121},[40,59279,55442],{"class":50},[40,59281,3384],{"class":46},[40,59283,54606],{"class":50},[40,59285,59286,59288],{"class":42,"line":134},[40,59287,9726],{"class":46},[40,59289,18894],{"class":50},[40,59291,59292,59294,59296,59298],{"class":42,"line":146},[40,59293,57993],{"class":63},[40,59295,60],{"class":50},[40,59297,3672],{"class":63},[40,59299,4637],{"class":50},[40,59301,59302,59304,59306,59308],{"class":42,"line":154},[40,59303,58004],{"class":63},[40,59305,60],{"class":50},[40,59307,3672],{"class":63},[40,59309,4637],{"class":50},[40,59311,59312],{"class":42,"line":162},[40,59313,5513],{"class":50},[40,59315,59316],{"class":42,"line":170},[40,59317,1413],{"emptyLinePlaceholder":1412},[40,59319,59320,59322],{"class":42,"line":183},[40,59321,58023],{"class":46},[40,59323,18894],{"class":50},[40,59325,59326,59328,59330,59332],{"class":42,"line":196},[40,59327,58030],{"class":63},[40,59329,60],{"class":50},[40,59331,58035],{"class":63},[40,59333,4637],{"class":50},[40,59335,59336],{"class":42,"line":204},[40,59337,5513],{"class":50},[40,59339,59340],{"class":42,"line":217},[40,59341,1413],{"emptyLinePlaceholder":1412},[40,59343,59344,59346],{"class":42,"line":230},[40,59345,58050],{"class":596},[40,59347,18894],{"class":50},[40,59349,59350,59352,59354,59356],{"class":42,"line":238},[40,59351,58057],{"class":63},[40,59353,60],{"class":50},[40,59355,58062],{"class":63},[40,59357,4637],{"class":50},[40,59359,59360,59362,59364,59366,59368],{"class":42,"line":251},[40,59361,58069],{"class":63},[40,59363,60],{"class":50},[40,59365,58074],{"class":63},[40,59367,54790],{"class":1283},[40,59369,4637],{"class":50},[40,59371,59372,59374,59376,59378,59380],{"class":42,"line":264},[40,59373,58083],{"class":63},[40,59375,60],{"class":50},[40,59377,4881],{"class":63},[40,59379,54790],{"class":1283},[40,59381,4637],{"class":50},[40,59383,59384,59386,59388,59390,59392,59394],{"class":42,"line":277},[40,59385,58004],{"class":63},[40,59387,60],{"class":50},[40,59389,3791],{"class":63},[40,59391,54790],{"class":1283},[40,59393,54854],{"class":63},[40,59395,4637],{"class":50},[40,59397,59398],{"class":42,"line":290},[40,59399,5513],{"class":50},[40,59401,59402],{"class":42,"line":298},[40,59403,1413],{"emptyLinePlaceholder":1412},[40,59405,59406,59408],{"class":42,"line":310},[40,59407,58118],{"class":596},[40,59409,18894],{"class":50},[40,59411,59412,59414,59416,59418],{"class":42,"line":5086},[40,59413,58057],{"class":63},[40,59415,60],{"class":50},[40,59417,58129],{"class":63},[40,59419,4637],{"class":50},[40,59421,59422,59424,59426,59428],{"class":42,"line":5091},[40,59423,58136],{"class":63},[40,59425,60],{"class":50},[40,59427,3672],{"class":63},[40,59429,4637],{"class":50},[40,59431,59432,59434,59436,59438],{"class":42,"line":5105},[40,59433,58147],{"class":63},[40,59435,60],{"class":50},[40,59437,3672],{"class":63},[40,59439,4637],{"class":50},[40,59441,59442,59444,59446,59448,59450],{"class":42,"line":5110},[40,59443,58069],{"class":63},[40,59445,60],{"class":50},[40,59447,3791],{"class":63},[40,59449,3808],{"class":1283},[40,59451,4637],{"class":50},[40,59453,59454,59456,59458,59460,59462],{"class":42,"line":5902},[40,59455,58083],{"class":63},[40,59457,60],{"class":50},[40,59459,4054],{"class":63},[40,59461,3808],{"class":1283},[40,59463,4637],{"class":50},[40,59465,59466,59468,59470,59472],{"class":42,"line":5916},[40,59467,58182],{"class":63},[40,59469,60],{"class":50},[40,59471,58187],{"class":63},[40,59473,4637],{"class":50},[40,59475,59476],{"class":42,"line":5924},[40,59477,5513],{"class":50},[40,59479,59480],{"class":42,"line":5929},[40,59481,1413],{"emptyLinePlaceholder":1412},[40,59483,59484,59486,59488],{"class":42,"line":5935},[40,59485,58118],{"class":596},[40,59487,10148],{"class":46},[40,59489,18894],{"class":50},[40,59491,59492,59494,59496,59498],{"class":42,"line":5941},[40,59493,58057],{"class":63},[40,59495,60],{"class":50},[40,59497,58129],{"class":63},[40,59499,4637],{"class":50},[40,59501,59502,59504,59506,59508,59510],{"class":42,"line":5946},[40,59503,58220],{"class":63},[40,59505,60],{"class":50},[40,59507,4378],{"class":63},[40,59509,54790],{"class":1283},[40,59511,4637],{"class":50},[40,59513,59514,59516,59518,59520,59522],{"class":42,"line":11270},[40,59515,58136],{"class":63},[40,59517,60],{"class":50},[40,59519,4178],{"class":63},[40,59521,54790],{"class":1283},[40,59523,4637],{"class":50},[40,59525,59526,59528,59530,59532,59534],{"class":42,"line":11294},[40,59527,58245],{"class":63},[40,59529,60],{"class":50},[40,59531,3799],{"class":63},[40,59533,54790],{"class":1283},[40,59535,4637],{"class":50},[40,59537,59538],{"class":42,"line":11299},[40,59539,5513],{"class":50},[40,59541,59542],{"class":42,"line":11305},[40,59543,1413],{"emptyLinePlaceholder":1412},[40,59545,59546,59548],{"class":42,"line":11332},[40,59547,58266],{"class":46},[40,59549,18894],{"class":50},[40,59551,59552,59554,59556,59558],{"class":42,"line":11337},[40,59553,58057],{"class":63},[40,59555,60],{"class":50},[40,59557,58129],{"class":63},[40,59559,4637],{"class":50},[40,59561,59562,59564,59566,59568,59570],{"class":42,"line":11343},[40,59563,58245],{"class":63},[40,59565,60],{"class":50},[40,59567,4259],{"class":63},[40,59569,54790],{"class":1283},[40,59571,4637],{"class":50},[40,59573,59574,59576,59578,59580,59582],{"class":42,"line":11355},[40,59575,58136],{"class":63},[40,59577,60],{"class":50},[40,59579,4178],{"class":63},[40,59581,54790],{"class":1283},[40,59583,4637],{"class":50},[40,59585,59586,59588,59590,59592],{"class":42,"line":11367},[40,59587,58307],{"class":63},[40,59589,60],{"class":50},[40,59591,54775],{"class":63},[40,59593,4637],{"class":50},[40,59595,59596,59598,59600,59602],{"class":42,"line":11379},[40,59597,58318],{"class":63},[40,59599,60],{"class":50},[40,59601,54966],{"class":63},[40,59603,4637],{"class":50},[40,59605,59606,59608,59610,59612],{"class":42,"line":13038},[40,59607,58057],{"class":63},[40,59609,60],{"class":50},[40,59611,58129],{"class":63},[40,59613,4637],{"class":50},[40,59615,59616,59618,59620,59622,59624],{"class":42,"line":13063},[40,59617,58069],{"class":63},[40,59619,60],{"class":50},[40,59621,7315],{"class":63},[40,59623,54790],{"class":1283},[40,59625,4637],{"class":50},[40,59627,59628,59630,59632,59634,59636],{"class":42,"line":13086},[40,59629,58083],{"class":63},[40,59631,60],{"class":50},[40,59633,4178],{"class":63},[40,59635,54790],{"class":1283},[40,59637,4637],{"class":50},[40,59639,59640],{"class":42,"line":13110},[40,59641,5513],{"class":50},[40,59643,59644],{"class":42,"line":13115},[40,59645,1413],{"emptyLinePlaceholder":1412},[40,59647,59648,59650,59652],{"class":42,"line":13120},[40,59649,58266],{"class":46},[40,59651,58373],{"class":46},[40,59653,18894],{"class":50},[40,59655,59656,59658,59660,59662,59664],{"class":42,"line":13125},[40,59657,58069],{"class":63},[40,59659,60],{"class":50},[40,59661,4178],{"class":63},[40,59663,54790],{"class":1283},[40,59665,4637],{"class":50},[40,59667,59668,59670,59672,59674,59676],{"class":42,"line":13134},[40,59669,58083],{"class":63},[40,59671,60],{"class":50},[40,59673,4178],{"class":63},[40,59675,54790],{"class":1283},[40,59677,4637],{"class":50},[40,59679,59680,59682,59684,59686,59688,59690,59692,59694,59696,59698,59700,59702],{"class":42,"line":13139},[40,59681,58182],{"class":63},[40,59683,60],{"class":50},[40,59685,58408],{"class":63},[40,59687,3488],{"class":50},[40,59689,3672],{"class":63},[40,59691,15757],{"class":50},[40,59693,3672],{"class":63},[40,59695,15757],{"class":50},[40,59697,3672],{"class":63},[40,59699,15757],{"class":50},[40,59701,58425],{"class":63},[40,59703,6043],{"class":50},[40,59705,59706,59708,59710,59712,59714],{"class":42,"line":13145},[40,59707,58432],{"class":63},[40,59709,60],{"class":50},[40,59711,3925],{"class":63},[40,59713,54790],{"class":1283},[40,59715,4637],{"class":50},[40,59717,59718],{"class":42,"line":13166},[40,59719,5513],{"class":50},[40,59721,59722],{"class":42,"line":13172},[40,59723,1413],{"emptyLinePlaceholder":1412},[40,59725,59726,59728],{"class":42,"line":13186},[40,59727,58453],{"class":596},[40,59729,18894],{"class":50},[40,59731,59732,59734,59736,59738],{"class":42,"line":13192},[40,59733,58182],{"class":63},[40,59735,60],{"class":50},[40,59737,58464],{"class":63},[40,59739,4637],{"class":50},[40,59741,59742],{"class":42,"line":13219},[40,59743,5513],{"class":50},[40,59745,59746,59748,59750],{"class":42,"line":13228},[40,59747,55715],{"class":50},[40,59749,3384],{"class":46},[40,59751,54606],{"class":50},[40,59753,59754,59756,59758],{"class":42,"line":13234},[40,59755,55083],{"class":50},[40,59757,54633],{"class":46},[40,59759,54606],{"class":50},[40,59761,59762],{"class":42,"line":13242},[40,59763,1413],{"emptyLinePlaceholder":1412},[40,59765,59766,59768,59770],{"class":42,"line":13247},[40,59767,4387],{"class":50},[40,59769,55098],{"class":46},[40,59771,54606],{"class":50},[40,59773,59774,59776,59778,59780,59782,59784],{"class":42,"line":19926},[40,59775,55442],{"class":50},[40,59777,54909],{"class":46},[40,59779,56784],{"class":596},[40,59781,1284],{"class":50},[40,59783,56789],{"class":94},[40,59785,54606],{"class":50},[40,59787,59788,59790,59792,59794,59796,59798],{"class":42,"line":19932},[40,59789,54640],{"class":50},[40,59791,54909],{"class":46},[40,59793,56784],{"class":596},[40,59795,1284],{"class":50},[40,59797,58525],{"class":94},[40,59799,54606],{"class":50},[40,59801,59802,59804,59806,59808,59810,59812,59814,59816,59818],{"class":42,"line":19955},[40,59803,58532],{"class":50},[40,59805,438],{"class":46},[40,59807,58537],{"class":596},[40,59809,1284],{"class":50},[40,59811,58542],{"class":94},[40,59813,58545],{"class":596},[40,59815,1284],{"class":50},[40,59817,285],{"class":94},[40,59819,54606],{"class":50},[40,59821,59822,59824,59826],{"class":42,"line":19961},[40,59823,55074],{"class":50},[40,59825,54909],{"class":46},[40,59827,54606],{"class":50},[40,59829,59830,59832,59834,59836,59838,59840],{"class":42,"line":19984},[40,59831,54640],{"class":50},[40,59833,54909],{"class":46},[40,59835,56784],{"class":596},[40,59837,1284],{"class":50},[40,59839,58572],{"class":94},[40,59841,54606],{"class":50},[40,59843,59844,59846,59848,59850,59852],{"class":42,"line":19998},[40,59845,58532],{"class":50},[40,59847,19],{"class":46},[40,59849,58583],{"class":50},[40,59851,19],{"class":46},[40,59853,54606],{"class":50},[40,59855,59856,59858,59860],{"class":42,"line":20018},[40,59857,58532],{"class":50},[40,59859,1338],{"class":46},[40,59861,54606],{"class":50},[40,59863,59864,59866,59868,59870,59872,59874,59876,59878],{"class":42,"line":20024},[40,59865,58600],{"class":50},[40,59867,495],{"class":46},[40,59869,56784],{"class":596},[40,59871,1284],{"class":50},[40,59873,58609],{"class":94},[40,59875,58612],{"class":50},[40,59877,495],{"class":46},[40,59879,54606],{"class":50},[40,59881,59882,59884,59886,59888,59890],{"class":42,"line":20035},[40,59883,58600],{"class":50},[40,59885,495],{"class":46},[40,59887,58612],{"class":50},[40,59889,495],{"class":46},[40,59891,54606],{"class":50},[40,59893,59894,59896,59898,59900,59902],{"class":42,"line":20058},[40,59895,58600],{"class":50},[40,59897,495],{"class":46},[40,59899,58612],{"class":50},[40,59901,495],{"class":46},[40,59903,54606],{"class":50},[40,59905,59906,59908,59910,59912,59914],{"class":42,"line":20080},[40,59907,58600],{"class":50},[40,59909,495],{"class":46},[40,59911,58612],{"class":50},[40,59913,495],{"class":46},[40,59915,54606],{"class":50},[40,59917,59918,59920,59922,59924,59926],{"class":42,"line":20085},[40,59919,58600],{"class":50},[40,59921,495],{"class":46},[40,59923,58612],{"class":50},[40,59925,495],{"class":46},[40,59927,54606],{"class":50},[40,59929,59930,59932,59934,59936,59938],{"class":42,"line":20091},[40,59931,58600],{"class":50},[40,59933,495],{"class":46},[40,59935,58612],{"class":50},[40,59937,495],{"class":46},[40,59939,54606],{"class":50},[40,59941,59942,59944,59946,59948,59950],{"class":42,"line":20105},[40,59943,58600],{"class":50},[40,59945,495],{"class":46},[40,59947,58612],{"class":50},[40,59949,495],{"class":46},[40,59951,54606],{"class":50},[40,59953,59954,59956,59958,59960,59962],{"class":42,"line":20118},[40,59955,58600],{"class":50},[40,59957,495],{"class":46},[40,59959,58612],{"class":50},[40,59961,495],{"class":46},[40,59963,54606],{"class":50},[40,59965,59966,59968,59970],{"class":42,"line":20123},[40,59967,58705],{"class":50},[40,59969,1338],{"class":46},[40,59971,54606],{"class":50},[40,59973,59974,59976,59978],{"class":42,"line":20137},[40,59975,55074],{"class":50},[40,59977,54909],{"class":46},[40,59979,54606],{"class":50},[40,59981,59982,59984,59986],{"class":42,"line":20142},[40,59983,55715],{"class":50},[40,59985,54909],{"class":46},[40,59987,54606],{"class":50},[40,59989,59990,59992,59994],{"class":42,"line":20148},[40,59991,55442],{"class":50},[40,59993,55111],{"class":46},[40,59995,54606],{"class":50},[40,59997,59998,60000,60003,60005],{"class":42,"line":20153},[40,59999,14543],{"class":1283},[40,60001,60002],{"class":63}," sliderData",[40,60004,16886],{"class":1283},[40,60006,58745],{"class":50},[40,60008,60009,60011,60013,60015,60017,60019,60021],{"class":42,"line":20167},[40,60010,58750],{"class":50},[40,60012,58753],{"class":94},[40,60014,58756],{"class":50},[40,60016,58759],{"class":94},[40,60018,58762],{"class":50},[40,60020,58765],{"class":94},[40,60022,58768],{"class":50},[40,60024,60025,60027,60029,60031,60033,60035,60037],{"class":42,"line":20172},[40,60026,58750],{"class":50},[40,60028,58775],{"class":94},[40,60030,58756],{"class":50},[40,60032,58780],{"class":94},[40,60034,58762],{"class":50},[40,60036,58785],{"class":94},[40,60038,58768],{"class":50},[40,60040,60041,60043,60045,60047,60049,60051,60053],{"class":42,"line":20177},[40,60042,58750],{"class":50},[40,60044,58794],{"class":94},[40,60046,58756],{"class":50},[40,60048,58799],{"class":94},[40,60050,58762],{"class":50},[40,60052,58804],{"class":94},[40,60054,58768],{"class":50},[40,60056,60057,60059,60061,60063,60065,60067,60069],{"class":42,"line":20191},[40,60058,58750],{"class":50},[40,60060,58813],{"class":94},[40,60062,58756],{"class":50},[40,60064,58818],{"class":94},[40,60066,58762],{"class":50},[40,60068,58823],{"class":94},[40,60070,58768],{"class":50},[40,60072,60073,60075,60077,60079,60081,60083,60085],{"class":42,"line":20203},[40,60074,58750],{"class":50},[40,60076,58832],{"class":94},[40,60078,58756],{"class":50},[40,60080,58837],{"class":94},[40,60082,58762],{"class":50},[40,60084,58842],{"class":94},[40,60086,58768],{"class":50},[40,60088,60089,60091,60093,60095,60097,60099,60101],{"class":42,"line":20208},[40,60090,58750],{"class":50},[40,60092,58851],{"class":94},[40,60094,58756],{"class":50},[40,60096,58856],{"class":94},[40,60098,58762],{"class":50},[40,60100,58861],{"class":94},[40,60102,58768],{"class":50},[40,60104,60105,60107,60109,60111,60113,60115,60117],{"class":42,"line":20221},[40,60106,58750],{"class":50},[40,60108,58870],{"class":94},[40,60110,58756],{"class":50},[40,60112,58875],{"class":94},[40,60114,58762],{"class":50},[40,60116,58880],{"class":94},[40,60118,58768],{"class":50},[40,60120,60121,60123,60125,60127,60129,60131,60133],{"class":42,"line":20226},[40,60122,58750],{"class":50},[40,60124,58889],{"class":94},[40,60126,58756],{"class":50},[40,60128,58894],{"class":94},[40,60130,58762],{"class":50},[40,60132,58899],{"class":94},[40,60134,58902],{"class":50},[40,60136,60137],{"class":42,"line":20231},[40,60138,56407],{"class":50},[40,60140,60141],{"class":42,"line":20236},[40,60142,60143],{"class":997},"    \u002F\u002F 1.获取元素\n",[40,60145,60146,60148,60150,60152,60154,60156,60158,60160],{"class":42,"line":20249},[40,60147,14543],{"class":1283},[40,60149,58913],{"class":63},[40,60151,16886],{"class":1283},[40,60153,57694],{"class":50},[40,60155,57697],{"class":596},[40,60157,3488],{"class":50},[40,60159,58924],{"class":94},[40,60161,1811],{"class":50},[40,60163,60164,60166,60168,60170,60172,60174,60176,60178],{"class":42,"line":20254},[40,60165,14543],{"class":1283},[40,60167,10148],{"class":63},[40,60169,16886],{"class":1283},[40,60171,57694],{"class":50},[40,60173,57697],{"class":596},[40,60175,3488],{"class":50},[40,60177,58943],{"class":94},[40,60179,1811],{"class":50},[40,60181,60182,60184,60186,60188],{"class":42,"line":35933},[40,60183,55517],{"class":1283},[40,60185,12760],{"class":50},[40,60187,1284],{"class":1283},[40,60189,50633],{"class":63},[40,60191,60192],{"class":42,"line":35939},[40,60193,60194],{"class":997},"    \u002F\u002F 2.开启定时器\n",[40,60196,60197],{"class":42,"line":35945},[40,60198,60199],{"class":997},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[40,60201,60202,60205,60207,60209],{"class":42,"line":35951},[40,60203,60204],{"class":596},"    setInterval",[40,60206,3488],{"class":50},[40,60208,57747],{"class":1283},[40,60210,57750],{"class":50},[40,60212,60213,60215],{"class":42,"line":35957},[40,60214,57755],{"class":50},[40,60216,6026],{"class":1283},[40,60218,60219,60221,60223,60225,60228,60230],{"class":42,"line":35968},[40,60220,57778],{"class":1283},[40,60222,57781],{"class":50},[40,60224,5041],{"class":1283},[40,60226,60227],{"class":50}," sliderData.",[40,60229,55266],{"class":63},[40,60231,15764],{"class":50},[40,60233,60234,60237,60239],{"class":42,"line":35974},[40,60235,60236],{"class":50},"        i ",[40,60238,1284],{"class":1283},[40,60240,50633],{"class":63},[40,60242,60243],{"class":42,"line":35994},[40,60244,55696],{"class":50},[40,60246,60247],{"class":42,"line":36000},[40,60248,60249],{"class":997},"      \u002F\u002F 更换图片路径\n",[40,60251,60252,60254,60256],{"class":42,"line":36011},[40,60253,59019],{"class":50},[40,60255,1284],{"class":1283},[40,60257,60258],{"class":50}," sliderData[i].url\n",[40,60260,60261],{"class":42,"line":36017},[40,60262,60263],{"class":997},"      \u002F\u002F 把文字写到p里面\n",[40,60265,60266,60268,60270],{"class":42,"line":36023},[40,60267,59029],{"class":50},[40,60269,1284],{"class":1283},[40,60271,60272],{"class":50}," sliderData[i].title\n",[40,60274,60275],{"class":42,"line":36029},[40,60276,60277],{"class":997},"      \u002F\u002F 小圆点\n",[40,60279,60280],{"class":42,"line":36035},[40,60281,60282],{"class":997},"      \u002F\u002F 先删除以前的active\n",[40,60284,60285],{"class":42,"line":36041},[40,60286,60287],{"class":997},"      \u002F\u002F 只让当前li添加active\n",[40,60289,60290,60292,60294,60296,60299,60302,60305,60307,60309],{"class":42,"line":36047},[40,60291,59069],{"class":50},[40,60293,57697],{"class":596},[40,60295,3488],{"class":50},[40,60297,60298],{"class":94},"'.slider-footer .activate'",[40,60300,60301],{"class":50},").classList.",[40,60303,60304],{"class":596},"remove",[40,60306,3488],{"class":50},[40,60308,59087],{"class":94},[40,60310,1811],{"class":50},[40,60312,60313,60315,60317,60319,60322,60324,60326,60328,60331,60333,60335,60337,60339],{"class":42,"line":36053},[40,60314,59069],{"class":50},[40,60316,57697],{"class":596},[40,60318,3488],{"class":50},[40,60320,60321],{"class":94},"`.slider-footer ul li:nth-child(${",[40,60323,3920],{"class":50},[40,60325,48866],{"class":1283},[40,60327,28431],{"class":63},[40,60329,60330],{"class":94},"})`",[40,60332,60301],{"class":50},[40,60334,8657],{"class":596},[40,60336,3488],{"class":50},[40,60338,59087],{"class":94},[40,60340,1811],{"class":50},[40,60342,60343],{"class":42,"line":36073},[40,60344,1413],{"emptyLinePlaceholder":1412},[40,60346,60347,60349,60351],{"class":42,"line":36079},[40,60348,57833],{"class":50},[40,60350,9733],{"class":63},[40,60352,1811],{"class":50},[40,60354,60355],{"class":42,"line":36095},[40,60356,1413],{"emptyLinePlaceholder":1412},[40,60358,60359,60361,60363],{"class":42,"line":36101},[40,60360,55715],{"class":50},[40,60362,55111],{"class":46},[40,60364,54606],{"class":50},[40,60366,60367,60369,60371],{"class":42,"line":36115},[40,60368,55083],{"class":50},[40,60370,55098],{"class":46},[40,60372,54606],{"class":50},[40,60374,60375],{"class":42,"line":36121},[40,60376,1413],{"emptyLinePlaceholder":1412},[40,60378,60379,60381,60383],{"class":42,"line":36136},[40,60380,55083],{"class":50},[40,60382,53935],{"class":46},[40,60384,54606],{"class":50},[402,60386,60388],{"id":60387},"_317-重要知识点","3.1.7 重要知识点",[19,60390,60391,60392],{},"浏览器在渲染文本时， ",[409,60393,60394],{},"没有空格或换行符就没有“断行点”",[19,60396,60397],{},[438,60398],{"alt":36,"src":60399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,60401,60402],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,60404,60405],{},[438,60406],{"alt":36,"src":60407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,60409,60410],{},[438,60411],{"alt":36,"src":60412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,60414,60416],{"id":60415},"_32-dom事件基础","3.2 DOM事件基础",[402,60418,60420],{"id":60419},"_321-事件监听","3.2.1 事件监听",[19,60422,60423],{},[438,60424],{"alt":36,"src":60425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,60427,60428],{},"事件监听有响应的发生",[19,60430,60431],{},[438,60432],{"alt":36,"src":60433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,60435,60436],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,60438,60439],{},"对于有名函数,要执行的函数名后边不要加()",[402,60441,60443],{"id":60442},"_322-随机点名案例","3.2.2 随机点名案例",[31,60445,60447],{"className":53933,"code":60446,"language":53935,"meta":36,"style":36},"\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",[26,60448,60449,60459,60473,60477,60485,60499,60519,60531,60539,60545,60555,60565,60569,60573,60580,60591,60595,60599,60605,60617,60631,60641,60653,60666,60670,60674,60681,60685,60698,60710,60722,60726,60730,60734,60741,60751,60755,60759,60768,60780,60792,60807,60811,60819,60827,60831,60839,60852,60866,60879,60899,60907,60922,60942,60962,60970,60974,60982,60987,61023,61043,61048,61067,61072,61083,61088,61099,61104,61123,61138,61143,61169,61179,61188,61193,61209,61214,61219,61224,61239,61243,61247,61252,61271,61288,61296,61301,61316,61320,61324,61332,61340,61344],{"__ignoreMap":36},[40,60450,60451,60453,60455,60457],{"class":42,"line":43},[40,60452,54597],{"class":50},[40,60454,54600],{"class":46},[40,60456,54603],{"class":596},[40,60458,54606],{"class":50},[40,60460,60461,60463,60465,60467,60469,60471],{"class":42,"line":54},[40,60462,4387],{"class":50},[40,60464,53935],{"class":46},[40,60466,54615],{"class":596},[40,60468,1284],{"class":50},[40,60470,54620],{"class":94},[40,60472,54606],{"class":50},[40,60474,60475],{"class":42,"line":70},[40,60476,1413],{"emptyLinePlaceholder":1412},[40,60478,60479,60481,60483],{"class":42,"line":78},[40,60480,4387],{"class":50},[40,60482,54633],{"class":46},[40,60484,54606],{"class":50},[40,60486,60487,60489,60491,60493,60495,60497],{"class":42,"line":86},[40,60488,55442],{"class":50},[40,60490,54643],{"class":46},[40,60492,54646],{"class":596},[40,60494,1284],{"class":50},[40,60496,54651],{"class":94},[40,60498,54606],{"class":50},[40,60500,60501,60503,60505,60507,60509,60511,60513,60515,60517],{"class":42,"line":100},[40,60502,55442],{"class":50},[40,60504,54643],{"class":46},[40,60506,18242],{"class":596},[40,60508,1284],{"class":50},[40,60510,54690],{"class":94},[40,60512,54670],{"class":596},[40,60514,1284],{"class":50},[40,60516,54697],{"class":94},[40,60518,54606],{"class":50},[40,60520,60521,60523,60525,60527,60529],{"class":42,"line":108},[40,60522,55442],{"class":50},[40,60524,54706],{"class":46},[40,60526,54709],{"class":50},[40,60528,54706],{"class":46},[40,60530,54606],{"class":50},[40,60532,60533,60535,60537],{"class":42,"line":121},[40,60534,55442],{"class":50},[40,60536,3384],{"class":46},[40,60538,54606],{"class":50},[40,60540,60541,60543],{"class":42,"line":134},[40,60542,9726],{"class":46},[40,60544,18894],{"class":50},[40,60546,60547,60549,60551,60553],{"class":42,"line":146},[40,60548,58004],{"class":63},[40,60550,60],{"class":50},[40,60552,3672],{"class":63},[40,60554,4637],{"class":50},[40,60556,60557,60559,60561,60563],{"class":42,"line":154},[40,60558,57993],{"class":63},[40,60560,60],{"class":50},[40,60562,3672],{"class":63},[40,60564,4637],{"class":50},[40,60566,60567],{"class":42,"line":162},[40,60568,5513],{"class":50},[40,60570,60571],{"class":42,"line":170},[40,60572,1413],{"emptyLinePlaceholder":1412},[40,60574,60575,60578],{"class":42,"line":183},[40,60576,60577],{"class":46},"    h2",[40,60579,18894],{"class":50},[40,60581,60582,60585,60587,60589],{"class":42,"line":196},[40,60583,60584],{"class":63},"      text-align",[40,60586,60],{"class":50},[40,60588,54890],{"class":63},[40,60590,4637],{"class":50},[40,60592,60593],{"class":42,"line":204},[40,60594,5513],{"class":50},[40,60596,60597],{"class":42,"line":217},[40,60598,1413],{"emptyLinePlaceholder":1412},[40,60600,60601,60603],{"class":42,"line":230},[40,60602,58050],{"class":596},[40,60604,18894],{"class":50},[40,60606,60607,60609,60611,60613,60615],{"class":42,"line":238},[40,60608,58069],{"class":63},[40,60610,60],{"class":50},[40,60612,4881],{"class":63},[40,60614,54790],{"class":1283},[40,60616,4637],{"class":50},[40,60618,60619,60621,60623,60625,60627,60629],{"class":42,"line":251},[40,60620,58004],{"class":63},[40,60622,60],{"class":50},[40,60624,4134],{"class":63},[40,60626,54790],{"class":1283},[40,60628,54854],{"class":63},[40,60630,4637],{"class":50},[40,60632,60633,60635,60637,60639],{"class":42,"line":264},[40,60634,58307],{"class":63},[40,60636,60],{"class":50},[40,60638,54775],{"class":63},[40,60640,4637],{"class":50},[40,60642,60643,60645,60647,60649,60651],{"class":42,"line":277},[40,60644,58220],{"class":63},[40,60646,60],{"class":50},[40,60648,4302],{"class":63},[40,60650,54790],{"class":1283},[40,60652,4637],{"class":50},[40,60654,60655,60658,60660,60662,60664],{"class":42,"line":290},[40,60656,60657],{"class":63},"      line-height",[40,60659,60],{"class":50},[40,60661,3880],{"class":63},[40,60663,54790],{"class":1283},[40,60665,4637],{"class":50},[40,60667,60668],{"class":42,"line":298},[40,60669,5513],{"class":50},[40,60671,60672],{"class":42,"line":310},[40,60673,1413],{"emptyLinePlaceholder":1412},[40,60675,60676,60679],{"class":42,"line":5086},[40,60677,60678],{"class":596},"    .qs",[40,60680,18894],{"class":50},[40,60682,60683],{"class":42,"line":5091},[40,60684,1413],{"emptyLinePlaceholder":1412},[40,60686,60687,60689,60691,60694,60696],{"class":42,"line":5105},[40,60688,58069],{"class":63},[40,60690,60],{"class":50},[40,60692,60693],{"class":63},"450",[40,60695,54790],{"class":1283},[40,60697,4637],{"class":50},[40,60699,60700,60702,60704,60706,60708],{"class":42,"line":5110},[40,60701,58083],{"class":63},[40,60703,60],{"class":50},[40,60705,3880],{"class":63},[40,60707,54790],{"class":1283},[40,60709,4637],{"class":50},[40,60711,60712,60715,60717,60720],{"class":42,"line":5902},[40,60713,60714],{"class":63},"      color",[40,60716,60],{"class":50},[40,60718,60719],{"class":63},"red",[40,60721,4637],{"class":50},[40,60723,60724],{"class":42,"line":5916},[40,60725,1413],{"emptyLinePlaceholder":1412},[40,60727,60728],{"class":42,"line":5924},[40,60729,5513],{"class":50},[40,60731,60732],{"class":42,"line":5929},[40,60733,1413],{"emptyLinePlaceholder":1412},[40,60735,60736,60739],{"class":42,"line":5935},[40,60737,60738],{"class":596},"    .btns",[40,60740,18894],{"class":50},[40,60742,60743,60745,60747,60749],{"class":42,"line":5941},[40,60744,60584],{"class":63},[40,60746,60],{"class":50},[40,60748,54890],{"class":63},[40,60750,4637],{"class":50},[40,60752,60753],{"class":42,"line":5946},[40,60754,5513],{"class":50},[40,60756,60757],{"class":42,"line":11270},[40,60758,1413],{"emptyLinePlaceholder":1412},[40,60760,60761,60763,60766],{"class":42,"line":11294},[40,60762,60738],{"class":596},[40,60764,60765],{"class":46}," button",[40,60767,18894],{"class":50},[40,60769,60770,60772,60774,60776,60778],{"class":42,"line":11299},[40,60771,58069],{"class":63},[40,60773,60],{"class":50},[40,60775,4294],{"class":63},[40,60777,54790],{"class":1283},[40,60779,4637],{"class":50},[40,60781,60782,60784,60786,60788,60790],{"class":42,"line":11305},[40,60783,58083],{"class":63},[40,60785,60],{"class":50},[40,60787,3753],{"class":63},[40,60789,54790],{"class":1283},[40,60791,4637],{"class":50},[40,60793,60794,60796,60798,60800,60803,60805],{"class":42,"line":11332},[40,60795,58004],{"class":63},[40,60797,60],{"class":50},[40,60799,3672],{"class":63},[40,60801,60802],{"class":63}," 50",[40,60804,54790],{"class":1283},[40,60806,4637],{"class":50},[40,60808,60809],{"class":42,"line":11337},[40,60810,5513],{"class":50},[40,60812,60813,60815,60817],{"class":42,"line":11343},[40,60814,55715],{"class":50},[40,60816,3384],{"class":46},[40,60818,54606],{"class":50},[40,60820,60821,60823,60825],{"class":42,"line":11355},[40,60822,55083],{"class":50},[40,60824,54633],{"class":46},[40,60826,54606],{"class":50},[40,60828,60829],{"class":42,"line":11367},[40,60830,1413],{"emptyLinePlaceholder":1412},[40,60832,60833,60835,60837],{"class":42,"line":11379},[40,60834,4387],{"class":50},[40,60836,55098],{"class":46},[40,60838,54606],{"class":50},[40,60840,60841,60843,60845,60848,60850],{"class":42,"line":13038},[40,60842,55442],{"class":50},[40,60844,14],{"class":46},[40,60846,60847],{"class":50},">随机点名\u003C\u002F",[40,60849,14],{"class":46},[40,60851,54606],{"class":50},[40,60853,60854,60856,60858,60860,60862,60864],{"class":42,"line":13063},[40,60855,55442],{"class":50},[40,60857,54909],{"class":46},[40,60859,56784],{"class":596},[40,60861,1284],{"class":50},[40,60863,56789],{"class":94},[40,60865,54606],{"class":50},[40,60867,60868,60870,60872,60875,60877],{"class":42,"line":13086},[40,60869,54640],{"class":50},[40,60871,40],{"class":46},[40,60873,60874],{"class":50},">名字是：\u003C\u002F",[40,60876,40],{"class":46},[40,60878,54606],{"class":50},[40,60880,60881,60883,60885,60887,60889,60892,60895,60897],{"class":42,"line":13110},[40,60882,54640],{"class":50},[40,60884,54909],{"class":46},[40,60886,56784],{"class":596},[40,60888,1284],{"class":50},[40,60890,60891],{"class":94},"\"qs\"",[40,60893,60894],{"class":50},">这里显示姓名\u003C\u002F",[40,60896,54909],{"class":46},[40,60898,54606],{"class":50},[40,60900,60901,60903,60905],{"class":42,"line":13115},[40,60902,55715],{"class":50},[40,60904,54909],{"class":46},[40,60906,54606],{"class":50},[40,60908,60909,60911,60913,60915,60917,60920],{"class":42,"line":13120},[40,60910,55442],{"class":50},[40,60912,54909],{"class":46},[40,60914,56784],{"class":596},[40,60916,1284],{"class":50},[40,60918,60919],{"class":94},"\"btns\"",[40,60921,54606],{"class":50},[40,60923,60924,60926,60928,60930,60932,60935,60938,60940],{"class":42,"line":13125},[40,60925,54640],{"class":50},[40,60927,57185],{"class":46},[40,60929,56784],{"class":596},[40,60931,1284],{"class":50},[40,60933,60934],{"class":94},"\"start\"",[40,60936,60937],{"class":50},">开始\u003C\u002F",[40,60939,57185],{"class":46},[40,60941,54606],{"class":50},[40,60943,60944,60946,60948,60950,60952,60955,60958,60960],{"class":42,"line":13134},[40,60945,54640],{"class":50},[40,60947,57185],{"class":46},[40,60949,56784],{"class":596},[40,60951,1284],{"class":50},[40,60953,60954],{"class":94},"\"end\"",[40,60956,60957],{"class":50},">结束\u003C\u002F",[40,60959,57185],{"class":46},[40,60961,54606],{"class":50},[40,60963,60964,60966,60968],{"class":42,"line":13139},[40,60965,55715],{"class":50},[40,60967,54909],{"class":46},[40,60969,54606],{"class":50},[40,60971,60972],{"class":42,"line":13145},[40,60973,1413],{"emptyLinePlaceholder":1412},[40,60975,60976,60978,60980],{"class":42,"line":13166},[40,60977,55442],{"class":50},[40,60979,55111],{"class":46},[40,60981,54606],{"class":50},[40,60983,60984],{"class":42,"line":13172},[40,60985,60986],{"class":997},"    \u002F\u002F 数据数组\n",[40,60988,60989,60991,60994,60996,60998,61001,61003,61006,61008,61011,61013,61016,61018,61021],{"class":42,"line":13186},[40,60990,14543],{"class":1283},[40,60992,60993],{"class":63}," arr",[40,60995,16886],{"class":1283},[40,60997,55524],{"class":50},[40,60999,61000],{"class":94},"'马超'",[40,61002,15757],{"class":50},[40,61004,61005],{"class":94},"'黄忠'",[40,61007,15757],{"class":50},[40,61009,61010],{"class":94},"'赵云'",[40,61012,15757],{"class":50},[40,61014,61015],{"class":94},"'关羽'",[40,61017,15757],{"class":50},[40,61019,61020],{"class":94},"'张飞'",[40,61022,36546],{"class":50},[40,61024,61025,61027,61030,61032,61034,61036,61038,61041],{"class":42,"line":13192},[40,61026,14543],{"class":1283},[40,61028,61029],{"class":63}," qs",[40,61031,16886],{"class":1283},[40,61033,57694],{"class":50},[40,61035,57697],{"class":596},[40,61037,3488],{"class":50},[40,61039,61040],{"class":94},"'.qs'",[40,61042,1811],{"class":50},[40,61044,61045],{"class":42,"line":13219},[40,61046,61047],{"class":997},"    \u002F\u002F 1.业务1.开始按钮模块\n",[40,61049,61050,61052,61054,61056,61058,61060,61062,61065],{"class":42,"line":13228},[40,61051,14543],{"class":1283},[40,61053,7507],{"class":63},[40,61055,16886],{"class":1283},[40,61057,57694],{"class":50},[40,61059,57697],{"class":596},[40,61061,3488],{"class":50},[40,61063,61064],{"class":94},"'.start'",[40,61066,1811],{"class":50},[40,61068,61069],{"class":42,"line":13234},[40,61070,61071],{"class":997},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[40,61073,61074,61076,61079,61081],{"class":42,"line":13242},[40,61075,55517],{"class":1283},[40,61077,61078],{"class":50}," timerId ",[40,61080,1284],{"class":1283},[40,61082,50633],{"class":63},[40,61084,61085],{"class":42,"line":13247},[40,61086,61087],{"class":997},"    \u002F\u002F 随机号要全局变量\n",[40,61089,61090,61092,61095,61097],{"class":42,"line":19926},[40,61091,55517],{"class":1283},[40,61093,61094],{"class":50}," random ",[40,61096,1284],{"class":1283},[40,61098,50633],{"class":63},[40,61100,61101],{"class":42,"line":19932},[40,61102,61103],{"class":997},"    \u002F\u002F 1.1 添加点击事件\n",[40,61105,61106,61109,61112,61114,61117,61119,61121],{"class":42,"line":19955},[40,61107,61108],{"class":50},"    start.",[40,61110,61111],{"class":596},"addEventListener",[40,61113,3488],{"class":50},[40,61115,61116],{"class":94},"'click'",[40,61118,15757],{"class":50},[40,61120,57747],{"class":1283},[40,61122,57750],{"class":50},[40,61124,61125,61128,61130,61132,61134,61136],{"class":42,"line":19961},[40,61126,61127],{"class":50},"      timerId ",[40,61129,1284],{"class":1283},[40,61131,57742],{"class":596},[40,61133,3488],{"class":50},[40,61135,57747],{"class":1283},[40,61137,57750],{"class":50},[40,61139,61140],{"class":42,"line":19984},[40,61141,61142],{"class":997},"        \u002F\u002F 随机数\n",[40,61144,61145,61148,61150,61153,61156,61159,61161,61163,61165,61167],{"class":42,"line":19998},[40,61146,61147],{"class":50},"        random ",[40,61149,1284],{"class":1283},[40,61151,61152],{"class":596}," parseInt",[40,61154,61155],{"class":50},"(Math.",[40,61157,61158],{"class":596},"random",[40,61160,16372],{"class":50},[40,61162,3934],{"class":1283},[40,61164,55263],{"class":50},[40,61166,55266],{"class":63},[40,61168,1811],{"class":50},[40,61170,61171,61174,61176],{"class":42,"line":20018},[40,61172,61173],{"class":50},"        qs.innerHTML ",[40,61175,1284],{"class":1283},[40,61177,61178],{"class":50}," arr[random]\n",[40,61180,61181,61184,61186],{"class":42,"line":20024},[40,61182,61183],{"class":50},"      }, ",[40,61185,3753],{"class":63},[40,61187,1811],{"class":50},[40,61189,61190],{"class":42,"line":20035},[40,61191,61192],{"class":997},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[40,61194,61195,61197,61200,61202,61205,61207],{"class":42,"line":20058},[40,61196,57778],{"class":1283},[40,61198,61199],{"class":50}," (arr.",[40,61201,55266],{"class":63},[40,61203,61204],{"class":1283}," ===",[40,61206,28431],{"class":63},[40,61208,15764],{"class":50},[40,61210,61211],{"class":42,"line":20080},[40,61212,61213],{"class":997},"        \u002F\u002F start.disabled = true\n",[40,61215,61216],{"class":42,"line":20085},[40,61217,61218],{"class":997},"        \u002F\u002F end.disabled = true\n",[40,61220,61221],{"class":42,"line":20091},[40,61222,61223],{"class":997},"        \u002F\u002F 可以合起来写\n",[40,61225,61226,61229,61231,61234,61236],{"class":42,"line":20105},[40,61227,61228],{"class":50},"        start.disabled ",[40,61230,1284],{"class":1283},[40,61232,61233],{"class":50}," end.disabled ",[40,61235,1284],{"class":1283},[40,61237,61238],{"class":63}," true\n",[40,61240,61241],{"class":42,"line":20118},[40,61242,55696],{"class":50},[40,61244,61245],{"class":42,"line":20123},[40,61246,36761],{"class":50},[40,61248,61249],{"class":42,"line":20137},[40,61250,61251],{"class":997},"    \u002F\u002F 1.2 关闭按钮模块\n",[40,61253,61254,61256,61258,61260,61262,61264,61266,61269],{"class":42,"line":20142},[40,61255,14543],{"class":1283},[40,61257,7523],{"class":63},[40,61259,16886],{"class":1283},[40,61261,57694],{"class":50},[40,61263,57697],{"class":596},[40,61265,3488],{"class":50},[40,61267,61268],{"class":94},"'.end'",[40,61270,1811],{"class":50},[40,61272,61273,61276,61278,61280,61282,61284,61286],{"class":42,"line":20148},[40,61274,61275],{"class":50},"    end.",[40,61277,61111],{"class":596},[40,61279,3488],{"class":50},[40,61281,61116],{"class":94},[40,61283,15757],{"class":50},[40,61285,57747],{"class":1283},[40,61287,57750],{"class":50},[40,61289,61290,61293],{"class":42,"line":20153},[40,61291,61292],{"class":596},"      clearInterval",[40,61294,61295],{"class":50},"(timerId)\n",[40,61297,61298],{"class":42,"line":20167},[40,61299,61300],{"class":997},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[40,61302,61303,61306,61309,61312,61314],{"class":42,"line":20172},[40,61304,61305],{"class":50},"      arr.",[40,61307,61308],{"class":596},"splice",[40,61310,61311],{"class":50},"(random, ",[40,61313,3698],{"class":63},[40,61315,1811],{"class":50},[40,61317,61318],{"class":42,"line":20177},[40,61319,36761],{"class":50},[40,61321,61322],{"class":42,"line":20191},[40,61323,1413],{"emptyLinePlaceholder":1412},[40,61325,61326,61328,61330],{"class":42,"line":20203},[40,61327,55715],{"class":50},[40,61329,55111],{"class":46},[40,61331,54606],{"class":50},[40,61333,61334,61336,61338],{"class":42,"line":20208},[40,61335,55083],{"class":50},[40,61337,55098],{"class":46},[40,61339,54606],{"class":50},[40,61341,61342],{"class":42,"line":20221},[40,61343,1413],{"emptyLinePlaceholder":1412},[40,61345,61346,61348,61350],{"class":42,"line":20226},[40,61347,55083],{"class":50},[40,61349,53935],{"class":46},[40,61351,54606],{"class":50},[19,61353,61354],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[402,61356,61358],{"id":61357},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[31,61360,61362],{"className":53933,"code":61361,"language":53935,"meta":36,"style":36},"\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",[26,61363,61364,61374,61388,61392,61400,61414,61434,61446,61454,61458,61466,61478,61486,61505,61522,61538,61548,61552,61560,61568,61572],{"__ignoreMap":36},[40,61365,61366,61368,61370,61372],{"class":42,"line":43},[40,61367,54597],{"class":50},[40,61369,54600],{"class":46},[40,61371,54603],{"class":596},[40,61373,54606],{"class":50},[40,61375,61376,61378,61380,61382,61384,61386],{"class":42,"line":54},[40,61377,4387],{"class":50},[40,61379,53935],{"class":46},[40,61381,54615],{"class":596},[40,61383,1284],{"class":50},[40,61385,54620],{"class":94},[40,61387,54606],{"class":50},[40,61389,61390],{"class":42,"line":70},[40,61391,1413],{"emptyLinePlaceholder":1412},[40,61393,61394,61396,61398],{"class":42,"line":78},[40,61395,4387],{"class":50},[40,61397,54633],{"class":46},[40,61399,54606],{"class":50},[40,61401,61402,61404,61406,61408,61410,61412],{"class":42,"line":86},[40,61403,55442],{"class":50},[40,61405,54643],{"class":46},[40,61407,54646],{"class":596},[40,61409,1284],{"class":50},[40,61411,54651],{"class":94},[40,61413,54606],{"class":50},[40,61415,61416,61418,61420,61422,61424,61426,61428,61430,61432],{"class":42,"line":100},[40,61417,55442],{"class":50},[40,61419,54643],{"class":46},[40,61421,18242],{"class":596},[40,61423,1284],{"class":50},[40,61425,54690],{"class":94},[40,61427,54670],{"class":596},[40,61429,1284],{"class":50},[40,61431,54697],{"class":94},[40,61433,54606],{"class":50},[40,61435,61436,61438,61440,61442,61444],{"class":42,"line":108},[40,61437,55442],{"class":50},[40,61439,54706],{"class":46},[40,61441,54709],{"class":50},[40,61443,54706],{"class":46},[40,61445,54606],{"class":50},[40,61447,61448,61450,61452],{"class":42,"line":121},[40,61449,55083],{"class":50},[40,61451,54633],{"class":46},[40,61453,54606],{"class":50},[40,61455,61456],{"class":42,"line":134},[40,61457,1413],{"emptyLinePlaceholder":1412},[40,61459,61460,61462,61464],{"class":42,"line":146},[40,61461,4387],{"class":50},[40,61463,55098],{"class":46},[40,61465,54606],{"class":50},[40,61467,61468,61470,61472,61474,61476],{"class":42,"line":154},[40,61469,55442],{"class":50},[40,61471,57185],{"class":46},[40,61473,57191],{"class":50},[40,61475,57185],{"class":46},[40,61477,54606],{"class":50},[40,61479,61480,61482,61484],{"class":42,"line":162},[40,61481,55442],{"class":50},[40,61483,55111],{"class":46},[40,61485,54606],{"class":50},[40,61487,61488,61490,61492,61494,61496,61498,61500,61503],{"class":42,"line":170},[40,61489,14543],{"class":1283},[40,61491,57689],{"class":63},[40,61493,16886],{"class":1283},[40,61495,57694],{"class":50},[40,61497,57697],{"class":596},[40,61499,3488],{"class":50},[40,61501,61502],{"class":94},"'button'",[40,61504,1811],{"class":50},[40,61506,61507,61510,61512,61514,61516,61518,61520],{"class":42,"line":183},[40,61508,61509],{"class":50},"    btn.",[40,61511,61111],{"class":596},[40,61513,3488],{"class":50},[40,61515,61116],{"class":94},[40,61517,15757],{"class":50},[40,61519,57747],{"class":1283},[40,61521,57750],{"class":50},[40,61523,61524,61527,61529,61531,61534,61536],{"class":42,"line":196},[40,61525,61526],{"class":1283},"      const",[40,61528,5566],{"class":63},[40,61530,16886],{"class":1283},[40,61532,61533],{"class":50}," Math.",[40,61535,61158],{"class":596},[40,61537,5302],{"class":50},[40,61539,61540,61543,61546],{"class":42,"line":204},[40,61541,61542],{"class":50},"      console.",[40,61544,61545],{"class":596},"log",[40,61547,3500],{"class":50},[40,61549,61550],{"class":42,"line":217},[40,61551,36761],{"class":50},[40,61553,61554,61556,61558],{"class":42,"line":230},[40,61555,55715],{"class":50},[40,61557,55111],{"class":46},[40,61559,54606],{"class":50},[40,61561,61562,61564,61566],{"class":42,"line":238},[40,61563,55083],{"class":50},[40,61565,55098],{"class":46},[40,61567,54606],{"class":50},[40,61569,61570],{"class":42,"line":251},[40,61571,1413],{"emptyLinePlaceholder":1412},[40,61573,61574,61576,61578],{"class":42,"line":264},[40,61575,55083],{"class":50},[40,61577,53935],{"class":46},[40,61579,54606],{"class":50},[19,61581,61582],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,61584,61585],{},"常量不可以重新赋值",[19,61587,61588],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[31,61590,61592],{"className":53933,"code":61591,"language":53935,"meta":36,"style":36},"\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",[26,61593,61594,61604,61618,61622,61630,61644,61664,61676,61684,61688,61696,61708,61716,61727,61745,61761,61775,61783,61787,61795,61803,61807],{"__ignoreMap":36},[40,61595,61596,61598,61600,61602],{"class":42,"line":43},[40,61597,54597],{"class":50},[40,61599,54600],{"class":46},[40,61601,54603],{"class":596},[40,61603,54606],{"class":50},[40,61605,61606,61608,61610,61612,61614,61616],{"class":42,"line":54},[40,61607,4387],{"class":50},[40,61609,53935],{"class":46},[40,61611,54615],{"class":596},[40,61613,1284],{"class":50},[40,61615,54620],{"class":94},[40,61617,54606],{"class":50},[40,61619,61620],{"class":42,"line":70},[40,61621,1413],{"emptyLinePlaceholder":1412},[40,61623,61624,61626,61628],{"class":42,"line":78},[40,61625,4387],{"class":50},[40,61627,54633],{"class":46},[40,61629,54606],{"class":50},[40,61631,61632,61634,61636,61638,61640,61642],{"class":42,"line":86},[40,61633,55442],{"class":50},[40,61635,54643],{"class":46},[40,61637,54646],{"class":596},[40,61639,1284],{"class":50},[40,61641,54651],{"class":94},[40,61643,54606],{"class":50},[40,61645,61646,61648,61650,61652,61654,61656,61658,61660,61662],{"class":42,"line":100},[40,61647,55442],{"class":50},[40,61649,54643],{"class":46},[40,61651,18242],{"class":596},[40,61653,1284],{"class":50},[40,61655,54690],{"class":94},[40,61657,54670],{"class":596},[40,61659,1284],{"class":50},[40,61661,54697],{"class":94},[40,61663,54606],{"class":50},[40,61665,61666,61668,61670,61672,61674],{"class":42,"line":108},[40,61667,55442],{"class":50},[40,61669,54706],{"class":46},[40,61671,54709],{"class":50},[40,61673,54706],{"class":46},[40,61675,54606],{"class":50},[40,61677,61678,61680,61682],{"class":42,"line":121},[40,61679,55083],{"class":50},[40,61681,54633],{"class":46},[40,61683,54606],{"class":50},[40,61685,61686],{"class":42,"line":134},[40,61687,1413],{"emptyLinePlaceholder":1412},[40,61689,61690,61692,61694],{"class":42,"line":146},[40,61691,4387],{"class":50},[40,61693,55098],{"class":46},[40,61695,54606],{"class":50},[40,61697,61698,61700,61702,61704,61706],{"class":42,"line":154},[40,61699,55442],{"class":50},[40,61701,57185],{"class":46},[40,61703,57191],{"class":50},[40,61705,57185],{"class":46},[40,61707,54606],{"class":50},[40,61709,61710,61712,61714],{"class":42,"line":162},[40,61711,55442],{"class":50},[40,61713,55111],{"class":46},[40,61715,54606],{"class":50},[40,61717,61718,61720,61722,61724],{"class":42,"line":170},[40,61719,14543],{"class":1283},[40,61721,5566],{"class":63},[40,61723,16886],{"class":1283},[40,61725,61726],{"class":63}," 10\n",[40,61728,61729,61731,61733,61735,61737,61739,61741,61743],{"class":42,"line":183},[40,61730,14543],{"class":1283},[40,61732,57689],{"class":63},[40,61734,16886],{"class":1283},[40,61736,57694],{"class":50},[40,61738,57697],{"class":596},[40,61740,3488],{"class":50},[40,61742,61502],{"class":94},[40,61744,1811],{"class":50},[40,61746,61747,61749,61751,61753,61755,61757,61759],{"class":42,"line":196},[40,61748,61509],{"class":50},[40,61750,61111],{"class":596},[40,61752,3488],{"class":50},[40,61754,61116],{"class":94},[40,61756,15757],{"class":50},[40,61758,57747],{"class":1283},[40,61760,57750],{"class":50},[40,61762,61763,61765,61767,61769,61771,61773],{"class":42,"line":204},[40,61764,61526],{"class":1283},[40,61766,5566],{"class":63},[40,61768,16886],{"class":1283},[40,61770,61533],{"class":50},[40,61772,61158],{"class":596},[40,61774,5302],{"class":50},[40,61776,61777,61779,61781],{"class":42,"line":217},[40,61778,61542],{"class":50},[40,61780,61545],{"class":596},[40,61782,3500],{"class":50},[40,61784,61785],{"class":42,"line":230},[40,61786,36761],{"class":50},[40,61788,61789,61791,61793],{"class":42,"line":238},[40,61790,55715],{"class":50},[40,61792,55111],{"class":46},[40,61794,54606],{"class":50},[40,61796,61797,61799,61801],{"class":42,"line":251},[40,61798,55083],{"class":50},[40,61800,55098],{"class":46},[40,61802,54606],{"class":50},[40,61804,61805],{"class":42,"line":264},[40,61806,1413],{"emptyLinePlaceholder":1412},[40,61808,61809,61811,61813],{"class":42,"line":277},[40,61810,55083],{"class":50},[40,61812,53935],{"class":46},[40,61814,54606],{"class":50},[19,61816,61817],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[31,61819,61821],{"className":53933,"code":61820,"language":53935,"meta":36,"style":36},"\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",[26,61822,61823,61833,61847,61851,61859,61873,61893,61905,61913,61917,61925,61937,61945,61955,61973,61989,62002,62010,62014,62022,62030,62034],{"__ignoreMap":36},[40,61824,61825,61827,61829,61831],{"class":42,"line":43},[40,61826,54597],{"class":50},[40,61828,54600],{"class":46},[40,61830,54603],{"class":596},[40,61832,54606],{"class":50},[40,61834,61835,61837,61839,61841,61843,61845],{"class":42,"line":54},[40,61836,4387],{"class":50},[40,61838,53935],{"class":46},[40,61840,54615],{"class":596},[40,61842,1284],{"class":50},[40,61844,54620],{"class":94},[40,61846,54606],{"class":50},[40,61848,61849],{"class":42,"line":70},[40,61850,1413],{"emptyLinePlaceholder":1412},[40,61852,61853,61855,61857],{"class":42,"line":78},[40,61854,4387],{"class":50},[40,61856,54633],{"class":46},[40,61858,54606],{"class":50},[40,61860,61861,61863,61865,61867,61869,61871],{"class":42,"line":86},[40,61862,55442],{"class":50},[40,61864,54643],{"class":46},[40,61866,54646],{"class":596},[40,61868,1284],{"class":50},[40,61870,54651],{"class":94},[40,61872,54606],{"class":50},[40,61874,61875,61877,61879,61881,61883,61885,61887,61889,61891],{"class":42,"line":100},[40,61876,55442],{"class":50},[40,61878,54643],{"class":46},[40,61880,18242],{"class":596},[40,61882,1284],{"class":50},[40,61884,54690],{"class":94},[40,61886,54670],{"class":596},[40,61888,1284],{"class":50},[40,61890,54697],{"class":94},[40,61892,54606],{"class":50},[40,61894,61895,61897,61899,61901,61903],{"class":42,"line":108},[40,61896,55442],{"class":50},[40,61898,54706],{"class":46},[40,61900,54709],{"class":50},[40,61902,54706],{"class":46},[40,61904,54606],{"class":50},[40,61906,61907,61909,61911],{"class":42,"line":121},[40,61908,55083],{"class":50},[40,61910,54633],{"class":46},[40,61912,54606],{"class":50},[40,61914,61915],{"class":42,"line":134},[40,61916,1413],{"emptyLinePlaceholder":1412},[40,61918,61919,61921,61923],{"class":42,"line":146},[40,61920,4387],{"class":50},[40,61922,55098],{"class":46},[40,61924,54606],{"class":50},[40,61926,61927,61929,61931,61933,61935],{"class":42,"line":154},[40,61928,55442],{"class":50},[40,61930,57185],{"class":46},[40,61932,57191],{"class":50},[40,61934,57185],{"class":46},[40,61936,54606],{"class":50},[40,61938,61939,61941,61943],{"class":42,"line":162},[40,61940,55442],{"class":50},[40,61942,55111],{"class":46},[40,61944,54606],{"class":50},[40,61946,61947,61949,61951,61953],{"class":42,"line":170},[40,61948,14543],{"class":1283},[40,61950,5566],{"class":63},[40,61952,16886],{"class":1283},[40,61954,61726],{"class":63},[40,61956,61957,61959,61961,61963,61965,61967,61969,61971],{"class":42,"line":183},[40,61958,14543],{"class":1283},[40,61960,57689],{"class":63},[40,61962,16886],{"class":1283},[40,61964,57694],{"class":50},[40,61966,57697],{"class":596},[40,61968,3488],{"class":50},[40,61970,61502],{"class":94},[40,61972,1811],{"class":50},[40,61974,61975,61977,61979,61981,61983,61985,61987],{"class":42,"line":196},[40,61976,61509],{"class":50},[40,61978,61111],{"class":596},[40,61980,3488],{"class":50},[40,61982,61116],{"class":94},[40,61984,15757],{"class":50},[40,61986,57747],{"class":1283},[40,61988,57750],{"class":50},[40,61990,61991,61994,61996,61998,62000],{"class":42,"line":204},[40,61992,61993],{"class":50},"      num ",[40,61995,1284],{"class":1283},[40,61997,61533],{"class":50},[40,61999,61158],{"class":596},[40,62001,5302],{"class":50},[40,62003,62004,62006,62008],{"class":42,"line":217},[40,62005,61542],{"class":50},[40,62007,61545],{"class":596},[40,62009,3500],{"class":50},[40,62011,62012],{"class":42,"line":230},[40,62013,36761],{"class":50},[40,62015,62016,62018,62020],{"class":42,"line":238},[40,62017,55715],{"class":50},[40,62019,55111],{"class":46},[40,62021,54606],{"class":50},[40,62023,62024,62026,62028],{"class":42,"line":251},[40,62025,55083],{"class":50},[40,62027,55098],{"class":46},[40,62029,54606],{"class":50},[40,62031,62032],{"class":42,"line":264},[40,62033,1413],{"emptyLinePlaceholder":1412},[40,62035,62036,62038,62040],{"class":42,"line":277},[40,62037,55083],{"class":50},[40,62039,53935],{"class":46},[40,62041,54606],{"class":50},[19,62043,62044],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[402,62046,62048],{"id":62047},"_324-事件监听版本","3.2.4 事件监听版本",[19,62050,62051],{},[438,62052],{"alt":36,"src":62053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,62055,62056],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,62058,62059],{},"这种方式会覆盖前边的事件监听:",[31,62061,62063],{"className":53933,"code":62062,"language":53935,"meta":36,"style":36},"\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",[26,62064,62065,62075,62089,62093,62101,62115,62135,62147,62155,62159,62167,62179,62187,62205,62219,62230,62234,62246,62256,62260,62268,62276,62280],{"__ignoreMap":36},[40,62066,62067,62069,62071,62073],{"class":42,"line":43},[40,62068,54597],{"class":50},[40,62070,54600],{"class":46},[40,62072,54603],{"class":596},[40,62074,54606],{"class":50},[40,62076,62077,62079,62081,62083,62085,62087],{"class":42,"line":54},[40,62078,4387],{"class":50},[40,62080,53935],{"class":46},[40,62082,54615],{"class":596},[40,62084,1284],{"class":50},[40,62086,54620],{"class":94},[40,62088,54606],{"class":50},[40,62090,62091],{"class":42,"line":70},[40,62092,1413],{"emptyLinePlaceholder":1412},[40,62094,62095,62097,62099],{"class":42,"line":78},[40,62096,4387],{"class":50},[40,62098,54633],{"class":46},[40,62100,54606],{"class":50},[40,62102,62103,62105,62107,62109,62111,62113],{"class":42,"line":86},[40,62104,55442],{"class":50},[40,62106,54643],{"class":46},[40,62108,54646],{"class":596},[40,62110,1284],{"class":50},[40,62112,54651],{"class":94},[40,62114,54606],{"class":50},[40,62116,62117,62119,62121,62123,62125,62127,62129,62131,62133],{"class":42,"line":100},[40,62118,55442],{"class":50},[40,62120,54643],{"class":46},[40,62122,18242],{"class":596},[40,62124,1284],{"class":50},[40,62126,54690],{"class":94},[40,62128,54670],{"class":596},[40,62130,1284],{"class":50},[40,62132,54697],{"class":94},[40,62134,54606],{"class":50},[40,62136,62137,62139,62141,62143,62145],{"class":42,"line":108},[40,62138,55442],{"class":50},[40,62140,54706],{"class":46},[40,62142,54709],{"class":50},[40,62144,54706],{"class":46},[40,62146,54606],{"class":50},[40,62148,62149,62151,62153],{"class":42,"line":121},[40,62150,55083],{"class":50},[40,62152,54633],{"class":46},[40,62154,54606],{"class":50},[40,62156,62157],{"class":42,"line":134},[40,62158,1413],{"emptyLinePlaceholder":1412},[40,62160,62161,62163,62165],{"class":42,"line":146},[40,62162,4387],{"class":50},[40,62164,55098],{"class":46},[40,62166,54606],{"class":50},[40,62168,62169,62171,62173,62175,62177],{"class":42,"line":154},[40,62170,55442],{"class":50},[40,62172,57185],{"class":46},[40,62174,57191],{"class":50},[40,62176,57185],{"class":46},[40,62178,54606],{"class":50},[40,62180,62181,62183,62185],{"class":42,"line":162},[40,62182,55442],{"class":50},[40,62184,55111],{"class":46},[40,62186,54606],{"class":50},[40,62188,62189,62191,62193,62195,62197,62199,62201,62203],{"class":42,"line":170},[40,62190,14543],{"class":1283},[40,62192,57689],{"class":63},[40,62194,16886],{"class":1283},[40,62196,57694],{"class":50},[40,62198,57697],{"class":596},[40,62200,3488],{"class":50},[40,62202,61502],{"class":94},[40,62204,1811],{"class":50},[40,62206,62207,62209,62212,62214,62217],{"class":42,"line":183},[40,62208,61509],{"class":50},[40,62210,62211],{"class":596},"onclick",[40,62213,16886],{"class":1283},[40,62215,62216],{"class":1283}," function",[40,62218,57750],{"class":50},[40,62220,62221,62224,62226,62228],{"class":42,"line":196},[40,62222,62223],{"class":596},"      alert",[40,62225,3488],{"class":50},[40,62227,3951],{"class":63},[40,62229,1811],{"class":50},[40,62231,62232],{"class":42,"line":204},[40,62233,5513],{"class":50},[40,62235,62236,62238,62240,62242,62244],{"class":42,"line":217},[40,62237,61509],{"class":50},[40,62239,62211],{"class":596},[40,62241,16886],{"class":1283},[40,62243,62216],{"class":1283},[40,62245,57750],{"class":50},[40,62247,62248,62250,62252,62254],{"class":42,"line":230},[40,62249,62223],{"class":596},[40,62251,3488],{"class":50},[40,62253,4228],{"class":63},[40,62255,1811],{"class":50},[40,62257,62258],{"class":42,"line":238},[40,62259,5513],{"class":50},[40,62261,62262,62264,62266],{"class":42,"line":251},[40,62263,55715],{"class":50},[40,62265,55111],{"class":46},[40,62267,54606],{"class":50},[40,62269,62270,62272,62274],{"class":42,"line":264},[40,62271,55083],{"class":50},[40,62273,55098],{"class":46},[40,62275,54606],{"class":50},[40,62277,62278],{"class":42,"line":277},[40,62279,1413],{"emptyLinePlaceholder":1412},[40,62281,62282,62284,62286],{"class":42,"line":290},[40,62283,55083],{"class":50},[40,62285,53935],{"class":46},[40,62287,54606],{"class":50},[19,62289,62290],{},"只要点击就输出结果为22,前边11被覆盖了",[31,62292,62294],{"className":53933,"code":62293,"language":53935,"meta":36,"style":36},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[26,62295,62296,62301,62306,62310,62315,62320],{"__ignoreMap":36},[40,62297,62298],{"class":42,"line":43},[40,62299,62300],{"class":50},"  btn.addEventListener('click', function () {\n",[40,62302,62303],{"class":42,"line":54},[40,62304,62305],{"class":50},"      alert(11)\n",[40,62307,62308],{"class":42,"line":70},[40,62309,36761],{"class":50},[40,62311,62312],{"class":42,"line":78},[40,62313,62314],{"class":50},"    btn.addEventListener('click', function () {\n",[40,62316,62317],{"class":42,"line":86},[40,62318,62319],{"class":50},"      alert(22)\n",[40,62321,62322],{"class":42,"line":100},[40,62323,36761],{"class":50},[19,62325,62326],{},"点击第一次输出11,第二次点击为22",[402,62328,62330],{"id":62329},"_325-事件类型","3.2.5 事件类型",[19,62332,62333],{},[438,62334],{"alt":36,"src":62335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[2423,62337,62339],{"id":62338},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,62341,62342],{},"补充知识:",[19,62344,62345],{},"轮播图自动播放模块,可以使用",[19,62347,62348],{},"let timerId = setInterval(function () {",[19,62350,62351],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,62353,62354],{},"用js方法模拟进行点击事件,click必须加()",[19,62356,62357],{},"next.click()",[19,62359,62360],{},"}, 1000)",[19,62362,62363],{},[438,62364],{"alt":36,"src":62365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[31,62367,62369],{"className":56365,"code":62368,"language":56367,"meta":36,"style":36},"\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",[26,62370,62371,62375,62385,62399,62403,62411,62426,62446,62466,62479,62487,62492,62497,62501,62505,62510,62515,62520,62525,62529,62533,62538,62543,62548,62552,62556,62561,62565,62570,62575,62579,62583,62588,62593,62598,62603,62608,62612,62616,62621,62626,62631,62636,62641,62645,62649,62654,62659,62664,62669,62674,62679,62684,62689,62694,62699,62703,62707,62712,62717,62721,62725,62730,62735,62739,62744,62749,62753,62757,62762,62766,62771,62776,62780,62785,62789,62793,62798,62803,62808,62813,62818,62823,62828,62832,62836,62840,62845,62850,62855,62860,62864,62872,62880,62884,62892,62907,62921,62942,62950,62964,62977,62992,63011,63023,63035,63047,63059,63071,63083,63095,63103,63118,63142,63166,63174,63182,63190,63198,63203,63208,63213,63218,63223,63228,63233,63238,63243,63248,63252,63257,63262,63267,63272,63277,63282,63287,63292,63297,63301,63306,63311,63316,63321,63326,63331,63336,63341,63346,63351,63356,63361,63365,63369,63374,63379,63384,63388,63393,63398,63403,63408,63413,63417,63422,63426,63430,63434,63438,63442,63446,63451,63456,63461,63466,63471,63476,63481,63486,63491,63495,63499,63504,63509,63514,63519,63524,63528,63533,63538,63543,63548,63553,63558,63562,63566,63571,63575,63580,63584,63589,63594,63599,63604,63609,63614,63618,63626,63634,63638],{"__ignoreMap":36},[40,62372,62373],{"class":42,"line":43},[40,62374,1413],{"emptyLinePlaceholder":1412},[40,62376,62377,62379,62381,62383],{"class":42,"line":54},[40,62378,54597],{"class":50},[40,62380,54600],{"class":1283},[40,62382,54603],{"class":63},[40,62384,54606],{"class":50},[40,62386,62387,62389,62391,62393,62395,62397],{"class":42,"line":70},[40,62388,4387],{"class":50},[40,62390,53935],{"class":46},[40,62392,54615],{"class":596},[40,62394,1284],{"class":50},[40,62396,54620],{"class":94},[40,62398,54606],{"class":50},[40,62400,62401],{"class":42,"line":78},[40,62402,1413],{"emptyLinePlaceholder":1412},[40,62404,62405,62407,62409],{"class":42,"line":86},[40,62406,4387],{"class":50},[40,62408,54633],{"class":46},[40,62410,54606],{"class":50},[40,62412,62413,62415,62417,62419,62421,62423],{"class":42,"line":100},[40,62414,55442],{"class":50},[40,62416,54643],{"class":46},[40,62418,54646],{"class":596},[40,62420,1284],{"class":50},[40,62422,54651],{"class":94},[40,62424,62425],{"class":50}," \u002F>\n",[40,62427,62428,62430,62432,62434,62436,62438,62440,62442,62444],{"class":42,"line":108},[40,62429,55442],{"class":50},[40,62431,54643],{"class":46},[40,62433,54662],{"class":596},[40,62435,1284],{"class":50},[40,62437,54667],{"class":94},[40,62439,54670],{"class":596},[40,62441,1284],{"class":50},[40,62443,54675],{"class":94},[40,62445,62425],{"class":50},[40,62447,62448,62450,62452,62454,62456,62458,62460,62462,62464],{"class":42,"line":121},[40,62449,55442],{"class":50},[40,62451,54643],{"class":46},[40,62453,18242],{"class":596},[40,62455,1284],{"class":50},[40,62457,54690],{"class":94},[40,62459,54670],{"class":596},[40,62461,1284],{"class":50},[40,62463,54697],{"class":94},[40,62465,62425],{"class":50},[40,62467,62468,62470,62472,62475,62477],{"class":42,"line":134},[40,62469,55442],{"class":50},[40,62471,54706],{"class":46},[40,62473,62474],{"class":50},">轮播图点击切换\u003C\u002F",[40,62476,54706],{"class":46},[40,62478,54606],{"class":50},[40,62480,62481,62483,62485],{"class":42,"line":146},[40,62482,55442],{"class":50},[40,62484,3384],{"class":46},[40,62486,54606],{"class":50},[40,62488,62489],{"class":42,"line":154},[40,62490,62491],{"class":50},"    * {\n",[40,62493,62494],{"class":42,"line":162},[40,62495,62496],{"class":50},"      box-sizing: border-box;\n",[40,62498,62499],{"class":42,"line":170},[40,62500,5513],{"class":50},[40,62502,62503],{"class":42,"line":183},[40,62504,1413],{"emptyLinePlaceholder":1412},[40,62506,62507],{"class":42,"line":196},[40,62508,62509],{"class":50},"    .slider {\n",[40,62511,62512],{"class":42,"line":204},[40,62513,62514],{"class":50},"      width: 560px;\n",[40,62516,62517],{"class":42,"line":217},[40,62518,62519],{"class":50},"      height: 400px;\n",[40,62521,62522],{"class":42,"line":230},[40,62523,62524],{"class":50},"      overflow: hidden;\n",[40,62526,62527],{"class":42,"line":238},[40,62528,5513],{"class":50},[40,62530,62531],{"class":42,"line":251},[40,62532,1413],{"emptyLinePlaceholder":1412},[40,62534,62535],{"class":42,"line":264},[40,62536,62537],{"class":50},"    .slider-wrapper {\n",[40,62539,62540],{"class":42,"line":277},[40,62541,62542],{"class":50},"      width: 100%;\n",[40,62544,62545],{"class":42,"line":290},[40,62546,62547],{"class":50},"      height: 320px;\n",[40,62549,62550],{"class":42,"line":298},[40,62551,5513],{"class":50},[40,62553,62554],{"class":42,"line":310},[40,62555,1413],{"emptyLinePlaceholder":1412},[40,62557,62558],{"class":42,"line":5086},[40,62559,62560],{"class":50},"    .slider-wrapper img {\n",[40,62562,62563],{"class":42,"line":5091},[40,62564,62542],{"class":50},[40,62566,62567],{"class":42,"line":5105},[40,62568,62569],{"class":50},"      height: 100%;\n",[40,62571,62572],{"class":42,"line":5110},[40,62573,62574],{"class":50},"      display: block;\n",[40,62576,62577],{"class":42,"line":5902},[40,62578,5513],{"class":50},[40,62580,62581],{"class":42,"line":5916},[40,62582,1413],{"emptyLinePlaceholder":1412},[40,62584,62585],{"class":42,"line":5924},[40,62586,62587],{"class":50},"    .slider-footer {\n",[40,62589,62590],{"class":42,"line":5929},[40,62591,62592],{"class":50},"      height: 80px;\n",[40,62594,62595],{"class":42,"line":5935},[40,62596,62597],{"class":50},"      background-color: rgb(100, 67, 68);\n",[40,62599,62600],{"class":42,"line":5941},[40,62601,62602],{"class":50},"      padding: 12px 12px 0 12px;\n",[40,62604,62605],{"class":42,"line":5946},[40,62606,62607],{"class":50},"      position: relative;\n",[40,62609,62610],{"class":42,"line":11270},[40,62611,5513],{"class":50},[40,62613,62614],{"class":42,"line":11294},[40,62615,1413],{"emptyLinePlaceholder":1412},[40,62617,62618],{"class":42,"line":11299},[40,62619,62620],{"class":50},"    .slider-footer .toggle {\n",[40,62622,62623],{"class":42,"line":11305},[40,62624,62625],{"class":50},"      position: absolute;\n",[40,62627,62628],{"class":42,"line":11332},[40,62629,62630],{"class":50},"      right: 0;\n",[40,62632,62633],{"class":42,"line":11337},[40,62634,62635],{"class":50},"      top: 12px;\n",[40,62637,62638],{"class":42,"line":11343},[40,62639,62640],{"class":50},"      display: flex;\n",[40,62642,62643],{"class":42,"line":11355},[40,62644,5513],{"class":50},[40,62646,62647],{"class":42,"line":11367},[40,62648,1413],{"emptyLinePlaceholder":1412},[40,62650,62651],{"class":42,"line":11379},[40,62652,62653],{"class":50},"    .slider-footer .toggle button {\n",[40,62655,62656],{"class":42,"line":13038},[40,62657,62658],{"class":50},"      margin-right: 12px;\n",[40,62660,62661],{"class":42,"line":13063},[40,62662,62663],{"class":50},"      width: 28px;\n",[40,62665,62666],{"class":42,"line":13086},[40,62667,62668],{"class":50},"      height: 28px;\n",[40,62670,62671],{"class":42,"line":13110},[40,62672,62673],{"class":50},"      appearance: none;\n",[40,62675,62676],{"class":42,"line":13115},[40,62677,62678],{"class":50},"      border: none;\n",[40,62680,62681],{"class":42,"line":13120},[40,62682,62683],{"class":50},"      background: rgba(255, 255, 255, 0.1);\n",[40,62685,62686],{"class":42,"line":13125},[40,62687,62688],{"class":50},"      color: #fff;\n",[40,62690,62691],{"class":42,"line":13134},[40,62692,62693],{"class":50},"      border-radius: 4px;\n",[40,62695,62696],{"class":42,"line":13139},[40,62697,62698],{"class":50},"      cursor: pointer;\n",[40,62700,62701],{"class":42,"line":13145},[40,62702,5513],{"class":50},[40,62704,62705],{"class":42,"line":13166},[40,62706,1413],{"emptyLinePlaceholder":1412},[40,62708,62709],{"class":42,"line":13172},[40,62710,62711],{"class":50},"    .slider-footer .toggle button:hover {\n",[40,62713,62714],{"class":42,"line":13186},[40,62715,62716],{"class":50},"      background: rgba(255, 255, 255, 0.2);\n",[40,62718,62719],{"class":42,"line":13192},[40,62720,5513],{"class":50},[40,62722,62723],{"class":42,"line":13219},[40,62724,1413],{"emptyLinePlaceholder":1412},[40,62726,62727],{"class":42,"line":13228},[40,62728,62729],{"class":50},"    .slider-footer p {\n",[40,62731,62732],{"class":42,"line":13234},[40,62733,62734],{"class":50},"      margin: 0;\n",[40,62736,62737],{"class":42,"line":13242},[40,62738,62688],{"class":50},[40,62740,62741],{"class":42,"line":13247},[40,62742,62743],{"class":50},"      font-size: 18px;\n",[40,62745,62746],{"class":42,"line":19926},[40,62747,62748],{"class":50},"      margin-bottom: 10px;\n",[40,62750,62751],{"class":42,"line":19932},[40,62752,5513],{"class":50},[40,62754,62755],{"class":42,"line":19955},[40,62756,1413],{"emptyLinePlaceholder":1412},[40,62758,62759],{"class":42,"line":19961},[40,62760,62761],{"class":50},"    .slider-indicator {\n",[40,62763,62764],{"class":42,"line":19984},[40,62765,62734],{"class":50},[40,62767,62768],{"class":42,"line":19998},[40,62769,62770],{"class":50},"      padding: 0;\n",[40,62772,62773],{"class":42,"line":20018},[40,62774,62775],{"class":50},"      list-style: none;\n",[40,62777,62778],{"class":42,"line":20024},[40,62779,62640],{"class":50},[40,62781,62782],{"class":42,"line":20035},[40,62783,62784],{"class":50},"      align-items: center;\n",[40,62786,62787],{"class":42,"line":20058},[40,62788,5513],{"class":50},[40,62790,62791],{"class":42,"line":20080},[40,62792,1413],{"emptyLinePlaceholder":1412},[40,62794,62795],{"class":42,"line":20085},[40,62796,62797],{"class":50},"    .slider-indicator li {\n",[40,62799,62800],{"class":42,"line":20091},[40,62801,62802],{"class":50},"      width: 8px;\n",[40,62804,62805],{"class":42,"line":20105},[40,62806,62807],{"class":50},"      height: 8px;\n",[40,62809,62810],{"class":42,"line":20118},[40,62811,62812],{"class":50},"      margin: 4px;\n",[40,62814,62815],{"class":42,"line":20123},[40,62816,62817],{"class":50},"      border-radius: 50%;\n",[40,62819,62820],{"class":42,"line":20137},[40,62821,62822],{"class":50},"      background: #fff;\n",[40,62824,62825],{"class":42,"line":20142},[40,62826,62827],{"class":50},"      opacity: 0.4;\n",[40,62829,62830],{"class":42,"line":20148},[40,62831,62698],{"class":50},[40,62833,62834],{"class":42,"line":20153},[40,62835,5513],{"class":50},[40,62837,62838],{"class":42,"line":20167},[40,62839,1413],{"emptyLinePlaceholder":1412},[40,62841,62842],{"class":42,"line":20172},[40,62843,62844],{"class":50},"    .slider-indicator li.active {\n",[40,62846,62847],{"class":42,"line":20177},[40,62848,62849],{"class":50},"      width: 12px;\n",[40,62851,62852],{"class":42,"line":20191},[40,62853,62854],{"class":50},"      height: 12px;\n",[40,62856,62857],{"class":42,"line":20203},[40,62858,62859],{"class":50},"      opacity: 1;\n",[40,62861,62862],{"class":42,"line":20208},[40,62863,5513],{"class":50},[40,62865,62866,62868,62870],{"class":42,"line":20221},[40,62867,55715],{"class":50},[40,62869,3384],{"class":46},[40,62871,54606],{"class":50},[40,62873,62874,62876,62878],{"class":42,"line":20226},[40,62875,55083],{"class":50},[40,62877,54633],{"class":46},[40,62879,54606],{"class":50},[40,62881,62882],{"class":42,"line":20231},[40,62883,1413],{"emptyLinePlaceholder":1412},[40,62885,62886,62888,62890],{"class":42,"line":20236},[40,62887,4387],{"class":50},[40,62889,55098],{"class":46},[40,62891,54606],{"class":50},[40,62893,62894,62896,62898,62900,62902,62905],{"class":42,"line":20249},[40,62895,55442],{"class":50},[40,62897,54909],{"class":46},[40,62899,56784],{"class":596},[40,62901,1284],{"class":50},[40,62903,62904],{"class":94},"\"slider\"",[40,62906,54606],{"class":50},[40,62908,62909,62911,62913,62915,62917,62919],{"class":42,"line":20254},[40,62910,54640],{"class":50},[40,62912,54909],{"class":46},[40,62914,56784],{"class":596},[40,62916,1284],{"class":50},[40,62918,58525],{"class":94},[40,62920,54606],{"class":50},[40,62922,62923,62925,62927,62929,62931,62934,62936,62938,62940],{"class":42,"line":35933},[40,62924,58532],{"class":50},[40,62926,438],{"class":46},[40,62928,58537],{"class":596},[40,62930,1284],{"class":50},[40,62932,62933],{"class":94},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[40,62935,58545],{"class":596},[40,62937,1284],{"class":50},[40,62939,285],{"class":94},[40,62941,62425],{"class":50},[40,62943,62944,62946,62948],{"class":42,"line":35939},[40,62945,55074],{"class":50},[40,62947,54909],{"class":46},[40,62949,54606],{"class":50},[40,62951,62952,62954,62956,62958,62960,62962],{"class":42,"line":35945},[40,62953,54640],{"class":50},[40,62955,54909],{"class":46},[40,62957,56784],{"class":596},[40,62959,1284],{"class":50},[40,62961,58572],{"class":94},[40,62963,54606],{"class":50},[40,62965,62966,62968,62970,62973,62975],{"class":42,"line":35951},[40,62967,58532],{"class":50},[40,62969,19],{"class":46},[40,62971,62972],{"class":50},">对人类来说会不会太超前了？\u003C\u002F",[40,62974,19],{"class":46},[40,62976,54606],{"class":50},[40,62978,62979,62981,62983,62985,62987,62990],{"class":42,"line":35957},[40,62980,58532],{"class":50},[40,62982,1338],{"class":46},[40,62984,56784],{"class":596},[40,62986,1284],{"class":50},[40,62988,62989],{"class":94},"\"slider-indicator\"",[40,62991,54606],{"class":50},[40,62993,62994,62996,62998,63000,63002,63005,63007,63009],{"class":42,"line":35968},[40,62995,58600],{"class":50},[40,62997,495],{"class":46},[40,62999,56784],{"class":596},[40,63001,1284],{"class":50},[40,63003,63004],{"class":94},"\"active\"",[40,63006,58612],{"class":50},[40,63008,495],{"class":46},[40,63010,54606],{"class":50},[40,63012,63013,63015,63017,63019,63021],{"class":42,"line":35974},[40,63014,58600],{"class":50},[40,63016,495],{"class":46},[40,63018,58612],{"class":50},[40,63020,495],{"class":46},[40,63022,54606],{"class":50},[40,63024,63025,63027,63029,63031,63033],{"class":42,"line":35994},[40,63026,58600],{"class":50},[40,63028,495],{"class":46},[40,63030,58612],{"class":50},[40,63032,495],{"class":46},[40,63034,54606],{"class":50},[40,63036,63037,63039,63041,63043,63045],{"class":42,"line":36000},[40,63038,58600],{"class":50},[40,63040,495],{"class":46},[40,63042,58612],{"class":50},[40,63044,495],{"class":46},[40,63046,54606],{"class":50},[40,63048,63049,63051,63053,63055,63057],{"class":42,"line":36011},[40,63050,58600],{"class":50},[40,63052,495],{"class":46},[40,63054,58612],{"class":50},[40,63056,495],{"class":46},[40,63058,54606],{"class":50},[40,63060,63061,63063,63065,63067,63069],{"class":42,"line":36017},[40,63062,58600],{"class":50},[40,63064,495],{"class":46},[40,63066,58612],{"class":50},[40,63068,495],{"class":46},[40,63070,54606],{"class":50},[40,63072,63073,63075,63077,63079,63081],{"class":42,"line":36023},[40,63074,58600],{"class":50},[40,63076,495],{"class":46},[40,63078,58612],{"class":50},[40,63080,495],{"class":46},[40,63082,54606],{"class":50},[40,63084,63085,63087,63089,63091,63093],{"class":42,"line":36029},[40,63086,58600],{"class":50},[40,63088,495],{"class":46},[40,63090,58612],{"class":50},[40,63092,495],{"class":46},[40,63094,54606],{"class":50},[40,63096,63097,63099,63101],{"class":42,"line":36035},[40,63098,58705],{"class":50},[40,63100,1338],{"class":46},[40,63102,54606],{"class":50},[40,63104,63105,63107,63109,63111,63113,63116],{"class":42,"line":36041},[40,63106,58532],{"class":50},[40,63108,54909],{"class":46},[40,63110,56784],{"class":596},[40,63112,1284],{"class":50},[40,63114,63115],{"class":94},"\"toggle\"",[40,63117,54606],{"class":50},[40,63119,63120,63122,63124,63126,63128,63131,63133,63136,63138,63140],{"class":42,"line":36047},[40,63121,58600],{"class":50},[40,63123,57185],{"class":46},[40,63125,56784],{"class":596},[40,63127,1284],{"class":50},[40,63129,63130],{"class":94},"\"prev\"",[40,63132,4437],{"class":50},[40,63134,63135],{"class":63},"&lt;",[40,63137,55083],{"class":50},[40,63139,57185],{"class":46},[40,63141,54606],{"class":50},[40,63143,63144,63146,63148,63150,63152,63155,63157,63160,63162,63164],{"class":42,"line":36053},[40,63145,58600],{"class":50},[40,63147,57185],{"class":46},[40,63149,56784],{"class":596},[40,63151,1284],{"class":50},[40,63153,63154],{"class":94},"\"next\"",[40,63156,4437],{"class":50},[40,63158,63159],{"class":63},"&gt;",[40,63161,55083],{"class":50},[40,63163,57185],{"class":46},[40,63165,54606],{"class":50},[40,63167,63168,63170,63172],{"class":42,"line":36073},[40,63169,58705],{"class":50},[40,63171,54909],{"class":46},[40,63173,54606],{"class":50},[40,63175,63176,63178,63180],{"class":42,"line":36079},[40,63177,55074],{"class":50},[40,63179,54909],{"class":46},[40,63181,54606],{"class":50},[40,63183,63184,63186,63188],{"class":42,"line":36095},[40,63185,55715],{"class":50},[40,63187,54909],{"class":46},[40,63189,54606],{"class":50},[40,63191,63192,63194,63196],{"class":42,"line":36101},[40,63193,55442],{"class":50},[40,63195,55111],{"class":46},[40,63197,54606],{"class":50},[40,63199,63200],{"class":42,"line":36115},[40,63201,63202],{"class":50},"    \u002F\u002F 1. 初始数据\n",[40,63204,63205],{"class":42,"line":36121},[40,63206,63207],{"class":50},"    const data = [\n",[40,63209,63210],{"class":42,"line":36136},[40,63211,63212],{"class":50},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[40,63214,63215],{"class":42,"line":36142},[40,63216,63217],{"class":50},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[40,63219,63220],{"class":42,"line":36151},[40,63221,63222],{"class":50},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[40,63224,63225],{"class":42,"line":36157},[40,63226,63227],{"class":50},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[40,63229,63230],{"class":42,"line":36166},[40,63231,63232],{"class":50},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[40,63234,63235],{"class":42,"line":36172},[40,63236,63237],{"class":50},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[40,63239,63240],{"class":42,"line":36178},[40,63241,63242],{"class":50},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[40,63244,63245],{"class":42,"line":36187},[40,63246,63247],{"class":50},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[40,63249,63250],{"class":42,"line":36193},[40,63251,56407],{"class":50},[40,63253,63254],{"class":42,"line":36204},[40,63255,63256],{"class":50},"    \u002F\u002F 获取元素\n",[40,63258,63259],{"class":42,"line":36210},[40,63260,63261],{"class":50},"    const img = document.querySelector('.slider-wrapper img')\n",[40,63263,63264],{"class":42,"line":36229},[40,63265,63266],{"class":50},"    const p = document.querySelector('.slider-footer p')\n",[40,63268,63269],{"class":42,"line":36235},[40,63270,63271],{"class":50},"    const footer = document.querySelector('.slider-footer')\n",[40,63273,63274],{"class":42,"line":36246},[40,63275,63276],{"class":50},"    \u002F\u002F 1. 右按钮业务\n",[40,63278,63279],{"class":42,"line":36252},[40,63280,63281],{"class":50},"    \u002F\u002F 1.1 获取右侧按钮 \n",[40,63283,63284],{"class":42,"line":36272},[40,63285,63286],{"class":50},"    const next = document.querySelector('.next')\n",[40,63288,63289],{"class":42,"line":36288},[40,63290,63291],{"class":50},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[40,63293,63294],{"class":42,"line":36294},[40,63295,63296],{"class":50},"    \u002F\u002F 1.2 注册点击事件\n",[40,63298,63299],{"class":42,"line":36308},[40,63300,1413],{"emptyLinePlaceholder":1412},[40,63302,63303],{"class":42,"line":36314},[40,63304,63305],{"class":50},"    next.addEventListener('click', function () {\n",[40,63307,63308],{"class":42,"line":36320},[40,63309,63310],{"class":50},"      \u002F\u002F console.log(11)\n",[40,63312,63313],{"class":42,"line":36331},[40,63314,63315],{"class":50},"      i++\n",[40,63317,63318],{"class":42,"line":36337},[40,63319,63320],{"class":50},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[40,63322,63323],{"class":42,"line":36343},[40,63324,63325],{"class":50},"      \u002F\u002F if (i >= 8) {\n",[40,63327,63328],{"class":42,"line":36353},[40,63329,63330],{"class":50},"      \u002F\u002F   i = 0\n",[40,63332,63333],{"class":42,"line":36359},[40,63334,63335],{"class":50},"      \u002F\u002F }\n",[40,63337,63338],{"class":42,"line":36370},[40,63339,63340],{"class":50},"      i = i >= data.length ? 0 : i\n",[40,63342,63343],{"class":42,"line":36376},[40,63344,63345],{"class":50},"      \u002F\u002F 1.3 得到对应的对象\n",[40,63347,63348],{"class":42,"line":36386},[40,63349,63350],{"class":50},"      \u002F\u002F console.log(data[i])\n",[40,63352,63353],{"class":42,"line":36391},[40,63354,63355],{"class":50},"      \u002F\u002F 调用函数\n",[40,63357,63358],{"class":42,"line":36397},[40,63359,63360],{"class":50},"      toggle()\n",[40,63362,63363],{"class":42,"line":36446},[40,63364,36761],{"class":50},[40,63366,63367],{"class":42,"line":36493},[40,63368,1413],{"emptyLinePlaceholder":1412},[40,63370,63371],{"class":42,"line":36498},[40,63372,63373],{"class":50},"    \u002F\u002F 2. 左侧按钮业务\n",[40,63375,63376],{"class":42,"line":36504},[40,63377,63378],{"class":50},"    \u002F\u002F 2.1 获取左侧按钮 \n",[40,63380,63381],{"class":42,"line":36523},[40,63382,63383],{"class":50},"    const prev = document.querySelector('.prev')\n",[40,63385,63386],{"class":42,"line":36529},[40,63387,63296],{"class":50},[40,63389,63390],{"class":42,"line":36549},[40,63391,63392],{"class":50},"    prev.addEventListener('click', function () {\n",[40,63394,63395],{"class":42,"line":36555},[40,63396,63397],{"class":50},"      i--\n",[40,63399,63400],{"class":42,"line":36561},[40,63401,63402],{"class":50},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[40,63404,63405],{"class":42,"line":36571},[40,63406,63407],{"class":50},"      \u002F\u002F if (i \u003C 0) {\n",[40,63409,63410],{"class":42,"line":36576},[40,63411,63412],{"class":50},"      \u002F\u002F   i = 7\n",[40,63414,63415],{"class":42,"line":36582},[40,63416,63335],{"class":50},[40,63418,63419],{"class":42,"line":36598},[40,63420,63421],{"class":50},"      i = i \u003C 0 ? data.length - 1 : i\n",[40,63423,63424],{"class":42,"line":36643},[40,63425,63345],{"class":50},[40,63427,63428],{"class":42,"line":36649},[40,63429,63350],{"class":50},[40,63431,63432],{"class":42,"line":36655},[40,63433,63355],{"class":50},[40,63435,63436],{"class":42,"line":36661},[40,63437,63360],{"class":50},[40,63439,63440],{"class":42,"line":36672},[40,63441,36761],{"class":50},[40,63443,63444],{"class":42,"line":36678},[40,63445,1413],{"emptyLinePlaceholder":1412},[40,63447,63448],{"class":42,"line":36684},[40,63449,63450],{"class":50},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[40,63452,63453],{"class":42,"line":36690},[40,63454,63455],{"class":50},"    function toggle() {\n",[40,63457,63458],{"class":42,"line":36708},[40,63459,63460],{"class":50},"      \u002F\u002F 1.4 渲染对应的数据\n",[40,63462,63463],{"class":42,"line":36722},[40,63464,63465],{"class":50},"      img.src = data[i].url\n",[40,63467,63468],{"class":42,"line":36731},[40,63469,63470],{"class":50},"      p.innerHTML = data[i].title\n",[40,63472,63473],{"class":42,"line":36740},[40,63474,63475],{"class":50},"      footer.style.backgroundColor = data[i].color\n",[40,63477,63478],{"class":42,"line":36749},[40,63479,63480],{"class":50},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[40,63482,63483],{"class":42,"line":36758},[40,63484,63485],{"class":50},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[40,63487,63488],{"class":42,"line":36764},[40,63489,63490],{"class":50},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[40,63492,63493],{"class":42,"line":36770},[40,63494,5513],{"class":50},[40,63496,63497],{"class":42,"line":36778},[40,63498,1413],{"emptyLinePlaceholder":1412},[40,63500,63501],{"class":42,"line":36783},[40,63502,63503],{"class":50},"    \u002F\u002F 3. 自动播放模块\n",[40,63505,63506],{"class":42,"line":36789},[40,63507,63508],{"class":50},"    let timerId = setInterval(function () {\n",[40,63510,63511],{"class":42,"line":36800},[40,63512,63513],{"class":50},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[40,63515,63516],{"class":42,"line":36806},[40,63517,63518],{"class":50},"      next.click()\n",[40,63520,63521],{"class":42,"line":36826},[40,63522,63523],{"class":50},"    }, 1000)\n",[40,63525,63526],{"class":42,"line":36832},[40,63527,1413],{"emptyLinePlaceholder":1412},[40,63529,63530],{"class":42,"line":36838},[40,63531,63532],{"class":50},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[40,63534,63535],{"class":42,"line":36844},[40,63536,63537],{"class":50},"    const slider = document.querySelector('.slider')\n",[40,63539,63540],{"class":42,"line":36861},[40,63541,63542],{"class":50},"    \u002F\u002F 注册事件\n",[40,63544,63545],{"class":42,"line":36867},[40,63546,63547],{"class":50},"    slider.addEventListener('mouseenter', function () {\n",[40,63549,63550],{"class":42,"line":36873},[40,63551,63552],{"class":50},"      \u002F\u002F 停止定时器\n",[40,63554,63555],{"class":42,"line":36879},[40,63556,63557],{"class":50},"      clearInterval(timerId)\n",[40,63559,63560],{"class":42,"line":36885},[40,63561,36761],{"class":50},[40,63563,63564],{"class":42,"line":36891},[40,63565,1413],{"emptyLinePlaceholder":1412},[40,63567,63568],{"class":42,"line":36918},[40,63569,63570],{"class":50},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[40,63572,63573],{"class":42,"line":36942},[40,63574,63542],{"class":50},[40,63576,63577],{"class":42,"line":36948},[40,63578,63579],{"class":50},"    slider.addEventListener('mouseleave', function () {\n",[40,63581,63582],{"class":42,"line":36954},[40,63583,63552],{"class":50},[40,63585,63586],{"class":42,"line":36960},[40,63587,63588],{"class":50},"      if (timerId) clearInterval(timerId)\n",[40,63590,63591],{"class":42,"line":36971},[40,63592,63593],{"class":50},"      \u002F\u002F 开启定时器\n",[40,63595,63596],{"class":42,"line":36982},[40,63597,63598],{"class":50},"      timerId = setInterval(function () {\n",[40,63600,63601],{"class":42,"line":36988},[40,63602,63603],{"class":50},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[40,63605,63606],{"class":42,"line":37005},[40,63607,63608],{"class":50},"        next.click()\n",[40,63610,63611],{"class":42,"line":37028},[40,63612,63613],{"class":50},"      }, 1000)\n",[40,63615,63616],{"class":42,"line":37051},[40,63617,36761],{"class":50},[40,63619,63620,63622,63624],{"class":42,"line":37057},[40,63621,55715],{"class":50},[40,63623,55111],{"class":46},[40,63625,54606],{"class":50},[40,63627,63628,63630,63632],{"class":42,"line":37062},[40,63629,55083],{"class":50},[40,63631,55098],{"class":46},[40,63633,54606],{"class":50},[40,63635,63636],{"class":42,"line":37071},[40,63637,1413],{"emptyLinePlaceholder":1412},[40,63639,63640,63642,63644],{"class":42,"line":37081},[40,63641,55083],{"class":50},[40,63643,53935],{"class":46},[40,63645,54606],{"class":50},[2423,63647,63649],{"id":63648},"_3252-焦点事件","3.2.5.2 焦点事件",[19,63651,63652],{},"小米搜索框案例：",[31,63654,63656],{"className":53933,"code":63655,"language":53935,"meta":36,"style":36},"\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",[26,63657,63658,63668,63682,63686,63694,63708,63728,63748,63760,63768,63774,63784,63794,63806,63810,63814,63821,63825,63836,63840,63844,63851,63862,63875,63889,63893,63897,63906,63918,63930,63944,63957,63970,63988,63999,64003,64007,64016,64033,64037,64041,64048,64058,64068,64079,64092,64104,64120,64131,64143,64147,64151,64159,64170,64187,64199,64211,64222,64226,64230,64241,64252,64256,64264,64268,64276,64280,64288,64303,64326,64341,64372,64399,64426,64453,64480,64507,64534,64543,64551,64559,64564,64584,64604,64609,64614,64632,64637,64647,64652,64666,64671,64676,64693,64702,64714,64718,64726,64734,64738],{"__ignoreMap":36},[40,63659,63660,63662,63664,63666],{"class":42,"line":43},[40,63661,54597],{"class":50},[40,63663,54600],{"class":46},[40,63665,54603],{"class":596},[40,63667,54606],{"class":50},[40,63669,63670,63672,63674,63676,63678,63680],{"class":42,"line":54},[40,63671,4387],{"class":50},[40,63673,53935],{"class":46},[40,63675,54615],{"class":596},[40,63677,1284],{"class":50},[40,63679,54620],{"class":94},[40,63681,54606],{"class":50},[40,63683,63684],{"class":42,"line":70},[40,63685,1413],{"emptyLinePlaceholder":1412},[40,63687,63688,63690,63692],{"class":42,"line":78},[40,63689,4387],{"class":50},[40,63691,54633],{"class":46},[40,63693,54606],{"class":50},[40,63695,63696,63698,63700,63702,63704,63706],{"class":42,"line":86},[40,63697,54640],{"class":50},[40,63699,54643],{"class":46},[40,63701,54646],{"class":596},[40,63703,1284],{"class":50},[40,63705,54651],{"class":94},[40,63707,54606],{"class":50},[40,63709,63710,63712,63714,63716,63718,63720,63722,63724,63726],{"class":42,"line":100},[40,63711,54640],{"class":50},[40,63713,54643],{"class":46},[40,63715,54662],{"class":596},[40,63717,1284],{"class":50},[40,63719,54667],{"class":94},[40,63721,54670],{"class":596},[40,63723,1284],{"class":50},[40,63725,54675],{"class":94},[40,63727,54606],{"class":50},[40,63729,63730,63732,63734,63736,63738,63740,63742,63744,63746],{"class":42,"line":108},[40,63731,54640],{"class":50},[40,63733,54643],{"class":46},[40,63735,18242],{"class":596},[40,63737,1284],{"class":50},[40,63739,54690],{"class":94},[40,63741,54670],{"class":596},[40,63743,1284],{"class":50},[40,63745,54697],{"class":94},[40,63747,54606],{"class":50},[40,63749,63750,63752,63754,63756,63758],{"class":42,"line":121},[40,63751,54640],{"class":50},[40,63753,54706],{"class":46},[40,63755,54709],{"class":50},[40,63757,54706],{"class":46},[40,63759,54606],{"class":50},[40,63761,63762,63764,63766],{"class":42,"line":134},[40,63763,54640],{"class":50},[40,63765,3384],{"class":46},[40,63767,54606],{"class":50},[40,63769,63770,63772],{"class":42,"line":146},[40,63771,54726],{"class":46},[40,63773,18894],{"class":50},[40,63775,63776,63778,63780,63782],{"class":42,"line":154},[40,63777,54733],{"class":63},[40,63779,60],{"class":50},[40,63781,3672],{"class":63},[40,63783,4637],{"class":50},[40,63785,63786,63788,63790,63792],{"class":42,"line":162},[40,63787,54744],{"class":63},[40,63789,60],{"class":50},[40,63791,3672],{"class":63},[40,63793,4637],{"class":50},[40,63795,63796,63799,63801,63804],{"class":42,"line":170},[40,63797,63798],{"class":63},"            box-sizing",[40,63800,60],{"class":50},[40,63802,63803],{"class":63},"border-box",[40,63805,4637],{"class":50},[40,63807,63808],{"class":42,"line":183},[40,63809,5854],{"class":50},[40,63811,63812],{"class":42,"line":196},[40,63813,1413],{"emptyLinePlaceholder":1412},[40,63815,63816,63819],{"class":42,"line":204},[40,63817,63818],{"class":46},"        ul",[40,63820,18894],{"class":50},[40,63822,63823],{"class":42,"line":217},[40,63824,1413],{"emptyLinePlaceholder":1412},[40,63826,63827,63830,63832,63834],{"class":42,"line":230},[40,63828,63829],{"class":63},"            list-style",[40,63831,60],{"class":50},[40,63833,58035],{"class":63},[40,63835,4637],{"class":50},[40,63837,63838],{"class":42,"line":238},[40,63839,5854],{"class":50},[40,63841,63842],{"class":42,"line":251},[40,63843,1413],{"emptyLinePlaceholder":1412},[40,63845,63846,63849],{"class":42,"line":264},[40,63847,63848],{"class":596},"        .mi",[40,63850,18894],{"class":50},[40,63852,63853,63856,63858,63860],{"class":42,"line":277},[40,63854,63855],{"class":63},"            position",[40,63857,60],{"class":50},[40,63859,58062],{"class":63},[40,63861,4637],{"class":50},[40,63863,63864,63866,63868,63871,63873],{"class":42,"line":290},[40,63865,54782],{"class":63},[40,63867,60],{"class":50},[40,63869,63870],{"class":63},"223",[40,63872,54790],{"class":1283},[40,63874,4637],{"class":50},[40,63876,63877,63879,63881,63883,63885,63887],{"class":42,"line":298},[40,63878,54733],{"class":63},[40,63880,60],{"class":50},[40,63882,3791],{"class":63},[40,63884,54790],{"class":1283},[40,63886,54854],{"class":63},[40,63888,4637],{"class":50},[40,63890,63891],{"class":42,"line":310},[40,63892,5854],{"class":50},[40,63894,63895],{"class":42,"line":5086},[40,63896,1413],{"emptyLinePlaceholder":1412},[40,63898,63899,63901,63904],{"class":42,"line":5091},[40,63900,63848],{"class":596},[40,63902,63903],{"class":46}," input",[40,63905,18894],{"class":50},[40,63907,63908,63910,63912,63914,63916],{"class":42,"line":5105},[40,63909,54782],{"class":63},[40,63911,60],{"class":50},[40,63913,63870],{"class":63},[40,63915,54790],{"class":1283},[40,63917,4637],{"class":50},[40,63919,63920,63922,63924,63926,63928],{"class":42,"line":5110},[40,63921,54797],{"class":63},[40,63923,60],{"class":50},[40,63925,4086],{"class":63},[40,63927,54790],{"class":1283},[40,63929,4637],{"class":50},[40,63931,63932,63934,63936,63938,63940,63942],{"class":42,"line":5902},[40,63933,54744],{"class":63},[40,63935,60],{"class":50},[40,63937,3672],{"class":63},[40,63939,5364],{"class":63},[40,63941,54790],{"class":1283},[40,63943,4637],{"class":50},[40,63945,63946,63949,63951,63953,63955],{"class":42,"line":5916},[40,63947,63948],{"class":63},"            font-size",[40,63950,60],{"class":50},[40,63952,4028],{"class":63},[40,63954,54790],{"class":1283},[40,63956,4637],{"class":50},[40,63958,63959,63962,63964,63966,63968],{"class":42,"line":5924},[40,63960,63961],{"class":63},"            line-height",[40,63963,60],{"class":50},[40,63965,4086],{"class":63},[40,63967,54790],{"class":1283},[40,63969,4637],{"class":50},[40,63971,63972,63975,63977,63979,63981,63983,63986],{"class":42,"line":5929},[40,63973,63974],{"class":63},"            border",[40,63976,60],{"class":50},[40,63978,3698],{"class":63},[40,63980,54790],{"class":1283},[40,63982,54819],{"class":63},[40,63984,63985],{"class":63}," #e0e0e0",[40,63987,4637],{"class":50},[40,63989,63990,63993,63995,63997],{"class":42,"line":5935},[40,63991,63992],{"class":63},"            outline",[40,63994,60],{"class":50},[40,63996,58035],{"class":63},[40,63998,4637],{"class":50},[40,64000,64001],{"class":42,"line":5941},[40,64002,5854],{"class":50},[40,64004,64005],{"class":42,"line":5946},[40,64006,1413],{"emptyLinePlaceholder":1412},[40,64008,64009,64011,64014],{"class":42,"line":11270},[40,64010,63848],{"class":596},[40,64012,64013],{"class":596}," .search",[40,64015,18894],{"class":50},[40,64017,64018,64020,64022,64024,64026,64028,64031],{"class":42,"line":11294},[40,64019,63974],{"class":63},[40,64021,60],{"class":50},[40,64023,3698],{"class":63},[40,64025,54790],{"class":1283},[40,64027,54819],{"class":63},[40,64029,64030],{"class":63}," #ff6700",[40,64032,4637],{"class":50},[40,64034,64035],{"class":42,"line":11299},[40,64036,5854],{"class":50},[40,64038,64039],{"class":42,"line":11305},[40,64040,1413],{"emptyLinePlaceholder":1412},[40,64042,64043,64046],{"class":42,"line":11332},[40,64044,64045],{"class":596},"        .result-list",[40,64047,18894],{"class":50},[40,64049,64050,64052,64054,64056],{"class":42,"line":11337},[40,64051,54770],{"class":63},[40,64053,60],{"class":50},[40,64055,58035],{"class":63},[40,64057,4637],{"class":50},[40,64059,64060,64062,64064,64066],{"class":42,"line":11343},[40,64061,63855],{"class":63},[40,64063,60],{"class":50},[40,64065,58129],{"class":63},[40,64067,4637],{"class":50},[40,64069,64070,64073,64075,64077],{"class":42,"line":11355},[40,64071,64072],{"class":63},"            left",[40,64074,60],{"class":50},[40,64076,3672],{"class":63},[40,64078,4637],{"class":50},[40,64080,64081,64084,64086,64088,64090],{"class":42,"line":11367},[40,64082,64083],{"class":63},"            top",[40,64085,60],{"class":50},[40,64087,4086],{"class":63},[40,64089,54790],{"class":1283},[40,64091,4637],{"class":50},[40,64093,64094,64096,64098,64100,64102],{"class":42,"line":11379},[40,64095,54782],{"class":63},[40,64097,60],{"class":50},[40,64099,63870],{"class":63},[40,64101,54790],{"class":1283},[40,64103,4637],{"class":50},[40,64105,64106,64108,64110,64112,64114,64116,64118],{"class":42,"line":13038},[40,64107,63974],{"class":63},[40,64109,60],{"class":50},[40,64111,3698],{"class":63},[40,64113,54790],{"class":1283},[40,64115,54819],{"class":63},[40,64117,64030],{"class":63},[40,64119,4637],{"class":50},[40,64121,64122,64125,64127,64129],{"class":42,"line":13063},[40,64123,64124],{"class":63},"            border-top",[40,64126,60],{"class":50},[40,64128,3672],{"class":63},[40,64130,4637],{"class":50},[40,64132,64133,64136,64138,64141],{"class":42,"line":13086},[40,64134,64135],{"class":63},"            background",[40,64137,60],{"class":50},[40,64139,64140],{"class":63},"#fff",[40,64142,4637],{"class":50},[40,64144,64145],{"class":42,"line":13110},[40,64146,5854],{"class":50},[40,64148,64149],{"class":42,"line":13115},[40,64150,1413],{"emptyLinePlaceholder":1412},[40,64152,64153,64155,64157],{"class":42,"line":13120},[40,64154,64045],{"class":596},[40,64156,4741],{"class":46},[40,64158,18894],{"class":50},[40,64160,64161,64163,64165,64168],{"class":42,"line":13125},[40,64162,54770],{"class":63},[40,64164,60],{"class":50},[40,64166,64167],{"class":63},"block",[40,64169,4637],{"class":50},[40,64171,64172,64174,64176,64178,64180,64183,64185],{"class":42,"line":13134},[40,64173,54744],{"class":63},[40,64175,60],{"class":50},[40,64177,3824],{"class":63},[40,64179,54790],{"class":1283},[40,64181,64182],{"class":63}," 15",[40,64184,54790],{"class":1283},[40,64186,4637],{"class":50},[40,64188,64189,64191,64193,64195,64197],{"class":42,"line":13139},[40,64190,63948],{"class":63},[40,64192,60],{"class":50},[40,64194,3977],{"class":63},[40,64196,54790],{"class":1283},[40,64198,4637],{"class":50},[40,64200,64201,64204,64206,64209],{"class":42,"line":13145},[40,64202,64203],{"class":63},"            color",[40,64205,60],{"class":50},[40,64207,64208],{"class":63},"#424242",[40,64210,4637],{"class":50},[40,64212,64213,64216,64218,64220],{"class":42,"line":13166},[40,64214,64215],{"class":63},"            text-decoration",[40,64217,60],{"class":50},[40,64219,58035],{"class":63},[40,64221,4637],{"class":50},[40,64223,64224],{"class":42,"line":13172},[40,64225,5854],{"class":50},[40,64227,64228],{"class":42,"line":13186},[40,64229,1413],{"emptyLinePlaceholder":1412},[40,64231,64232,64234,64236,64239],{"class":42,"line":13192},[40,64233,64045],{"class":596},[40,64235,4741],{"class":46},[40,64237,64238],{"class":596},":hover",[40,64240,18894],{"class":50},[40,64242,64243,64245,64247,64250],{"class":42,"line":13219},[40,64244,54938],{"class":63},[40,64246,60],{"class":50},[40,64248,64249],{"class":63},"#eee",[40,64251,4637],{"class":50},[40,64253,64254],{"class":42,"line":13228},[40,64255,5854],{"class":50},[40,64257,64258,64260,64262],{"class":42,"line":13234},[40,64259,55074],{"class":50},[40,64261,3384],{"class":46},[40,64263,54606],{"class":50},[40,64265,64266],{"class":42,"line":13242},[40,64267,1413],{"emptyLinePlaceholder":1412},[40,64269,64270,64272,64274],{"class":42,"line":13247},[40,64271,55083],{"class":50},[40,64273,54633],{"class":46},[40,64275,54606],{"class":50},[40,64277,64278],{"class":42,"line":19926},[40,64279,1413],{"emptyLinePlaceholder":1412},[40,64281,64282,64284,64286],{"class":42,"line":19932},[40,64283,4387],{"class":50},[40,64285,55098],{"class":46},[40,64287,54606],{"class":50},[40,64289,64290,64292,64294,64296,64298,64301],{"class":42,"line":19955},[40,64291,54640],{"class":50},[40,64293,54909],{"class":46},[40,64295,56784],{"class":596},[40,64297,1284],{"class":50},[40,64299,64300],{"class":94},"\"mi\"",[40,64302,54606],{"class":50},[40,64304,64305,64307,64309,64311,64313,64316,64319,64321,64324],{"class":42,"line":19961},[40,64306,58600],{"class":50},[40,64308,57119],{"class":46},[40,64310,57122],{"class":596},[40,64312,1284],{"class":50},[40,64314,64315],{"class":94},"\"search\"",[40,64317,64318],{"class":596}," placeholder",[40,64320,1284],{"class":50},[40,64322,64323],{"class":94},"\"小米笔记本\"",[40,64325,54606],{"class":50},[40,64327,64328,64330,64332,64334,64336,64339],{"class":42,"line":19984},[40,64329,58600],{"class":50},[40,64331,1338],{"class":46},[40,64333,56784],{"class":596},[40,64335,1284],{"class":50},[40,64337,64338],{"class":94},"\"result-list\"",[40,64340,54606],{"class":50},[40,64342,64343,64346,64348,64351,64353,64356,64358,64361,64364,64366,64368,64370],{"class":42,"line":19998},[40,64344,64345],{"class":50},"            \u003C",[40,64347,495],{"class":46},[40,64349,64350],{"class":50},">\u003C",[40,64352,2106],{"class":46},[40,64354,64355],{"class":596}," href",[40,64357,1284],{"class":50},[40,64359,64360],{"class":94},"\"#\"",[40,64362,64363],{"class":50},">全部商品\u003C\u002F",[40,64365,2106],{"class":46},[40,64367,58612],{"class":50},[40,64369,495],{"class":46},[40,64371,54606],{"class":50},[40,64373,64374,64376,64378,64380,64382,64384,64386,64388,64391,64393,64395,64397],{"class":42,"line":20018},[40,64375,64345],{"class":50},[40,64377,495],{"class":46},[40,64379,64350],{"class":50},[40,64381,2106],{"class":46},[40,64383,64355],{"class":596},[40,64385,1284],{"class":50},[40,64387,64360],{"class":94},[40,64389,64390],{"class":50},">小米11\u003C\u002F",[40,64392,2106],{"class":46},[40,64394,58612],{"class":50},[40,64396,495],{"class":46},[40,64398,54606],{"class":50},[40,64400,64401,64403,64405,64407,64409,64411,64413,64415,64418,64420,64422,64424],{"class":42,"line":20024},[40,64402,64345],{"class":50},[40,64404,495],{"class":46},[40,64406,64350],{"class":50},[40,64408,2106],{"class":46},[40,64410,64355],{"class":596},[40,64412,1284],{"class":50},[40,64414,64360],{"class":94},[40,64416,64417],{"class":50},">小米10S\u003C\u002F",[40,64419,2106],{"class":46},[40,64421,58612],{"class":50},[40,64423,495],{"class":46},[40,64425,54606],{"class":50},[40,64427,64428,64430,64432,64434,64436,64438,64440,64442,64445,64447,64449,64451],{"class":42,"line":20035},[40,64429,64345],{"class":50},[40,64431,495],{"class":46},[40,64433,64350],{"class":50},[40,64435,2106],{"class":46},[40,64437,64355],{"class":596},[40,64439,1284],{"class":50},[40,64441,64360],{"class":94},[40,64443,64444],{"class":50},">小米笔记本\u003C\u002F",[40,64446,2106],{"class":46},[40,64448,58612],{"class":50},[40,64450,495],{"class":46},[40,64452,54606],{"class":50},[40,64454,64455,64457,64459,64461,64463,64465,64467,64469,64472,64474,64476,64478],{"class":42,"line":20058},[40,64456,64345],{"class":50},[40,64458,495],{"class":46},[40,64460,64350],{"class":50},[40,64462,2106],{"class":46},[40,64464,64355],{"class":596},[40,64466,1284],{"class":50},[40,64468,64360],{"class":94},[40,64470,64471],{"class":50},">小米手机\u003C\u002F",[40,64473,2106],{"class":46},[40,64475,58612],{"class":50},[40,64477,495],{"class":46},[40,64479,54606],{"class":50},[40,64481,64482,64484,64486,64488,64490,64492,64494,64496,64499,64501,64503,64505],{"class":42,"line":20080},[40,64483,64345],{"class":50},[40,64485,495],{"class":46},[40,64487,64350],{"class":50},[40,64489,2106],{"class":46},[40,64491,64355],{"class":596},[40,64493,1284],{"class":50},[40,64495,64360],{"class":94},[40,64497,64498],{"class":50},">黑鲨4\u003C\u002F",[40,64500,2106],{"class":46},[40,64502,58612],{"class":50},[40,64504,495],{"class":46},[40,64506,54606],{"class":50},[40,64508,64509,64511,64513,64515,64517,64519,64521,64523,64526,64528,64530,64532],{"class":42,"line":20085},[40,64510,64345],{"class":50},[40,64512,495],{"class":46},[40,64514,64350],{"class":50},[40,64516,2106],{"class":46},[40,64518,64355],{"class":596},[40,64520,1284],{"class":50},[40,64522,64360],{"class":94},[40,64524,64525],{"class":50},">空调\u003C\u002F",[40,64527,2106],{"class":46},[40,64529,58612],{"class":50},[40,64531,495],{"class":46},[40,64533,54606],{"class":50},[40,64535,64536,64539,64541],{"class":42,"line":20091},[40,64537,64538],{"class":50},"        \u003C\u002F",[40,64540,1338],{"class":46},[40,64542,54606],{"class":50},[40,64544,64545,64547,64549],{"class":42,"line":20105},[40,64546,55074],{"class":50},[40,64548,54909],{"class":46},[40,64550,54606],{"class":50},[40,64552,64553,64555,64557],{"class":42,"line":20118},[40,64554,54640],{"class":50},[40,64556,55111],{"class":46},[40,64558,54606],{"class":50},[40,64560,64561],{"class":42,"line":20123},[40,64562,64563],{"class":997},"        \u002F\u002F 1. 获取元素\n",[40,64565,64566,64569,64571,64573,64575,64577,64579,64582],{"class":42,"line":20137},[40,64567,64568],{"class":1283},"        const",[40,64570,63903],{"class":63},[40,64572,16886],{"class":1283},[40,64574,57694],{"class":50},[40,64576,57697],{"class":596},[40,64578,3488],{"class":50},[40,64580,64581],{"class":94},"'[type=search]'",[40,64583,1811],{"class":50},[40,64585,64586,64588,64591,64593,64595,64597,64599,64602],{"class":42,"line":20142},[40,64587,64568],{"class":1283},[40,64589,64590],{"class":63}," ul",[40,64592,16886],{"class":1283},[40,64594,57694],{"class":50},[40,64596,57697],{"class":596},[40,64598,3488],{"class":50},[40,64600,64601],{"class":94},"'.result-list'",[40,64603,1811],{"class":50},[40,64605,64606],{"class":42,"line":20148},[40,64607,64608],{"class":997},"        \u002F\u002F console.log(input)\n",[40,64610,64611],{"class":42,"line":20153},[40,64612,64613],{"class":997},"        \u002F\u002F 2. 监听事件 获得焦点\n",[40,64615,64616,64619,64621,64623,64626,64628,64630],{"class":42,"line":20167},[40,64617,64618],{"class":50},"        input.",[40,64620,61111],{"class":596},[40,64622,3488],{"class":50},[40,64624,64625],{"class":94},"'focus'",[40,64627,15757],{"class":50},[40,64629,57747],{"class":1283},[40,64631,57750],{"class":50},[40,64633,64634],{"class":42,"line":20172},[40,64635,64636],{"class":997},"            \u002F\u002F ul显示\n",[40,64638,64639,64642,64644],{"class":42,"line":20177},[40,64640,64641],{"class":50},"            ul.style.display ",[40,64643,1284],{"class":1283},[40,64645,64646],{"class":94}," 'block'\n",[40,64648,64649],{"class":42,"line":20191},[40,64650,64651],{"class":997},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[40,64653,64654,64657,64659,64661,64664],{"class":42,"line":20203},[40,64655,64656],{"class":50},"            input.classList.",[40,64658,8657],{"class":596},[40,64660,3488],{"class":50},[40,64662,64663],{"class":94},"'search'",[40,64665,1811],{"class":50},[40,64667,64668],{"class":42,"line":20208},[40,64669,64670],{"class":50},"        })\n",[40,64672,64673],{"class":42,"line":20221},[40,64674,64675],{"class":997},"        \u002F\u002F 3. 监听事件 失去焦点\n",[40,64677,64678,64680,64682,64684,64687,64689,64691],{"class":42,"line":20226},[40,64679,64618],{"class":50},[40,64681,61111],{"class":596},[40,64683,3488],{"class":50},[40,64685,64686],{"class":94},"'blur'",[40,64688,15757],{"class":50},[40,64690,57747],{"class":1283},[40,64692,57750],{"class":50},[40,64694,64695,64697,64699],{"class":42,"line":20231},[40,64696,64641],{"class":50},[40,64698,1284],{"class":1283},[40,64700,64701],{"class":94}," 'none'\n",[40,64703,64704,64706,64708,64710,64712],{"class":42,"line":20236},[40,64705,64656],{"class":50},[40,64707,60304],{"class":596},[40,64709,3488],{"class":50},[40,64711,64663],{"class":94},[40,64713,1811],{"class":50},[40,64715,64716],{"class":42,"line":20249},[40,64717,64670],{"class":50},[40,64719,64720,64722,64724],{"class":42,"line":20254},[40,64721,55074],{"class":50},[40,64723,55111],{"class":46},[40,64725,54606],{"class":50},[40,64727,64728,64730,64732],{"class":42,"line":35933},[40,64729,55083],{"class":50},[40,64731,55098],{"class":46},[40,64733,54606],{"class":50},[40,64735,64736],{"class":42,"line":35939},[40,64737,1413],{"emptyLinePlaceholder":1412},[40,64739,64740,64742,64744],{"class":42,"line":35945},[40,64741,55083],{"class":50},[40,64743,53935],{"class":46},[40,64745,54606],{"class":50},[2423,64747,64749],{"id":64748},"_3253-键盘事件","3.2.5.3 键盘事件",[19,64751,64752],{},"评论字数统计案例",[19,64754,64755],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,64757,64758],{},"牢记focus伪类选择器",[54643,64760],{"charSet":64761},"UTF-8",[54643,64763],{"name":64764,"content":64765},"viewport","width=device-width, initial-scale=1.0",[54706,64767,64768],{},"Document",[3384,64770,64771],{},"\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",[57119,64773],{"type":8510},[1338,64775,64776,64779],{},[495,64777,64778],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[495,64780,64781],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[31,64783,64785],{"className":53933,"code":64784,"language":53935,"meta":36,"style":36},"\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",[26,64786,64787,64797,64811,64815,64823,64837,64857,64877,64890,64898,64905,64918,64932,64942,64952,64956,64960,64967,64979,64991,65003,65015,65044,65057,65061,65065,65074,65085,65097,65108,65119,65131,65142,65154,65170,65182,65186,65190,65201,65212,65222,65234,65238,65242,65250,65261,65271,65282,65294,65307,65319,65331,65335,65339,65348,65360,65371,65384,65395,65409,65413,65417,65424,65436,65448,65458,65462,65466,65475,65487,65497,65501,65505,65516,65526,65545,65558,65562,65566,65576,65586,65590,65594,65605,65616,65628,65640,65644,65648,65659,65670,65684,65688,65692,65703,65713,65725,65729,65737,65745,65749,65757,65772,65791,65831,65844,65852,65866,65886,65894,65909,65932,65950,65965,65985,66005,66025,66033,66041,66049,66057,66077,66097,66102,66119,66128,66132,66137,66153,66161,66165,66170,66187,66192,66217,66221,66225,66230,66235,66243,66251,66255],{"__ignoreMap":36},[40,64788,64789,64791,64793,64795],{"class":42,"line":43},[40,64790,54597],{"class":50},[40,64792,54600],{"class":46},[40,64794,54603],{"class":596},[40,64796,54606],{"class":50},[40,64798,64799,64801,64803,64805,64807,64809],{"class":42,"line":54},[40,64800,4387],{"class":50},[40,64802,53935],{"class":46},[40,64804,54615],{"class":596},[40,64806,1284],{"class":50},[40,64808,54620],{"class":94},[40,64810,54606],{"class":50},[40,64812,64813],{"class":42,"line":70},[40,64814,1413],{"emptyLinePlaceholder":1412},[40,64816,64817,64819,64821],{"class":42,"line":78},[40,64818,4387],{"class":50},[40,64820,54633],{"class":46},[40,64822,54606],{"class":50},[40,64824,64825,64827,64829,64831,64833,64835],{"class":42,"line":86},[40,64826,55442],{"class":50},[40,64828,54643],{"class":46},[40,64830,54646],{"class":596},[40,64832,1284],{"class":50},[40,64834,54651],{"class":94},[40,64836,54606],{"class":50},[40,64838,64839,64841,64843,64845,64847,64849,64851,64853,64855],{"class":42,"line":100},[40,64840,55442],{"class":50},[40,64842,54643],{"class":46},[40,64844,54662],{"class":596},[40,64846,1284],{"class":50},[40,64848,54667],{"class":94},[40,64850,54670],{"class":596},[40,64852,1284],{"class":50},[40,64854,54675],{"class":94},[40,64856,54606],{"class":50},[40,64858,64859,64861,64863,64865,64867,64869,64871,64873,64875],{"class":42,"line":108},[40,64860,55442],{"class":50},[40,64862,54643],{"class":46},[40,64864,18242],{"class":596},[40,64866,1284],{"class":50},[40,64868,54690],{"class":94},[40,64870,54670],{"class":596},[40,64872,1284],{"class":50},[40,64874,54697],{"class":94},[40,64876,54606],{"class":50},[40,64878,64879,64881,64883,64886,64888],{"class":42,"line":121},[40,64880,55442],{"class":50},[40,64882,54706],{"class":46},[40,64884,64885],{"class":50},">评论回车发布\u003C\u002F",[40,64887,54706],{"class":46},[40,64889,54606],{"class":50},[40,64891,64892,64894,64896],{"class":42,"line":134},[40,64893,55442],{"class":50},[40,64895,3384],{"class":46},[40,64897,54606],{"class":50},[40,64899,64900,64903],{"class":42,"line":146},[40,64901,64902],{"class":596},"    .wrapper",[40,64904,18894],{"class":50},[40,64906,64907,64910,64912,64914,64916],{"class":42,"line":154},[40,64908,64909],{"class":63},"      min-width",[40,64911,60],{"class":50},[40,64913,7310],{"class":63},[40,64915,54790],{"class":1283},[40,64917,4637],{"class":50},[40,64919,64920,64923,64925,64928,64930],{"class":42,"line":162},[40,64921,64922],{"class":63},"      max-width",[40,64924,60],{"class":50},[40,64926,64927],{"class":63},"800",[40,64929,54790],{"class":1283},[40,64931,4637],{"class":50},[40,64933,64934,64936,64938,64940],{"class":42,"line":170},[40,64935,58307],{"class":63},[40,64937,60],{"class":50},[40,64939,54775],{"class":63},[40,64941,4637],{"class":50},[40,64943,64944,64946,64948,64950],{"class":42,"line":183},[40,64945,58318],{"class":63},[40,64947,60],{"class":50},[40,64949,54878],{"class":63},[40,64951,4637],{"class":50},[40,64953,64954],{"class":42,"line":196},[40,64955,5513],{"class":50},[40,64957,64958],{"class":42,"line":204},[40,64959,1413],{"emptyLinePlaceholder":1412},[40,64961,64962,64965],{"class":42,"line":217},[40,64963,64964],{"class":596},"    .avatar",[40,64966,18894],{"class":50},[40,64968,64969,64971,64973,64975,64977],{"class":42,"line":230},[40,64970,58069],{"class":63},[40,64972,60],{"class":50},[40,64974,4086],{"class":63},[40,64976,54790],{"class":1283},[40,64978,4637],{"class":50},[40,64980,64981,64983,64985,64987,64989],{"class":42,"line":238},[40,64982,58083],{"class":63},[40,64984,60],{"class":50},[40,64986,4086],{"class":63},[40,64988,54790],{"class":1283},[40,64990,4637],{"class":50},[40,64992,64993,64995,64997,64999,65001],{"class":42,"line":251},[40,64994,58432],{"class":63},[40,64996,60],{"class":50},[40,64998,4134],{"class":63},[40,65000,3808],{"class":1283},[40,65002,4637],{"class":50},[40,65004,65005,65008,65010,65013],{"class":42,"line":264},[40,65006,65007],{"class":63},"      overflow",[40,65009,60],{"class":50},[40,65011,65012],{"class":63},"hidden",[40,65014,4637],{"class":50},[40,65016,65017,65020,65022,65025,65027,65030,65032,65035,65037,65039,65042],{"class":42,"line":277},[40,65018,65019],{"class":63},"      background",[40,65021,60],{"class":50},[40,65023,65024],{"class":63},"url",[40,65026,3488],{"class":50},[40,65028,65029],{"class":8539},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[40,65031,17036],{"class":50},[40,65033,65034],{"class":63},"no-repeat",[40,65036,20466],{"class":63},[40,65038,28293],{"class":50},[40,65040,65041],{"class":63},"cover",[40,65043,4637],{"class":50},[40,65045,65046,65049,65051,65053,65055],{"class":42,"line":290},[40,65047,65048],{"class":63},"      margin-right",[40,65050,60],{"class":50},[40,65052,4178],{"class":63},[40,65054,54790],{"class":1283},[40,65056,4637],{"class":50},[40,65058,65059],{"class":42,"line":298},[40,65060,5513],{"class":50},[40,65062,65063],{"class":42,"line":310},[40,65064,1413],{"emptyLinePlaceholder":1412},[40,65066,65067,65069,65072],{"class":42,"line":5086},[40,65068,64902],{"class":596},[40,65070,65071],{"class":46}," textarea",[40,65073,18894],{"class":50},[40,65075,65076,65079,65081,65083],{"class":42,"line":5091},[40,65077,65078],{"class":63},"      outline",[40,65080,60],{"class":50},[40,65082,58035],{"class":63},[40,65084,4637],{"class":50},[40,65086,65087,65090,65092,65095],{"class":42,"line":5105},[40,65088,65089],{"class":63},"      border-color",[40,65091,60],{"class":50},[40,65093,65094],{"class":63},"transparent",[40,65096,4637],{"class":50},[40,65098,65099,65102,65104,65106],{"class":42,"line":5110},[40,65100,65101],{"class":63},"      resize",[40,65103,60],{"class":50},[40,65105,58035],{"class":63},[40,65107,4637],{"class":50},[40,65109,65110,65112,65114,65117],{"class":42,"line":5902},[40,65111,65019],{"class":63},[40,65113,60],{"class":50},[40,65115,65116],{"class":63},"#f5f5f5",[40,65118,4637],{"class":50},[40,65120,65121,65123,65125,65127,65129],{"class":42,"line":5916},[40,65122,58432],{"class":63},[40,65124,60],{"class":50},[40,65126,3773],{"class":63},[40,65128,54790],{"class":1283},[40,65130,4637],{"class":50},[40,65132,65133,65136,65138,65140],{"class":42,"line":5924},[40,65134,65135],{"class":63},"      flex",[40,65137,60],{"class":50},[40,65139,3698],{"class":63},[40,65141,4637],{"class":50},[40,65143,65144,65146,65148,65150,65152],{"class":42,"line":5929},[40,65145,57993],{"class":63},[40,65147,60],{"class":50},[40,65149,3925],{"class":63},[40,65151,54790],{"class":1283},[40,65153,4637],{"class":50},[40,65155,65156,65159,65161,65163,65166,65168],{"class":42,"line":5935},[40,65157,65158],{"class":63},"      transition",[40,65160,60],{"class":50},[40,65162,31426],{"class":63},[40,65164,65165],{"class":63}," 0.5",[40,65167,4173],{"class":1283},[40,65169,4637],{"class":50},[40,65171,65172,65174,65176,65178,65180],{"class":42,"line":5941},[40,65173,58083],{"class":63},[40,65175,60],{"class":50},[40,65177,4428],{"class":63},[40,65179,54790],{"class":1283},[40,65181,4637],{"class":50},[40,65183,65184],{"class":42,"line":5946},[40,65185,5513],{"class":50},[40,65187,65188],{"class":42,"line":11270},[40,65189,1413],{"emptyLinePlaceholder":1412},[40,65191,65192,65194,65196,65199],{"class":42,"line":11294},[40,65193,64902],{"class":596},[40,65195,65071],{"class":46},[40,65197,65198],{"class":596},":focus",[40,65200,18894],{"class":50},[40,65202,65203,65205,65207,65210],{"class":42,"line":11299},[40,65204,65089],{"class":63},[40,65206,60],{"class":50},[40,65208,65209],{"class":63},"#e4e4e4",[40,65211,4637],{"class":50},[40,65213,65214,65216,65218,65220],{"class":42,"line":11305},[40,65215,65019],{"class":63},[40,65217,60],{"class":50},[40,65219,64140],{"class":63},[40,65221,4637],{"class":50},[40,65223,65224,65226,65228,65230,65232],{"class":42,"line":11332},[40,65225,58083],{"class":63},[40,65227,60],{"class":50},[40,65229,4134],{"class":63},[40,65231,54790],{"class":1283},[40,65233,4637],{"class":50},[40,65235,65236],{"class":42,"line":11337},[40,65237,5513],{"class":50},[40,65239,65240],{"class":42,"line":11343},[40,65241,1413],{"emptyLinePlaceholder":1412},[40,65243,65244,65246,65248],{"class":42,"line":11355},[40,65245,64902],{"class":596},[40,65247,60765],{"class":46},[40,65249,18894],{"class":50},[40,65251,65252,65254,65256,65259],{"class":42,"line":11367},[40,65253,65019],{"class":63},[40,65255,60],{"class":50},[40,65257,65258],{"class":63},"#00aeec",[40,65260,4637],{"class":50},[40,65262,65263,65265,65267,65269],{"class":42,"line":11379},[40,65264,60714],{"class":63},[40,65266,60],{"class":50},[40,65268,64140],{"class":63},[40,65270,4637],{"class":50},[40,65272,65273,65276,65278,65280],{"class":42,"line":13038},[40,65274,65275],{"class":63},"      border",[40,65277,60],{"class":50},[40,65279,58035],{"class":63},[40,65281,4637],{"class":50},[40,65283,65284,65286,65288,65290,65292],{"class":42,"line":13063},[40,65285,58432],{"class":63},[40,65287,60],{"class":50},[40,65289,3773],{"class":63},[40,65291,54790],{"class":1283},[40,65293,4637],{"class":50},[40,65295,65296,65299,65301,65303,65305],{"class":42,"line":13086},[40,65297,65298],{"class":63},"      margin-left",[40,65300,60],{"class":50},[40,65302,3925],{"class":63},[40,65304,54790],{"class":1283},[40,65306,4637],{"class":50},[40,65308,65309,65311,65313,65315,65317],{"class":42,"line":13110},[40,65310,58069],{"class":63},[40,65312,60],{"class":50},[40,65314,3836],{"class":63},[40,65316,54790],{"class":1283},[40,65318,4637],{"class":50},[40,65320,65321,65324,65326,65329],{"class":42,"line":13115},[40,65322,65323],{"class":63},"      cursor",[40,65325,60],{"class":50},[40,65327,65328],{"class":63},"pointer",[40,65330,4637],{"class":50},[40,65332,65333],{"class":42,"line":13120},[40,65334,5513],{"class":50},[40,65336,65337],{"class":42,"line":13125},[40,65338,1413],{"emptyLinePlaceholder":1412},[40,65340,65341,65343,65346],{"class":42,"line":13134},[40,65342,64902],{"class":596},[40,65344,65345],{"class":596}," .total",[40,65347,18894],{"class":50},[40,65349,65350,65352,65354,65356,65358],{"class":42,"line":13139},[40,65351,65048],{"class":63},[40,65353,60],{"class":50},[40,65355,4091],{"class":63},[40,65357,54790],{"class":1283},[40,65359,4637],{"class":50},[40,65361,65362,65364,65366,65369],{"class":42,"line":13145},[40,65363,60714],{"class":63},[40,65365,60],{"class":50},[40,65367,65368],{"class":63},"#999",[40,65370,4637],{"class":50},[40,65372,65373,65376,65378,65380,65382],{"class":42,"line":13166},[40,65374,65375],{"class":63},"      margin-top",[40,65377,60],{"class":50},[40,65379,3799],{"class":63},[40,65381,54790],{"class":1283},[40,65383,4637],{"class":50},[40,65385,65386,65389,65391,65393],{"class":42,"line":13172},[40,65387,65388],{"class":63},"      opacity",[40,65390,60],{"class":50},[40,65392,3672],{"class":63},[40,65394,4637],{"class":50},[40,65396,65397,65399,65401,65403,65405,65407],{"class":42,"line":13186},[40,65398,65158],{"class":63},[40,65400,60],{"class":50},[40,65402,31426],{"class":63},[40,65404,65165],{"class":63},[40,65406,4173],{"class":1283},[40,65408,4637],{"class":50},[40,65410,65411],{"class":42,"line":13192},[40,65412,5513],{"class":50},[40,65414,65415],{"class":42,"line":13219},[40,65416,1413],{"emptyLinePlaceholder":1412},[40,65418,65419,65422],{"class":42,"line":13228},[40,65420,65421],{"class":596},"    .list",[40,65423,18894],{"class":50},[40,65425,65426,65428,65430,65432,65434],{"class":42,"line":13234},[40,65427,64909],{"class":63},[40,65429,60],{"class":50},[40,65431,7310],{"class":63},[40,65433,54790],{"class":1283},[40,65435,4637],{"class":50},[40,65437,65438,65440,65442,65444,65446],{"class":42,"line":13242},[40,65439,64922],{"class":63},[40,65441,60],{"class":50},[40,65443,64927],{"class":63},[40,65445,54790],{"class":1283},[40,65447,4637],{"class":50},[40,65449,65450,65452,65454,65456],{"class":42,"line":13247},[40,65451,58307],{"class":63},[40,65453,60],{"class":50},[40,65455,54775],{"class":63},[40,65457,4637],{"class":50},[40,65459,65460],{"class":42,"line":19926},[40,65461,5513],{"class":50},[40,65463,65464],{"class":42,"line":19932},[40,65465,1413],{"emptyLinePlaceholder":1412},[40,65467,65468,65470,65473],{"class":42,"line":19955},[40,65469,65421],{"class":596},[40,65471,65472],{"class":596}," .item",[40,65474,18894],{"class":50},[40,65476,65477,65479,65481,65483,65485],{"class":42,"line":19961},[40,65478,58069],{"class":63},[40,65480,60],{"class":50},[40,65482,3791],{"class":63},[40,65484,3808],{"class":1283},[40,65486,4637],{"class":50},[40,65488,65489,65491,65493,65495],{"class":42,"line":19984},[40,65490,58307],{"class":63},[40,65492,60],{"class":50},[40,65494,54775],{"class":63},[40,65496,4637],{"class":50},[40,65498,65499],{"class":42,"line":19998},[40,65500,5513],{"class":50},[40,65502,65503],{"class":42,"line":20018},[40,65504,1413],{"emptyLinePlaceholder":1412},[40,65506,65507,65509,65511,65514],{"class":42,"line":20024},[40,65508,65421],{"class":596},[40,65510,65472],{"class":596},[40,65512,65513],{"class":596}," .info",[40,65515,18894],{"class":50},[40,65517,65518,65520,65522,65524],{"class":42,"line":20035},[40,65519,65135],{"class":63},[40,65521,60],{"class":50},[40,65523,3698],{"class":63},[40,65525,4637],{"class":50},[40,65527,65528,65531,65533,65535,65537,65540,65543],{"class":42,"line":20058},[40,65529,65530],{"class":63},"      border-bottom",[40,65532,60],{"class":50},[40,65534,3698],{"class":63},[40,65536,54790],{"class":1283},[40,65538,65539],{"class":63}," dashed",[40,65541,65542],{"class":63}," #e4e4e4",[40,65544,4637],{"class":50},[40,65546,65547,65550,65552,65554,65556],{"class":42,"line":20080},[40,65548,65549],{"class":63},"      padding-bottom",[40,65551,60],{"class":50},[40,65553,3925],{"class":63},[40,65555,54790],{"class":1283},[40,65557,4637],{"class":50},[40,65559,65560],{"class":42,"line":20085},[40,65561,5513],{"class":50},[40,65563,65564],{"class":42,"line":20091},[40,65565,1413],{"emptyLinePlaceholder":1412},[40,65567,65568,65570,65572,65574],{"class":42,"line":20105},[40,65569,65421],{"class":596},[40,65571,65472],{"class":596},[40,65573,10148],{"class":46},[40,65575,18894],{"class":50},[40,65577,65578,65580,65582,65584],{"class":42,"line":20118},[40,65579,58004],{"class":63},[40,65581,60],{"class":50},[40,65583,3672],{"class":63},[40,65585,4637],{"class":50},[40,65587,65588],{"class":42,"line":20123},[40,65589,5513],{"class":50},[40,65591,65592],{"class":42,"line":20137},[40,65593,1413],{"emptyLinePlaceholder":1412},[40,65595,65596,65598,65600,65603],{"class":42,"line":20142},[40,65597,65421],{"class":596},[40,65599,65472],{"class":596},[40,65601,65602],{"class":596}," .name",[40,65604,18894],{"class":50},[40,65606,65607,65609,65611,65614],{"class":42,"line":20148},[40,65608,60714],{"class":63},[40,65610,60],{"class":50},[40,65612,65613],{"class":63},"#FB7299",[40,65615,4637],{"class":50},[40,65617,65618,65620,65622,65624,65626],{"class":42,"line":20153},[40,65619,58220],{"class":63},[40,65621,60],{"class":50},[40,65623,4028],{"class":63},[40,65625,54790],{"class":1283},[40,65627,4637],{"class":50},[40,65629,65630,65633,65635,65638],{"class":42,"line":20167},[40,65631,65632],{"class":63},"      font-weight",[40,65634,60],{"class":50},[40,65636,65637],{"class":63},"bold",[40,65639,4637],{"class":50},[40,65641,65642],{"class":42,"line":20172},[40,65643,5513],{"class":50},[40,65645,65646],{"class":42,"line":20177},[40,65647,1413],{"emptyLinePlaceholder":1412},[40,65649,65650,65652,65654,65657],{"class":42,"line":20191},[40,65651,65421],{"class":596},[40,65653,65472],{"class":596},[40,65655,65656],{"class":596}," .text",[40,65658,18894],{"class":50},[40,65660,65661,65663,65665,65668],{"class":42,"line":20203},[40,65662,60714],{"class":63},[40,65664,60],{"class":50},[40,65666,65667],{"class":63},"#333",[40,65669,4637],{"class":50},[40,65671,65672,65674,65676,65678,65680,65682],{"class":42,"line":20208},[40,65673,57993],{"class":63},[40,65675,60],{"class":50},[40,65677,3925],{"class":63},[40,65679,54790],{"class":1283},[40,65681,7416],{"class":63},[40,65683,4637],{"class":50},[40,65685,65686],{"class":42,"line":20221},[40,65687,5513],{"class":50},[40,65689,65690],{"class":42,"line":20226},[40,65691,1413],{"emptyLinePlaceholder":1412},[40,65693,65694,65696,65698,65701],{"class":42,"line":20231},[40,65695,65421],{"class":596},[40,65697,65472],{"class":596},[40,65699,65700],{"class":596}," .time",[40,65702,18894],{"class":50},[40,65704,65705,65707,65709,65711],{"class":42,"line":20236},[40,65706,60714],{"class":63},[40,65708,60],{"class":50},[40,65710,65368],{"class":63},[40,65712,4637],{"class":50},[40,65714,65715,65717,65719,65721,65723],{"class":42,"line":20249},[40,65716,58220],{"class":63},[40,65718,60],{"class":50},[40,65720,3977],{"class":63},[40,65722,54790],{"class":1283},[40,65724,4637],{"class":50},[40,65726,65727],{"class":42,"line":20254},[40,65728,5513],{"class":50},[40,65730,65731,65733,65735],{"class":42,"line":35933},[40,65732,55715],{"class":50},[40,65734,3384],{"class":46},[40,65736,54606],{"class":50},[40,65738,65739,65741,65743],{"class":42,"line":35939},[40,65740,55083],{"class":50},[40,65742,54633],{"class":46},[40,65744,54606],{"class":50},[40,65746,65747],{"class":42,"line":35945},[40,65748,1413],{"emptyLinePlaceholder":1412},[40,65750,65751,65753,65755],{"class":42,"line":35951},[40,65752,4387],{"class":50},[40,65754,55098],{"class":46},[40,65756,54606],{"class":50},[40,65758,65759,65761,65763,65765,65767,65770],{"class":42,"line":35957},[40,65760,55442],{"class":50},[40,65762,54909],{"class":46},[40,65764,56784],{"class":596},[40,65766,1284],{"class":50},[40,65768,65769],{"class":94},"\"wrapper\"",[40,65771,54606],{"class":50},[40,65773,65774,65776,65778,65780,65782,65785,65787,65789],{"class":42,"line":35968},[40,65775,54640],{"class":50},[40,65777,3920],{"class":46},[40,65779,56784],{"class":596},[40,65781,1284],{"class":50},[40,65783,65784],{"class":94},"\"avatar\"",[40,65786,58612],{"class":50},[40,65788,3920],{"class":46},[40,65790,54606],{"class":50},[40,65792,65793,65795,65797,65799,65801,65804,65806,65808,65811,65813,65815,65817,65820,65822,65825,65827,65829],{"class":42,"line":35974},[40,65794,54640],{"class":50},[40,65796,57586],{"class":46},[40,65798,18281],{"class":596},[40,65800,1284],{"class":50},[40,65802,65803],{"class":94},"\"tx\"",[40,65805,64318],{"class":596},[40,65807,1284],{"class":50},[40,65809,65810],{"class":94},"\"发一条友善的评论\"",[40,65812,57609],{"class":596},[40,65814,1284],{"class":50},[40,65816,7025],{"class":94},[40,65818,65819],{"class":596}," maxlength",[40,65821,1284],{"class":50},[40,65823,65824],{"class":94},"\"200\"",[40,65826,58612],{"class":50},[40,65828,57586],{"class":46},[40,65830,54606],{"class":50},[40,65832,65833,65835,65837,65840,65842],{"class":42,"line":35994},[40,65834,54640],{"class":50},[40,65836,57185],{"class":46},[40,65838,65839],{"class":50},">发布\u003C\u002F",[40,65841,57185],{"class":46},[40,65843,54606],{"class":50},[40,65845,65846,65848,65850],{"class":42,"line":36000},[40,65847,55715],{"class":50},[40,65849,54909],{"class":46},[40,65851,54606],{"class":50},[40,65853,65854,65856,65858,65860,65862,65864],{"class":42,"line":36011},[40,65855,55442],{"class":50},[40,65857,54909],{"class":46},[40,65859,56784],{"class":596},[40,65861,1284],{"class":50},[40,65863,65769],{"class":94},[40,65865,54606],{"class":50},[40,65867,65868,65870,65872,65874,65876,65879,65882,65884],{"class":42,"line":36017},[40,65869,54640],{"class":50},[40,65871,40],{"class":46},[40,65873,56784],{"class":596},[40,65875,1284],{"class":50},[40,65877,65878],{"class":94},"\"total\"",[40,65880,65881],{"class":50},">0\u002F200字\u003C\u002F",[40,65883,40],{"class":46},[40,65885,54606],{"class":50},[40,65887,65888,65890,65892],{"class":42,"line":36023},[40,65889,55715],{"class":50},[40,65891,54909],{"class":46},[40,65893,54606],{"class":50},[40,65895,65896,65898,65900,65902,65904,65907],{"class":42,"line":36029},[40,65897,55442],{"class":50},[40,65899,54909],{"class":46},[40,65901,56784],{"class":596},[40,65903,1284],{"class":50},[40,65905,65906],{"class":94},"\"list\"",[40,65908,54606],{"class":50},[40,65910,65911,65913,65915,65917,65919,65922,65925,65927,65930],{"class":42,"line":36035},[40,65912,54640],{"class":50},[40,65914,54909],{"class":46},[40,65916,56784],{"class":596},[40,65918,1284],{"class":50},[40,65920,65921],{"class":94},"\"item\"",[40,65923,65924],{"class":596}," style",[40,65926,1284],{"class":50},[40,65928,65929],{"class":94},"\"display: none;\"",[40,65931,54606],{"class":50},[40,65933,65934,65936,65938,65940,65942,65944,65946,65948],{"class":42,"line":36041},[40,65935,58532],{"class":50},[40,65937,3920],{"class":46},[40,65939,56784],{"class":596},[40,65941,1284],{"class":50},[40,65943,65784],{"class":94},[40,65945,58612],{"class":50},[40,65947,3920],{"class":46},[40,65949,54606],{"class":50},[40,65951,65952,65954,65956,65958,65960,65963],{"class":42,"line":36047},[40,65953,58532],{"class":50},[40,65955,54909],{"class":46},[40,65957,56784],{"class":596},[40,65959,1284],{"class":50},[40,65961,65962],{"class":94},"\"info\"",[40,65964,54606],{"class":50},[40,65966,65967,65969,65971,65973,65975,65978,65981,65983],{"class":42,"line":36053},[40,65968,58600],{"class":50},[40,65970,19],{"class":46},[40,65972,56784],{"class":596},[40,65974,1284],{"class":50},[40,65976,65977],{"class":94},"\"name\"",[40,65979,65980],{"class":50},">清风徐来\u003C\u002F",[40,65982,19],{"class":46},[40,65984,54606],{"class":50},[40,65986,65987,65989,65991,65993,65995,65998,66001,66003],{"class":42,"line":36073},[40,65988,58600],{"class":50},[40,65990,19],{"class":46},[40,65992,56784],{"class":596},[40,65994,1284],{"class":50},[40,65996,65997],{"class":94},"\"text\"",[40,65999,66000],{"class":50},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[40,66002,19],{"class":46},[40,66004,54606],{"class":50},[40,66006,66007,66009,66011,66013,66015,66018,66021,66023],{"class":42,"line":36079},[40,66008,58600],{"class":50},[40,66010,19],{"class":46},[40,66012,56784],{"class":596},[40,66014,1284],{"class":50},[40,66016,66017],{"class":94},"\"time\"",[40,66019,66020],{"class":50},">2022-10-10 20:29:21\u003C\u002F",[40,66022,19],{"class":46},[40,66024,54606],{"class":50},[40,66026,66027,66029,66031],{"class":42,"line":36095},[40,66028,58705],{"class":50},[40,66030,54909],{"class":46},[40,66032,54606],{"class":50},[40,66034,66035,66037,66039],{"class":42,"line":36101},[40,66036,55074],{"class":50},[40,66038,54909],{"class":46},[40,66040,54606],{"class":50},[40,66042,66043,66045,66047],{"class":42,"line":36115},[40,66044,55715],{"class":50},[40,66046,54909],{"class":46},[40,66048,54606],{"class":50},[40,66050,66051,66053,66055],{"class":42,"line":36121},[40,66052,55442],{"class":50},[40,66054,55111],{"class":46},[40,66056,54606],{"class":50},[40,66058,66059,66061,66064,66066,66068,66070,66072,66075],{"class":42,"line":36136},[40,66060,14543],{"class":1283},[40,66062,66063],{"class":63}," tx",[40,66065,16886],{"class":1283},[40,66067,57694],{"class":50},[40,66069,57697],{"class":596},[40,66071,3488],{"class":50},[40,66073,66074],{"class":94},"'#tx'",[40,66076,1811],{"class":50},[40,66078,66079,66081,66084,66086,66088,66090,66092,66095],{"class":42,"line":36142},[40,66080,14543],{"class":1283},[40,66082,66083],{"class":63}," total",[40,66085,16886],{"class":1283},[40,66087,57694],{"class":50},[40,66089,57697],{"class":596},[40,66091,3488],{"class":50},[40,66093,66094],{"class":94},"'.total'",[40,66096,1811],{"class":50},[40,66098,66099],{"class":42,"line":36151},[40,66100,66101],{"class":997},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[40,66103,66104,66107,66109,66111,66113,66115,66117],{"class":42,"line":36157},[40,66105,66106],{"class":50},"    tx.",[40,66108,61111],{"class":596},[40,66110,3488],{"class":50},[40,66112,64625],{"class":94},[40,66114,15757],{"class":50},[40,66116,57747],{"class":1283},[40,66118,57750],{"class":50},[40,66120,66121,66124,66126],{"class":42,"line":36166},[40,66122,66123],{"class":50},"      total.style.opacity ",[40,66125,1284],{"class":1283},[40,66127,58997],{"class":63},[40,66129,66130],{"class":42,"line":36172},[40,66131,36761],{"class":50},[40,66133,66134],{"class":42,"line":36178},[40,66135,66136],{"class":997},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[40,66138,66139,66141,66143,66145,66147,66149,66151],{"class":42,"line":36187},[40,66140,66106],{"class":50},[40,66142,61111],{"class":596},[40,66144,3488],{"class":50},[40,66146,64686],{"class":94},[40,66148,15757],{"class":50},[40,66150,57747],{"class":1283},[40,66152,57750],{"class":50},[40,66154,66155,66157,66159],{"class":42,"line":36193},[40,66156,66123],{"class":50},[40,66158,1284],{"class":1283},[40,66160,50633],{"class":63},[40,66162,66163],{"class":42,"line":36204},[40,66164,36761],{"class":50},[40,66166,66167],{"class":42,"line":36210},[40,66168,66169],{"class":997},"    \u002F\u002F 3. 检测用户输入\n",[40,66171,66172,66174,66176,66178,66181,66183,66185],{"class":42,"line":36229},[40,66173,66106],{"class":50},[40,66175,61111],{"class":596},[40,66177,3488],{"class":50},[40,66179,66180],{"class":94},"'input'",[40,66182,15757],{"class":50},[40,66184,57747],{"class":1283},[40,66186,57750],{"class":50},[40,66188,66189],{"class":42,"line":36235},[40,66190,66191],{"class":997},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[40,66193,66194,66197,66199,66202,66205,66207,66210,66212,66214],{"class":42,"line":36246},[40,66195,66196],{"class":50},"      total.innerHTML ",[40,66198,1284],{"class":1283},[40,66200,66201],{"class":94}," `${",[40,66203,66204],{"class":50},"tx",[40,66206,4037],{"class":94},[40,66208,66209],{"class":50},"value",[40,66211,4037],{"class":94},[40,66213,55266],{"class":63},[40,66215,66216],{"class":94},"}\u002F200字`\n",[40,66218,66219],{"class":42,"line":36252},[40,66220,36761],{"class":50},[40,66222,66223],{"class":42,"line":36272},[40,66224,1413],{"emptyLinePlaceholder":1412},[40,66226,66227],{"class":42,"line":36288},[40,66228,66229],{"class":997},"    \u002F\u002F const str = 'andy'\n",[40,66231,66232],{"class":42,"line":36294},[40,66233,66234],{"class":997},"    \u002F\u002F console.log(str.length)\n",[40,66236,66237,66239,66241],{"class":42,"line":36308},[40,66238,55715],{"class":50},[40,66240,55111],{"class":46},[40,66242,54606],{"class":50},[40,66244,66245,66247,66249],{"class":42,"line":36314},[40,66246,55083],{"class":50},[40,66248,55098],{"class":46},[40,66250,54606],{"class":50},[40,66252,66253],{"class":42,"line":36320},[40,66254,1413],{"emptyLinePlaceholder":1412},[40,66256,66257,66259,66261],{"class":42,"line":36331},[40,66258,55083],{"class":50},[40,66260,53935],{"class":46},[40,66262,54606],{"class":50},[2423,66264,66266],{"id":66265},"_3254-change事件","3.2.5.4 change事件",[19,66268,66269],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,66271,66272],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,66274,66275],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[31,66277,66279],{"className":53933,"code":66278,"language":53935,"meta":36,"style":36},"\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",[26,66280,66281,66291,66305,66309,66317,66331,66351,66363,66371,66375,66383,66397,66405,66423,66441,66453,66457,66465,66473,66477],{"__ignoreMap":36},[40,66282,66283,66285,66287,66289],{"class":42,"line":43},[40,66284,54597],{"class":50},[40,66286,54600],{"class":46},[40,66288,54603],{"class":596},[40,66290,54606],{"class":50},[40,66292,66293,66295,66297,66299,66301,66303],{"class":42,"line":54},[40,66294,4387],{"class":50},[40,66296,53935],{"class":46},[40,66298,54615],{"class":596},[40,66300,1284],{"class":50},[40,66302,54620],{"class":94},[40,66304,54606],{"class":50},[40,66306,66307],{"class":42,"line":70},[40,66308,1413],{"emptyLinePlaceholder":1412},[40,66310,66311,66313,66315],{"class":42,"line":78},[40,66312,4387],{"class":50},[40,66314,54633],{"class":46},[40,66316,54606],{"class":50},[40,66318,66319,66321,66323,66325,66327,66329],{"class":42,"line":86},[40,66320,55442],{"class":50},[40,66322,54643],{"class":46},[40,66324,54646],{"class":596},[40,66326,1284],{"class":50},[40,66328,54651],{"class":94},[40,66330,54606],{"class":50},[40,66332,66333,66335,66337,66339,66341,66343,66345,66347,66349],{"class":42,"line":100},[40,66334,55442],{"class":50},[40,66336,54643],{"class":46},[40,66338,18242],{"class":596},[40,66340,1284],{"class":50},[40,66342,54690],{"class":94},[40,66344,54670],{"class":596},[40,66346,1284],{"class":50},[40,66348,54697],{"class":94},[40,66350,54606],{"class":50},[40,66352,66353,66355,66357,66359,66361],{"class":42,"line":108},[40,66354,55442],{"class":50},[40,66356,54706],{"class":46},[40,66358,54709],{"class":50},[40,66360,54706],{"class":46},[40,66362,54606],{"class":50},[40,66364,66365,66367,66369],{"class":42,"line":121},[40,66366,55083],{"class":50},[40,66368,54633],{"class":46},[40,66370,54606],{"class":50},[40,66372,66373],{"class":42,"line":134},[40,66374,1413],{"emptyLinePlaceholder":1412},[40,66376,66377,66379,66381],{"class":42,"line":146},[40,66378,4387],{"class":50},[40,66380,55098],{"class":46},[40,66382,54606],{"class":50},[40,66384,66385,66387,66389,66391,66393,66395],{"class":42,"line":154},[40,66386,55442],{"class":50},[40,66388,57119],{"class":46},[40,66390,57122],{"class":596},[40,66392,1284],{"class":50},[40,66394,65997],{"class":94},[40,66396,54606],{"class":50},[40,66398,66399,66401,66403],{"class":42,"line":162},[40,66400,55442],{"class":50},[40,66402,55111],{"class":46},[40,66404,54606],{"class":50},[40,66406,66407,66409,66411,66413,66415,66417,66419,66421],{"class":42,"line":170},[40,66408,14543],{"class":1283},[40,66410,63903],{"class":63},[40,66412,16886],{"class":1283},[40,66414,57694],{"class":50},[40,66416,57697],{"class":596},[40,66418,3488],{"class":50},[40,66420,66180],{"class":94},[40,66422,1811],{"class":50},[40,66424,66425,66428,66430,66432,66435,66437,66439],{"class":42,"line":183},[40,66426,66427],{"class":50},"    input.",[40,66429,61111],{"class":596},[40,66431,3488],{"class":50},[40,66433,66434],{"class":94},"'change'",[40,66436,15757],{"class":50},[40,66438,57747],{"class":1283},[40,66440,57750],{"class":50},[40,66442,66443,66445,66447,66449,66451],{"class":42,"line":196},[40,66444,61542],{"class":50},[40,66446,61545],{"class":596},[40,66448,3488],{"class":50},[40,66450,4072],{"class":63},[40,66452,1811],{"class":50},[40,66454,66455],{"class":42,"line":204},[40,66456,36761],{"class":50},[40,66458,66459,66461,66463],{"class":42,"line":217},[40,66460,55715],{"class":50},[40,66462,55111],{"class":46},[40,66464,54606],{"class":50},[40,66466,66467,66469,66471],{"class":42,"line":230},[40,66468,55083],{"class":50},[40,66470,55098],{"class":46},[40,66472,54606],{"class":50},[40,66474,66475],{"class":42,"line":238},[40,66476,1413],{"emptyLinePlaceholder":1412},[40,66478,66479,66481,66483],{"class":42,"line":251},[40,66480,55083],{"class":50},[40,66482,53935],{"class":46},[40,66484,54606],{"class":50},[19,66486,66487],{},"总结：内容发生改变才回去触发",[402,66489,66491],{"id":66490},"_326-事件对象","3.2.6 事件对象",[2423,66493,66495],{"id":66494},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,66497,66498],{},[438,66499],{"alt":36,"src":66500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,66502,66503],{},[438,66504],{"alt":36,"src":66505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,66507,66508],{},"点击一次，就输出了事件对象，它是个对象",[19,66510,66511],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,66513,66514],{},[438,66515],{"alt":36,"src":66516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[2423,66518,66520],{"id":66519},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,66522,66523],{},[438,66524],{"alt":36,"src":66525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,66527,66528],{},"实现按特殊字符才是实现打印输出效果：",[31,66530,66532],{"className":56365,"code":66531,"language":56367,"meta":36,"style":36},"\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",[26,66533,66534,66542,66547,66561,66569,66574,66579,66584,66589,66594,66599,66604,66609,66614,66618,66622,66630],{"__ignoreMap":36},[40,66535,66536,66538,66540],{"class":42,"line":43},[40,66537,4387],{"class":50},[40,66539,55098],{"class":46},[40,66541,54606],{"class":50},[40,66543,66544],{"class":42,"line":54},[40,66545,66546],{"class":997},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[40,66548,66549,66551,66553,66555,66557,66559],{"class":42,"line":70},[40,66550,55442],{"class":50},[40,66552,57119],{"class":46},[40,66554,57122],{"class":596},[40,66556,1284],{"class":50},[40,66558,65997],{"class":94},[40,66560,54606],{"class":50},[40,66562,66563,66565,66567],{"class":42,"line":78},[40,66564,55442],{"class":50},[40,66566,55111],{"class":46},[40,66568,54606],{"class":50},[40,66570,66571],{"class":42,"line":86},[40,66572,66573],{"class":50},"    \u002F\u002F const btn = document.querySelector('button')\n",[40,66575,66576],{"class":42,"line":100},[40,66577,66578],{"class":50},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[40,66580,66581],{"class":42,"line":108},[40,66582,66583],{"class":50},"    \u002F\u002F   console.log(e);\n",[40,66585,66586],{"class":42,"line":121},[40,66587,66588],{"class":50},"    \u002F\u002F })\n",[40,66590,66591],{"class":42,"line":134},[40,66592,66593],{"class":50},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[40,66595,66596],{"class":42,"line":146},[40,66597,66598],{"class":50},"    const input = document.querySelector('input')\n",[40,66600,66601],{"class":42,"line":154},[40,66602,66603],{"class":50},"    input.addEventListener('keyup', function (e) {\n",[40,66605,66606],{"class":42,"line":162},[40,66607,66608],{"class":50},"      if (e.key === 'Enter') {\n",[40,66610,66611],{"class":42,"line":170},[40,66612,66613],{"class":50},"        console.log('我按下了回车键')\n",[40,66615,66616],{"class":42,"line":183},[40,66617,55696],{"class":50},[40,66619,66620],{"class":42,"line":196},[40,66621,36761],{"class":50},[40,66623,66624,66626,66628],{"class":42,"line":204},[40,66625,55715],{"class":50},[40,66627,55111],{"class":46},[40,66629,54606],{"class":50},[40,66631,66632,66634,66636],{"class":42,"line":217},[40,66633,55083],{"class":50},[40,66635,55098],{"class":46},[40,66637,54606],{"class":50},[2423,66639,66641],{"id":66640},"_3263-trim方法","3.2.6.3 trim方法",[19,66643,66644],{},[438,66645],{"alt":36,"src":66646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,66648,66649],{},[438,66650],{"alt":36,"src":66651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,66653,66654],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,66656,66657],{},"str.trim()",[402,66659,66661],{"id":66660},"_327-环境对象","3.2.7 环境对象",[19,66663,66664],{},[438,66665],{"alt":36,"src":66666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,66668,66669],{},[438,66670],{"alt":36,"src":66671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,66673,66674],{},[438,66675],{"alt":36,"src":66676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,66678,66679],{},"实际函数调用是window.fn()",[19,66681,66682],{},"普通函数里面this指向的是window",[1338,66684,66685,66688,66691],{},[495,66686,66687],{},"在普通函数下，this指向的是window",[495,66689,66690],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[495,66692,66693],{},"箭头函数没有this",[19,66695,66696],{},"粗略记法就是：谁调用，this就指向谁",[19,66698,66699],{},[438,66700],{"alt":36,"src":66701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,66703,66704],{},[438,66705],{"alt":36,"src":66706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,66708,66709],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,66711,66712],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[31,66714,66716],{"className":56365,"code":66715,"language":56367,"meta":36,"style":36},"\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",[26,66717,66718,66726,66738,66746,66751,66756,66761,66766,66770,66778],{"__ignoreMap":36},[40,66719,66720,66722,66724],{"class":42,"line":43},[40,66721,4387],{"class":50},[40,66723,55098],{"class":46},[40,66725,54606],{"class":50},[40,66727,66728,66730,66732,66734,66736],{"class":42,"line":54},[40,66729,55442],{"class":50},[40,66731,57185],{"class":46},[40,66733,57191],{"class":50},[40,66735,57185],{"class":46},[40,66737,54606],{"class":50},[40,66739,66740,66742,66744],{"class":42,"line":70},[40,66741,55442],{"class":50},[40,66743,55111],{"class":46},[40,66745,54606],{"class":50},[40,66747,66748],{"class":42,"line":78},[40,66749,66750],{"class":50},"    const button = document.querySelector('button')\n",[40,66752,66753],{"class":42,"line":86},[40,66754,66755],{"class":50},"    button.addEventListener('click', function () {\n",[40,66757,66758],{"class":42,"line":100},[40,66759,66760],{"class":50},"      \u002F\u002F console.log(this);\n",[40,66762,66763],{"class":42,"line":108},[40,66764,66765],{"class":50},"      this.style.color = 'pink'\n",[40,66767,66768],{"class":42,"line":121},[40,66769,36761],{"class":50},[40,66771,66772,66774,66776],{"class":42,"line":134},[40,66773,55715],{"class":50},[40,66775,55111],{"class":46},[40,66777,54606],{"class":50},[40,66779,66780,66782,66784],{"class":42,"line":146},[40,66781,55083],{"class":50},[40,66783,55098],{"class":46},[40,66785,54606],{"class":50},[402,66787,66789],{"id":66788},"_328-回调函数","3.2.8 回调函数",[19,66791,66792],{},[438,66793],{"alt":36,"src":66794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,66796,66797],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,66799,14654],{},[1338,66801,66802,66805,66808],{},[495,66803,66804],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[495,66806,66807],{},"回调函数本质还是函数，只不过把它当成参数使用",[495,66809,66810],{},"使用匿名函数做为回调函数比较常见",[402,66812,66814],{"id":66813},"_329-tab栏切换","3.2.9 tab栏切换",[19,66816,66817],{},[438,66818],{"alt":36,"src":66819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[31,66821,66823],{"className":53933,"code":66822,"language":53935,"meta":36,"style":36},"\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",[26,66824,66825,66835,66849,66853,66861,66875,66895,66915,66928,66936,66942,66952,66962,66966,66970,66977,66990,67003,67015,67031,67035,67039,67046,67058,67070,67082,67092,67102,67106,67110,67119,67131,67142,67154,67158,67162,67170,67180,67190,67200,67204,67208,67218,67232,67244,67248,67252,67264,67275,67292,67302,67306,67310,67325,67336,67346,67350,67354,67361,67376,67380,67384,67392,67402,67406,67410,67419,67429,67433,67441,67449,67453,67461,67476,67491,67504,67512,67546,67573,67600,67627,67654,67662,67670,67685,67722,67757,67792,67827,67862,67870,67878,67886,67891,67896,67916,67921,67950,67955,67960,67978,67983,67988,67993,68015,68020,68036,68040,68045,68050,68071,68076,68105,68109,68114,68118,68126,68134,68138],{"__ignoreMap":36},[40,66826,66827,66829,66831,66833],{"class":42,"line":43},[40,66828,54597],{"class":50},[40,66830,54600],{"class":46},[40,66832,54603],{"class":596},[40,66834,54606],{"class":50},[40,66836,66837,66839,66841,66843,66845,66847],{"class":42,"line":54},[40,66838,4387],{"class":50},[40,66840,53935],{"class":46},[40,66842,54615],{"class":596},[40,66844,1284],{"class":50},[40,66846,54620],{"class":94},[40,66848,54606],{"class":50},[40,66850,66851],{"class":42,"line":70},[40,66852,1413],{"emptyLinePlaceholder":1412},[40,66854,66855,66857,66859],{"class":42,"line":78},[40,66856,4387],{"class":50},[40,66858,54633],{"class":46},[40,66860,54606],{"class":50},[40,66862,66863,66865,66867,66869,66871,66873],{"class":42,"line":86},[40,66864,55442],{"class":50},[40,66866,54643],{"class":46},[40,66868,54646],{"class":596},[40,66870,1284],{"class":50},[40,66872,54651],{"class":94},[40,66874,62425],{"class":50},[40,66876,66877,66879,66881,66883,66885,66887,66889,66891,66893],{"class":42,"line":100},[40,66878,55442],{"class":50},[40,66880,54643],{"class":46},[40,66882,54662],{"class":596},[40,66884,1284],{"class":50},[40,66886,54667],{"class":94},[40,66888,54670],{"class":596},[40,66890,1284],{"class":50},[40,66892,54675],{"class":94},[40,66894,62425],{"class":50},[40,66896,66897,66899,66901,66903,66905,66907,66909,66911,66913],{"class":42,"line":108},[40,66898,55442],{"class":50},[40,66900,54643],{"class":46},[40,66902,18242],{"class":596},[40,66904,1284],{"class":50},[40,66906,54690],{"class":94},[40,66908,54670],{"class":596},[40,66910,1284],{"class":50},[40,66912,54697],{"class":94},[40,66914,62425],{"class":50},[40,66916,66917,66919,66921,66924,66926],{"class":42,"line":121},[40,66918,55442],{"class":50},[40,66920,54706],{"class":46},[40,66922,66923],{"class":50},">tab栏切换\u003C\u002F",[40,66925,54706],{"class":46},[40,66927,54606],{"class":50},[40,66929,66930,66932,66934],{"class":42,"line":134},[40,66931,55442],{"class":50},[40,66933,3384],{"class":46},[40,66935,54606],{"class":50},[40,66937,66938,66940],{"class":42,"line":146},[40,66939,9726],{"class":46},[40,66941,18894],{"class":50},[40,66943,66944,66946,66948,66950],{"class":42,"line":154},[40,66945,58004],{"class":63},[40,66947,60],{"class":50},[40,66949,3672],{"class":63},[40,66951,4637],{"class":50},[40,66953,66954,66956,66958,66960],{"class":42,"line":162},[40,66955,57993],{"class":63},[40,66957,60],{"class":50},[40,66959,3672],{"class":63},[40,66961,4637],{"class":50},[40,66963,66964],{"class":42,"line":170},[40,66965,5513],{"class":50},[40,66967,66968],{"class":42,"line":183},[40,66969,1413],{"emptyLinePlaceholder":1412},[40,66971,66972,66975],{"class":42,"line":196},[40,66973,66974],{"class":596},"    .tab",[40,66976,18894],{"class":50},[40,66978,66979,66981,66983,66986,66988],{"class":42,"line":204},[40,66980,58069],{"class":63},[40,66982,60],{"class":50},[40,66984,66985],{"class":63},"590",[40,66987,54790],{"class":1283},[40,66989,4637],{"class":50},[40,66991,66992,66994,66996,66999,67001],{"class":42,"line":217},[40,66993,58083],{"class":63},[40,66995,60],{"class":50},[40,66997,66998],{"class":63},"340",[40,67000,54790],{"class":1283},[40,67002,4637],{"class":50},[40,67004,67005,67007,67009,67011,67013],{"class":42,"line":230},[40,67006,58004],{"class":63},[40,67008,60],{"class":50},[40,67010,4178],{"class":63},[40,67012,54790],{"class":1283},[40,67014,4637],{"class":50},[40,67016,67017,67019,67021,67023,67025,67027,67029],{"class":42,"line":238},[40,67018,65275],{"class":63},[40,67020,60],{"class":50},[40,67022,3698],{"class":63},[40,67024,54790],{"class":1283},[40,67026,54819],{"class":63},[40,67028,65542],{"class":63},[40,67030,4637],{"class":50},[40,67032,67033],{"class":42,"line":251},[40,67034,5513],{"class":50},[40,67036,67037],{"class":42,"line":264},[40,67038,1413],{"emptyLinePlaceholder":1412},[40,67040,67041,67044],{"class":42,"line":277},[40,67042,67043],{"class":596},"    .tab-nav",[40,67045,18894],{"class":50},[40,67047,67048,67050,67052,67054,67056],{"class":42,"line":290},[40,67049,58069],{"class":63},[40,67051,60],{"class":50},[40,67053,3791],{"class":63},[40,67055,3808],{"class":1283},[40,67057,4637],{"class":50},[40,67059,67060,67062,67064,67066,67068],{"class":42,"line":298},[40,67061,58083],{"class":63},[40,67063,60],{"class":50},[40,67065,4384],{"class":63},[40,67067,54790],{"class":1283},[40,67069,4637],{"class":50},[40,67071,67072,67074,67076,67078,67080],{"class":42,"line":310},[40,67073,60657],{"class":63},[40,67075,60],{"class":50},[40,67077,4384],{"class":63},[40,67079,54790],{"class":1283},[40,67081,4637],{"class":50},[40,67083,67084,67086,67088,67090],{"class":42,"line":5086},[40,67085,58307],{"class":63},[40,67087,60],{"class":50},[40,67089,54775],{"class":63},[40,67091,4637],{"class":50},[40,67093,67094,67096,67098,67100],{"class":42,"line":5091},[40,67095,58318],{"class":63},[40,67097,60],{"class":50},[40,67099,54966],{"class":63},[40,67101,4637],{"class":50},[40,67103,67104],{"class":42,"line":5105},[40,67105,5513],{"class":50},[40,67107,67108],{"class":42,"line":5110},[40,67109,1413],{"emptyLinePlaceholder":1412},[40,67111,67112,67114,67117],{"class":42,"line":5902},[40,67113,67043],{"class":596},[40,67115,67116],{"class":46}," h3",[40,67118,18894],{"class":50},[40,67120,67121,67123,67125,67127,67129],{"class":42,"line":5916},[40,67122,58220],{"class":63},[40,67124,60],{"class":50},[40,67126,4277],{"class":63},[40,67128,54790],{"class":1283},[40,67130,4637],{"class":50},[40,67132,67133,67135,67137,67140],{"class":42,"line":5924},[40,67134,65632],{"class":63},[40,67136,60],{"class":50},[40,67138,67139],{"class":63},"normal",[40,67141,4637],{"class":50},[40,67143,67144,67146,67148,67150,67152],{"class":42,"line":5929},[40,67145,65298],{"class":63},[40,67147,60],{"class":50},[40,67149,4178],{"class":63},[40,67151,54790],{"class":1283},[40,67153,4637],{"class":50},[40,67155,67156],{"class":42,"line":5935},[40,67157,5513],{"class":50},[40,67159,67160],{"class":42,"line":5941},[40,67161,1413],{"emptyLinePlaceholder":1412},[40,67163,67164,67166,67168],{"class":42,"line":5946},[40,67165,67043],{"class":596},[40,67167,64590],{"class":46},[40,67169,18894],{"class":50},[40,67171,67172,67174,67176,67178],{"class":42,"line":11270},[40,67173,58030],{"class":63},[40,67175,60],{"class":50},[40,67177,58035],{"class":63},[40,67179,4637],{"class":50},[40,67181,67182,67184,67186,67188],{"class":42,"line":11294},[40,67183,58307],{"class":63},[40,67185,60],{"class":50},[40,67187,54775],{"class":63},[40,67189,4637],{"class":50},[40,67191,67192,67194,67196,67198],{"class":42,"line":11299},[40,67193,58318],{"class":63},[40,67195,60],{"class":50},[40,67197,54878],{"class":63},[40,67199,4637],{"class":50},[40,67201,67202],{"class":42,"line":11305},[40,67203,5513],{"class":50},[40,67205,67206],{"class":42,"line":11332},[40,67207,1413],{"emptyLinePlaceholder":1412},[40,67209,67210,67212,67214,67216],{"class":42,"line":11337},[40,67211,67043],{"class":596},[40,67213,64590],{"class":46},[40,67215,58373],{"class":46},[40,67217,18894],{"class":50},[40,67219,67220,67222,67224,67226,67228,67230],{"class":42,"line":11343},[40,67221,58004],{"class":63},[40,67223,60],{"class":50},[40,67225,3672],{"class":63},[40,67227,12272],{"class":63},[40,67229,54790],{"class":1283},[40,67231,4637],{"class":50},[40,67233,67234,67236,67238,67240,67242],{"class":42,"line":11355},[40,67235,58220],{"class":63},[40,67237,60],{"class":50},[40,67239,4028],{"class":63},[40,67241,54790],{"class":1283},[40,67243,4637],{"class":50},[40,67245,67246],{"class":42,"line":11367},[40,67247,5513],{"class":50},[40,67249,67250],{"class":42,"line":11379},[40,67251,1413],{"emptyLinePlaceholder":1412},[40,67253,67254,67256,67258,67260,67262],{"class":42,"line":13038},[40,67255,67043],{"class":596},[40,67257,64590],{"class":46},[40,67259,58373],{"class":46},[40,67261,4741],{"class":46},[40,67263,18894],{"class":50},[40,67265,67266,67269,67271,67273],{"class":42,"line":13063},[40,67267,67268],{"class":63},"      text-decoration",[40,67270,60],{"class":50},[40,67272,58035],{"class":63},[40,67274,4637],{"class":50},[40,67276,67277,67279,67281,67283,67285,67287,67290],{"class":42,"line":13086},[40,67278,65530],{"class":63},[40,67280,60],{"class":50},[40,67282,64],{"class":63},[40,67284,54790],{"class":1283},[40,67286,54819],{"class":63},[40,67288,67289],{"class":63}," transparent",[40,67291,4637],{"class":50},[40,67293,67294,67296,67298,67300],{"class":42,"line":13110},[40,67295,60714],{"class":63},[40,67297,60],{"class":50},[40,67299,65667],{"class":63},[40,67301,4637],{"class":50},[40,67303,67304],{"class":42,"line":13115},[40,67305,5513],{"class":50},[40,67307,67308],{"class":42,"line":13120},[40,67309,1413],{"emptyLinePlaceholder":1412},[40,67311,67312,67314,67316,67318,67320,67323],{"class":42,"line":13125},[40,67313,67043],{"class":596},[40,67315,64590],{"class":46},[40,67317,58373],{"class":46},[40,67319,4741],{"class":46},[40,67321,67322],{"class":596},".active",[40,67324,18894],{"class":50},[40,67326,67327,67329,67331,67334],{"class":42,"line":13134},[40,67328,65089],{"class":63},[40,67330,60],{"class":50},[40,67332,67333],{"class":63},"#e1251b",[40,67335,4637],{"class":50},[40,67337,67338,67340,67342,67344],{"class":42,"line":13139},[40,67339,60714],{"class":63},[40,67341,60],{"class":50},[40,67343,67333],{"class":63},[40,67345,4637],{"class":50},[40,67347,67348],{"class":42,"line":13145},[40,67349,5513],{"class":50},[40,67351,67352],{"class":42,"line":13166},[40,67353,1413],{"emptyLinePlaceholder":1412},[40,67355,67356,67359],{"class":42,"line":13172},[40,67357,67358],{"class":596},"    .tab-content",[40,67360,18894],{"class":50},[40,67362,67363,67365,67367,67369,67372,67374],{"class":42,"line":13186},[40,67364,57993],{"class":63},[40,67366,60],{"class":50},[40,67368,3672],{"class":63},[40,67370,67371],{"class":63}," 16",[40,67373,54790],{"class":1283},[40,67375,4637],{"class":50},[40,67377,67378],{"class":42,"line":13192},[40,67379,5513],{"class":50},[40,67381,67382],{"class":42,"line":13219},[40,67383,1413],{"emptyLinePlaceholder":1412},[40,67385,67386,67388,67390],{"class":42,"line":13228},[40,67387,67358],{"class":596},[40,67389,65472],{"class":596},[40,67391,18894],{"class":50},[40,67393,67394,67396,67398,67400],{"class":42,"line":13234},[40,67395,58307],{"class":63},[40,67397,60],{"class":50},[40,67399,58035],{"class":63},[40,67401,4637],{"class":50},[40,67403,67404],{"class":42,"line":13242},[40,67405,5513],{"class":50},[40,67407,67408],{"class":42,"line":13247},[40,67409,1413],{"emptyLinePlaceholder":1412},[40,67411,67412,67414,67417],{"class":42,"line":19926},[40,67413,67358],{"class":596},[40,67415,67416],{"class":596}," .item.active",[40,67418,18894],{"class":50},[40,67420,67421,67423,67425,67427],{"class":42,"line":19932},[40,67422,58307],{"class":63},[40,67424,60],{"class":50},[40,67426,64167],{"class":63},[40,67428,4637],{"class":50},[40,67430,67431],{"class":42,"line":19955},[40,67432,5513],{"class":50},[40,67434,67435,67437,67439],{"class":42,"line":19961},[40,67436,55715],{"class":50},[40,67438,3384],{"class":46},[40,67440,54606],{"class":50},[40,67442,67443,67445,67447],{"class":42,"line":19984},[40,67444,55083],{"class":50},[40,67446,54633],{"class":46},[40,67448,54606],{"class":50},[40,67450,67451],{"class":42,"line":19998},[40,67452,1413],{"emptyLinePlaceholder":1412},[40,67454,67455,67457,67459],{"class":42,"line":20018},[40,67456,4387],{"class":50},[40,67458,55098],{"class":46},[40,67460,54606],{"class":50},[40,67462,67463,67465,67467,67469,67471,67474],{"class":42,"line":20024},[40,67464,55442],{"class":50},[40,67466,54909],{"class":46},[40,67468,56784],{"class":596},[40,67470,1284],{"class":50},[40,67472,67473],{"class":94},"\"tab\"",[40,67475,54606],{"class":50},[40,67477,67478,67480,67482,67484,67486,67489],{"class":42,"line":20035},[40,67479,54640],{"class":50},[40,67481,54909],{"class":46},[40,67483,56784],{"class":596},[40,67485,1284],{"class":50},[40,67487,67488],{"class":94},"\"tab-nav\"",[40,67490,54606],{"class":50},[40,67492,67493,67495,67497,67500,67502],{"class":42,"line":20058},[40,67494,58532],{"class":50},[40,67496,402],{"class":46},[40,67498,67499],{"class":50},">每日特价\u003C\u002F",[40,67501,402],{"class":46},[40,67503,54606],{"class":50},[40,67505,67506,67508,67510],{"class":42,"line":20080},[40,67507,58532],{"class":50},[40,67509,1338],{"class":46},[40,67511,54606],{"class":50},[40,67513,67514,67516,67518,67520,67522,67524,67526,67528,67530,67532,67535,67538,67540,67542,67544],{"class":42,"line":20085},[40,67515,58600],{"class":50},[40,67517,495],{"class":46},[40,67519,64350],{"class":50},[40,67521,2106],{"class":46},[40,67523,56784],{"class":596},[40,67525,1284],{"class":50},[40,67527,63004],{"class":94},[40,67529,64355],{"class":596},[40,67531,1284],{"class":50},[40,67533,67534],{"class":94},"\"javascript:;\"",[40,67536,67537],{"class":50},">精选\u003C\u002F",[40,67539,2106],{"class":46},[40,67541,58612],{"class":50},[40,67543,495],{"class":46},[40,67545,54606],{"class":50},[40,67547,67548,67550,67552,67554,67556,67558,67560,67562,67565,67567,67569,67571],{"class":42,"line":20091},[40,67549,58600],{"class":50},[40,67551,495],{"class":46},[40,67553,64350],{"class":50},[40,67555,2106],{"class":46},[40,67557,64355],{"class":596},[40,67559,1284],{"class":50},[40,67561,67534],{"class":94},[40,67563,67564],{"class":50},">美食\u003C\u002F",[40,67566,2106],{"class":46},[40,67568,58612],{"class":50},[40,67570,495],{"class":46},[40,67572,54606],{"class":50},[40,67574,67575,67577,67579,67581,67583,67585,67587,67589,67592,67594,67596,67598],{"class":42,"line":20105},[40,67576,58600],{"class":50},[40,67578,495],{"class":46},[40,67580,64350],{"class":50},[40,67582,2106],{"class":46},[40,67584,64355],{"class":596},[40,67586,1284],{"class":50},[40,67588,67534],{"class":94},[40,67590,67591],{"class":50},">百货\u003C\u002F",[40,67593,2106],{"class":46},[40,67595,58612],{"class":50},[40,67597,495],{"class":46},[40,67599,54606],{"class":50},[40,67601,67602,67604,67606,67608,67610,67612,67614,67616,67619,67621,67623,67625],{"class":42,"line":20118},[40,67603,58600],{"class":50},[40,67605,495],{"class":46},[40,67607,64350],{"class":50},[40,67609,2106],{"class":46},[40,67611,64355],{"class":596},[40,67613,1284],{"class":50},[40,67615,67534],{"class":94},[40,67617,67618],{"class":50},">个护\u003C\u002F",[40,67620,2106],{"class":46},[40,67622,58612],{"class":50},[40,67624,495],{"class":46},[40,67626,54606],{"class":50},[40,67628,67629,67631,67633,67635,67637,67639,67641,67643,67646,67648,67650,67652],{"class":42,"line":20123},[40,67630,58600],{"class":50},[40,67632,495],{"class":46},[40,67634,64350],{"class":50},[40,67636,2106],{"class":46},[40,67638,64355],{"class":596},[40,67640,1284],{"class":50},[40,67642,67534],{"class":94},[40,67644,67645],{"class":50},">预告\u003C\u002F",[40,67647,2106],{"class":46},[40,67649,58612],{"class":50},[40,67651,495],{"class":46},[40,67653,54606],{"class":50},[40,67655,67656,67658,67660],{"class":42,"line":20137},[40,67657,58705],{"class":50},[40,67659,1338],{"class":46},[40,67661,54606],{"class":50},[40,67663,67664,67666,67668],{"class":42,"line":20142},[40,67665,55074],{"class":50},[40,67667,54909],{"class":46},[40,67669,54606],{"class":50},[40,67671,67672,67674,67676,67678,67680,67683],{"class":42,"line":20148},[40,67673,54640],{"class":50},[40,67675,54909],{"class":46},[40,67677,56784],{"class":596},[40,67679,1284],{"class":50},[40,67681,67682],{"class":94},"\"tab-content\"",[40,67684,54606],{"class":50},[40,67686,67687,67689,67691,67693,67695,67698,67700,67702,67704,67706,67709,67711,67713,67715,67718,67720],{"class":42,"line":20153},[40,67688,58532],{"class":50},[40,67690,54909],{"class":46},[40,67692,56784],{"class":596},[40,67694,1284],{"class":50},[40,67696,67697],{"class":94},"\"item active\"",[40,67699,64350],{"class":50},[40,67701,438],{"class":46},[40,67703,58537],{"class":596},[40,67705,1284],{"class":50},[40,67707,67708],{"class":94},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[40,67710,58545],{"class":596},[40,67712,1284],{"class":50},[40,67714,285],{"class":94},[40,67716,67717],{"class":50}," \u002F>\u003C\u002F",[40,67719,54909],{"class":46},[40,67721,54606],{"class":50},[40,67723,67724,67726,67728,67730,67732,67734,67736,67738,67740,67742,67745,67747,67749,67751,67753,67755],{"class":42,"line":20167},[40,67725,58532],{"class":50},[40,67727,54909],{"class":46},[40,67729,56784],{"class":596},[40,67731,1284],{"class":50},[40,67733,65921],{"class":94},[40,67735,64350],{"class":50},[40,67737,438],{"class":46},[40,67739,58537],{"class":596},[40,67741,1284],{"class":50},[40,67743,67744],{"class":94},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[40,67746,58545],{"class":596},[40,67748,1284],{"class":50},[40,67750,285],{"class":94},[40,67752,67717],{"class":50},[40,67754,54909],{"class":46},[40,67756,54606],{"class":50},[40,67758,67759,67761,67763,67765,67767,67769,67771,67773,67775,67777,67780,67782,67784,67786,67788,67790],{"class":42,"line":20172},[40,67760,58532],{"class":50},[40,67762,54909],{"class":46},[40,67764,56784],{"class":596},[40,67766,1284],{"class":50},[40,67768,65921],{"class":94},[40,67770,64350],{"class":50},[40,67772,438],{"class":46},[40,67774,58537],{"class":596},[40,67776,1284],{"class":50},[40,67778,67779],{"class":94},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[40,67781,58545],{"class":596},[40,67783,1284],{"class":50},[40,67785,285],{"class":94},[40,67787,67717],{"class":50},[40,67789,54909],{"class":46},[40,67791,54606],{"class":50},[40,67793,67794,67796,67798,67800,67802,67804,67806,67808,67810,67812,67815,67817,67819,67821,67823,67825],{"class":42,"line":20177},[40,67795,58532],{"class":50},[40,67797,54909],{"class":46},[40,67799,56784],{"class":596},[40,67801,1284],{"class":50},[40,67803,65921],{"class":94},[40,67805,64350],{"class":50},[40,67807,438],{"class":46},[40,67809,58537],{"class":596},[40,67811,1284],{"class":50},[40,67813,67814],{"class":94},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[40,67816,58545],{"class":596},[40,67818,1284],{"class":50},[40,67820,285],{"class":94},[40,67822,67717],{"class":50},[40,67824,54909],{"class":46},[40,67826,54606],{"class":50},[40,67828,67829,67831,67833,67835,67837,67839,67841,67843,67845,67847,67850,67852,67854,67856,67858,67860],{"class":42,"line":20191},[40,67830,58532],{"class":50},[40,67832,54909],{"class":46},[40,67834,56784],{"class":596},[40,67836,1284],{"class":50},[40,67838,65921],{"class":94},[40,67840,64350],{"class":50},[40,67842,438],{"class":46},[40,67844,58537],{"class":596},[40,67846,1284],{"class":50},[40,67848,67849],{"class":94},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[40,67851,58545],{"class":596},[40,67853,1284],{"class":50},[40,67855,285],{"class":94},[40,67857,67717],{"class":50},[40,67859,54909],{"class":46},[40,67861,54606],{"class":50},[40,67863,67864,67866,67868],{"class":42,"line":20203},[40,67865,55074],{"class":50},[40,67867,54909],{"class":46},[40,67869,54606],{"class":50},[40,67871,67872,67874,67876],{"class":42,"line":20208},[40,67873,55715],{"class":50},[40,67875,54909],{"class":46},[40,67877,54606],{"class":50},[40,67879,67880,67882,67884],{"class":42,"line":20221},[40,67881,55442],{"class":50},[40,67883,55111],{"class":46},[40,67885,54606],{"class":50},[40,67887,67888],{"class":42,"line":20226},[40,67889,67890],{"class":997},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[40,67892,67893],{"class":42,"line":20231},[40,67894,67895],{"class":997},"    \u002F\u002F 1.1 获取 a 元素 \n",[40,67897,67898,67900,67903,67905,67907,67909,67911,67914],{"class":42,"line":20236},[40,67899,14543],{"class":1283},[40,67901,67902],{"class":63}," as",[40,67904,16886],{"class":1283},[40,67906,57694],{"class":50},[40,67908,58979],{"class":596},[40,67910,3488],{"class":50},[40,67912,67913],{"class":94},"'.tab-nav a'",[40,67915,1811],{"class":50},[40,67917,67918],{"class":42,"line":20249},[40,67919,67920],{"class":997},"    \u002F\u002F console.log(as) \n",[40,67922,67923,67925,67927,67929,67931,67933,67935,67937,67939,67942,67944,67946,67948],{"class":42,"line":20254},[40,67924,6525],{"class":1283},[40,67926,4993],{"class":50},[40,67928,55145],{"class":1283},[40,67930,12760],{"class":50},[40,67932,1284],{"class":1283},[40,67934,7416],{"class":63},[40,67936,12767],{"class":50},[40,67938,4387],{"class":1283},[40,67940,67941],{"class":50}," as.",[40,67943,55266],{"class":63},[40,67945,6538],{"class":50},[40,67947,5618],{"class":1283},[40,67949,15764],{"class":50},[40,67951,67952],{"class":42,"line":35933},[40,67953,67954],{"class":997},"      \u002F\u002F console.log(as[i])\n",[40,67956,67957],{"class":42,"line":35939},[40,67958,67959],{"class":997},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[40,67961,67962,67965,67967,67969,67972,67974,67976],{"class":42,"line":35945},[40,67963,67964],{"class":50},"      as[i].",[40,67966,61111],{"class":596},[40,67968,3488],{"class":50},[40,67970,67971],{"class":94},"'mouseenter'",[40,67973,15757],{"class":50},[40,67975,57747],{"class":1283},[40,67977,57750],{"class":50},[40,67979,67980],{"class":42,"line":35951},[40,67981,67982],{"class":997},"        \u002F\u002F console.log('鼠标经过')\n",[40,67984,67985],{"class":42,"line":35957},[40,67986,67987],{"class":997},"        \u002F\u002F 排他思想  \n",[40,67989,67990],{"class":42,"line":35968},[40,67991,67992],{"class":997},"        \u002F\u002F 干掉别人 移除类active\n",[40,67994,67995,67997,67999,68001,68004,68006,68008,68010,68013],{"class":42,"line":35974},[40,67996,55223],{"class":50},[40,67998,57697],{"class":596},[40,68000,3488],{"class":50},[40,68002,68003],{"class":94},"'.tab-nav .active'",[40,68005,60301],{"class":50},[40,68007,60304],{"class":596},[40,68009,3488],{"class":50},[40,68011,68012],{"class":94},"'active'",[40,68014,1811],{"class":50},[40,68016,68017],{"class":42,"line":35994},[40,68018,68019],{"class":997},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[40,68021,68022,68025,68028,68030,68032,68034],{"class":42,"line":36000},[40,68023,68024],{"class":63},"        this",[40,68026,68027],{"class":50},".classList.",[40,68029,8657],{"class":596},[40,68031,3488],{"class":50},[40,68033,68012],{"class":94},[40,68035,1811],{"class":50},[40,68037,68038],{"class":42,"line":36011},[40,68039,1413],{"emptyLinePlaceholder":1412},[40,68041,68042],{"class":42,"line":36017},[40,68043,68044],{"class":997},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[40,68046,68047],{"class":42,"line":36023},[40,68048,68049],{"class":997},"        \u002F\u002F 干掉别人\n",[40,68051,68052,68054,68056,68058,68061,68063,68065,68067,68069],{"class":42,"line":36029},[40,68053,55223],{"class":50},[40,68055,57697],{"class":596},[40,68057,3488],{"class":50},[40,68059,68060],{"class":94},"'.tab-content .active'",[40,68062,60301],{"class":50},[40,68064,60304],{"class":596},[40,68066,3488],{"class":50},[40,68068,68012],{"class":94},[40,68070,1811],{"class":50},[40,68072,68073],{"class":42,"line":36035},[40,68074,68075],{"class":997},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[40,68077,68078,68080,68082,68084,68087,68089,68091,68093,68095,68097,68099,68101,68103],{"class":42,"line":36041},[40,68079,55223],{"class":50},[40,68081,57697],{"class":596},[40,68083,3488],{"class":50},[40,68085,68086],{"class":94},"`.tab-content .item:nth-child(${",[40,68088,3920],{"class":50},[40,68090,48866],{"class":1283},[40,68092,28431],{"class":63},[40,68094,60330],{"class":94},[40,68096,60301],{"class":50},[40,68098,8657],{"class":596},[40,68100,3488],{"class":50},[40,68102,68012],{"class":94},[40,68104,1811],{"class":50},[40,68106,68107],{"class":42,"line":36047},[40,68108,1413],{"emptyLinePlaceholder":1412},[40,68110,68111],{"class":42,"line":36053},[40,68112,68113],{"class":50},"      })\n",[40,68115,68116],{"class":42,"line":36073},[40,68117,5513],{"class":50},[40,68119,68120,68122,68124],{"class":42,"line":36079},[40,68121,55715],{"class":50},[40,68123,55111],{"class":46},[40,68125,54606],{"class":50},[40,68127,68128,68130,68132],{"class":42,"line":36095},[40,68129,55083],{"class":50},[40,68131,55098],{"class":46},[40,68133,54606],{"class":50},[40,68135,68136],{"class":42,"line":36101},[40,68137,1413],{"emptyLinePlaceholder":1412},[40,68139,68140,68142,68144],{"class":42,"line":36115},[40,68141,55083],{"class":50},[40,68143,53935],{"class":46},[40,68145,54606],{"class":50},[19,68147,68148],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,68150,68151],{},"在监听事件中，this指向的就是他的调用者",[19,68153,68154],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,68156,57018],{},[19,68158,68159],{},"(function () {",[19,68161,68162],{},"const list = document.querySelector('.xtx-elevator-list')",[19,68164,68165],{},"list.addEventListener('click', function (e) {",[19,68167,68168],{},"if (e.target.tagName === 'A') {",[19,68170,68171],{},"\u002F\u002F 排他思想",[19,68173,68174],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,68176,68177],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,68179,68180],{},"\u002F\u002F console.log(old);",[19,68182,68183],{},"\u002F\u002F 判断",[19,68185,68186],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,68188,68189],{},"if (old) old.classList.remove('active')",[19,68191,68192],{},"e.target.classList.add('active')",[19,68194,4423],{},[19,68196,55762],{},[19,68198,68199],{},"})();",[402,68201,68203],{"id":68202},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[31,68205,68207],{"className":53933,"code":68206,"language":53935,"meta":36,"style":36},"\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",[26,68208,68209,68219,68223,68231,68235,68249,68263,68275,68283,68289,68299,68309,68313,68317,68324,68336,68347,68364,68377,68391,68401,68405,68409,68416,68427,68445,68455,68467,68471,68475,68482,68499,68510,68522,68526,68530,68537,68549,68553,68561,68569,68573,68581,68589,68597,68612,68656,68664,68677,68690,68703,68711,68719,68727,68755,68763,68775,68788,68801,68809,68817,68825,68851,68859,68872,68884,68897,68905,68913,68921,68947,68955,68968,68980,68993,69001,69009,69017,69022,69042,69047,69067,69072,69089,69094,69102,69107,69136,69149,69153,69157,69162,69166,69194,69199,69216,69221,69226,69231,69236,69262,69266,69270,69278,69286,69290],{"__ignoreMap":36},[40,68210,68211,68213,68215,68217],{"class":42,"line":43},[40,68212,54597],{"class":50},[40,68214,54600],{"class":46},[40,68216,54603],{"class":596},[40,68218,54606],{"class":50},[40,68220,68221],{"class":42,"line":54},[40,68222,1413],{"emptyLinePlaceholder":1412},[40,68224,68225,68227,68229],{"class":42,"line":70},[40,68226,4387],{"class":50},[40,68228,53935],{"class":46},[40,68230,54606],{"class":50},[40,68232,68233],{"class":42,"line":78},[40,68234,1413],{"emptyLinePlaceholder":1412},[40,68236,68237,68239,68241,68243,68245,68247],{"class":42,"line":86},[40,68238,4387],{"class":50},[40,68240,54633],{"class":46},[40,68242,54615],{"class":596},[40,68244,1284],{"class":50},[40,68246,54620],{"class":94},[40,68248,54606],{"class":50},[40,68250,68251,68253,68255,68257,68259,68261],{"class":42,"line":100},[40,68252,55442],{"class":50},[40,68254,54643],{"class":46},[40,68256,54646],{"class":596},[40,68258,1284],{"class":50},[40,68260,54651],{"class":94},[40,68262,54606],{"class":50},[40,68264,68265,68267,68269,68271,68273],{"class":42,"line":108},[40,68266,55442],{"class":50},[40,68268,54706],{"class":46},[40,68270,58612],{"class":50},[40,68272,54706],{"class":46},[40,68274,54606],{"class":50},[40,68276,68277,68279,68281],{"class":42,"line":121},[40,68278,55442],{"class":50},[40,68280,3384],{"class":46},[40,68282,54606],{"class":50},[40,68284,68285,68287],{"class":42,"line":134},[40,68286,9726],{"class":46},[40,68288,18894],{"class":50},[40,68290,68291,68293,68295,68297],{"class":42,"line":146},[40,68292,58004],{"class":63},[40,68294,60],{"class":50},[40,68296,3672],{"class":63},[40,68298,4637],{"class":50},[40,68300,68301,68303,68305,68307],{"class":42,"line":154},[40,68302,57993],{"class":63},[40,68304,60],{"class":50},[40,68306,3672],{"class":63},[40,68308,4637],{"class":50},[40,68310,68311],{"class":42,"line":162},[40,68312,5513],{"class":50},[40,68314,68315],{"class":42,"line":170},[40,68316,1413],{"emptyLinePlaceholder":1412},[40,68318,68319,68322],{"class":42,"line":183},[40,68320,68321],{"class":46},"    table",[40,68323,18894],{"class":50},[40,68325,68326,68329,68331,68334],{"class":42,"line":196},[40,68327,68328],{"class":63},"      border-collapse",[40,68330,60],{"class":50},[40,68332,68333],{"class":63},"collapse",[40,68335,4637],{"class":50},[40,68337,68338,68341,68343,68345],{"class":42,"line":204},[40,68339,68340],{"class":63},"      border-spacing",[40,68342,60],{"class":50},[40,68344,3672],{"class":63},[40,68346,4637],{"class":50},[40,68348,68349,68351,68353,68355,68357,68359,68362],{"class":42,"line":217},[40,68350,65275],{"class":63},[40,68352,60],{"class":50},[40,68354,3698],{"class":63},[40,68356,54790],{"class":1283},[40,68358,54819],{"class":63},[40,68360,68361],{"class":63}," #c0c0c0",[40,68363,4637],{"class":50},[40,68365,68366,68368,68370,68373,68375],{"class":42,"line":230},[40,68367,58069],{"class":63},[40,68369,60],{"class":50},[40,68371,68372],{"class":63},"500",[40,68374,54790],{"class":1283},[40,68376,4637],{"class":50},[40,68378,68379,68381,68383,68385,68387,68389],{"class":42,"line":238},[40,68380,58004],{"class":63},[40,68382,60],{"class":50},[40,68384,3791],{"class":63},[40,68386,54790],{"class":1283},[40,68388,54854],{"class":63},[40,68390,4637],{"class":50},[40,68392,68393,68395,68397,68399],{"class":42,"line":251},[40,68394,60584],{"class":63},[40,68396,60],{"class":50},[40,68398,54890],{"class":63},[40,68400,4637],{"class":50},[40,68402,68403],{"class":42,"line":264},[40,68404,5513],{"class":50},[40,68406,68407],{"class":42,"line":277},[40,68408,1413],{"emptyLinePlaceholder":1412},[40,68410,68411,68414],{"class":42,"line":290},[40,68412,68413],{"class":46},"    th",[40,68415,18894],{"class":50},[40,68417,68418,68420,68422,68425],{"class":42,"line":298},[40,68419,58182],{"class":63},[40,68421,60],{"class":50},[40,68423,68424],{"class":63},"#09c",[40,68426,4637],{"class":50},[40,68428,68429,68432,68434,68436,68438,68440,68443],{"class":42,"line":310},[40,68430,68431],{"class":63},"      font",[40,68433,60],{"class":50},[40,68435,65637],{"class":63},[40,68437,67371],{"class":63},[40,68439,54790],{"class":1283},[40,68441,68442],{"class":94}," \"微软雅黑\"",[40,68444,4637],{"class":50},[40,68446,68447,68449,68451,68453],{"class":42,"line":5086},[40,68448,60714],{"class":63},[40,68450,60],{"class":50},[40,68452,64140],{"class":63},[40,68454,4637],{"class":50},[40,68456,68457,68459,68461,68463,68465],{"class":42,"line":5091},[40,68458,58083],{"class":63},[40,68460,60],{"class":50},[40,68462,4277],{"class":63},[40,68464,54790],{"class":1283},[40,68466,4637],{"class":50},[40,68468,68469],{"class":42,"line":5105},[40,68470,5513],{"class":50},[40,68472,68473],{"class":42,"line":5110},[40,68474,1413],{"emptyLinePlaceholder":1412},[40,68476,68477,68480],{"class":42,"line":5902},[40,68478,68479],{"class":46},"    td",[40,68481,18894],{"class":50},[40,68483,68484,68486,68488,68490,68492,68494,68497],{"class":42,"line":5916},[40,68485,65275],{"class":63},[40,68487,60],{"class":50},[40,68489,3698],{"class":63},[40,68491,54790],{"class":1283},[40,68493,54819],{"class":63},[40,68495,68496],{"class":63}," #d0d0d0",[40,68498,4637],{"class":50},[40,68500,68501,68503,68505,68508],{"class":42,"line":5924},[40,68502,60714],{"class":63},[40,68504,60],{"class":50},[40,68506,68507],{"class":63},"#404060",[40,68509,4637],{"class":50},[40,68511,68512,68514,68516,68518,68520],{"class":42,"line":5929},[40,68513,57993],{"class":63},[40,68515,60],{"class":50},[40,68517,3925],{"class":63},[40,68519,54790],{"class":1283},[40,68521,4637],{"class":50},[40,68523,68524],{"class":42,"line":5935},[40,68525,5513],{"class":50},[40,68527,68528],{"class":42,"line":5941},[40,68529,1413],{"emptyLinePlaceholder":1412},[40,68531,68532,68535],{"class":42,"line":5946},[40,68533,68534],{"class":596},"    .allCheck",[40,68536,18894],{"class":50},[40,68538,68539,68541,68543,68545,68547],{"class":42,"line":11270},[40,68540,58069],{"class":63},[40,68542,60],{"class":50},[40,68544,4091],{"class":63},[40,68546,54790],{"class":1283},[40,68548,4637],{"class":50},[40,68550,68551],{"class":42,"line":11294},[40,68552,5513],{"class":50},[40,68554,68555,68557,68559],{"class":42,"line":11299},[40,68556,55715],{"class":50},[40,68558,3384],{"class":46},[40,68560,54606],{"class":50},[40,68562,68563,68565,68567],{"class":42,"line":11305},[40,68564,55083],{"class":50},[40,68566,54633],{"class":46},[40,68568,54606],{"class":50},[40,68570,68571],{"class":42,"line":11332},[40,68572,1413],{"emptyLinePlaceholder":1412},[40,68574,68575,68577,68579],{"class":42,"line":11337},[40,68576,4387],{"class":50},[40,68578,55098],{"class":46},[40,68580,54606],{"class":50},[40,68582,68583,68585,68587],{"class":42,"line":11343},[40,68584,55442],{"class":50},[40,68586,3619],{"class":46},[40,68588,54606],{"class":50},[40,68590,68591,68593,68595],{"class":42,"line":11355},[40,68592,54640],{"class":50},[40,68594,3625],{"class":46},[40,68596,54606],{"class":50},[40,68598,68599,68601,68603,68605,68607,68610],{"class":42,"line":11367},[40,68600,58532],{"class":50},[40,68602,3628],{"class":46},[40,68604,56784],{"class":596},[40,68606,1284],{"class":50},[40,68608,68609],{"class":94},"\"allCheck\"",[40,68611,54606],{"class":50},[40,68613,68614,68616,68618,68620,68622,68624,68626,68628,68630,68632,68634,68637,68640,68642,68644,68646,68649,68652,68654],{"class":42,"line":11379},[40,68615,58600],{"class":50},[40,68617,57119],{"class":46},[40,68619,57122],{"class":596},[40,68621,1284],{"class":50},[40,68623,57127],{"class":94},[40,68625,18242],{"class":596},[40,68627,1284],{"class":50},[40,68629,285],{"class":94},[40,68631,18281],{"class":596},[40,68633,1284],{"class":50},[40,68635,68636],{"class":94},"\"checkAll\"",[40,68638,68639],{"class":50},"> \u003C",[40,68641,40],{"class":46},[40,68643,56784],{"class":596},[40,68645,1284],{"class":50},[40,68647,68648],{"class":94},"\"all\"",[40,68650,68651],{"class":50},">全选\u003C\u002F",[40,68653,40],{"class":46},[40,68655,54606],{"class":50},[40,68657,68658,68660,68662],{"class":42,"line":13038},[40,68659,58705],{"class":50},[40,68661,3628],{"class":46},[40,68663,54606],{"class":50},[40,68665,68666,68668,68670,68673,68675],{"class":42,"line":13063},[40,68667,58532],{"class":50},[40,68669,3628],{"class":46},[40,68671,68672],{"class":50},">商品\u003C\u002F",[40,68674,3628],{"class":46},[40,68676,54606],{"class":50},[40,68678,68679,68681,68683,68686,68688],{"class":42,"line":13086},[40,68680,58532],{"class":50},[40,68682,3628],{"class":46},[40,68684,68685],{"class":50},">商家\u003C\u002F",[40,68687,3628],{"class":46},[40,68689,54606],{"class":50},[40,68691,68692,68694,68696,68699,68701],{"class":42,"line":13110},[40,68693,58532],{"class":50},[40,68695,3628],{"class":46},[40,68697,68698],{"class":50},">价格\u003C\u002F",[40,68700,3628],{"class":46},[40,68702,54606],{"class":50},[40,68704,68705,68707,68709],{"class":42,"line":13115},[40,68706,55074],{"class":50},[40,68708,3625],{"class":46},[40,68710,54606],{"class":50},[40,68712,68713,68715,68717],{"class":42,"line":13120},[40,68714,54640],{"class":50},[40,68716,3625],{"class":46},[40,68718,54606],{"class":50},[40,68720,68721,68723,68725],{"class":42,"line":13125},[40,68722,58532],{"class":50},[40,68724,3670],{"class":46},[40,68726,54606],{"class":50},[40,68728,68729,68731,68733,68735,68737,68739,68741,68743,68746,68748,68750,68753],{"class":42,"line":13134},[40,68730,58600],{"class":50},[40,68732,57119],{"class":46},[40,68734,57122],{"class":596},[40,68736,1284],{"class":50},[40,68738,57127],{"class":94},[40,68740,18242],{"class":596},[40,68742,1284],{"class":50},[40,68744,68745],{"class":94},"\"check\"",[40,68747,56784],{"class":596},[40,68749,1284],{"class":50},[40,68751,68752],{"class":94},"\"ck\"",[40,68754,54606],{"class":50},[40,68756,68757,68759,68761],{"class":42,"line":13139},[40,68758,58705],{"class":50},[40,68760,3670],{"class":46},[40,68762,54606],{"class":50},[40,68764,68765,68767,68769,68771,68773],{"class":42,"line":13145},[40,68766,58532],{"class":50},[40,68768,3670],{"class":46},[40,68770,64471],{"class":50},[40,68772,3670],{"class":46},[40,68774,54606],{"class":50},[40,68776,68777,68779,68781,68784,68786],{"class":42,"line":13166},[40,68778,58532],{"class":50},[40,68780,3670],{"class":46},[40,68782,68783],{"class":50},">小米\u003C\u002F",[40,68785,3670],{"class":46},[40,68787,54606],{"class":50},[40,68789,68790,68792,68794,68797,68799],{"class":42,"line":13172},[40,68791,58532],{"class":50},[40,68793,3670],{"class":46},[40,68795,68796],{"class":50},">￥1999\u003C\u002F",[40,68798,3670],{"class":46},[40,68800,54606],{"class":50},[40,68802,68803,68805,68807],{"class":42,"line":13186},[40,68804,55074],{"class":50},[40,68806,3625],{"class":46},[40,68808,54606],{"class":50},[40,68810,68811,68813,68815],{"class":42,"line":13192},[40,68812,54640],{"class":50},[40,68814,3625],{"class":46},[40,68816,54606],{"class":50},[40,68818,68819,68821,68823],{"class":42,"line":13219},[40,68820,58532],{"class":50},[40,68822,3670],{"class":46},[40,68824,54606],{"class":50},[40,68826,68827,68829,68831,68833,68835,68837,68839,68841,68843,68845,68847,68849],{"class":42,"line":13228},[40,68828,58600],{"class":50},[40,68830,57119],{"class":46},[40,68832,57122],{"class":596},[40,68834,1284],{"class":50},[40,68836,57127],{"class":94},[40,68838,18242],{"class":596},[40,68840,1284],{"class":50},[40,68842,68745],{"class":94},[40,68844,56784],{"class":596},[40,68846,1284],{"class":50},[40,68848,68752],{"class":94},[40,68850,54606],{"class":50},[40,68852,68853,68855,68857],{"class":42,"line":13234},[40,68854,58705],{"class":50},[40,68856,3670],{"class":46},[40,68858,54606],{"class":50},[40,68860,68861,68863,68865,68868,68870],{"class":42,"line":13242},[40,68862,58532],{"class":50},[40,68864,3670],{"class":46},[40,68866,68867],{"class":50},">小米净水器\u003C\u002F",[40,68869,3670],{"class":46},[40,68871,54606],{"class":50},[40,68873,68874,68876,68878,68880,68882],{"class":42,"line":13247},[40,68875,58532],{"class":50},[40,68877,3670],{"class":46},[40,68879,68783],{"class":50},[40,68881,3670],{"class":46},[40,68883,54606],{"class":50},[40,68885,68886,68888,68890,68893,68895],{"class":42,"line":19926},[40,68887,58532],{"class":50},[40,68889,3670],{"class":46},[40,68891,68892],{"class":50},">￥4999\u003C\u002F",[40,68894,3670],{"class":46},[40,68896,54606],{"class":50},[40,68898,68899,68901,68903],{"class":42,"line":19932},[40,68900,55074],{"class":50},[40,68902,3625],{"class":46},[40,68904,54606],{"class":50},[40,68906,68907,68909,68911],{"class":42,"line":19955},[40,68908,54640],{"class":50},[40,68910,3625],{"class":46},[40,68912,54606],{"class":50},[40,68914,68915,68917,68919],{"class":42,"line":19961},[40,68916,58532],{"class":50},[40,68918,3670],{"class":46},[40,68920,54606],{"class":50},[40,68922,68923,68925,68927,68929,68931,68933,68935,68937,68939,68941,68943,68945],{"class":42,"line":19984},[40,68924,58600],{"class":50},[40,68926,57119],{"class":46},[40,68928,57122],{"class":596},[40,68930,1284],{"class":50},[40,68932,57127],{"class":94},[40,68934,18242],{"class":596},[40,68936,1284],{"class":50},[40,68938,68745],{"class":94},[40,68940,56784],{"class":596},[40,68942,1284],{"class":50},[40,68944,68752],{"class":94},[40,68946,54606],{"class":50},[40,68948,68949,68951,68953],{"class":42,"line":19998},[40,68950,58705],{"class":50},[40,68952,3670],{"class":46},[40,68954,54606],{"class":50},[40,68956,68957,68959,68961,68964,68966],{"class":42,"line":20018},[40,68958,58532],{"class":50},[40,68960,3670],{"class":46},[40,68962,68963],{"class":50},">小米电视\u003C\u002F",[40,68965,3670],{"class":46},[40,68967,54606],{"class":50},[40,68969,68970,68972,68974,68976,68978],{"class":42,"line":20024},[40,68971,58532],{"class":50},[40,68973,3670],{"class":46},[40,68975,68783],{"class":50},[40,68977,3670],{"class":46},[40,68979,54606],{"class":50},[40,68981,68982,68984,68986,68989,68991],{"class":42,"line":20035},[40,68983,58532],{"class":50},[40,68985,3670],{"class":46},[40,68987,68988],{"class":50},">￥5999\u003C\u002F",[40,68990,3670],{"class":46},[40,68992,54606],{"class":50},[40,68994,68995,68997,68999],{"class":42,"line":20058},[40,68996,55074],{"class":50},[40,68998,3625],{"class":46},[40,69000,54606],{"class":50},[40,69002,69003,69005,69007],{"class":42,"line":20080},[40,69004,55715],{"class":50},[40,69006,3619],{"class":46},[40,69008,54606],{"class":50},[40,69010,69011,69013,69015],{"class":42,"line":20085},[40,69012,55442],{"class":50},[40,69014,55111],{"class":46},[40,69016,54606],{"class":50},[40,69018,69019],{"class":42,"line":20091},[40,69020,69021],{"class":997},"    \u002F\u002F 1. 获取大复选框\n",[40,69023,69024,69026,69029,69031,69033,69035,69037,69040],{"class":42,"line":20105},[40,69025,14543],{"class":1283},[40,69027,69028],{"class":63}," checkAll",[40,69030,16886],{"class":1283},[40,69032,57694],{"class":50},[40,69034,57697],{"class":596},[40,69036,3488],{"class":50},[40,69038,69039],{"class":94},"'#checkAll'",[40,69041,1811],{"class":50},[40,69043,69044],{"class":42,"line":20118},[40,69045,69046],{"class":997},"    \u002F\u002F 2. 获取所有的小复选框\n",[40,69048,69049,69051,69054,69056,69058,69060,69062,69065],{"class":42,"line":20123},[40,69050,14543],{"class":1283},[40,69052,69053],{"class":63}," cks",[40,69055,16886],{"class":1283},[40,69057,57694],{"class":50},[40,69059,58979],{"class":596},[40,69061,3488],{"class":50},[40,69063,69064],{"class":94},"'.ck'",[40,69066,1811],{"class":50},[40,69068,69069],{"class":42,"line":20137},[40,69070,69071],{"class":997},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[40,69073,69074,69077,69079,69081,69083,69085,69087],{"class":42,"line":20142},[40,69075,69076],{"class":50},"    checkAll.",[40,69078,61111],{"class":596},[40,69080,3488],{"class":50},[40,69082,61116],{"class":94},[40,69084,15757],{"class":50},[40,69086,57747],{"class":1283},[40,69088,57750],{"class":50},[40,69090,69091],{"class":42,"line":20148},[40,69092,69093],{"class":997},"      \u002F\u002F 得到当前大复选框的选中状态\n",[40,69095,69096,69099],{"class":42,"line":20153},[40,69097,69098],{"class":997},"      \u002F\u002F console.log(checkAll.checked)",[40,69100,69101],{"class":997},"  \u002F\u002F 得到 是 true 或者是 false\n",[40,69103,69104],{"class":42,"line":20167},[40,69105,69106],{"class":997},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[40,69108,69109,69111,69113,69115,69117,69119,69121,69123,69125,69128,69130,69132,69134],{"class":42,"line":20172},[40,69110,55582],{"class":1283},[40,69112,4993],{"class":50},[40,69114,55145],{"class":1283},[40,69116,12760],{"class":50},[40,69118,1284],{"class":1283},[40,69120,7416],{"class":63},[40,69122,12767],{"class":50},[40,69124,4387],{"class":1283},[40,69126,69127],{"class":50}," cks.",[40,69129,55266],{"class":63},[40,69131,6538],{"class":50},[40,69133,5618],{"class":1283},[40,69135,15764],{"class":50},[40,69137,69138,69141,69143,69146],{"class":42,"line":20177},[40,69139,69140],{"class":50},"        cks[i].checked ",[40,69142,1284],{"class":1283},[40,69144,69145],{"class":63}," this",[40,69147,69148],{"class":50},".checked\n",[40,69150,69151],{"class":42,"line":20191},[40,69152,55696],{"class":50},[40,69154,69155],{"class":42,"line":20203},[40,69156,36761],{"class":50},[40,69158,69159],{"class":42,"line":20208},[40,69160,69161],{"class":997},"    \u002F\u002F 5. 小复选框控制大复选框\n",[40,69163,69164],{"class":42,"line":20221},[40,69165,1413],{"emptyLinePlaceholder":1412},[40,69167,69168,69170,69172,69174,69176,69178,69180,69182,69184,69186,69188,69190,69192],{"class":42,"line":20226},[40,69169,6525],{"class":1283},[40,69171,4993],{"class":50},[40,69173,55145],{"class":1283},[40,69175,12760],{"class":50},[40,69177,1284],{"class":1283},[40,69179,7416],{"class":63},[40,69181,12767],{"class":50},[40,69183,4387],{"class":1283},[40,69185,69127],{"class":50},[40,69187,55266],{"class":63},[40,69189,6538],{"class":50},[40,69191,5618],{"class":1283},[40,69193,15764],{"class":50},[40,69195,69196],{"class":42,"line":20231},[40,69197,69198],{"class":997},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[40,69200,69201,69204,69206,69208,69210,69212,69214],{"class":42,"line":20236},[40,69202,69203],{"class":50},"      cks[i].",[40,69205,61111],{"class":596},[40,69207,3488],{"class":50},[40,69209,61116],{"class":94},[40,69211,15757],{"class":50},[40,69213,57747],{"class":1283},[40,69215,57750],{"class":50},[40,69217,69218],{"class":42,"line":20249},[40,69219,69220],{"class":997},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[40,69222,69223],{"class":42,"line":20254},[40,69224,69225],{"class":997},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[40,69227,69228],{"class":42,"line":35933},[40,69229,69230],{"class":997},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[40,69232,69233],{"class":42,"line":35939},[40,69234,69235],{"class":997},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[40,69237,69238,69241,69243,69245,69247,69249,69252,69254,69256,69258,69260],{"class":42,"line":35945},[40,69239,69240],{"class":50},"        checkAll.checked ",[40,69242,1284],{"class":1283},[40,69244,57694],{"class":50},[40,69246,58979],{"class":596},[40,69248,3488],{"class":50},[40,69250,69251],{"class":94},"'.ck:checked'",[40,69253,34126],{"class":50},[40,69255,55266],{"class":63},[40,69257,61204],{"class":1283},[40,69259,69127],{"class":50},[40,69261,59129],{"class":63},[40,69263,69264],{"class":42,"line":35951},[40,69265,68113],{"class":50},[40,69267,69268],{"class":42,"line":35957},[40,69269,5513],{"class":50},[40,69271,69272,69274,69276],{"class":42,"line":35968},[40,69273,55715],{"class":50},[40,69275,55111],{"class":46},[40,69277,54606],{"class":50},[40,69279,69280,69282,69284],{"class":42,"line":35974},[40,69281,55083],{"class":50},[40,69283,55098],{"class":46},[40,69285,54606],{"class":50},[40,69287,69288],{"class":42,"line":35994},[40,69289,1413],{"emptyLinePlaceholder":1412},[40,69291,69292,69294,69296],{"class":42,"line":36000},[40,69293,55083],{"class":50},[40,69295,53935],{"class":46},[40,69297,54606],{"class":50},[19,69299,69300],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,69302,69303],{},"用好之间比较得到的布尔值！！！",[19,69305,69306,69307,69310,69311,4993,69314,4063,69316,69319],{},"在 JS 里访问的时候，",[26,69308,69309],{},"checkbox.checked"," 是一个 ",[409,69312,69313],{},"布尔值",[26,69315,129],{},[26,69317,69318],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,69321,69322,69323,69326,69327],{},"HTML 的 ",[26,69324,69325],{},"checked=\"checked\""," 只是 ",[409,69328,69329,69330,69333],{},"初始值；JS 的 ",[26,69331,69332],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,69335,69336],{},"：checked是一个伪类选择器",[19,69338,69339],{},[438,69340],{"alt":36,"src":69341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,69343,69344,69347],{},[69345,69346],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,69349,69350],{},[438,69351],{"alt":36,"src":69352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,69354,69356],{"id":69355},"_33-dom事件进阶","3.3 DOM事件进阶",[402,69358,69360],{"id":69359},"_331-事件流","3.3.1 事件流",[19,69362,69363],{},[438,69364],{"alt":36,"src":69365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[2423,69367,69369],{"id":69368},"_3311-事件捕获","3.3.1.1 事件捕获",[19,69371,69372],{},[438,69373],{"alt":36,"src":69374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[31,69376,69378],{"className":53933,"code":69377,"language":53935,"meta":36,"style":36},"\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",[26,69379,69380,69390,69404,69408,69416,69430,69450,69462,69470,69477,69489,69501,69511,69515,69519,69526,69538,69550,69560,69564,69572,69580,69584,69592,69607,69626,69634,69642,69662,69682,69698,69709,69717,69734,69745,69753,69770,69781,69789,69797,69805,69809],{"__ignoreMap":36},[40,69381,69382,69384,69386,69388],{"class":42,"line":43},[40,69383,54597],{"class":50},[40,69385,54600],{"class":46},[40,69387,54603],{"class":596},[40,69389,54606],{"class":50},[40,69391,69392,69394,69396,69398,69400,69402],{"class":42,"line":54},[40,69393,4387],{"class":50},[40,69395,53935],{"class":46},[40,69397,54615],{"class":596},[40,69399,1284],{"class":50},[40,69401,54620],{"class":94},[40,69403,54606],{"class":50},[40,69405,69406],{"class":42,"line":70},[40,69407,1413],{"emptyLinePlaceholder":1412},[40,69409,69410,69412,69414],{"class":42,"line":78},[40,69411,4387],{"class":50},[40,69413,54633],{"class":46},[40,69415,54606],{"class":50},[40,69417,69418,69420,69422,69424,69426,69428],{"class":42,"line":86},[40,69419,55442],{"class":50},[40,69421,54643],{"class":46},[40,69423,54646],{"class":596},[40,69425,1284],{"class":50},[40,69427,54651],{"class":94},[40,69429,54606],{"class":50},[40,69431,69432,69434,69436,69438,69440,69442,69444,69446,69448],{"class":42,"line":100},[40,69433,55442],{"class":50},[40,69435,54643],{"class":46},[40,69437,18242],{"class":596},[40,69439,1284],{"class":50},[40,69441,54690],{"class":94},[40,69443,54670],{"class":596},[40,69445,1284],{"class":50},[40,69447,54697],{"class":94},[40,69449,54606],{"class":50},[40,69451,69452,69454,69456,69458,69460],{"class":42,"line":108},[40,69453,55442],{"class":50},[40,69455,54706],{"class":46},[40,69457,54709],{"class":50},[40,69459,54706],{"class":46},[40,69461,54606],{"class":50},[40,69463,69464,69466,69468],{"class":42,"line":121},[40,69465,55442],{"class":50},[40,69467,3384],{"class":46},[40,69469,54606],{"class":50},[40,69471,69472,69475],{"class":42,"line":134},[40,69473,69474],{"class":596},"    .father",[40,69476,18894],{"class":50},[40,69478,69479,69481,69483,69485,69487],{"class":42,"line":146},[40,69480,58069],{"class":63},[40,69482,60],{"class":50},[40,69484,68372],{"class":63},[40,69486,54790],{"class":1283},[40,69488,4637],{"class":50},[40,69490,69491,69493,69495,69497,69499],{"class":42,"line":154},[40,69492,58083],{"class":63},[40,69494,60],{"class":50},[40,69496,68372],{"class":63},[40,69498,54790],{"class":1283},[40,69500,4637],{"class":50},[40,69502,69503,69505,69507,69509],{"class":42,"line":162},[40,69504,58182],{"class":63},[40,69506,60],{"class":50},[40,69508,54943],{"class":63},[40,69510,4637],{"class":50},[40,69512,69513],{"class":42,"line":170},[40,69514,5513],{"class":50},[40,69516,69517],{"class":42,"line":183},[40,69518,1413],{"emptyLinePlaceholder":1412},[40,69520,69521,69524],{"class":42,"line":196},[40,69522,69523],{"class":596},"    .son",[40,69525,18894],{"class":50},[40,69527,69528,69530,69532,69534,69536],{"class":42,"line":204},[40,69529,58069],{"class":63},[40,69531,60],{"class":50},[40,69533,5053],{"class":63},[40,69535,54790],{"class":1283},[40,69537,4637],{"class":50},[40,69539,69540,69542,69544,69546,69548],{"class":42,"line":217},[40,69541,58083],{"class":63},[40,69543,60],{"class":50},[40,69545,5053],{"class":63},[40,69547,54790],{"class":1283},[40,69549,4637],{"class":50},[40,69551,69552,69554,69556,69558],{"class":42,"line":230},[40,69553,58182],{"class":63},[40,69555,60],{"class":50},[40,69557,58187],{"class":63},[40,69559,4637],{"class":50},[40,69561,69562],{"class":42,"line":238},[40,69563,5513],{"class":50},[40,69565,69566,69568,69570],{"class":42,"line":251},[40,69567,55715],{"class":50},[40,69569,3384],{"class":46},[40,69571,54606],{"class":50},[40,69573,69574,69576,69578],{"class":42,"line":264},[40,69575,55083],{"class":50},[40,69577,54633],{"class":46},[40,69579,54606],{"class":50},[40,69581,69582],{"class":42,"line":277},[40,69583,1413],{"emptyLinePlaceholder":1412},[40,69585,69586,69588,69590],{"class":42,"line":290},[40,69587,4387],{"class":50},[40,69589,55098],{"class":46},[40,69591,54606],{"class":50},[40,69593,69594,69596,69598,69600,69602,69605],{"class":42,"line":298},[40,69595,55442],{"class":50},[40,69597,54909],{"class":46},[40,69599,56784],{"class":596},[40,69601,1284],{"class":50},[40,69603,69604],{"class":94},"\"father\"",[40,69606,54606],{"class":50},[40,69608,69609,69611,69613,69615,69617,69620,69622,69624],{"class":42,"line":310},[40,69610,54640],{"class":50},[40,69612,54909],{"class":46},[40,69614,56784],{"class":596},[40,69616,1284],{"class":50},[40,69618,69619],{"class":94},"\"son\"",[40,69621,58612],{"class":50},[40,69623,54909],{"class":46},[40,69625,54606],{"class":50},[40,69627,69628,69630,69632],{"class":42,"line":5086},[40,69629,55715],{"class":50},[40,69631,54909],{"class":46},[40,69633,54606],{"class":50},[40,69635,69636,69638,69640],{"class":42,"line":5091},[40,69637,55442],{"class":50},[40,69639,55111],{"class":46},[40,69641,54606],{"class":50},[40,69643,69644,69646,69649,69651,69653,69655,69657,69660],{"class":42,"line":5105},[40,69645,14543],{"class":1283},[40,69647,69648],{"class":63}," fa",[40,69650,16886],{"class":1283},[40,69652,57694],{"class":50},[40,69654,57697],{"class":596},[40,69656,3488],{"class":50},[40,69658,69659],{"class":94},"'.father'",[40,69661,1811],{"class":50},[40,69663,69664,69666,69669,69671,69673,69675,69677,69680],{"class":42,"line":5110},[40,69665,14543],{"class":1283},[40,69667,69668],{"class":63}," son",[40,69670,16886],{"class":1283},[40,69672,57694],{"class":50},[40,69674,57697],{"class":596},[40,69676,3488],{"class":50},[40,69678,69679],{"class":94},"'.son'",[40,69681,1811],{"class":50},[40,69683,69684,69686,69688,69690,69692,69694,69696],{"class":42,"line":5902},[40,69685,55705],{"class":50},[40,69687,61111],{"class":596},[40,69689,3488],{"class":50},[40,69691,61116],{"class":94},[40,69693,15757],{"class":50},[40,69695,57747],{"class":1283},[40,69697,57750],{"class":50},[40,69699,69700,69702,69704,69707],{"class":42,"line":5916},[40,69701,62223],{"class":596},[40,69703,3488],{"class":50},[40,69705,69706],{"class":94},"'woshiu1'",[40,69708,1811],{"class":50},[40,69710,69711,69713,69715],{"class":42,"line":5924},[40,69712,57833],{"class":50},[40,69714,129],{"class":63},[40,69716,1811],{"class":50},[40,69718,69719,69722,69724,69726,69728,69730,69732],{"class":42,"line":5929},[40,69720,69721],{"class":50},"    fa.",[40,69723,61111],{"class":596},[40,69725,3488],{"class":50},[40,69727,61116],{"class":94},[40,69729,15757],{"class":50},[40,69731,57747],{"class":1283},[40,69733,57750],{"class":50},[40,69735,69736,69738,69740,69743],{"class":42,"line":5935},[40,69737,62223],{"class":596},[40,69739,3488],{"class":50},[40,69741,69742],{"class":94},"'1'",[40,69744,1811],{"class":50},[40,69746,69747,69749,69751],{"class":42,"line":5941},[40,69748,57833],{"class":50},[40,69750,129],{"class":63},[40,69752,1811],{"class":50},[40,69754,69755,69758,69760,69762,69764,69766,69768],{"class":42,"line":5946},[40,69756,69757],{"class":50},"    son.",[40,69759,61111],{"class":596},[40,69761,3488],{"class":50},[40,69763,61116],{"class":94},[40,69765,15757],{"class":50},[40,69767,57747],{"class":1283},[40,69769,57750],{"class":50},[40,69771,69772,69774,69776,69779],{"class":42,"line":11270},[40,69773,62223],{"class":596},[40,69775,3488],{"class":50},[40,69777,69778],{"class":94},"'2'",[40,69780,1811],{"class":50},[40,69782,69783,69785,69787],{"class":42,"line":11294},[40,69784,57833],{"class":50},[40,69786,129],{"class":63},[40,69788,1811],{"class":50},[40,69790,69791,69793,69795],{"class":42,"line":11299},[40,69792,55715],{"class":50},[40,69794,55111],{"class":46},[40,69796,54606],{"class":50},[40,69798,69799,69801,69803],{"class":42,"line":11305},[40,69800,55083],{"class":50},[40,69802,55098],{"class":46},[40,69804,54606],{"class":50},[40,69806,69807],{"class":42,"line":11332},[40,69808,1413],{"emptyLinePlaceholder":1412},[40,69810,69811,69813,69815],{"class":42,"line":11337},[40,69812,55083],{"class":50},[40,69814,53935],{"class":46},[40,69816,54606],{"class":50},[19,69818,69819],{},[438,69820],{"alt":36,"src":69821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,69823,69824],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[2423,69826,69828],{"id":69827},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,69830,69831],{},[438,69832],{"alt":36,"src":69833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,69835,69836],{},"反着来",[19,69838,69839],{},"注意是同名事件，比如都是‘click’",[2423,69841,69843],{"id":69842},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,69845,69846],{},[438,69847],{"alt":36,"src":69848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[2423,69850,69852],{"id":69851},"_3314-解绑事件","3.3.1.4 解绑事件",[19,69854,69855],{},[438,69856],{"alt":36,"src":69857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,69859,69860],{},[438,69861],{"alt":36,"src":69862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[2423,69864,69866],{"id":69865},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[492,69868,69869],{},[495,69870,69871],{},"事件类型的区别",[19,69873,69874],{},[438,69875],{"alt":36,"src":69876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,69878,69879],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[492,69881,69882],{"start":54},[495,69883,69884],{},"注册事件的区别",[19,69886,69887],{},[438,69888],{"alt":36,"src":69889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[2423,69891,69893],{"id":69892},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,69895,69896],{},[438,69897],{"alt":36,"src":69898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,69900,69901],{},[438,69902],{"alt":36,"src":69903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[31,69905,69907],{"className":56365,"code":69906,"language":56367,"meta":36,"style":36},"\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",[26,69908,69909,69917,69934,69957,69965,69970,69975,69980,69984,69992,70000],{"__ignoreMap":36},[40,69910,69911,69913,69915],{"class":42,"line":43},[40,69912,4387],{"class":50},[40,69914,55098],{"class":46},[40,69916,54606],{"class":50},[40,69918,69919,69921,69924,69927,69929,69932],{"class":42,"line":54},[40,69920,55442],{"class":50},[40,69922,69923],{"class":46},"form",[40,69925,69926],{"class":596}," action",[40,69928,1284],{"class":50},[40,69930,69931],{"class":94},"\"http:\u002F\u002Fwww.itcast.cn\"",[40,69933,54606],{"class":50},[40,69935,69936,69938,69940,69942,69944,69947,69950,69952,69955],{"class":42,"line":70},[40,69937,54640],{"class":50},[40,69939,57119],{"class":46},[40,69941,57122],{"class":596},[40,69943,1284],{"class":50},[40,69945,69946],{"class":94},"\"submit\"",[40,69948,69949],{"class":596}," value",[40,69951,1284],{"class":50},[40,69953,69954],{"class":94},"\"免费注册\"",[40,69956,54606],{"class":50},[40,69958,69959,69961,69963],{"class":42,"line":78},[40,69960,54640],{"class":50},[40,69962,55111],{"class":46},[40,69964,54606],{"class":50},[40,69966,69967],{"class":42,"line":86},[40,69968,69969],{"class":50},"      const form = document.querySelector('form')\n",[40,69971,69972],{"class":42,"line":100},[40,69973,69974],{"class":50},"      form.addEventListener('submit', function (e) {\n",[40,69976,69977],{"class":42,"line":108},[40,69978,69979],{"class":50},"        e.preventDefault()\n",[40,69981,69982],{"class":42,"line":121},[40,69983,68113],{"class":50},[40,69985,69986,69988,69990],{"class":42,"line":134},[40,69987,55074],{"class":50},[40,69989,55111],{"class":46},[40,69991,54606],{"class":50},[40,69993,69994,69996,69998],{"class":42,"line":146},[40,69995,55715],{"class":50},[40,69997,69923],{"class":46},[40,69999,54606],{"class":50},[40,70001,70002,70004,70006],{"class":42,"line":154},[40,70003,55083],{"class":50},[40,70005,55098],{"class":46},[40,70007,54606],{"class":50},[19,70009,70010],{},"点击不在跳转！！！",[402,70012,70014],{"id":70013},"_332-事件委托","3.3.2 事件委托",[19,70016,70017],{},[438,70018],{"alt":36,"src":70019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[31,70021,70023],{"className":53933,"code":70022,"language":53935,"meta":36,"style":36},"\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",[26,70024,70025,70035,70049,70053,70061,70075,70095,70107,70115,70119,70127,70135,70147,70159,70171,70183,70195,70208,70216,70224,70229,70248,70269,70274,70279,70284,70289,70298,70302,70312,70316,70321,70326,70340,70350,70354,70358,70366,70374,70378],{"__ignoreMap":36},[40,70026,70027,70029,70031,70033],{"class":42,"line":43},[40,70028,54597],{"class":50},[40,70030,54600],{"class":46},[40,70032,54603],{"class":596},[40,70034,54606],{"class":50},[40,70036,70037,70039,70041,70043,70045,70047],{"class":42,"line":54},[40,70038,4387],{"class":50},[40,70040,53935],{"class":46},[40,70042,54615],{"class":596},[40,70044,1284],{"class":50},[40,70046,54620],{"class":94},[40,70048,54606],{"class":50},[40,70050,70051],{"class":42,"line":70},[40,70052,1413],{"emptyLinePlaceholder":1412},[40,70054,70055,70057,70059],{"class":42,"line":78},[40,70056,4387],{"class":50},[40,70058,54633],{"class":46},[40,70060,54606],{"class":50},[40,70062,70063,70065,70067,70069,70071,70073],{"class":42,"line":86},[40,70064,55442],{"class":50},[40,70066,54643],{"class":46},[40,70068,54646],{"class":596},[40,70070,1284],{"class":50},[40,70072,54651],{"class":94},[40,70074,54606],{"class":50},[40,70076,70077,70079,70081,70083,70085,70087,70089,70091,70093],{"class":42,"line":100},[40,70078,55442],{"class":50},[40,70080,54643],{"class":46},[40,70082,18242],{"class":596},[40,70084,1284],{"class":50},[40,70086,54690],{"class":94},[40,70088,54670],{"class":596},[40,70090,1284],{"class":50},[40,70092,54697],{"class":94},[40,70094,54606],{"class":50},[40,70096,70097,70099,70101,70103,70105],{"class":42,"line":108},[40,70098,55442],{"class":50},[40,70100,54706],{"class":46},[40,70102,54709],{"class":50},[40,70104,54706],{"class":46},[40,70106,54606],{"class":50},[40,70108,70109,70111,70113],{"class":42,"line":121},[40,70110,55083],{"class":50},[40,70112,54633],{"class":46},[40,70114,54606],{"class":50},[40,70116,70117],{"class":42,"line":134},[40,70118,1413],{"emptyLinePlaceholder":1412},[40,70120,70121,70123,70125],{"class":42,"line":146},[40,70122,4387],{"class":50},[40,70124,55098],{"class":46},[40,70126,54606],{"class":50},[40,70128,70129,70131,70133],{"class":42,"line":154},[40,70130,55442],{"class":50},[40,70132,1338],{"class":46},[40,70134,54606],{"class":50},[40,70136,70137,70139,70141,70143,70145],{"class":42,"line":162},[40,70138,54640],{"class":50},[40,70140,495],{"class":46},[40,70142,57264],{"class":50},[40,70144,495],{"class":46},[40,70146,54606],{"class":50},[40,70148,70149,70151,70153,70155,70157],{"class":42,"line":170},[40,70150,54640],{"class":50},[40,70152,495],{"class":46},[40,70154,57283],{"class":50},[40,70156,495],{"class":46},[40,70158,54606],{"class":50},[40,70160,70161,70163,70165,70167,70169],{"class":42,"line":183},[40,70162,54640],{"class":50},[40,70164,495],{"class":46},[40,70166,57302],{"class":50},[40,70168,495],{"class":46},[40,70170,54606],{"class":50},[40,70172,70173,70175,70177,70179,70181],{"class":42,"line":196},[40,70174,54640],{"class":50},[40,70176,495],{"class":46},[40,70178,57321],{"class":50},[40,70180,495],{"class":46},[40,70182,54606],{"class":50},[40,70184,70185,70187,70189,70191,70193],{"class":42,"line":204},[40,70186,54640],{"class":50},[40,70188,495],{"class":46},[40,70190,57340],{"class":50},[40,70192,495],{"class":46},[40,70194,54606],{"class":50},[40,70196,70197,70199,70201,70204,70206],{"class":42,"line":217},[40,70198,54640],{"class":50},[40,70200,19],{"class":46},[40,70202,70203],{"class":50},">我不需要变色\u003C\u002F",[40,70205,19],{"class":46},[40,70207,54606],{"class":50},[40,70209,70210,70212,70214],{"class":42,"line":230},[40,70211,55715],{"class":50},[40,70213,1338],{"class":46},[40,70215,54606],{"class":50},[40,70217,70218,70220,70222],{"class":42,"line":238},[40,70219,55442],{"class":50},[40,70221,55111],{"class":46},[40,70223,54606],{"class":50},[40,70225,70226],{"class":42,"line":251},[40,70227,70228],{"class":997},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[40,70230,70231,70233,70235,70237,70239,70241,70243,70246],{"class":42,"line":264},[40,70232,14543],{"class":1283},[40,70234,64590],{"class":63},[40,70236,16886],{"class":1283},[40,70238,57694],{"class":50},[40,70240,57697],{"class":596},[40,70242,3488],{"class":50},[40,70244,70245],{"class":94},"'ul'",[40,70247,1811],{"class":50},[40,70249,70250,70253,70255,70257,70259,70261,70263,70265,70267],{"class":42,"line":277},[40,70251,70252],{"class":50},"    ul.",[40,70254,61111],{"class":596},[40,70256,3488],{"class":50},[40,70258,61116],{"class":94},[40,70260,15757],{"class":50},[40,70262,57747],{"class":1283},[40,70264,4993],{"class":50},[40,70266,3558],{"class":8539},[40,70268,15764],{"class":50},[40,70270,70271],{"class":42,"line":290},[40,70272,70273],{"class":997},"      \u002F\u002F alert(1)\n",[40,70275,70276],{"class":42,"line":298},[40,70277,70278],{"class":997},"      \u002F\u002F e.target就是我们点击的对象\n",[40,70280,70281],{"class":42,"line":310},[40,70282,70283],{"class":997},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[40,70285,70286],{"class":42,"line":5086},[40,70287,70288],{"class":997},"      \u002F\u002F e.target.style.color = 'red'\n",[40,70290,70291,70293,70295],{"class":42,"line":5091},[40,70292,61542],{"class":50},[40,70294,61545],{"class":596},[40,70296,70297],{"class":50},"(e)\n",[40,70299,70300],{"class":42,"line":5105},[40,70301,1413],{"emptyLinePlaceholder":1412},[40,70303,70304,70306,70309],{"class":42,"line":5110},[40,70305,61542],{"class":50},[40,70307,70308],{"class":596},"dir",[40,70310,70311],{"class":50},"(e.target)\n",[40,70313,70314],{"class":42,"line":5902},[40,70315,1413],{"emptyLinePlaceholder":1412},[40,70317,70318],{"class":42,"line":5916},[40,70319,70320],{"class":997},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[40,70322,70323],{"class":42,"line":5924},[40,70324,70325],{"class":997},"      \u002F\u002F 通过tagName来进行判断\n",[40,70327,70328,70330,70333,70335,70338],{"class":42,"line":5929},[40,70329,57778],{"class":1283},[40,70331,70332],{"class":50}," (e.target.tagName ",[40,70334,57784],{"class":1283},[40,70336,70337],{"class":94}," 'LI'",[40,70339,15764],{"class":50},[40,70341,70342,70345,70347],{"class":42,"line":5935},[40,70343,70344],{"class":50},"        e.target.style.color ",[40,70346,1284],{"class":1283},[40,70348,70349],{"class":94}," 'red'\n",[40,70351,70352],{"class":42,"line":5941},[40,70353,55696],{"class":50},[40,70355,70356],{"class":42,"line":5946},[40,70357,36761],{"class":50},[40,70359,70360,70362,70364],{"class":42,"line":11270},[40,70361,55715],{"class":50},[40,70363,55111],{"class":46},[40,70365,54606],{"class":50},[40,70367,70368,70370,70372],{"class":42,"line":11294},[40,70369,55083],{"class":50},[40,70371,55098],{"class":46},[40,70373,54606],{"class":50},[40,70375,70376],{"class":42,"line":11299},[40,70377,1413],{"emptyLinePlaceholder":1412},[40,70379,70380,70382,70384],{"class":42,"line":11305},[40,70381,55083],{"class":50},[40,70383,53935],{"class":46},[40,70385,54606],{"class":50},[19,70387,70388],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,70390,70391],{},"if(e.target.ragName==='P') {}",[19,70393,70394],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,70396,70397],{},"通过事件委托的方式实现tab栏切换改造：",[19,70399,70400],{},"一定要记住自定义属性！！！！！！",[19,70402,70403],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,70405,70406],{},"id是自定义的属性名",[19,70408,70409],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[31,70411,70413],{"className":53933,"code":70412,"language":53935,"meta":36,"style":36},"\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",[26,70414,70415,70425,70439,70443,70451,70465,70485,70505,70517,70525,70531,70541,70551,70555,70559,70565,70577,70589,70601,70617,70621,70625,70631,70643,70655,70667,70677,70687,70691,70695,70703,70715,70725,70737,70741,70745,70753,70763,70773,70783,70787,70791,70801,70815,70827,70831,70835,70847,70857,70873,70883,70887,70891,70905,70915,70925,70929,70933,70939,70953,70957,70961,70969,70979,70983,70987,70996,71006,71010,71018,71026,71030,71038,71052,71066,71078,71086,71125,71157,71189,71221,71253,71261,71269,71283,71317,71351,71385,71419,71453,71461,71469,71477,71482,71487,71506,71511,71531,71539,71544,71557,71578,71591,71595,71600,71605,71618,71638,71666,71670,71674,71678,71686,71694,71698],{"__ignoreMap":36},[40,70416,70417,70419,70421,70423],{"class":42,"line":43},[40,70418,54597],{"class":50},[40,70420,54600],{"class":46},[40,70422,54603],{"class":596},[40,70424,54606],{"class":50},[40,70426,70427,70429,70431,70433,70435,70437],{"class":42,"line":54},[40,70428,4387],{"class":50},[40,70430,53935],{"class":46},[40,70432,54615],{"class":596},[40,70434,1284],{"class":50},[40,70436,54620],{"class":94},[40,70438,54606],{"class":50},[40,70440,70441],{"class":42,"line":70},[40,70442,1413],{"emptyLinePlaceholder":1412},[40,70444,70445,70447,70449],{"class":42,"line":78},[40,70446,4387],{"class":50},[40,70448,54633],{"class":46},[40,70450,54606],{"class":50},[40,70452,70453,70455,70457,70459,70461,70463],{"class":42,"line":86},[40,70454,55442],{"class":50},[40,70456,54643],{"class":46},[40,70458,54646],{"class":596},[40,70460,1284],{"class":50},[40,70462,54651],{"class":94},[40,70464,62425],{"class":50},[40,70466,70467,70469,70471,70473,70475,70477,70479,70481,70483],{"class":42,"line":100},[40,70468,55442],{"class":50},[40,70470,54643],{"class":46},[40,70472,54662],{"class":596},[40,70474,1284],{"class":50},[40,70476,54667],{"class":94},[40,70478,54670],{"class":596},[40,70480,1284],{"class":50},[40,70482,54675],{"class":94},[40,70484,62425],{"class":50},[40,70486,70487,70489,70491,70493,70495,70497,70499,70501,70503],{"class":42,"line":108},[40,70488,55442],{"class":50},[40,70490,54643],{"class":46},[40,70492,18242],{"class":596},[40,70494,1284],{"class":50},[40,70496,54690],{"class":94},[40,70498,54670],{"class":596},[40,70500,1284],{"class":50},[40,70502,54697],{"class":94},[40,70504,62425],{"class":50},[40,70506,70507,70509,70511,70513,70515],{"class":42,"line":121},[40,70508,55442],{"class":50},[40,70510,54706],{"class":46},[40,70512,66923],{"class":50},[40,70514,54706],{"class":46},[40,70516,54606],{"class":50},[40,70518,70519,70521,70523],{"class":42,"line":134},[40,70520,55442],{"class":50},[40,70522,3384],{"class":46},[40,70524,54606],{"class":50},[40,70526,70527,70529],{"class":42,"line":146},[40,70528,9726],{"class":46},[40,70530,18894],{"class":50},[40,70532,70533,70535,70537,70539],{"class":42,"line":154},[40,70534,58004],{"class":63},[40,70536,60],{"class":50},[40,70538,3672],{"class":63},[40,70540,4637],{"class":50},[40,70542,70543,70545,70547,70549],{"class":42,"line":162},[40,70544,57993],{"class":63},[40,70546,60],{"class":50},[40,70548,3672],{"class":63},[40,70550,4637],{"class":50},[40,70552,70553],{"class":42,"line":170},[40,70554,5513],{"class":50},[40,70556,70557],{"class":42,"line":183},[40,70558,1413],{"emptyLinePlaceholder":1412},[40,70560,70561,70563],{"class":42,"line":196},[40,70562,66974],{"class":596},[40,70564,18894],{"class":50},[40,70566,70567,70569,70571,70573,70575],{"class":42,"line":204},[40,70568,58069],{"class":63},[40,70570,60],{"class":50},[40,70572,66985],{"class":63},[40,70574,54790],{"class":1283},[40,70576,4637],{"class":50},[40,70578,70579,70581,70583,70585,70587],{"class":42,"line":217},[40,70580,58083],{"class":63},[40,70582,60],{"class":50},[40,70584,66998],{"class":63},[40,70586,54790],{"class":1283},[40,70588,4637],{"class":50},[40,70590,70591,70593,70595,70597,70599],{"class":42,"line":230},[40,70592,58004],{"class":63},[40,70594,60],{"class":50},[40,70596,4178],{"class":63},[40,70598,54790],{"class":1283},[40,70600,4637],{"class":50},[40,70602,70603,70605,70607,70609,70611,70613,70615],{"class":42,"line":238},[40,70604,65275],{"class":63},[40,70606,60],{"class":50},[40,70608,3698],{"class":63},[40,70610,54790],{"class":1283},[40,70612,54819],{"class":63},[40,70614,65542],{"class":63},[40,70616,4637],{"class":50},[40,70618,70619],{"class":42,"line":251},[40,70620,5513],{"class":50},[40,70622,70623],{"class":42,"line":264},[40,70624,1413],{"emptyLinePlaceholder":1412},[40,70626,70627,70629],{"class":42,"line":277},[40,70628,67043],{"class":596},[40,70630,18894],{"class":50},[40,70632,70633,70635,70637,70639,70641],{"class":42,"line":290},[40,70634,58069],{"class":63},[40,70636,60],{"class":50},[40,70638,3791],{"class":63},[40,70640,3808],{"class":1283},[40,70642,4637],{"class":50},[40,70644,70645,70647,70649,70651,70653],{"class":42,"line":298},[40,70646,58083],{"class":63},[40,70648,60],{"class":50},[40,70650,4384],{"class":63},[40,70652,54790],{"class":1283},[40,70654,4637],{"class":50},[40,70656,70657,70659,70661,70663,70665],{"class":42,"line":310},[40,70658,60657],{"class":63},[40,70660,60],{"class":50},[40,70662,4384],{"class":63},[40,70664,54790],{"class":1283},[40,70666,4637],{"class":50},[40,70668,70669,70671,70673,70675],{"class":42,"line":5086},[40,70670,58307],{"class":63},[40,70672,60],{"class":50},[40,70674,54775],{"class":63},[40,70676,4637],{"class":50},[40,70678,70679,70681,70683,70685],{"class":42,"line":5091},[40,70680,58318],{"class":63},[40,70682,60],{"class":50},[40,70684,54966],{"class":63},[40,70686,4637],{"class":50},[40,70688,70689],{"class":42,"line":5105},[40,70690,5513],{"class":50},[40,70692,70693],{"class":42,"line":5110},[40,70694,1413],{"emptyLinePlaceholder":1412},[40,70696,70697,70699,70701],{"class":42,"line":5902},[40,70698,67043],{"class":596},[40,70700,67116],{"class":46},[40,70702,18894],{"class":50},[40,70704,70705,70707,70709,70711,70713],{"class":42,"line":5916},[40,70706,58220],{"class":63},[40,70708,60],{"class":50},[40,70710,4277],{"class":63},[40,70712,54790],{"class":1283},[40,70714,4637],{"class":50},[40,70716,70717,70719,70721,70723],{"class":42,"line":5924},[40,70718,65632],{"class":63},[40,70720,60],{"class":50},[40,70722,67139],{"class":63},[40,70724,4637],{"class":50},[40,70726,70727,70729,70731,70733,70735],{"class":42,"line":5929},[40,70728,65298],{"class":63},[40,70730,60],{"class":50},[40,70732,4178],{"class":63},[40,70734,54790],{"class":1283},[40,70736,4637],{"class":50},[40,70738,70739],{"class":42,"line":5935},[40,70740,5513],{"class":50},[40,70742,70743],{"class":42,"line":5941},[40,70744,1413],{"emptyLinePlaceholder":1412},[40,70746,70747,70749,70751],{"class":42,"line":5946},[40,70748,67043],{"class":596},[40,70750,64590],{"class":46},[40,70752,18894],{"class":50},[40,70754,70755,70757,70759,70761],{"class":42,"line":11270},[40,70756,58030],{"class":63},[40,70758,60],{"class":50},[40,70760,58035],{"class":63},[40,70762,4637],{"class":50},[40,70764,70765,70767,70769,70771],{"class":42,"line":11294},[40,70766,58307],{"class":63},[40,70768,60],{"class":50},[40,70770,54775],{"class":63},[40,70772,4637],{"class":50},[40,70774,70775,70777,70779,70781],{"class":42,"line":11299},[40,70776,58318],{"class":63},[40,70778,60],{"class":50},[40,70780,54878],{"class":63},[40,70782,4637],{"class":50},[40,70784,70785],{"class":42,"line":11305},[40,70786,5513],{"class":50},[40,70788,70789],{"class":42,"line":11332},[40,70790,1413],{"emptyLinePlaceholder":1412},[40,70792,70793,70795,70797,70799],{"class":42,"line":11337},[40,70794,67043],{"class":596},[40,70796,64590],{"class":46},[40,70798,58373],{"class":46},[40,70800,18894],{"class":50},[40,70802,70803,70805,70807,70809,70811,70813],{"class":42,"line":11343},[40,70804,58004],{"class":63},[40,70806,60],{"class":50},[40,70808,3672],{"class":63},[40,70810,12272],{"class":63},[40,70812,54790],{"class":1283},[40,70814,4637],{"class":50},[40,70816,70817,70819,70821,70823,70825],{"class":42,"line":11355},[40,70818,58220],{"class":63},[40,70820,60],{"class":50},[40,70822,4028],{"class":63},[40,70824,54790],{"class":1283},[40,70826,4637],{"class":50},[40,70828,70829],{"class":42,"line":11367},[40,70830,5513],{"class":50},[40,70832,70833],{"class":42,"line":11379},[40,70834,1413],{"emptyLinePlaceholder":1412},[40,70836,70837,70839,70841,70843,70845],{"class":42,"line":13038},[40,70838,67043],{"class":596},[40,70840,64590],{"class":46},[40,70842,58373],{"class":46},[40,70844,4741],{"class":46},[40,70846,18894],{"class":50},[40,70848,70849,70851,70853,70855],{"class":42,"line":13063},[40,70850,67268],{"class":63},[40,70852,60],{"class":50},[40,70854,58035],{"class":63},[40,70856,4637],{"class":50},[40,70858,70859,70861,70863,70865,70867,70869,70871],{"class":42,"line":13086},[40,70860,65530],{"class":63},[40,70862,60],{"class":50},[40,70864,64],{"class":63},[40,70866,54790],{"class":1283},[40,70868,54819],{"class":63},[40,70870,67289],{"class":63},[40,70872,4637],{"class":50},[40,70874,70875,70877,70879,70881],{"class":42,"line":13110},[40,70876,60714],{"class":63},[40,70878,60],{"class":50},[40,70880,65667],{"class":63},[40,70882,4637],{"class":50},[40,70884,70885],{"class":42,"line":13115},[40,70886,5513],{"class":50},[40,70888,70889],{"class":42,"line":13120},[40,70890,1413],{"emptyLinePlaceholder":1412},[40,70892,70893,70895,70897,70899,70901,70903],{"class":42,"line":13125},[40,70894,67043],{"class":596},[40,70896,64590],{"class":46},[40,70898,58373],{"class":46},[40,70900,4741],{"class":46},[40,70902,67322],{"class":596},[40,70904,18894],{"class":50},[40,70906,70907,70909,70911,70913],{"class":42,"line":13134},[40,70908,65089],{"class":63},[40,70910,60],{"class":50},[40,70912,67333],{"class":63},[40,70914,4637],{"class":50},[40,70916,70917,70919,70921,70923],{"class":42,"line":13139},[40,70918,60714],{"class":63},[40,70920,60],{"class":50},[40,70922,67333],{"class":63},[40,70924,4637],{"class":50},[40,70926,70927],{"class":42,"line":13145},[40,70928,5513],{"class":50},[40,70930,70931],{"class":42,"line":13166},[40,70932,1413],{"emptyLinePlaceholder":1412},[40,70934,70935,70937],{"class":42,"line":13172},[40,70936,67358],{"class":596},[40,70938,18894],{"class":50},[40,70940,70941,70943,70945,70947,70949,70951],{"class":42,"line":13186},[40,70942,57993],{"class":63},[40,70944,60],{"class":50},[40,70946,3672],{"class":63},[40,70948,67371],{"class":63},[40,70950,54790],{"class":1283},[40,70952,4637],{"class":50},[40,70954,70955],{"class":42,"line":13192},[40,70956,5513],{"class":50},[40,70958,70959],{"class":42,"line":13219},[40,70960,1413],{"emptyLinePlaceholder":1412},[40,70962,70963,70965,70967],{"class":42,"line":13228},[40,70964,67358],{"class":596},[40,70966,65472],{"class":596},[40,70968,18894],{"class":50},[40,70970,70971,70973,70975,70977],{"class":42,"line":13234},[40,70972,58307],{"class":63},[40,70974,60],{"class":50},[40,70976,58035],{"class":63},[40,70978,4637],{"class":50},[40,70980,70981],{"class":42,"line":13242},[40,70982,5513],{"class":50},[40,70984,70985],{"class":42,"line":13247},[40,70986,1413],{"emptyLinePlaceholder":1412},[40,70988,70989,70991,70994],{"class":42,"line":19926},[40,70990,67358],{"class":596},[40,70992,70993],{"class":596}," .active",[40,70995,18894],{"class":50},[40,70997,70998,71000,71002,71004],{"class":42,"line":19932},[40,70999,58307],{"class":63},[40,71001,60],{"class":50},[40,71003,64167],{"class":63},[40,71005,4637],{"class":50},[40,71007,71008],{"class":42,"line":19955},[40,71009,5513],{"class":50},[40,71011,71012,71014,71016],{"class":42,"line":19961},[40,71013,55715],{"class":50},[40,71015,3384],{"class":46},[40,71017,54606],{"class":50},[40,71019,71020,71022,71024],{"class":42,"line":19984},[40,71021,55083],{"class":50},[40,71023,54633],{"class":46},[40,71025,54606],{"class":50},[40,71027,71028],{"class":42,"line":19998},[40,71029,1413],{"emptyLinePlaceholder":1412},[40,71031,71032,71034,71036],{"class":42,"line":20018},[40,71033,4387],{"class":50},[40,71035,55098],{"class":46},[40,71037,54606],{"class":50},[40,71039,71040,71042,71044,71046,71048,71050],{"class":42,"line":20024},[40,71041,55442],{"class":50},[40,71043,54909],{"class":46},[40,71045,56784],{"class":596},[40,71047,1284],{"class":50},[40,71049,67473],{"class":94},[40,71051,54606],{"class":50},[40,71053,71054,71056,71058,71060,71062,71064],{"class":42,"line":20035},[40,71055,54640],{"class":50},[40,71057,54909],{"class":46},[40,71059,56784],{"class":596},[40,71061,1284],{"class":50},[40,71063,67488],{"class":94},[40,71065,54606],{"class":50},[40,71067,71068,71070,71072,71074,71076],{"class":42,"line":20058},[40,71069,58532],{"class":50},[40,71071,402],{"class":46},[40,71073,67499],{"class":50},[40,71075,402],{"class":46},[40,71077,54606],{"class":50},[40,71079,71080,71082,71084],{"class":42,"line":20080},[40,71081,58532],{"class":50},[40,71083,1338],{"class":46},[40,71085,54606],{"class":50},[40,71087,71088,71090,71092,71094,71096,71098,71100,71102,71104,71106,71108,71110,71112,71115,71117,71119,71121,71123],{"class":42,"line":20085},[40,71089,58600],{"class":50},[40,71091,495],{"class":46},[40,71093,64350],{"class":50},[40,71095,2106],{"class":46},[40,71097,56784],{"class":596},[40,71099,1284],{"class":50},[40,71101,63004],{"class":94},[40,71103,64355],{"class":596},[40,71105,1284],{"class":50},[40,71107,67534],{"class":94},[40,71109,57249],{"class":596},[40,71111,1284],{"class":50},[40,71113,71114],{"class":94},"\"0\"",[40,71116,67537],{"class":50},[40,71118,2106],{"class":46},[40,71120,58612],{"class":50},[40,71122,495],{"class":46},[40,71124,54606],{"class":50},[40,71126,71127,71129,71131,71133,71135,71137,71139,71141,71143,71145,71147,71149,71151,71153,71155],{"class":42,"line":20091},[40,71128,58600],{"class":50},[40,71130,495],{"class":46},[40,71132,64350],{"class":50},[40,71134,2106],{"class":46},[40,71136,64355],{"class":596},[40,71138,1284],{"class":50},[40,71140,67534],{"class":94},[40,71142,57249],{"class":596},[40,71144,1284],{"class":50},[40,71146,7002],{"class":94},[40,71148,67564],{"class":50},[40,71150,2106],{"class":46},[40,71152,58612],{"class":50},[40,71154,495],{"class":46},[40,71156,54606],{"class":50},[40,71158,71159,71161,71163,71165,71167,71169,71171,71173,71175,71177,71179,71181,71183,71185,71187],{"class":42,"line":20105},[40,71160,58600],{"class":50},[40,71162,495],{"class":46},[40,71164,64350],{"class":50},[40,71166,2106],{"class":46},[40,71168,64355],{"class":596},[40,71170,1284],{"class":50},[40,71172,67534],{"class":94},[40,71174,57249],{"class":596},[40,71176,1284],{"class":50},[40,71178,7025],{"class":94},[40,71180,67591],{"class":50},[40,71182,2106],{"class":46},[40,71184,58612],{"class":50},[40,71186,495],{"class":46},[40,71188,54606],{"class":50},[40,71190,71191,71193,71195,71197,71199,71201,71203,71205,71207,71209,71211,71213,71215,71217,71219],{"class":42,"line":20118},[40,71192,58600],{"class":50},[40,71194,495],{"class":46},[40,71196,64350],{"class":50},[40,71198,2106],{"class":46},[40,71200,64355],{"class":596},[40,71202,1284],{"class":50},[40,71204,67534],{"class":94},[40,71206,57249],{"class":596},[40,71208,1284],{"class":50},[40,71210,7038],{"class":94},[40,71212,67618],{"class":50},[40,71214,2106],{"class":46},[40,71216,58612],{"class":50},[40,71218,495],{"class":46},[40,71220,54606],{"class":50},[40,71222,71223,71225,71227,71229,71231,71233,71235,71237,71239,71241,71243,71245,71247,71249,71251],{"class":42,"line":20123},[40,71224,58600],{"class":50},[40,71226,495],{"class":46},[40,71228,64350],{"class":50},[40,71230,2106],{"class":46},[40,71232,64355],{"class":596},[40,71234,1284],{"class":50},[40,71236,67534],{"class":94},[40,71238,57249],{"class":596},[40,71240,1284],{"class":50},[40,71242,7051],{"class":94},[40,71244,67645],{"class":50},[40,71246,2106],{"class":46},[40,71248,58612],{"class":50},[40,71250,495],{"class":46},[40,71252,54606],{"class":50},[40,71254,71255,71257,71259],{"class":42,"line":20137},[40,71256,58705],{"class":50},[40,71258,1338],{"class":46},[40,71260,54606],{"class":50},[40,71262,71263,71265,71267],{"class":42,"line":20142},[40,71264,55074],{"class":50},[40,71266,54909],{"class":46},[40,71268,54606],{"class":50},[40,71270,71271,71273,71275,71277,71279,71281],{"class":42,"line":20148},[40,71272,54640],{"class":50},[40,71274,54909],{"class":46},[40,71276,56784],{"class":596},[40,71278,1284],{"class":50},[40,71280,67682],{"class":94},[40,71282,54606],{"class":50},[40,71284,71285,71287,71289,71291,71293,71295,71297,71299,71301,71303,71305,71307,71309,71311,71313,71315],{"class":42,"line":20153},[40,71286,58532],{"class":50},[40,71288,54909],{"class":46},[40,71290,56784],{"class":596},[40,71292,1284],{"class":50},[40,71294,67697],{"class":94},[40,71296,64350],{"class":50},[40,71298,438],{"class":46},[40,71300,58537],{"class":596},[40,71302,1284],{"class":50},[40,71304,67708],{"class":94},[40,71306,58545],{"class":596},[40,71308,1284],{"class":50},[40,71310,285],{"class":94},[40,71312,67717],{"class":50},[40,71314,54909],{"class":46},[40,71316,54606],{"class":50},[40,71318,71319,71321,71323,71325,71327,71329,71331,71333,71335,71337,71339,71341,71343,71345,71347,71349],{"class":42,"line":20167},[40,71320,58532],{"class":50},[40,71322,54909],{"class":46},[40,71324,56784],{"class":596},[40,71326,1284],{"class":50},[40,71328,65921],{"class":94},[40,71330,64350],{"class":50},[40,71332,438],{"class":46},[40,71334,58537],{"class":596},[40,71336,1284],{"class":50},[40,71338,67744],{"class":94},[40,71340,58545],{"class":596},[40,71342,1284],{"class":50},[40,71344,285],{"class":94},[40,71346,67717],{"class":50},[40,71348,54909],{"class":46},[40,71350,54606],{"class":50},[40,71352,71353,71355,71357,71359,71361,71363,71365,71367,71369,71371,71373,71375,71377,71379,71381,71383],{"class":42,"line":20172},[40,71354,58532],{"class":50},[40,71356,54909],{"class":46},[40,71358,56784],{"class":596},[40,71360,1284],{"class":50},[40,71362,65921],{"class":94},[40,71364,64350],{"class":50},[40,71366,438],{"class":46},[40,71368,58537],{"class":596},[40,71370,1284],{"class":50},[40,71372,67779],{"class":94},[40,71374,58545],{"class":596},[40,71376,1284],{"class":50},[40,71378,285],{"class":94},[40,71380,67717],{"class":50},[40,71382,54909],{"class":46},[40,71384,54606],{"class":50},[40,71386,71387,71389,71391,71393,71395,71397,71399,71401,71403,71405,71407,71409,71411,71413,71415,71417],{"class":42,"line":20177},[40,71388,58532],{"class":50},[40,71390,54909],{"class":46},[40,71392,56784],{"class":596},[40,71394,1284],{"class":50},[40,71396,65921],{"class":94},[40,71398,64350],{"class":50},[40,71400,438],{"class":46},[40,71402,58537],{"class":596},[40,71404,1284],{"class":50},[40,71406,67814],{"class":94},[40,71408,58545],{"class":596},[40,71410,1284],{"class":50},[40,71412,285],{"class":94},[40,71414,67717],{"class":50},[40,71416,54909],{"class":46},[40,71418,54606],{"class":50},[40,71420,71421,71423,71425,71427,71429,71431,71433,71435,71437,71439,71441,71443,71445,71447,71449,71451],{"class":42,"line":20191},[40,71422,58532],{"class":50},[40,71424,54909],{"class":46},[40,71426,56784],{"class":596},[40,71428,1284],{"class":50},[40,71430,65921],{"class":94},[40,71432,64350],{"class":50},[40,71434,438],{"class":46},[40,71436,58537],{"class":596},[40,71438,1284],{"class":50},[40,71440,67849],{"class":94},[40,71442,58545],{"class":596},[40,71444,1284],{"class":50},[40,71446,285],{"class":94},[40,71448,67717],{"class":50},[40,71450,54909],{"class":46},[40,71452,54606],{"class":50},[40,71454,71455,71457,71459],{"class":42,"line":20203},[40,71456,55074],{"class":50},[40,71458,54909],{"class":46},[40,71460,54606],{"class":50},[40,71462,71463,71465,71467],{"class":42,"line":20208},[40,71464,55715],{"class":50},[40,71466,54909],{"class":46},[40,71468,54606],{"class":50},[40,71470,71471,71473,71475],{"class":42,"line":20221},[40,71472,55442],{"class":50},[40,71474,55111],{"class":46},[40,71476,54606],{"class":50},[40,71478,71479],{"class":42,"line":20226},[40,71480,71481],{"class":997},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[40,71483,71484],{"class":42,"line":20231},[40,71485,71486],{"class":997},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[40,71488,71489,71491,71493,71495,71497,71499,71501,71504],{"class":42,"line":20236},[40,71490,14543],{"class":1283},[40,71492,64590],{"class":63},[40,71494,16886],{"class":1283},[40,71496,57694],{"class":50},[40,71498,57697],{"class":596},[40,71500,3488],{"class":50},[40,71502,71503],{"class":94},"'.tab-nav ul'",[40,71505,1811],{"class":50},[40,71507,71508],{"class":42,"line":20249},[40,71509,71510],{"class":997},"    \u002F\u002F 2.添加事件\n",[40,71512,71513,71515,71517,71519,71521,71523,71525,71527,71529],{"class":42,"line":20254},[40,71514,70252],{"class":50},[40,71516,61111],{"class":596},[40,71518,3488],{"class":50},[40,71520,61116],{"class":94},[40,71522,15757],{"class":50},[40,71524,57747],{"class":1283},[40,71526,4993],{"class":50},[40,71528,3558],{"class":8539},[40,71530,15764],{"class":50},[40,71532,71533,71535,71537],{"class":42,"line":35933},[40,71534,61542],{"class":50},[40,71536,70308],{"class":596},[40,71538,70311],{"class":50},[40,71540,71541],{"class":42,"line":35939},[40,71542,71543],{"class":997},"      \u002F\u002Fe.targer是我们点击的对象\n",[40,71545,71546,71548,71550,71552,71555],{"class":42,"line":35945},[40,71547,57778],{"class":1283},[40,71549,70332],{"class":50},[40,71551,57784],{"class":1283},[40,71553,71554],{"class":94}," 'A'",[40,71556,15764],{"class":50},[40,71558,71559,71561,71563,71565,71568,71570,71572,71574,71576],{"class":42,"line":35951},[40,71560,55223],{"class":50},[40,71562,57697],{"class":596},[40,71564,3488],{"class":50},[40,71566,71567],{"class":94},"'.active'",[40,71569,60301],{"class":50},[40,71571,60304],{"class":596},[40,71573,3488],{"class":50},[40,71575,68012],{"class":94},[40,71577,1811],{"class":50},[40,71579,71580,71583,71585,71587,71589],{"class":42,"line":35957},[40,71581,71582],{"class":50},"        e.target.classList.",[40,71584,8657],{"class":596},[40,71586,3488],{"class":50},[40,71588,68012],{"class":94},[40,71590,1811],{"class":50},[40,71592,71593],{"class":42,"line":35968},[40,71594,1413],{"emptyLinePlaceholder":1412},[40,71596,71597],{"class":42,"line":35974},[40,71598,71599],{"class":997},"        \u002F\u002F 下面大盒子模块\n",[40,71601,71602],{"class":42,"line":35994},[40,71603,71604],{"class":997},"        \u002F\u002F console.log(e.target.dataset.id)\n",[40,71606,71607,71609,71611,71613,71615],{"class":42,"line":36000},[40,71608,64568],{"class":1283},[40,71610,6356],{"class":63},[40,71612,16886],{"class":1283},[40,71614,48866],{"class":1283},[40,71616,71617],{"class":50},"e.target.dataset.id\n",[40,71619,71620,71622,71624,71626,71628,71630,71632,71634,71636],{"class":42,"line":36011},[40,71621,55223],{"class":50},[40,71623,57697],{"class":596},[40,71625,3488],{"class":50},[40,71627,68060],{"class":94},[40,71629,60301],{"class":50},[40,71631,60304],{"class":596},[40,71633,3488],{"class":50},[40,71635,68012],{"class":94},[40,71637,1811],{"class":50},[40,71639,71640,71642,71644,71646,71648,71650,71652,71654,71656,71658,71660,71662,71664],{"class":42,"line":36017},[40,71641,55223],{"class":50},[40,71643,57697],{"class":596},[40,71645,3488],{"class":50},[40,71647,68086],{"class":94},[40,71649,3920],{"class":50},[40,71651,48866],{"class":1283},[40,71653,28431],{"class":63},[40,71655,60330],{"class":94},[40,71657,60301],{"class":50},[40,71659,8657],{"class":596},[40,71661,3488],{"class":50},[40,71663,68012],{"class":94},[40,71665,1811],{"class":50},[40,71667,71668],{"class":42,"line":36023},[40,71669,1413],{"emptyLinePlaceholder":1412},[40,71671,71672],{"class":42,"line":36029},[40,71673,55696],{"class":50},[40,71675,71676],{"class":42,"line":36035},[40,71677,36761],{"class":50},[40,71679,71680,71682,71684],{"class":42,"line":36041},[40,71681,55715],{"class":50},[40,71683,55111],{"class":46},[40,71685,54606],{"class":50},[40,71687,71688,71690,71692],{"class":42,"line":36047},[40,71689,55083],{"class":50},[40,71691,55098],{"class":46},[40,71693,54606],{"class":50},[40,71695,71696],{"class":42,"line":36053},[40,71697,1413],{"emptyLinePlaceholder":1412},[40,71699,71700,71702,71704],{"class":42,"line":36073},[40,71701,55083],{"class":50},[40,71703,53935],{"class":46},[40,71705,54606],{"class":50},[402,71707,71709],{"id":71708},"_333-页面加载事件","3.3.3 页面加载事件",[492,71711,71712],{},[495,71713,71714],{},"load",[19,71716,71717],{},[438,71718],{"alt":36,"src":71719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,71721,71722],{},"window代表整个窗口，比document还要大",[19,71724,71725],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,71727,71728],{},"img.addEventListener('load', function () {",[19,71730,71731],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,71733,55762],{},[492,71735,71736],{"start":54},[495,71737,71738],{},"DOMContentLoaded",[19,71740,71741],{},[438,71742],{"alt":36,"src":71743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,71745,71746],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[402,71748,71750],{"id":71749},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,71752,71753],{},[438,71754],{"alt":36,"src":71755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,71757,71758],{},[438,71759],{"alt":36,"src":71760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,71762,71763],{},[438,71764],{"alt":36,"src":71765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,71767,71768],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,71770,71771],{},"获得的是数字型数据，不带单位",[19,71773,71774],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,71776,71777],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,71779,71780],{},"它是通过document.documentElement来获取",[19,71782,71783],{},[438,71784],{"alt":36,"src":71785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,71787,71788],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[402,71790,71792],{"id":71791},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,71794,71795],{},[438,71796],{"alt":36,"src":71797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,71799,71800],{},[438,71801],{"alt":36,"src":71802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[402,71804,71806],{"id":71805},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,71808,71809],{},[438,71810],{"alt":36,"src":71811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,71813,71814],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,71816,71817],{},[438,71818],{"alt":36,"src":71819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,71821,71822],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,71824,71825],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,71827,71828],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,71830,71831],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,71833,71834],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,71836,71837],{},[438,71838],{"alt":36,"src":71839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,71841,71842],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,71844,71845],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,71847,71848],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,71850,71851],{},"e.pageX-box.getBoundingClientRect()",[402,71853,71855],{"id":71854},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,71857,71858],{},[438,71859],{"alt":36,"src":71860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,71862,71863],{},"这个是相对于视口来说的，它是个方法，不是属性值",[402,71865,71867],{"id":71866},"_338-总结","3.3.8 总结",[19,71869,71870],{},[438,71871],{"alt":36,"src":71872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,71874,71875],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,71877,71878],{},"修改盒子的宽高只能通过width和height来实现",[402,71880,71882],{"id":71881},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[31,71884,71886],{"className":53933,"code":71885,"language":53935,"meta":36,"style":36},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[26,71887,71888,71893,71898,71903,71908],{"__ignoreMap":36},[40,71889,71890],{"class":42,"line":43},[40,71891,71892],{"class":50},"\u002F* 页面滑动 *\u002F\n",[40,71894,71895],{"class":42,"line":54},[40,71896,71897],{"class":50},"html {\n",[40,71899,71900],{"class":42,"line":70},[40,71901,71902],{"class":50},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[40,71904,71905],{"class":42,"line":78},[40,71906,71907],{"class":50},"  scroll-behavior: smooth;\n",[40,71909,71910],{"class":42,"line":86},[40,71911,4907],{"class":50},[19,71913,71914],{},"默认是auto",[402,71916,71918],{"id":71917},"_3310-日期对象","3.3.10 日期对象",[2423,71920,71922],{"id":71921},"_33101-实例化","3.3.10.1 实例化",[19,71924,71925],{},[438,71926],{"alt":36,"src":71927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[2423,71929,71931],{"id":71930},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,71933,71934],{},[438,71935],{"alt":36,"src":71936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,71938,71939],{},"月份+1",[19,71941,71942],{},"老外认为第一天为0，星期天",[19,71944,71945],{},"方法使用的时候必须要跟括号",[19,71947,71948],{},"快速获得日期",[19,71950,71951],{},"\u002F\u002F 得到年月日",[19,71953,71954],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,71956,71957],{},"\u002F\u002F 得到当地日期",[19,71959,71960],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,71962,71963],{},"\u002F\u002F 得到当地时间",[19,71965,71966],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,71968,71969],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,71971,71972],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[55111,71974,71975],{},"\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,71977,71978],{},"学会去封装函数！",[2423,71980,71982],{"id":71981},"_33103-时间戳","3.3.10.3 时间戳",[19,71984,71985],{},[438,71986],{"alt":36,"src":71987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,71989,71990],{},[438,71991],{"alt":36,"src":71992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,71994,71995],{},"三种方法记住一个就可以",[402,71997,71999],{"id":71998},"_3311-节点操作","3.3.11 节点操作",[2423,72001,72003],{"id":72002},"_33111-dom节点","3.3.11.1 DOM节点",[19,72005,72006],{},[438,72007],{"alt":36,"src":72008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,72010,72011],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[2423,72013,72015],{"id":72014},"_33112-查找节点","3.3.11.2 查找节点",[19,72017,72018],{},"前边的document.querySelector()是获取的元素",[19,72020,72021],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,72023,72024],{},[438,72025],{"alt":36,"src":72026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[492,72028,72029],{},[495,72030,72031],{},"父节点",[19,72033,72034],{},[438,72035],{"alt":36,"src":72036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[492,72038,72039],{"start":54},[495,72040,72041],{},"子节点",[19,72043,72044],{},[438,72045],{"alt":36,"src":72046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,72048,72049],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,72051,72052],{},"children获得的是伪数组，是亲儿子",[492,72054,72055],{"start":70},[495,72056,72057],{},"兄弟节点",[19,72059,72060],{},[438,72061],{"alt":36,"src":72062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[2423,72064,72066],{"id":72065},"_33113-增加节点","3.3.11.3 增加节点",[19,72068,72069],{},[438,72070],{"alt":36,"src":72071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,72073,72074],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,72076,72077],{},[438,72078],{"alt":36,"src":72079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,72081,72082],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,72084,72085],{},"下面是写法的部分展示，就按照下边的格式来写",[19,72087,72088],{},"例：",[55111,72090,72091],{},"\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,72093,72094],{},[438,72095],{"alt":36,"src":72096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,72098,72099],{},"false只克隆标签，里边的内容不会克隆过来",[31,72101,72103],{"className":53933,"code":72102,"language":53935,"meta":36,"style":36},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[26,72104,72105],{"__ignoreMap":36},[40,72106,72107],{"class":42,"line":43},[40,72108,72102],{"class":50},[2423,72110,72112],{"id":72111},"_33114-删除节点","3.3.11.4 删除节点",[19,72114,72115],{},[438,72116],{"alt":36,"src":72117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,72119,72120],{},"父亲删儿子",[19,72122,72123],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[402,72125,72127],{"id":72126},"_3312-m端事件","3.3.12 M端事件",[19,72129,72130],{},"M端就是移动端",[19,72132,72133],{},[438,72134],{"alt":36,"src":72135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[402,72137,72139],{"id":72138},"_3313-插件","3.3.13 插件",[19,72141,72142],{},"要熟悉官网！！！",[19,72144,72145],{},[2106,72146,72147],{"href":72147,"rel":72148},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[2110],[19,72150,72151],{},[2106,72152,72153],{"href":72153,"rel":72154},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[2110],[402,72156,72158],{"id":72157},"_3314-学生信息表","3.3.14 学生信息表",[492,72160,72161,72164,72167,72170,72173,72176,72179,72182],{},[495,72162,72163],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[495,72165,72166],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[495,72168,72169],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[495,72171,72172],{},"用好表单元素自带的属性，value,name等",[495,72174,72175],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[495,72177,72178],{},"不要忘记事件对象",[495,72180,72181],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[495,72183,72184],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,72186,72187],{},"结构：",[31,72189,72191],{"className":53933,"code":72190,"language":53935,"meta":36,"style":36},"\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",[26,72192,72193,72203,72217,72221,72229,72243,72263,72284,72297,72321,72329,72333,72341,72354,72375,72403,72431,72436,72458,72478,72497,72505,72533,72555,72575,72595,72615,72635,72655,72663,72683,72691,72695,72708,72716,72724,72732,72745,72758,72771,72784,72797,72810,72823,72831,72839,72847,72852,72857,72862,72867,72872,72877,72882,72887,72892,72897,72902,72907,72912,72920,72928,72936,72940,72960,72979,72999,73019,73039,73059,73063,73068,73088,73093,73103,73108,73113,73132,73154,73159,73169,73173,73177,73182,73187,73216,73230,73245,73249,73253,73257,73262,73273,73286,73291,73296,73301,73306,73311,73315,73320,73325,73334,73339,73344,73356,73361,73368,73372,73377,73387,73392,73402,73407,73435,73456,73466,73486,73503,73520,73537,73554,73571,73575,73585,73590,73595,73600,73611,73615,73619,73623,73628,73633,73654,73666,73671,73676,73681,73695,73700,73707,73711,73715,73723,73727,73735,73739],{"__ignoreMap":36},[40,72194,72195,72197,72199,72201],{"class":42,"line":43},[40,72196,54597],{"class":50},[40,72198,54600],{"class":46},[40,72200,54603],{"class":596},[40,72202,54606],{"class":50},[40,72204,72205,72207,72209,72211,72213,72215],{"class":42,"line":54},[40,72206,4387],{"class":50},[40,72208,53935],{"class":46},[40,72210,54615],{"class":596},[40,72212,1284],{"class":50},[40,72214,54620],{"class":94},[40,72216,54606],{"class":50},[40,72218,72219],{"class":42,"line":70},[40,72220,1413],{"emptyLinePlaceholder":1412},[40,72222,72223,72225,72227],{"class":42,"line":78},[40,72224,4387],{"class":50},[40,72226,54633],{"class":46},[40,72228,54606],{"class":50},[40,72230,72231,72233,72235,72237,72239,72241],{"class":42,"line":86},[40,72232,55442],{"class":50},[40,72234,54643],{"class":46},[40,72236,54646],{"class":596},[40,72238,1284],{"class":50},[40,72240,54651],{"class":94},[40,72242,62425],{"class":50},[40,72244,72245,72247,72249,72251,72253,72255,72257,72259,72261],{"class":42,"line":100},[40,72246,55442],{"class":50},[40,72248,54643],{"class":46},[40,72250,18242],{"class":596},[40,72252,1284],{"class":50},[40,72254,54690],{"class":94},[40,72256,54670],{"class":596},[40,72258,1284],{"class":50},[40,72260,54697],{"class":94},[40,72262,62425],{"class":50},[40,72264,72265,72267,72269,72271,72273,72275,72277,72279,72282],{"class":42,"line":108},[40,72266,55442],{"class":50},[40,72268,54643],{"class":46},[40,72270,54662],{"class":596},[40,72272,1284],{"class":50},[40,72274,54667],{"class":94},[40,72276,54670],{"class":596},[40,72278,1284],{"class":50},[40,72280,72281],{"class":94},"\"ie=edge\"",[40,72283,62425],{"class":50},[40,72285,72286,72288,72290,72293,72295],{"class":42,"line":121},[40,72287,55442],{"class":50},[40,72289,54706],{"class":46},[40,72291,72292],{"class":50},">学生信息管理\u003C\u002F",[40,72294,54706],{"class":46},[40,72296,54606],{"class":50},[40,72298,72299,72301,72304,72307,72309,72312,72314,72316,72319],{"class":42,"line":134},[40,72300,55442],{"class":50},[40,72302,72303],{"class":46},"link",[40,72305,72306],{"class":596}," rel",[40,72308,1284],{"class":50},[40,72310,72311],{"class":94},"\"stylesheet\"",[40,72313,64355],{"class":596},[40,72315,1284],{"class":50},[40,72317,72318],{"class":94},"\"css\u002Findex.css\"",[40,72320,62425],{"class":50},[40,72322,72323,72325,72327],{"class":42,"line":146},[40,72324,55083],{"class":50},[40,72326,54633],{"class":46},[40,72328,54606],{"class":50},[40,72330,72331],{"class":42,"line":154},[40,72332,1413],{"emptyLinePlaceholder":1412},[40,72334,72335,72337,72339],{"class":42,"line":162},[40,72336,4387],{"class":50},[40,72338,55098],{"class":46},[40,72340,54606],{"class":50},[40,72342,72343,72345,72347,72350,72352],{"class":42,"line":170},[40,72344,55442],{"class":50},[40,72346,10],{"class":46},[40,72348,72349],{"class":50},">新增学员\u003C\u002F",[40,72351,10],{"class":46},[40,72353,54606],{"class":50},[40,72355,72356,72358,72360,72362,72364,72366,72369,72371,72373],{"class":42,"line":183},[40,72357,55442],{"class":50},[40,72359,69923],{"class":46},[40,72361,56784],{"class":596},[40,72363,1284],{"class":50},[40,72365,65962],{"class":94},[40,72367,72368],{"class":596}," autocomplete",[40,72370,1284],{"class":50},[40,72372,35076],{"class":94},[40,72374,54606],{"class":50},[40,72376,72377,72380,72382,72384,72386,72388,72390,72392,72395,72397,72399,72401],{"class":42,"line":196},[40,72378,72379],{"class":50},"    姓名：\u003C",[40,72381,57119],{"class":46},[40,72383,57122],{"class":596},[40,72385,1284],{"class":50},[40,72387,65997],{"class":94},[40,72389,56784],{"class":596},[40,72391,1284],{"class":50},[40,72393,72394],{"class":94},"\"uname\"",[40,72396,18242],{"class":596},[40,72398,1284],{"class":50},[40,72400,72394],{"class":94},[40,72402,62425],{"class":50},[40,72404,72405,72408,72410,72412,72414,72416,72418,72420,72423,72425,72427,72429],{"class":42,"line":204},[40,72406,72407],{"class":50},"    年龄：\u003C",[40,72409,57119],{"class":46},[40,72411,57122],{"class":596},[40,72413,1284],{"class":50},[40,72415,65997],{"class":94},[40,72417,56784],{"class":596},[40,72419,1284],{"class":50},[40,72421,72422],{"class":94},"\"age\"",[40,72424,18242],{"class":596},[40,72426,1284],{"class":50},[40,72428,72422],{"class":94},[40,72430,62425],{"class":50},[40,72432,72433],{"class":42,"line":217},[40,72434,72435],{"class":50},"    性别:\n",[40,72437,72438,72440,72443,72445,72447,72450,72452,72454,72456],{"class":42,"line":230},[40,72439,54640],{"class":50},[40,72441,72442],{"class":46},"select",[40,72444,18242],{"class":596},[40,72446,1284],{"class":50},[40,72448,72449],{"class":94},"\"gender\"",[40,72451,56784],{"class":596},[40,72453,1284],{"class":50},[40,72455,72449],{"class":94},[40,72457,54606],{"class":50},[40,72459,72460,72462,72465,72467,72469,72471,72474,72476],{"class":42,"line":238},[40,72461,58532],{"class":50},[40,72463,72464],{"class":46},"option",[40,72466,69949],{"class":596},[40,72468,1284],{"class":50},[40,72470,13283],{"class":94},[40,72472,72473],{"class":50},">男\u003C\u002F",[40,72475,72464],{"class":46},[40,72477,54606],{"class":50},[40,72479,72480,72482,72484,72486,72488,72490,72493,72495],{"class":42,"line":251},[40,72481,58532],{"class":50},[40,72483,72464],{"class":46},[40,72485,69949],{"class":596},[40,72487,1284],{"class":50},[40,72489,13352],{"class":94},[40,72491,72492],{"class":50},">女\u003C\u002F",[40,72494,72464],{"class":46},[40,72496,54606],{"class":50},[40,72498,72499,72501,72503],{"class":42,"line":264},[40,72500,55074],{"class":50},[40,72502,72442],{"class":46},[40,72504,54606],{"class":50},[40,72506,72507,72510,72512,72514,72516,72518,72520,72522,72525,72527,72529,72531],{"class":42,"line":277},[40,72508,72509],{"class":50},"    薪资：\u003C",[40,72511,57119],{"class":46},[40,72513,57122],{"class":596},[40,72515,1284],{"class":50},[40,72517,65997],{"class":94},[40,72519,56784],{"class":596},[40,72521,1284],{"class":50},[40,72523,72524],{"class":94},"\"salary\"",[40,72526,18242],{"class":596},[40,72528,1284],{"class":50},[40,72530,72524],{"class":94},[40,72532,62425],{"class":50},[40,72534,72535,72538,72540,72542,72544,72547,72549,72551,72553],{"class":42,"line":290},[40,72536,72537],{"class":50},"    就业城市：\u003C",[40,72539,72442],{"class":46},[40,72541,18242],{"class":596},[40,72543,1284],{"class":50},[40,72545,72546],{"class":94},"\"city\"",[40,72548,56784],{"class":596},[40,72550,1284],{"class":50},[40,72552,72546],{"class":94},[40,72554,54606],{"class":50},[40,72556,72557,72559,72561,72563,72565,72568,72571,72573],{"class":42,"line":298},[40,72558,58532],{"class":50},[40,72560,72464],{"class":46},[40,72562,69949],{"class":596},[40,72564,1284],{"class":50},[40,72566,72567],{"class":94},"\"北京\"",[40,72569,72570],{"class":50},">北京\u003C\u002F",[40,72572,72464],{"class":46},[40,72574,54606],{"class":50},[40,72576,72577,72579,72581,72583,72585,72588,72591,72593],{"class":42,"line":310},[40,72578,58532],{"class":50},[40,72580,72464],{"class":46},[40,72582,69949],{"class":596},[40,72584,1284],{"class":50},[40,72586,72587],{"class":94},"\"上海\"",[40,72589,72590],{"class":50},">上海\u003C\u002F",[40,72592,72464],{"class":46},[40,72594,54606],{"class":50},[40,72596,72597,72599,72601,72603,72605,72608,72611,72613],{"class":42,"line":5086},[40,72598,58532],{"class":50},[40,72600,72464],{"class":46},[40,72602,69949],{"class":596},[40,72604,1284],{"class":50},[40,72606,72607],{"class":94},"\"广州\"",[40,72609,72610],{"class":50},">广州\u003C\u002F",[40,72612,72464],{"class":46},[40,72614,54606],{"class":50},[40,72616,72617,72619,72621,72623,72625,72628,72631,72633],{"class":42,"line":5091},[40,72618,58532],{"class":50},[40,72620,72464],{"class":46},[40,72622,69949],{"class":596},[40,72624,1284],{"class":50},[40,72626,72627],{"class":94},"\"深圳\"",[40,72629,72630],{"class":50},">深圳\u003C\u002F",[40,72632,72464],{"class":46},[40,72634,54606],{"class":50},[40,72636,72637,72639,72641,72643,72645,72648,72651,72653],{"class":42,"line":5105},[40,72638,58532],{"class":50},[40,72640,72464],{"class":46},[40,72642,69949],{"class":596},[40,72644,1284],{"class":50},[40,72646,72647],{"class":94},"\"曹县\"",[40,72649,72650],{"class":50},">曹县\u003C\u002F",[40,72652,72464],{"class":46},[40,72654,54606],{"class":50},[40,72656,72657,72659,72661],{"class":42,"line":5110},[40,72658,55074],{"class":50},[40,72660,72442],{"class":46},[40,72662,54606],{"class":50},[40,72664,72665,72667,72669,72671,72673,72676,72679,72681],{"class":42,"line":5902},[40,72666,54640],{"class":50},[40,72668,57185],{"class":46},[40,72670,56784],{"class":596},[40,72672,1284],{"class":50},[40,72674,72675],{"class":94},"\"add\"",[40,72677,72678],{"class":50},">录入\u003C\u002F",[40,72680,57185],{"class":46},[40,72682,54606],{"class":50},[40,72684,72685,72687,72689],{"class":42,"line":5916},[40,72686,55715],{"class":50},[40,72688,69923],{"class":46},[40,72690,54606],{"class":50},[40,72692,72693],{"class":42,"line":5924},[40,72694,1413],{"emptyLinePlaceholder":1412},[40,72696,72697,72699,72701,72704,72706],{"class":42,"line":5929},[40,72698,55442],{"class":50},[40,72700,10],{"class":46},[40,72702,72703],{"class":50},">就业榜\u003C\u002F",[40,72705,10],{"class":46},[40,72707,54606],{"class":50},[40,72709,72710,72712,72714],{"class":42,"line":5935},[40,72711,55442],{"class":50},[40,72713,3619],{"class":46},[40,72715,54606],{"class":50},[40,72717,72718,72720,72722],{"class":42,"line":5941},[40,72719,54640],{"class":50},[40,72721,3622],{"class":46},[40,72723,54606],{"class":50},[40,72725,72726,72728,72730],{"class":42,"line":5946},[40,72727,58532],{"class":50},[40,72729,3625],{"class":46},[40,72731,54606],{"class":50},[40,72733,72734,72736,72738,72741,72743],{"class":42,"line":11270},[40,72735,58600],{"class":50},[40,72737,3628],{"class":46},[40,72739,72740],{"class":50},">序号\u003C\u002F",[40,72742,3628],{"class":46},[40,72744,54606],{"class":50},[40,72746,72747,72749,72751,72754,72756],{"class":42,"line":11294},[40,72748,58600],{"class":50},[40,72750,3628],{"class":46},[40,72752,72753],{"class":50},">姓名\u003C\u002F",[40,72755,3628],{"class":46},[40,72757,54606],{"class":50},[40,72759,72760,72762,72764,72767,72769],{"class":42,"line":11299},[40,72761,58600],{"class":50},[40,72763,3628],{"class":46},[40,72765,72766],{"class":50},">年龄\u003C\u002F",[40,72768,3628],{"class":46},[40,72770,54606],{"class":50},[40,72772,72773,72775,72777,72780,72782],{"class":42,"line":11305},[40,72774,58600],{"class":50},[40,72776,3628],{"class":46},[40,72778,72779],{"class":50},">性别\u003C\u002F",[40,72781,3628],{"class":46},[40,72783,54606],{"class":50},[40,72785,72786,72788,72790,72793,72795],{"class":42,"line":11332},[40,72787,58600],{"class":50},[40,72789,3628],{"class":46},[40,72791,72792],{"class":50},">薪资\u003C\u002F",[40,72794,3628],{"class":46},[40,72796,54606],{"class":50},[40,72798,72799,72801,72803,72806,72808],{"class":42,"line":11337},[40,72800,58600],{"class":50},[40,72802,3628],{"class":46},[40,72804,72805],{"class":50},">就业城市\u003C\u002F",[40,72807,3628],{"class":46},[40,72809,54606],{"class":50},[40,72811,72812,72814,72816,72819,72821],{"class":42,"line":11343},[40,72813,58600],{"class":50},[40,72815,3628],{"class":46},[40,72817,72818],{"class":50},">操作\u003C\u002F",[40,72820,3628],{"class":46},[40,72822,54606],{"class":50},[40,72824,72825,72827,72829],{"class":42,"line":11355},[40,72826,58705],{"class":50},[40,72828,3625],{"class":46},[40,72830,54606],{"class":50},[40,72832,72833,72835,72837],{"class":42,"line":11367},[40,72834,55074],{"class":50},[40,72836,3622],{"class":46},[40,72838,54606],{"class":50},[40,72840,72841,72843,72845],{"class":42,"line":11379},[40,72842,54640],{"class":50},[40,72844,3665],{"class":46},[40,72846,54606],{"class":50},[40,72848,72849],{"class":42,"line":13038},[40,72850,72851],{"class":997},"      \u003C!-- \n",[40,72853,72854],{"class":42,"line":13063},[40,72855,72856],{"class":997},"        \u003Ctr>\n",[40,72858,72859],{"class":42,"line":13086},[40,72860,72861],{"class":997},"          \u003Ctd>1001\u003C\u002Ftd>\n",[40,72863,72864],{"class":42,"line":13110},[40,72865,72866],{"class":997},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[40,72868,72869],{"class":42,"line":13115},[40,72870,72871],{"class":997},"          \u003Ctd>19\u003C\u002Ftd>\n",[40,72873,72874],{"class":42,"line":13120},[40,72875,72876],{"class":997},"          \u003Ctd>男\u003C\u002Ftd>\n",[40,72878,72879],{"class":42,"line":13125},[40,72880,72881],{"class":997},"          \u003Ctd>15000\u003C\u002Ftd>\n",[40,72883,72884],{"class":42,"line":13134},[40,72885,72886],{"class":997},"          \u003Ctd>上海\u003C\u002Ftd>\n",[40,72888,72889],{"class":42,"line":13139},[40,72890,72891],{"class":997},"          \u003Ctd>\n",[40,72893,72894],{"class":42,"line":13145},[40,72895,72896],{"class":997},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[40,72898,72899],{"class":42,"line":13166},[40,72900,72901],{"class":997},"          \u003C\u002Ftd>\n",[40,72903,72904],{"class":42,"line":13172},[40,72905,72906],{"class":997},"        \u003C\u002Ftr> \n",[40,72908,72909],{"class":42,"line":13186},[40,72910,72911],{"class":997},"        -->\n",[40,72913,72914,72916,72918],{"class":42,"line":13192},[40,72915,55074],{"class":50},[40,72917,3665],{"class":46},[40,72919,54606],{"class":50},[40,72921,72922,72924,72926],{"class":42,"line":13219},[40,72923,55715],{"class":50},[40,72925,3619],{"class":46},[40,72927,54606],{"class":50},[40,72929,72930,72932,72934],{"class":42,"line":13228},[40,72931,55442],{"class":50},[40,72933,55111],{"class":46},[40,72935,54606],{"class":50},[40,72937,72938],{"class":42,"line":13234},[40,72939,63256],{"class":997},[40,72941,72942,72944,72947,72949,72951,72953,72955,72958],{"class":42,"line":13242},[40,72943,14543],{"class":1283},[40,72945,72946],{"class":63}," uname",[40,72948,16886],{"class":1283},[40,72950,57694],{"class":50},[40,72952,57697],{"class":596},[40,72954,3488],{"class":50},[40,72956,72957],{"class":94},"'.uname'",[40,72959,1811],{"class":50},[40,72961,72962,72964,72966,72968,72970,72972,72974,72977],{"class":42,"line":13247},[40,72963,14543],{"class":1283},[40,72965,19011],{"class":63},[40,72967,16886],{"class":1283},[40,72969,57694],{"class":50},[40,72971,57697],{"class":596},[40,72973,3488],{"class":50},[40,72975,72976],{"class":94},"'.age'",[40,72978,1811],{"class":50},[40,72980,72981,72983,72986,72988,72990,72992,72994,72997],{"class":42,"line":19926},[40,72982,14543],{"class":1283},[40,72984,72985],{"class":63}," gender",[40,72987,16886],{"class":1283},[40,72989,57694],{"class":50},[40,72991,57697],{"class":596},[40,72993,3488],{"class":50},[40,72995,72996],{"class":94},"'.gender'",[40,72998,1811],{"class":50},[40,73000,73001,73003,73006,73008,73010,73012,73014,73017],{"class":42,"line":19932},[40,73002,14543],{"class":1283},[40,73004,73005],{"class":63}," salary",[40,73007,16886],{"class":1283},[40,73009,57694],{"class":50},[40,73011,57697],{"class":596},[40,73013,3488],{"class":50},[40,73015,73016],{"class":94},"'.salary'",[40,73018,1811],{"class":50},[40,73020,73021,73023,73026,73028,73030,73032,73034,73037],{"class":42,"line":19955},[40,73022,14543],{"class":1283},[40,73024,73025],{"class":63}," city",[40,73027,16886],{"class":1283},[40,73029,57694],{"class":50},[40,73031,57697],{"class":596},[40,73033,3488],{"class":50},[40,73035,73036],{"class":94},"'.city'",[40,73038,1811],{"class":50},[40,73040,73041,73043,73046,73048,73050,73052,73054,73057],{"class":42,"line":19961},[40,73042,14543],{"class":1283},[40,73044,73045],{"class":63}," tbody",[40,73047,16886],{"class":1283},[40,73049,57694],{"class":50},[40,73051,57697],{"class":596},[40,73053,3488],{"class":50},[40,73055,73056],{"class":94},"'tbody'",[40,73058,1811],{"class":50},[40,73060,73061],{"class":42,"line":19984},[40,73062,1413],{"emptyLinePlaceholder":1412},[40,73064,73065],{"class":42,"line":19998},[40,73066,73067],{"class":997},"    \u002F\u002F 获取所有带有name属性的元素\n",[40,73069,73070,73072,73075,73077,73079,73081,73083,73086],{"class":42,"line":20018},[40,73071,14543],{"class":1283},[40,73073,73074],{"class":63}," items",[40,73076,16886],{"class":1283},[40,73078,57694],{"class":50},[40,73080,58979],{"class":596},[40,73082,3488],{"class":50},[40,73084,73085],{"class":94},"'[name]'",[40,73087,1811],{"class":50},[40,73089,73090],{"class":42,"line":20024},[40,73091,73092],{"class":997},"    \u002F\u002F 声明一个空的数组\n",[40,73094,73095,73097,73099,73101],{"class":42,"line":20035},[40,73096,14543],{"class":1283},[40,73098,60993],{"class":63},[40,73100,16886],{"class":1283},[40,73102,55136],{"class":50},[40,73104,73105],{"class":42,"line":20058},[40,73106,73107],{"class":997},"    \u002F\u002F 1.录入模块\n",[40,73109,73110],{"class":42,"line":20080},[40,73111,73112],{"class":997},"    \u002F\u002F 1.1这是一个表单提交事件\n",[40,73114,73115,73117,73119,73121,73123,73125,73127,73130],{"class":42,"line":20085},[40,73116,14543],{"class":1283},[40,73118,1531],{"class":63},[40,73120,16886],{"class":1283},[40,73122,57694],{"class":50},[40,73124,57697],{"class":596},[40,73126,3488],{"class":50},[40,73128,73129],{"class":94},"'.info'",[40,73131,1811],{"class":50},[40,73133,73134,73137,73139,73141,73144,73146,73148,73150,73152],{"class":42,"line":20091},[40,73135,73136],{"class":50},"    info.",[40,73138,61111],{"class":596},[40,73140,3488],{"class":50},[40,73142,73143],{"class":94},"'submit'",[40,73145,15757],{"class":50},[40,73147,57747],{"class":1283},[40,73149,4993],{"class":50},[40,73151,3558],{"class":8539},[40,73153,15764],{"class":50},[40,73155,73156],{"class":42,"line":20105},[40,73157,73158],{"class":997},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[40,73160,73161,73164,73167],{"class":42,"line":20118},[40,73162,73163],{"class":50},"      e.",[40,73165,73166],{"class":596},"preventDefault",[40,73168,5302],{"class":50},[40,73170,73171],{"class":42,"line":20123},[40,73172,63310],{"class":997},[40,73174,73175],{"class":42,"line":20137},[40,73176,1413],{"emptyLinePlaceholder":1412},[40,73178,73179],{"class":42,"line":20142},[40,73180,73181],{"class":997},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[40,73183,73184],{"class":42,"line":20148},[40,73185,73186],{"class":997},"      \u002F\u002F 先遍历循环\n",[40,73188,73189,73191,73193,73195,73197,73199,73201,73203,73205,73208,73210,73212,73214],{"class":42,"line":20153},[40,73190,55582],{"class":1283},[40,73192,4993],{"class":50},[40,73194,55145],{"class":1283},[40,73196,12760],{"class":50},[40,73198,1284],{"class":1283},[40,73200,7416],{"class":63},[40,73202,12767],{"class":50},[40,73204,4387],{"class":1283},[40,73206,73207],{"class":50}," items.",[40,73209,55266],{"class":63},[40,73211,6538],{"class":50},[40,73213,5618],{"class":1283},[40,73215,15764],{"class":50},[40,73217,73218,73220,73223,73225,73228],{"class":42,"line":20167},[40,73219,5822],{"class":1283},[40,73221,73222],{"class":50}," (items[i].value ",[40,73224,57784],{"class":1283},[40,73226,73227],{"class":94}," ''",[40,73229,15764],{"class":50},[40,73231,73232,73235,73238,73240,73243],{"class":42,"line":20172},[40,73233,73234],{"class":1283},"          return",[40,73236,73237],{"class":596}," alert",[40,73239,3488],{"class":50},[40,73241,73242],{"class":94},"'输入内容不能为空'",[40,73244,1811],{"class":50},[40,73246,73247],{"class":42,"line":20177},[40,73248,5854],{"class":50},[40,73250,73251],{"class":42,"line":20191},[40,73252,55696],{"class":50},[40,73254,73255],{"class":42,"line":20203},[40,73256,1413],{"emptyLinePlaceholder":1412},[40,73258,73259],{"class":42,"line":20208},[40,73260,73261],{"class":997},"      \u002F\u002F 创建新的对象\n",[40,73263,73264,73266,73269,73271],{"class":42,"line":20221},[40,73265,61526],{"class":1283},[40,73267,73268],{"class":63}," obj",[40,73270,16886],{"class":1283},[40,73272,18894],{"class":50},[40,73274,73275,73278,73280,73282,73284],{"class":42,"line":20226},[40,73276,73277],{"class":50},"        stuID: arr.",[40,73279,55266],{"class":63},[40,73281,48866],{"class":1283},[40,73283,28431],{"class":63},[40,73285,34766],{"class":50},[40,73287,73288],{"class":42,"line":20231},[40,73289,73290],{"class":50},"        uname: uname.value,\n",[40,73292,73293],{"class":42,"line":20236},[40,73294,73295],{"class":50},"        age: age.value,\n",[40,73297,73298],{"class":42,"line":20249},[40,73299,73300],{"class":50},"        gender: gender.value,\n",[40,73302,73303],{"class":42,"line":20254},[40,73304,73305],{"class":50},"        salary: salary.value,\n",[40,73307,73308],{"class":42,"line":35933},[40,73309,73310],{"class":50},"        city: city.value\n",[40,73312,73313],{"class":42,"line":35939},[40,73314,55696],{"class":50},[40,73316,73317],{"class":42,"line":35945},[40,73318,73319],{"class":997},"      \u002F\u002F console.log(obj);\n",[40,73321,73322],{"class":42,"line":35951},[40,73323,73324],{"class":997},"      \u002F\u002F 追加到数组里面\n",[40,73326,73327,73329,73331],{"class":42,"line":35957},[40,73328,61305],{"class":50},[40,73330,55182],{"class":596},[40,73332,73333],{"class":50},"(obj)\n",[40,73335,73336],{"class":42,"line":35968},[40,73337,73338],{"class":997},"      \u002F\u002F console.log(arr);\n",[40,73340,73341],{"class":42,"line":35974},[40,73342,73343],{"class":997},"      \u002F\u002F 清空表单  reset重置表单\n",[40,73345,73346,73349,73351,73354],{"class":42,"line":35994},[40,73347,73348],{"class":63},"      this",[40,73350,4037],{"class":50},[40,73352,73353],{"class":596},"reset",[40,73355,5302],{"class":50},[40,73357,73358],{"class":42,"line":36000},[40,73359,73360],{"class":997},"      \u002F\u002F 调用渲染函数\n",[40,73362,73363,73366],{"class":42,"line":36011},[40,73364,73365],{"class":596},"      render",[40,73367,5302],{"class":50},[40,73369,73370],{"class":42,"line":36017},[40,73371,36761],{"class":50},[40,73373,73374],{"class":42,"line":36023},[40,73375,73376],{"class":997},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[40,73378,73379,73382,73385],{"class":42,"line":36029},[40,73380,73381],{"class":1283},"    function",[40,73383,73384],{"class":596}," render",[40,73386,14175],{"class":50},[40,73388,73389],{"class":42,"line":36035},[40,73390,73391],{"class":997},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[40,73393,73394,73397,73399],{"class":42,"line":36041},[40,73395,73396],{"class":50},"      tbody.innerHTML ",[40,73398,1284],{"class":1283},[40,73400,73401],{"class":94}," ''\n",[40,73403,73404],{"class":42,"line":36047},[40,73405,73406],{"class":997},"      \u002F\u002F 遍历数组\n",[40,73408,73409,73411,73413,73415,73417,73419,73421,73423,73425,73427,73429,73431,73433],{"class":42,"line":36053},[40,73410,55582],{"class":1283},[40,73412,4993],{"class":50},[40,73414,55145],{"class":1283},[40,73416,12760],{"class":50},[40,73418,1284],{"class":1283},[40,73420,7416],{"class":63},[40,73422,12767],{"class":50},[40,73424,4387],{"class":1283},[40,73426,55263],{"class":50},[40,73428,55266],{"class":63},[40,73430,6538],{"class":50},[40,73432,5618],{"class":1283},[40,73434,15764],{"class":50},[40,73436,73437,73439,73442,73444,73446,73449,73451,73454],{"class":42,"line":36073},[40,73438,64568],{"class":1283},[40,73440,73441],{"class":63}," tr",[40,73443,16886],{"class":1283},[40,73445,57694],{"class":50},[40,73447,73448],{"class":596},"createElement",[40,73450,3488],{"class":50},[40,73452,73453],{"class":94},"'tr'",[40,73455,1811],{"class":50},[40,73457,73458,73461,73463],{"class":42,"line":36079},[40,73459,73460],{"class":50},"        tr.innerHTML ",[40,73462,1284],{"class":1283},[40,73464,73465],{"class":94}," `\n",[40,73467,73468,73471,73473,73475,73477,73480,73483],{"class":42,"line":36095},[40,73469,73470],{"class":94},"        \u003Ctd>${",[40,73472,7203],{"class":50},[40,73474,4367],{"class":94},[40,73476,3920],{"class":50},[40,73478,73479],{"class":94},"].",[40,73481,73482],{"class":50},"stuID",[40,73484,73485],{"class":94},"}\u003C\u002Ftd>\n",[40,73487,73488,73491,73493,73495,73497,73499,73501],{"class":42,"line":36101},[40,73489,73490],{"class":94},"          \u003Ctd>${",[40,73492,7203],{"class":50},[40,73494,4367],{"class":94},[40,73496,3920],{"class":50},[40,73498,73479],{"class":94},[40,73500,2671],{"class":50},[40,73502,73485],{"class":94},[40,73504,73505,73507,73509,73511,73513,73515,73518],{"class":42,"line":36115},[40,73506,73490],{"class":94},[40,73508,7203],{"class":50},[40,73510,4367],{"class":94},[40,73512,3920],{"class":50},[40,73514,73479],{"class":94},[40,73516,73517],{"class":50},"age",[40,73519,73485],{"class":94},[40,73521,73522,73524,73526,73528,73530,73532,73535],{"class":42,"line":36121},[40,73523,73490],{"class":94},[40,73525,7203],{"class":50},[40,73527,4367],{"class":94},[40,73529,3920],{"class":50},[40,73531,73479],{"class":94},[40,73533,73534],{"class":50},"gender",[40,73536,73485],{"class":94},[40,73538,73539,73541,73543,73545,73547,73549,73552],{"class":42,"line":36136},[40,73540,73490],{"class":94},[40,73542,7203],{"class":50},[40,73544,4367],{"class":94},[40,73546,3920],{"class":50},[40,73548,73479],{"class":94},[40,73550,73551],{"class":50},"salary",[40,73553,73485],{"class":94},[40,73555,73556,73558,73560,73562,73564,73566,73569],{"class":42,"line":36142},[40,73557,73490],{"class":94},[40,73559,7203],{"class":50},[40,73561,4367],{"class":94},[40,73563,3920],{"class":50},[40,73565,73479],{"class":94},[40,73567,73568],{"class":50},"city",[40,73570,73485],{"class":94},[40,73572,73573],{"class":42,"line":36151},[40,73574,72891],{"class":94},[40,73576,73577,73580,73582],{"class":42,"line":36157},[40,73578,73579],{"class":94},"            \u003Ca href=\"javascript:\" data-id=${",[40,73581,3920],{"class":50},[40,73583,73584],{"class":94},"}>删除\u003C\u002Fa>\n",[40,73586,73587],{"class":42,"line":36166},[40,73588,73589],{"class":94},"          \u003C\u002Ftd> \n",[40,73591,73592],{"class":42,"line":36172},[40,73593,73594],{"class":94},"          `\n",[40,73596,73597],{"class":42,"line":36178},[40,73598,73599],{"class":997},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[40,73601,73602,73605,73608],{"class":42,"line":36187},[40,73603,73604],{"class":50},"        tbody.",[40,73606,73607],{"class":596},"appendChild",[40,73609,73610],{"class":50},"(tr)\n",[40,73612,73613],{"class":42,"line":36193},[40,73614,55696],{"class":50},[40,73616,73617],{"class":42,"line":36204},[40,73618,5513],{"class":50},[40,73620,73621],{"class":42,"line":36210},[40,73622,1413],{"emptyLinePlaceholder":1412},[40,73624,73625],{"class":42,"line":36229},[40,73626,73627],{"class":997},"    \u002F\u002F 3.删除委托\n",[40,73629,73630],{"class":42,"line":36235},[40,73631,73632],{"class":997},"    \u002F\u002F 3.1 事件委托 tbody\n",[40,73634,73635,73638,73640,73642,73644,73646,73648,73650,73652],{"class":42,"line":36246},[40,73636,73637],{"class":50},"    tbody.",[40,73639,61111],{"class":596},[40,73641,3488],{"class":50},[40,73643,61116],{"class":94},[40,73645,15757],{"class":50},[40,73647,57747],{"class":1283},[40,73649,4993],{"class":50},[40,73651,3558],{"class":8539},[40,73653,15764],{"class":50},[40,73655,73656,73658,73660,73662,73664],{"class":42,"line":36252},[40,73657,57778],{"class":1283},[40,73659,70332],{"class":50},[40,73661,57784],{"class":1283},[40,73663,71554],{"class":94},[40,73665,15764],{"class":50},[40,73667,73668],{"class":42,"line":36272},[40,73669,73670],{"class":997},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[40,73672,73673],{"class":42,"line":36288},[40,73674,73675],{"class":997},"        \u002F\u002F console.log(e.target.dataset.id);\n",[40,73677,73678],{"class":42,"line":36294},[40,73679,73680],{"class":997},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[40,73682,73683,73686,73688,73691,73693],{"class":42,"line":36308},[40,73684,73685],{"class":50},"        arr.",[40,73687,61308],{"class":596},[40,73689,73690],{"class":50},"(e.target.dataset.id, ",[40,73692,3698],{"class":63},[40,73694,1811],{"class":50},[40,73696,73697],{"class":42,"line":36314},[40,73698,73699],{"class":997},"        \u002F\u002F 重新渲染一次\n",[40,73701,73702,73705],{"class":42,"line":36320},[40,73703,73704],{"class":596},"        render",[40,73706,5302],{"class":50},[40,73708,73709],{"class":42,"line":36331},[40,73710,55696],{"class":50},[40,73712,73713],{"class":42,"line":36337},[40,73714,36761],{"class":50},[40,73716,73717,73719,73721],{"class":42,"line":36343},[40,73718,55715],{"class":50},[40,73720,55111],{"class":46},[40,73722,54606],{"class":50},[40,73724,73725],{"class":42,"line":36353},[40,73726,1413],{"emptyLinePlaceholder":1412},[40,73728,73729,73731,73733],{"class":42,"line":36359},[40,73730,55083],{"class":50},[40,73732,55098],{"class":46},[40,73734,54606],{"class":50},[40,73736,73737],{"class":42,"line":36370},[40,73738,1413],{"emptyLinePlaceholder":1412},[40,73740,73741,73743,73745],{"class":42,"line":36376},[40,73742,55083],{"class":50},[40,73744,53935],{"class":46},[40,73746,54606],{"class":50},[19,73748,73749],{},"样式：",[31,73751,73755],{"className":73752,"code":73753,"language":73754,"meta":36,"style":36},"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",[26,73756,73757,73762,73772,73781,73785,73789,73794,73804,73809,73813,73818,73828,73833,73842,73846,73850,73855,73860,73870,73880,73885,73889,73894,73903,73913,73918,73928,73938,73942,73947,73955,73959,73964,73969,73974,73982,73991,73995,74000,74009,74013,74018,74027,74031,74036,74045,74054,74062,74066,74071,74080,74090,74099,74109,74115,74124,74134,74144,74148,74153,74162,74170,74180,74188,74197,74206,74216,74224,74228,74233,74242],{"__ignoreMap":36},[40,73758,73759],{"class":42,"line":43},[40,73760,73761],{"class":50},"* {\n",[40,73763,73764,73767,73769],{"class":42,"line":54},[40,73765,73766],{"class":46},"  margin",[40,73768,60],{"class":50},[40,73770,73771],{"class":94},"0;\n",[40,73773,73774,73777,73779],{"class":42,"line":70},[40,73775,73776],{"class":94},"  padding",[40,73778,60],{"class":50},[40,73780,73771],{"class":94},[40,73782,73783],{"class":42,"line":78},[40,73784,4907],{"class":50},[40,73786,73787],{"class":42,"line":86},[40,73788,1413],{"emptyLinePlaceholder":1412},[40,73790,73791],{"class":42,"line":100},[40,73792,73793],{"class":94},"a {\n",[40,73795,73796,73799,73801],{"class":42,"line":108},[40,73797,73798],{"class":46},"  text-decoration",[40,73800,60],{"class":50},[40,73802,73803],{"class":94},"none;\n",[40,73805,73806],{"class":42,"line":121},[40,73807,73808],{"class":94},"  color:#721c24;\n",[40,73810,73811],{"class":42,"line":134},[40,73812,4907],{"class":50},[40,73814,73815],{"class":42,"line":146},[40,73816,73817],{"class":94},"h1 {\n",[40,73819,73820,73823,73825],{"class":42,"line":154},[40,73821,73822],{"class":46},"  text-align",[40,73824,60],{"class":50},[40,73826,73827],{"class":94},"center;\n",[40,73829,73830],{"class":42,"line":162},[40,73831,73832],{"class":94},"  color:#333;\n",[40,73834,73835,73837,73839],{"class":42,"line":170},[40,73836,73766],{"class":46},[40,73838,60],{"class":50},[40,73840,73841],{"class":94},"20px 0;\n",[40,73843,73844],{"class":42,"line":183},[40,73845,67],{"class":50},[40,73847,73848],{"class":42,"line":196},[40,73849,4907],{"class":50},[40,73851,73852],{"class":42,"line":204},[40,73853,73854],{"class":94},"table {\n",[40,73856,73857],{"class":42,"line":217},[40,73858,73859],{"class":94},"  margin:0 auto;\n",[40,73861,73862,73865,73867],{"class":42,"line":230},[40,73863,73864],{"class":46},"  width",[40,73866,60],{"class":50},[40,73868,73869],{"class":94},"800px;\n",[40,73871,73872,73875,73877],{"class":42,"line":238},[40,73873,73874],{"class":46},"  border-collapse",[40,73876,60],{"class":50},[40,73878,73879],{"class":94},"collapse;\n",[40,73881,73882],{"class":42,"line":251},[40,73883,73884],{"class":94},"  color:#004085;\n",[40,73886,73887],{"class":42,"line":264},[40,73888,4907],{"class":50},[40,73890,73891],{"class":42,"line":277},[40,73892,73893],{"class":94},"th {\n",[40,73895,73896,73898,73900],{"class":42,"line":290},[40,73897,73776],{"class":46},[40,73899,60],{"class":50},[40,73901,73902],{"class":94},"10px;\n",[40,73904,73905,73908,73910],{"class":42,"line":298},[40,73906,73907],{"class":46},"  background",[40,73909,60],{"class":50},[40,73911,73912],{"class":997},"#cfe5ff;\n",[40,73914,73915],{"class":42,"line":310},[40,73916,73917],{"class":50},"  \n",[40,73919,73920,73923,73925],{"class":42,"line":5086},[40,73921,73922],{"class":46},"  font-size",[40,73924,60],{"class":50},[40,73926,73927],{"class":94},"20px;\n",[40,73929,73930,73933,73935],{"class":42,"line":5091},[40,73931,73932],{"class":46},"  font-weight",[40,73934,60],{"class":50},[40,73936,73937],{"class":94},"400;\n",[40,73939,73940],{"class":42,"line":5105},[40,73941,4907],{"class":50},[40,73943,73944],{"class":42,"line":5110},[40,73945,73946],{"class":94},"td,th {\n",[40,73948,73949,73952],{"class":42,"line":5902},[40,73950,73951],{"class":94},"  border:1px solid",[40,73953,73954],{"class":997}," #b8daff;\n",[40,73956,73957],{"class":42,"line":5916},[40,73958,4907],{"class":50},[40,73960,73961],{"class":42,"line":5924},[40,73962,73963],{"class":94},"td {\n",[40,73965,73966],{"class":42,"line":5929},[40,73967,73968],{"class":94},"  padding:10px;\n",[40,73970,73971],{"class":42,"line":5935},[40,73972,73973],{"class":94},"  color:#666;\n",[40,73975,73976,73978,73980],{"class":42,"line":5941},[40,73977,73822],{"class":46},[40,73979,60],{"class":50},[40,73981,73827],{"class":94},[40,73983,73984,73986,73988],{"class":42,"line":5946},[40,73985,73922],{"class":46},[40,73987,60],{"class":50},[40,73989,73990],{"class":94},"16px;\n",[40,73992,73993],{"class":42,"line":11270},[40,73994,4907],{"class":50},[40,73996,73997],{"class":42,"line":11294},[40,73998,73999],{"class":94},"tbody tr {\n",[40,74001,74002,74004,74006],{"class":42,"line":11299},[40,74003,73907],{"class":46},[40,74005,60],{"class":50},[40,74007,74008],{"class":997},"#fff;\n",[40,74010,74011],{"class":42,"line":11305},[40,74012,4907],{"class":50},[40,74014,74015],{"class":42,"line":11332},[40,74016,74017],{"class":94},"tbody tr:hover {\n",[40,74019,74020,74022,74024],{"class":42,"line":11337},[40,74021,73907],{"class":46},[40,74023,60],{"class":50},[40,74025,74026],{"class":997},"#e1ecf8;\n",[40,74028,74029],{"class":42,"line":11343},[40,74030,4907],{"class":50},[40,74032,74033],{"class":42,"line":11355},[40,74034,74035],{"class":94},".info {\n",[40,74037,74038,74040,74042],{"class":42,"line":11367},[40,74039,73864],{"class":46},[40,74041,60],{"class":50},[40,74043,74044],{"class":94},"900px;\n",[40,74046,74047,74049,74051],{"class":42,"line":11379},[40,74048,73766],{"class":46},[40,74050,60],{"class":50},[40,74052,74053],{"class":94},"50px auto;\n",[40,74055,74056,74058,74060],{"class":42,"line":13038},[40,74057,73822],{"class":46},[40,74059,60],{"class":50},[40,74061,73827],{"class":94},[40,74063,74064],{"class":42,"line":13063},[40,74065,4907],{"class":50},[40,74067,74068],{"class":42,"line":13086},[40,74069,74070],{"class":94},".info  input, .info select {\n",[40,74072,74073,74075,74077],{"class":42,"line":13110},[40,74074,73864],{"class":46},[40,74076,60],{"class":50},[40,74078,74079],{"class":94},"80px;\n",[40,74081,74082,74085,74087],{"class":42,"line":13115},[40,74083,74084],{"class":46},"  height",[40,74086,60],{"class":50},[40,74088,74089],{"class":94},"27px;\n",[40,74091,74092,74095,74097],{"class":42,"line":13120},[40,74093,74094],{"class":46},"  outline",[40,74096,60],{"class":50},[40,74098,73803],{"class":94},[40,74100,74101,74104,74106],{"class":42,"line":13125},[40,74102,74103],{"class":46},"  border-radius",[40,74105,60],{"class":50},[40,74107,74108],{"class":94},"5px;\n",[40,74110,74111,74113],{"class":42,"line":13134},[40,74112,73951],{"class":94},[40,74114,73954],{"class":997},[40,74116,74117,74120,74122],{"class":42,"line":13139},[40,74118,74119],{"class":46},"  padding-left",[40,74121,60],{"class":50},[40,74123,74108],{"class":94},[40,74125,74126,74129,74131],{"class":42,"line":13145},[40,74127,74128],{"class":46},"  box-sizing",[40,74130,60],{"class":50},[40,74132,74133],{"class":94},"border-box;\n",[40,74135,74136,74139,74141],{"class":42,"line":13166},[40,74137,74138],{"class":46},"  margin-right",[40,74140,60],{"class":50},[40,74142,74143],{"class":94},"15px;\n",[40,74145,74146],{"class":42,"line":13172},[40,74147,4907],{"class":50},[40,74149,74150],{"class":42,"line":13186},[40,74151,74152],{"class":94},".info button {\n",[40,74154,74155,74157,74159],{"class":42,"line":13192},[40,74156,73864],{"class":46},[40,74158,60],{"class":50},[40,74160,74161],{"class":94},"60px;\n",[40,74163,74164,74166,74168],{"class":42,"line":13219},[40,74165,74084],{"class":46},[40,74167,60],{"class":50},[40,74169,74089],{"class":94},[40,74171,74172,74175,74177],{"class":42,"line":13228},[40,74173,74174],{"class":46},"  background-color",[40,74176,60],{"class":50},[40,74178,74179],{"class":997},"#004085;\n",[40,74181,74182,74184,74186],{"class":42,"line":13234},[40,74183,74094],{"class":46},[40,74185,60],{"class":50},[40,74187,73803],{"class":94},[40,74189,74190,74193,74195],{"class":42,"line":13242},[40,74191,74192],{"class":46},"  border",[40,74194,60],{"class":50},[40,74196,73771],{"class":94},[40,74198,74199,74202,74204],{"class":42,"line":13247},[40,74200,74201],{"class":46},"  color",[40,74203,60],{"class":50},[40,74205,74008],{"class":997},[40,74207,74208,74211,74213],{"class":42,"line":19926},[40,74209,74210],{"class":46},"  cursor",[40,74212,60],{"class":50},[40,74214,74215],{"class":94},"pointer;\n",[40,74217,74218,74220,74222],{"class":42,"line":19932},[40,74219,74103],{"class":46},[40,74221,60],{"class":50},[40,74223,74108],{"class":94},[40,74225,74226],{"class":42,"line":19955},[40,74227,4907],{"class":50},[40,74229,74230],{"class":42,"line":19961},[40,74231,74232],{"class":94},".info .age {\n",[40,74234,74235,74237,74239],{"class":42,"line":19984},[40,74236,73864],{"class":46},[40,74238,60],{"class":50},[40,74240,74241],{"class":94},"50px;\n",[40,74243,74244],{"class":42,"line":19998},[40,74245,4907],{"class":50},[19,74247,74248],{},"思路：",[19,74250,74251],{},[438,74252],{"alt":36,"src":74253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,74255,74256],{},[438,74257],{"alt":36,"src":74258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,74260,74261],{},[438,74262],{"alt":36,"src":74263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[402,74265,74267],{"id":74266},"_3315-重绘回流","3.3.15 重绘回流",[19,74269,74270],{},[438,74271],{"alt":36,"src":74272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,74274,74275],{},[438,74276],{"alt":36,"src":74277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,74279,74280],{},[438,74281],{"alt":36,"src":74282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,74284,74286],{"id":74285},"_34-bom","3.4 BOM",[19,74288,74289],{},[438,74290],{"alt":36,"src":74291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,74293,74294],{},"平时写的document省略了window而已，实际上是window.document",[19,74296,74297],{},"函数也是这样，调用的时候实际为window.fn()",[19,74299,74300],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,74302,74303],{},"window大部分情况下可以省略",[402,74305,74307],{"id":74306},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,74309,74310],{},"只执行一次",[19,74312,74313],{},[438,74314],{"alt":36,"src":74315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,74317,74318],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,74320,74321],{},[438,74322],{"alt":36,"src":74323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[402,74325,74327],{"id":74326},"_342-js执行机制","3.4.2 JS执行机制",[19,74329,74330],{},[438,74331],{"alt":36,"src":74332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,74334,74335],{},"两个的结果都是1111 3333 2222",[19,74337,74338],{},[438,74339],{"alt":36,"src":74340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,74342,74343],{},[438,74344],{"alt":36,"src":74345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,74347,74348],{},[438,74349],{"alt":36,"src":74350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,74352,74353],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,74355,74356],{},"工作流程：",[19,74358,74359],{},[438,74360],{"alt":36,"src":74361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,74363,74364],{},[438,74365],{"alt":36,"src":74366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,74368,74369],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,74371,74372],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[402,74374,74376],{"id":74375},"_343-location对象","3.4.3 location对象",[19,74378,74379],{},"location对象属于window这个全局对象下的，可以 省略window",[19,74381,74382],{},[438,74383],{"alt":36,"src":74384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,74386,74387],{},"href可以跳转页面",[492,74389,74390],{},[495,74391,74392],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,74394,74395],{},"search得到提交信息之后网站后边的地址",[19,74397,74398],{},[438,74399],{"alt":36,"src":74400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,74402,74403],{},[438,74404],{"alt":36,"src":74405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[492,74407,74408],{"start":54},[495,74409,74410],{},"hash:这个获取单页面应用#后边的地址",[19,74412,74413],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,74415,74416],{},[438,74417],{"alt":36,"src":74418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[31,74420,74422],{"className":56365,"code":74421,"language":56367,"meta":36,"style":36},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[26,74423,74424,74444,74464],{"__ignoreMap":36},[40,74425,74426,74428,74430,74432,74434,74437,74440,74442],{"class":42,"line":43},[40,74427,55442],{"class":50},[40,74429,2106],{"class":46},[40,74431,64355],{"class":596},[40,74433,1284],{"class":50},[40,74435,74436],{"class":94},"\"#\u002Fmy\"",[40,74438,74439],{"class":50},">我的\u003C\u002F",[40,74441,2106],{"class":46},[40,74443,54606],{"class":50},[40,74445,74446,74448,74450,74452,74454,74457,74460,74462],{"class":42,"line":54},[40,74447,55442],{"class":50},[40,74449,2106],{"class":46},[40,74451,64355],{"class":596},[40,74453,1284],{"class":50},[40,74455,74456],{"class":94},"\"#\u002Ffriend\"",[40,74458,74459],{"class":50},">关注\u003C\u002F",[40,74461,2106],{"class":46},[40,74463,54606],{"class":50},[40,74465,74466,74468,74470,74472,74474,74477,74480,74482],{"class":42,"line":70},[40,74467,55442],{"class":50},[40,74469,2106],{"class":46},[40,74471,64355],{"class":596},[40,74473,1284],{"class":50},[40,74475,74476],{"class":94},"\"#\u002Fdownload\"",[40,74478,74479],{"class":50},">下载\u003C\u002F",[40,74481,2106],{"class":46},[40,74483,54606],{"class":50},[19,74485,74486],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[492,74488,74489],{"start":70},[495,74490,74491,74492,74494,74495,74497],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[57014,74493],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[57014,74496],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[402,74499,74501],{"id":74500},"_345-navigator对象","3.4.5 navigator对象",[19,74503,74504],{},[438,74505],{"alt":36,"src":74506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[31,74508,74512],{"className":74509,"code":74510,"language":74511,"meta":36,"style":36},"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",[26,74513,74514,74519,74530,74542,74547,74598,74639,74644,74657,74669,74674],{"__ignoreMap":36},[40,74515,74516],{"class":42,"line":43},[40,74517,74518],{"class":997},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[40,74520,74521,74523,74525,74527],{"class":42,"line":54},[40,74522,3707],{"class":1283},[40,74524,3488],{"class":50},[40,74526,57747],{"class":1283},[40,74528,74529],{"class":50}," () { \n",[40,74531,74532,74534,74537,74539],{"class":42,"line":70},[40,74533,10115],{"class":1283},[40,74535,74536],{"class":63}," userAgent",[40,74538,16886],{"class":1283},[40,74540,74541],{"class":50}," navigator.userAgent \n",[40,74543,74544],{"class":42,"line":78},[40,74545,74546],{"class":997},"\u002F\u002F 验证是否为Android或iPhone \n",[40,74548,74549,74551,74554,74556,74559,74562,74564,74566,74569,74571,74574,74578,74580,74582,74584,74587,74589,74591,74593,74595],{"class":42,"line":86},[40,74550,10115],{"class":1283},[40,74552,74553],{"class":63}," android",[40,74555,16886],{"class":1283},[40,74557,74558],{"class":50}," userAgent.",[40,74560,74561],{"class":596},"match",[40,74563,3488],{"class":50},[40,74565,4063],{"class":94},[40,74567,74568],{"class":51277},"(Android);",[40,74570,4463],{"class":1283},[40,74572,74573],{"class":63},"[\\s",[40,74575,74577],{"class":74576},"snhLl","\\\u002F",[40,74579,4417],{"class":63},[40,74581,3960],{"class":1283},[40,74583,3488],{"class":51277},[40,74585,74586],{"class":63},"[\\d.]",[40,74588,3960],{"class":1283},[40,74590,3908],{"class":51277},[40,74592,4463],{"class":1283},[40,74594,4063],{"class":94},[40,74596,74597],{"class":50},") \n",[40,74599,74600,74602,74605,74607,74609,74611,74613,74615,74618,74621,74624,74626,74628,74631,74633,74635,74637],{"class":42,"line":100},[40,74601,10115],{"class":1283},[40,74603,74604],{"class":63}," iphone",[40,74606,16886],{"class":1283},[40,74608,74558],{"class":50},[40,74610,74561],{"class":596},[40,74612,3488],{"class":50},[40,74614,4063],{"class":94},[40,74616,74617],{"class":51277},"(iPhone",[40,74619,74620],{"class":63},"\\s",[40,74622,74623],{"class":51277},"OS)",[40,74625,74620],{"class":63},[40,74627,3488],{"class":51277},[40,74629,74630],{"class":63},"[\\d_]",[40,74632,3960],{"class":1283},[40,74634,3908],{"class":51277},[40,74636,4063],{"class":94},[40,74638,74597],{"class":50},[40,74640,74641],{"class":42,"line":108},[40,74642,74643],{"class":997},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[40,74645,74646,74648,74651,74654],{"class":42,"line":121},[40,74647,4873],{"class":1283},[40,74649,74650],{"class":50}," (android ",[40,74652,74653],{"class":1283},"||",[40,74655,74656],{"class":50}," iphone) { \n",[40,74658,74659,74662,74664,74667],{"class":42,"line":134},[40,74660,74661],{"class":50},"location.href ",[40,74663,1284],{"class":1283},[40,74665,74666],{"class":94}," 'http:\u002F\u002Fm.itcast.cn'",[40,74668,67],{"class":50},[40,74670,74671],{"class":42,"line":146},[40,74672,74673],{"class":50},"} \n",[40,74675,74676],{"class":42,"line":154},[40,74677,74678],{"class":50},"})()\n",[402,74680,74682],{"id":74681},"_346-histroy对象","3.4.6 histroy对象",[19,74684,74685],{},[438,74686],{"alt":36,"src":74687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,74689,74690],{},"浏览器地址的前进与后退!!!",[19,74692,74693],{},"history.back() 等效于 history.go(-1)",[19,74695,74696],{},"history.forward() 等效于 history.go(1)",[14,74698,74700],{"id":74699},"_35-本地存储","3.5 本地存储",[492,74702,74703,74706,74709],{},[495,74704,74705],{},"数据存储在用户浏览器中",[495,74707,74708],{},"设置、读取方便、甚至页面刷新不丢失数据",[495,74710,74711],{},"容量较大，sessionStorage和localStorage约 5M 左右",[402,74713,74715],{"id":74714},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,74717,74718],{},"只能存储字符串",[19,74720,74721],{},[438,74722],{"alt":36,"src":74723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,74725,74726],{},[438,74727],{"alt":36,"src":74728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,74730,74731],{},"键值对要加引号,不然就会当变量来看了",[19,74733,74734],{},"localStorage.setItem('uname', 'pink')",[19,74736,74737],{},"刷新之后信息不再丢失",[19,74739,74740],{},"操作key,value会跟着变",[19,74742,74743],{},"删除只删除键就可以,即名字",[19,74745,74734],{},[19,74747,74748],{},"改:",[19,74750,74751],{},"localStorage.setItem('uname','red')",[19,74753,74754],{},"有这个键就是改,没有这个键就是改",[19,74756,74757],{},[438,74758],{"alt":36,"src":74759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,74761,74762],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,74764,74765],{},[438,74766],{"alt":36,"src":74767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,74769,74770],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[402,74772,74774],{"id":74773},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,74776,74777],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,74779,74780],{},"特性:",[492,74782,74783,74786,74789,74792],{},[495,74784,74785],{},"生命周期为关闭浏览器窗口",[495,74787,74788],{},"在同一个窗口(页面)下数据可以共享",[495,74790,74791],{},"以键值对的形式存储使用",[495,74793,74794],{},"用法跟localStorage 基本相同",[402,74796,74798],{"id":74797},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,74800,74801],{},"本地只能存储字符串,无法直接存储复杂数据类型",[31,74803,74805],{"className":56365,"code":74804,"language":56367,"meta":36,"style":36},"\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",[26,74806,74807,74815,74820,74825,74830,74835,74839,74844,74849],{"__ignoreMap":36},[40,74808,74809,74811,74813],{"class":42,"line":43},[40,74810,4387],{"class":50},[40,74812,55111],{"class":46},[40,74814,54606],{"class":50},[40,74816,74817],{"class":42,"line":54},[40,74818,74819],{"class":50},"    const obj = {\n",[40,74821,74822],{"class":42,"line":70},[40,74823,74824],{"class":50},"      uname: 'pink老师',\n",[40,74826,74827],{"class":42,"line":78},[40,74828,74829],{"class":50},"      age: 18,\n",[40,74831,74832],{"class":42,"line":86},[40,74833,74834],{"class":50},"      gender: '女'\n",[40,74836,74837],{"class":42,"line":100},[40,74838,5513],{"class":50},[40,74840,74841],{"class":42,"line":108},[40,74842,74843],{"class":50},"    \u002F\u002F 存储复杂数据类型\n",[40,74845,74846],{"class":42,"line":121},[40,74847,74848],{"class":50},"    localStorage.setItem('obj', obj)\n",[40,74850,74851,74853,74855],{"class":42,"line":134},[40,74852,55715],{"class":50},[40,74854,55111],{"class":46},[40,74856,54606],{"class":50},[19,74858,74859],{},[438,74860],{"alt":36,"src":74861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,74863,74864],{},"如果获取一下数据:",[19,74866,74867],{},"log(localStorage.getItem('obj'))",[19,74869,74870],{},[438,74871],{"alt":36,"src":74872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,74874,74875],{},"发现直接存对象是使用不了的!!!",[2423,74877,74879],{"id":74878},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,74881,74882],{},[438,74883],{"alt":36,"src":74884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[31,74886,74888],{"className":53933,"code":74887,"language":53935,"meta":36,"style":36},"\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",[26,74889,74890,74898,74908,74918,74927,74935,74939,74943,74968,74987,74995,74999,75004,75009],{"__ignoreMap":36},[40,74891,74892,74894,74896],{"class":42,"line":43},[40,74893,4387],{"class":50},[40,74895,55111],{"class":46},[40,74897,54606],{"class":50},[40,74899,74900,74902,74904,74906],{"class":42,"line":54},[40,74901,14543],{"class":1283},[40,74903,73268],{"class":63},[40,74905,16886],{"class":1283},[40,74907,18894],{"class":50},[40,74909,74910,74913,74916],{"class":42,"line":70},[40,74911,74912],{"class":50},"      uname: ",[40,74914,74915],{"class":94},"'pink老师'",[40,74917,34766],{"class":50},[40,74919,74920,74923,74925],{"class":42,"line":78},[40,74921,74922],{"class":50},"      age: ",[40,74924,4128],{"class":63},[40,74926,34766],{"class":50},[40,74928,74929,74932],{"class":42,"line":86},[40,74930,74931],{"class":50},"      gender: ",[40,74933,74934],{"class":94},"'女'\n",[40,74936,74937],{"class":42,"line":100},[40,74938,5513],{"class":50},[40,74940,74941],{"class":42,"line":108},[40,74942,74843],{"class":997},[40,74944,74945,74948,74951,74953,74956,74958,74960,74962,74965],{"class":42,"line":121},[40,74946,74947],{"class":50},"  localStorage.",[40,74949,74950],{"class":596},"setItem",[40,74952,3488],{"class":50},[40,74954,74955],{"class":94},"'obj'",[40,74957,15757],{"class":50},[40,74959,2382],{"class":63},[40,74961,4037],{"class":50},[40,74963,74964],{"class":596},"stringify",[40,74966,74967],{"class":50},"(obj))\n",[40,74969,74970,74973,74975,74978,74981,74983,74985],{"class":42,"line":134},[40,74971,74972],{"class":50},"  console.",[40,74974,61545],{"class":596},[40,74976,74977],{"class":50},"(localStorage.",[40,74979,74980],{"class":596},"getItem",[40,74982,3488],{"class":50},[40,74984,74955],{"class":94},[40,74986,33797],{"class":50},[40,74988,74989,74991,74993],{"class":42,"line":146},[40,74990,55715],{"class":50},[40,74992,55111],{"class":46},[40,74994,54606],{"class":50},[40,74996,74997],{"class":42,"line":154},[40,74998,73917],{"class":50},[40,75000,75001],{"class":42,"line":162},[40,75002,75003],{"class":50},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[40,75005,75006],{"class":42,"line":170},[40,75007,75008],{"class":50},"  类型是字符串的\n",[40,75010,75011],{"class":42,"line":183},[40,75012,75013],{"class":50},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[2423,75015,75017],{"id":75016},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,75019,75020],{},[438,75021],{"alt":36,"src":75022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,75024,75025],{},[438,75026],{"alt":36,"src":75027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[31,75029,75031],{"className":56365,"code":75030,"language":56367,"meta":36,"style":36},"  \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",[26,75032,75033,75041,75045,75049,75053,75057,75061,75066,75071,75076,75081,75086,75091,75096,75101],{"__ignoreMap":36},[40,75034,75035,75037,75039],{"class":42,"line":43},[40,75036,55442],{"class":50},[40,75038,55111],{"class":46},[40,75040,54606],{"class":50},[40,75042,75043],{"class":42,"line":54},[40,75044,74819],{"class":50},[40,75046,75047],{"class":42,"line":70},[40,75048,74824],{"class":50},[40,75050,75051],{"class":42,"line":78},[40,75052,74829],{"class":50},[40,75054,75055],{"class":42,"line":86},[40,75056,74834],{"class":50},[40,75058,75059],{"class":42,"line":100},[40,75060,5513],{"class":50},[40,75062,75063],{"class":42,"line":108},[40,75064,75065],{"class":50},"    \u002F\u002F 1.存储复杂数据类型\n",[40,75067,75068],{"class":42,"line":121},[40,75069,75070],{"class":50},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[40,75072,75073],{"class":42,"line":134},[40,75074,75075],{"class":50},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[40,75077,75078],{"class":42,"line":146},[40,75079,75080],{"class":50},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[40,75082,75083],{"class":42,"line":154},[40,75084,75085],{"class":50},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[40,75087,75088],{"class":42,"line":162},[40,75089,75090],{"class":50},"    \u002F\u002F 取\n",[40,75092,75093],{"class":42,"line":170},[40,75094,75095],{"class":50},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[40,75097,75098],{"class":42,"line":183},[40,75099,75100],{"class":50},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[40,75102,75103,75105,75107],{"class":42,"line":196},[40,75104,55715],{"class":50},[40,75106,55111],{"class":46},[40,75108,54606],{"class":50},[19,75110,75111],{},[438,75112],{"alt":36,"src":75113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[402,75115,75117],{"id":75116},"_356-数组map方法","3.5.6 数组map方法",[19,75119,75120],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,75122,75123],{},[438,75124],{"alt":36,"src":75125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,75127,75128],{},[438,75129],{"alt":36,"src":75130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,75132,75133,75136],{},[409,75134,75135],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,75138,75139],{},"map有返回值，但是forEach没有返回值",[19,75141,75142],{},"map是个方法。用的时候要加 ()",[19,75144,75145],{},"map返回的是一个数组",[402,75147,75149],{"id":75148},"_357-数组中join方法","3.5.7 数组中join方法",[19,75151,75152],{},[438,75153],{"alt":36,"src":75154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,75156,75157],{},"类似于python中拼接字符串一样！",[492,75159,75160,75163,75166],{},[495,75161,75162],{},"小括号为空则逗号分开",[495,75164,75165],{},"小括号为空字符串 ''，则元素之间没有分隔符",[495,75167,75168],{},"小括号用啥符号就用进行分割",[402,75170,75172],{"id":75171},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[492,75174,75175,75178,75181,75184,75187],{},[495,75176,75177],{},"记住本地时间获取快速方式：new Date().toDateString()",[495,75179,75180],{},"尽量减少DOM操作，用好map+join的渲染方式",[495,75182,75183],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[495,75185,75186],{},"return可以实现函数的结束",[495,75188,75189],{},"禁止跳转是 preventDefault() 不要忘记",[31,75191,75193],{"className":53933,"code":75192,"language":53935,"meta":36,"style":36},"\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",[26,75194,75195,75205,75219,75223,75231,75245,75265,75277,75285,75291,75301,75311,75315,75319,75325,75335,75347,75351,75355,75362,75374,75388,75398,75402,75406,75413,75420,75427,75439,75451,75461,75473,75477,75481,75488,75495,75507,75519,75529,75541,75571,75575,75579,75586,75598,75610,75634,75644,75654,75658,75662,75670,75681,75693,75705,75717,75734,75746,75758,75762,75766,75773,75785,75797,75809,75820,75838,75851,75863,75887,75898,75902,75906,75914,75924,75928,75932,75938,75950,75961,75971,75975,75979,75985,76007,76011,76015,76021,76027,76039,76049,76061,76091,76104,76121,76125,76129,76140,76162,76172,76176,76180,76193,76203,76215,76227,76239,76251,76261,76271,76281,76292,76305,76309,76317,76325,76329,76337,76350,76370,76403,76436,76469,76495,76513,76531,76539,76565,76583,76601,76619,76637,76655,76663,76671,76689,76697,76726,76734,76742,76750,76763,76775,76787,76799,76811,76823,76836,76848,76856,76864,76872,76877,76882,76886,76890,76894,76898,76902,76906,76911,76916,76921,76926,76934,76942,76950,76955,76960,76965,76970,76975,76980,76985,76990,76995,77000,77005,77010,77015,77020,77024,77029,77034,77044,77053,77057,77062,77071,77087,77129,77169,77208,77273,77281,77285,77290,77308,77316,77321,77326,77356,77362,77367,77380,77392,77404,77416,77428,77440,77452,77456,77466,77470,77475,77480,77484,77493,77497,77502,77507,77526,77531,77551,77555,77560,77564,77569,77587,77605,77623,77642,77661,77680,77685,77691,77712,77718,77727,77733,77739,77745,77772,77785,77790,77800,77806,77812,77818,77824,77829,77835,77841,77847,77853,77886,77891,77896,77901,77906,77912,77918,77924,77935,77940,77946,77953,77967,77973,77997,78002,78007,78013,78019,78040,78046,78059,78065,78071,78077,78083,78088,78094,78100,78106,78124,78138,78144,78152,78158,78180,78185,78190,78195,78200,78205,78214,78223,78228],{"__ignoreMap":36},[40,75196,75197,75199,75201,75203],{"class":42,"line":43},[40,75198,54597],{"class":50},[40,75200,54600],{"class":46},[40,75202,54603],{"class":596},[40,75204,54606],{"class":50},[40,75206,75207,75209,75211,75213,75215,75217],{"class":42,"line":54},[40,75208,4387],{"class":50},[40,75210,53935],{"class":46},[40,75212,54615],{"class":596},[40,75214,1284],{"class":50},[40,75216,54620],{"class":94},[40,75218,54606],{"class":50},[40,75220,75221],{"class":42,"line":70},[40,75222,1413],{"emptyLinePlaceholder":1412},[40,75224,75225,75227,75229],{"class":42,"line":78},[40,75226,4387],{"class":50},[40,75228,54633],{"class":46},[40,75230,54606],{"class":50},[40,75232,75233,75235,75237,75239,75241,75243],{"class":42,"line":86},[40,75234,55442],{"class":50},[40,75236,54643],{"class":46},[40,75238,54646],{"class":596},[40,75240,1284],{"class":50},[40,75242,54651],{"class":94},[40,75244,54606],{"class":50},[40,75246,75247,75249,75251,75253,75255,75257,75259,75261,75263],{"class":42,"line":100},[40,75248,55442],{"class":50},[40,75250,54643],{"class":46},[40,75252,18242],{"class":596},[40,75254,1284],{"class":50},[40,75256,54690],{"class":94},[40,75258,54670],{"class":596},[40,75260,1284],{"class":50},[40,75262,54697],{"class":94},[40,75264,54606],{"class":50},[40,75266,75267,75269,75271,75273,75275],{"class":42,"line":108},[40,75268,55442],{"class":50},[40,75270,54706],{"class":46},[40,75272,54709],{"class":50},[40,75274,54706],{"class":46},[40,75276,54606],{"class":50},[40,75278,75279,75281,75283],{"class":42,"line":121},[40,75280,55442],{"class":50},[40,75282,3384],{"class":46},[40,75284,54606],{"class":50},[40,75286,75287,75289],{"class":42,"line":134},[40,75288,9726],{"class":46},[40,75290,18894],{"class":50},[40,75292,75293,75295,75297,75299],{"class":42,"line":146},[40,75294,57993],{"class":63},[40,75296,60],{"class":50},[40,75298,3672],{"class":63},[40,75300,4637],{"class":50},[40,75302,75303,75305,75307,75309],{"class":42,"line":154},[40,75304,58004],{"class":63},[40,75306,60],{"class":50},[40,75308,3672],{"class":63},[40,75310,4637],{"class":50},[40,75312,75313],{"class":42,"line":162},[40,75314,5513],{"class":50},[40,75316,75317],{"class":42,"line":170},[40,75318,1413],{"emptyLinePlaceholder":1412},[40,75320,75321,75323],{"class":42,"line":183},[40,75322,60577],{"class":46},[40,75324,18894],{"class":50},[40,75326,75327,75329,75331,75333],{"class":42,"line":196},[40,75328,60584],{"class":63},[40,75330,60],{"class":50},[40,75332,54890],{"class":63},[40,75334,4637],{"class":50},[40,75336,75337,75339,75341,75343,75345],{"class":42,"line":204},[40,75338,65375],{"class":63},[40,75340,60],{"class":50},[40,75342,4178],{"class":63},[40,75344,54790],{"class":1283},[40,75346,4637],{"class":50},[40,75348,75349],{"class":42,"line":217},[40,75350,5513],{"class":50},[40,75352,75353],{"class":42,"line":230},[40,75354,1413],{"emptyLinePlaceholder":1412},[40,75356,75357,75360],{"class":42,"line":238},[40,75358,75359],{"class":596},"    .info",[40,75361,18894],{"class":50},[40,75363,75364,75366,75368,75370,75372],{"class":42,"line":251},[40,75365,58069],{"class":63},[40,75367,60],{"class":50},[40,75369,54787],{"class":63},[40,75371,54790],{"class":1283},[40,75373,4637],{"class":50},[40,75375,75376,75378,75380,75382,75384,75386],{"class":42,"line":264},[40,75377,58004],{"class":63},[40,75379,60],{"class":50},[40,75381,3925],{"class":63},[40,75383,54790],{"class":1283},[40,75385,54854],{"class":63},[40,75387,4637],{"class":50},[40,75389,75390,75392,75394,75396],{"class":42,"line":277},[40,75391,60584],{"class":63},[40,75393,60],{"class":50},[40,75395,54890],{"class":63},[40,75397,4637],{"class":50},[40,75399,75400],{"class":42,"line":290},[40,75401,5513],{"class":50},[40,75403,75404],{"class":42,"line":298},[40,75405,1413],{"emptyLinePlaceholder":1412},[40,75407,75408,75411],{"class":42,"line":310},[40,75409,75410],{"class":596},"    .uname",[40,75412,34766],{"class":50},[40,75414,75415,75418],{"class":42,"line":5086},[40,75416,75417],{"class":596},"    .age",[40,75419,34766],{"class":50},[40,75421,75422,75425],{"class":42,"line":5091},[40,75423,75424],{"class":596},"    .salary",[40,75426,18894],{"class":50},[40,75428,75429,75431,75433,75435,75437],{"class":42,"line":5105},[40,75430,58069],{"class":63},[40,75432,60],{"class":50},[40,75434,3791],{"class":63},[40,75436,54790],{"class":1283},[40,75438,4637],{"class":50},[40,75440,75441,75443,75445,75447,75449],{"class":42,"line":5110},[40,75442,58083],{"class":63},[40,75444,60],{"class":50},[40,75446,4178],{"class":63},[40,75448,54790],{"class":1283},[40,75450,4637],{"class":50},[40,75452,75453,75455,75457,75459],{"class":42,"line":5902},[40,75454,65078],{"class":63},[40,75456,60],{"class":50},[40,75458,58035],{"class":63},[40,75460,4637],{"class":50},[40,75462,75463,75465,75467,75469,75471],{"class":42,"line":5916},[40,75464,65048],{"class":63},[40,75466,60],{"class":50},[40,75468,4054],{"class":63},[40,75470,54790],{"class":1283},[40,75472,4637],{"class":50},[40,75474,75475],{"class":42,"line":5924},[40,75476,5513],{"class":50},[40,75478,75479],{"class":42,"line":5929},[40,75480,1413],{"emptyLinePlaceholder":1412},[40,75482,75483,75486],{"class":42,"line":5935},[40,75484,75485],{"class":596},"    .gender",[40,75487,34766],{"class":50},[40,75489,75490,75493],{"class":42,"line":5941},[40,75491,75492],{"class":596},"    .city",[40,75494,18894],{"class":50},[40,75496,75497,75499,75501,75503,75505],{"class":42,"line":5946},[40,75498,58069],{"class":63},[40,75500,60],{"class":50},[40,75502,3791],{"class":63},[40,75504,54790],{"class":1283},[40,75506,4637],{"class":50},[40,75508,75509,75511,75513,75515,75517],{"class":42,"line":11270},[40,75510,58083],{"class":63},[40,75512,60],{"class":50},[40,75514,4302],{"class":63},[40,75516,54790],{"class":1283},[40,75518,4637],{"class":50},[40,75520,75521,75523,75525,75527],{"class":42,"line":11294},[40,75522,65078],{"class":63},[40,75524,60],{"class":50},[40,75526,58035],{"class":63},[40,75528,4637],{"class":50},[40,75530,75531,75533,75535,75537,75539],{"class":42,"line":11299},[40,75532,65048],{"class":63},[40,75534,60],{"class":50},[40,75536,4054],{"class":63},[40,75538,54790],{"class":1283},[40,75540,4637],{"class":50},[40,75542,75543,75545,75547,75549,75551,75553,75556,75558,75560,75562,75565,75567,75569],{"class":42,"line":11305},[40,75544,65275],{"class":63},[40,75546,60],{"class":50},[40,75548,3698],{"class":63},[40,75550,54790],{"class":1283},[40,75552,54819],{"class":63},[40,75554,75555],{"class":63}," rgb",[40,75557,3488],{"class":50},[40,75559,5053],{"class":63},[40,75561,15757],{"class":50},[40,75563,75564],{"class":63},"197",[40,75566,15757],{"class":50},[40,75568,75564],{"class":63},[40,75570,6043],{"class":50},[40,75572,75573],{"class":42,"line":11332},[40,75574,5513],{"class":50},[40,75576,75577],{"class":42,"line":11337},[40,75578,1413],{"emptyLinePlaceholder":1412},[40,75580,75581,75584],{"class":42,"line":11343},[40,75582,75583],{"class":46},"    button",[40,75585,18894],{"class":50},[40,75587,75588,75590,75592,75594,75596],{"class":42,"line":11355},[40,75589,58083],{"class":63},[40,75591,60],{"class":50},[40,75593,4302],{"class":63},[40,75595,54790],{"class":1283},[40,75597,4637],{"class":50},[40,75599,75600,75602,75604,75606,75608],{"class":42,"line":11367},[40,75601,58069],{"class":63},[40,75603,60],{"class":50},[40,75605,3963],{"class":63},[40,75607,54790],{"class":1283},[40,75609,4637],{"class":50},[40,75611,75612,75614,75616,75619,75621,75623,75625,75628,75630,75632],{"class":42,"line":11379},[40,75613,58182],{"class":63},[40,75615,60],{"class":50},[40,75617,75618],{"class":63},"rgb",[40,75620,3488],{"class":50},[40,75622,4446],{"class":63},[40,75624,15757],{"class":50},[40,75626,75627],{"class":63},"187",[40,75629,15757],{"class":50},[40,75631,3779],{"class":63},[40,75633,6043],{"class":50},[40,75635,75636,75638,75640,75642],{"class":42,"line":13038},[40,75637,60714],{"class":63},[40,75639,60],{"class":50},[40,75641,64140],{"class":63},[40,75643,4637],{"class":50},[40,75645,75646,75648,75650,75652],{"class":42,"line":13063},[40,75647,65275],{"class":63},[40,75649,60],{"class":50},[40,75651,3672],{"class":63},[40,75653,4637],{"class":50},[40,75655,75656],{"class":42,"line":13086},[40,75657,5513],{"class":50},[40,75659,75660],{"class":42,"line":13110},[40,75661,1413],{"emptyLinePlaceholder":1412},[40,75663,75664,75666,75668],{"class":42,"line":13115},[40,75665,75583],{"class":46},[40,75667,54986],{"class":46},[40,75669,18894],{"class":50},[40,75671,75672,75674,75676,75679],{"class":42,"line":13120},[40,75673,58307],{"class":63},[40,75675,60],{"class":50},[40,75677,75678],{"class":63},"inline-block",[40,75680,4637],{"class":50},[40,75682,75683,75685,75687,75689,75691],{"class":42,"line":13125},[40,75684,58069],{"class":63},[40,75686,60],{"class":50},[40,75688,3925],{"class":63},[40,75690,54790],{"class":1283},[40,75692,4637],{"class":50},[40,75694,75695,75697,75699,75701,75703],{"class":42,"line":13134},[40,75696,58083],{"class":63},[40,75698,60],{"class":50},[40,75700,3925],{"class":63},[40,75702,54790],{"class":1283},[40,75704,4637],{"class":50},[40,75706,75707,75709,75711,75713,75715],{"class":42,"line":13139},[40,75708,60657],{"class":63},[40,75710,60],{"class":50},[40,75712,3951],{"class":63},[40,75714,54790],{"class":1283},[40,75716,4637],{"class":50},[40,75718,75719,75721,75723,75725,75727,75729,75732],{"class":42,"line":13145},[40,75720,65275],{"class":63},[40,75722,60],{"class":50},[40,75724,3698],{"class":63},[40,75726,54790],{"class":1283},[40,75728,54819],{"class":63},[40,75730,75731],{"class":63}," #fff",[40,75733,4637],{"class":50},[40,75735,75736,75738,75740,75742,75744],{"class":42,"line":13166},[40,75737,58432],{"class":63},[40,75739,60],{"class":50},[40,75741,3799],{"class":63},[40,75743,54790],{"class":1283},[40,75745,4637],{"class":50},[40,75747,75748,75750,75752,75754,75756],{"class":42,"line":13172},[40,75749,65048],{"class":63},[40,75751,60],{"class":50},[40,75753,3698],{"class":63},[40,75755,54790],{"class":1283},[40,75757,4637],{"class":50},[40,75759,75760],{"class":42,"line":13186},[40,75761,5513],{"class":50},[40,75763,75764],{"class":42,"line":13192},[40,75765,1413],{"emptyLinePlaceholder":1412},[40,75767,75768,75771],{"class":42,"line":13219},[40,75769,75770],{"class":596},"    .total",[40,75772,18894],{"class":50},[40,75774,75775,75777,75779,75781,75783],{"class":42,"line":13228},[40,75776,58069],{"class":63},[40,75778,60],{"class":50},[40,75780,64927],{"class":63},[40,75782,54790],{"class":1283},[40,75784,4637],{"class":50},[40,75786,75787,75789,75791,75793,75795],{"class":42,"line":13234},[40,75788,58083],{"class":63},[40,75790,60],{"class":50},[40,75792,3880],{"class":63},[40,75794,54790],{"class":1283},[40,75796,4637],{"class":50},[40,75798,75799,75801,75803,75805,75807],{"class":42,"line":13242},[40,75800,60657],{"class":63},[40,75802,60],{"class":50},[40,75804,3880],{"class":63},[40,75806,54790],{"class":1283},[40,75808,4637],{"class":50},[40,75810,75811,75813,75815,75818],{"class":42,"line":13247},[40,75812,60584],{"class":63},[40,75814,60],{"class":50},[40,75816,75817],{"class":63},"right",[40,75819,4637],{"class":50},[40,75821,75822,75824,75826,75828,75830,75832,75834,75836],{"class":42,"line":19926},[40,75823,58004],{"class":63},[40,75825,60],{"class":50},[40,75827,3880],{"class":63},[40,75829,54790],{"class":1283},[40,75831,54854],{"class":63},[40,75833,5364],{"class":63},[40,75835,54790],{"class":1283},[40,75837,4637],{"class":50},[40,75839,75840,75843,75845,75847,75849],{"class":42,"line":19932},[40,75841,75842],{"class":63},"      padding-right",[40,75844,60],{"class":50},[40,75846,3925],{"class":63},[40,75848,54790],{"class":1283},[40,75850,4637],{"class":50},[40,75852,75853,75855,75857,75859,75861],{"class":42,"line":19955},[40,75854,58220],{"class":63},[40,75856,60],{"class":50},[40,75858,4002],{"class":63},[40,75860,54790],{"class":1283},[40,75862,4637],{"class":50},[40,75864,75865,75867,75869,75871,75873,75876,75878,75881,75883,75885],{"class":42,"line":19961},[40,75866,58182],{"class":63},[40,75868,60],{"class":50},[40,75870,75618],{"class":63},[40,75872,3488],{"class":50},[40,75874,75875],{"class":63},"237",[40,75877,15757],{"class":50},[40,75879,75880],{"class":63},"235",[40,75882,15757],{"class":50},[40,75884,75880],{"class":63},[40,75886,6043],{"class":50},[40,75888,75889,75892,75894,75896],{"class":42,"line":19984},[40,75890,75891],{"class":63},"      box-sizing",[40,75893,60],{"class":50},[40,75895,63803],{"class":63},[40,75897,4637],{"class":50},[40,75899,75900],{"class":42,"line":19998},[40,75901,5513],{"class":50},[40,75903,75904],{"class":42,"line":20018},[40,75905,1413],{"emptyLinePlaceholder":1412},[40,75907,75908,75910,75912],{"class":42,"line":20024},[40,75909,75770],{"class":596},[40,75911,54986],{"class":46},[40,75913,18894],{"class":50},[40,75915,75916,75918,75920,75922],{"class":42,"line":20035},[40,75917,60714],{"class":63},[40,75919,60],{"class":50},[40,75921,60719],{"class":63},[40,75923,4637],{"class":50},[40,75925,75926],{"class":42,"line":20058},[40,75927,5513],{"class":50},[40,75929,75930],{"class":42,"line":20080},[40,75931,1413],{"emptyLinePlaceholder":1412},[40,75933,75934,75936],{"class":42,"line":20085},[40,75935,68321],{"class":46},[40,75937,18894],{"class":50},[40,75939,75940,75942,75944,75946,75948],{"class":42,"line":20091},[40,75941,58069],{"class":63},[40,75943,60],{"class":50},[40,75945,64927],{"class":63},[40,75947,54790],{"class":1283},[40,75949,4637],{"class":50},[40,75951,75952,75954,75956,75959],{"class":42,"line":20105},[40,75953,58004],{"class":63},[40,75955,60],{"class":50},[40,75957,75958],{"class":63},"auto",[40,75960,4637],{"class":50},[40,75962,75963,75965,75967,75969],{"class":42,"line":20118},[40,75964,68328],{"class":63},[40,75966,60],{"class":50},[40,75968,68333],{"class":63},[40,75970,4637],{"class":50},[40,75972,75973],{"class":42,"line":20123},[40,75974,5513],{"class":50},[40,75976,75977],{"class":42,"line":20137},[40,75978,1413],{"emptyLinePlaceholder":1412},[40,75980,75981,75983],{"class":42,"line":20142},[40,75982,68413],{"class":46},[40,75984,18894],{"class":50},[40,75986,75987,75989,75991,75993,75995,75997,75999,76001,76003,76005],{"class":42,"line":20148},[40,75988,58182],{"class":63},[40,75990,60],{"class":50},[40,75992,75618],{"class":63},[40,75994,3488],{"class":50},[40,75996,75875],{"class":63},[40,75998,15757],{"class":50},[40,76000,75880],{"class":63},[40,76002,15757],{"class":50},[40,76004,75880],{"class":63},[40,76006,6043],{"class":50},[40,76008,76009],{"class":42,"line":20153},[40,76010,5513],{"class":50},[40,76012,76013],{"class":42,"line":20167},[40,76014,1413],{"emptyLinePlaceholder":1412},[40,76016,76017,76019],{"class":42,"line":20172},[40,76018,68413],{"class":46},[40,76020,34766],{"class":50},[40,76022,76023,76025],{"class":42,"line":20177},[40,76024,68479],{"class":46},[40,76026,18894],{"class":50},[40,76028,76029,76031,76033,76035,76037],{"class":42,"line":20191},[40,76030,58083],{"class":63},[40,76032,60],{"class":50},[40,76034,3753],{"class":63},[40,76036,54790],{"class":1283},[40,76038,4637],{"class":50},[40,76040,76041,76043,76045,76047],{"class":42,"line":20203},[40,76042,60584],{"class":63},[40,76044,60],{"class":50},[40,76046,27055],{"class":63},[40,76048,4637],{"class":50},[40,76050,76051,76053,76055,76057,76059],{"class":42,"line":20208},[40,76052,58220],{"class":63},[40,76054,60],{"class":50},[40,76056,4028],{"class":63},[40,76058,54790],{"class":1283},[40,76060,4637],{"class":50},[40,76062,76063,76065,76067,76069,76071,76073,76075,76077,76080,76082,76085,76087,76089],{"class":42,"line":20221},[40,76064,65275],{"class":63},[40,76066,60],{"class":50},[40,76068,3698],{"class":63},[40,76070,54790],{"class":1283},[40,76072,54819],{"class":63},[40,76074,75555],{"class":63},[40,76076,3488],{"class":50},[40,76078,76079],{"class":63},"228",[40,76081,15757],{"class":50},[40,76083,76084],{"class":63},"225",[40,76086,15757],{"class":50},[40,76088,76084],{"class":63},[40,76090,6043],{"class":50},[40,76092,76093,76096,76098,76100,76102],{"class":42,"line":20226},[40,76094,76095],{"class":63},"      padding-left",[40,76097,60],{"class":50},[40,76099,3799],{"class":63},[40,76101,54790],{"class":1283},[40,76103,4637],{"class":50},[40,76105,76106,76108,76110,76112,76115,76117,76119],{"class":42,"line":20231},[40,76107,65158],{"class":63},[40,76109,60],{"class":50},[40,76111,31426],{"class":63},[40,76113,76114],{"class":63}," linear",[40,76116,65165],{"class":63},[40,76118,4173],{"class":1283},[40,76120,4637],{"class":50},[40,76122,76123],{"class":42,"line":20236},[40,76124,5513],{"class":50},[40,76126,76127],{"class":42,"line":20249},[40,76128,1413],{"emptyLinePlaceholder":1412},[40,76130,76131,76134,76136,76138],{"class":42,"line":20254},[40,76132,76133],{"class":46},"    tbody",[40,76135,73441],{"class":46},[40,76137,64238],{"class":596},[40,76139,18894],{"class":50},[40,76141,76142,76144,76146,76148,76150,76152,76154,76156,76158,76160],{"class":42,"line":35933},[40,76143,58182],{"class":63},[40,76145,60],{"class":50},[40,76147,75618],{"class":63},[40,76149,3488],{"class":50},[40,76151,75875],{"class":63},[40,76153,15757],{"class":50},[40,76155,75880],{"class":63},[40,76157,15757],{"class":50},[40,76159,75880],{"class":63},[40,76161,6043],{"class":50},[40,76163,76164,76166,76168,76170],{"class":42,"line":35939},[40,76165,65323],{"class":63},[40,76167,60],{"class":50},[40,76169,65328],{"class":63},[40,76171,4637],{"class":50},[40,76173,76174],{"class":42,"line":35945},[40,76175,5513],{"class":50},[40,76177,76178],{"class":42,"line":35951},[40,76179,1413],{"emptyLinePlaceholder":1412},[40,76181,76182,76184,76186,76189,76191],{"class":42,"line":35957},[40,76183,76133],{"class":46},[40,76185,73441],{"class":46},[40,76187,76188],{"class":46}," td",[40,76190,4741],{"class":46},[40,76192,18894],{"class":50},[40,76194,76195,76197,76199,76201],{"class":42,"line":35968},[40,76196,58307],{"class":63},[40,76198,60],{"class":50},[40,76200,64167],{"class":63},[40,76202,4637],{"class":50},[40,76204,76205,76207,76209,76211,76213],{"class":42,"line":35974},[40,76206,58069],{"class":63},[40,76208,60],{"class":50},[40,76210,4384],{"class":63},[40,76212,54790],{"class":1283},[40,76214,4637],{"class":50},[40,76216,76217,76219,76221,76223,76225],{"class":42,"line":35994},[40,76218,58083],{"class":63},[40,76220,60],{"class":50},[40,76222,4302],{"class":63},[40,76224,54790],{"class":1283},[40,76226,4637],{"class":50},[40,76228,76229,76231,76233,76235,76237],{"class":42,"line":36000},[40,76230,60657],{"class":63},[40,76232,60],{"class":50},[40,76234,4302],{"class":63},[40,76236,54790],{"class":1283},[40,76238,4637],{"class":50},[40,76240,76241,76243,76245,76247,76249],{"class":42,"line":36011},[40,76242,65375],{"class":63},[40,76244,60],{"class":50},[40,76246,64],{"class":63},[40,76248,54790],{"class":1283},[40,76250,4637],{"class":50},[40,76252,76253,76255,76257,76259],{"class":42,"line":36017},[40,76254,60714],{"class":63},[40,76256,60],{"class":50},[40,76258,64140],{"class":63},[40,76260,4637],{"class":50},[40,76262,76263,76265,76267,76269],{"class":42,"line":36023},[40,76264,60584],{"class":63},[40,76266,60],{"class":50},[40,76268,54890],{"class":63},[40,76270,4637],{"class":50},[40,76272,76273,76275,76277,76279],{"class":42,"line":36029},[40,76274,67268],{"class":63},[40,76276,60],{"class":50},[40,76278,58035],{"class":63},[40,76280,4637],{"class":50},[40,76282,76283,76285,76287,76290],{"class":42,"line":36035},[40,76284,58182],{"class":63},[40,76286,60],{"class":50},[40,76288,76289],{"class":63},"orange",[40,76291,4637],{"class":50},[40,76293,76294,76296,76298,76301,76303],{"class":42,"line":36041},[40,76295,58432],{"class":63},[40,76297,60],{"class":50},[40,76299,76300],{"class":63},"12.5",[40,76302,54790],{"class":1283},[40,76304,4637],{"class":50},[40,76306,76307],{"class":42,"line":36047},[40,76308,5513],{"class":50},[40,76310,76311,76313,76315],{"class":42,"line":36053},[40,76312,55715],{"class":50},[40,76314,3384],{"class":46},[40,76316,54606],{"class":50},[40,76318,76319,76321,76323],{"class":42,"line":36073},[40,76320,55083],{"class":50},[40,76322,54633],{"class":46},[40,76324,54606],{"class":50},[40,76326,76327],{"class":42,"line":36079},[40,76328,1413],{"emptyLinePlaceholder":1412},[40,76330,76331,76333,76335],{"class":42,"line":36095},[40,76332,4387],{"class":50},[40,76334,55098],{"class":46},[40,76336,54606],{"class":50},[40,76338,76339,76341,76343,76346,76348],{"class":42,"line":36101},[40,76340,55442],{"class":50},[40,76342,14],{"class":46},[40,76344,76345],{"class":50},">学生就业统计表\u003C\u002F",[40,76347,14],{"class":46},[40,76349,54606],{"class":50},[40,76351,76352,76354,76356,76358,76360,76362,76364,76366,76368],{"class":42,"line":36115},[40,76353,55442],{"class":50},[40,76355,69923],{"class":46},[40,76357,56784],{"class":596},[40,76359,1284],{"class":50},[40,76361,65962],{"class":94},[40,76363,72368],{"class":596},[40,76365,1284],{"class":50},[40,76367,35076],{"class":94},[40,76369,54606],{"class":50},[40,76371,76372,76374,76376,76378,76380,76382,76384,76386,76388,76390,76392,76395,76397,76399,76401],{"class":42,"line":36121},[40,76373,54640],{"class":50},[40,76375,57119],{"class":46},[40,76377,57122],{"class":596},[40,76379,1284],{"class":50},[40,76381,65997],{"class":94},[40,76383,18242],{"class":596},[40,76385,1284],{"class":50},[40,76387,72394],{"class":94},[40,76389,64318],{"class":596},[40,76391,1284],{"class":50},[40,76393,76394],{"class":94},"\"姓名\"",[40,76396,56784],{"class":596},[40,76398,1284],{"class":50},[40,76400,72394],{"class":94},[40,76402,54606],{"class":50},[40,76404,76405,76407,76409,76411,76413,76415,76417,76419,76421,76423,76425,76428,76430,76432,76434],{"class":42,"line":36136},[40,76406,54640],{"class":50},[40,76408,57119],{"class":46},[40,76410,57122],{"class":596},[40,76412,1284],{"class":50},[40,76414,65997],{"class":94},[40,76416,18242],{"class":596},[40,76418,1284],{"class":50},[40,76420,72422],{"class":94},[40,76422,64318],{"class":596},[40,76424,1284],{"class":50},[40,76426,76427],{"class":94},"\"年龄\"",[40,76429,56784],{"class":596},[40,76431,1284],{"class":50},[40,76433,72422],{"class":94},[40,76435,54606],{"class":50},[40,76437,76438,76440,76442,76444,76446,76448,76450,76452,76454,76456,76458,76461,76463,76465,76467],{"class":42,"line":36142},[40,76439,54640],{"class":50},[40,76441,57119],{"class":46},[40,76443,57122],{"class":596},[40,76445,1284],{"class":50},[40,76447,65997],{"class":94},[40,76449,18242],{"class":596},[40,76451,1284],{"class":50},[40,76453,72524],{"class":94},[40,76455,64318],{"class":596},[40,76457,1284],{"class":50},[40,76459,76460],{"class":94},"\"薪资\"",[40,76462,56784],{"class":596},[40,76464,1284],{"class":50},[40,76466,72524],{"class":94},[40,76468,54606],{"class":50},[40,76470,76471,76473,76475,76477,76479,76481,76483,76485,76487,76489,76491,76493],{"class":42,"line":36151},[40,76472,54640],{"class":50},[40,76474,72442],{"class":46},[40,76476,18242],{"class":596},[40,76478,1284],{"class":50},[40,76480,72449],{"class":94},[40,76482,18281],{"class":596},[40,76484,1284],{"class":50},[40,76486,285],{"class":94},[40,76488,56784],{"class":596},[40,76490,1284],{"class":50},[40,76492,72449],{"class":94},[40,76494,54606],{"class":50},[40,76496,76497,76499,76501,76503,76505,76507,76509,76511],{"class":42,"line":36157},[40,76498,58532],{"class":50},[40,76500,72464],{"class":46},[40,76502,69949],{"class":596},[40,76504,1284],{"class":50},[40,76506,13283],{"class":94},[40,76508,72473],{"class":50},[40,76510,72464],{"class":46},[40,76512,54606],{"class":50},[40,76514,76515,76517,76519,76521,76523,76525,76527,76529],{"class":42,"line":36166},[40,76516,58532],{"class":50},[40,76518,72464],{"class":46},[40,76520,69949],{"class":596},[40,76522,1284],{"class":50},[40,76524,13352],{"class":94},[40,76526,72492],{"class":50},[40,76528,72464],{"class":46},[40,76530,54606],{"class":50},[40,76532,76533,76535,76537],{"class":42,"line":36172},[40,76534,55074],{"class":50},[40,76536,72442],{"class":46},[40,76538,54606],{"class":50},[40,76540,76541,76543,76545,76547,76549,76551,76553,76555,76557,76559,76561,76563],{"class":42,"line":36178},[40,76542,54640],{"class":50},[40,76544,72442],{"class":46},[40,76546,18242],{"class":596},[40,76548,1284],{"class":50},[40,76550,72546],{"class":94},[40,76552,18281],{"class":596},[40,76554,1284],{"class":50},[40,76556,285],{"class":94},[40,76558,56784],{"class":596},[40,76560,1284],{"class":50},[40,76562,72546],{"class":94},[40,76564,54606],{"class":50},[40,76566,76567,76569,76571,76573,76575,76577,76579,76581],{"class":42,"line":36187},[40,76568,58532],{"class":50},[40,76570,72464],{"class":46},[40,76572,69949],{"class":596},[40,76574,1284],{"class":50},[40,76576,72567],{"class":94},[40,76578,72570],{"class":50},[40,76580,72464],{"class":46},[40,76582,54606],{"class":50},[40,76584,76585,76587,76589,76591,76593,76595,76597,76599],{"class":42,"line":36193},[40,76586,58532],{"class":50},[40,76588,72464],{"class":46},[40,76590,69949],{"class":596},[40,76592,1284],{"class":50},[40,76594,72587],{"class":94},[40,76596,72590],{"class":50},[40,76598,72464],{"class":46},[40,76600,54606],{"class":50},[40,76602,76603,76605,76607,76609,76611,76613,76615,76617],{"class":42,"line":36204},[40,76604,58532],{"class":50},[40,76606,72464],{"class":46},[40,76608,69949],{"class":596},[40,76610,1284],{"class":50},[40,76612,72607],{"class":94},[40,76614,72610],{"class":50},[40,76616,72464],{"class":46},[40,76618,54606],{"class":50},[40,76620,76621,76623,76625,76627,76629,76631,76633,76635],{"class":42,"line":36210},[40,76622,58532],{"class":50},[40,76624,72464],{"class":46},[40,76626,69949],{"class":596},[40,76628,1284],{"class":50},[40,76630,72627],{"class":94},[40,76632,72630],{"class":50},[40,76634,72464],{"class":46},[40,76636,54606],{"class":50},[40,76638,76639,76641,76643,76645,76647,76649,76651,76653],{"class":42,"line":36229},[40,76640,58532],{"class":50},[40,76642,72464],{"class":46},[40,76644,69949],{"class":596},[40,76646,1284],{"class":50},[40,76648,72647],{"class":94},[40,76650,72650],{"class":50},[40,76652,72464],{"class":46},[40,76654,54606],{"class":50},[40,76656,76657,76659,76661],{"class":42,"line":36235},[40,76658,55074],{"class":50},[40,76660,72442],{"class":46},[40,76662,54606],{"class":50},[40,76664,76665,76667,76669],{"class":42,"line":36246},[40,76666,54640],{"class":50},[40,76668,57185],{"class":46},[40,76670,54606],{"class":50},[40,76672,76673,76675,76677,76680,76682,76685,76687],{"class":42,"line":36252},[40,76674,58532],{"class":50},[40,76676,40],{"class":46},[40,76678,76679],{"class":50},">+\u003C\u002F",[40,76681,40],{"class":46},[40,76683,76684],{"class":50},">添加\u003C\u002F",[40,76686,57185],{"class":46},[40,76688,54606],{"class":50},[40,76690,76691,76693,76695],{"class":42,"line":36272},[40,76692,55715],{"class":50},[40,76694,69923],{"class":46},[40,76696,54606],{"class":50},[40,76698,76699,76701,76703,76705,76707,76709,76712,76714,76717,76719,76722,76724],{"class":42,"line":36288},[40,76700,55442],{"class":50},[40,76702,54909],{"class":46},[40,76704,56784],{"class":596},[40,76706,1284],{"class":50},[40,76708,65878],{"class":94},[40,76710,76711],{"class":50},">共有数据 \u003C",[40,76713,40],{"class":46},[40,76715,76716],{"class":50},">0\u003C\u002F",[40,76718,40],{"class":46},[40,76720,76721],{"class":50},"> 条\u003C\u002F",[40,76723,54909],{"class":46},[40,76725,54606],{"class":50},[40,76727,76728,76730,76732],{"class":42,"line":36294},[40,76729,55442],{"class":50},[40,76731,3619],{"class":46},[40,76733,54606],{"class":50},[40,76735,76736,76738,76740],{"class":42,"line":36308},[40,76737,54640],{"class":50},[40,76739,3622],{"class":46},[40,76741,54606],{"class":50},[40,76743,76744,76746,76748],{"class":42,"line":36314},[40,76745,58532],{"class":50},[40,76747,3625],{"class":46},[40,76749,54606],{"class":50},[40,76751,76752,76754,76756,76759,76761],{"class":42,"line":36320},[40,76753,58600],{"class":50},[40,76755,3628],{"class":46},[40,76757,76758],{"class":50},">ID\u003C\u002F",[40,76760,3628],{"class":46},[40,76762,54606],{"class":50},[40,76764,76765,76767,76769,76771,76773],{"class":42,"line":36331},[40,76766,58600],{"class":50},[40,76768,3628],{"class":46},[40,76770,72753],{"class":50},[40,76772,3628],{"class":46},[40,76774,54606],{"class":50},[40,76776,76777,76779,76781,76783,76785],{"class":42,"line":36337},[40,76778,58600],{"class":50},[40,76780,3628],{"class":46},[40,76782,72766],{"class":50},[40,76784,3628],{"class":46},[40,76786,54606],{"class":50},[40,76788,76789,76791,76793,76795,76797],{"class":42,"line":36343},[40,76790,58600],{"class":50},[40,76792,3628],{"class":46},[40,76794,72779],{"class":50},[40,76796,3628],{"class":46},[40,76798,54606],{"class":50},[40,76800,76801,76803,76805,76807,76809],{"class":42,"line":36353},[40,76802,58600],{"class":50},[40,76804,3628],{"class":46},[40,76806,72792],{"class":50},[40,76808,3628],{"class":46},[40,76810,54606],{"class":50},[40,76812,76813,76815,76817,76819,76821],{"class":42,"line":36359},[40,76814,58600],{"class":50},[40,76816,3628],{"class":46},[40,76818,72805],{"class":50},[40,76820,3628],{"class":46},[40,76822,54606],{"class":50},[40,76824,76825,76827,76829,76832,76834],{"class":42,"line":36370},[40,76826,58600],{"class":50},[40,76828,3628],{"class":46},[40,76830,76831],{"class":50},">录入时间\u003C\u002F",[40,76833,3628],{"class":46},[40,76835,54606],{"class":50},[40,76837,76838,76840,76842,76844,76846],{"class":42,"line":36376},[40,76839,58600],{"class":50},[40,76841,3628],{"class":46},[40,76843,72818],{"class":50},[40,76845,3628],{"class":46},[40,76847,54606],{"class":50},[40,76849,76850,76852,76854],{"class":42,"line":36386},[40,76851,58705],{"class":50},[40,76853,3625],{"class":46},[40,76855,54606],{"class":50},[40,76857,76858,76860,76862],{"class":42,"line":36391},[40,76859,55074],{"class":50},[40,76861,3622],{"class":46},[40,76863,54606],{"class":50},[40,76865,76866,76868,76870],{"class":42,"line":36397},[40,76867,54640],{"class":50},[40,76869,3665],{"class":46},[40,76871,54606],{"class":50},[40,76873,76874],{"class":42,"line":36446},[40,76875,76876],{"class":997},"      \u003C!-- \u003Ctr>\n",[40,76878,76879],{"class":42,"line":36493},[40,76880,76881],{"class":997},"        \u003Ctd>1\u003C\u002Ftd>\n",[40,76883,76884],{"class":42,"line":36498},[40,76885,76881],{"class":997},[40,76887,76888],{"class":42,"line":36504},[40,76889,76881],{"class":997},[40,76891,76892],{"class":42,"line":36523},[40,76893,76881],{"class":997},[40,76895,76896],{"class":42,"line":36529},[40,76897,76881],{"class":997},[40,76899,76900],{"class":42,"line":36549},[40,76901,76881],{"class":997},[40,76903,76904],{"class":42,"line":36555},[40,76905,76881],{"class":997},[40,76907,76908],{"class":42,"line":36561},[40,76909,76910],{"class":997},"        \u003Ctd>\n",[40,76912,76913],{"class":42,"line":36571},[40,76914,76915],{"class":997},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[40,76917,76918],{"class":42,"line":36576},[40,76919,76920],{"class":997},"        \u003C\u002Ftd>\n",[40,76922,76923],{"class":42,"line":36582},[40,76924,76925],{"class":997},"      \u003C\u002Ftr> -->\n",[40,76927,76928,76930,76932],{"class":42,"line":36598},[40,76929,55074],{"class":50},[40,76931,3665],{"class":46},[40,76933,54606],{"class":50},[40,76935,76936,76938,76940],{"class":42,"line":36643},[40,76937,55715],{"class":50},[40,76939,3619],{"class":46},[40,76941,54606],{"class":50},[40,76943,76944,76946,76948],{"class":42,"line":36649},[40,76945,55442],{"class":50},[40,76947,55111],{"class":46},[40,76949,54606],{"class":50},[40,76951,76952],{"class":42,"line":36655},[40,76953,76954],{"class":997},"    \u002F\u002F const initData = [{\n",[40,76956,76957],{"class":42,"line":36661},[40,76958,76959],{"class":997},"    \u002F\u002F   unameId: 1,\n",[40,76961,76962],{"class":42,"line":36672},[40,76963,76964],{"class":997},"    \u002F\u002F   uname: '华晨宇',\n",[40,76966,76967],{"class":42,"line":36678},[40,76968,76969],{"class":997},"    \u002F\u002F   age: 22,\n",[40,76971,76972],{"class":42,"line":36684},[40,76973,76974],{"class":997},"    \u002F\u002F   salary: 12000,\n",[40,76976,76977],{"class":42,"line":36690},[40,76978,76979],{"class":997},"    \u002F\u002F   gender: '男',\n",[40,76981,76982],{"class":42,"line":36708},[40,76983,76984],{"class":997},"    \u002F\u002F   city: '北京',\n",[40,76986,76987],{"class":42,"line":36722},[40,76988,76989],{"class":997},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[40,76991,76992],{"class":42,"line":36731},[40,76993,76994],{"class":997},"    \u002F\u002F }]\n",[40,76996,76997],{"class":42,"line":36740},[40,76998,76999],{"class":997},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[40,77001,77002],{"class":42,"line":36749},[40,77003,77004],{"class":997},"    \u002F\u002F 1.渲染业务\n",[40,77006,77007],{"class":42,"line":36758},[40,77008,77009],{"class":997},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[40,77011,77012],{"class":42,"line":36764},[40,77013,77014],{"class":997},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[40,77016,77017],{"class":42,"line":36770},[40,77018,77019],{"class":997},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[40,77021,77022],{"class":42,"line":36778},[40,77023,1413],{"emptyLinePlaceholder":1412},[40,77025,77026],{"class":42,"line":36783},[40,77027,77028],{"class":997},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[40,77030,77031],{"class":42,"line":36789},[40,77032,77033],{"class":997},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[40,77035,77036,77038,77040,77042],{"class":42,"line":36800},[40,77037,14543],{"class":1283},[40,77039,60993],{"class":63},[40,77041,16886],{"class":1283},[40,77043,55136],{"class":50},[40,77045,77046,77049,77051],{"class":42,"line":36806},[40,77047,77048],{"class":50},"    console.",[40,77050,61545],{"class":596},[40,77052,55710],{"class":50},[40,77054,77055],{"class":42,"line":36826},[40,77056,1413],{"emptyLinePlaceholder":1412},[40,77058,77059],{"class":42,"line":36832},[40,77060,77061],{"class":997},"    \u002F\u002F 时间函数\n",[40,77063,77064,77066,77069],{"class":42,"line":36838},[40,77065,73381],{"class":1283},[40,77067,77068],{"class":596}," getTime",[40,77070,14175],{"class":50},[40,77072,77073,77075,77078,77080,77082,77085],{"class":42,"line":36844},[40,77074,61526],{"class":1283},[40,77076,77077],{"class":63}," date",[40,77079,16886],{"class":1283},[40,77081,14900],{"class":1283},[40,77083,77084],{"class":596}," Date",[40,77086,5302],{"class":50},[40,77088,77089,77091,77093,77095,77098,77101,77103,77105,77107,77110,77113,77115,77117,77119,77121,77123,77125,77127],{"class":42,"line":36861},[40,77090,61526],{"class":1283},[40,77092,19413],{"class":63},[40,77094,16886],{"class":1283},[40,77096,77097],{"class":50}," date.",[40,77099,77100],{"class":596},"getHours",[40,77102,16372],{"class":50},[40,77104,4387],{"class":1283},[40,77106,5364],{"class":63},[40,77108,77109],{"class":1283}," ?",[40,77111,77112],{"class":94}," '0'",[40,77114,48866],{"class":1283},[40,77116,77097],{"class":50},[40,77118,77100],{"class":596},[40,77120,16372],{"class":50},[40,77122,4336],{"class":1283},[40,77124,77097],{"class":50},[40,77126,77100],{"class":596},[40,77128,5302],{"class":50},[40,77130,77131,77133,77136,77138,77140,77143,77145,77147,77149,77151,77153,77155,77157,77159,77161,77163,77165,77167],{"class":42,"line":36867},[40,77132,61526],{"class":1283},[40,77134,77135],{"class":63}," m",[40,77137,16886],{"class":1283},[40,77139,77097],{"class":50},[40,77141,77142],{"class":596},"getMinutes",[40,77144,16372],{"class":50},[40,77146,4387],{"class":1283},[40,77148,5364],{"class":63},[40,77150,77109],{"class":1283},[40,77152,77112],{"class":94},[40,77154,48866],{"class":1283},[40,77156,77097],{"class":50},[40,77158,77142],{"class":596},[40,77160,16372],{"class":50},[40,77162,4336],{"class":1283},[40,77164,77097],{"class":50},[40,77166,77142],{"class":596},[40,77168,5302],{"class":50},[40,77170,77171,77173,77175,77177,77179,77182,77184,77186,77188,77190,77192,77194,77196,77198,77200,77202,77204,77206],{"class":42,"line":36873},[40,77172,61526],{"class":1283},[40,77174,11750],{"class":63},[40,77176,16886],{"class":1283},[40,77178,77097],{"class":50},[40,77180,77181],{"class":596},"getSeconds",[40,77183,16372],{"class":50},[40,77185,4387],{"class":1283},[40,77187,5364],{"class":63},[40,77189,77109],{"class":1283},[40,77191,77112],{"class":94},[40,77193,48866],{"class":1283},[40,77195,77097],{"class":50},[40,77197,77181],{"class":596},[40,77199,16372],{"class":50},[40,77201,4336],{"class":1283},[40,77203,77097],{"class":50},[40,77205,77181],{"class":596},[40,77207,5302],{"class":50},[40,77209,77210,77212,77215,77217,77219,77222,77224,77227,77229,77232,77234,77236,77239,77241,77243,77245,77247,77249,77251,77254,77256,77259,77261,77264,77266,77268,77270],{"class":42,"line":36879},[40,77211,61526],{"class":1283},[40,77213,77214],{"class":63}," str",[40,77216,16886],{"class":1283},[40,77218,66201],{"class":94},[40,77220,77221],{"class":50},"date",[40,77223,4037],{"class":94},[40,77225,77226],{"class":596},"getFullYear",[40,77228,5752],{"class":94},[40,77230,77231],{"class":94},"}\u002F${",[40,77233,77221],{"class":50},[40,77235,4037],{"class":94},[40,77237,77238],{"class":596},"getMonth",[40,77240,16372],{"class":94},[40,77242,3960],{"class":1283},[40,77244,28431],{"class":63},[40,77246,77231],{"class":94},[40,77248,77221],{"class":50},[40,77250,4037],{"class":94},[40,77252,77253],{"class":596},"getDate",[40,77255,5752],{"class":94},[40,77257,77258],{"class":94},"} ${",[40,77260,3894],{"class":50},[40,77262,77263],{"class":94},"}:${",[40,77265,4023],{"class":50},[40,77267,77263],{"class":94},[40,77269,4173],{"class":50},[40,77271,77272],{"class":94},"}`\n",[40,77274,77275,77278],{"class":42,"line":36885},[40,77276,77277],{"class":1283},"      return",[40,77279,77280],{"class":50}," str\n",[40,77282,77283],{"class":42,"line":36891},[40,77284,5513],{"class":50},[40,77286,77287],{"class":42,"line":36918},[40,77288,77289],{"class":997},"    \u002F\u002F 渲染函数\n",[40,77291,77292,77294,77296,77298,77300,77302,77304,77306],{"class":42,"line":36942},[40,77293,14543],{"class":1283},[40,77295,73045],{"class":63},[40,77297,16886],{"class":1283},[40,77299,57694],{"class":50},[40,77301,57697],{"class":596},[40,77303,3488],{"class":50},[40,77305,73056],{"class":94},[40,77307,1811],{"class":50},[40,77309,77310,77312,77314],{"class":42,"line":36948},[40,77311,73381],{"class":1283},[40,77313,73384],{"class":596},[40,77315,14175],{"class":50},[40,77317,77318],{"class":42,"line":36954},[40,77319,77320],{"class":997},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[40,77322,77323],{"class":42,"line":36960},[40,77324,77325],{"class":997},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[40,77327,77328,77330,77333,77335,77337,77340,77342,77344,77346,77349,77351,77354],{"class":42,"line":36971},[40,77329,61526],{"class":1283},[40,77331,77332],{"class":63}," trArr",[40,77334,16886],{"class":1283},[40,77336,55263],{"class":50},[40,77338,77339],{"class":596},"map",[40,77341,3488],{"class":50},[40,77343,57747],{"class":1283},[40,77345,4993],{"class":50},[40,77347,77348],{"class":8539},"ele",[40,77350,15757],{"class":50},[40,77352,77353],{"class":8539},"index",[40,77355,15764],{"class":50},[40,77357,77358,77360],{"class":42,"line":36982},[40,77359,18074],{"class":1283},[40,77361,73465],{"class":94},[40,77363,77364],{"class":42,"line":36988},[40,77365,77366],{"class":94},"      \u003Ctr>\n",[40,77368,77369,77371,77373,77375,77378],{"class":42,"line":37005},[40,77370,73470],{"class":94},[40,77372,77348],{"class":50},[40,77374,4037],{"class":94},[40,77376,77377],{"class":50},"unameId",[40,77379,73485],{"class":94},[40,77381,77382,77384,77386,77388,77390],{"class":42,"line":37028},[40,77383,73470],{"class":94},[40,77385,77348],{"class":50},[40,77387,4037],{"class":94},[40,77389,2671],{"class":50},[40,77391,73485],{"class":94},[40,77393,77394,77396,77398,77400,77402],{"class":42,"line":37051},[40,77395,73470],{"class":94},[40,77397,77348],{"class":50},[40,77399,4037],{"class":94},[40,77401,73517],{"class":50},[40,77403,73485],{"class":94},[40,77405,77406,77408,77410,77412,77414],{"class":42,"line":37057},[40,77407,73470],{"class":94},[40,77409,77348],{"class":50},[40,77411,4037],{"class":94},[40,77413,73534],{"class":50},[40,77415,73485],{"class":94},[40,77417,77418,77420,77422,77424,77426],{"class":42,"line":37062},[40,77419,73470],{"class":94},[40,77421,77348],{"class":50},[40,77423,4037],{"class":94},[40,77425,73551],{"class":50},[40,77427,73485],{"class":94},[40,77429,77430,77432,77434,77436,77438],{"class":42,"line":37071},[40,77431,73470],{"class":94},[40,77433,77348],{"class":50},[40,77435,4037],{"class":94},[40,77437,73568],{"class":50},[40,77439,73485],{"class":94},[40,77441,77442,77444,77446,77448,77450],{"class":42,"line":37081},[40,77443,73470],{"class":94},[40,77445,77348],{"class":50},[40,77447,4037],{"class":94},[40,77449,5713],{"class":50},[40,77451,73485],{"class":94},[40,77453,77454],{"class":42,"line":37087},[40,77455,76910],{"class":94},[40,77457,77458,77461,77463],{"class":42,"line":37092},[40,77459,77460],{"class":94},"          \u003Ca href=\"#\" data-id=\"${",[40,77462,77353],{"class":50},[40,77464,77465],{"class":94},"}\">删除\u003C\u002Fa>\n",[40,77467,77468],{"class":42,"line":37098},[40,77469,76920],{"class":94},[40,77471,77472],{"class":42,"line":37111},[40,77473,77474],{"class":94},"      \u003C\u002Ftr>\n",[40,77476,77477],{"class":42,"line":37117},[40,77478,77479],{"class":94},"  `\n",[40,77481,77482],{"class":42,"line":37128},[40,77483,68113],{"class":50},[40,77485,77486,77488,77490],{"class":42,"line":37139},[40,77487,61542],{"class":50},[40,77489,61545],{"class":596},[40,77491,77492],{"class":50},"(trArr)\n",[40,77494,77495],{"class":42,"line":37158},[40,77496,1413],{"emptyLinePlaceholder":1412},[40,77498,77499],{"class":42,"line":52818},[40,77500,77501],{"class":997},"      \u002F\u002F (2) 把数组转换为字符串join\n",[40,77503,77504],{"class":42,"line":52823},[40,77505,77506],{"class":997},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[40,77508,77509,77511,77513,77516,77519,77521,77524],{"class":42,"line":52832},[40,77510,73396],{"class":50},[40,77512,1284],{"class":1283},[40,77514,77515],{"class":50}," trArr.",[40,77517,77518],{"class":596},"join",[40,77520,3488],{"class":50},[40,77522,77523],{"class":94},"''",[40,77525,1811],{"class":50},[40,77527,77528],{"class":42,"line":52841},[40,77529,77530],{"class":997},"      \u002F\u002F 显示共有几条\n",[40,77532,77533,77535,77537,77539,77542,77545,77547,77549],{"class":42,"line":52846},[40,77534,59069],{"class":50},[40,77536,57697],{"class":596},[40,77538,3488],{"class":50},[40,77540,77541],{"class":94},"'.total span'",[40,77543,77544],{"class":50},").innerHTML ",[40,77546,1284],{"class":1283},[40,77548,55263],{"class":50},[40,77550,59129],{"class":63},[40,77552,77553],{"class":42,"line":52851},[40,77554,5513],{"class":50},[40,77556,77557],{"class":42,"line":52856},[40,77558,77559],{"class":997},"    \u002F\u002F render()\n",[40,77561,77562],{"class":42,"line":52869},[40,77563,1413],{"emptyLinePlaceholder":1412},[40,77565,77566],{"class":42,"line":52874},[40,77567,77568],{"class":997},"    \u002F\u002F 获取DOM对象\n",[40,77570,77571,77573,77575,77577,77579,77581,77583,77585],{"class":42,"line":52883},[40,77572,14543],{"class":1283},[40,77574,1531],{"class":63},[40,77576,16886],{"class":1283},[40,77578,57694],{"class":50},[40,77580,57697],{"class":596},[40,77582,3488],{"class":50},[40,77584,73129],{"class":94},[40,77586,1811],{"class":50},[40,77588,77589,77591,77593,77595,77597,77599,77601,77603],{"class":42,"line":52892},[40,77590,14543],{"class":1283},[40,77592,72946],{"class":63},[40,77594,16886],{"class":1283},[40,77596,57694],{"class":50},[40,77598,57697],{"class":596},[40,77600,3488],{"class":50},[40,77602,72957],{"class":94},[40,77604,1811],{"class":50},[40,77606,77607,77609,77611,77613,77615,77617,77619,77621],{"class":42,"line":52909},[40,77608,14543],{"class":1283},[40,77610,19011],{"class":63},[40,77612,16886],{"class":1283},[40,77614,57694],{"class":50},[40,77616,57697],{"class":596},[40,77618,3488],{"class":50},[40,77620,72976],{"class":94},[40,77622,1811],{"class":50},[40,77624,77626,77628,77630,77632,77634,77636,77638,77640],{"class":42,"line":77625},231,[40,77627,14543],{"class":1283},[40,77629,73005],{"class":63},[40,77631,16886],{"class":1283},[40,77633,57694],{"class":50},[40,77635,57697],{"class":596},[40,77637,3488],{"class":50},[40,77639,73016],{"class":94},[40,77641,1811],{"class":50},[40,77643,77645,77647,77649,77651,77653,77655,77657,77659],{"class":42,"line":77644},232,[40,77646,14543],{"class":1283},[40,77648,72985],{"class":63},[40,77650,16886],{"class":1283},[40,77652,57694],{"class":50},[40,77654,57697],{"class":596},[40,77656,3488],{"class":50},[40,77658,72996],{"class":94},[40,77660,1811],{"class":50},[40,77662,77664,77666,77668,77670,77672,77674,77676,77678],{"class":42,"line":77663},233,[40,77665,14543],{"class":1283},[40,77667,73025],{"class":63},[40,77669,16886],{"class":1283},[40,77671,57694],{"class":50},[40,77673,57697],{"class":596},[40,77675,3488],{"class":50},[40,77677,73036],{"class":94},[40,77679,1811],{"class":50},[40,77681,77683],{"class":42,"line":77682},234,[40,77684,1413],{"emptyLinePlaceholder":1412},[40,77686,77688],{"class":42,"line":77687},235,[40,77689,77690],{"class":997},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[40,77692,77694,77696,77698,77700,77702,77704,77706,77708,77710],{"class":42,"line":77693},236,[40,77695,73136],{"class":50},[40,77697,61111],{"class":596},[40,77699,3488],{"class":50},[40,77701,73143],{"class":94},[40,77703,15757],{"class":50},[40,77705,57747],{"class":1283},[40,77707,4993],{"class":50},[40,77709,3558],{"class":8539},[40,77711,15764],{"class":50},[40,77713,77715],{"class":42,"line":77714},237,[40,77716,77717],{"class":997},"      \u002F\u002F 禁止浏览器跳转\n",[40,77719,77721,77723,77725],{"class":42,"line":77720},238,[40,77722,73163],{"class":50},[40,77724,73166],{"class":596},[40,77726,5302],{"class":50},[40,77728,77730],{"class":42,"line":77729},239,[40,77731,77732],{"class":997},"      \u002F\u002F 非空判断\n",[40,77734,77736],{"class":42,"line":77735},240,[40,77737,77738],{"class":997},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[40,77740,77742],{"class":42,"line":77741},241,[40,77743,77744],{"class":997},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[40,77746,77748,77750,77752,77754,77757,77759,77762,77765,77767,77769],{"class":42,"line":77747},242,[40,77749,57778],{"class":1283},[40,77751,4993],{"class":50},[40,77753,3707],{"class":1283},[40,77755,77756],{"class":50},"uname.value ",[40,77758,74653],{"class":1283},[40,77760,77761],{"class":1283}," !",[40,77763,77764],{"class":50},"age.value ",[40,77766,74653],{"class":1283},[40,77768,77761],{"class":1283},[40,77770,77771],{"class":50},"salary.value) {\n",[40,77773,77775,77777,77779,77781,77783],{"class":42,"line":77774},243,[40,77776,18074],{"class":1283},[40,77778,73237],{"class":596},[40,77780,3488],{"class":50},[40,77782,73242],{"class":94},[40,77784,1811],{"class":50},[40,77786,77788],{"class":42,"line":77787},244,[40,77789,55696],{"class":50},[40,77791,77793,77795,77797],{"class":42,"line":77792},245,[40,77794,61305],{"class":50},[40,77796,55182],{"class":596},[40,77798,77799],{"class":50},"({\n",[40,77801,77803],{"class":42,"line":77802},246,[40,77804,77805],{"class":997},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[40,77807,77809],{"class":42,"line":77808},247,[40,77810,77811],{"class":997},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[40,77813,77815],{"class":42,"line":77814},248,[40,77816,77817],{"class":997},"        \u002F\u002F 对象的序号应为数组长度+1\n",[40,77819,77821],{"class":42,"line":77820},249,[40,77822,77823],{"class":997},"        \u002F\u002F unameId: arr.length + 1,\n",[40,77825,77827],{"class":42,"line":77826},250,[40,77828,1413],{"emptyLinePlaceholder":1412},[40,77830,77832],{"class":42,"line":77831},251,[40,77833,77834],{"class":997},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[40,77836,77838],{"class":42,"line":77837},252,[40,77839,77840],{"class":997},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[40,77842,77844],{"class":42,"line":77843},253,[40,77845,77846],{"class":997},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[40,77848,77850],{"class":42,"line":77849},254,[40,77851,77852],{"class":997},"        \u002F\u002F 0当假看\n",[40,77854,77856,77859,77861,77863,77866,77868,77870,77872,77875,77877,77879,77882,77884],{"class":42,"line":77855},255,[40,77857,77858],{"class":50},"        unameId: arr.",[40,77860,55266],{"class":63},[40,77862,77109],{"class":1283},[40,77864,77865],{"class":50}," arr[arr.",[40,77867,55266],{"class":63},[40,77869,55569],{"class":1283},[40,77871,28431],{"class":63},[40,77873,77874],{"class":50},"].unameId ",[40,77876,3960],{"class":1283},[40,77878,28431],{"class":63},[40,77880,77881],{"class":1283}," :",[40,77883,28431],{"class":63},[40,77885,34766],{"class":50},[40,77887,77889],{"class":42,"line":77888},256,[40,77890,73290],{"class":50},[40,77892,77894],{"class":42,"line":77893},257,[40,77895,73295],{"class":50},[40,77897,77899],{"class":42,"line":77898},258,[40,77900,73305],{"class":50},[40,77902,77904],{"class":42,"line":77903},259,[40,77905,73300],{"class":50},[40,77907,77909],{"class":42,"line":77908},260,[40,77910,77911],{"class":50},"        city: city.value,\n",[40,77913,77915],{"class":42,"line":77914},261,[40,77916,77917],{"class":997},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[40,77919,77921],{"class":42,"line":77920},262,[40,77922,77923],{"class":997},"        \u002F\u002F time: new Date().toDateString()\n",[40,77925,77927,77930,77933],{"class":42,"line":77926},263,[40,77928,77929],{"class":50},"        time: ",[40,77931,77932],{"class":596},"getTime",[40,77934,5302],{"class":50},[40,77936,77938],{"class":42,"line":77937},264,[40,77939,68113],{"class":50},[40,77941,77943],{"class":42,"line":77942},265,[40,77944,77945],{"class":997},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[40,77947,77949,77951],{"class":42,"line":77948},266,[40,77950,73365],{"class":596},[40,77952,5302],{"class":50},[40,77954,77956,77958,77960,77962,77964],{"class":42,"line":77955},267,[40,77957,73348],{"class":63},[40,77959,4037],{"class":50},[40,77961,73353],{"class":596},[40,77963,16372],{"class":50},[40,77965,77966],{"class":997},"\u002F\u002F重置表单\n",[40,77968,77970],{"class":42,"line":77969},268,[40,77971,77972],{"class":997},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[40,77974,77976,77979,77981,77983,77986,77988,77990,77992,77994],{"class":42,"line":77975},269,[40,77977,77978],{"class":50},"      localStorage.",[40,77980,74950],{"class":596},[40,77982,3488],{"class":50},[40,77984,77985],{"class":94},"'data'",[40,77987,15757],{"class":50},[40,77989,2382],{"class":63},[40,77991,4037],{"class":50},[40,77993,74964],{"class":596},[40,77995,77996],{"class":50},"(arr))\n",[40,77998,78000],{"class":42,"line":77999},270,[40,78001,36761],{"class":50},[40,78003,78005],{"class":42,"line":78004},271,[40,78006,1413],{"emptyLinePlaceholder":1412},[40,78008,78010],{"class":42,"line":78009},272,[40,78011,78012],{"class":997},"    \u002F\u002F 3.删除业务\n",[40,78014,78016],{"class":42,"line":78015},273,[40,78017,78018],{"class":997},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[40,78020,78022,78024,78026,78028,78030,78032,78034,78036,78038],{"class":42,"line":78021},274,[40,78023,73637],{"class":50},[40,78025,61111],{"class":596},[40,78027,3488],{"class":50},[40,78029,61116],{"class":94},[40,78031,15757],{"class":50},[40,78033,57747],{"class":1283},[40,78035,4993],{"class":50},[40,78037,3558],{"class":8539},[40,78039,15764],{"class":50},[40,78041,78043],{"class":42,"line":78042},275,[40,78044,78045],{"class":997},"      \u002F\u002F 判断是否点击的是删除按钮\n",[40,78047,78049,78051,78053,78055,78057],{"class":42,"line":78048},276,[40,78050,57778],{"class":1283},[40,78052,70332],{"class":50},[40,78054,57784],{"class":1283},[40,78056,71554],{"class":94},[40,78058,15764],{"class":50},[40,78060,78062],{"class":42,"line":78061},277,[40,78063,78064],{"class":997},"        \u002F\u002F alert(1)\n",[40,78066,78068],{"class":42,"line":78067},278,[40,78069,78070],{"class":997},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[40,78072,78074],{"class":42,"line":78073},279,[40,78075,78076],{"class":997},"        \u002F\u002F console.log(e.target)\n",[40,78078,78080],{"class":42,"line":78079},280,[40,78081,78082],{"class":997},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[40,78084,78086],{"class":42,"line":78085},281,[40,78087,1413],{"emptyLinePlaceholder":1412},[40,78089,78091],{"class":42,"line":78090},282,[40,78092,78093],{"class":997},"        \u002F\u002F 确认框，确然是否真的要删除\n",[40,78095,78097],{"class":42,"line":78096},283,[40,78098,78099],{"class":997},"        \u002F\u002F confirm()为确认框\n",[40,78101,78103],{"class":42,"line":78102},284,[40,78104,78105],{"class":997},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[40,78107,78109,78111,78113,78116,78118,78121],{"class":42,"line":78108},285,[40,78110,5822],{"class":1283},[40,78112,4993],{"class":50},[40,78114,78115],{"class":596},"confirm",[40,78117,3488],{"class":50},[40,78119,78120],{"class":94},"'您确定要删除这条数据吗？'",[40,78122,78123],{"class":50},")) {\n",[40,78125,78127,78130,78132,78134,78136],{"class":42,"line":78126},286,[40,78128,78129],{"class":50},"          arr.",[40,78131,61308],{"class":596},[40,78133,73690],{"class":50},[40,78135,3698],{"class":63},[40,78137,1811],{"class":50},[40,78139,78141],{"class":42,"line":78140},287,[40,78142,78143],{"class":997},"          \u002F\u002F 3.4 重新渲染页面\n",[40,78145,78147,78150],{"class":42,"line":78146},288,[40,78148,78149],{"class":596},"          render",[40,78151,5302],{"class":50},[40,78153,78155],{"class":42,"line":78154},289,[40,78156,78157],{"class":997},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[40,78159,78161,78164,78166,78168,78170,78172,78174,78176,78178],{"class":42,"line":78160},290,[40,78162,78163],{"class":50},"          localStorage.",[40,78165,74950],{"class":596},[40,78167,3488],{"class":50},[40,78169,77985],{"class":94},[40,78171,15757],{"class":50},[40,78173,2382],{"class":63},[40,78175,4037],{"class":50},[40,78177,74964],{"class":596},[40,78179,77996],{"class":50},[40,78181,78183],{"class":42,"line":78182},291,[40,78184,5854],{"class":50},[40,78186,78188],{"class":42,"line":78187},292,[40,78189,55696],{"class":50},[40,78191,78193],{"class":42,"line":78192},293,[40,78194,1413],{"emptyLinePlaceholder":1412},[40,78196,78198],{"class":42,"line":78197},294,[40,78199,36761],{"class":50},[40,78201,78203],{"class":42,"line":78202},295,[40,78204,1413],{"emptyLinePlaceholder":1412},[40,78206,78208,78210,78212],{"class":42,"line":78207},296,[40,78209,55715],{"class":50},[40,78211,55111],{"class":46},[40,78213,54606],{"class":50},[40,78215,78217,78219,78221],{"class":42,"line":78216},297,[40,78218,55083],{"class":50},[40,78220,55098],{"class":46},[40,78222,54606],{"class":50},[40,78224,78226],{"class":42,"line":78225},298,[40,78227,1413],{"emptyLinePlaceholder":1412},[40,78229,78231,78233,78235],{"class":42,"line":78230},299,[40,78232,55083],{"class":50},[40,78234,53935],{"class":46},[40,78236,54606],{"class":50},[14,78238,78240],{"id":78239},"_36-正则表达式","3.6 正则表达式",[19,78242,78243],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,78245,78246],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,78248,78249],{},"正则表达式的作用：",[1338,78251,78252,78259,78265],{},[495,78253,78254,78255,78258],{},"表单验证（ ",[409,78256,78257],{},"匹配"," ）",[495,78260,78261,78262,78258],{},"过滤敏感词（ ",[409,78263,78264],{},"替换",[495,78266,78267,78268,78258],{},"字符串中提取我们想要的部分（ ",[409,78269,78270],{},"提取",[402,78272,78274],{"id":78273},"_361-语法","3.6.1 语法",[19,78276,78277],{},"正则表达式使用步骤：",[492,78279,78280,78283],{},[495,78281,78282],{},"定义规则",[495,78284,78285],{},"查找是否匹配",[19,78287,78288],{},"正则表达式里边不需要写引号",[19,78290,78291],{},[438,78292],{"alt":36,"src":78293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,78295,78296],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,78298,78299],{},"reg.test(str)",[19,78301,78302],{},[438,78303],{"alt":36,"src":78304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,78306,78307],{},[438,78308],{"alt":36,"src":78309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[402,78311,78313],{"id":78312},"_362-元字符","3.6.2 元字符",[492,78315,78316,78319,78322,78325,78332],{},[495,78317,78318],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[495,78320,78321],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[495,78323,78324],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[495,78326,78327,78328],{},"正则验证工具：",[2106,78329,78330],{"href":78330,"rel":78331},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[2110],[495,78333,78334],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[2423,78336,78338],{"id":78337},"_3621-边界符","3.6.2.1 边界符",[19,78340,78341],{},[438,78342],{"alt":36,"src":78343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,78345,78346],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,78348,78349],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,78351,78352],{},"只匹配一次",[19,78354,78355],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[2423,78357,78359],{"id":78358},"_3622-量词","3.6.2.2 量词",[19,78361,78362],{},[438,78363],{"alt":36,"src":78364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,78366,78367],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[2423,78369,78371],{"id":78370},"_3623-元字符","3.6.2.3 元字符",[19,78373,78374],{},[438,78375],{"alt":36,"src":78376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,78378,78379],{},"匹配的是a或b或c []只选一个",[19,78381,78382],{},[438,78383],{"alt":36,"src":78384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,78386,78387],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,78389,78390],{},[438,78391],{"alt":36,"src":78392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,78394,78395],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,78397,78398],{},[438,78399],{"alt":36,"src":78400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[31,78402,78404],{"className":53933,"code":78403,"language":53935,"meta":36,"style":36},"\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",[26,78405,78406,78416,78430,78434,78442,78456,78476,78488,78496,78500,78508,78516,78521,78552,78579,78607,78611,78616,78644,78675,78680,78685,78716,78748,78780,78784,78789,78820,78850,78880,78884,78889,78920,78951,78981,79011,79015,79020,79053,79057,79062,79093,79124,79128,79133,79164,79194,79225,79229,79234,79266,79297,79328,79355,79386,79418,79451,79482,79513,79545,79576,79584,79592,79596],{"__ignoreMap":36},[40,78407,78408,78410,78412,78414],{"class":42,"line":43},[40,78409,54597],{"class":50},[40,78411,54600],{"class":46},[40,78413,54603],{"class":596},[40,78415,54606],{"class":50},[40,78417,78418,78420,78422,78424,78426,78428],{"class":42,"line":54},[40,78419,4387],{"class":50},[40,78421,53935],{"class":46},[40,78423,54615],{"class":596},[40,78425,1284],{"class":50},[40,78427,54620],{"class":94},[40,78429,54606],{"class":50},[40,78431,78432],{"class":42,"line":70},[40,78433,1413],{"emptyLinePlaceholder":1412},[40,78435,78436,78438,78440],{"class":42,"line":78},[40,78437,4387],{"class":50},[40,78439,54633],{"class":46},[40,78441,54606],{"class":50},[40,78443,78444,78446,78448,78450,78452,78454],{"class":42,"line":86},[40,78445,55442],{"class":50},[40,78447,54643],{"class":46},[40,78449,54646],{"class":596},[40,78451,1284],{"class":50},[40,78453,54651],{"class":94},[40,78455,54606],{"class":50},[40,78457,78458,78460,78462,78464,78466,78468,78470,78472,78474],{"class":42,"line":100},[40,78459,55442],{"class":50},[40,78461,54643],{"class":46},[40,78463,18242],{"class":596},[40,78465,1284],{"class":50},[40,78467,54690],{"class":94},[40,78469,54670],{"class":596},[40,78471,1284],{"class":50},[40,78473,54697],{"class":94},[40,78475,54606],{"class":50},[40,78477,78478,78480,78482,78484,78486],{"class":42,"line":108},[40,78479,55442],{"class":50},[40,78481,54706],{"class":46},[40,78483,54709],{"class":50},[40,78485,54706],{"class":46},[40,78487,54606],{"class":50},[40,78489,78490,78492,78494],{"class":42,"line":121},[40,78491,55083],{"class":50},[40,78493,54633],{"class":46},[40,78495,54606],{"class":50},[40,78497,78498],{"class":42,"line":134},[40,78499,1413],{"emptyLinePlaceholder":1412},[40,78501,78502,78504,78506],{"class":42,"line":146},[40,78503,4387],{"class":50},[40,78505,55098],{"class":46},[40,78507,54606],{"class":50},[40,78509,78510,78512,78514],{"class":42,"line":154},[40,78511,55442],{"class":50},[40,78513,55111],{"class":46},[40,78515,54606],{"class":50},[40,78517,78518],{"class":42,"line":162},[40,78519,78520],{"class":997},"    \u002F\u002F 元字符中\n",[40,78522,78523,78525,78527,78529,78531,78534,78536,78538,78541,78543,78546,78549],{"class":42,"line":170},[40,78524,77048],{"class":50},[40,78526,61545],{"class":596},[40,78528,3488],{"class":50},[40,78530,4063],{"class":94},[40,78532,78533],{"class":51277},"哈",[40,78535,4063],{"class":94},[40,78537,4037],{"class":50},[40,78539,78540],{"class":596},"test",[40,78542,3488],{"class":50},[40,78544,78545],{"class":94},"'哈'",[40,78547,78548],{"class":50},"))  ",[40,78550,78551],{"class":997},"\u002F\u002Ftrue\n",[40,78553,78554,78556,78558,78560,78562,78564,78566,78568,78570,78572,78575,78577],{"class":42,"line":183},[40,78555,77048],{"class":50},[40,78557,61545],{"class":596},[40,78559,3488],{"class":50},[40,78561,4063],{"class":94},[40,78563,78533],{"class":51277},[40,78565,4063],{"class":94},[40,78567,4037],{"class":50},[40,78569,78540],{"class":596},[40,78571,3488],{"class":50},[40,78573,78574],{"class":94},"'哈哈'",[40,78576,78548],{"class":50},[40,78578,78551],{"class":997},[40,78580,78581,78583,78585,78587,78589,78591,78593,78595,78597,78599,78602,78605],{"class":42,"line":196},[40,78582,77048],{"class":50},[40,78584,61545],{"class":596},[40,78586,3488],{"class":50},[40,78588,4063],{"class":94},[40,78590,78533],{"class":51277},[40,78592,4063],{"class":94},[40,78594,4037],{"class":50},[40,78596,78540],{"class":596},[40,78598,3488],{"class":50},[40,78600,78601],{"class":94},"'二哈'",[40,78603,78604],{"class":50},"))   ",[40,78606,78551],{"class":997},[40,78608,78609],{"class":42,"line":204},[40,78610,1413],{"emptyLinePlaceholder":1412},[40,78612,78613],{"class":42,"line":217},[40,78614,78615],{"class":997},"    \u002F\u002F 1.边界符\n",[40,78617,78618,78620,78622,78624,78626,78628,78630,78632,78634,78636,78638,78640,78642],{"class":42,"line":230},[40,78619,77048],{"class":50},[40,78621,61545],{"class":596},[40,78623,3488],{"class":50},[40,78625,4063],{"class":94},[40,78627,4443],{"class":1283},[40,78629,78533],{"class":51277},[40,78631,4063],{"class":94},[40,78633,4037],{"class":50},[40,78635,78540],{"class":596},[40,78637,3488],{"class":50},[40,78639,78545],{"class":94},[40,78641,78548],{"class":50},[40,78643,78551],{"class":997},[40,78645,78646,78648,78650,78652,78654,78656,78658,78660,78662,78664,78666,78668,78670,78672],{"class":42,"line":238},[40,78647,77048],{"class":50},[40,78649,61545],{"class":596},[40,78651,3488],{"class":50},[40,78653,4063],{"class":94},[40,78655,4443],{"class":1283},[40,78657,78533],{"class":51277},[40,78659,3782],{"class":1283},[40,78661,4063],{"class":94},[40,78663,4037],{"class":50},[40,78665,78540],{"class":596},[40,78667,3488],{"class":50},[40,78669,78574],{"class":94},[40,78671,78548],{"class":50},[40,78673,78674],{"class":997},"\u002F\u002Ffalse\n",[40,78676,78677],{"class":42,"line":251},[40,78678,78679],{"class":997},"    \u002F\u002F 2.量词\n",[40,78681,78682],{"class":42,"line":264},[40,78683,78684],{"class":997},"    \u002F\u002F 量词 * 类似于 >= 0\n",[40,78686,78687,78689,78691,78693,78695,78697,78699,78702,78704,78706,78708,78710,78712,78714],{"class":42,"line":277},[40,78688,77048],{"class":50},[40,78690,61545],{"class":596},[40,78692,3488],{"class":50},[40,78694,4063],{"class":94},[40,78696,4443],{"class":1283},[40,78698,78533],{"class":51277},[40,78700,78701],{"class":1283},"*$",[40,78703,4063],{"class":94},[40,78705,4037],{"class":50},[40,78707,78540],{"class":596},[40,78709,3488],{"class":50},[40,78711,78574],{"class":94},[40,78713,78548],{"class":50},[40,78715,78551],{"class":997},[40,78717,78718,78720,78722,78724,78726,78728,78730,78732,78734,78736,78738,78740,78743,78745],{"class":42,"line":290},[40,78719,77048],{"class":50},[40,78721,61545],{"class":596},[40,78723,3488],{"class":50},[40,78725,4063],{"class":94},[40,78727,4443],{"class":1283},[40,78729,78533],{"class":51277},[40,78731,78701],{"class":1283},[40,78733,4063],{"class":94},[40,78735,4037],{"class":50},[40,78737,78540],{"class":596},[40,78739,3488],{"class":50},[40,78741,78742],{"class":94},"'二哈好傻'",[40,78744,78548],{"class":50},[40,78746,78747],{"class":997},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[40,78749,78750,78752,78754,78756,78758,78760,78762,78764,78766,78768,78770,78772,78775,78777],{"class":42,"line":298},[40,78751,77048],{"class":50},[40,78753,61545],{"class":596},[40,78755,3488],{"class":50},[40,78757,4063],{"class":94},[40,78759,4443],{"class":1283},[40,78761,78533],{"class":51277},[40,78763,78701],{"class":1283},[40,78765,4063],{"class":94},[40,78767,4037],{"class":50},[40,78769,78540],{"class":596},[40,78771,3488],{"class":50},[40,78773,78774],{"class":94},"'哈好哈'",[40,78776,78604],{"class":50},[40,78778,78779],{"class":997},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[40,78781,78782],{"class":42,"line":310},[40,78783,1413],{"emptyLinePlaceholder":1412},[40,78785,78786],{"class":42,"line":5086},[40,78787,78788],{"class":997},"    \u002F\u002F +类似于>=1\n",[40,78790,78791,78793,78795,78797,78799,78801,78803,78806,78808,78810,78812,78814,78816,78818],{"class":42,"line":5091},[40,78792,77048],{"class":50},[40,78794,61545],{"class":596},[40,78796,3488],{"class":50},[40,78798,4063],{"class":94},[40,78800,4443],{"class":1283},[40,78802,78533],{"class":51277},[40,78804,78805],{"class":1283},"+$",[40,78807,4063],{"class":94},[40,78809,4037],{"class":50},[40,78811,78540],{"class":596},[40,78813,3488],{"class":50},[40,78815,78574],{"class":94},[40,78817,78548],{"class":50},[40,78819,78551],{"class":997},[40,78821,78822,78824,78826,78828,78830,78832,78834,78836,78838,78840,78842,78844,78846,78848],{"class":42,"line":5105},[40,78823,77048],{"class":50},[40,78825,61545],{"class":596},[40,78827,3488],{"class":50},[40,78829,4063],{"class":94},[40,78831,4443],{"class":1283},[40,78833,78533],{"class":51277},[40,78835,78805],{"class":1283},[40,78837,4063],{"class":94},[40,78839,4037],{"class":50},[40,78841,78540],{"class":596},[40,78843,3488],{"class":50},[40,78845,78742],{"class":94},[40,78847,78548],{"class":50},[40,78849,78747],{"class":997},[40,78851,78852,78854,78856,78858,78860,78862,78864,78866,78868,78870,78872,78874,78876,78878],{"class":42,"line":5110},[40,78853,77048],{"class":50},[40,78855,61545],{"class":596},[40,78857,3488],{"class":50},[40,78859,4063],{"class":94},[40,78861,4443],{"class":1283},[40,78863,78533],{"class":51277},[40,78865,78805],{"class":1283},[40,78867,4063],{"class":94},[40,78869,4037],{"class":50},[40,78871,78540],{"class":596},[40,78873,3488],{"class":50},[40,78875,78774],{"class":94},[40,78877,78604],{"class":50},[40,78879,78674],{"class":997},[40,78881,78882],{"class":42,"line":5902},[40,78883,1413],{"emptyLinePlaceholder":1412},[40,78885,78886],{"class":42,"line":5916},[40,78887,78888],{"class":997},"    \u002F\u002F ?类似于0次或一次\n",[40,78890,78891,78893,78895,78897,78899,78901,78904,78906,78908,78910,78912,78914,78916,78918],{"class":42,"line":5924},[40,78892,77048],{"class":50},[40,78894,61545],{"class":596},[40,78896,3488],{"class":50},[40,78898,4063],{"class":94},[40,78900,4443],{"class":1283},[40,78902,78903],{"class":51277},"哈？",[40,78905,3782],{"class":1283},[40,78907,4063],{"class":94},[40,78909,4037],{"class":50},[40,78911,78540],{"class":596},[40,78913,3488],{"class":50},[40,78915,77523],{"class":94},[40,78917,78604],{"class":50},[40,78919,78551],{"class":997},[40,78921,78922,78924,78926,78928,78930,78932,78934,78937,78939,78941,78943,78945,78947,78949],{"class":42,"line":5929},[40,78923,77048],{"class":50},[40,78925,61545],{"class":596},[40,78927,3488],{"class":50},[40,78929,4063],{"class":94},[40,78931,4443],{"class":1283},[40,78933,78533],{"class":51277},[40,78935,78936],{"class":1283},"?$",[40,78938,4063],{"class":94},[40,78940,4037],{"class":50},[40,78942,78540],{"class":596},[40,78944,3488],{"class":50},[40,78946,78574],{"class":94},[40,78948,78548],{"class":50},[40,78950,78674],{"class":997},[40,78952,78953,78955,78957,78959,78961,78963,78965,78967,78969,78971,78973,78975,78977,78979],{"class":42,"line":5935},[40,78954,77048],{"class":50},[40,78956,61545],{"class":596},[40,78958,3488],{"class":50},[40,78960,4063],{"class":94},[40,78962,4443],{"class":1283},[40,78964,78533],{"class":51277},[40,78966,78936],{"class":1283},[40,78968,4063],{"class":94},[40,78970,4037],{"class":50},[40,78972,78540],{"class":596},[40,78974,3488],{"class":50},[40,78976,78742],{"class":94},[40,78978,78548],{"class":50},[40,78980,78747],{"class":997},[40,78982,78983,78985,78987,78989,78991,78993,78995,78997,78999,79001,79003,79005,79007,79009],{"class":42,"line":5941},[40,78984,77048],{"class":50},[40,78986,61545],{"class":596},[40,78988,3488],{"class":50},[40,78990,4063],{"class":94},[40,78992,4443],{"class":1283},[40,78994,78533],{"class":51277},[40,78996,78936],{"class":1283},[40,78998,4063],{"class":94},[40,79000,4037],{"class":50},[40,79002,78540],{"class":596},[40,79004,3488],{"class":50},[40,79006,78774],{"class":94},[40,79008,78548],{"class":50},[40,79010,78674],{"class":997},[40,79012,79013],{"class":42,"line":5946},[40,79014,1413],{"emptyLinePlaceholder":1412},[40,79016,79017],{"class":42,"line":11270},[40,79018,79019],{"class":997},"    \u002F\u002F {n}写几，就必须出现几次\n",[40,79021,79022,79024,79026,79028,79030,79032,79034,79037,79039,79041,79043,79045,79048,79051],{"class":42,"line":11294},[40,79023,77048],{"class":50},[40,79025,61545],{"class":596},[40,79027,3488],{"class":50},[40,79029,4063],{"class":94},[40,79031,4443],{"class":1283},[40,79033,78533],{"class":51277},[40,79035,79036],{"class":1283},"{4}$",[40,79038,4063],{"class":94},[40,79040,4037],{"class":50},[40,79042,78540],{"class":596},[40,79044,3488],{"class":50},[40,79046,79047],{"class":94},"'哈哈哈哈'",[40,79049,79050],{"class":50},")) ",[40,79052,78551],{"class":997},[40,79054,79055],{"class":42,"line":11299},[40,79056,1413],{"emptyLinePlaceholder":1412},[40,79058,79059],{"class":42,"line":11305},[40,79060,79061],{"class":997},"    \u002F\u002F {n,}大于等于n次\n",[40,79063,79064,79066,79068,79070,79072,79074,79076,79079,79081,79083,79085,79087,79089,79091],{"class":42,"line":11332},[40,79065,77048],{"class":50},[40,79067,61545],{"class":596},[40,79069,3488],{"class":50},[40,79071,4063],{"class":94},[40,79073,4443],{"class":1283},[40,79075,78533],{"class":51277},[40,79077,79078],{"class":1283},"{4,}$",[40,79080,4063],{"class":94},[40,79082,4037],{"class":50},[40,79084,78540],{"class":596},[40,79086,3488],{"class":50},[40,79088,79047],{"class":94},[40,79090,79050],{"class":50},[40,79092,78551],{"class":997},[40,79094,79095,79097,79099,79101,79103,79105,79107,79109,79111,79113,79115,79117,79120,79122],{"class":42,"line":11337},[40,79096,77048],{"class":50},[40,79098,61545],{"class":596},[40,79100,3488],{"class":50},[40,79102,4063],{"class":94},[40,79104,4443],{"class":1283},[40,79106,78533],{"class":51277},[40,79108,79078],{"class":1283},[40,79110,4063],{"class":94},[40,79112,4037],{"class":50},[40,79114,78540],{"class":596},[40,79116,3488],{"class":50},[40,79118,79119],{"class":94},"'哈哈哈哈哈'",[40,79121,79050],{"class":50},[40,79123,78551],{"class":997},[40,79125,79126],{"class":42,"line":11343},[40,79127,1413],{"emptyLinePlaceholder":1412},[40,79129,79130],{"class":42,"line":11355},[40,79131,79132],{"class":997},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[40,79134,79135,79137,79139,79141,79143,79145,79147,79150,79152,79154,79156,79158,79160,79162],{"class":42,"line":11367},[40,79136,77048],{"class":50},[40,79138,61545],{"class":596},[40,79140,3488],{"class":50},[40,79142,4063],{"class":94},[40,79144,4443],{"class":1283},[40,79146,78533],{"class":51277},[40,79148,79149],{"class":1283},"{4,6}$",[40,79151,4063],{"class":94},[40,79153,4037],{"class":50},[40,79155,78540],{"class":596},[40,79157,3488],{"class":50},[40,79159,79047],{"class":94},[40,79161,79050],{"class":50},[40,79163,78551],{"class":997},[40,79165,79166,79168,79170,79172,79174,79176,79178,79180,79182,79184,79186,79188,79190,79192],{"class":42,"line":11379},[40,79167,77048],{"class":50},[40,79169,61545],{"class":596},[40,79171,3488],{"class":50},[40,79173,4063],{"class":94},[40,79175,4443],{"class":1283},[40,79177,78533],{"class":51277},[40,79179,79149],{"class":1283},[40,79181,4063],{"class":94},[40,79183,4037],{"class":50},[40,79185,78540],{"class":596},[40,79187,3488],{"class":50},[40,79189,79119],{"class":94},[40,79191,79050],{"class":50},[40,79193,78551],{"class":997},[40,79195,79196,79198,79200,79202,79204,79206,79208,79210,79212,79214,79216,79218,79221,79223],{"class":42,"line":13038},[40,79197,77048],{"class":50},[40,79199,61545],{"class":596},[40,79201,3488],{"class":50},[40,79203,4063],{"class":94},[40,79205,4443],{"class":1283},[40,79207,78533],{"class":51277},[40,79209,79149],{"class":1283},[40,79211,4063],{"class":94},[40,79213,4037],{"class":50},[40,79215,78540],{"class":596},[40,79217,3488],{"class":50},[40,79219,79220],{"class":94},"'哈哈哈哈哈哈哈'",[40,79222,79050],{"class":50},[40,79224,78674],{"class":997},[40,79226,79227],{"class":42,"line":13063},[40,79228,1413],{"emptyLinePlaceholder":1412},[40,79230,79231],{"class":42,"line":13086},[40,79232,79233],{"class":997},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[40,79235,79236,79238,79240,79242,79244,79246,79249,79251,79253,79255,79257,79259,79262,79264],{"class":42,"line":13110},[40,79237,77048],{"class":50},[40,79239,61545],{"class":596},[40,79241,3488],{"class":50},[40,79243,4063],{"class":94},[40,79245,4443],{"class":1283},[40,79247,79248],{"class":63},"[abc]",[40,79250,3782],{"class":1283},[40,79252,4063],{"class":94},[40,79254,4037],{"class":50},[40,79256,78540],{"class":596},[40,79258,3488],{"class":50},[40,79260,79261],{"class":94},"'a'",[40,79263,78548],{"class":50},[40,79265,78551],{"class":997},[40,79267,79268,79270,79272,79274,79276,79278,79280,79282,79284,79286,79288,79290,79293,79295],{"class":42,"line":13115},[40,79269,77048],{"class":50},[40,79271,61545],{"class":596},[40,79273,3488],{"class":50},[40,79275,4063],{"class":94},[40,79277,4443],{"class":1283},[40,79279,79248],{"class":63},[40,79281,3782],{"class":1283},[40,79283,4063],{"class":94},[40,79285,4037],{"class":50},[40,79287,78540],{"class":596},[40,79289,3488],{"class":50},[40,79291,79292],{"class":94},"'b'",[40,79294,78548],{"class":50},[40,79296,78551],{"class":997},[40,79298,79299,79301,79303,79305,79307,79309,79311,79313,79315,79317,79319,79321,79324,79326],{"class":42,"line":13120},[40,79300,77048],{"class":50},[40,79302,61545],{"class":596},[40,79304,3488],{"class":50},[40,79306,4063],{"class":94},[40,79308,4443],{"class":1283},[40,79310,79248],{"class":63},[40,79312,3782],{"class":1283},[40,79314,4063],{"class":94},[40,79316,4037],{"class":50},[40,79318,78540],{"class":596},[40,79320,3488],{"class":50},[40,79322,79323],{"class":94},"'c'",[40,79325,78548],{"class":50},[40,79327,78551],{"class":997},[40,79329,79330,79332,79334,79336,79338,79340,79342,79344,79346,79348,79351,79353],{"class":42,"line":13125},[40,79331,77048],{"class":50},[40,79333,61545],{"class":596},[40,79335,3488],{"class":50},[40,79337,4063],{"class":94},[40,79339,79248],{"class":63},[40,79341,4063],{"class":94},[40,79343,4037],{"class":50},[40,79345,78540],{"class":596},[40,79347,3488],{"class":50},[40,79349,79350],{"class":94},"'ab'",[40,79352,78548],{"class":50},[40,79354,78551],{"class":997},[40,79356,79357,79359,79361,79363,79365,79367,79369,79371,79373,79375,79377,79379,79381,79383],{"class":42,"line":13134},[40,79358,77048],{"class":50},[40,79360,61545],{"class":596},[40,79362,3488],{"class":50},[40,79364,4063],{"class":94},[40,79366,4443],{"class":1283},[40,79368,79248],{"class":63},[40,79370,3782],{"class":1283},[40,79372,4063],{"class":94},[40,79374,4037],{"class":50},[40,79376,78540],{"class":596},[40,79378,3488],{"class":50},[40,79380,79350],{"class":94},[40,79382,78548],{"class":50},[40,79384,79385],{"class":997},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[40,79387,79388,79390,79392,79394,79396,79398,79400,79403,79405,79407,79409,79411,79413,79415],{"class":42,"line":13139},[40,79389,77048],{"class":50},[40,79391,61545],{"class":596},[40,79393,3488],{"class":50},[40,79395,4063],{"class":94},[40,79397,4443],{"class":1283},[40,79399,79248],{"class":63},[40,79401,79402],{"class":1283},"{2}$",[40,79404,4063],{"class":94},[40,79406,4037],{"class":50},[40,79408,78540],{"class":596},[40,79410,3488],{"class":50},[40,79412,79350],{"class":94},[40,79414,78548],{"class":50},[40,79416,79417],{"class":997},"\u002F\u002Ftrue   可以选两个\n",[40,79419,79420,79422,79424,79426,79428,79430,79433,79435,79437,79439,79441,79443,79446,79448],{"class":42,"line":13145},[40,79421,77048],{"class":50},[40,79423,61545],{"class":596},[40,79425,3488],{"class":50},[40,79427,4063],{"class":94},[40,79429,4443],{"class":1283},[40,79431,79432],{"class":63},"[a-z]",[40,79434,3782],{"class":1283},[40,79436,4063],{"class":94},[40,79438,4037],{"class":50},[40,79440,78540],{"class":596},[40,79442,3488],{"class":50},[40,79444,79445],{"class":94},"'p'",[40,79447,78604],{"class":50},[40,79449,79450],{"class":997},"\u002F\u002Ftrue   依然只能选一个\n",[40,79452,79453,79455,79457,79459,79461,79463,79466,79468,79470,79472,79474,79476,79478,79480],{"class":42,"line":13166},[40,79454,77048],{"class":50},[40,79456,61545],{"class":596},[40,79458,3488],{"class":50},[40,79460,4063],{"class":94},[40,79462,4443],{"class":1283},[40,79464,79465],{"class":63},"[A-Z]",[40,79467,3782],{"class":1283},[40,79469,4063],{"class":94},[40,79471,4037],{"class":50},[40,79473,78540],{"class":596},[40,79475,3488],{"class":50},[40,79477,79445],{"class":94},[40,79479,78604],{"class":50},[40,79481,78674],{"class":997},[40,79483,79484,79486,79488,79490,79492,79494,79496,79498,79500,79502,79504,79506,79509,79511],{"class":42,"line":13172},[40,79485,77048],{"class":50},[40,79487,61545],{"class":596},[40,79489,3488],{"class":50},[40,79491,4063],{"class":94},[40,79493,4443],{"class":1283},[40,79495,79465],{"class":63},[40,79497,3782],{"class":1283},[40,79499,4063],{"class":94},[40,79501,4037],{"class":50},[40,79503,78540],{"class":596},[40,79505,3488],{"class":50},[40,79507,79508],{"class":94},"'P'",[40,79510,78604],{"class":50},[40,79512,78551],{"class":997},[40,79514,79515,79517,79519,79521,79523,79525,79528,79530,79532,79534,79536,79538,79541,79543],{"class":42,"line":13186},[40,79516,77048],{"class":50},[40,79518,61545],{"class":596},[40,79520,3488],{"class":50},[40,79522,4063],{"class":94},[40,79524,4443],{"class":1283},[40,79526,79527],{"class":63},"[0-9]",[40,79529,3782],{"class":1283},[40,79531,4063],{"class":94},[40,79533,4037],{"class":50},[40,79535,78540],{"class":596},[40,79537,3488],{"class":50},[40,79539,79540],{"class":94},"'0'",[40,79542,78604],{"class":50},[40,79544,78551],{"class":997},[40,79546,79547,79549,79551,79553,79555,79557,79560,79562,79564,79566,79568,79570,79572,79574],{"class":42,"line":13192},[40,79548,77048],{"class":50},[40,79550,61545],{"class":596},[40,79552,3488],{"class":50},[40,79554,4063],{"class":94},[40,79556,4443],{"class":1283},[40,79558,79559],{"class":63},"[a-zA-Z0-9]",[40,79561,3782],{"class":1283},[40,79563,4063],{"class":94},[40,79565,4037],{"class":50},[40,79567,78540],{"class":596},[40,79569,3488],{"class":50},[40,79571,79445],{"class":94},[40,79573,78548],{"class":50},[40,79575,78551],{"class":997},[40,79577,79578,79580,79582],{"class":42,"line":13219},[40,79579,55715],{"class":50},[40,79581,55111],{"class":46},[40,79583,54606],{"class":50},[40,79585,79586,79588,79590],{"class":42,"line":13228},[40,79587,55083],{"class":50},[40,79589,55098],{"class":46},[40,79591,54606],{"class":50},[40,79593,79594],{"class":42,"line":13234},[40,79595,1413],{"emptyLinePlaceholder":1412},[40,79597,79598,79600,79602],{"class":42,"line":13242},[40,79599,55083],{"class":50},[40,79601,53935],{"class":46},[40,79603,54606],{"class":50},[2423,79605,79607],{"id":79606},"_3624-修饰符","3.6.2.4 修饰符",[19,79609,79610],{},[438,79611],{"alt":36,"src":79612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,79614,79615],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,79617,79618],{},[438,79619],{"alt":36,"src":79620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[31,79622,79624],{"className":53933,"code":79623,"language":53935,"meta":36,"style":36},"\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",[26,79625,79626,79636,79650,79658,79672,79692,79704,79712,79720,79728,79760,79791,79796,79828,79839,79872,79881,79889,79897],{"__ignoreMap":36},[40,79627,79628,79630,79632,79634],{"class":42,"line":43},[40,79629,54597],{"class":50},[40,79631,54600],{"class":46},[40,79633,54603],{"class":596},[40,79635,54606],{"class":50},[40,79637,79638,79640,79642,79644,79646,79648],{"class":42,"line":54},[40,79639,4387],{"class":50},[40,79641,53935],{"class":46},[40,79643,54615],{"class":596},[40,79645,1284],{"class":50},[40,79647,54620],{"class":94},[40,79649,54606],{"class":50},[40,79651,79652,79654,79656],{"class":42,"line":70},[40,79653,4387],{"class":50},[40,79655,54633],{"class":46},[40,79657,54606],{"class":50},[40,79659,79660,79662,79664,79666,79668,79670],{"class":42,"line":78},[40,79661,55442],{"class":50},[40,79663,54643],{"class":46},[40,79665,54646],{"class":596},[40,79667,1284],{"class":50},[40,79669,54651],{"class":94},[40,79671,54606],{"class":50},[40,79673,79674,79676,79678,79680,79682,79684,79686,79688,79690],{"class":42,"line":86},[40,79675,55442],{"class":50},[40,79677,54643],{"class":46},[40,79679,18242],{"class":596},[40,79681,1284],{"class":50},[40,79683,54690],{"class":94},[40,79685,54670],{"class":596},[40,79687,1284],{"class":50},[40,79689,54697],{"class":94},[40,79691,54606],{"class":50},[40,79693,79694,79696,79698,79700,79702],{"class":42,"line":100},[40,79695,55442],{"class":50},[40,79697,54706],{"class":46},[40,79699,54709],{"class":50},[40,79701,54706],{"class":46},[40,79703,54606],{"class":50},[40,79705,79706,79708,79710],{"class":42,"line":108},[40,79707,55083],{"class":50},[40,79709,54633],{"class":46},[40,79711,54606],{"class":50},[40,79713,79714,79716,79718],{"class":42,"line":121},[40,79715,4387],{"class":50},[40,79717,55098],{"class":46},[40,79719,54606],{"class":50},[40,79721,79722,79724,79726],{"class":42,"line":134},[40,79723,55442],{"class":50},[40,79725,55111],{"class":46},[40,79727,54606],{"class":50},[40,79729,79730,79732,79734,79736,79738,79740,79743,79745,79747,79749,79751,79753,79756,79758],{"class":42,"line":146},[40,79731,77048],{"class":50},[40,79733,61545],{"class":596},[40,79735,3488],{"class":50},[40,79737,4063],{"class":94},[40,79739,4443],{"class":1283},[40,79741,79742],{"class":51277},"java",[40,79744,3782],{"class":1283},[40,79746,4063],{"class":94},[40,79748,4037],{"class":50},[40,79750,78540],{"class":596},[40,79752,3488],{"class":50},[40,79754,79755],{"class":94},"'java'",[40,79757,79050],{"class":50},[40,79759,78551],{"class":997},[40,79761,79762,79764,79766,79768,79770,79772,79774,79776,79778,79780,79782,79784,79787,79789],{"class":42,"line":154},[40,79763,77048],{"class":50},[40,79765,61545],{"class":596},[40,79767,3488],{"class":50},[40,79769,4063],{"class":94},[40,79771,4443],{"class":1283},[40,79773,79742],{"class":51277},[40,79775,3782],{"class":1283},[40,79777,4063],{"class":94},[40,79779,4037],{"class":50},[40,79781,78540],{"class":596},[40,79783,3488],{"class":50},[40,79785,79786],{"class":94},"'Java'",[40,79788,79050],{"class":50},[40,79790,78674],{"class":997},[40,79792,79793],{"class":42,"line":162},[40,79794,79795],{"class":997},"    \u002F\u002F 不区分大小写、\n",[40,79797,79798,79800,79802,79804,79806,79808,79810,79812,79814,79816,79818,79820,79822,79824,79826],{"class":42,"line":170},[40,79799,77048],{"class":50},[40,79801,61545],{"class":596},[40,79803,3488],{"class":50},[40,79805,4063],{"class":94},[40,79807,4443],{"class":1283},[40,79809,79742],{"class":51277},[40,79811,3782],{"class":1283},[40,79813,4063],{"class":94},[40,79815,3920],{"class":1283},[40,79817,4037],{"class":50},[40,79819,78540],{"class":596},[40,79821,3488],{"class":50},[40,79823,79786],{"class":94},[40,79825,79050],{"class":50},[40,79827,78551],{"class":997},[40,79829,79830,79832,79834,79836],{"class":42,"line":183},[40,79831,14543],{"class":1283},[40,79833,77214],{"class":63},[40,79835,16886],{"class":1283},[40,79837,79838],{"class":94}," 'java是一门编程语言，学完java工资很高'\n",[40,79840,79841,79843,79846,79848,79851,79854,79856,79858,79860,79862,79865,79867,79870],{"class":42,"line":196},[40,79842,14543],{"class":1283},[40,79844,79845],{"class":63}," result",[40,79847,16886],{"class":1283},[40,79849,79850],{"class":50}," str.",[40,79852,79853],{"class":596},"replace",[40,79855,3488],{"class":50},[40,79857,4063],{"class":94},[40,79859,79742],{"class":51277},[40,79861,4063],{"class":94},[40,79863,79864],{"class":1283},"ig",[40,79866,15757],{"class":50},[40,79868,79869],{"class":94},"'前端'",[40,79871,1811],{"class":50},[40,79873,79874,79876,79878],{"class":42,"line":204},[40,79875,77048],{"class":50},[40,79877,61545],{"class":596},[40,79879,79880],{"class":50},"(result)\n",[40,79882,79883,79885,79887],{"class":42,"line":217},[40,79884,55715],{"class":50},[40,79886,55111],{"class":46},[40,79888,54606],{"class":50},[40,79890,79891,79893,79895],{"class":42,"line":230},[40,79892,55083],{"class":50},[40,79894,55098],{"class":46},[40,79896,54606],{"class":50},[40,79898,79899,79901,79903],{"class":42,"line":238},[40,79900,55083],{"class":50},[40,79902,53935],{"class":46},[40,79904,54606],{"class":50},[3384,79906,79907],{},"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":36,"searchDepth":54,"depth":54,"links":79909},[79910,79920,79932,79949,79956,79964],{"id":56658,"depth":54,"text":56659,"children":79911},[79912,79913,79914,79915,79916,79917,79918,79919],{"id":56662,"depth":70,"text":56663},{"id":56695,"depth":70,"text":56696},{"id":56734,"depth":70,"text":56735},{"id":56892,"depth":70,"text":56893},{"id":56940,"depth":70,"text":56941},{"id":57077,"depth":70,"text":57078},{"id":57399,"depth":70,"text":57400},{"id":60387,"depth":70,"text":60388},{"id":60415,"depth":54,"text":60416,"children":79921},[79922,79923,79924,79925,79926,79927,79928,79929,79930,79931],{"id":60419,"depth":70,"text":60420},{"id":60442,"depth":70,"text":60443},{"id":61357,"depth":70,"text":61358},{"id":62047,"depth":70,"text":62048},{"id":62329,"depth":70,"text":62330},{"id":66490,"depth":70,"text":66491},{"id":66660,"depth":70,"text":66661},{"id":66788,"depth":70,"text":66789},{"id":66813,"depth":70,"text":66814},{"id":68202,"depth":70,"text":68203},{"id":69355,"depth":54,"text":69356,"children":79933},[79934,79935,79936,79937,79938,79939,79940,79941,79942,79943,79944,79945,79946,79947,79948],{"id":69359,"depth":70,"text":69360},{"id":70013,"depth":70,"text":70014},{"id":71708,"depth":70,"text":71709},{"id":71749,"depth":70,"text":71750},{"id":71791,"depth":70,"text":71792},{"id":71805,"depth":70,"text":71806},{"id":71854,"depth":70,"text":71855},{"id":71866,"depth":70,"text":71867},{"id":71881,"depth":70,"text":71882},{"id":71917,"depth":70,"text":71918},{"id":71998,"depth":70,"text":71999},{"id":72126,"depth":70,"text":72127},{"id":72138,"depth":70,"text":72139},{"id":72157,"depth":70,"text":72158},{"id":74266,"depth":70,"text":74267},{"id":74285,"depth":54,"text":74286,"children":79950},[79951,79952,79953,79954,79955],{"id":74306,"depth":70,"text":74307},{"id":74326,"depth":70,"text":74327},{"id":74375,"depth":70,"text":74376},{"id":74500,"depth":70,"text":74501},{"id":74681,"depth":70,"text":74682},{"id":74699,"depth":54,"text":74700,"children":79957},[79958,79959,79960,79961,79962,79963],{"id":74714,"depth":70,"text":74715},{"id":74773,"depth":70,"text":74774},{"id":74797,"depth":70,"text":74798},{"id":75116,"depth":70,"text":75117},{"id":75148,"depth":70,"text":75149},{"id":75171,"depth":70,"text":75172},{"id":78239,"depth":54,"text":78240,"children":79965},[79966,79967],{"id":78273,"depth":70,"text":78274},{"id":78312,"depth":70,"text":78313},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":56630,"description":3413},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":79974,"title":79975,"body":79976,"description":3413,"extension":3414,"meta":96113,"navigation":1412,"path":96114,"seo":96115,"stem":96116,"__hash__":96117},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":79977,"toc":96049},[79978,79981,79984,79988,79992,79997,80002,80013,80017,80022,80025,80029,80032,80037,80041,80045,80048,80053,80056,80060,80063,80071,80074,80078,80083,80088,80091,80095,80100,80105,80108,80112,80117,80120,80125,80128,80133,80136,80141,80146,80149,80152,80156,80161,80166,80169,80173,80177,80180,80183,80186,80190,80194,80199,80204,80207,80211,80216,80221,80224,80227,80230,80233,80236,80239,80242,80245,80248,80253,80257,80262,80267,80270,80273,80276,80279,80282,80285,80288,80291,80295,80299,80302,80305,80308,80313,80315,80318,80321,80324,80327,80330,80333,80336,80339,80342,80345,80348,80351,80354,80359,80364,80369,80372,80376,80379,80384,80388,80390,80401,80406,80507,80510,80513,80516,80519,80522,80525,80528,80531,80533,80536,80539,80542,80545,80548,80550,80553,80556,80559,80562,80565,80568,80570,80573,80575,80577,80580,80584,80588,80591,80594,80597,80600,80603,80606,80609,80612,80615,80620,80740,80743,80746,80751,80754,80757,80760,80763,80768,80771,80774,80777,80780,80785,80788,80888,80953,81027,81031,81034,81037,81041,81044,81058,81087,81090,81093,81096,81099,81102,81105,81108,81110,81113,81116,81119,81122,81126,81131,81135,81140,81215,81218,81401,81404,81407,81410,81413,81416,81418,81421,81424,81427,81430,81433,81436,81438,81442,81445,81450,81453,81456,81459,81462,81464,81469,81472,81475,81478,81481,81483,81488,81491,81494,81496,81498,81501,81505,81508,81511,81516,81519,81522,81525,81575,81580,81584,81589,81592,81661,81664,81673,81677,81682,81685,81688,81696,81699,81716,83518,83522,83526,83531,83534,83538,83544,83550,83702,83707,83712,83715,83718,83721,83724,83727,83730,83733,83736,83739,83742,83745,83748,83753,83757,83760,83771,83775,83780,83783,83786,83789,83792,83795,83797,83800,83803,83806,83809,83811,83828,83831,83835,83838,83843,83848,83851,83854,83858,83861,83864,83873,83876,83880,83883,83888,83893,83960,83964,83967,83970,83975,83980,84066,84071,84075,84078,84081,84096,84099,84104,84108,84113,84222,84225,84236,84386,84390,84395,84504,84508,84513,84518,84523,84526,84533,84553,84589,84753,84758,84761,84766,84773,84776,84779,84782,84841,84897,84953,84957,84962,85277,85280,85284,85287,85292,85401,85406,85410,85415,85419,85490,85494,85496,85499,85502,85540,85816,85820,85837,85903,85937,85941,85944,85949,85978,85985,85994,85999,86014,86019,86028,86031,86168,86172,86234,86238,86243,86488,86492,86497,86500,86503,86506,86509,86513,86518,88099,88103,88107,88113,88116,88121,88125,88128,88133,88136,88147,88151,88156,88160,88165,88170,88173,88178,88182,88186,88189,88194,88199,88202,88205,88208,88330,88335,88437,88440,88443,88447,88452,88624,88629,88633,88636,88641,88707,88712,88715,88846,88849,88854,88857,88860,88951,88956,88959,88962,88965,88968,88973,88978,88981,88986,88991,88996,89000,89003,89006,89011,89016,89021,89026,89080,89083,89086,89091,89094,89097,89102,89107,89112,89116,89121,89135,89140,89143,89148,89152,89157,89162,89167,89172,89177,89182,89187,89192,89195,89199,89204,89207,89210,89213,89218,89223,89226,89229,89233,89236,89239,89244,89249,89254,89259,89262,89267,89272,89333,89338,89341,89346,90587,90592,90596,90600,90605,90608,90613,90618,90621,90626,90628,90633,90637,90640,90643,90654,90658,90663,90668,90723,90728,90733,90738,90949,90954,90958,90963,90966,90968,90971,90974,91421,91426,91433,91439,91442,91445,91709,91714,91718,91983,91988,91992,91997,92002,92007,92012,92343,92346,92351,92356,92359,92363,92367,92372,92377,92382,92387,92392,92397,92401,92404,92409,92414,92417,92491,92496,92501,92506,92508,92511,92881,92886,92891,92896,92899,92902,93004,93009,93014,93117,93121,93126,93130,93134,93139,93144,93147,93152,93155,93158,93551,93556,93559,93562,93565,93568,94088,94092,94097,94102,94107,94110,94115,94118,94121,94503,94508,94510,94512,94515,94518,95030,95034,95095,95098,95101,95104,95108,95111,95116,95121,96046],[10,79979,79975],{"id":79980},"_4js进阶",[19,79982,79983],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,79985,79987],{"id":79986},"_41-作用域","4.1 作用域",[402,79989,79991],{"id":79990},"_411-局部作用域","4.1.1 局部作用域",[19,79993,79994],{},[438,79995],{"alt":36,"src":79996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,79998,79999],{},[438,80000],{"alt":36,"src":80001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1338,80003,80004,80007,80010],{},[495,80005,80006],{},"函数作用域在函数内部",[495,80008,80009],{},"块级作用域在{}",[495,80011,80012],{},"对象的那个{}不是作用域，不是块作用域",[402,80014,80016],{"id":80015},"_412-全局作用域","4.1.2 全局作用域",[19,80018,80019],{},[438,80020],{"alt":36,"src":80021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,80023,80024],{},"window.a=10不要这样写",[402,80026,80028],{"id":80027},"_413-作用域链","4.1.3 作用域链",[19,80030,80031],{},"变量查找机制",[19,80033,80034],{},[438,80035],{"alt":36,"src":80036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,80038,80040],{"id":80039},"_42-垃圾回收机制","4.2 垃圾回收机制",[402,80042,80044],{"id":80043},"_421-大体介绍","4.2.1 大体介绍",[19,80046,80047],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,80049,80050],{},[438,80051],{"alt":36,"src":80052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,80054,80055],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[402,80057,80059],{"id":80058},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,80061,80062],{},"堆栈空间分配区别：",[492,80064,80065,80068],{},[495,80066,80067],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[495,80069,80070],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,80072,80073],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[2423,80075,80077],{"id":80076},"_4221-引用计数","4.2.2.1 引用计数",[19,80079,80080],{},[438,80081],{"alt":36,"src":80082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,80084,80085],{},[438,80086],{"alt":36,"src":80087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,80089,80090],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[2423,80092,80094],{"id":80093},"_4222-标记清除法","4.2.2.2 标记清除法",[19,80096,80097],{},[438,80098],{"alt":36,"src":80099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,80101,80102],{},[438,80103],{"alt":36,"src":80104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,80106,80107],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,80109,80111],{"id":80110},"_43-闭包","4.3 闭包",[19,80113,80114],{},[438,80115],{"alt":36,"src":80116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,80118,80119],{},"闭包：内层函数+外层函数的变量",[19,80121,80122],{},[438,80123],{"alt":36,"src":80124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,80126,80127],{},"closure就是闭包",[19,80129,80130],{},[438,80131],{"alt":36,"src":80132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,80134,80135],{},"内层函数必须包含外层函数的变量才是闭包",[19,80137,80138],{},[438,80139],{"alt":36,"src":80140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,80142,80143],{},[438,80144],{"alt":36,"src":80145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,80147,80148],{},"闭包可能会引起内存泄漏",[19,80150,80151],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,80153,80155],{"id":80154},"_44-变量提升","4.4 变量提升",[19,80157,80158],{},[438,80159],{"alt":36,"src":80160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,80162,80163],{},[438,80164],{"alt":36,"src":80165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,80167,80168],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,80170,80172],{"id":80171},"_45-函数进阶","4.5 函数进阶",[402,80174,80176],{"id":80175},"_451-函数提升","4.5.1 函数提升",[19,80178,80179],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,80181,80182],{},"只提升函数声明，不提升函数调用",[55111,80184,80185],{},"\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",[402,80187,80189],{"id":80188},"_452-函数参数","4.5.2 函数参数",[2423,80191,80193],{"id":80192},"_4521-动态参数","4.5.2.1 动态参数",[19,80195,80196],{},[438,80197],{"alt":36,"src":80198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,80200,80201],{},[438,80202],{"alt":36,"src":80203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,80205,80206],{},"箭头函数里边没有arguments",[2423,80208,80210],{"id":80209},"_4522-剩余参数","4.5.2.2 剩余参数",[19,80212,80213],{},[438,80214],{"alt":36,"src":80215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,80217,80218],{},[438,80219],{"alt":36,"src":80220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,80222,80223],{},"剩余参数使用的时候不需要写...",[19,80225,80226],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,80228,80229],{},"  function getSum(a,b,...arr) {",[19,80231,80232],{},"  console.log(11)",[19,80234,80235],{},"  }",[19,80237,80238],{},"  getSum(1,2,3,4)",[19,80240,80241],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,80243,80244],{},"  getSum(1,2)",[19,80246,80247],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,80249,80250],{},[438,80251],{"alt":36,"src":80252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[2423,80254,80256],{"id":80255},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,80258,80259],{},[438,80260],{"alt":36,"src":80261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,80263,80264],{},[438,80265],{"alt":36,"src":80266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,80268,80269],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,80271,80272],{},"展开运算符可以用于数组之间的合并：",[19,80274,80275],{},"const arr1 = [1, 2, 3]",[19,80277,80278],{},"const arr2 = [3, 4, 5]",[19,80280,80281],{},"const arr = [...arr1, ...arr2]",[19,80283,80284],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,80286,80287],{},"剩余参数：函数参数使用，得到真数组",[19,80289,80290],{},"展开运算符：数组中使用，数组展开",[402,80292,80294],{"id":80293},"_453-箭头函数","4.5.3 箭头函数",[2423,80296,80298],{"id":80297},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,80300,80301],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,80303,80304],{},"它不是万能的！！！",[19,80306,80307],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,80309,80310],{},[438,80311],{"alt":36,"src":80312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,80314,3516],{},[19,80316,80317],{},"① 只有一个形参的时候，可以省略小括号：",[19,80319,80320],{},"const fn=x=>{console.log(x)}",[19,80322,80323],{},"② 只有一行代码时可以省略大括号：",[19,80325,80326],{},"const fn=x=>console.log(11)",[19,80328,80329],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,80331,80332],{},"const fn=x=>x+x",[19,80334,80335],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,80337,80338],{},"⑤ 阻止表单默认提交：",[19,80340,80341],{},"const form = document.querySelector('form')",[19,80343,80344],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,80346,80347],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,80349,80350],{},"const fn=uname=>({uname:uname})",[19,80352,80353],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,80355,80356],{},[438,80357],{"alt":36,"src":80358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,80360,80361],{},[438,80362],{"alt":36,"src":80363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,80365,80366],{},[438,80367],{"alt":36,"src":80368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,80370,80371],{},"一定不要忘记用()，有()就理解为自带return",[2423,80373,80375],{"id":80374},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,80377,80378],{},"箭头函数是没有动态参数的arguments",[19,80380,80381],{},[438,80382],{"alt":36,"src":80383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[2423,80385,80387],{"id":80386},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,80389,14654],{},[492,80391,80392,80395,80398],{},[495,80393,80394],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[495,80396,80397],{},"事件回调函数使用箭头函数时，this 为全局的 window",[495,80399,80400],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,80402,80403],{},[438,80404],{"alt":36,"src":80405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[31,80407,80409],{"className":56365,"code":80408,"language":56367,"meta":36,"style":36},"  \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",[26,80410,80411,80419,80424,80429,80434,80439,80444,80448,80453,80457,80461,80466,80471,80476,80480,80484,80489,80494,80499],{"__ignoreMap":36},[40,80412,80413,80415,80417],{"class":42,"line":43},[40,80414,55442],{"class":50},[40,80416,55111],{"class":46},[40,80418,54606],{"class":50},[40,80420,80421],{"class":42,"line":54},[40,80422,80423],{"class":50},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[40,80425,80426],{"class":42,"line":70},[40,80427,80428],{"class":50},"    console.log(this) \u002F\u002F指向window\n",[40,80430,80431],{"class":42,"line":78},[40,80432,80433],{"class":50},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[40,80435,80436],{"class":42,"line":86},[40,80437,80438],{"class":50},"    function fn() {\n",[40,80440,80441],{"class":42,"line":100},[40,80442,80443],{"class":50},"      console.log(this)  \u002F\u002F指向window\n",[40,80445,80446],{"class":42,"line":108},[40,80447,5513],{"class":50},[40,80449,80450],{"class":42,"line":121},[40,80451,80452],{"class":50},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[40,80454,80455],{"class":42,"line":134},[40,80456,1413],{"emptyLinePlaceholder":1412},[40,80458,80459],{"class":42,"line":146},[40,80460,74819],{"class":50},[40,80462,80463],{"class":42,"line":154},[40,80464,80465],{"class":50},"      name: 'andy',\n",[40,80467,80468],{"class":42,"line":162},[40,80469,80470],{"class":50},"      sayHai: function () {\n",[40,80472,80473],{"class":42,"line":170},[40,80474,80475],{"class":50},"        console.log(this)\n",[40,80477,80478],{"class":42,"line":183},[40,80479,55696],{"class":50},[40,80481,80482],{"class":42,"line":196},[40,80483,5513],{"class":50},[40,80485,80486],{"class":42,"line":204},[40,80487,80488],{"class":50},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[40,80490,80491],{"class":42,"line":217},[40,80492,80493],{"class":50},"    \u002F\u002F 2.箭头函数的this\n",[40,80495,80496],{"class":42,"line":230},[40,80497,80498],{"class":50},"    const fn = () => console.log(this)\n",[40,80500,80501,80503,80505],{"class":42,"line":238},[40,80502,55715],{"class":50},[40,80504,55111],{"class":46},[40,80506,54606],{"class":50},[19,80508,80509],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,80511,80512],{},"const fn = () => console.log(this)",[19,80514,80515],{},"fn() \u002F\u002F指向window",[19,80517,80518],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,80520,80521],{},"①",[19,80523,80524],{},"const obj = {",[19,80526,80527],{},"uname: 'pink老师',",[19,80529,80530],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,80532,4423],{},[19,80534,80535],{},"调用对象里边的函数",[19,80537,80538],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,80540,80541],{},"obj.sayHai()",[19,80543,80544],{},"②",[19,80546,80547],{},"const obj1 = {",[19,80549,80527],{},[19,80551,80552],{},"sayHai: function () {",[19,80554,80555],{},"let i = 10",[19,80557,80558],{},"const count = () => {",[19,80560,80561],{},"console.log(this)",[19,80563,80564],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,80566,80567],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,80569,4423],{},[19,80571,80572],{},"count()",[19,80574,4423],{},[19,80576,4423],{},[19,80578,80579],{},"obj1.sayHai()",[14,80581,80583],{"id":80582},"_46-解构赋值","4.6 解构赋值",[402,80585,80587],{"id":80586},"_461-数组解构","4.6.1 数组解构",[19,80589,80590],{},"以前要是使用数组中的值的话：",[19,80592,80593],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,80595,80596],{},"const arr=[100,60,80]",[19,80598,80599],{},"const max=arr[0]",[19,80601,80602],{},"const min=arr[1]",[19,80604,80605],{},"const avg=arr[2]",[19,80607,80608],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,80610,80611],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,80613,80614],{},"这个写法就类似于上边的那种用很多const的方法",[19,80616,80617],{},[438,80618],{"alt":36,"src":80619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[31,80621,80623],{"className":53933,"code":80622,"language":53935,"meta":36,"style":36},"①变量之间交换值:\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",[26,80624,80625,80630,80635,80640,80645,80650,80654,80658,80663,80667,80672,80677,80681,80686,80691,80702,80712,80717,80722,80727,80731,80735],{"__ignoreMap":36},[40,80626,80627],{"class":42,"line":43},[40,80628,80629],{"class":50},"①变量之间交换值:\n",[40,80631,80632],{"class":42,"line":54},[40,80633,80634],{"class":50},"let a=1\n",[40,80636,80637],{"class":42,"line":70},[40,80638,80639],{"class":50},"let b=2;\n",[40,80641,80642],{"class":42,"line":78},[40,80643,80644],{"class":50},"必须加这行代码，不然就会报错\n",[40,80646,80647],{"class":42,"line":86},[40,80648,80649],{"class":50},"[b,a]=[a,b]\n",[40,80651,80652],{"class":42,"line":100},[40,80653,1413],{"emptyLinePlaceholder":1412},[40,80655,80656],{"class":42,"line":108},[40,80657,1413],{"emptyLinePlaceholder":1412},[40,80659,80660],{"class":42,"line":121},[40,80661,80662],{"class":50},"可以写成下面的方式：\n",[40,80664,80665],{"class":42,"line":134},[40,80666,80634],{"class":50},[40,80668,80669],{"class":42,"line":146},[40,80670,80671],{"class":50},"let b=2\n",[40,80673,80674],{"class":42,"line":154},[40,80675,80676],{"class":50},";[b,a]=[a,b]\n",[40,80678,80679],{"class":42,"line":162},[40,80680,1413],{"emptyLinePlaceholder":1412},[40,80682,80683],{"class":42,"line":170},[40,80684,80685],{"class":50},"②排序\n",[40,80687,80688],{"class":42,"line":183},[40,80689,80690],{"class":50},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[40,80692,80693,80696,80699],{"class":42,"line":196},[40,80694,80695],{"class":50},"for (let i = 0; i ",[40,80697,4387],{"class":80698},"s7hpK",[40,80700,80701],{"class":50}," arr1.length; i++) {\n",[40,80703,80704,80707,80709],{"class":42,"line":204},[40,80705,80706],{"class":50},"   for (let j = 0; j ",[40,80708,4387],{"class":80698},[40,80710,80711],{"class":50}," arr1.length - 1; j++) {\n",[40,80713,80714],{"class":42,"line":217},[40,80715,80716],{"class":50},"      if (arr1[j] > arr1[j + 1]) {\n",[40,80718,80719],{"class":42,"line":230},[40,80720,80721],{"class":50},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[40,80723,80724],{"class":42,"line":238},[40,80725,80726],{"class":50},"       }\n",[40,80728,80729],{"class":42,"line":251},[40,80730,7632],{"class":50},[40,80732,80733],{"class":42,"line":264},[40,80734,4907],{"class":50},[40,80736,80737],{"class":42,"line":277},[40,80738,80739],{"class":50},"console.log(arr1)\n",[19,80741,80742],{},"数组解构的细节：",[19,80744,80745],{},"①变量多，单元值少",[19,80747,80748],{},[438,80749],{"alt":36,"src":80750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,80752,80753],{},"防止出现undefined的方法：",[19,80755,80756],{},"const [a=0,b=0] =[1]",[19,80758,80759],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,80761,80762],{},"②变量少，单元值多",[19,80764,80765],{},[438,80766],{"alt":36,"src":80767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,80769,80770],{},"此时可以使用剩余参数来接收多余的值",[19,80772,80773],{},"const [a,b,...c]=[1,2,3,4]",[19,80775,80776],{},"console.log(c) 输出[3,4]",[19,80778,80779],{},"③可以按需导入，忽略某些返回值",[19,80781,80782],{},[438,80783],{"alt":36,"src":80784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,80786,80787],{},"④支持多维数组的结构",[31,80789,80793],{"className":80790,"code":80791,"language":80792,"meta":36,"style":36},"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",[26,80794,80795,80823,80839,80854,80869],{"__ignoreMap":36},[40,80796,80797,80799,80801,80803,80805,80807,80809,80811,80814,80816,80818,80820],{"class":42,"line":43},[40,80798,10115],{"class":1283},[40,80800,55131],{"class":50},[40,80802,1284],{"class":1283},[40,80804,55524],{"class":50},[40,80806,3698],{"class":63},[40,80808,15757],{"class":50},[40,80810,64],{"class":63},[40,80812,80813],{"class":50},", [",[40,80815,3555],{"class":63},[40,80817,15757],{"class":50},[40,80819,3773],{"class":63},[40,80821,80822],{"class":50},"]]\n",[40,80824,80825,80828,80830,80832,80834,80836],{"class":42,"line":54},[40,80826,80827],{"class":50},"console.",[40,80829,61545],{"class":596},[40,80831,7174],{"class":50},[40,80833,3672],{"class":63},[40,80835,7539],{"class":50},[40,80837,80838],{"class":997},"  \u002F\u002F1\n",[40,80840,80841,80843,80845,80847,80849,80851],{"class":42,"line":70},[40,80842,80827],{"class":50},[40,80844,61545],{"class":596},[40,80846,7174],{"class":50},[40,80848,3698],{"class":63},[40,80850,7539],{"class":50},[40,80852,80853],{"class":997},"  \u002F\u002F2\n",[40,80855,80856,80858,80860,80862,80864,80866],{"class":42,"line":78},[40,80857,80827],{"class":50},[40,80859,61545],{"class":596},[40,80861,7174],{"class":50},[40,80863,64],{"class":63},[40,80865,7539],{"class":50},[40,80867,80868],{"class":997},"  \u002F\u002F[3,4]\n",[40,80870,80871,80873,80875,80877,80879,80881,80883,80885],{"class":42,"line":86},[40,80872,80827],{"class":50},[40,80874,61545],{"class":596},[40,80876,7174],{"class":50},[40,80878,64],{"class":63},[40,80880,8224],{"class":50},[40,80882,3672],{"class":63},[40,80884,7539],{"class":50},[40,80886,80887],{"class":997},"  \u002F\u002F3\n",[31,80889,80891],{"className":80790,"code":80890,"language":80792,"meta":36,"style":36},"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",[26,80892,80893,80920,80931,80942],{"__ignoreMap":36},[40,80894,80895,80897,80900,80902,80904,80906,80908,80910,80912,80914,80916,80918],{"class":42,"line":43},[40,80896,10115],{"class":1283},[40,80898,80899],{"class":50}," [a, b, c] ",[40,80901,1284],{"class":1283},[40,80903,55524],{"class":50},[40,80905,3698],{"class":63},[40,80907,15757],{"class":50},[40,80909,64],{"class":63},[40,80911,80813],{"class":50},[40,80913,3555],{"class":63},[40,80915,15757],{"class":50},[40,80917,3773],{"class":63},[40,80919,80822],{"class":50},[40,80921,80922,80924,80926,80929],{"class":42,"line":54},[40,80923,80827],{"class":50},[40,80925,61545],{"class":596},[40,80927,80928],{"class":50},"(a)",[40,80930,80838],{"class":997},[40,80932,80933,80935,80937,80940],{"class":42,"line":70},[40,80934,80827],{"class":50},[40,80936,61545],{"class":596},[40,80938,80939],{"class":50},"(b)",[40,80941,80853],{"class":997},[40,80943,80944,80946,80948,80951],{"class":42,"line":78},[40,80945,80827],{"class":50},[40,80947,61545],{"class":596},[40,80949,80950],{"class":50},"(c)",[40,80952,80868],{"class":997},[31,80954,80956],{"className":80790,"code":80955,"language":80792,"meta":36,"style":36},"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",[26,80957,80958,80985,80995,81005,81015],{"__ignoreMap":36},[40,80959,80960,80962,80965,80967,80969,80971,80973,80975,80977,80979,80981,80983],{"class":42,"line":43},[40,80961,10115],{"class":1283},[40,80963,80964],{"class":50}," [a, b, [c, d]] ",[40,80966,1284],{"class":1283},[40,80968,55524],{"class":50},[40,80970,3698],{"class":63},[40,80972,15757],{"class":50},[40,80974,64],{"class":63},[40,80976,80813],{"class":50},[40,80978,3555],{"class":63},[40,80980,15757],{"class":50},[40,80982,3773],{"class":63},[40,80984,80822],{"class":50},[40,80986,80987,80989,80991,80993],{"class":42,"line":54},[40,80988,80827],{"class":50},[40,80990,61545],{"class":596},[40,80992,80928],{"class":50},[40,80994,80838],{"class":997},[40,80996,80997,80999,81001,81003],{"class":42,"line":70},[40,80998,80827],{"class":50},[40,81000,61545],{"class":596},[40,81002,80939],{"class":50},[40,81004,80853],{"class":997},[40,81006,81007,81009,81011,81013],{"class":42,"line":78},[40,81008,80827],{"class":50},[40,81010,61545],{"class":596},[40,81012,80950],{"class":50},[40,81014,80887],{"class":997},[40,81016,81017,81019,81021,81024],{"class":42,"line":86},[40,81018,80827],{"class":50},[40,81020,61545],{"class":596},[40,81022,81023],{"class":50},"(d)",[40,81025,81026],{"class":997},"  \u002F\u002F4\n",[402,81028,81030],{"id":81029},"_462-对象解构","4.6.2 对象解构",[19,81032,81033],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,81035,81036],{},"用的非常非常多！！！！！！",[2423,81038,81040],{"id":81039},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,81042,81043],{},"基本语法：",[492,81045,81046,81049,81052,81055],{},[495,81047,81048],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[495,81050,81051],{},"对象属性的值将被赋值给与属性名相同的变量",[495,81053,81054],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[495,81056,81057],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[31,81059,81061],{"className":53933,"code":81060,"language":53935,"meta":36,"style":36},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[26,81062,81063,81068,81073,81078,81082],{"__ignoreMap":36},[40,81064,81065],{"class":42,"line":43},[40,81066,81067],{"class":50},"const obj = {\n",[40,81069,81070],{"class":42,"line":54},[40,81071,81072],{"class":50},"   uname: 'pink老师',\n",[40,81074,81075],{"class":42,"line":70},[40,81076,81077],{"class":50},"   age: 18,\n",[40,81079,81080],{"class":42,"line":78},[40,81081,4907],{"class":50},[40,81083,81084],{"class":42,"line":86},[40,81085,81086],{"class":50},"const { uname, age } = obj\n",[19,81088,81089],{},"上方代码这样写等价于：",[19,81091,81092],{},"const uname等价于obj.uname",[19,81094,81095],{},"变量名可以重新改名：",[19,81097,81098],{},"const uname='red老师'",[19,81100,81101],{},"const user={",[19,81103,81104],{},"  uname:'pink老师',",[19,81106,81107],{},"  age:18",[19,81109,4423],{},[19,81111,81112],{},"const {uname,age}=user",[19,81114,81115],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,81117,81118],{},"const {旧变量名：新变量名}=对象",[19,81120,81121],{},"const {uname:username,age}=user",[2423,81123,81125],{"id":81124},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,81127,81128],{},[438,81129],{"alt":36,"src":81130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[2423,81132,81134],{"id":81133},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,81136,81137],{},[438,81138],{"alt":36,"src":81139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[31,81141,81143],{"className":56365,"code":81142,"language":56367,"meta":36,"style":36},"  \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",[26,81144,81145,81153,81158,81163,81168,81173,81178,81183,81188,81193,81197,81202,81207],{"__ignoreMap":36},[40,81146,81147,81149,81151],{"class":42,"line":43},[40,81148,55442],{"class":50},[40,81150,55111],{"class":46},[40,81152,54606],{"class":50},[40,81154,81155],{"class":42,"line":54},[40,81156,81157],{"class":50},"    const pig = {\n",[40,81159,81160],{"class":42,"line":70},[40,81161,81162],{"class":50},"      name: '佩奇',\n",[40,81164,81165],{"class":42,"line":78},[40,81166,81167],{"class":50},"      family: {\n",[40,81169,81170],{"class":42,"line":86},[40,81171,81172],{"class":50},"        mother: '猪妈妈',\n",[40,81174,81175],{"class":42,"line":100},[40,81176,81177],{"class":50},"        father: '猪爸爸',\n",[40,81179,81180],{"class":42,"line":108},[40,81181,81182],{"class":50},"        sister: '乔治'\n",[40,81184,81185],{"class":42,"line":121},[40,81186,81187],{"class":50},"      },\n",[40,81189,81190],{"class":42,"line":134},[40,81191,81192],{"class":50},"      age: 6\n",[40,81194,81195],{"class":42,"line":146},[40,81196,5513],{"class":50},[40,81198,81199],{"class":42,"line":154},[40,81200,81201],{"class":50},"    \u002F\u002F 多级对象解构\n",[40,81203,81204],{"class":42,"line":162},[40,81205,81206],{"class":50},"    const { name, family: { mother, father, sister }, age } = pig\n",[40,81208,81209,81211,81213],{"class":42,"line":170},[40,81210,55715],{"class":50},[40,81212,55111],{"class":46},[40,81214,54606],{"class":50},[19,81216,81217],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[31,81219,81222],{"className":81220,"code":81221,"language":79742,"meta":36,"style":36},"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",[26,81223,81224,81229,81240,81252,81264,81273,81277,81288,81300,81310,81315,81319,81329,81340,81349,81353,81357,81368,81379,81388,81392,81397],{"__ignoreMap":36},[40,81225,81226],{"class":42,"line":43},[40,81227,81228],{"class":997},"    \u002F\u002F 这是后台传递过来的数据\n",[40,81230,81231,81233,81236,81238],{"class":42,"line":54},[40,81232,14543],{"class":1283},[40,81234,81235],{"class":50}," msg ",[40,81237,1284],{"class":1283},[40,81239,18894],{"class":50},[40,81241,81242,81245,81247,81250],{"class":42,"line":70},[40,81243,81244],{"class":94},"      \"code\"",[40,81246,4336],{"class":1283},[40,81248,81249],{"class":63}," 200",[40,81251,34766],{"class":50},[40,81253,81254,81257,81259,81262],{"class":42,"line":78},[40,81255,81256],{"class":94},"      \"msg\"",[40,81258,4336],{"class":1283},[40,81260,81261],{"class":94}," \"获取新闻列表成功\"",[40,81263,34766],{"class":50},[40,81265,81266,81269,81271],{"class":42,"line":86},[40,81267,81268],{"class":94},"      \"data\"",[40,81270,4336],{"class":1283},[40,81272,58745],{"class":50},[40,81274,81275],{"class":42,"line":100},[40,81276,5835],{"class":50},[40,81278,81279,81282,81284,81286],{"class":42,"line":108},[40,81280,81281],{"class":94},"          \"id\"",[40,81283,4336],{"class":1283},[40,81285,28431],{"class":63},[40,81287,34766],{"class":50},[40,81289,81290,81293,81295,81298],{"class":42,"line":121},[40,81291,81292],{"class":94},"          \"title\"",[40,81294,4336],{"class":1283},[40,81296,81297],{"class":94}," \"5G商用自己，三大运用商收入下降\"",[40,81299,34766],{"class":50},[40,81301,81302,81305,81307],{"class":42,"line":134},[40,81303,81304],{"class":94},"          \"count\"",[40,81306,4336],{"class":1283},[40,81308,81309],{"class":63}," 58\n",[40,81311,81312],{"class":42,"line":146},[40,81313,81314],{"class":50},"        },\n",[40,81316,81317],{"class":42,"line":154},[40,81318,5835],{"class":50},[40,81320,81321,81323,81325,81327],{"class":42,"line":162},[40,81322,81281],{"class":94},[40,81324,4336],{"class":1283},[40,81326,18077],{"class":63},[40,81328,34766],{"class":50},[40,81330,81331,81333,81335,81338],{"class":42,"line":170},[40,81332,81292],{"class":94},[40,81334,4336],{"class":1283},[40,81336,81337],{"class":94}," \"国际媒体头条速览\"",[40,81339,34766],{"class":50},[40,81341,81342,81344,81346],{"class":42,"line":183},[40,81343,81304],{"class":94},[40,81345,4336],{"class":1283},[40,81347,81348],{"class":63}," 56\n",[40,81350,81351],{"class":42,"line":196},[40,81352,81314],{"class":50},[40,81354,81355],{"class":42,"line":204},[40,81356,5835],{"class":50},[40,81358,81359,81361,81363,81366],{"class":42,"line":217},[40,81360,81281],{"class":94},[40,81362,4336],{"class":1283},[40,81364,81365],{"class":63}," 3",[40,81367,34766],{"class":50},[40,81369,81370,81372,81374,81377],{"class":42,"line":230},[40,81371,81292],{"class":94},[40,81373,4336],{"class":1283},[40,81375,81376],{"class":94}," \"乌克兰和俄罗斯持续冲突\"",[40,81378,34766],{"class":50},[40,81380,81381,81383,81385],{"class":42,"line":238},[40,81382,81304],{"class":94},[40,81384,4336],{"class":1283},[40,81386,81387],{"class":63}," 1669\n",[40,81389,81390],{"class":42,"line":251},[40,81391,81314],{"class":50},[40,81393,81394],{"class":42,"line":264},[40,81395,81396],{"class":50},"      ]\n",[40,81398,81399],{"class":42,"line":277},[40,81400,5513],{"class":50},[19,81402,81403],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,81405,81406],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,81408,81409],{},"\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,81411,81412],{},"function({data}) {",[19,81414,81415],{},"console.log(data)",[19,81417,4423],{},[19,81419,81420],{},"render(msg)",[19,81422,81423],{},"实参传递给形参的时候解构了",[19,81425,81426],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,81428,81429],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,81431,81432],{},"function render({data:mydata}) {",[19,81434,81435],{},"  console.log(data)",[19,81437,4423],{},[402,81439,81441],{"id":81440},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,81443,81444],{},"有两种情况：一个是数组结构，一个是立即执行函数",[492,81446,81447],{},[495,81448,81449],{},"如果对一个数组进行遍历，有两种方式：",[19,81451,81452],{},"①法1",[19,81454,81455],{},"const arr=[1,2,3]",[19,81457,81458],{},"arr.map(function(item,index) {",[19,81460,81461],{},"  console.log(item)",[19,81463,55762],{},[19,81465,81466],{},[438,81467],{"alt":36,"src":81468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,81470,81471],{},"②法2",[19,81473,81474],{},"const str='pink'",[19,81476,81477],{},"[1,2,3].map(function(item,index) {",[19,81479,81480],{},"console.log(item)",[19,81482,55762],{},[19,81484,81485],{},[438,81486],{"alt":36,"src":81487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,81489,81490],{},"此时会报错",[19,81492,81493],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,81495,81480],{},[19,81497,55762],{},[19,81499,81500],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,81502,81504],{"id":81503},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,81506,81507],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,81509,81510],{},"可以理解为加强版的for循环",[19,81512,81513],{},[438,81514],{"alt":36,"src":81515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,81517,81518],{},"里边不写return，不返回数组，只遍历不返回",[19,81520,81521],{},"map是返回数组",[19,81523,81524],{},"forEach主要用于遍历数组对象",[31,81526,81528],{"className":56365,"code":81527,"language":56367,"meta":36,"style":36},"  \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",[26,81529,81530,81538,81543,81548,81553,81558,81562,81567],{"__ignoreMap":36},[40,81531,81532,81534,81536],{"class":42,"line":43},[40,81533,55442],{"class":50},[40,81535,55111],{"class":46},[40,81537,54606],{"class":50},[40,81539,81540],{"class":42,"line":54},[40,81541,81542],{"class":50},"    const arr = ['red', 'green', 'pink']\n",[40,81544,81545],{"class":42,"line":70},[40,81546,81547],{"class":50},"    const result = arr.forEach(function (item, index) {\n",[40,81549,81550],{"class":42,"line":78},[40,81551,81552],{"class":50},"      console.log(item)\n",[40,81554,81555],{"class":42,"line":86},[40,81556,81557],{"class":50},"      console.log(index)\n",[40,81559,81560],{"class":42,"line":100},[40,81561,36761],{"class":50},[40,81563,81564],{"class":42,"line":108},[40,81565,81566],{"class":50},"    console.log(result)\n",[40,81568,81569,81571,81573],{"class":42,"line":121},[40,81570,55715],{"class":50},[40,81572,55111],{"class":46},[40,81574,54606],{"class":50},[19,81576,81577],{},[438,81578],{"alt":36,"src":81579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,81581,81583],{"id":81582},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,81585,81586],{},[438,81587],{"alt":36,"src":81588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,81590,81591],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[31,81593,81595],{"className":56365,"code":81594,"language":56367,"meta":36,"style":36},"\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",[26,81596,81597,81605,81613,81618,81623,81627,81631,81636,81640,81645,81653],{"__ignoreMap":36},[40,81598,81599,81601,81603],{"class":42,"line":43},[40,81600,4387],{"class":50},[40,81602,55098],{"class":46},[40,81604,54606],{"class":50},[40,81606,81607,81609,81611],{"class":42,"line":54},[40,81608,55442],{"class":50},[40,81610,55111],{"class":46},[40,81612,54606],{"class":50},[40,81614,81615],{"class":42,"line":70},[40,81616,81617],{"class":50},"    const arr = [10, 20, 30]\n",[40,81619,81620],{"class":42,"line":78},[40,81621,81622],{"class":50},"    const newArr = arr.filter(function (item, index) {\n",[40,81624,81625],{"class":42,"line":86},[40,81626,81552],{"class":50},[40,81628,81629],{"class":42,"line":100},[40,81630,81557],{"class":50},[40,81632,81633],{"class":42,"line":108},[40,81634,81635],{"class":50},"      return item >= 20\n",[40,81637,81638],{"class":42,"line":121},[40,81639,36761],{"class":50},[40,81641,81642],{"class":42,"line":134},[40,81643,81644],{"class":50},"    console.log(newArr)\n",[40,81646,81647,81649,81651],{"class":42,"line":146},[40,81648,55715],{"class":50},[40,81650,55111],{"class":46},[40,81652,54606],{"class":50},[40,81654,81655,81657,81659],{"class":42,"line":154},[40,81656,55083],{"class":50},[40,81658,55098],{"class":46},[40,81660,54606],{"class":50},[19,81662,81663],{},"这个也可以写成箭头函数：",[31,81665,81667],{"className":53933,"code":81666,"language":53935,"meta":36,"style":36},"const newArr = arr.filter(item => item >= 20)\n",[26,81668,81669],{"__ignoreMap":36},[40,81670,81671],{"class":42,"line":43},[40,81672,81666],{"class":50},[14,81674,81676],{"id":81675},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,81678,81679],{},[438,81680],{"alt":36,"src":81681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,81683,81684],{},"步骤：",[19,81686,81687],{},"①：渲染页面模块",[1338,81689,81690,81693],{},[495,81691,81692],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[495,81694,81695],{},"用forEach+字符串的形式",[19,81697,81698],{},"②：点击不同需求，显示不同页面内容",[1338,81700,81701,81704,81707,81710,81713],{},[495,81702,81703],{},"点击采取事件委托方式 .filter",[495,81705,81706],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[495,81708,81709],{},"筛选条件是根据点击的 data-index 来判断",[495,81711,81712],{},"可以使用对象解构，把事件对象解构",[495,81714,81715],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[31,81717,81719],{"className":53933,"code":81718,"language":53935,"meta":36,"style":36},"\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",[26,81720,81721,81731,81745,81749,81757,81771,81791,81803,81811,81817,81827,81837,81847,81851,81855,81861,81874,81886,81896,81908,81912,81916,81923,81936,81948,81965,81983,81996,82000,82004,82016,82026,82030,82034,82041,82082,82109,82119,82123,82127,82135,82147,82151,82155,82163,82175,82187,82198,82202,82206,82215,82227,82238,82242,82246,82255,82267,82279,82283,82287,82294,82304,82316,82328,82343,82347,82351,82359,82375,82385,82395,82405,82417,82421,82425,82435,82446,82456,82460,82468,82476,82480,82488,82503,82529,82554,82579,82598,82606,82620,82625,82630,82635,82640,82645,82653,82661,82666,82677,82682,82692,82702,82712,82722,82726,82730,82739,82748,82757,82766,82770,82774,82783,82792,82801,82810,82814,82818,82827,82836,82845,82854,82858,82862,82871,82880,82889,82898,82902,82906,82915,82924,82933,82942,82946,82950,82959,82968,82977,82986,82990,82994,83003,83012,83020,83029,83033,83037,83041,83046,83058,83063,83075,83079,83096,83124,83133,83138,83148,83158,83167,83172,83177,83181,83186,83203,83207,83212,83220,83225,83252,83257,83277,83282,83294,83299,83304,83309,83320,83334,83371,83389,83422,83439,83463,83467,83472,83478,83482,83486,83490,83498,83506,83510],{"__ignoreMap":36},[40,81722,81723,81725,81727,81729],{"class":42,"line":43},[40,81724,54597],{"class":50},[40,81726,54600],{"class":46},[40,81728,54603],{"class":596},[40,81730,54606],{"class":50},[40,81732,81733,81735,81737,81739,81741,81743],{"class":42,"line":54},[40,81734,4387],{"class":50},[40,81736,53935],{"class":46},[40,81738,54615],{"class":596},[40,81740,1284],{"class":50},[40,81742,54620],{"class":94},[40,81744,54606],{"class":50},[40,81746,81747],{"class":42,"line":70},[40,81748,1413],{"emptyLinePlaceholder":1412},[40,81750,81751,81753,81755],{"class":42,"line":78},[40,81752,4387],{"class":50},[40,81754,54633],{"class":46},[40,81756,54606],{"class":50},[40,81758,81759,81761,81763,81765,81767,81769],{"class":42,"line":86},[40,81760,55442],{"class":50},[40,81762,54643],{"class":46},[40,81764,54646],{"class":596},[40,81766,1284],{"class":50},[40,81768,54651],{"class":94},[40,81770,54606],{"class":50},[40,81772,81773,81775,81777,81779,81781,81783,81785,81787,81789],{"class":42,"line":100},[40,81774,55442],{"class":50},[40,81776,54643],{"class":46},[40,81778,18242],{"class":596},[40,81780,1284],{"class":50},[40,81782,54690],{"class":94},[40,81784,54670],{"class":596},[40,81786,1284],{"class":50},[40,81788,54697],{"class":94},[40,81790,54606],{"class":50},[40,81792,81793,81795,81797,81799,81801],{"class":42,"line":108},[40,81794,55442],{"class":50},[40,81796,54706],{"class":46},[40,81798,54709],{"class":50},[40,81800,54706],{"class":46},[40,81802,54606],{"class":50},[40,81804,81805,81807,81809],{"class":42,"line":121},[40,81806,55442],{"class":50},[40,81808,3384],{"class":46},[40,81810,54606],{"class":50},[40,81812,81813,81815],{"class":42,"line":134},[40,81814,9726],{"class":46},[40,81816,18894],{"class":50},[40,81818,81819,81821,81823,81825],{"class":42,"line":146},[40,81820,57993],{"class":63},[40,81822,60],{"class":50},[40,81824,3672],{"class":63},[40,81826,4637],{"class":50},[40,81828,81829,81831,81833,81835],{"class":42,"line":154},[40,81830,58004],{"class":63},[40,81832,60],{"class":50},[40,81834,3672],{"class":63},[40,81836,4637],{"class":50},[40,81838,81839,81841,81843,81845],{"class":42,"line":162},[40,81840,75891],{"class":63},[40,81842,60],{"class":50},[40,81844,63803],{"class":63},[40,81846,4637],{"class":50},[40,81848,81849],{"class":42,"line":170},[40,81850,5513],{"class":50},[40,81852,81853],{"class":42,"line":183},[40,81854,1413],{"emptyLinePlaceholder":1412},[40,81856,81857,81859],{"class":42,"line":196},[40,81858,65421],{"class":596},[40,81860,18894],{"class":50},[40,81862,81863,81865,81867,81870,81872],{"class":42,"line":204},[40,81864,58069],{"class":63},[40,81866,60],{"class":50},[40,81868,81869],{"class":63},"990",[40,81871,54790],{"class":1283},[40,81873,4637],{"class":50},[40,81875,81876,81878,81880,81882,81884],{"class":42,"line":217},[40,81877,58004],{"class":63},[40,81879,60],{"class":50},[40,81881,3672],{"class":63},[40,81883,54854],{"class":63},[40,81885,4637],{"class":50},[40,81887,81888,81890,81892,81894],{"class":42,"line":230},[40,81889,58307],{"class":63},[40,81891,60],{"class":50},[40,81893,54775],{"class":63},[40,81895,4637],{"class":50},[40,81897,81898,81901,81903,81906],{"class":42,"line":238},[40,81899,81900],{"class":63},"      flex-wrap",[40,81902,60],{"class":50},[40,81904,81905],{"class":63},"wrap",[40,81907,4637],{"class":50},[40,81909,81910],{"class":42,"line":251},[40,81911,5513],{"class":50},[40,81913,81914],{"class":42,"line":264},[40,81915,1413],{"emptyLinePlaceholder":1412},[40,81917,81918,81921],{"class":42,"line":277},[40,81919,81920],{"class":596},"    .item",[40,81922,18894],{"class":50},[40,81924,81925,81927,81929,81932,81934],{"class":42,"line":290},[40,81926,58069],{"class":63},[40,81928,60],{"class":50},[40,81930,81931],{"class":63},"240",[40,81933,54790],{"class":1283},[40,81935,4637],{"class":50},[40,81937,81938,81940,81942,81944,81946],{"class":42,"line":298},[40,81939,65298],{"class":63},[40,81941,60],{"class":50},[40,81943,3925],{"class":63},[40,81945,54790],{"class":1283},[40,81947,4637],{"class":50},[40,81949,81950,81952,81954,81956,81958,81961,81963],{"class":42,"line":310},[40,81951,57993],{"class":63},[40,81953,60],{"class":50},[40,81955,4178],{"class":63},[40,81957,54790],{"class":1283},[40,81959,81960],{"class":63}," 30",[40,81962,54790],{"class":1283},[40,81964,4637],{"class":50},[40,81966,81967,81969,81971,81973,81976,81979,81981],{"class":42,"line":5086},[40,81968,65158],{"class":63},[40,81970,60],{"class":50},[40,81972,31426],{"class":63},[40,81974,81975],{"class":63}," ease",[40,81977,81978],{"class":63}," .5",[40,81980,4173],{"class":1283},[40,81982,4637],{"class":50},[40,81984,81985,81988,81990,81992,81994],{"class":42,"line":5091},[40,81986,81987],{"class":63},"      margin-bottom",[40,81989,60],{"class":50},[40,81991,4178],{"class":63},[40,81993,54790],{"class":1283},[40,81995,4637],{"class":50},[40,81997,81998],{"class":42,"line":5105},[40,81999,5513],{"class":50},[40,82001,82002],{"class":42,"line":5110},[40,82003,1413],{"emptyLinePlaceholder":1412},[40,82005,82006,82009,82011,82014],{"class":42,"line":5902},[40,82007,82008],{"class":596},"    .item:nth-child",[40,82010,3488],{"class":50},[40,82012,82013],{"class":63},"4n",[40,82015,15764],{"class":50},[40,82017,82018,82020,82022,82024],{"class":42,"line":5916},[40,82019,65298],{"class":63},[40,82021,60],{"class":50},[40,82023,3672],{"class":63},[40,82025,4637],{"class":50},[40,82027,82028],{"class":42,"line":5924},[40,82029,5513],{"class":50},[40,82031,82032],{"class":42,"line":5929},[40,82033,1413],{"emptyLinePlaceholder":1412},[40,82035,82036,82039],{"class":42,"line":5935},[40,82037,82038],{"class":596},"    .item:hover",[40,82040,18894],{"class":50},[40,82042,82043,82046,82048,82050,82052,82054,82056,82058,82060,82063,82065,82067,82069,82071,82073,82075,82077,82080],{"class":42,"line":5941},[40,82044,82045],{"class":63},"      box-shadow",[40,82047,60],{"class":50},[40,82049,3672],{"class":63},[40,82051,54790],{"class":1283},[40,82053,7416],{"class":63},[40,82055,54790],{"class":1283},[40,82057,5474],{"class":63},[40,82059,54790],{"class":1283},[40,82061,82062],{"class":63}," rgba",[40,82064,3488],{"class":50},[40,82066,3672],{"class":63},[40,82068,15757],{"class":50},[40,82070,3672],{"class":63},[40,82072,15757],{"class":50},[40,82074,3672],{"class":63},[40,82076,15757],{"class":50},[40,82078,82079],{"class":63},".2",[40,82081,6043],{"class":50},[40,82083,82084,82087,82089,82092,82094,82096,82098,82101,82103,82105,82107],{"class":42,"line":5946},[40,82085,82086],{"class":63},"      transform",[40,82088,60],{"class":50},[40,82090,82091],{"class":63},"translate3d",[40,82093,3488],{"class":50},[40,82095,3672],{"class":63},[40,82097,15757],{"class":50},[40,82099,82100],{"class":63},"-4",[40,82102,54790],{"class":1283},[40,82104,15757],{"class":50},[40,82106,3672],{"class":63},[40,82108,6043],{"class":50},[40,82110,82111,82113,82115,82117],{"class":42,"line":11270},[40,82112,65323],{"class":63},[40,82114,60],{"class":50},[40,82116,65328],{"class":63},[40,82118,4637],{"class":50},[40,82120,82121],{"class":42,"line":11294},[40,82122,5513],{"class":50},[40,82124,82125],{"class":42,"line":11299},[40,82126,1413],{"emptyLinePlaceholder":1412},[40,82128,82129,82131,82133],{"class":42,"line":11305},[40,82130,81920],{"class":596},[40,82132,58913],{"class":46},[40,82134,18894],{"class":50},[40,82136,82137,82139,82141,82143,82145],{"class":42,"line":11332},[40,82138,58069],{"class":63},[40,82140,60],{"class":50},[40,82142,3791],{"class":63},[40,82144,3808],{"class":1283},[40,82146,4637],{"class":50},[40,82148,82149],{"class":42,"line":11337},[40,82150,5513],{"class":50},[40,82152,82153],{"class":42,"line":11343},[40,82154,1413],{"emptyLinePlaceholder":1412},[40,82156,82157,82159,82161],{"class":42,"line":11355},[40,82158,81920],{"class":596},[40,82160,65602],{"class":596},[40,82162,18894],{"class":50},[40,82164,82165,82167,82169,82171,82173],{"class":42,"line":11367},[40,82166,58220],{"class":63},[40,82168,60],{"class":50},[40,82170,4128],{"class":63},[40,82172,54790],{"class":1283},[40,82174,4637],{"class":50},[40,82176,82177,82179,82181,82183,82185],{"class":42,"line":11379},[40,82178,81987],{"class":63},[40,82180,60],{"class":50},[40,82182,3925],{"class":63},[40,82184,54790],{"class":1283},[40,82186,4637],{"class":50},[40,82188,82189,82191,82193,82196],{"class":42,"line":13038},[40,82190,60714],{"class":63},[40,82192,60],{"class":50},[40,82194,82195],{"class":63},"#666",[40,82197,4637],{"class":50},[40,82199,82200],{"class":42,"line":13063},[40,82201,5513],{"class":50},[40,82203,82204],{"class":42,"line":13086},[40,82205,1413],{"emptyLinePlaceholder":1412},[40,82207,82208,82210,82213],{"class":42,"line":13110},[40,82209,81920],{"class":596},[40,82211,82212],{"class":596}," .price",[40,82214,18894],{"class":50},[40,82216,82217,82219,82221,82223,82225],{"class":42,"line":13115},[40,82218,58220],{"class":63},[40,82220,60],{"class":50},[40,82222,4228],{"class":63},[40,82224,54790],{"class":1283},[40,82226,4637],{"class":50},[40,82228,82229,82231,82233,82236],{"class":42,"line":13120},[40,82230,60714],{"class":63},[40,82232,60],{"class":50},[40,82234,82235],{"class":63},"firebrick",[40,82237,4637],{"class":50},[40,82239,82240],{"class":42,"line":13125},[40,82241,5513],{"class":50},[40,82243,82244],{"class":42,"line":13134},[40,82245,1413],{"emptyLinePlaceholder":1412},[40,82247,82248,82250,82253],{"class":42,"line":13139},[40,82249,81920],{"class":596},[40,82251,82252],{"class":596}," .price::before",[40,82254,18894],{"class":50},[40,82256,82257,82260,82262,82265],{"class":42,"line":13145},[40,82258,82259],{"class":63},"      content",[40,82261,60],{"class":50},[40,82263,82264],{"class":94},"'￥'",[40,82266,4637],{"class":50},[40,82268,82269,82271,82273,82275,82277],{"class":42,"line":13166},[40,82270,58220],{"class":63},[40,82272,60],{"class":50},[40,82274,4028],{"class":63},[40,82276,54790],{"class":1283},[40,82278,4637],{"class":50},[40,82280,82281],{"class":42,"line":13172},[40,82282,5513],{"class":50},[40,82284,82285],{"class":42,"line":13186},[40,82286,1413],{"emptyLinePlaceholder":1412},[40,82288,82289,82292],{"class":42,"line":13192},[40,82290,82291],{"class":596},"    .filter",[40,82293,18894],{"class":50},[40,82295,82296,82298,82300,82302],{"class":42,"line":13219},[40,82297,58307],{"class":63},[40,82299,60],{"class":50},[40,82301,54775],{"class":63},[40,82303,4637],{"class":50},[40,82305,82306,82308,82310,82312,82314],{"class":42,"line":13228},[40,82307,58069],{"class":63},[40,82309,60],{"class":50},[40,82311,81869],{"class":63},[40,82313,54790],{"class":1283},[40,82315,4637],{"class":50},[40,82317,82318,82320,82322,82324,82326],{"class":42,"line":13234},[40,82319,58004],{"class":63},[40,82321,60],{"class":50},[40,82323,3672],{"class":63},[40,82325,54854],{"class":63},[40,82327,4637],{"class":50},[40,82329,82330,82332,82334,82336,82338,82340],{"class":42,"line":13242},[40,82331,57993],{"class":63},[40,82333,60],{"class":50},[40,82335,4134],{"class":63},[40,82337,54790],{"class":1283},[40,82339,81960],{"class":63},[40,82341,82342],{"class":1283},"px\n",[40,82344,82345],{"class":42,"line":13247},[40,82346,5513],{"class":50},[40,82348,82349],{"class":42,"line":19926},[40,82350,1413],{"emptyLinePlaceholder":1412},[40,82352,82353,82355,82357],{"class":42,"line":19932},[40,82354,82291],{"class":596},[40,82356,4741],{"class":46},[40,82358,18894],{"class":50},[40,82360,82361,82363,82365,82367,82369,82371,82373],{"class":42,"line":19955},[40,82362,57993],{"class":63},[40,82364,60],{"class":50},[40,82366,3925],{"class":63},[40,82368,54790],{"class":1283},[40,82370,12272],{"class":63},[40,82372,54790],{"class":1283},[40,82374,4637],{"class":50},[40,82376,82377,82379,82381,82383],{"class":42,"line":19961},[40,82378,65019],{"class":63},[40,82380,60],{"class":50},[40,82382,65116],{"class":63},[40,82384,4637],{"class":50},[40,82386,82387,82389,82391,82393],{"class":42,"line":19984},[40,82388,60714],{"class":63},[40,82390,60],{"class":50},[40,82392,82195],{"class":63},[40,82394,4637],{"class":50},[40,82396,82397,82399,82401,82403],{"class":42,"line":19998},[40,82398,67268],{"class":63},[40,82400,60],{"class":50},[40,82402,58035],{"class":63},[40,82404,4637],{"class":50},[40,82406,82407,82409,82411,82413,82415],{"class":42,"line":20018},[40,82408,65048],{"class":63},[40,82410,60],{"class":50},[40,82412,4178],{"class":63},[40,82414,54790],{"class":1283},[40,82416,4637],{"class":50},[40,82418,82419],{"class":42,"line":20024},[40,82420,5513],{"class":50},[40,82422,82423],{"class":42,"line":20035},[40,82424,1413],{"emptyLinePlaceholder":1412},[40,82426,82427,82429,82431,82433],{"class":42,"line":20058},[40,82428,82291],{"class":596},[40,82430,4741],{"class":46},[40,82432,65198],{"class":596},[40,82434,18894],{"class":50},[40,82436,82437,82439,82441,82444],{"class":42,"line":20080},[40,82438,58182],{"class":63},[40,82440,60],{"class":50},[40,82442,82443],{"class":63},"#05943c",[40,82445,4637],{"class":50},[40,82447,82448,82450,82452,82454],{"class":42,"line":20085},[40,82449,60714],{"class":63},[40,82451,60],{"class":50},[40,82453,64140],{"class":63},[40,82455,4637],{"class":50},[40,82457,82458],{"class":42,"line":20091},[40,82459,5513],{"class":50},[40,82461,82462,82464,82466],{"class":42,"line":20105},[40,82463,55715],{"class":50},[40,82465,3384],{"class":46},[40,82467,54606],{"class":50},[40,82469,82470,82472,82474],{"class":42,"line":20118},[40,82471,55083],{"class":50},[40,82473,54633],{"class":46},[40,82475,54606],{"class":50},[40,82477,82478],{"class":42,"line":20123},[40,82479,1413],{"emptyLinePlaceholder":1412},[40,82481,82482,82484,82486],{"class":42,"line":20137},[40,82483,4387],{"class":50},[40,82485,55098],{"class":46},[40,82487,54606],{"class":50},[40,82489,82490,82492,82494,82496,82498,82501],{"class":42,"line":20142},[40,82491,55442],{"class":50},[40,82493,54909],{"class":46},[40,82495,56784],{"class":596},[40,82497,1284],{"class":50},[40,82499,82500],{"class":94},"\"filter\"",[40,82502,54606],{"class":50},[40,82504,82505,82507,82509,82511,82513,82515,82518,82520,82522,82525,82527],{"class":42,"line":20148},[40,82506,54640],{"class":50},[40,82508,2106],{"class":46},[40,82510,64355],{"class":596},[40,82512,1284],{"class":50},[40,82514,64360],{"class":94},[40,82516,82517],{"class":596}," data-index",[40,82519,1284],{"class":50},[40,82521,7002],{"class":94},[40,82523,82524],{"class":50},">0-100元\u003C\u002F",[40,82526,2106],{"class":46},[40,82528,54606],{"class":50},[40,82530,82531,82533,82535,82537,82539,82541,82543,82545,82547,82550,82552],{"class":42,"line":20153},[40,82532,54640],{"class":50},[40,82534,2106],{"class":46},[40,82536,64355],{"class":596},[40,82538,1284],{"class":50},[40,82540,64360],{"class":94},[40,82542,82517],{"class":596},[40,82544,1284],{"class":50},[40,82546,7025],{"class":94},[40,82548,82549],{"class":50},">100-300元\u003C\u002F",[40,82551,2106],{"class":46},[40,82553,54606],{"class":50},[40,82555,82556,82558,82560,82562,82564,82566,82568,82570,82572,82575,82577],{"class":42,"line":20167},[40,82557,54640],{"class":50},[40,82559,2106],{"class":46},[40,82561,64355],{"class":596},[40,82563,1284],{"class":50},[40,82565,64360],{"class":94},[40,82567,82517],{"class":596},[40,82569,1284],{"class":50},[40,82571,7038],{"class":94},[40,82573,82574],{"class":50},">300元以上\u003C\u002F",[40,82576,2106],{"class":46},[40,82578,54606],{"class":50},[40,82580,82581,82583,82585,82587,82589,82591,82594,82596],{"class":42,"line":20172},[40,82582,54640],{"class":50},[40,82584,2106],{"class":46},[40,82586,64355],{"class":596},[40,82588,1284],{"class":50},[40,82590,64360],{"class":94},[40,82592,82593],{"class":50},">全部区间\u003C\u002F",[40,82595,2106],{"class":46},[40,82597,54606],{"class":50},[40,82599,82600,82602,82604],{"class":42,"line":20177},[40,82601,55715],{"class":50},[40,82603,54909],{"class":46},[40,82605,54606],{"class":50},[40,82607,82608,82610,82612,82614,82616,82618],{"class":42,"line":20191},[40,82609,55442],{"class":50},[40,82611,54909],{"class":46},[40,82613,56784],{"class":596},[40,82615,1284],{"class":50},[40,82617,65906],{"class":94},[40,82619,54606],{"class":50},[40,82621,82622],{"class":42,"line":20203},[40,82623,82624],{"class":997},"    \u003C!-- \u003Cdiv class=\"item\">\n",[40,82626,82627],{"class":42,"line":20208},[40,82628,82629],{"class":997},"      \u003Cimg src=\"\" alt=\"\">\n",[40,82631,82632],{"class":42,"line":20221},[40,82633,82634],{"class":997},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[40,82636,82637],{"class":42,"line":20226},[40,82638,82639],{"class":997},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[40,82641,82642],{"class":42,"line":20231},[40,82643,82644],{"class":997},"    \u003C\u002Fdiv> -->\n",[40,82646,82647,82649,82651],{"class":42,"line":20236},[40,82648,55715],{"class":50},[40,82650,54909],{"class":46},[40,82652,54606],{"class":50},[40,82654,82655,82657,82659],{"class":42,"line":20249},[40,82656,55442],{"class":50},[40,82658,55111],{"class":46},[40,82660,54606],{"class":50},[40,82662,82663],{"class":42,"line":20254},[40,82664,82665],{"class":997},"    \u002F\u002F 2. 初始化数据\n",[40,82667,82668,82670,82673,82675],{"class":42,"line":35933},[40,82669,14543],{"class":1283},[40,82671,82672],{"class":63}," goodsList",[40,82674,16886],{"class":1283},[40,82676,58745],{"class":50},[40,82678,82679],{"class":42,"line":35939},[40,82680,82681],{"class":50},"      {\n",[40,82683,82684,82687,82690],{"class":42,"line":35945},[40,82685,82686],{"class":50},"        id: ",[40,82688,82689],{"class":94},"'4001172'",[40,82691,34766],{"class":50},[40,82693,82694,82697,82700],{"class":42,"line":35951},[40,82695,82696],{"class":50},"        name: ",[40,82698,82699],{"class":94},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[40,82701,34766],{"class":50},[40,82703,82704,82707,82710],{"class":42,"line":35957},[40,82705,82706],{"class":50},"        price: ",[40,82708,82709],{"class":94},"'289.00'",[40,82711,34766],{"class":50},[40,82713,82714,82717,82720],{"class":42,"line":35968},[40,82715,82716],{"class":50},"        picture: ",[40,82718,82719],{"class":94},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[40,82721,34766],{"class":50},[40,82723,82724],{"class":42,"line":35974},[40,82725,81187],{"class":50},[40,82727,82728],{"class":42,"line":35994},[40,82729,82681],{"class":50},[40,82731,82732,82734,82737],{"class":42,"line":36000},[40,82733,82686],{"class":50},[40,82735,82736],{"class":94},"'4001594'",[40,82738,34766],{"class":50},[40,82740,82741,82743,82746],{"class":42,"line":36011},[40,82742,82696],{"class":50},[40,82744,82745],{"class":94},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[40,82747,34766],{"class":50},[40,82749,82750,82752,82755],{"class":42,"line":36017},[40,82751,82706],{"class":50},[40,82753,82754],{"class":94},"'288.00'",[40,82756,34766],{"class":50},[40,82758,82759,82761,82764],{"class":42,"line":36023},[40,82760,82716],{"class":50},[40,82762,82763],{"class":94},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[40,82765,34766],{"class":50},[40,82767,82768],{"class":42,"line":36029},[40,82769,81187],{"class":50},[40,82771,82772],{"class":42,"line":36035},[40,82773,82681],{"class":50},[40,82775,82776,82778,82781],{"class":42,"line":36041},[40,82777,82686],{"class":50},[40,82779,82780],{"class":94},"'4001009'",[40,82782,34766],{"class":50},[40,82784,82785,82787,82790],{"class":42,"line":36047},[40,82786,82696],{"class":50},[40,82788,82789],{"class":94},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[40,82791,34766],{"class":50},[40,82793,82794,82796,82799],{"class":42,"line":36053},[40,82795,82706],{"class":50},[40,82797,82798],{"class":94},"'109.00'",[40,82800,34766],{"class":50},[40,82802,82803,82805,82808],{"class":42,"line":36073},[40,82804,82716],{"class":50},[40,82806,82807],{"class":94},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[40,82809,34766],{"class":50},[40,82811,82812],{"class":42,"line":36079},[40,82813,81187],{"class":50},[40,82815,82816],{"class":42,"line":36095},[40,82817,82681],{"class":50},[40,82819,82820,82822,82825],{"class":42,"line":36101},[40,82821,82686],{"class":50},[40,82823,82824],{"class":94},"'4001874'",[40,82826,34766],{"class":50},[40,82828,82829,82831,82834],{"class":42,"line":36115},[40,82830,82696],{"class":50},[40,82832,82833],{"class":94},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[40,82835,34766],{"class":50},[40,82837,82838,82840,82843],{"class":42,"line":36121},[40,82839,82706],{"class":50},[40,82841,82842],{"class":94},"'488.00'",[40,82844,34766],{"class":50},[40,82846,82847,82849,82852],{"class":42,"line":36136},[40,82848,82716],{"class":50},[40,82850,82851],{"class":94},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[40,82853,34766],{"class":50},[40,82855,82856],{"class":42,"line":36142},[40,82857,81187],{"class":50},[40,82859,82860],{"class":42,"line":36151},[40,82861,82681],{"class":50},[40,82863,82864,82866,82869],{"class":42,"line":36157},[40,82865,82686],{"class":50},[40,82867,82868],{"class":94},"'4001649'",[40,82870,34766],{"class":50},[40,82872,82873,82875,82878],{"class":42,"line":36166},[40,82874,82696],{"class":50},[40,82876,82877],{"class":94},"'大师监制龙泉青瓷茶叶罐'",[40,82879,34766],{"class":50},[40,82881,82882,82884,82887],{"class":42,"line":36172},[40,82883,82706],{"class":50},[40,82885,82886],{"class":94},"'139.00'",[40,82888,34766],{"class":50},[40,82890,82891,82893,82896],{"class":42,"line":36178},[40,82892,82716],{"class":50},[40,82894,82895],{"class":94},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[40,82897,34766],{"class":50},[40,82899,82900],{"class":42,"line":36187},[40,82901,81187],{"class":50},[40,82903,82904],{"class":42,"line":36193},[40,82905,82681],{"class":50},[40,82907,82908,82910,82913],{"class":42,"line":36204},[40,82909,82686],{"class":50},[40,82911,82912],{"class":94},"'3997185'",[40,82914,34766],{"class":50},[40,82916,82917,82919,82922],{"class":42,"line":36210},[40,82918,82696],{"class":50},[40,82920,82921],{"class":94},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[40,82923,34766],{"class":50},[40,82925,82926,82928,82931],{"class":42,"line":36229},[40,82927,82706],{"class":50},[40,82929,82930],{"class":94},"'108.00'",[40,82932,34766],{"class":50},[40,82934,82935,82937,82940],{"class":42,"line":36235},[40,82936,82716],{"class":50},[40,82938,82939],{"class":94},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[40,82941,34766],{"class":50},[40,82943,82944],{"class":42,"line":36246},[40,82945,81187],{"class":50},[40,82947,82948],{"class":42,"line":36252},[40,82949,82681],{"class":50},[40,82951,82952,82954,82957],{"class":42,"line":36272},[40,82953,82686],{"class":50},[40,82955,82956],{"class":94},"'3997403'",[40,82958,34766],{"class":50},[40,82960,82961,82963,82966],{"class":42,"line":36288},[40,82962,82696],{"class":50},[40,82964,82965],{"class":94},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[40,82967,34766],{"class":50},[40,82969,82970,82972,82975],{"class":42,"line":36294},[40,82971,82706],{"class":50},[40,82973,82974],{"class":94},"'100.00'",[40,82976,34766],{"class":50},[40,82978,82979,82981,82984],{"class":42,"line":36308},[40,82980,82716],{"class":50},[40,82982,82983],{"class":94},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[40,82985,34766],{"class":50},[40,82987,82988],{"class":42,"line":36314},[40,82989,81187],{"class":50},[40,82991,82992],{"class":42,"line":36320},[40,82993,82681],{"class":50},[40,82995,82996,82998,83001],{"class":42,"line":36331},[40,82997,82686],{"class":50},[40,82999,83000],{"class":94},"'3998274'",[40,83002,34766],{"class":50},[40,83004,83005,83007,83010],{"class":42,"line":36337},[40,83006,82696],{"class":50},[40,83008,83009],{"class":94},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[40,83011,34766],{"class":50},[40,83013,83014,83016,83018],{"class":42,"line":36343},[40,83015,82706],{"class":50},[40,83017,82886],{"class":94},[40,83019,34766],{"class":50},[40,83021,83022,83024,83027],{"class":42,"line":36353},[40,83023,82716],{"class":50},[40,83025,83026],{"class":94},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[40,83028,34766],{"class":50},[40,83030,83031],{"class":42,"line":36359},[40,83032,81187],{"class":50},[40,83034,83035],{"class":42,"line":36370},[40,83036,56407],{"class":50},[40,83038,83039],{"class":42,"line":36376},[40,83040,1413],{"emptyLinePlaceholder":1412},[40,83042,83043],{"class":42,"line":36386},[40,83044,83045],{"class":997},"    \u002F\u002F 1.渲染函数\n",[40,83047,83048,83050,83052,83054,83056],{"class":42,"line":36391},[40,83049,73381],{"class":1283},[40,83051,73384],{"class":596},[40,83053,3488],{"class":50},[40,83055,7203],{"class":8539},[40,83057,15764],{"class":50},[40,83059,83060],{"class":42,"line":36397},[40,83061,83062],{"class":997},"      \u002F\u002F 声明空字符串\n",[40,83064,83065,83068,83071,83073],{"class":42,"line":36446},[40,83066,83067],{"class":1283},"      let",[40,83069,83070],{"class":50}," str ",[40,83072,1284],{"class":1283},[40,83074,73401],{"class":94},[40,83076,83077],{"class":42,"line":36493},[40,83078,73406],{"class":997},[40,83080,83081,83083,83086,83088,83091,83094],{"class":42,"line":36498},[40,83082,61305],{"class":50},[40,83084,83085],{"class":596},"forEach",[40,83087,3488],{"class":50},[40,83089,83090],{"class":8539},"item",[40,83092,83093],{"class":1283}," =>",[40,83095,18894],{"class":50},[40,83097,83098,83100,83103,83106,83108,83111,83113,83116,83119,83121],{"class":42,"line":36504},[40,83099,64568],{"class":1283},[40,83101,83102],{"class":50}," { ",[40,83104,83105],{"class":63},"name",[40,83107,15757],{"class":50},[40,83109,83110],{"class":63},"price",[40,83112,15757],{"class":50},[40,83114,83115],{"class":63},"picture",[40,83117,83118],{"class":50}," } ",[40,83120,1284],{"class":1283},[40,83122,83123],{"class":50}," item\n",[40,83125,83126,83129,83131],{"class":42,"line":36523},[40,83127,83128],{"class":50},"        str ",[40,83130,12799],{"class":1283},[40,83132,73465],{"class":94},[40,83134,83135],{"class":42,"line":36529},[40,83136,83137],{"class":94},"          \u003Cdiv class=\"item\">\n",[40,83139,83140,83143,83145],{"class":42,"line":36549},[40,83141,83142],{"class":94},"            \u003Cimg src=\"${",[40,83144,83115],{"class":50},[40,83146,83147],{"class":94},"}\" alt=\"\">\n",[40,83149,83150,83153,83155],{"class":42,"line":36555},[40,83151,83152],{"class":94},"            \u003Cp class=\"name\">${",[40,83154,83105],{"class":50},[40,83156,83157],{"class":94},"}\u003C\u002Fp>\n",[40,83159,83160,83163,83165],{"class":42,"line":36561},[40,83161,83162],{"class":94},"            \u003Cp class=\"price\">${",[40,83164,83110],{"class":50},[40,83166,83157],{"class":94},[40,83168,83169],{"class":42,"line":36571},[40,83170,83171],{"class":94},"          \u003C\u002Fdiv>\n",[40,83173,83174],{"class":42,"line":36576},[40,83175,83176],{"class":94},"        `\n",[40,83178,83179],{"class":42,"line":36582},[40,83180,68113],{"class":50},[40,83182,83183],{"class":42,"line":36598},[40,83184,83185],{"class":997},"      \u002F\u002F 追加给List\n",[40,83187,83188,83190,83192,83194,83197,83199,83201],{"class":42,"line":36643},[40,83189,59069],{"class":50},[40,83191,57697],{"class":596},[40,83193,3488],{"class":50},[40,83195,83196],{"class":94},"'.list'",[40,83198,77544],{"class":50},[40,83200,1284],{"class":1283},[40,83202,77280],{"class":50},[40,83204,83205],{"class":42,"line":36649},[40,83206,5513],{"class":50},[40,83208,83209],{"class":42,"line":36655},[40,83210,83211],{"class":997},"    \u002F\u002F 页面一打开就需要渲染\n",[40,83213,83214,83217],{"class":42,"line":36661},[40,83215,83216],{"class":596},"    render",[40,83218,83219],{"class":50},"(goodsList)\n",[40,83221,83222],{"class":42,"line":36672},[40,83223,83224],{"class":997},"    \u002F\u002F 2.过滤筛选\n",[40,83226,83227,83229,83231,83233,83236,83238,83240,83242,83244,83246,83248,83250],{"class":42,"line":36678},[40,83228,55705],{"class":50},[40,83230,57697],{"class":596},[40,83232,3488],{"class":50},[40,83234,83235],{"class":94},"'.filter'",[40,83237,34126],{"class":50},[40,83239,61111],{"class":596},[40,83241,3488],{"class":50},[40,83243,61116],{"class":94},[40,83245,15757],{"class":50},[40,83247,3558],{"class":8539},[40,83249,83093],{"class":1283},[40,83251,18894],{"class":50},[40,83253,83254],{"class":42,"line":36684},[40,83255,83256],{"class":997},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[40,83258,83259,83261,83263,83266,83268,83270,83272,83274],{"class":42,"line":36690},[40,83260,61526],{"class":1283},[40,83262,83102],{"class":50},[40,83264,83265],{"class":63},"tagName",[40,83267,15757],{"class":50},[40,83269,34837],{"class":63},[40,83271,83118],{"class":50},[40,83273,1284],{"class":1283},[40,83275,83276],{"class":50}," e.target\n",[40,83278,83279],{"class":42,"line":36708},[40,83280,83281],{"class":997},"      \u002F\u002F 判断\n",[40,83283,83284,83286,83288,83290,83292],{"class":42,"line":36722},[40,83285,57778],{"class":1283},[40,83287,70332],{"class":50},[40,83289,57784],{"class":1283},[40,83291,71554],{"class":94},[40,83293,15764],{"class":50},[40,83295,83296],{"class":42,"line":36731},[40,83297,83298],{"class":997},"        \u002F\u002F console.log(11)\n",[40,83300,83301],{"class":42,"line":36740},[40,83302,83303],{"class":997},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[40,83305,83306],{"class":42,"line":36749},[40,83307,83308],{"class":997},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[40,83310,83311,83313,83315,83317],{"class":42,"line":36758},[40,83312,55128],{"class":1283},[40,83314,55131],{"class":50},[40,83316,1284],{"class":1283},[40,83318,83319],{"class":50}," goodsList\n",[40,83321,83322,83324,83327,83329,83332],{"class":42,"line":36764},[40,83323,5822],{"class":1283},[40,83325,83326],{"class":50}," (dataset.index ",[40,83328,57784],{"class":1283},[40,83330,83331],{"class":94}," '1'",[40,83333,15764],{"class":50},[40,83335,83336,83339,83341,83344,83347,83349,83351,83353,83356,83358,83360,83363,83365,83367,83369],{"class":42,"line":36770},[40,83337,83338],{"class":50},"          arr ",[40,83340,1284],{"class":1283},[40,83342,83343],{"class":50}," goodsList.",[40,83345,83346],{"class":596},"filter",[40,83348,3488],{"class":50},[40,83350,83090],{"class":8539},[40,83352,83093],{"class":1283},[40,83354,83355],{"class":50}," item.price ",[40,83357,5041],{"class":1283},[40,83359,7416],{"class":63},[40,83361,83362],{"class":1283}," &&",[40,83364,83355],{"class":50},[40,83366,4930],{"class":1283},[40,83368,9077],{"class":63},[40,83370,1811],{"class":50},[40,83372,83373,83376,83378,83380,83382,83384,83387],{"class":42,"line":36778},[40,83374,83375],{"class":50},"        } ",[40,83377,5032],{"class":1283},[40,83379,5035],{"class":1283},[40,83381,83326],{"class":50},[40,83383,57784],{"class":1283},[40,83385,83386],{"class":94}," '2'",[40,83388,15764],{"class":50},[40,83390,83391,83393,83395,83397,83399,83401,83403,83405,83407,83409,83411,83413,83415,83417,83420],{"class":42,"line":36783},[40,83392,83338],{"class":50},[40,83394,1284],{"class":1283},[40,83396,83343],{"class":50},[40,83398,83346],{"class":596},[40,83400,3488],{"class":50},[40,83402,83090],{"class":8539},[40,83404,83093],{"class":1283},[40,83406,83355],{"class":50},[40,83408,5041],{"class":1283},[40,83410,9077],{"class":63},[40,83412,83362],{"class":1283},[40,83414,83355],{"class":50},[40,83416,4930],{"class":1283},[40,83418,83419],{"class":63}," 300",[40,83421,1811],{"class":50},[40,83423,83424,83426,83428,83430,83432,83434,83437],{"class":42,"line":36789},[40,83425,83375],{"class":50},[40,83427,5032],{"class":1283},[40,83429,5035],{"class":1283},[40,83431,83326],{"class":50},[40,83433,57784],{"class":1283},[40,83435,83436],{"class":94}," '3'",[40,83438,15764],{"class":50},[40,83440,83441,83443,83445,83447,83449,83451,83453,83455,83457,83459,83461],{"class":42,"line":36800},[40,83442,83338],{"class":50},[40,83444,1284],{"class":1283},[40,83446,83343],{"class":50},[40,83448,83346],{"class":596},[40,83450,3488],{"class":50},[40,83452,83090],{"class":8539},[40,83454,83093],{"class":1283},[40,83456,83355],{"class":50},[40,83458,5041],{"class":1283},[40,83460,83419],{"class":63},[40,83462,1811],{"class":50},[40,83464,83465],{"class":42,"line":36806},[40,83466,5854],{"class":50},[40,83468,83469],{"class":42,"line":36826},[40,83470,83471],{"class":997},"        \u002F\u002F 渲染函数\n",[40,83473,83474,83476],{"class":42,"line":36832},[40,83475,73704],{"class":596},[40,83477,55710],{"class":50},[40,83479,83480],{"class":42,"line":36838},[40,83481,55696],{"class":50},[40,83483,83484],{"class":42,"line":36844},[40,83485,1413],{"emptyLinePlaceholder":1412},[40,83487,83488],{"class":42,"line":36861},[40,83489,36761],{"class":50},[40,83491,83492,83494,83496],{"class":42,"line":36867},[40,83493,55715],{"class":50},[40,83495,55111],{"class":46},[40,83497,54606],{"class":50},[40,83499,83500,83502,83504],{"class":42,"line":36873},[40,83501,55083],{"class":50},[40,83503,55098],{"class":46},[40,83505,54606],{"class":50},[40,83507,83508],{"class":42,"line":36879},[40,83509,1413],{"emptyLinePlaceholder":1412},[40,83511,83512,83514,83516],{"class":42,"line":36885},[40,83513,55083],{"class":50},[40,83515,53935],{"class":46},[40,83517,54606],{"class":50},[14,83519,83521],{"id":83520},"_410-深入了解对象","4.10 深入了解对象",[402,83523,83525],{"id":83524},"_4101-创建对象","4.10.1 创建对象",[19,83527,83528],{},[438,83529],{"alt":36,"src":83530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,83532,83533],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[402,83535,83537],{"id":83536},"_4102-构造函数","4.10.2 构造函数",[19,83539,83540,83543],{},[409,83541,83542],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,83545,83546,83549],{},[409,83547,83548],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[31,83551,83553],{"className":53933,"code":83552,"language":53935,"meta":36,"style":36},"\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",[26,83554,83555,83563,83568,83589,83602,83614,83626,83630,83635,83662,83667,83694],{"__ignoreMap":36},[40,83556,83557,83559,83561],{"class":42,"line":43},[40,83558,4387],{"class":50},[40,83560,55111],{"class":46},[40,83562,54606],{"class":50},[40,83564,83565],{"class":42,"line":54},[40,83566,83567],{"class":997},"\u002F\u002F例：\n",[40,83569,83570,83572,83575,83577,83579,83581,83583,83585,83587],{"class":42,"line":70},[40,83571,57747],{"class":1283},[40,83573,83574],{"class":596}," Pig",[40,83576,3488],{"class":50},[40,83578,83105],{"class":8539},[40,83580,1299],{"class":50},[40,83582,73517],{"class":8539},[40,83584,1299],{"class":50},[40,83586,73534],{"class":8539},[40,83588,15764],{"class":50},[40,83590,83591,83594,83597,83599],{"class":42,"line":78},[40,83592,83593],{"class":63},"    this",[40,83595,83596],{"class":50},".name",[40,83598,1284],{"class":1283},[40,83600,83601],{"class":50},"name\n",[40,83603,83604,83606,83609,83611],{"class":42,"line":86},[40,83605,83593],{"class":63},[40,83607,83608],{"class":50},".age",[40,83610,1284],{"class":1283},[40,83612,83613],{"class":50},"age\n",[40,83615,83616,83618,83621,83623],{"class":42,"line":100},[40,83617,83593],{"class":63},[40,83619,83620],{"class":50},".gender",[40,83622,1284],{"class":1283},[40,83624,83625],{"class":50},"gender    \n",[40,83627,83628],{"class":42,"line":108},[40,83629,4907],{"class":50},[40,83631,83632],{"class":42,"line":121},[40,83633,83634],{"class":997},"\u002F\u002F创建佩奇对象\n",[40,83636,83637,83639,83642,83644,83646,83648,83651,83653,83655,83657,83660],{"class":42,"line":134},[40,83638,10115],{"class":1283},[40,83640,83641],{"class":63}," Peppa",[40,83643,15039],{"class":1283},[40,83645,83574],{"class":596},[40,83647,3488],{"class":50},[40,83649,83650],{"class":94},"'佩奇'",[40,83652,1299],{"class":50},[40,83654,3824],{"class":63},[40,83656,1299],{"class":50},[40,83658,83659],{"class":94},"'女'",[40,83661,1811],{"class":50},[40,83663,83664],{"class":42,"line":146},[40,83665,83666],{"class":997},"\u002F\u002F创建乔治对象\n",[40,83668,83669,83671,83674,83676,83678,83680,83683,83685,83687,83689,83692],{"class":42,"line":154},[40,83670,10115],{"class":1283},[40,83672,83673],{"class":63}," George",[40,83675,15039],{"class":1283},[40,83677,83574],{"class":596},[40,83679,3488],{"class":50},[40,83681,83682],{"class":94},"'乔治'",[40,83684,1299],{"class":50},[40,83686,3555],{"class":63},[40,83688,1299],{"class":50},[40,83690,83691],{"class":94},"'男'",[40,83693,1811],{"class":50},[40,83695,83696,83698,83700],{"class":42,"line":162},[40,83697,55083],{"class":50},[40,83699,55111],{"class":46},[40,83701,54606],{"class":50},[19,83703,83704],{},[438,83705],{"alt":36,"src":83706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,83708,83709],{},[438,83710],{"alt":36,"src":83711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,83713,83714],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,83716,83717],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,83719,83720],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,83722,83723],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,83725,83726],{},"这里用等号是因为：对象.属性=值",[19,83728,83729],{},"①利用对象字面量创建对象",[19,83731,83732],{},"const o={",[19,83734,83735],{},"name:'pink'",[19,83737,83738],{},"} ②利用new Object创建对象",[19,83740,83741],{},"const o=new Object({name:'pink'})",[19,83743,83744],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,83746,83747],{},"构造函数创建对象的执行过程：",[19,83749,83750],{},[438,83751],{"alt":36,"src":83752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[402,83754,83756],{"id":83755},"_4103-实例成员","4.10.3 实例成员",[19,83758,83759],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[492,83761,83762,83765,83768],{},[495,83763,83764],{},"实例对象的属性和方法即为实例成员",[495,83766,83767],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[495,83769,83770],{},"构造函数创建的实例对象彼此独立互不影响",[402,83772,83774],{"id":83773},"_4104-静态成员","4.10.4 静态成员",[19,83776,83777],{},[438,83778],{"alt":36,"src":83779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,83781,83782],{},"静态成员有Date.now() Math.PI Math.random()",[19,83784,83785],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,83787,83788],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,83790,83791],{},"function Pig(name) n {",[19,83793,83794],{},"this.name=name",[19,83796,4423],{},[19,83798,83799],{},"Pig.eyes=2",[19,83801,83802],{},"Pig.sayHai=function () { console.log(this) }",[19,83804,83805],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,83807,83808],{},"console.log(Pig.eyes) \u002F\u002F2",[19,83810,14654],{},[492,83812,83813,83816,83819,83822,83825],{},[495,83814,83815],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[495,83817,83818],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[495,83820,83821],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[495,83823,83824],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[495,83826,83827],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,83829,83830],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[402,83832,83834],{"id":83833},"_4105-内置构造函数","4.10.5 内置构造函数",[19,83836,83837],{},"内置构造函数包含：",[19,83839,83840],{},[438,83841],{"alt":36,"src":83842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,83844,83845],{},[438,83846],{"alt":36,"src":83847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,83849,83850],{},"这些基本数据类型，js对他们进行了包装",[55111,83852,83853],{},"\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",[2423,83855,83857],{"id":83856},"_41051-object","4.10.5.1 Object",[19,83859,83860],{},"Object 是内置的构造函数，用于创建普通对象",[19,83862,83863],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[31,83865,83867],{"className":53933,"code":83866,"language":53935,"meta":36,"style":36},"const user=new Object({name:'小明',age:15})\n",[26,83868,83869],{"__ignoreMap":36},[40,83870,83871],{"class":42,"line":43},[40,83872,83866],{"class":50},[19,83874,83875],{},"三个常用的静态方法：",[26230,83877,83879],{"id":83878},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,83881,83882],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,83884,83885],{},[438,83886],{"alt":36,"src":83887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,83889,83890],{},[438,83891],{"alt":36,"src":83892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[31,83894,83896],{"className":56365,"code":83895,"language":56367,"meta":36,"style":36},"\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",[26,83897,83898,83906,83914,83919,83924,83929,83934,83939,83944,83952],{"__ignoreMap":36},[40,83899,83900,83902,83904],{"class":42,"line":43},[40,83901,4387],{"class":50},[40,83903,55098],{"class":46},[40,83905,54606],{"class":50},[40,83907,83908,83910,83912],{"class":42,"line":54},[40,83909,55442],{"class":50},[40,83911,55111],{"class":46},[40,83913,54606],{"class":50},[40,83915,83916],{"class":42,"line":70},[40,83917,83918],{"class":50},"    const o = { name: 'pink', age: 6 }\n",[40,83920,83921],{"class":42,"line":78},[40,83922,83923],{"class":50},"    \u002F\u002F 获得所有属性名\n",[40,83925,83926],{"class":42,"line":86},[40,83927,83928],{"class":50},"    const arr = Object.keys(o)\n",[40,83930,83931],{"class":42,"line":100},[40,83932,83933],{"class":50},"    console.log(arr)\n",[40,83935,83936],{"class":42,"line":108},[40,83937,83938],{"class":50},"    \u002F\u002F 获得所有属性值\n",[40,83940,83941],{"class":42,"line":121},[40,83942,83943],{"class":50},"    console.log(Object.values(o))\n",[40,83945,83946,83948,83950],{"class":42,"line":134},[40,83947,55715],{"class":50},[40,83949,55111],{"class":46},[40,83951,54606],{"class":50},[40,83953,83954,83956,83958],{"class":42,"line":146},[40,83955,55083],{"class":50},[40,83957,55098],{"class":46},[40,83959,54606],{"class":50},[26230,83961,83963],{"id":83962},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,83965,83966],{},"Object.assign(oo,o)",[19,83968,83969],{},"后的东西添加给前 是追加",[19,83971,83972],{},[438,83973],{"alt":36,"src":83974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,83976,83977],{},[438,83978],{"alt":36,"src":83979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[31,83981,83983],{"className":56365,"code":83982,"language":56367,"meta":36,"style":36},"\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",[26,83984,83985,83993,84001,84005,84009,84013,84017,84021,84025,84030,84035,84040,84045,84050,84058],{"__ignoreMap":36},[40,83986,83987,83989,83991],{"class":42,"line":43},[40,83988,4387],{"class":50},[40,83990,55098],{"class":46},[40,83992,54606],{"class":50},[40,83994,83995,83997,83999],{"class":42,"line":54},[40,83996,55442],{"class":50},[40,83998,55111],{"class":46},[40,84000,54606],{"class":50},[40,84002,84003],{"class":42,"line":70},[40,84004,83918],{"class":50},[40,84006,84007],{"class":42,"line":78},[40,84008,83923],{"class":50},[40,84010,84011],{"class":42,"line":86},[40,84012,83928],{"class":50},[40,84014,84015],{"class":42,"line":100},[40,84016,83933],{"class":50},[40,84018,84019],{"class":42,"line":108},[40,84020,83938],{"class":50},[40,84022,84023],{"class":42,"line":121},[40,84024,83943],{"class":50},[40,84026,84027],{"class":42,"line":134},[40,84028,84029],{"class":50},"    const oo = {}\n",[40,84031,84032],{"class":42,"line":146},[40,84033,84034],{"class":50},"    Object.assign(oo, o)\n",[40,84036,84037],{"class":42,"line":154},[40,84038,84039],{"class":50},"    console.log(oo)\n",[40,84041,84042],{"class":42,"line":162},[40,84043,84044],{"class":50},"    Object.assign(o, { gender: '女' })\n",[40,84046,84047],{"class":42,"line":170},[40,84048,84049],{"class":50},"    console.log(o)\n",[40,84051,84052,84054,84056],{"class":42,"line":183},[40,84053,55715],{"class":50},[40,84055,55111],{"class":46},[40,84057,54606],{"class":50},[40,84059,84060,84062,84064],{"class":42,"line":196},[40,84061,55083],{"class":50},[40,84063,55098],{"class":46},[40,84065,54606],{"class":50},[19,84067,84068],{},[438,84069],{"alt":36,"src":84070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[2423,84072,84074],{"id":84073},"_41052-array","4.10.5.2 Array",[19,84076,84077],{},"Array 是内置的构造函数，用于创建数组",[19,84079,84080],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[31,84082,84084],{"className":53933,"code":84083,"language":53935,"meta":36,"style":36},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[26,84085,84086,84091],{"__ignoreMap":36},[40,84087,84088],{"class":42,"line":43},[40,84089,84090],{"class":50},"const arr=new Array(3,5)\n",[40,84092,84093],{"class":42,"line":54},[40,84094,84095],{"class":50},"console.log(arr)  \u002F\u002F[3,5]\n",[19,84097,84098],{},"Array的实例方法，这个方法是实例成员",[19,84100,84101],{},[438,84102],{"alt":36,"src":84103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[26230,84105,84107],{"id":84106},"_410521-reduce","4.10.5.2.1 reduce",[19,84109,84110],{},[438,84111],{"alt":36,"src":84112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[31,84114,84116],{"className":56365,"code":84115,"language":56367,"meta":36,"style":36},"\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",[26,84117,84118,84126,84134,84139,84144,84149,84154,84158,84163,84168,84173,84177,84182,84187,84191,84196,84201,84206,84214],{"__ignoreMap":36},[40,84119,84120,84122,84124],{"class":42,"line":43},[40,84121,4387],{"class":50},[40,84123,55098],{"class":46},[40,84125,54606],{"class":50},[40,84127,84128,84130,84132],{"class":42,"line":54},[40,84129,55442],{"class":50},[40,84131,55111],{"class":46},[40,84133,54606],{"class":50},[40,84135,84136],{"class":42,"line":70},[40,84137,84138],{"class":50},"    const arr = [1, 5, 8]\n",[40,84140,84141],{"class":42,"line":78},[40,84142,84143],{"class":50},"    \u002F\u002F 1.没有初始值\n",[40,84145,84146],{"class":42,"line":86},[40,84147,84148],{"class":50},"    const total = arr.reduce(function (prev, current) {\n",[40,84150,84151],{"class":42,"line":100},[40,84152,84153],{"class":50},"      return prev + current\n",[40,84155,84156],{"class":42,"line":108},[40,84157,36761],{"class":50},[40,84159,84160],{"class":42,"line":121},[40,84161,84162],{"class":50},"    console.log(total)   \u002F\u002F14\n",[40,84164,84165],{"class":42,"line":134},[40,84166,84167],{"class":50},"    \u002F\u002F 2.有初始值\n",[40,84169,84170],{"class":42,"line":146},[40,84171,84172],{"class":50},"    const total1 = arr.reduce(function (prev, current) {\n",[40,84174,84175],{"class":42,"line":154},[40,84176,84153],{"class":50},[40,84178,84179],{"class":42,"line":162},[40,84180,84181],{"class":50},"    }, 10)\n",[40,84183,84184],{"class":42,"line":170},[40,84185,84186],{"class":50},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[40,84188,84189],{"class":42,"line":183},[40,84190,1413],{"emptyLinePlaceholder":1412},[40,84192,84193],{"class":42,"line":196},[40,84194,84195],{"class":50},"    \u002F\u002F 3.箭头函数写法\n",[40,84197,84198],{"class":42,"line":204},[40,84199,84200],{"class":50},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[40,84202,84203],{"class":42,"line":217},[40,84204,84205],{"class":50},"    console.log(total2)   \u002F\u002F24\n",[40,84207,84208,84210,84212],{"class":42,"line":230},[40,84209,55715],{"class":50},[40,84211,55111],{"class":46},[40,84213,54606],{"class":50},[40,84215,84216,84218,84220],{"class":42,"line":238},[40,84217,55083],{"class":50},[40,84219,55098],{"class":46},[40,84221,54606],{"class":50},[19,84223,84224],{},"执行过程：",[492,84226,84227,84230,84233],{},[495,84228,84229],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[495,84231,84232],{},"每一次循环，把返回值给作为下一次循环的上一次值",[495,84234,84235],{},"如果有起始值，则起始值作为上一次值",[31,84237,84239],{"className":56365,"code":84238,"language":56367,"meta":36,"style":36},"\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",[26,84240,84241,84249,84257,84261,84265,84269,84273,84277,84281,84286,84291,84296,84301,84306,84310,84314,84318,84322,84326,84330,84335,84339,84344,84348,84353,84358,84362,84366,84370,84378],{"__ignoreMap":36},[40,84242,84243,84245,84247],{"class":42,"line":43},[40,84244,4387],{"class":50},[40,84246,55098],{"class":46},[40,84248,54606],{"class":50},[40,84250,84251,84253,84255],{"class":42,"line":54},[40,84252,55442],{"class":50},[40,84254,55111],{"class":46},[40,84256,54606],{"class":50},[40,84258,84259],{"class":42,"line":70},[40,84260,84138],{"class":50},[40,84262,84263],{"class":42,"line":78},[40,84264,84143],{"class":50},[40,84266,84267],{"class":42,"line":86},[40,84268,84148],{"class":50},[40,84270,84271],{"class":42,"line":100},[40,84272,84153],{"class":50},[40,84274,84275],{"class":42,"line":108},[40,84276,36761],{"class":50},[40,84278,84279],{"class":42,"line":121},[40,84280,84162],{"class":50},[40,84282,84283],{"class":42,"line":134},[40,84284,84285],{"class":50},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[40,84287,84288],{"class":42,"line":146},[40,84289,84290],{"class":50},"    \u002F\u002F     1              5                    6\n",[40,84292,84293],{"class":42,"line":154},[40,84294,84295],{"class":50},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[40,84297,84298],{"class":42,"line":162},[40,84299,84300],{"class":50},"    \u002F\u002F     6              8                    14\n",[40,84302,84303],{"class":42,"line":170},[40,84304,84305],{"class":50},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[40,84307,84308],{"class":42,"line":183},[40,84309,84167],{"class":50},[40,84311,84312],{"class":42,"line":196},[40,84313,84172],{"class":50},[40,84315,84316],{"class":42,"line":204},[40,84317,84153],{"class":50},[40,84319,84320],{"class":42,"line":217},[40,84321,84181],{"class":50},[40,84323,84324],{"class":42,"line":230},[40,84325,84186],{"class":50},[40,84327,84328],{"class":42,"line":238},[40,84329,84285],{"class":50},[40,84331,84332],{"class":42,"line":251},[40,84333,84334],{"class":50},"    \u002F\u002F     10             1                     11\n",[40,84336,84337],{"class":42,"line":264},[40,84338,84295],{"class":50},[40,84340,84341],{"class":42,"line":277},[40,84342,84343],{"class":50},"    \u002F\u002F     11             5                    16\n",[40,84345,84346],{"class":42,"line":290},[40,84347,84295],{"class":50},[40,84349,84350],{"class":42,"line":298},[40,84351,84352],{"class":50},"    \u002F\u002F     16             8                    24\n",[40,84354,84355],{"class":42,"line":310},[40,84356,84357],{"class":50},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[40,84359,84360],{"class":42,"line":5086},[40,84361,84195],{"class":50},[40,84363,84364],{"class":42,"line":5091},[40,84365,84200],{"class":50},[40,84367,84368],{"class":42,"line":5105},[40,84369,84205],{"class":50},[40,84371,84372,84374,84376],{"class":42,"line":5110},[40,84373,55715],{"class":50},[40,84375,55111],{"class":46},[40,84377,54606],{"class":50},[40,84379,84380,84382,84384],{"class":42,"line":5902},[40,84381,55083],{"class":50},[40,84383,55098],{"class":46},[40,84385,54606],{"class":50},[26230,84387,84389],{"id":84388},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,84391,84392],{},[438,84393],{"alt":36,"src":84394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[31,84396,84398],{"className":56365,"code":84397,"language":56367,"meta":36,"style":36},"\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",[26,84399,84400,84408,84416,84421,84426,84431,84436,84440,84445,84450,84455,84460,84465,84470,84474,84479,84483,84488,84496],{"__ignoreMap":36},[40,84401,84402,84404,84406],{"class":42,"line":43},[40,84403,4387],{"class":50},[40,84405,55098],{"class":46},[40,84407,54606],{"class":50},[40,84409,84410,84412,84414],{"class":42,"line":54},[40,84411,55442],{"class":50},[40,84413,55111],{"class":46},[40,84415,54606],{"class":50},[40,84417,84418],{"class":42,"line":70},[40,84419,84420],{"class":50},"    const arr = [\n",[40,84422,84423],{"class":42,"line":78},[40,84424,84425],{"class":50},"      { name: '张三', salary: 10000 },\n",[40,84427,84428],{"class":42,"line":86},[40,84429,84430],{"class":50},"      { name: '李四', salary: 10000 },\n",[40,84432,84433],{"class":42,"line":100},[40,84434,84435],{"class":50},"      { name: '王五', salary: 10000 }\n",[40,84437,84438],{"class":42,"line":108},[40,84439,56407],{"class":50},[40,84441,84442],{"class":42,"line":121},[40,84443,84444],{"class":50},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[40,84446,84447],{"class":42,"line":134},[40,84448,84449],{"class":50},"    \u002F\u002F prev是累计值\n",[40,84451,84452],{"class":42,"line":146},[40,84453,84454],{"class":50},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[40,84456,84457],{"class":42,"line":154},[40,84458,84459],{"class":50},"    console.log(total)\n",[40,84461,84462],{"class":42,"line":162},[40,84463,84464],{"class":50},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[40,84466,84467],{"class":42,"line":170},[40,84468,84469],{"class":50},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[40,84471,84472],{"class":42,"line":183},[40,84473,84464],{"class":50},[40,84475,84476],{"class":42,"line":196},[40,84477,84478],{"class":50},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[40,84480,84481],{"class":42,"line":204},[40,84482,84464],{"class":50},[40,84484,84485],{"class":42,"line":217},[40,84486,84487],{"class":50},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[40,84489,84490,84492,84494],{"class":42,"line":230},[40,84491,55715],{"class":50},[40,84493,55111],{"class":46},[40,84495,54606],{"class":50},[40,84497,84498,84500,84502],{"class":42,"line":238},[40,84499,55083],{"class":50},[40,84501,55098],{"class":46},[40,84503,54606],{"class":50},[26230,84505,84507],{"id":84506},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,84509,84510],{},[438,84511],{"alt":36,"src":84512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,84514,84515],{},[438,84516],{"alt":36,"src":84517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[492,84519,84520],{},[495,84521,84522],{},"find()",[19,84524,84525],{},"循环查找，找到第一个就ok",[19,84527,84528],{},[2106,84529,84532],{"href":84530,"rel":84531},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[2110],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[31,84534,84536],{"className":53933,"code":84535,"language":53935,"meta":36,"style":36},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[26,84537,84538,84543,84548],{"__ignoreMap":36},[40,84539,84540],{"class":42,"line":43},[40,84541,84542],{"class":50},"const array1 = [5, 12, 8, 130, 44]\n",[40,84544,84545],{"class":42,"line":54},[40,84546,84547],{"class":50},"const found = array1.find((element) => element > 10)\n",[40,84549,84550],{"class":42,"line":70},[40,84551,84552],{"class":50},"console.log(found)  \u002F\u002F12\n",[19,84554,84555,84557,84558,84563,84564,84567,84568,84570,84571,84576,84577,84579,84580,84582,84583,84585,84586],{},[26,84556,84522],{}," 方法是一个",[2106,84559,84562],{"href":84560,"rel":84561},"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",[2110],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[26,84565,84566],{},"callbackFn"," 函数，直到 ",[26,84569,84566],{}," 返回一个",[2106,84572,84575],{"href":84573,"rel":84574},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[2110],"真值","。然后 ",[26,84578,84522],{}," 返回该元素并停止迭代数组。如果 ",[26,84581,84566],{}," 从未返回真值，则 ",[26,84584,84522],{}," 返回 ",[26,84587,84588],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[31,84590,84592],{"className":56365,"code":84591,"language":56367,"meta":36,"style":36},"\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",[26,84593,84594,84602,84610,84615,84620,84625,84629,84634,84639,84643,84648,84653,84657,84661,84666,84671,84675,84679,84684,84689,84694,84699,84704,84708,84713,84718,84723,84728,84732,84737,84745],{"__ignoreMap":36},[40,84595,84596,84598,84600],{"class":42,"line":43},[40,84597,4387],{"class":50},[40,84599,55098],{"class":46},[40,84601,54606],{"class":50},[40,84603,84604,84606,84608],{"class":42,"line":54},[40,84605,55442],{"class":50},[40,84607,55111],{"class":46},[40,84609,54606],{"class":50},[40,84611,84612],{"class":42,"line":70},[40,84613,84614],{"class":50},"    const arr = ['red', 'blue', 'green']\n",[40,84616,84617],{"class":42,"line":78},[40,84618,84619],{"class":50},"    const found = arr.find(item => item === 'pink')\n",[40,84621,84622],{"class":42,"line":86},[40,84623,84624],{"class":50},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[40,84626,84627],{"class":42,"line":100},[40,84628,1413],{"emptyLinePlaceholder":1412},[40,84630,84631],{"class":42,"line":108},[40,84632,84633],{"class":50},"    \u002F\u002F 使用场景，用于查找数据\n",[40,84635,84636],{"class":42,"line":121},[40,84637,84638],{"class":50},"    const arr1 = [\n",[40,84640,84641],{"class":42,"line":134},[40,84642,82681],{"class":50},[40,84644,84645],{"class":42,"line":146},[40,84646,84647],{"class":50},"        name: '小米',\n",[40,84649,84650],{"class":42,"line":154},[40,84651,84652],{"class":50},"        price: 1999\n",[40,84654,84655],{"class":42,"line":162},[40,84656,81187],{"class":50},[40,84658,84659],{"class":42,"line":170},[40,84660,82681],{"class":50},[40,84662,84663],{"class":42,"line":183},[40,84664,84665],{"class":50},"        name: '华为',\n",[40,84667,84668],{"class":42,"line":196},[40,84669,84670],{"class":50},"        price: 3999\n",[40,84672,84673],{"class":42,"line":204},[40,84674,55696],{"class":50},[40,84676,84677],{"class":42,"line":217},[40,84678,56407],{"class":50},[40,84680,84681],{"class":42,"line":230},[40,84682,84683],{"class":50},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[40,84685,84686],{"class":42,"line":238},[40,84687,84688],{"class":50},"    \u002F\u002F const found1 = arr1.find(item => {\n",[40,84690,84691],{"class":42,"line":251},[40,84692,84693],{"class":50},"    \u002F\u002F   if (item.name === '小米') {\n",[40,84695,84696],{"class":42,"line":264},[40,84697,84698],{"class":50},"    \u002F\u002F     return item\n",[40,84700,84701],{"class":42,"line":277},[40,84702,84703],{"class":50},"    \u002F\u002F   }\n",[40,84705,84706],{"class":42,"line":290},[40,84707,66588],{"class":50},[40,84709,84710],{"class":42,"line":298},[40,84711,84712],{"class":50},"    \u002F\u002F 另一种写法\n",[40,84714,84715],{"class":42,"line":310},[40,84716,84717],{"class":50},"    const found1 = arr1.find(item => {\n",[40,84719,84720],{"class":42,"line":5086},[40,84721,84722],{"class":50},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[40,84724,84725],{"class":42,"line":5091},[40,84726,84727],{"class":50},"      return item.name = '小米'\n",[40,84729,84730],{"class":42,"line":5105},[40,84731,36761],{"class":50},[40,84733,84734],{"class":42,"line":5110},[40,84735,84736],{"class":50},"    console.log(found1)\n",[40,84738,84739,84741,84743],{"class":42,"line":5902},[40,84740,55715],{"class":50},[40,84742,55111],{"class":46},[40,84744,54606],{"class":50},[40,84746,84747,84749,84751],{"class":42,"line":5916},[40,84748,55083],{"class":50},[40,84750,55098],{"class":46},[40,84752,54606],{"class":50},[19,84754,84755],{},[438,84756],{"alt":36,"src":84757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,84759,84760],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[492,84762,84763],{"start":54},[495,84764,84765],{},"every()返回的是布尔值",[19,84767,84768],{},[2106,84769,84772],{"href":84770,"rel":84771},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[2110],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,84774,84775],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,84777,84778],{},"some是只有有一个就没问题",[19,84780,84781],{},"every是必须全是才行",[31,84783,84787],{"className":84784,"code":84785,"language":84786,"meta":36,"style":36},"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",[26,84788,84789,84805,84819,84823,84832],{"__ignoreMap":36},[40,84790,84791,84793,84796,84798,84800,84803],{"class":42,"line":43},[40,84792,57747],{"class":1283},[40,84794,84795],{"class":50}," isBigEnough(element, ",[40,84797,77353],{"class":1283},[40,84799,15757],{"class":50},[40,84801,84802],{"class":1283},"array",[40,84804,15764],{"class":50},[40,84806,84807,84810,84813,84815,84817],{"class":42,"line":54},[40,84808,84809],{"class":1283},"  return",[40,84811,84812],{"class":50}," element ",[40,84814,5041],{"class":1283},[40,84816,5364],{"class":63},[40,84818,4637],{"class":50},[40,84820,84821],{"class":42,"line":70},[40,84822,4907],{"class":50},[40,84824,84825,84828,84830],{"class":42,"line":78},[40,84826,84827],{"class":50},"[12, 5, 8, 130, 44].every(isBigEnough); ",[40,84829,36629],{"class":1283},[40,84831,57814],{"class":50},[40,84833,84834,84837,84839],{"class":42,"line":86},[40,84835,84836],{"class":50},"[12, 54, 18, 130, 44].every(isBigEnough); ",[40,84838,36629],{"class":1283},[40,84840,61238],{"class":50},[31,84842,84844],{"className":56365,"code":84843,"language":56367,"meta":36,"style":36},"\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",[26,84845,84846,84854,84862,84867,84871,84876,84881,84889],{"__ignoreMap":36},[40,84847,84848,84850,84852],{"class":42,"line":43},[40,84849,4387],{"class":50},[40,84851,55098],{"class":46},[40,84853,54606],{"class":50},[40,84855,84856,84858,84860],{"class":42,"line":54},[40,84857,55442],{"class":50},[40,84859,55111],{"class":46},[40,84861,54606],{"class":50},[40,84863,84864],{"class":42,"line":70},[40,84865,84866],{"class":50},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[40,84868,84869],{"class":42,"line":78},[40,84870,81617],{"class":50},[40,84872,84873],{"class":42,"line":86},[40,84874,84875],{"class":50},"    const flag = arr.every(item => item >= 10)\n",[40,84877,84878],{"class":42,"line":100},[40,84879,84880],{"class":50},"    console.log(flag)    \u002F\u002Ftrue\n",[40,84882,84883,84885,84887],{"class":42,"line":108},[40,84884,55715],{"class":50},[40,84886,55111],{"class":46},[40,84888,54606],{"class":50},[40,84890,84891,84893,84895],{"class":42,"line":121},[40,84892,55083],{"class":50},[40,84894,55098],{"class":46},[40,84896,54606],{"class":50},[31,84898,84900],{"className":56365,"code":84899,"language":56367,"meta":36,"style":36},"\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",[26,84901,84902,84910,84918,84922,84927,84932,84937,84945],{"__ignoreMap":36},[40,84903,84904,84906,84908],{"class":42,"line":43},[40,84905,4387],{"class":50},[40,84907,55098],{"class":46},[40,84909,54606],{"class":50},[40,84911,84912,84914,84916],{"class":42,"line":54},[40,84913,55442],{"class":50},[40,84915,55111],{"class":46},[40,84917,54606],{"class":50},[40,84919,84920],{"class":42,"line":70},[40,84921,84866],{"class":50},[40,84923,84924],{"class":42,"line":78},[40,84925,84926],{"class":50},"    const arr = [10, 0, 5]\n",[40,84928,84929],{"class":42,"line":86},[40,84930,84931],{"class":50},"    const flag = arr.some(item => item >= 10)\n",[40,84933,84934],{"class":42,"line":100},[40,84935,84936],{"class":50},"    console.log(flag)   \u002F\u002Ftrue\n",[40,84938,84939,84941,84943],{"class":42,"line":108},[40,84940,55715],{"class":50},[40,84942,55111],{"class":46},[40,84944,54606],{"class":50},[40,84946,84947,84949,84951],{"class":42,"line":121},[40,84948,55083],{"class":50},[40,84950,55098],{"class":46},[40,84952,54606],{"class":50},[26230,84954,84956],{"id":84955},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,84958,84959],{},[438,84960],{"alt":36,"src":84961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[31,84963,84965],{"className":53933,"code":84964,"language":53935,"meta":36,"style":36},"\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",[26,84966,84967,84977,84991,84995,85003,85017,85037,85049,85057,85064,85076,85088,85100,85112,85122,85132,85136,85144,85152,85156,85164,85176,85184,85206,85211,85216,85249,85257,85265,85269],{"__ignoreMap":36},[40,84968,84969,84971,84973,84975],{"class":42,"line":43},[40,84970,54597],{"class":50},[40,84972,54600],{"class":46},[40,84974,54603],{"class":596},[40,84976,54606],{"class":50},[40,84978,84979,84981,84983,84985,84987,84989],{"class":42,"line":54},[40,84980,4387],{"class":50},[40,84982,53935],{"class":46},[40,84984,54615],{"class":596},[40,84986,1284],{"class":50},[40,84988,54620],{"class":94},[40,84990,54606],{"class":50},[40,84992,84993],{"class":42,"line":70},[40,84994,1413],{"emptyLinePlaceholder":1412},[40,84996,84997,84999,85001],{"class":42,"line":78},[40,84998,4387],{"class":50},[40,85000,54633],{"class":46},[40,85002,54606],{"class":50},[40,85004,85005,85007,85009,85011,85013,85015],{"class":42,"line":86},[40,85006,55442],{"class":50},[40,85008,54643],{"class":46},[40,85010,54646],{"class":596},[40,85012,1284],{"class":50},[40,85014,54651],{"class":94},[40,85016,54606],{"class":50},[40,85018,85019,85021,85023,85025,85027,85029,85031,85033,85035],{"class":42,"line":100},[40,85020,55442],{"class":50},[40,85022,54643],{"class":46},[40,85024,18242],{"class":596},[40,85026,1284],{"class":50},[40,85028,54690],{"class":94},[40,85030,54670],{"class":596},[40,85032,1284],{"class":50},[40,85034,54697],{"class":94},[40,85036,54606],{"class":50},[40,85038,85039,85041,85043,85045,85047],{"class":42,"line":108},[40,85040,55442],{"class":50},[40,85042,54706],{"class":46},[40,85044,54709],{"class":50},[40,85046,54706],{"class":46},[40,85048,54606],{"class":50},[40,85050,85051,85053,85055],{"class":42,"line":121},[40,85052,55442],{"class":50},[40,85054,3384],{"class":46},[40,85056,54606],{"class":50},[40,85058,85059,85062],{"class":42,"line":134},[40,85060,85061],{"class":46},"    div",[40,85063,18894],{"class":50},[40,85065,85066,85068,85070,85072,85074],{"class":42,"line":146},[40,85067,58069],{"class":63},[40,85069,60],{"class":50},[40,85071,5053],{"class":63},[40,85073,54790],{"class":1283},[40,85075,4637],{"class":50},[40,85077,85078,85080,85082,85084,85086],{"class":42,"line":154},[40,85079,58083],{"class":63},[40,85081,60],{"class":50},[40,85083,3880],{"class":63},[40,85085,54790],{"class":1283},[40,85087,4637],{"class":50},[40,85089,85090,85092,85094,85096,85098],{"class":42,"line":162},[40,85091,60657],{"class":63},[40,85093,60],{"class":50},[40,85095,3880],{"class":63},[40,85097,54790],{"class":1283},[40,85099,4637],{"class":50},[40,85101,85102,85104,85106,85108,85110],{"class":42,"line":170},[40,85103,68431],{"class":63},[40,85105,60],{"class":50},[40,85107,3977],{"class":63},[40,85109,54790],{"class":1283},[40,85111,4637],{"class":50},[40,85113,85114,85116,85118,85120],{"class":42,"line":183},[40,85115,60584],{"class":63},[40,85117,60],{"class":50},[40,85119,54890],{"class":63},[40,85121,4637],{"class":50},[40,85123,85124,85126,85128,85130],{"class":42,"line":196},[40,85125,58182],{"class":63},[40,85127,60],{"class":50},[40,85129,54943],{"class":63},[40,85131,4637],{"class":50},[40,85133,85134],{"class":42,"line":204},[40,85135,5513],{"class":50},[40,85137,85138,85140,85142],{"class":42,"line":217},[40,85139,55715],{"class":50},[40,85141,3384],{"class":46},[40,85143,54606],{"class":50},[40,85145,85146,85148,85150],{"class":42,"line":230},[40,85147,55083],{"class":50},[40,85149,54633],{"class":46},[40,85151,54606],{"class":50},[40,85153,85154],{"class":42,"line":238},[40,85155,1413],{"emptyLinePlaceholder":1412},[40,85157,85158,85160,85162],{"class":42,"line":251},[40,85159,4387],{"class":50},[40,85161,55098],{"class":46},[40,85163,54606],{"class":50},[40,85165,85166,85168,85170,85172,85174],{"class":42,"line":264},[40,85167,55442],{"class":50},[40,85169,54909],{"class":46},[40,85171,58612],{"class":50},[40,85173,54909],{"class":46},[40,85175,54606],{"class":50},[40,85177,85178,85180,85182],{"class":42,"line":277},[40,85179,55442],{"class":50},[40,85181,55111],{"class":46},[40,85183,54606],{"class":50},[40,85185,85186,85188,85191,85193,85196,85199,85201,85204],{"class":42,"line":290},[40,85187,14543],{"class":1283},[40,85189,85190],{"class":63}," spec",[40,85192,16886],{"class":1283},[40,85194,85195],{"class":50}," { size: ",[40,85197,85198],{"class":94},"'40cm*40cm'",[40,85200,58762],{"class":50},[40,85202,85203],{"class":94},"'黑色'",[40,85205,58902],{"class":50},[40,85207,85208],{"class":42,"line":298},[40,85209,85210],{"class":997},"    \u002F\u002F const arr = Object.values(spec)\n",[40,85212,85213],{"class":42,"line":310},[40,85214,85215],{"class":997},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[40,85217,85218,85220,85222,85224,85227,85229,85231,85234,85237,85240,85242,85244,85247],{"class":42,"line":5086},[40,85219,55705],{"class":50},[40,85221,57697],{"class":596},[40,85223,3488],{"class":50},[40,85225,85226],{"class":94},"'div'",[40,85228,77544],{"class":50},[40,85230,1284],{"class":1283},[40,85232,85233],{"class":50}," Object.",[40,85235,85236],{"class":596},"values",[40,85238,85239],{"class":50},"(spec).",[40,85241,77518],{"class":596},[40,85243,3488],{"class":50},[40,85245,85246],{"class":94},"'\u002F'",[40,85248,1811],{"class":50},[40,85250,85251,85253,85255],{"class":42,"line":5091},[40,85252,55715],{"class":50},[40,85254,55111],{"class":46},[40,85256,54606],{"class":50},[40,85258,85259,85261,85263],{"class":42,"line":5105},[40,85260,55083],{"class":50},[40,85262,55098],{"class":46},[40,85264,54606],{"class":50},[40,85266,85267],{"class":42,"line":5110},[40,85268,1413],{"emptyLinePlaceholder":1412},[40,85270,85271,85273,85275],{"class":42,"line":5902},[40,85272,55083],{"class":50},[40,85274,53935],{"class":46},[40,85276,54606],{"class":50},[19,85278,85279],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[26230,85281,85283],{"id":85282},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,85285,85286],{},"静态方法，将伪数组转换为真数组",[19,85288,85289],{},[438,85290],{"alt":36,"src":85291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[31,85293,85295],{"className":56365,"code":85294,"language":56367,"meta":36,"style":36},"\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",[26,85296,85297,85305,85313,85325,85337,85349,85357,85365,85370,85375,85380,85385,85393],{"__ignoreMap":36},[40,85298,85299,85301,85303],{"class":42,"line":43},[40,85300,4387],{"class":50},[40,85302,55098],{"class":46},[40,85304,54606],{"class":50},[40,85306,85307,85309,85311],{"class":42,"line":54},[40,85308,55442],{"class":50},[40,85310,1338],{"class":46},[40,85312,54606],{"class":50},[40,85314,85315,85317,85319,85321,85323],{"class":42,"line":70},[40,85316,54640],{"class":50},[40,85318,495],{"class":46},[40,85320,58612],{"class":50},[40,85322,495],{"class":46},[40,85324,54606],{"class":50},[40,85326,85327,85329,85331,85333,85335],{"class":42,"line":78},[40,85328,54640],{"class":50},[40,85330,495],{"class":46},[40,85332,58612],{"class":50},[40,85334,495],{"class":46},[40,85336,54606],{"class":50},[40,85338,85339,85341,85343,85345,85347],{"class":42,"line":86},[40,85340,54640],{"class":50},[40,85342,495],{"class":46},[40,85344,58612],{"class":50},[40,85346,495],{"class":46},[40,85348,54606],{"class":50},[40,85350,85351,85353,85355],{"class":42,"line":100},[40,85352,55715],{"class":50},[40,85354,1338],{"class":46},[40,85356,54606],{"class":50},[40,85358,85359,85361,85363],{"class":42,"line":108},[40,85360,55442],{"class":50},[40,85362,55111],{"class":46},[40,85364,54606],{"class":50},[40,85366,85367],{"class":42,"line":121},[40,85368,85369],{"class":50},"    const lis = document.querySelectorAll('li')\n",[40,85371,85372],{"class":42,"line":134},[40,85373,85374],{"class":50},"    const liss = Array.from(lis)\n",[40,85376,85377],{"class":42,"line":146},[40,85378,85379],{"class":50},"    liss.pop()\n",[40,85381,85382],{"class":42,"line":154},[40,85383,85384],{"class":50},"    console.log(liss)\n",[40,85386,85387,85389,85391],{"class":42,"line":162},[40,85388,55715],{"class":50},[40,85390,55111],{"class":46},[40,85392,54606],{"class":50},[40,85394,85395,85397,85399],{"class":42,"line":170},[40,85396,55083],{"class":50},[40,85398,55098],{"class":46},[40,85400,54606],{"class":50},[19,85402,85403],{},[438,85404],{"alt":36,"src":85405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[2423,85407,85409],{"id":85408},"_41053-string","4.10.5.3 String",[19,85411,85412],{},[438,85413],{"alt":36,"src":85414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[26230,85416,85418],{"id":85417},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[31,85420,85422],{"className":56365,"code":85421,"language":56367,"meta":36,"style":36},"\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",[26,85423,85424,85432,85440,85445,85450,85455,85459,85464,85469,85474,85482],{"__ignoreMap":36},[40,85425,85426,85428,85430],{"class":42,"line":43},[40,85427,4387],{"class":50},[40,85429,55098],{"class":46},[40,85431,54606],{"class":50},[40,85433,85434,85436,85438],{"class":42,"line":54},[40,85435,55442],{"class":50},[40,85437,55111],{"class":46},[40,85439,54606],{"class":50},[40,85441,85442],{"class":42,"line":70},[40,85443,85444],{"class":50},"    \u002F\u002F 把字符串转化为数组\n",[40,85446,85447],{"class":42,"line":78},[40,85448,85449],{"class":50},"    const str = 'pink,red'\n",[40,85451,85452],{"class":42,"line":86},[40,85453,85454],{"class":50},"    const arr = str.split(',')\n",[40,85456,85457],{"class":42,"line":100},[40,85458,83933],{"class":50},[40,85460,85461],{"class":42,"line":108},[40,85462,85463],{"class":50},"    const str1 = '2025-8-25'\n",[40,85465,85466],{"class":42,"line":121},[40,85467,85468],{"class":50},"    const arr1 = str1.split('-')\n",[40,85470,85471],{"class":42,"line":134},[40,85472,85473],{"class":50},"    console.log(arr1)\n",[40,85475,85476,85478,85480],{"class":42,"line":146},[40,85477,55715],{"class":50},[40,85479,55111],{"class":46},[40,85481,54606],{"class":50},[40,85483,85484,85486,85488],{"class":42,"line":154},[40,85485,55083],{"class":50},[40,85487,55098],{"class":46},[40,85489,54606],{"class":50},[26230,85491,85493],{"id":85492},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,85495,8504],{},[19,85497,85498],{},"substring(indexStart)",[19,85500,85501],{},"substring(indexStart, indexEnd)",[1338,85503,85504,85515,85527,85537],{},[495,85505,85506,85507,85510,85511,85514],{},"如果省略了 ",[26,85508,85509],{},"indexEnd","，则 ",[26,85512,85513],{},"substring()"," 提取字符直到字符串的末尾",[495,85516,85517,85518,85521,85522,85510,85524,85526],{},"如果 ",[26,85519,85520],{},"indexStart"," 等于 ",[26,85523,85509],{},[26,85525,85513],{}," 返回一个空字符串",[495,85528,85517,85529,85531,85532,85510,85534,85536],{},[26,85530,85520],{}," 大于 ",[26,85533,85509],{},[26,85535,85513],{}," 的效果就像交换了这两个参数一样",[495,85538,85539],{},"结束的索引号不包含想要截取的部分",[31,85541,85543],{"className":84784,"code":85542,"language":84786,"meta":36,"style":36},"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",[26,85544,85545,85557,85561,85595,85625,85629,85660,85664,85691,85721,85751,85755,85786],{"__ignoreMap":36},[40,85546,85547,85550,85552,85555],{"class":42,"line":43},[40,85548,85549],{"class":50},"const anyString ",[40,85551,1284],{"class":1283},[40,85553,85554],{"class":94}," \"Mozilla\"",[40,85556,4637],{"class":50},[40,85558,85559],{"class":42,"line":54},[40,85560,1413],{"emptyLinePlaceholder":1412},[40,85562,85563,85566,85568,85570,85572,85575,85577,85580,85582,85584,85586,85588,85590,85592],{"class":42,"line":70},[40,85564,85565],{"class":63},"console",[40,85567,4037],{"class":50},[40,85569,61545],{"class":63},[40,85571,3488],{"class":50},[40,85573,85574],{"class":63},"anyString",[40,85576,4037],{"class":50},[40,85578,85579],{"class":63},"substring",[40,85581,3488],{"class":50},[40,85583,3672],{"class":63},[40,85585,15757],{"class":50},[40,85587,3698],{"class":63},[40,85589,78548],{"class":50},[40,85591,36629],{"class":1283},[40,85593,85594],{"class":94}," 'M'\n",[40,85596,85597,85599,85601,85603,85605,85607,85609,85611,85613,85615,85617,85619,85621,85623],{"class":42,"line":78},[40,85598,85565],{"class":63},[40,85600,4037],{"class":50},[40,85602,61545],{"class":63},[40,85604,3488],{"class":50},[40,85606,85574],{"class":63},[40,85608,4037],{"class":50},[40,85610,85579],{"class":63},[40,85612,3488],{"class":50},[40,85614,3698],{"class":63},[40,85616,15757],{"class":50},[40,85618,3672],{"class":63},[40,85620,78548],{"class":50},[40,85622,36629],{"class":1283},[40,85624,85594],{"class":94},[40,85626,85627],{"class":42,"line":86},[40,85628,1413],{"emptyLinePlaceholder":1412},[40,85630,85631,85633,85635,85637,85639,85641,85643,85645,85647,85649,85651,85653,85655,85657],{"class":42,"line":100},[40,85632,85565],{"class":63},[40,85634,4037],{"class":50},[40,85636,61545],{"class":63},[40,85638,3488],{"class":50},[40,85640,85574],{"class":63},[40,85642,4037],{"class":50},[40,85644,85579],{"class":63},[40,85646,3488],{"class":50},[40,85648,3672],{"class":63},[40,85650,15757],{"class":50},[40,85652,3824],{"class":63},[40,85654,78548],{"class":50},[40,85656,36629],{"class":1283},[40,85658,85659],{"class":94}," 'Mozill'\n",[40,85661,85662],{"class":42,"line":108},[40,85663,1413],{"emptyLinePlaceholder":1412},[40,85665,85666,85668,85670,85672,85674,85676,85678,85680,85682,85684,85686,85688],{"class":42,"line":121},[40,85667,85565],{"class":63},[40,85669,4037],{"class":50},[40,85671,61545],{"class":63},[40,85673,3488],{"class":50},[40,85675,85574],{"class":63},[40,85677,4037],{"class":50},[40,85679,85579],{"class":63},[40,85681,3488],{"class":50},[40,85683,3773],{"class":63},[40,85685,78548],{"class":50},[40,85687,36629],{"class":1283},[40,85689,85690],{"class":94}," 'lla'\n",[40,85692,85693,85695,85697,85699,85701,85703,85705,85707,85709,85711,85713,85715,85717,85719],{"class":42,"line":134},[40,85694,85565],{"class":63},[40,85696,4037],{"class":50},[40,85698,61545],{"class":63},[40,85700,3488],{"class":50},[40,85702,85574],{"class":63},[40,85704,4037],{"class":50},[40,85706,85579],{"class":63},[40,85708,3488],{"class":50},[40,85710,3773],{"class":63},[40,85712,15757],{"class":50},[40,85714,3849],{"class":63},[40,85716,78604],{"class":50},[40,85718,36629],{"class":1283},[40,85720,85690],{"class":94},[40,85722,85723,85725,85727,85729,85731,85733,85735,85737,85739,85741,85743,85745,85747,85749],{"class":42,"line":146},[40,85724,85565],{"class":63},[40,85726,4037],{"class":50},[40,85728,61545],{"class":63},[40,85730,3488],{"class":50},[40,85732,85574],{"class":63},[40,85734,4037],{"class":50},[40,85736,85579],{"class":63},[40,85738,3488],{"class":50},[40,85740,3849],{"class":63},[40,85742,15757],{"class":50},[40,85744,3773],{"class":63},[40,85746,78548],{"class":50},[40,85748,36629],{"class":1283},[40,85750,85690],{"class":94},[40,85752,85753],{"class":42,"line":154},[40,85754,1413],{"emptyLinePlaceholder":1412},[40,85756,85757,85759,85761,85763,85765,85767,85769,85771,85773,85775,85777,85779,85781,85783],{"class":42,"line":162},[40,85758,85565],{"class":63},[40,85760,4037],{"class":50},[40,85762,61545],{"class":63},[40,85764,3488],{"class":50},[40,85766,85574],{"class":63},[40,85768,4037],{"class":50},[40,85770,85579],{"class":63},[40,85772,3488],{"class":50},[40,85774,3672],{"class":63},[40,85776,15757],{"class":50},[40,85778,3849],{"class":63},[40,85780,78548],{"class":50},[40,85782,36629],{"class":1283},[40,85784,85785],{"class":94}," 'Mozilla'\n",[40,85787,85788,85790,85792,85794,85796,85798,85800,85802,85804,85806,85808,85810,85812,85814],{"class":42,"line":170},[40,85789,85565],{"class":63},[40,85791,4037],{"class":50},[40,85793,61545],{"class":63},[40,85795,3488],{"class":50},[40,85797,85574],{"class":63},[40,85799,4037],{"class":50},[40,85801,85579],{"class":63},[40,85803,3488],{"class":50},[40,85805,3672],{"class":63},[40,85807,15757],{"class":50},[40,85809,3925],{"class":63},[40,85811,78548],{"class":50},[40,85813,36629],{"class":1283},[40,85815,85785],{"class":94},[26230,85817,85819],{"id":85818},"_410533-startswith","4.10.5.3.3 startsWith",[19,85821,85822,85825,85826,85831,85832,85834,85835],{},[26,85823,85824],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[409,85827,85828],{},[26,85829,85830],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[26,85833,129],{}," 或 ",[26,85836,69318],{},[31,85838,85840],{"className":80790,"code":85839,"language":80792,"meta":36,"style":36},"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",[26,85841,85842,85854,85873,85878,85898],{"__ignoreMap":36},[40,85843,85844,85846,85849,85851],{"class":42,"line":43},[40,85845,10115],{"class":1283},[40,85847,85848],{"class":50}," str1 ",[40,85850,1284],{"class":1283},[40,85852,85853],{"class":94}," \"Saturday night plans\"\n",[40,85855,85856,85858,85860,85863,85866,85868,85871],{"class":42,"line":54},[40,85857,80827],{"class":50},[40,85859,61545],{"class":596},[40,85861,85862],{"class":50},"(str1.",[40,85864,85865],{"class":596},"startsWith",[40,85867,3488],{"class":50},[40,85869,85870],{"class":94},"\"Sat\"",[40,85872,33797],{"class":50},[40,85874,85875],{"class":42,"line":70},[40,85876,85877],{"class":997},"\u002F\u002F Expected output: true\n",[40,85879,85880,85882,85884,85886,85888,85890,85892,85894,85896],{"class":42,"line":78},[40,85881,80827],{"class":50},[40,85883,61545],{"class":596},[40,85885,85862],{"class":50},[40,85887,85865],{"class":596},[40,85889,3488],{"class":50},[40,85891,85870],{"class":94},[40,85893,15757],{"class":50},[40,85895,3555],{"class":63},[40,85897,33797],{"class":50},[40,85899,85900],{"class":42,"line":86},[40,85901,85902],{"class":997},"\u002F\u002F Expected output: false\n",[31,85904,85906],{"className":53933,"code":85905,"language":53935,"meta":36,"style":36},"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",[26,85907,85908,85913,85918,85922,85927,85932],{"__ignoreMap":36},[40,85909,85910],{"class":42,"line":43},[40,85911,85912],{"class":50},"startsWith(searchString)\n",[40,85914,85915],{"class":42,"line":54},[40,85916,85917],{"class":50},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[40,85919,85920],{"class":42,"line":70},[40,85921,1413],{"emptyLinePlaceholder":1412},[40,85923,85924],{"class":42,"line":78},[40,85925,85926],{"class":50},"const str3 = 'pink老师上课中'\n",[40,85928,85929],{"class":42,"line":86},[40,85930,85931],{"class":50},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[40,85933,85934],{"class":42,"line":100},[40,85935,85936],{"class":50},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[26230,85938,85940],{"id":85939},"_410534-includes","4.10.5.3.4 includes",[19,85942,85943],{},"includes(searchString) includes(searchString, position)",[492,85945,85946],{},[495,85947,85948],{},"searchString:",[19,85950,85951,85952,85954,85955,85960,85961,85966,85967,24821,85970,85973,85974,85977],{},"一个要在 ",[26,85953,4646],{}," 中查找的字符串。",[2106,85956,85959],{"href":85957,"rel":85958},"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",[2110],"不能是正则表达式","。所有非正则表达式的值都会被",[2106,85962,85965],{"href":85963,"rel":85964},"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",[2110],"强制转换为字符串","，因此如果该参数被省略或传入 ",[26,85968,85969],{},"undefined",[26,85971,85972],{},"includes()"," 方法会在字符串中搜索 ",[26,85975,85976],{},"\"undefined\"","，这通常不是你想要的",[492,85979,85980],{"start":54},[495,85981,85982,4336],{},[26,85983,85984],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,85986,85987,85988,85991,85992],{},"在字符串中开始搜索 ",[26,85989,85990],{},"searchString"," 的位置。默认值为 ",[26,85993,3672],{},[492,85995,85996],{"start":70},[495,85997,85998],{},"返回值：",[19,86000,86001,86002,86004,86005,86009,86010],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[26,86003,85990],{}," 为空字符串的情况），则返回 ",[409,86006,86007],{},[26,86008,129],{}," ，否则返回 ",[409,86011,86012],{},[26,86013,69318],{},[492,86015,86016],{"start":78},[495,86017,86018],{},"异常：",[19,86020,85517,86021,17117,86023,86027],{},[26,86022,85990],{},[2106,86024,86026],{"href":85957,"rel":86025},[2110],"是一个正则表达式","，则会抛出",[19,86029,86030],{},"只要是有就是true，不需要非得以谁开头结尾",[31,86032,86034],{"className":80790,"code":86033,"language":80792,"meta":36,"style":36},"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",[26,86035,86036,86047,86070,86089,86109,86131,86150],{"__ignoreMap":36},[40,86037,86038,86040,86042,86044],{"class":42,"line":43},[40,86039,10115],{"class":1283},[40,86041,83070],{"class":50},[40,86043,1284],{"class":1283},[40,86045,86046],{"class":94}," \"To be, or not to be, that is the question.\"\n",[40,86048,86049,86051,86053,86056,86059,86061,86064,86067],{"class":42,"line":54},[40,86050,80827],{"class":50},[40,86052,61545],{"class":596},[40,86054,86055],{"class":50},"(str.",[40,86057,86058],{"class":596},"includes",[40,86060,3488],{"class":50},[40,86062,86063],{"class":94},"\"To be\"",[40,86065,86066],{"class":50},"))",[40,86068,86069],{"class":997},"  \u002F\u002F true\n",[40,86071,86072,86074,86076,86078,86080,86082,86085,86087],{"class":42,"line":70},[40,86073,80827],{"class":50},[40,86075,61545],{"class":596},[40,86077,86055],{"class":50},[40,86079,86058],{"class":596},[40,86081,3488],{"class":50},[40,86083,86084],{"class":94},"\"question\"",[40,86086,86066],{"class":50},[40,86088,86069],{"class":997},[40,86090,86091,86093,86095,86097,86099,86101,86104,86106],{"class":42,"line":78},[40,86092,80827],{"class":50},[40,86094,61545],{"class":596},[40,86096,86055],{"class":50},[40,86098,86058],{"class":596},[40,86100,3488],{"class":50},[40,86102,86103],{"class":94},"\"nonexistent\"",[40,86105,86066],{"class":50},[40,86107,86108],{"class":997},"  \u002F\u002F false\n",[40,86110,86111,86113,86115,86117,86119,86121,86123,86125,86127,86129],{"class":42,"line":86},[40,86112,80827],{"class":50},[40,86114,61545],{"class":596},[40,86116,86055],{"class":50},[40,86118,86058],{"class":596},[40,86120,3488],{"class":50},[40,86122,86063],{"class":94},[40,86124,15757],{"class":50},[40,86126,3698],{"class":63},[40,86128,86066],{"class":50},[40,86130,86108],{"class":997},[40,86132,86133,86135,86137,86139,86141,86143,86146,86148],{"class":42,"line":100},[40,86134,80827],{"class":50},[40,86136,61545],{"class":596},[40,86138,86055],{"class":50},[40,86140,86058],{"class":596},[40,86142,3488],{"class":50},[40,86144,86145],{"class":94},"\"TO BE\"",[40,86147,86066],{"class":50},[40,86149,86108],{"class":997},[40,86151,86152,86154,86156,86158,86160,86162,86164,86166],{"class":42,"line":108},[40,86153,80827],{"class":50},[40,86155,61545],{"class":596},[40,86157,86055],{"class":50},[40,86159,86058],{"class":596},[40,86161,3488],{"class":50},[40,86163,285],{"class":94},[40,86165,86066],{"class":50},[40,86167,86069],{"class":997},[26230,86169,86171],{"id":86170},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[31,86173,86175],{"className":56365,"code":86174,"language":56367,"meta":36,"style":36},"\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",[26,86176,86177,86185,86193,86198,86203,86208,86213,86218,86226],{"__ignoreMap":36},[40,86178,86179,86181,86183],{"class":42,"line":43},[40,86180,4387],{"class":50},[40,86182,55098],{"class":46},[40,86184,54606],{"class":50},[40,86186,86187,86189,86191],{"class":42,"line":54},[40,86188,55442],{"class":50},[40,86190,55111],{"class":46},[40,86192,54606],{"class":50},[40,86194,86195],{"class":42,"line":70},[40,86196,86197],{"class":50},"    const num = 10\n",[40,86199,86200],{"class":42,"line":78},[40,86201,86202],{"class":50},"    \u002F\u002F 强制转换\n",[40,86204,86205],{"class":42,"line":86},[40,86206,86207],{"class":50},"    console.log(String(num))\n",[40,86209,86210],{"class":42,"line":100},[40,86211,86212],{"class":50},"    \u002F\u002F toString()方法转换\n",[40,86214,86215],{"class":42,"line":108},[40,86216,86217],{"class":50},"    console.log(num.toString())\n",[40,86219,86220,86222,86224],{"class":42,"line":121},[40,86221,55715],{"class":50},[40,86223,55111],{"class":46},[40,86225,54606],{"class":50},[40,86227,86228,86230,86232],{"class":42,"line":134},[40,86229,55083],{"class":50},[40,86231,55098],{"class":46},[40,86233,54606],{"class":50},[26230,86235,86237],{"id":86236},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,86239,86240],{},[438,86241],{"alt":36,"src":86242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[31,86244,86246],{"className":53933,"code":86245,"language":53935,"meta":36,"style":36},"\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",[26,86247,86248,86258,86272,86276,86284,86298,86318,86330,86338,86342,86350,86362,86370,86382,86387,86392,86397,86444,86460,86468,86476,86480],{"__ignoreMap":36},[40,86249,86250,86252,86254,86256],{"class":42,"line":43},[40,86251,54597],{"class":50},[40,86253,54600],{"class":46},[40,86255,54603],{"class":596},[40,86257,54606],{"class":50},[40,86259,86260,86262,86264,86266,86268,86270],{"class":42,"line":54},[40,86261,4387],{"class":50},[40,86263,53935],{"class":46},[40,86265,54615],{"class":596},[40,86267,1284],{"class":50},[40,86269,54620],{"class":94},[40,86271,54606],{"class":50},[40,86273,86274],{"class":42,"line":70},[40,86275,1413],{"emptyLinePlaceholder":1412},[40,86277,86278,86280,86282],{"class":42,"line":78},[40,86279,4387],{"class":50},[40,86281,54633],{"class":46},[40,86283,54606],{"class":50},[40,86285,86286,86288,86290,86292,86294,86296],{"class":42,"line":86},[40,86287,55442],{"class":50},[40,86289,54643],{"class":46},[40,86291,54646],{"class":596},[40,86293,1284],{"class":50},[40,86295,54651],{"class":94},[40,86297,54606],{"class":50},[40,86299,86300,86302,86304,86306,86308,86310,86312,86314,86316],{"class":42,"line":100},[40,86301,55442],{"class":50},[40,86303,54643],{"class":46},[40,86305,18242],{"class":596},[40,86307,1284],{"class":50},[40,86309,54690],{"class":94},[40,86311,54670],{"class":596},[40,86313,1284],{"class":50},[40,86315,54697],{"class":94},[40,86317,54606],{"class":50},[40,86319,86320,86322,86324,86326,86328],{"class":42,"line":108},[40,86321,55442],{"class":50},[40,86323,54706],{"class":46},[40,86325,54709],{"class":50},[40,86327,54706],{"class":46},[40,86329,54606],{"class":50},[40,86331,86332,86334,86336],{"class":42,"line":121},[40,86333,55083],{"class":50},[40,86335,54633],{"class":46},[40,86337,54606],{"class":50},[40,86339,86340],{"class":42,"line":134},[40,86341,1413],{"emptyLinePlaceholder":1412},[40,86343,86344,86346,86348],{"class":42,"line":146},[40,86345,4387],{"class":50},[40,86347,55098],{"class":46},[40,86349,54606],{"class":50},[40,86351,86352,86354,86356,86358,86360],{"class":42,"line":154},[40,86353,55442],{"class":50},[40,86355,54909],{"class":46},[40,86357,58612],{"class":50},[40,86359,54909],{"class":46},[40,86361,54606],{"class":50},[40,86363,86364,86366,86368],{"class":42,"line":162},[40,86365,55442],{"class":50},[40,86367,55111],{"class":46},[40,86369,54606],{"class":50},[40,86371,86372,86374,86377,86379],{"class":42,"line":170},[40,86373,14543],{"class":1283},[40,86375,86376],{"class":63}," gift",[40,86378,16886],{"class":1283},[40,86380,86381],{"class":94}," '50g的茶叶，清洗球'\n",[40,86383,86384],{"class":42,"line":183},[40,86385,86386],{"class":997},"    \u002F\u002F 1.把字符串拆分为数组\n",[40,86388,86389],{"class":42,"line":196},[40,86390,86391],{"class":997},"    \u002F\u002F console.log(gift.split(','))\n",[40,86393,86394],{"class":42,"line":204},[40,86395,86396],{"class":997},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[40,86398,86399,86401,86403,86405,86408,86411,86413,86416,86418,86420,86422,86424,86426,86429,86431,86434,86436,86438,86440,86442],{"class":42,"line":217},[40,86400,14543],{"class":1283},[40,86402,77214],{"class":63},[40,86404,16886],{"class":1283},[40,86406,86407],{"class":50}," gift.",[40,86409,86410],{"class":596},"split",[40,86412,3488],{"class":50},[40,86414,86415],{"class":94},"'，'",[40,86417,34126],{"class":50},[40,86419,77339],{"class":596},[40,86421,3488],{"class":50},[40,86423,83090],{"class":8539},[40,86425,83093],{"class":1283},[40,86427,86428],{"class":94}," `\u003Cspan>【赠品】${",[40,86430,83090],{"class":50},[40,86432,86433],{"class":94},"}\u003C\u002Fspan>\u003Cbr>`",[40,86435,34126],{"class":50},[40,86437,77518],{"class":596},[40,86439,3488],{"class":50},[40,86441,77523],{"class":94},[40,86443,1811],{"class":50},[40,86445,86446,86448,86450,86452,86454,86456,86458],{"class":42,"line":230},[40,86447,55705],{"class":50},[40,86449,57697],{"class":596},[40,86451,3488],{"class":50},[40,86453,85226],{"class":94},[40,86455,77544],{"class":50},[40,86457,1284],{"class":1283},[40,86459,77280],{"class":50},[40,86461,86462,86464,86466],{"class":42,"line":238},[40,86463,55715],{"class":50},[40,86465,55111],{"class":46},[40,86467,54606],{"class":50},[40,86469,86470,86472,86474],{"class":42,"line":251},[40,86471,55083],{"class":50},[40,86473,55098],{"class":46},[40,86475,54606],{"class":50},[40,86477,86478],{"class":42,"line":264},[40,86479,1413],{"emptyLinePlaceholder":1412},[40,86481,86482,86484,86486],{"class":42,"line":277},[40,86483,55083],{"class":50},[40,86485,53935],{"class":46},[40,86487,54606],{"class":50},[2423,86489,86491],{"id":86490},"_41054-number","4.10.5.4 Number",[19,86493,86494],{},[438,86495],{"alt":36,"src":86496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,86498,86499],{},"整数也可以进行toFixed来保留小数",[19,86501,86502],{},"比如：",[19,86504,86505],{},"const price=10",[19,86507,86508],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[2423,86510,86512],{"id":86511},"_41055-购物车展示","4.10.5.5 购物车展示",[19,86514,86515],{},[438,86516],{"alt":36,"src":86517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[31,86519,86521],{"className":53933,"code":86520,"language":53935,"meta":36,"style":36},"\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",[26,86522,86523,86533,86547,86551,86559,86573,86593,86605,86613,86619,86629,86639,86649,86653,86657,86663,86675,86689,86693,86697,86703,86715,86731,86741,86757,86761,86765,86771,86781,86791,86795,86799,86807,86819,86831,86843,86847,86851,86859,86871,86875,86879,86890,86900,86912,86924,86934,86938,86942,86950,86959,86971,86981,86991,86995,86999,87007,87016,87023,87033,87045,87049,87053,87062,87072,87083,87095,87107,87111,87115,87124,87134,87145,87149,87153,87159,87171,87183,87193,87203,87221,87233,87237,87241,87250,87262,87272,87282,87294,87298,87306,87314,87318,87326,87340,87348,87362,87390,87398,87406,87416,87420,87428,87436,87445,87453,87462,87472,87476,87480,87488,87496,87505,87513,87521,87534,87538,87542,87550,87558,87567,87575,87583,87598,87602,87606,87614,87622,87631,87639,87647,87661,87669,87673,87677,87682,87708,87713,87750,87755,87778,87783,87837,87842,87878,87882,87888,87893,87902,87916,87925,87944,87953,87963,87968,87973,87986,87991,88045,88071,88079,88087,88091],{"__ignoreMap":36},[40,86524,86525,86527,86529,86531],{"class":42,"line":43},[40,86526,54597],{"class":50},[40,86528,54600],{"class":46},[40,86530,54603],{"class":596},[40,86532,54606],{"class":50},[40,86534,86535,86537,86539,86541,86543,86545],{"class":42,"line":54},[40,86536,4387],{"class":50},[40,86538,53935],{"class":46},[40,86540,54615],{"class":596},[40,86542,1284],{"class":50},[40,86544,54620],{"class":94},[40,86546,54606],{"class":50},[40,86548,86549],{"class":42,"line":70},[40,86550,1413],{"emptyLinePlaceholder":1412},[40,86552,86553,86555,86557],{"class":42,"line":78},[40,86554,4387],{"class":50},[40,86556,54633],{"class":46},[40,86558,54606],{"class":50},[40,86560,86561,86563,86565,86567,86569,86571],{"class":42,"line":86},[40,86562,55442],{"class":50},[40,86564,54643],{"class":46},[40,86566,54646],{"class":596},[40,86568,1284],{"class":50},[40,86570,54651],{"class":94},[40,86572,54606],{"class":50},[40,86574,86575,86577,86579,86581,86583,86585,86587,86589,86591],{"class":42,"line":100},[40,86576,55442],{"class":50},[40,86578,54643],{"class":46},[40,86580,18242],{"class":596},[40,86582,1284],{"class":50},[40,86584,54690],{"class":94},[40,86586,54670],{"class":596},[40,86588,1284],{"class":50},[40,86590,54697],{"class":94},[40,86592,54606],{"class":50},[40,86594,86595,86597,86599,86601,86603],{"class":42,"line":108},[40,86596,55442],{"class":50},[40,86598,54706],{"class":46},[40,86600,54709],{"class":50},[40,86602,54706],{"class":46},[40,86604,54606],{"class":50},[40,86606,86607,86609,86611],{"class":42,"line":121},[40,86608,55442],{"class":50},[40,86610,3384],{"class":46},[40,86612,54606],{"class":50},[40,86614,86615,86617],{"class":42,"line":134},[40,86616,9726],{"class":46},[40,86618,18894],{"class":50},[40,86620,86621,86623,86625,86627],{"class":42,"line":146},[40,86622,57993],{"class":63},[40,86624,60],{"class":50},[40,86626,3672],{"class":63},[40,86628,4637],{"class":50},[40,86630,86631,86633,86635,86637],{"class":42,"line":154},[40,86632,58004],{"class":63},[40,86634,60],{"class":50},[40,86636,3672],{"class":63},[40,86638,4637],{"class":50},[40,86640,86641,86643,86645,86647],{"class":42,"line":162},[40,86642,75891],{"class":63},[40,86644,60],{"class":50},[40,86646,63803],{"class":63},[40,86648,4637],{"class":50},[40,86650,86651],{"class":42,"line":170},[40,86652,5513],{"class":50},[40,86654,86655],{"class":42,"line":183},[40,86656,1413],{"emptyLinePlaceholder":1412},[40,86658,86659,86661],{"class":42,"line":196},[40,86660,65421],{"class":596},[40,86662,18894],{"class":50},[40,86664,86665,86667,86669,86671,86673],{"class":42,"line":204},[40,86666,58069],{"class":63},[40,86668,60],{"class":50},[40,86670,81869],{"class":63},[40,86672,54790],{"class":1283},[40,86674,4637],{"class":50},[40,86676,86677,86679,86681,86683,86685,86687],{"class":42,"line":217},[40,86678,58004],{"class":63},[40,86680,60],{"class":50},[40,86682,3791],{"class":63},[40,86684,54790],{"class":1283},[40,86686,54854],{"class":63},[40,86688,4637],{"class":50},[40,86690,86691],{"class":42,"line":230},[40,86692,5513],{"class":50},[40,86694,86695],{"class":42,"line":238},[40,86696,1413],{"emptyLinePlaceholder":1412},[40,86698,86699,86701],{"class":42,"line":251},[40,86700,81920],{"class":596},[40,86702,18894],{"class":50},[40,86704,86705,86707,86709,86711,86713],{"class":42,"line":264},[40,86706,57993],{"class":63},[40,86708,60],{"class":50},[40,86710,4054],{"class":63},[40,86712,54790],{"class":1283},[40,86714,4637],{"class":50},[40,86716,86717,86719,86721,86723,86725,86727,86729],{"class":42,"line":277},[40,86718,65158],{"class":63},[40,86720,60],{"class":50},[40,86722,31426],{"class":63},[40,86724,81975],{"class":63},[40,86726,81978],{"class":63},[40,86728,4173],{"class":1283},[40,86730,4637],{"class":50},[40,86732,86733,86735,86737,86739],{"class":42,"line":290},[40,86734,58307],{"class":63},[40,86736,60],{"class":50},[40,86738,54775],{"class":63},[40,86740,4637],{"class":50},[40,86742,86743,86745,86747,86749,86751,86753,86755],{"class":42,"line":298},[40,86744,65275],{"class":63},[40,86746,60],{"class":50},[40,86748,3698],{"class":63},[40,86750,54790],{"class":1283},[40,86752,54819],{"class":63},[40,86754,65542],{"class":63},[40,86756,4637],{"class":50},[40,86758,86759],{"class":42,"line":310},[40,86760,5513],{"class":50},[40,86762,86763],{"class":42,"line":5086},[40,86764,1413],{"emptyLinePlaceholder":1412},[40,86766,86767,86769],{"class":42,"line":5091},[40,86768,82038],{"class":596},[40,86770,18894],{"class":50},[40,86772,86773,86775,86777,86779],{"class":42,"line":5105},[40,86774,65323],{"class":63},[40,86776,60],{"class":50},[40,86778,65328],{"class":63},[40,86780,4637],{"class":50},[40,86782,86783,86785,86787,86789],{"class":42,"line":5110},[40,86784,58182],{"class":63},[40,86786,60],{"class":50},[40,86788,65116],{"class":63},[40,86790,4637],{"class":50},[40,86792,86793],{"class":42,"line":5902},[40,86794,5513],{"class":50},[40,86796,86797],{"class":42,"line":5916},[40,86798,1413],{"emptyLinePlaceholder":1412},[40,86800,86801,86803,86805],{"class":42,"line":5924},[40,86802,81920],{"class":596},[40,86804,58913],{"class":46},[40,86806,18894],{"class":50},[40,86808,86809,86811,86813,86815,86817],{"class":42,"line":5929},[40,86810,58069],{"class":63},[40,86812,60],{"class":50},[40,86814,4091],{"class":63},[40,86816,54790],{"class":1283},[40,86818,4637],{"class":50},[40,86820,86821,86823,86825,86827,86829],{"class":42,"line":5935},[40,86822,58083],{"class":63},[40,86824,60],{"class":50},[40,86826,4091],{"class":63},[40,86828,54790],{"class":1283},[40,86830,4637],{"class":50},[40,86832,86833,86835,86837,86839,86841],{"class":42,"line":5941},[40,86834,65048],{"class":63},[40,86836,60],{"class":50},[40,86838,3799],{"class":63},[40,86840,54790],{"class":1283},[40,86842,4637],{"class":50},[40,86844,86845],{"class":42,"line":5946},[40,86846,5513],{"class":50},[40,86848,86849],{"class":42,"line":11270},[40,86850,1413],{"emptyLinePlaceholder":1412},[40,86852,86853,86855,86857],{"class":42,"line":11294},[40,86854,81920],{"class":596},[40,86856,65602],{"class":596},[40,86858,18894],{"class":50},[40,86860,86861,86863,86865,86867,86869],{"class":42,"line":11299},[40,86862,58069],{"class":63},[40,86864,60],{"class":50},[40,86866,5053],{"class":63},[40,86868,54790],{"class":1283},[40,86870,4637],{"class":50},[40,86872,86873],{"class":42,"line":11305},[40,86874,5513],{"class":50},[40,86876,86877],{"class":42,"line":11332},[40,86878,1413],{"emptyLinePlaceholder":1412},[40,86880,86881,86883,86885,86888],{"class":42,"line":11337},[40,86882,81920],{"class":596},[40,86884,65602],{"class":596},[40,86886,86887],{"class":596}," .tag",[40,86889,18894],{"class":50},[40,86891,86892,86894,86896,86898],{"class":42,"line":11343},[40,86893,58307],{"class":63},[40,86895,60],{"class":50},[40,86897,64167],{"class":63},[40,86899,4637],{"class":50},[40,86901,86902,86904,86906,86908,86910],{"class":42,"line":11355},[40,86903,57993],{"class":63},[40,86905,60],{"class":50},[40,86907,64],{"class":63},[40,86909,54790],{"class":1283},[40,86911,4637],{"class":50},[40,86913,86914,86916,86918,86920,86922],{"class":42,"line":11367},[40,86915,58220],{"class":63},[40,86917,60],{"class":50},[40,86919,3977],{"class":63},[40,86921,54790],{"class":1283},[40,86923,4637],{"class":50},[40,86925,86926,86928,86930,86932],{"class":42,"line":11379},[40,86927,60714],{"class":63},[40,86929,60],{"class":50},[40,86931,65368],{"class":63},[40,86933,4637],{"class":50},[40,86935,86936],{"class":42,"line":13038},[40,86937,5513],{"class":50},[40,86939,86940],{"class":42,"line":13063},[40,86941,1413],{"emptyLinePlaceholder":1412},[40,86943,86944,86946,86948],{"class":42,"line":13086},[40,86945,81920],{"class":596},[40,86947,82212],{"class":596},[40,86949,34766],{"class":50},[40,86951,86952,86954,86957],{"class":42,"line":13110},[40,86953,81920],{"class":596},[40,86955,86956],{"class":596}," .sub-total",[40,86958,18894],{"class":50},[40,86960,86961,86963,86965,86967,86969],{"class":42,"line":13115},[40,86962,58220],{"class":63},[40,86964,60],{"class":50},[40,86966,4128],{"class":63},[40,86968,54790],{"class":1283},[40,86970,4637],{"class":50},[40,86972,86973,86975,86977,86979],{"class":42,"line":13120},[40,86974,60714],{"class":63},[40,86976,60],{"class":50},[40,86978,82235],{"class":63},[40,86980,4637],{"class":50},[40,86982,86983,86985,86987,86989],{"class":42,"line":13125},[40,86984,65135],{"class":63},[40,86986,60],{"class":50},[40,86988,3698],{"class":63},[40,86990,4637],{"class":50},[40,86992,86993],{"class":42,"line":13134},[40,86994,5513],{"class":50},[40,86996,86997],{"class":42,"line":13139},[40,86998,1413],{"emptyLinePlaceholder":1412},[40,87000,87001,87003,87005],{"class":42,"line":13145},[40,87002,81920],{"class":596},[40,87004,82252],{"class":596},[40,87006,34766],{"class":50},[40,87008,87009,87011,87014],{"class":42,"line":13166},[40,87010,81920],{"class":596},[40,87012,87013],{"class":596}," .sub-total::before",[40,87015,34766],{"class":50},[40,87017,87018,87021],{"class":42,"line":13172},[40,87019,87020],{"class":596},"    .amount::before",[40,87022,18894],{"class":50},[40,87024,87025,87027,87029,87031],{"class":42,"line":13186},[40,87026,82259],{"class":63},[40,87028,60],{"class":50},[40,87030,82264],{"class":94},[40,87032,4637],{"class":50},[40,87034,87035,87037,87039,87041,87043],{"class":42,"line":13192},[40,87036,58220],{"class":63},[40,87038,60],{"class":50},[40,87040,3977],{"class":63},[40,87042,54790],{"class":1283},[40,87044,4637],{"class":50},[40,87046,87047],{"class":42,"line":13219},[40,87048,5513],{"class":50},[40,87050,87051],{"class":42,"line":13228},[40,87052,1413],{"emptyLinePlaceholder":1412},[40,87054,87055,87057,87060],{"class":42,"line":13234},[40,87056,81920],{"class":596},[40,87058,87059],{"class":596}," .spec",[40,87061,18894],{"class":50},[40,87063,87064,87066,87068,87070],{"class":42,"line":13242},[40,87065,65135],{"class":63},[40,87067,60],{"class":50},[40,87069,64],{"class":63},[40,87071,4637],{"class":50},[40,87073,87074,87076,87078,87081],{"class":42,"line":13247},[40,87075,60714],{"class":63},[40,87077,60],{"class":50},[40,87079,87080],{"class":63},"#888",[40,87082,4637],{"class":50},[40,87084,87085,87087,87089,87091,87093],{"class":42,"line":19926},[40,87086,58220],{"class":63},[40,87088,60],{"class":50},[40,87090,4028],{"class":63},[40,87092,54790],{"class":1283},[40,87094,4637],{"class":50},[40,87096,87097,87099,87101,87103,87105],{"class":42,"line":19932},[40,87098,65298],{"class":63},[40,87100,60],{"class":50},[40,87102,4178],{"class":63},[40,87104,54790],{"class":1283},[40,87106,4637],{"class":50},[40,87108,87109],{"class":42,"line":19955},[40,87110,5513],{"class":50},[40,87112,87113],{"class":42,"line":19961},[40,87114,1413],{"emptyLinePlaceholder":1412},[40,87116,87117,87119,87122],{"class":42,"line":19984},[40,87118,81920],{"class":596},[40,87120,87121],{"class":596}," .count",[40,87123,18894],{"class":50},[40,87125,87126,87128,87130,87132],{"class":42,"line":19998},[40,87127,65135],{"class":63},[40,87129,60],{"class":50},[40,87131,3698],{"class":63},[40,87133,4637],{"class":50},[40,87135,87136,87138,87140,87143],{"class":42,"line":20018},[40,87137,60714],{"class":63},[40,87139,60],{"class":50},[40,87141,87142],{"class":63},"#aaa",[40,87144,4637],{"class":50},[40,87146,87147],{"class":42,"line":20024},[40,87148,5513],{"class":50},[40,87150,87151],{"class":42,"line":20035},[40,87152,1413],{"emptyLinePlaceholder":1412},[40,87154,87155,87157],{"class":42,"line":20058},[40,87156,75770],{"class":596},[40,87158,18894],{"class":50},[40,87160,87161,87163,87165,87167,87169],{"class":42,"line":20080},[40,87162,58069],{"class":63},[40,87164,60],{"class":50},[40,87166,81869],{"class":63},[40,87168,54790],{"class":1283},[40,87170,4637],{"class":50},[40,87172,87173,87175,87177,87179,87181],{"class":42,"line":20085},[40,87174,58004],{"class":63},[40,87176,60],{"class":50},[40,87178,3672],{"class":63},[40,87180,54854],{"class":63},[40,87182,4637],{"class":50},[40,87184,87185,87187,87189,87191],{"class":42,"line":20091},[40,87186,58307],{"class":63},[40,87188,60],{"class":50},[40,87190,54775],{"class":63},[40,87192,4637],{"class":50},[40,87194,87195,87197,87199,87201],{"class":42,"line":20105},[40,87196,58318],{"class":63},[40,87198,60],{"class":50},[40,87200,54878],{"class":63},[40,87202,4637],{"class":50},[40,87204,87205,87208,87210,87212,87214,87216,87219],{"class":42,"line":20118},[40,87206,87207],{"class":63},"      border-top",[40,87209,60],{"class":50},[40,87211,3698],{"class":63},[40,87213,54790],{"class":1283},[40,87215,54819],{"class":63},[40,87217,87218],{"class":63}," #4e4e4e",[40,87220,4637],{"class":50},[40,87222,87223,87225,87227,87229,87231],{"class":42,"line":20123},[40,87224,57993],{"class":63},[40,87226,60],{"class":50},[40,87228,4178],{"class":63},[40,87230,54790],{"class":1283},[40,87232,4637],{"class":50},[40,87234,87235],{"class":42,"line":20137},[40,87236,5513],{"class":50},[40,87238,87239],{"class":42,"line":20142},[40,87240,1413],{"emptyLinePlaceholder":1412},[40,87242,87243,87245,87248],{"class":42,"line":20148},[40,87244,75770],{"class":596},[40,87246,87247],{"class":596}," .amount",[40,87249,18894],{"class":50},[40,87251,87252,87254,87256,87258,87260],{"class":42,"line":20153},[40,87253,58220],{"class":63},[40,87255,60],{"class":50},[40,87257,4128],{"class":63},[40,87259,54790],{"class":1283},[40,87261,4637],{"class":50},[40,87263,87264,87266,87268,87270],{"class":42,"line":20167},[40,87265,60714],{"class":63},[40,87267,60],{"class":50},[40,87269,82235],{"class":63},[40,87271,4637],{"class":50},[40,87273,87274,87276,87278,87280],{"class":42,"line":20172},[40,87275,65632],{"class":63},[40,87277,60],{"class":50},[40,87279,54787],{"class":63},[40,87281,4637],{"class":50},[40,87283,87284,87286,87288,87290,87292],{"class":42,"line":20177},[40,87285,65048],{"class":63},[40,87287,60],{"class":50},[40,87289,4134],{"class":63},[40,87291,54790],{"class":1283},[40,87293,4637],{"class":50},[40,87295,87296],{"class":42,"line":20191},[40,87297,5513],{"class":50},[40,87299,87300,87302,87304],{"class":42,"line":20203},[40,87301,55715],{"class":50},[40,87303,3384],{"class":46},[40,87305,54606],{"class":50},[40,87307,87308,87310,87312],{"class":42,"line":20208},[40,87309,55083],{"class":50},[40,87311,54633],{"class":46},[40,87313,54606],{"class":50},[40,87315,87316],{"class":42,"line":20221},[40,87317,1413],{"emptyLinePlaceholder":1412},[40,87319,87320,87322,87324],{"class":42,"line":20226},[40,87321,4387],{"class":50},[40,87323,55098],{"class":46},[40,87325,54606],{"class":50},[40,87327,87328,87330,87332,87334,87336,87338],{"class":42,"line":20231},[40,87329,55442],{"class":50},[40,87331,54909],{"class":46},[40,87333,56784],{"class":596},[40,87335,1284],{"class":50},[40,87337,65906],{"class":94},[40,87339,54606],{"class":50},[40,87341,87342,87344,87346],{"class":42,"line":20236},[40,87343,55715],{"class":50},[40,87345,54909],{"class":46},[40,87347,54606],{"class":50},[40,87349,87350,87352,87354,87356,87358,87360],{"class":42,"line":20249},[40,87351,55442],{"class":50},[40,87353,54909],{"class":46},[40,87355,56784],{"class":596},[40,87357,1284],{"class":50},[40,87359,65878],{"class":94},[40,87361,54606],{"class":50},[40,87363,87364,87366,87368,87371,87373,87375,87377,87380,87382,87384,87386,87388],{"class":42,"line":20254},[40,87365,54640],{"class":50},[40,87367,54909],{"class":46},[40,87369,87370],{"class":50},">合计：\u003C",[40,87372,40],{"class":46},[40,87374,56784],{"class":596},[40,87376,1284],{"class":50},[40,87378,87379],{"class":94},"\"amount\"",[40,87381,58612],{"class":50},[40,87383,40],{"class":46},[40,87385,58612],{"class":50},[40,87387,54909],{"class":46},[40,87389,54606],{"class":50},[40,87391,87392,87394,87396],{"class":42,"line":35933},[40,87393,55715],{"class":50},[40,87395,54909],{"class":46},[40,87397,54606],{"class":50},[40,87399,87400,87402,87404],{"class":42,"line":35939},[40,87401,55442],{"class":50},[40,87403,55111],{"class":46},[40,87405,54606],{"class":50},[40,87407,87408,87410,87412,87414],{"class":42,"line":35945},[40,87409,14543],{"class":1283},[40,87411,82672],{"class":63},[40,87413,16886],{"class":1283},[40,87415,58745],{"class":50},[40,87417,87418],{"class":42,"line":35951},[40,87419,82681],{"class":50},[40,87421,87422,87424,87426],{"class":42,"line":35957},[40,87423,82686],{"class":50},[40,87425,82689],{"class":94},[40,87427,34766],{"class":50},[40,87429,87430,87432,87434],{"class":42,"line":35968},[40,87431,82696],{"class":50},[40,87433,82699],{"class":94},[40,87435,34766],{"class":50},[40,87437,87438,87440,87443],{"class":42,"line":35974},[40,87439,82706],{"class":50},[40,87441,87442],{"class":63},"289.9",[40,87444,34766],{"class":50},[40,87446,87447,87449,87451],{"class":42,"line":35994},[40,87448,82716],{"class":50},[40,87450,82719],{"class":94},[40,87452,34766],{"class":50},[40,87454,87455,87458,87460],{"class":42,"line":36000},[40,87456,87457],{"class":50},"        count: ",[40,87459,64],{"class":63},[40,87461,34766],{"class":50},[40,87463,87464,87467,87470],{"class":42,"line":36011},[40,87465,87466],{"class":50},"        spec: { color: ",[40,87468,87469],{"class":94},"'白色'",[40,87471,58902],{"class":50},[40,87473,87474],{"class":42,"line":36017},[40,87475,81187],{"class":50},[40,87477,87478],{"class":42,"line":36023},[40,87479,82681],{"class":50},[40,87481,87482,87484,87486],{"class":42,"line":36029},[40,87483,82686],{"class":50},[40,87485,82780],{"class":94},[40,87487,34766],{"class":50},[40,87489,87490,87492,87494],{"class":42,"line":36035},[40,87491,82696],{"class":50},[40,87493,82789],{"class":94},[40,87495,34766],{"class":50},[40,87497,87498,87500,87503],{"class":42,"line":36041},[40,87499,82706],{"class":50},[40,87501,87502],{"class":63},"109.8",[40,87504,34766],{"class":50},[40,87506,87507,87509,87511],{"class":42,"line":36047},[40,87508,82716],{"class":50},[40,87510,82807],{"class":94},[40,87512,34766],{"class":50},[40,87514,87515,87517,87519],{"class":42,"line":36053},[40,87516,87457],{"class":50},[40,87518,3555],{"class":63},[40,87520,34766],{"class":50},[40,87522,87523,87526,87528,87530,87532],{"class":42,"line":36073},[40,87524,87525],{"class":50},"        spec: { size: ",[40,87527,85198],{"class":94},[40,87529,58762],{"class":50},[40,87531,85203],{"class":94},[40,87533,58902],{"class":50},[40,87535,87536],{"class":42,"line":36079},[40,87537,81187],{"class":50},[40,87539,87540],{"class":42,"line":36095},[40,87541,82681],{"class":50},[40,87543,87544,87546,87548],{"class":42,"line":36101},[40,87545,82686],{"class":50},[40,87547,82824],{"class":94},[40,87549,34766],{"class":50},[40,87551,87552,87554,87556],{"class":42,"line":36115},[40,87553,82696],{"class":50},[40,87555,82833],{"class":94},[40,87557,34766],{"class":50},[40,87559,87560,87562,87565],{"class":42,"line":36121},[40,87561,82706],{"class":50},[40,87563,87564],{"class":63},"488",[40,87566,34766],{"class":50},[40,87568,87569,87571,87573],{"class":42,"line":36136},[40,87570,82716],{"class":50},[40,87572,82851],{"class":94},[40,87574,34766],{"class":50},[40,87576,87577,87579,87581],{"class":42,"line":36142},[40,87578,87457],{"class":50},[40,87580,3698],{"class":63},[40,87582,34766],{"class":50},[40,87584,87585,87587,87590,87593,87596],{"class":42,"line":36151},[40,87586,87466],{"class":50},[40,87588,87589],{"class":94},"'青色'",[40,87591,87592],{"class":50},", sum: ",[40,87594,87595],{"class":94},"'一大四小'",[40,87597,58902],{"class":50},[40,87599,87600],{"class":42,"line":36157},[40,87601,81187],{"class":50},[40,87603,87604],{"class":42,"line":36166},[40,87605,82681],{"class":50},[40,87607,87608,87610,87612],{"class":42,"line":36172},[40,87609,82686],{"class":50},[40,87611,82868],{"class":94},[40,87613,34766],{"class":50},[40,87615,87616,87618,87620],{"class":42,"line":36178},[40,87617,82696],{"class":50},[40,87619,82877],{"class":94},[40,87621,34766],{"class":50},[40,87623,87624,87626,87629],{"class":42,"line":36187},[40,87625,82706],{"class":50},[40,87627,87628],{"class":63},"139",[40,87630,34766],{"class":50},[40,87632,87633,87635,87637],{"class":42,"line":36193},[40,87634,82716],{"class":50},[40,87636,82895],{"class":94},[40,87638,34766],{"class":50},[40,87640,87641,87643,87645],{"class":42,"line":36204},[40,87642,87457],{"class":50},[40,87644,3698],{"class":63},[40,87646,34766],{"class":50},[40,87648,87649,87651,87654,87656,87659],{"class":42,"line":36210},[40,87650,87525],{"class":50},[40,87652,87653],{"class":94},"'小号'",[40,87655,58762],{"class":50},[40,87657,87658],{"class":94},"'紫色'",[40,87660,58768],{"class":50},[40,87662,87663,87666],{"class":42,"line":36229},[40,87664,87665],{"class":50},"        gift: ",[40,87667,87668],{"class":94},"'50g茶叶,清洗球'\n",[40,87670,87671],{"class":42,"line":36235},[40,87672,55696],{"class":50},[40,87674,87675],{"class":42,"line":36246},[40,87676,56407],{"class":50},[40,87678,87679],{"class":42,"line":36252},[40,87680,87681],{"class":997},"    \u002F\u002F  1.根据数据渲染页面\n",[40,87683,87684,87686,87688,87690,87692,87694,87696,87698,87700,87702,87704,87706],{"class":42,"line":36272},[40,87685,55705],{"class":50},[40,87687,57697],{"class":596},[40,87689,3488],{"class":50},[40,87691,83196],{"class":94},[40,87693,77544],{"class":50},[40,87695,1284],{"class":1283},[40,87697,83343],{"class":50},[40,87699,77339],{"class":596},[40,87701,3488],{"class":50},[40,87703,83090],{"class":8539},[40,87705,83093],{"class":1283},[40,87707,18894],{"class":50},[40,87709,87710],{"class":42,"line":36288},[40,87711,87712],{"class":997},"      \u002F\u002F 对象解构\n",[40,87714,87715,87717,87719,87721,87723,87725,87727,87730,87732,87734,87736,87739,87741,87744,87746,87748],{"class":42,"line":36294},[40,87716,61526],{"class":1283},[40,87718,83102],{"class":50},[40,87720,83115],{"class":63},[40,87722,15757],{"class":50},[40,87724,83105],{"class":63},[40,87726,15757],{"class":50},[40,87728,87729],{"class":63},"count",[40,87731,15757],{"class":50},[40,87733,83110],{"class":63},[40,87735,15757],{"class":50},[40,87737,87738],{"class":63},"spec",[40,87740,15757],{"class":50},[40,87742,87743],{"class":63},"gift",[40,87745,83118],{"class":50},[40,87747,1284],{"class":1283},[40,87749,83123],{"class":50},[40,87751,87752],{"class":42,"line":36308},[40,87753,87754],{"class":997},"      \u002F\u002F 规格文字模块处理\n",[40,87756,87757,87759,87762,87764,87766,87768,87770,87772,87774,87776],{"class":42,"line":36314},[40,87758,61526],{"class":1283},[40,87760,87761],{"class":63}," text",[40,87763,16886],{"class":1283},[40,87765,85233],{"class":50},[40,87767,85236],{"class":596},[40,87769,85239],{"class":50},[40,87771,77518],{"class":596},[40,87773,3488],{"class":50},[40,87775,85246],{"class":94},[40,87777,1811],{"class":50},[40,87779,87780],{"class":42,"line":36320},[40,87781,87782],{"class":997},"      \u002F\u002F 处理赠品模块\n",[40,87784,87785,87787,87789,87791,87794,87796,87798,87800,87802,87805,87807,87809,87811,87813,87815,87818,87820,87823,87825,87827,87829,87831,87833,87835],{"class":42,"line":36331},[40,87786,61526],{"class":1283},[40,87788,77214],{"class":63},[40,87790,16886],{"class":1283},[40,87792,87793],{"class":50}," gift ",[40,87795,4463],{"class":1283},[40,87797,86407],{"class":50},[40,87799,86410],{"class":596},[40,87801,3488],{"class":50},[40,87803,87804],{"class":94},"','",[40,87806,34126],{"class":50},[40,87808,77339],{"class":596},[40,87810,3488],{"class":50},[40,87812,83090],{"class":8539},[40,87814,83093],{"class":1283},[40,87816,87817],{"class":94}," `\u003Cspan class=\"tag\">【赠品】${",[40,87819,83090],{"class":50},[40,87821,87822],{"class":94},"}\u003C\u002Fspan>`",[40,87824,34126],{"class":50},[40,87826,77518],{"class":596},[40,87828,3488],{"class":50},[40,87830,77523],{"class":94},[40,87832,17036],{"class":50},[40,87834,4336],{"class":1283},[40,87836,73401],{"class":94},[40,87838,87839],{"class":42,"line":36337},[40,87840,87841],{"class":997},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[40,87843,87844,87846,87849,87851,87854,87856,87858,87860,87863,87865,87867,87869,87872,87874,87876],{"class":42,"line":36343},[40,87845,61526],{"class":1283},[40,87847,87848],{"class":63}," subtotal",[40,87850,16886],{"class":1283},[40,87852,87853],{"class":50}," ((price ",[40,87855,3934],{"class":1283},[40,87857,9077],{"class":63},[40,87859,9841],{"class":1283},[40,87861,87862],{"class":50}," count) ",[40,87864,4063],{"class":1283},[40,87866,9077],{"class":63},[40,87868,34126],{"class":50},[40,87870,87871],{"class":596},"toFixed",[40,87873,3488],{"class":50},[40,87875,64],{"class":63},[40,87877,1811],{"class":50},[40,87879,87880],{"class":42,"line":36353},[40,87881,1413],{"emptyLinePlaceholder":1412},[40,87883,87884,87886],{"class":42,"line":36359},[40,87885,77277],{"class":1283},[40,87887,73465],{"class":94},[40,87889,87890],{"class":42,"line":36370},[40,87891,87892],{"class":94},"        \u003Cdiv class=\"item\">\n",[40,87894,87895,87898,87900],{"class":42,"line":36376},[40,87896,87897],{"class":94},"          \u003Cimg src=\"${",[40,87899,83115],{"class":50},[40,87901,83147],{"class":94},[40,87903,87904,87907,87909,87912,87914],{"class":42,"line":36386},[40,87905,87906],{"class":94},"          \u003Cp class=\"name\">${",[40,87908,83105],{"class":50},[40,87910,87911],{"class":94},"}${",[40,87913,4646],{"class":50},[40,87915,83157],{"class":94},[40,87917,87918,87921,87923],{"class":42,"line":36391},[40,87919,87920],{"class":94},"          \u003Cp class=\"spec\">${",[40,87922,8510],{"class":50},[40,87924,83157],{"class":94},[40,87926,87927,87930,87932,87934,87936,87938,87940,87942],{"class":42,"line":36397},[40,87928,87929],{"class":94},"          \u003Cp class=\"price\">${",[40,87931,83110],{"class":50},[40,87933,4037],{"class":94},[40,87935,87871],{"class":596},[40,87937,3488],{"class":94},[40,87939,64],{"class":63},[40,87941,3908],{"class":94},[40,87943,83157],{"class":94},[40,87945,87946,87949,87951],{"class":42,"line":36446},[40,87947,87948],{"class":94},"          \u003Cp class=\"count\">x${",[40,87950,87729],{"class":50},[40,87952,83157],{"class":94},[40,87954,87955,87958,87961],{"class":42,"line":36493},[40,87956,87957],{"class":94},"          \u003Cp class=\"sub-total\">${",[40,87959,87960],{"class":50},"subtotal",[40,87962,83157],{"class":94},[40,87964,87965],{"class":42,"line":36498},[40,87966,87967],{"class":94},"        \u003C\u002Fdiv> \n",[40,87969,87970],{"class":42,"line":36504},[40,87971,87972],{"class":94},"             `\n",[40,87974,87975,87978,87980,87982,87984],{"class":42,"line":36523},[40,87976,87977],{"class":50},"    }).",[40,87979,77518],{"class":596},[40,87981,3488],{"class":50},[40,87983,77523],{"class":94},[40,87985,1811],{"class":50},[40,87987,87988],{"class":42,"line":36529},[40,87989,87990],{"class":997},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[40,87992,87993,87995,87997,87999,88001,88004,88006,88009,88011,88013,88015,88018,88021,88023,88026,88028,88030,88032,88035,88037,88039,88041,88043],{"class":42,"line":36549},[40,87994,14543],{"class":1283},[40,87996,66083],{"class":63},[40,87998,16886],{"class":1283},[40,88000,83343],{"class":50},[40,88002,88003],{"class":596},"reduce",[40,88005,5702],{"class":50},[40,88007,88008],{"class":8539},"prev",[40,88010,15757],{"class":50},[40,88012,83090],{"class":8539},[40,88014,17036],{"class":50},[40,88016,88017],{"class":1283},"=>",[40,88019,88020],{"class":50}," prev ",[40,88022,3960],{"class":1283},[40,88024,88025],{"class":50}," (item.price ",[40,88027,3934],{"class":1283},[40,88029,9077],{"class":63},[40,88031,9841],{"class":1283},[40,88033,88034],{"class":50}," item.count) ",[40,88036,4063],{"class":1283},[40,88038,9077],{"class":63},[40,88040,15757],{"class":50},[40,88042,3672],{"class":63},[40,88044,1811],{"class":50},[40,88046,88047,88049,88051,88053,88056,88058,88060,88063,88065,88067,88069],{"class":42,"line":36555},[40,88048,55705],{"class":50},[40,88050,57697],{"class":596},[40,88052,3488],{"class":50},[40,88054,88055],{"class":94},"'.amount'",[40,88057,77544],{"class":50},[40,88059,1284],{"class":1283},[40,88061,88062],{"class":50}," total.",[40,88064,87871],{"class":596},[40,88066,3488],{"class":50},[40,88068,64],{"class":63},[40,88070,1811],{"class":50},[40,88072,88073,88075,88077],{"class":42,"line":36561},[40,88074,55715],{"class":50},[40,88076,55111],{"class":46},[40,88078,54606],{"class":50},[40,88080,88081,88083,88085],{"class":42,"line":36571},[40,88082,55083],{"class":50},[40,88084,55098],{"class":46},[40,88086,54606],{"class":50},[40,88088,88089],{"class":42,"line":36576},[40,88090,1413],{"emptyLinePlaceholder":1412},[40,88092,88093,88095,88097],{"class":42,"line":36582},[40,88094,55083],{"class":50},[40,88096,53935],{"class":46},[40,88098,54606],{"class":50},[14,88100,88102],{"id":88101},"_411-编程思想","4.11 编程思想",[402,88104,88106],{"id":88105},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,88108,88109,88112],{},[409,88110,88111],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,88114,88115],{},"调用就可以了",[19,88117,88118],{},[438,88119],{"alt":36,"src":88120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[402,88122,88124],{"id":88123},"_4112-面向对象","4.11.2 面向对象",[19,88126,88127],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,88129,88130],{},[438,88131],{"alt":36,"src":88132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,88134,88135],{},"面向对象的特性：",[1338,88137,88138,88141,88144],{},[495,88139,88140],{},"封装性",[495,88142,88143],{},"继承性",[495,88145,88146],{},"多态性",[402,88148,88150],{"id":88149},"_4113-两者比较","4.11.3 两者比较",[19,88152,88153],{},[438,88154],{"alt":36,"src":88155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,88157,88159],{"id":88158},"_412-构造函数回顾","4.12 构造函数回顾",[19,88161,88162],{},[438,88163],{"alt":36,"src":88164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,88166,88167],{},[438,88168],{"alt":36,"src":88169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,88171,88172],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,88174,88175],{},[438,88176],{"alt":36,"src":88177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,88179,88181],{"id":88180},"_413-原型","4.13 原型",[402,88183,88185],{"id":88184},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,88187,88188],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,88190,88191],{},[438,88192],{"alt":36,"src":88193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,88195,88196],{},[438,88197],{"alt":36,"src":88198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,88200,88201],{},"原型是构造函数的属性，它也是一个对象",[19,88203,88204],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,88206,88207],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[31,88209,88211],{"className":56365,"code":88210,"language":56367,"meta":36,"style":36},"\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",[26,88212,88213,88221,88226,88234,88239,88244,88249,88254,88259,88263,88267,88271,88276,88281,88285,88290,88295,88300,88305,88310,88314,88322],{"__ignoreMap":36},[40,88214,88215,88217,88219],{"class":42,"line":43},[40,88216,4387],{"class":50},[40,88218,55098],{"class":46},[40,88220,54606],{"class":50},[40,88222,88223],{"class":42,"line":54},[40,88224,88225],{"class":997},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[40,88227,88228,88230,88232],{"class":42,"line":70},[40,88229,55442],{"class":50},[40,88231,55111],{"class":46},[40,88233,54606],{"class":50},[40,88235,88236],{"class":42,"line":78},[40,88237,88238],{"class":50},"    function Star(uname, age) {\n",[40,88240,88241],{"class":42,"line":86},[40,88242,88243],{"class":50},"      this.uname = uname,\n",[40,88245,88246],{"class":42,"line":100},[40,88247,88248],{"class":50},"        this.age = age\n",[40,88250,88251],{"class":42,"line":108},[40,88252,88253],{"class":50},"      \u002F\u002F this.sing = function () {\n",[40,88255,88256],{"class":42,"line":121},[40,88257,88258],{"class":50},"      \u002F\u002F   console.log('唱歌')\n",[40,88260,88261],{"class":42,"line":134},[40,88262,1413],{"emptyLinePlaceholder":1412},[40,88264,88265],{"class":42,"line":146},[40,88266,63335],{"class":50},[40,88268,88269],{"class":42,"line":154},[40,88270,5513],{"class":50},[40,88272,88273],{"class":42,"line":162},[40,88274,88275],{"class":50},"    Star.prototype.sing = function () {\n",[40,88277,88278],{"class":42,"line":170},[40,88279,88280],{"class":50},"      console.log('唱歌')\n",[40,88282,88283],{"class":42,"line":183},[40,88284,5513],{"class":50},[40,88286,88287],{"class":42,"line":196},[40,88288,88289],{"class":50},"    \u002F\u002F console.dir(Star.prototype)\n",[40,88291,88292],{"class":42,"line":204},[40,88293,88294],{"class":50},"    const pink = new Star('pink', 18)\n",[40,88296,88297],{"class":42,"line":217},[40,88298,88299],{"class":50},"    const red = new Star('red', 20)\n",[40,88301,88302],{"class":42,"line":230},[40,88303,88304],{"class":50},"    pink.sing()\n",[40,88306,88307],{"class":42,"line":238},[40,88308,88309],{"class":50},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[40,88311,88312],{"class":42,"line":251},[40,88313,1413],{"emptyLinePlaceholder":1412},[40,88315,88316,88318,88320],{"class":42,"line":264},[40,88317,55715],{"class":50},[40,88319,55111],{"class":46},[40,88321,54606],{"class":50},[40,88323,88324,88326,88328],{"class":42,"line":277},[40,88325,55083],{"class":50},[40,88327,55098],{"class":46},[40,88329,54606],{"class":50},[19,88331,88332],{},[438,88333],{"alt":36,"src":88334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[31,88336,88338],{"className":56365,"code":88337,"language":56367,"meta":36,"style":36},"\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",[26,88339,88340,88348,88356,88361,88366,88371,88376,88380,88385,88390,88395,88399,88404,88408,88412,88417,88421,88429],{"__ignoreMap":36},[40,88341,88342,88344,88346],{"class":42,"line":43},[40,88343,4387],{"class":50},[40,88345,55098],{"class":46},[40,88347,54606],{"class":50},[40,88349,88350,88352,88354],{"class":42,"line":54},[40,88351,55442],{"class":50},[40,88353,55111],{"class":46},[40,88355,54606],{"class":50},[40,88357,88358],{"class":42,"line":70},[40,88359,88360],{"class":50},"    let that\n",[40,88362,88363],{"class":42,"line":78},[40,88364,88365],{"class":50},"    function Star(uname) {\n",[40,88367,88368],{"class":42,"line":86},[40,88369,88370],{"class":50},"      this.uname = uname\n",[40,88372,88373],{"class":42,"line":100},[40,88374,88375],{"class":50},"      that = this\n",[40,88377,88378],{"class":42,"line":108},[40,88379,5513],{"class":50},[40,88381,88382],{"class":42,"line":121},[40,88383,88384],{"class":50},"    \u002F\u002F 实例对象是 ldh\n",[40,88386,88387],{"class":42,"line":134},[40,88388,88389],{"class":50},"    const ldh = new Star('刘德华')\n",[40,88391,88392],{"class":42,"line":146},[40,88393,88394],{"class":50},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[40,88396,88397],{"class":42,"line":154},[40,88398,1413],{"emptyLinePlaceholder":1412},[40,88400,88401],{"class":42,"line":162},[40,88402,88403],{"class":50},"    Star.sing = function () {\n",[40,88405,88406],{"class":42,"line":170},[40,88407,88280],{"class":50},[40,88409,88410],{"class":42,"line":183},[40,88411,5513],{"class":50},[40,88413,88414],{"class":42,"line":196},[40,88415,88416],{"class":50},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[40,88418,88419],{"class":42,"line":204},[40,88420,1413],{"emptyLinePlaceholder":1412},[40,88422,88423,88425,88427],{"class":42,"line":217},[40,88424,55715],{"class":50},[40,88426,55111],{"class":46},[40,88428,54606],{"class":50},[40,88430,88431,88433,88435],{"class":42,"line":230},[40,88432,55083],{"class":50},[40,88434,55098],{"class":46},[40,88436,54606],{"class":50},[19,88438,88439],{},"构造函数的this指向的是实例对象；",[19,88441,88442],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[402,88444,88446],{"id":88445},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,88448,88449],{},[438,88450],{"alt":36,"src":88451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[31,88453,88455],{"className":56365,"code":88454,"language":56367,"meta":36,"style":36},"\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",[26,88456,88457,88465,88473,88478,88483,88488,88493,88498,88503,88508,88513,88518,88523,88527,88532,88537,88542,88547,88551,88556,88561,88566,88571,88575,88580,88585,88590,88595,88599,88604,88608,88616],{"__ignoreMap":36},[40,88458,88459,88461,88463],{"class":42,"line":43},[40,88460,4387],{"class":50},[40,88462,55098],{"class":46},[40,88464,54606],{"class":50},[40,88466,88467,88469,88471],{"class":42,"line":54},[40,88468,55442],{"class":50},[40,88470,55111],{"class":46},[40,88472,54606],{"class":50},[40,88474,88475],{"class":42,"line":70},[40,88476,88477],{"class":50},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[40,88479,88480],{"class":42,"line":78},[40,88481,88482],{"class":50},"    const arr = [1, 2, 3]\n",[40,88484,88485],{"class":42,"line":86},[40,88486,88487],{"class":50},"    \u002F\u002F 自己定义数组的扩展方法\n",[40,88489,88490],{"class":42,"line":100},[40,88491,88492],{"class":50},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[40,88494,88495],{"class":42,"line":108},[40,88496,88497],{"class":50},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[40,88499,88500],{"class":42,"line":121},[40,88501,88502],{"class":50},"    \u002F\u002F ①.最大值\n",[40,88504,88505],{"class":42,"line":134},[40,88506,88507],{"class":50},"    Array.prototype.max = function () {\n",[40,88509,88510],{"class":42,"line":146},[40,88511,88512],{"class":50},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[40,88514,88515],{"class":42,"line":154},[40,88516,88517],{"class":50},"      return Math.max(...this)\n",[40,88519,88520],{"class":42,"line":162},[40,88521,88522],{"class":50},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[40,88524,88525],{"class":42,"line":170},[40,88526,5513],{"class":50},[40,88528,88529],{"class":42,"line":183},[40,88530,88531],{"class":50},"    console.log(arr.max())\n",[40,88533,88534],{"class":42,"line":196},[40,88535,88536],{"class":50},"    \u002F\u002F ②最小值\n",[40,88538,88539],{"class":42,"line":204},[40,88540,88541],{"class":50},"    Array.prototype.min = function () {\n",[40,88543,88544],{"class":42,"line":217},[40,88545,88546],{"class":50},"      return Math.min(...this)\n",[40,88548,88549],{"class":42,"line":230},[40,88550,5513],{"class":50},[40,88552,88553],{"class":42,"line":238},[40,88554,88555],{"class":50},"    console.log(arr.min())\n",[40,88557,88558],{"class":42,"line":251},[40,88559,88560],{"class":50},"    \u002F\u002F③求和\n",[40,88562,88563],{"class":42,"line":264},[40,88564,88565],{"class":50},"    Array.prototype.sum = function () {\n",[40,88567,88568],{"class":42,"line":277},[40,88569,88570],{"class":50},"      return this.reduce((prev, current) => prev + current, 0)\n",[40,88572,88573],{"class":42,"line":290},[40,88574,5513],{"class":50},[40,88576,88577],{"class":42,"line":298},[40,88578,88579],{"class":50},"    console.log(arr.sum())\n",[40,88581,88582],{"class":42,"line":310},[40,88583,88584],{"class":50},"    \u002F\u002F ③排序\n",[40,88586,88587],{"class":42,"line":5086},[40,88588,88589],{"class":50},"    Array.prototype.rever = function () {\n",[40,88591,88592],{"class":42,"line":5091},[40,88593,88594],{"class":50},"      return this.reverse()\n",[40,88596,88597],{"class":42,"line":5105},[40,88598,5513],{"class":50},[40,88600,88601],{"class":42,"line":5110},[40,88602,88603],{"class":50},"    console.log(arr.rever())\n",[40,88605,88606],{"class":42,"line":5902},[40,88607,1413],{"emptyLinePlaceholder":1412},[40,88609,88610,88612,88614],{"class":42,"line":5916},[40,88611,55715],{"class":50},[40,88613,55111],{"class":46},[40,88615,54606],{"class":50},[40,88617,88618,88620,88622],{"class":42,"line":5924},[40,88619,55083],{"class":50},[40,88621,55098],{"class":46},[40,88623,54606],{"class":50},[19,88625,88626],{},[438,88627],{"alt":36,"src":88628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[402,88630,88632],{"id":88631},"_4133-constructor-属性","4.13.3 constructor 属性",[19,88634,88635],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,88637,88638],{},[438,88639],{"alt":36,"src":88640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[31,88642,88644],{"className":56365,"code":88643,"language":56367,"meta":36,"style":36},"\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",[26,88645,88646,88654,88662,88667,88672,88676,88681,88686,88691,88699],{"__ignoreMap":36},[40,88647,88648,88650,88652],{"class":42,"line":43},[40,88649,4387],{"class":50},[40,88651,55098],{"class":46},[40,88653,54606],{"class":50},[40,88655,88656,88658,88660],{"class":42,"line":54},[40,88657,55442],{"class":50},[40,88659,55111],{"class":46},[40,88661,54606],{"class":50},[40,88663,88664],{"class":42,"line":70},[40,88665,88666],{"class":50},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[40,88668,88669],{"class":42,"line":78},[40,88670,88671],{"class":50},"    function Star() {\n",[40,88673,88674],{"class":42,"line":86},[40,88675,5513],{"class":50},[40,88677,88678],{"class":42,"line":100},[40,88679,88680],{"class":50},"    const ldh = new Star()\n",[40,88682,88683],{"class":42,"line":108},[40,88684,88685],{"class":50},"    console.log(Star.prototype)\n",[40,88687,88688],{"class":42,"line":121},[40,88689,88690],{"class":50},"    console.log(Star.prototype.constructor === Star)\n",[40,88692,88693,88695,88697],{"class":42,"line":134},[40,88694,55715],{"class":50},[40,88696,55111],{"class":46},[40,88698,54606],{"class":50},[40,88700,88701,88703,88705],{"class":42,"line":146},[40,88702,55083],{"class":50},[40,88704,55098],{"class":46},[40,88706,54606],{"class":50},[19,88708,88709],{},[438,88710],{"alt":36,"src":88711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,88713,88714],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[31,88716,88718],{"className":56365,"code":88717,"language":56367,"meta":36,"style":36},"  \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",[26,88719,88720,88728,88732,88736,88740,88745,88750,88755,88759,88764,88769,88774,88779,88784,88789,88793,88797,88802,88807,88812,88816,88821,88826,88830,88834,88838],{"__ignoreMap":36},[40,88721,88722,88724,88726],{"class":42,"line":43},[40,88723,55442],{"class":50},[40,88725,55111],{"class":46},[40,88727,54606],{"class":50},[40,88729,88730],{"class":42,"line":54},[40,88731,88666],{"class":50},[40,88733,88734],{"class":42,"line":70},[40,88735,88671],{"class":50},[40,88737,88738],{"class":42,"line":78},[40,88739,5513],{"class":50},[40,88741,88742],{"class":42,"line":86},[40,88743,88744],{"class":50},"    \u002F\u002F const ldh = new Star()\n",[40,88746,88747],{"class":42,"line":100},[40,88748,88749],{"class":50},"    \u002F\u002F console.log(Star.prototype)\n",[40,88751,88752],{"class":42,"line":108},[40,88753,88754],{"class":50},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[40,88756,88757],{"class":42,"line":121},[40,88758,1413],{"emptyLinePlaceholder":1412},[40,88760,88761],{"class":42,"line":134},[40,88762,88763],{"class":50},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[40,88765,88766],{"class":42,"line":146},[40,88767,88768],{"class":50},"    \u002F\u002F Star.prototype.sing = function () {\n",[40,88770,88771],{"class":42,"line":154},[40,88772,88773],{"class":50},"    \u002F\u002F   console.log('唱歌')\n",[40,88775,88776],{"class":42,"line":162},[40,88777,88778],{"class":50},"    \u002F\u002F }\n",[40,88780,88781],{"class":42,"line":170},[40,88782,88783],{"class":50},"    \u002F\u002F Star.prototype.dance = function () {\n",[40,88785,88786],{"class":42,"line":183},[40,88787,88788],{"class":50},"    \u002F\u002F   console.log('跳舞')\n",[40,88790,88791],{"class":42,"line":196},[40,88792,88778],{"class":50},[40,88794,88795],{"class":42,"line":204},[40,88796,88685],{"class":50},[40,88798,88799],{"class":42,"line":217},[40,88800,88801],{"class":50},"    Star.prototype = {\n",[40,88803,88804],{"class":42,"line":230},[40,88805,88806],{"class":50},"      sing: function () {\n",[40,88808,88809],{"class":42,"line":238},[40,88810,88811],{"class":50},"        console.log('唱歌')\n",[40,88813,88814],{"class":42,"line":251},[40,88815,81187],{"class":50},[40,88817,88818],{"class":42,"line":264},[40,88819,88820],{"class":50},"      dance: function () {\n",[40,88822,88823],{"class":42,"line":277},[40,88824,88825],{"class":50},"        console.log('跳舞')\n",[40,88827,88828],{"class":42,"line":290},[40,88829,55696],{"class":50},[40,88831,88832],{"class":42,"line":298},[40,88833,5513],{"class":50},[40,88835,88836],{"class":42,"line":310},[40,88837,88685],{"class":50},[40,88839,88840,88842,88844],{"class":42,"line":5086},[40,88841,55715],{"class":50},[40,88843,55111],{"class":46},[40,88845,54606],{"class":50},[19,88847,88848],{},"进行输出结果后会发现：",[19,88850,88851],{},[438,88852],{"alt":36,"src":88853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,88855,88856],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,88858,88859],{},"所以，要重新指回创造这个原型对象的构造函数",[31,88861,88863],{"className":74509,"code":88862,"language":74511,"meta":36,"style":36},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[26,88864,88865,88879,88884,88889,88900,88913,88918,88929,88943,88947],{"__ignoreMap":36},[40,88866,88867,88870,88872,88875,88877],{"class":42,"line":43},[40,88868,88869],{"class":63},"Star",[40,88871,4037],{"class":50},[40,88873,88874],{"class":63},"prototype",[40,88876,16886],{"class":1283},[40,88878,18894],{"class":50},[40,88880,88881],{"class":42,"line":54},[40,88882,88883],{"class":997},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[40,88885,88886],{"class":42,"line":70},[40,88887,88888],{"class":50},"  constructor: Star,\n",[40,88890,88891,88894,88896,88898],{"class":42,"line":78},[40,88892,88893],{"class":596},"  sing",[40,88895,60],{"class":50},[40,88897,57747],{"class":1283},[40,88899,57750],{"class":50},[40,88901,88902,88904,88906,88908,88911],{"class":42,"line":86},[40,88903,77048],{"class":50},[40,88905,61545],{"class":596},[40,88907,3488],{"class":50},[40,88909,88910],{"class":94},"'唱歌'",[40,88912,1811],{"class":50},[40,88914,88915],{"class":42,"line":100},[40,88916,88917],{"class":50},"   },\n",[40,88919,88920,88923,88925,88927],{"class":42,"line":108},[40,88921,88922],{"class":596},"   dance",[40,88924,60],{"class":50},[40,88926,57747],{"class":1283},[40,88928,57750],{"class":50},[40,88930,88931,88934,88936,88938,88941],{"class":42,"line":121},[40,88932,88933],{"class":50},"     console.",[40,88935,61545],{"class":596},[40,88937,3488],{"class":50},[40,88939,88940],{"class":94},"'跳舞'",[40,88942,1811],{"class":50},[40,88944,88945],{"class":42,"line":134},[40,88946,7632],{"class":50},[40,88948,88949],{"class":42,"line":146},[40,88950,4907],{"class":50},[19,88952,88953],{},[438,88954],{"alt":36,"src":88955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,88957,88958],{},"总结1：",[19,88960,88961],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,88963,88964],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,88966,88967],{},"constructor指的是他的来源",[19,88969,88970],{},[438,88971],{"alt":36,"src":88972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,88974,88975],{},[438,88976],{"alt":36,"src":88977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,88979,88980],{},"总结2：",[19,88982,88983],{},[438,88984],{"alt":36,"src":88985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,88987,88988],{},[438,88989],{"alt":36,"src":88990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,88992,88993],{},[438,88994],{"alt":36,"src":88995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[402,88997,88999],{"id":88998},"_4134-对象原型","4.13.4 对象原型",[19,89001,89002],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,89004,89005],{},"对象原型就是__proto__这个属性",[19,89007,89008],{},[438,89009],{"alt":36,"src":89010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,89012,89013],{},[438,89014],{"alt":36,"src":89015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,89017,89018],{},[438,89019],{"alt":36,"src":89020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,89022,89023],{},[438,89024],{"alt":36,"src":89025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[31,89027,89029],{"className":56365,"code":89028,"language":56367,"meta":36,"style":36},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[26,89030,89031,89039,89047,89051,89055,89059,89064,89072],{"__ignoreMap":36},[40,89032,89033,89035,89037],{"class":42,"line":43},[40,89034,4387],{"class":50},[40,89036,55098],{"class":46},[40,89038,54606],{"class":50},[40,89040,89041,89043,89045],{"class":42,"line":54},[40,89042,55442],{"class":50},[40,89044,55111],{"class":46},[40,89046,54606],{"class":50},[40,89048,89049],{"class":42,"line":70},[40,89050,88671],{"class":50},[40,89052,89053],{"class":42,"line":78},[40,89054,5513],{"class":50},[40,89056,89057],{"class":42,"line":86},[40,89058,88680],{"class":50},[40,89060,89061],{"class":42,"line":100},[40,89062,89063],{"class":50},"    console.log(ldh)\n",[40,89065,89066,89068,89070],{"class":42,"line":108},[40,89067,55715],{"class":50},[40,89069,55111],{"class":46},[40,89071,54606],{"class":50},[40,89073,89074,89076,89078],{"class":42,"line":121},[40,89075,55083],{"class":50},[40,89077,55098],{"class":46},[40,89079,54606],{"class":50},[19,89081,89082],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,89084,89085],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,89087,89088],{},[438,89089],{"alt":36,"src":89090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,89092,89093],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,89095,89096],{},"对象原型指向原型对象",[19,89098,89099],{},[438,89100],{"alt":36,"src":89101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,89103,89104],{},[438,89105],{"alt":36,"src":89106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,89108,89109],{},[438,89110],{"alt":36,"src":89111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[402,89113,89115],{"id":89114},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,89117,89118],{},[438,89119],{"alt":36,"src":89120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[492,89122,89123,89126,89129,89132],{},[495,89124,89125],{},"构造函数通过new的形式实例化得到实例对象",[495,89127,89128],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[495,89130,89131],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[495,89133,89134],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,89136,89137],{},[438,89138],{"alt":36,"src":89139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,89141,89142],{},"题目梳理：",[19,89144,89145],{},[438,89146],{"alt":36,"src":89147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[402,89149,89151],{"id":89150},"_4136-原型继承","4.13.6 原型继承",[19,89153,89154],{},[438,89155],{"alt":36,"src":89156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,89158,89159],{},[438,89160],{"alt":36,"src":89161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,89163,89164],{},[438,89165],{"alt":36,"src":89166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,89168,89169],{},[438,89170],{"alt":36,"src":89171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,89173,89174],{},[438,89175],{"alt":36,"src":89176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,89178,89179],{},[438,89180],{"alt":36,"src":89181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,89183,89184],{},[438,89185],{"alt":36,"src":89186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,89188,89189],{},[438,89190],{"alt":36,"src":89191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,89193,89194],{},"回顾：构造函数每次new得到对象都是不同的",[402,89196,89198],{"id":89197},"_4137-原型链","4.13.7 原型链",[19,89200,89201],{},[438,89202],{"alt":36,"src":89203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,89205,89206],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,89208,89209],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,89211,89212],{},"大哥是Object",[19,89214,89215],{},[438,89216],{"alt":36,"src":89217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,89219,89220],{},[438,89221],{"alt":36,"src":89222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,89224,89225],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,89227,89228],{},"万物皆对象",[402,89230,89232],{"id":89231},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,89234,89235],{},"模态框",[19,89237,89238],{},"以后遇见这个效果直接使用这个就行",[19,89240,89241],{},[438,89242],{"alt":36,"src":89243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,89245,89246],{},[438,89247],{"alt":36,"src":89248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,89250,89251],{},[438,89252],{"alt":36,"src":89253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,89255,89256],{},[438,89257],{"alt":36,"src":89258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,89260,89261],{},"补充知识点：",[492,89263,89264],{},[495,89265,89266],{},"append()",[19,89268,89269],{},[438,89270],{"alt":36,"src":89271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[31,89273,89275],{"className":53933,"code":89274,"language":53935,"meta":36,"style":36},"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",[26,89276,89277,89282,89287,89292,89296,89300,89304,89309,89314,89319,89323],{"__ignoreMap":36},[40,89278,89279],{"class":42,"line":43},[40,89280,89281],{"class":50},"append(param1)\n",[40,89283,89284],{"class":42,"line":54},[40,89285,89286],{"class":50},"append(param1, param2)\n",[40,89288,89289],{"class":42,"line":70},[40,89290,89291],{"class":50},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[40,89293,89294],{"class":42,"line":78},[40,89295,1413],{"emptyLinePlaceholder":1412},[40,89297,89298],{"class":42,"line":86},[40,89299,1413],{"emptyLinePlaceholder":1412},[40,89301,89302],{"class":42,"line":100},[40,89303,1413],{"emptyLinePlaceholder":1412},[40,89305,89306],{"class":42,"line":108},[40,89307,89308],{"class":50},"let div = document.createElement(\"div\");\n",[40,89310,89311],{"class":42,"line":121},[40,89312,89313],{"class":50},"let p = document.createElement(\"p\");\n",[40,89315,89316],{"class":42,"line":134},[40,89317,89318],{"class":50},"div.append(p);\n",[40,89320,89321],{"class":42,"line":146},[40,89322,1413],{"emptyLinePlaceholder":1412},[40,89324,89325,89328,89330],{"class":42,"line":154},[40,89326,89327],{"class":50},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[40,89329,19],{"class":46},[40,89331,89332],{"class":50},"> ]\n",[492,89334,89335],{"start":54},[495,89336,89337],{},"remove()",[19,89339,89340],{},"自己删自己",[19,89342,89343],{},[438,89344],{"alt":36,"src":89345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[31,89347,89349],{"className":53933,"code":89348,"language":53935,"meta":36,"style":36},"\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",[26,89350,89351,89361,89375,89379,89387,89401,89421,89433,89441,89448,89460,89473,89508,89520,89531,89543,89555,89567,89594,89604,89608,89612,89621,89633,89647,89657,89669,89673,89677,89687,89698,89708,89718,89731,89744,89754,89758,89762,89771,89781,89793,89797,89801,89810,89820,89830,89842,89846,89850,89860,89876,89887,89897,89907,89919,89931,89943,89947,89951,89964,89975,89979,89987,89995,89999,90007,90027,90047,90055,90060,90086,90091,90096,90115,90120,90132,90137,90148,90158,90168,90173,90178,90182,90187,90192,90197,90217,90222,90242,90247,90261,90266,90271,90276,90292,90296,90301,90330,90335,90340,90345,90356,90360,90364,90368,90373,90398,90403,90428,90433,90442,90446,90451,90476,90480,90505,90509,90518,90522,90527,90545,90555,90559,90567,90575,90579],{"__ignoreMap":36},[40,89352,89353,89355,89357,89359],{"class":42,"line":43},[40,89354,54597],{"class":50},[40,89356,54600],{"class":46},[40,89358,54603],{"class":596},[40,89360,54606],{"class":50},[40,89362,89363,89365,89367,89369,89371,89373],{"class":42,"line":54},[40,89364,4387],{"class":50},[40,89366,53935],{"class":46},[40,89368,54615],{"class":596},[40,89370,1284],{"class":50},[40,89372,54620],{"class":94},[40,89374,54606],{"class":50},[40,89376,89377],{"class":42,"line":70},[40,89378,1413],{"emptyLinePlaceholder":1412},[40,89380,89381,89383,89385],{"class":42,"line":78},[40,89382,4387],{"class":50},[40,89384,54633],{"class":46},[40,89386,54606],{"class":50},[40,89388,89389,89391,89393,89395,89397,89399],{"class":42,"line":86},[40,89390,55442],{"class":50},[40,89392,54643],{"class":46},[40,89394,54646],{"class":596},[40,89396,1284],{"class":50},[40,89398,54651],{"class":94},[40,89400,54606],{"class":50},[40,89402,89403,89405,89407,89409,89411,89413,89415,89417,89419],{"class":42,"line":100},[40,89404,55442],{"class":50},[40,89406,54643],{"class":46},[40,89408,18242],{"class":596},[40,89410,1284],{"class":50},[40,89412,54690],{"class":94},[40,89414,54670],{"class":596},[40,89416,1284],{"class":50},[40,89418,54697],{"class":94},[40,89420,54606],{"class":50},[40,89422,89423,89425,89427,89429,89431],{"class":42,"line":108},[40,89424,55442],{"class":50},[40,89426,54706],{"class":46},[40,89428,54709],{"class":50},[40,89430,54706],{"class":46},[40,89432,54606],{"class":50},[40,89434,89435,89437,89439],{"class":42,"line":121},[40,89436,55442],{"class":50},[40,89438,3384],{"class":46},[40,89440,54606],{"class":50},[40,89442,89443,89446],{"class":42,"line":134},[40,89444,89445],{"class":596},"    .modal",[40,89447,18894],{"class":50},[40,89449,89450,89452,89454,89456,89458],{"class":42,"line":146},[40,89451,58069],{"class":63},[40,89453,60],{"class":50},[40,89455,7296],{"class":63},[40,89457,54790],{"class":1283},[40,89459,4637],{"class":50},[40,89461,89462,89465,89467,89469,89471],{"class":42,"line":154},[40,89463,89464],{"class":63},"      min-height",[40,89466,60],{"class":50},[40,89468,3791],{"class":63},[40,89470,54790],{"class":1283},[40,89472,4637],{"class":50},[40,89474,89475,89477,89479,89481,89483,89485,89487,89489,89491,89493,89495,89497,89499,89501,89503,89506],{"class":42,"line":162},[40,89476,82045],{"class":63},[40,89478,60],{"class":50},[40,89480,3672],{"class":63},[40,89482,7416],{"class":63},[40,89484,5364],{"class":63},[40,89486,54790],{"class":1283},[40,89488,82062],{"class":63},[40,89490,3488],{"class":50},[40,89492,3672],{"class":63},[40,89494,15757],{"class":50},[40,89496,3672],{"class":63},[40,89498,15757],{"class":50},[40,89500,3672],{"class":63},[40,89502,15757],{"class":50},[40,89504,89505],{"class":63},"0.1",[40,89507,6043],{"class":50},[40,89509,89510,89512,89514,89516,89518],{"class":42,"line":170},[40,89511,58432],{"class":63},[40,89513,60],{"class":50},[40,89515,3773],{"class":63},[40,89517,54790],{"class":1283},[40,89519,4637],{"class":50},[40,89521,89522,89524,89526,89529],{"class":42,"line":183},[40,89523,58057],{"class":63},[40,89525,60],{"class":50},[40,89527,89528],{"class":63},"fixed",[40,89530,4637],{"class":50},[40,89532,89533,89536,89538,89541],{"class":42,"line":196},[40,89534,89535],{"class":63},"      z-index",[40,89537,60],{"class":50},[40,89539,89540],{"class":63},"999",[40,89542,4637],{"class":50},[40,89544,89545,89547,89549,89551,89553],{"class":42,"line":204},[40,89546,58136],{"class":63},[40,89548,60],{"class":50},[40,89550,4134],{"class":63},[40,89552,3808],{"class":1283},[40,89554,4637],{"class":50},[40,89556,89557,89559,89561,89563,89565],{"class":42,"line":217},[40,89558,58245],{"class":63},[40,89560,60],{"class":50},[40,89562,4134],{"class":63},[40,89564,3808],{"class":1283},[40,89566,4637],{"class":50},[40,89568,89569,89571,89573,89575,89577,89580,89582,89584,89586,89588,89590,89592],{"class":42,"line":230},[40,89570,82086],{"class":63},[40,89572,60],{"class":50},[40,89574,82091],{"class":63},[40,89576,3488],{"class":50},[40,89578,89579],{"class":63},"-50",[40,89581,3808],{"class":1283},[40,89583,15757],{"class":50},[40,89585,89579],{"class":63},[40,89587,3808],{"class":1283},[40,89589,15757],{"class":50},[40,89591,3672],{"class":63},[40,89593,6043],{"class":50},[40,89595,89596,89598,89600,89602],{"class":42,"line":238},[40,89597,58182],{"class":63},[40,89599,60],{"class":50},[40,89601,64140],{"class":63},[40,89603,4637],{"class":50},[40,89605,89606],{"class":42,"line":251},[40,89607,5513],{"class":50},[40,89609,89610],{"class":42,"line":264},[40,89611,1413],{"emptyLinePlaceholder":1412},[40,89613,89614,89616,89619],{"class":42,"line":277},[40,89615,89445],{"class":596},[40,89617,89618],{"class":596}," .header",[40,89620,18894],{"class":50},[40,89622,89623,89625,89627,89629,89631],{"class":42,"line":290},[40,89624,60657],{"class":63},[40,89626,60],{"class":50},[40,89628,3880],{"class":63},[40,89630,54790],{"class":1283},[40,89632,4637],{"class":50},[40,89634,89635,89637,89639,89641,89643,89645],{"class":42,"line":298},[40,89636,57993],{"class":63},[40,89638,60],{"class":50},[40,89640,3672],{"class":63},[40,89642,5364],{"class":63},[40,89644,54790],{"class":1283},[40,89646,4637],{"class":50},[40,89648,89649,89651,89653,89655],{"class":42,"line":310},[40,89650,58057],{"class":63},[40,89652,60],{"class":50},[40,89654,58062],{"class":63},[40,89656,4637],{"class":50},[40,89658,89659,89661,89663,89665,89667],{"class":42,"line":5086},[40,89660,58220],{"class":63},[40,89662,60],{"class":50},[40,89664,4178],{"class":63},[40,89666,54790],{"class":1283},[40,89668,4637],{"class":50},[40,89670,89671],{"class":42,"line":5091},[40,89672,5513],{"class":50},[40,89674,89675],{"class":42,"line":5105},[40,89676,1413],{"emptyLinePlaceholder":1412},[40,89678,89679,89681,89683,89685],{"class":42,"line":5110},[40,89680,89445],{"class":596},[40,89682,89618],{"class":596},[40,89684,6356],{"class":46},[40,89686,18894],{"class":50},[40,89688,89689,89692,89694,89696],{"class":42,"line":5902},[40,89690,89691],{"class":63},"      font-style",[40,89693,60],{"class":50},[40,89695,67139],{"class":63},[40,89697,4637],{"class":50},[40,89699,89700,89702,89704,89706],{"class":42,"line":5916},[40,89701,60714],{"class":63},[40,89703,60],{"class":50},[40,89705,65368],{"class":63},[40,89707,4637],{"class":50},[40,89709,89710,89712,89714,89716],{"class":42,"line":5924},[40,89711,58057],{"class":63},[40,89713,60],{"class":50},[40,89715,58129],{"class":63},[40,89717,4637],{"class":50},[40,89719,89720,89723,89725,89727,89729],{"class":42,"line":5929},[40,89721,89722],{"class":63},"      right",[40,89724,60],{"class":50},[40,89726,4054],{"class":63},[40,89728,54790],{"class":1283},[40,89730,4637],{"class":50},[40,89732,89733,89735,89737,89740,89742],{"class":42,"line":5935},[40,89734,58245],{"class":63},[40,89736,60],{"class":50},[40,89738,89739],{"class":63},"-2",[40,89741,54790],{"class":1283},[40,89743,4637],{"class":50},[40,89745,89746,89748,89750,89752],{"class":42,"line":5941},[40,89747,65323],{"class":63},[40,89749,60],{"class":50},[40,89751,65328],{"class":63},[40,89753,4637],{"class":50},[40,89755,89756],{"class":42,"line":5946},[40,89757,5513],{"class":50},[40,89759,89760],{"class":42,"line":11270},[40,89761,1413],{"emptyLinePlaceholder":1412},[40,89763,89764,89766,89769],{"class":42,"line":11294},[40,89765,89445],{"class":596},[40,89767,89768],{"class":596}," .body",[40,89770,18894],{"class":50},[40,89772,89773,89775,89777,89779],{"class":42,"line":11299},[40,89774,60584],{"class":63},[40,89776,60],{"class":50},[40,89778,54890],{"class":63},[40,89780,4637],{"class":50},[40,89782,89783,89785,89787,89789,89791],{"class":42,"line":11305},[40,89784,57993],{"class":63},[40,89786,60],{"class":50},[40,89788,3925],{"class":63},[40,89790,54790],{"class":1283},[40,89792,4637],{"class":50},[40,89794,89795],{"class":42,"line":11332},[40,89796,5513],{"class":50},[40,89798,89799],{"class":42,"line":11337},[40,89800,1413],{"emptyLinePlaceholder":1412},[40,89802,89803,89805,89808],{"class":42,"line":11343},[40,89804,89445],{"class":596},[40,89806,89807],{"class":596}," .footer",[40,89809,18894],{"class":50},[40,89811,89812,89814,89816,89818],{"class":42,"line":11355},[40,89813,58307],{"class":63},[40,89815,60],{"class":50},[40,89817,54775],{"class":63},[40,89819,4637],{"class":50},[40,89821,89822,89824,89826,89828],{"class":42,"line":11367},[40,89823,58318],{"class":63},[40,89825,60],{"class":50},[40,89827,54878],{"class":63},[40,89829,4637],{"class":50},[40,89831,89832,89834,89836,89838,89840],{"class":42,"line":11379},[40,89833,57993],{"class":63},[40,89835,60],{"class":50},[40,89837,3925],{"class":63},[40,89839,54790],{"class":1283},[40,89841,4637],{"class":50},[40,89843,89844],{"class":42,"line":13038},[40,89845,5513],{"class":50},[40,89847,89848],{"class":42,"line":13063},[40,89849,1413],{"emptyLinePlaceholder":1412},[40,89851,89852,89854,89856,89858],{"class":42,"line":13086},[40,89853,89445],{"class":596},[40,89855,89807],{"class":596},[40,89857,4741],{"class":46},[40,89859,18894],{"class":50},[40,89861,89862,89864,89866,89868,89870,89872,89874],{"class":42,"line":13110},[40,89863,57993],{"class":63},[40,89865,60],{"class":50},[40,89867,3555],{"class":63},[40,89869,54790],{"class":1283},[40,89871,5409],{"class":63},[40,89873,54790],{"class":1283},[40,89875,4637],{"class":50},[40,89877,89878,89880,89882,89885],{"class":42,"line":13115},[40,89879,65019],{"class":63},[40,89881,60],{"class":50},[40,89883,89884],{"class":63},"#ccc",[40,89886,4637],{"class":50},[40,89888,89889,89891,89893,89895],{"class":42,"line":13120},[40,89890,67268],{"class":63},[40,89892,60],{"class":50},[40,89894,58035],{"class":63},[40,89896,4637],{"class":50},[40,89898,89899,89901,89903,89905],{"class":42,"line":13125},[40,89900,60714],{"class":63},[40,89902,60],{"class":50},[40,89904,64140],{"class":63},[40,89906,4637],{"class":50},[40,89908,89909,89911,89913,89915,89917],{"class":42,"line":13134},[40,89910,58432],{"class":63},[40,89912,60],{"class":50},[40,89914,64],{"class":63},[40,89916,54790],{"class":1283},[40,89918,4637],{"class":50},[40,89920,89921,89923,89925,89927,89929],{"class":42,"line":13139},[40,89922,65048],{"class":63},[40,89924,60],{"class":50},[40,89926,3925],{"class":63},[40,89928,54790],{"class":1283},[40,89930,4637],{"class":50},[40,89932,89933,89935,89937,89939,89941],{"class":42,"line":13145},[40,89934,58220],{"class":63},[40,89936,60],{"class":50},[40,89938,4028],{"class":63},[40,89940,54790],{"class":1283},[40,89942,4637],{"class":50},[40,89944,89945],{"class":42,"line":13166},[40,89946,5513],{"class":50},[40,89948,89949],{"class":42,"line":13172},[40,89950,1413],{"emptyLinePlaceholder":1412},[40,89952,89953,89955,89957,89959,89962],{"class":42,"line":13186},[40,89954,89445],{"class":596},[40,89956,89807],{"class":596},[40,89958,4741],{"class":46},[40,89960,89961],{"class":596},".submit",[40,89963,18894],{"class":50},[40,89965,89966,89968,89970,89973],{"class":42,"line":13192},[40,89967,58182],{"class":63},[40,89969,60],{"class":50},[40,89971,89972],{"class":63},"#369",[40,89974,4637],{"class":50},[40,89976,89977],{"class":42,"line":13219},[40,89978,5513],{"class":50},[40,89980,89981,89983,89985],{"class":42,"line":13228},[40,89982,55715],{"class":50},[40,89984,3384],{"class":46},[40,89986,54606],{"class":50},[40,89988,89989,89991,89993],{"class":42,"line":13234},[40,89990,55083],{"class":50},[40,89992,54633],{"class":46},[40,89994,54606],{"class":50},[40,89996,89997],{"class":42,"line":13242},[40,89998,1413],{"emptyLinePlaceholder":1412},[40,90000,90001,90003,90005],{"class":42,"line":13247},[40,90002,4387],{"class":50},[40,90004,55098],{"class":46},[40,90006,54606],{"class":50},[40,90008,90009,90011,90013,90015,90017,90020,90023,90025],{"class":42,"line":19926},[40,90010,55442],{"class":50},[40,90012,57185],{"class":46},[40,90014,18281],{"class":596},[40,90016,1284],{"class":50},[40,90018,90019],{"class":94},"\"delete\"",[40,90021,90022],{"class":50},">删除\u003C\u002F",[40,90024,57185],{"class":46},[40,90026,54606],{"class":50},[40,90028,90029,90031,90033,90035,90037,90040,90043,90045],{"class":42,"line":19932},[40,90030,55442],{"class":50},[40,90032,57185],{"class":46},[40,90034,18281],{"class":596},[40,90036,1284],{"class":50},[40,90038,90039],{"class":94},"\"login\"",[40,90041,90042],{"class":50},">登录\u003C\u002F",[40,90044,57185],{"class":46},[40,90046,54606],{"class":50},[40,90048,90049,90051,90053],{"class":42,"line":19955},[40,90050,55442],{"class":50},[40,90052,55111],{"class":46},[40,90054,54606],{"class":50},[40,90056,90057],{"class":42,"line":19961},[40,90058,90059],{"class":997},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[40,90061,90062,90064,90067,90069,90071,90073,90075,90077,90080,90082,90084],{"class":42,"line":19984},[40,90063,73381],{"class":1283},[40,90065,90066],{"class":596}," Modal",[40,90068,3488],{"class":50},[40,90070,54706],{"class":8539},[40,90072,16886],{"class":1283},[40,90074,73227],{"class":94},[40,90076,15757],{"class":50},[40,90078,90079],{"class":8539},"message",[40,90081,16886],{"class":1283},[40,90083,73227],{"class":94},[40,90085,15764],{"class":50},[40,90087,90088],{"class":42,"line":19998},[40,90089,90090],{"class":997},"      \u002F\u002F 创建Model 模态框盒子\n",[40,90092,90093],{"class":42,"line":20018},[40,90094,90095],{"class":997},"      \u002F\u002F 1.1 创建div标签\n",[40,90097,90098,90100,90103,90105,90107,90109,90111,90113],{"class":42,"line":20024},[40,90099,73348],{"class":63},[40,90101,90102],{"class":50},".modalBox ",[40,90104,1284],{"class":1283},[40,90106,57694],{"class":50},[40,90108,73448],{"class":596},[40,90110,3488],{"class":50},[40,90112,85226],{"class":94},[40,90114,1811],{"class":50},[40,90116,90117],{"class":42,"line":20035},[40,90118,90119],{"class":997},"      \u002F\u002F 1.2 给div 添加类名为model\n",[40,90121,90122,90124,90127,90129],{"class":42,"line":20058},[40,90123,73348],{"class":63},[40,90125,90126],{"class":50},".modalBox.className ",[40,90128,1284],{"class":1283},[40,90130,90131],{"class":94}," 'modal'\n",[40,90133,90134],{"class":42,"line":20080},[40,90135,90136],{"class":997},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[40,90138,90139,90141,90144,90146],{"class":42,"line":20085},[40,90140,73348],{"class":63},[40,90142,90143],{"class":50},".modalBox.innerHTML ",[40,90145,1284],{"class":1283},[40,90147,73465],{"class":94},[40,90149,90150,90153,90155],{"class":42,"line":20091},[40,90151,90152],{"class":94},"        \u003Cdiv class=\"header\">${",[40,90154,54706],{"class":50},[40,90156,90157],{"class":94},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[40,90159,90160,90163,90165],{"class":42,"line":20105},[40,90161,90162],{"class":94},"        \u003Cdiv class=\"body\">${",[40,90164,90079],{"class":50},[40,90166,90167],{"class":94},"}\u003C\u002Fdiv>\n",[40,90169,90170],{"class":42,"line":20118},[40,90171,90172],{"class":94},"      `\n",[40,90174,90175],{"class":42,"line":20123},[40,90176,90177],{"class":997},"      \u002F\u002F console.log(this.modalBox)\n",[40,90179,90180],{"class":42,"line":20137},[40,90181,5513],{"class":50},[40,90183,90184],{"class":42,"line":20142},[40,90185,90186],{"class":997},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[40,90188,90189],{"class":42,"line":20148},[40,90190,90191],{"class":997},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[40,90193,90194],{"class":42,"line":20153},[40,90195,90196],{"class":997},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[40,90198,90199,90202,90204,90206,90208,90211,90213,90215],{"class":42,"line":20167},[40,90200,90201],{"class":63},"    Modal",[40,90203,4037],{"class":50},[40,90205,88874],{"class":63},[40,90207,4037],{"class":50},[40,90209,90210],{"class":596},"open",[40,90212,16886],{"class":1283},[40,90214,62216],{"class":1283},[40,90216,57750],{"class":50},[40,90218,90219],{"class":42,"line":20172},[40,90220,90221],{"class":997},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[40,90223,90224,90226,90229,90231,90233,90235,90237,90240],{"class":42,"line":20177},[40,90225,61526],{"class":1283},[40,90227,90228],{"class":63}," box",[40,90230,16886],{"class":1283},[40,90232,57694],{"class":50},[40,90234,57697],{"class":596},[40,90236,3488],{"class":50},[40,90238,90239],{"class":94},"'.modal'",[40,90241,1811],{"class":50},[40,90243,90244],{"class":42,"line":20191},[40,90245,90246],{"class":997},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[40,90248,90249,90252,90254,90257,90259],{"class":42,"line":20203},[40,90250,90251],{"class":50},"      box ",[40,90253,5046],{"class":1283},[40,90255,90256],{"class":50}," box.",[40,90258,60304],{"class":596},[40,90260,5302],{"class":50},[40,90262,90263],{"class":42,"line":20208},[40,90264,90265],{"class":997},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[40,90267,90268],{"class":42,"line":20221},[40,90269,90270],{"class":997},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[40,90272,90273],{"class":42,"line":20226},[40,90274,90275],{"class":997},"      \u002F\u002F append可以增加对象\n",[40,90277,90278,90281,90284,90286,90289],{"class":42,"line":20231},[40,90279,90280],{"class":50},"      document.body.",[40,90282,90283],{"class":596},"append",[40,90285,3488],{"class":50},[40,90287,90288],{"class":63},"this",[40,90290,90291],{"class":50},".modalBox)\n",[40,90293,90294],{"class":42,"line":20236},[40,90295,1413],{"emptyLinePlaceholder":1412},[40,90297,90298],{"class":42,"line":20249},[40,90299,90300],{"class":997},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[40,90302,90303,90305,90308,90310,90312,90315,90317,90319,90321,90323,90326,90328],{"class":42,"line":20254},[40,90304,73348],{"class":63},[40,90306,90307],{"class":50},".modalBox.",[40,90309,57697],{"class":596},[40,90311,3488],{"class":50},[40,90313,90314],{"class":94},"'i'",[40,90316,34126],{"class":50},[40,90318,61111],{"class":596},[40,90320,3488],{"class":50},[40,90322,61116],{"class":94},[40,90324,90325],{"class":50},", () ",[40,90327,88017],{"class":1283},[40,90329,18894],{"class":50},[40,90331,90332],{"class":42,"line":35933},[40,90333,90334],{"class":997},"        \u002F\u002F 这个地方需要用到箭头函数\n",[40,90336,90337],{"class":42,"line":35939},[40,90338,90339],{"class":997},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[40,90341,90342],{"class":42,"line":35945},[40,90343,90344],{"class":997},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[40,90346,90347,90349,90351,90354],{"class":42,"line":35951},[40,90348,68024],{"class":63},[40,90350,4037],{"class":50},[40,90352,90353],{"class":596},"close",[40,90355,5302],{"class":50},[40,90357,90358],{"class":42,"line":35957},[40,90359,68113],{"class":50},[40,90361,90362],{"class":42,"line":35968},[40,90363,5513],{"class":50},[40,90365,90366],{"class":42,"line":35974},[40,90367,1413],{"emptyLinePlaceholder":1412},[40,90369,90370],{"class":42,"line":35994},[40,90371,90372],{"class":997},"    \u002F\u002F 测试一下 点击 删除按钮\n",[40,90374,90375,90377,90379,90381,90384,90386,90388,90390,90392,90394,90396],{"class":42,"line":36000},[40,90376,55705],{"class":50},[40,90378,57697],{"class":596},[40,90380,3488],{"class":50},[40,90382,90383],{"class":94},"'#delete'",[40,90385,34126],{"class":50},[40,90387,61111],{"class":596},[40,90389,3488],{"class":50},[40,90391,61116],{"class":94},[40,90393,90325],{"class":50},[40,90395,88017],{"class":1283},[40,90397,18894],{"class":50},[40,90399,90400],{"class":42,"line":36011},[40,90401,90402],{"class":997},"      \u002F\u002F 先调用Model构造函数\n",[40,90404,90405,90407,90410,90412,90414,90416,90418,90421,90423,90426],{"class":42,"line":36017},[40,90406,61526],{"class":1283},[40,90408,90409],{"class":63}," del",[40,90411,16886],{"class":1283},[40,90413,14900],{"class":1283},[40,90415,90066],{"class":596},[40,90417,3488],{"class":50},[40,90419,90420],{"class":94},"'温馨的提示'",[40,90422,15757],{"class":50},[40,90424,90425],{"class":94},"'您没有删除权限操作'",[40,90427,1811],{"class":50},[40,90429,90430],{"class":42,"line":36023},[40,90431,90432],{"class":997},"      \u002F\u002F 实例对象调用open方法\n",[40,90434,90435,90438,90440],{"class":42,"line":36029},[40,90436,90437],{"class":50},"      del.",[40,90439,90210],{"class":596},[40,90441,5302],{"class":50},[40,90443,90444],{"class":42,"line":36035},[40,90445,36761],{"class":50},[40,90447,90448],{"class":42,"line":36041},[40,90449,90450],{"class":997},"    \u002F\u002F 测试一下 点击 登录按钮\n",[40,90452,90453,90455,90457,90459,90462,90464,90466,90468,90470,90472,90474],{"class":42,"line":36047},[40,90454,55705],{"class":50},[40,90456,57697],{"class":596},[40,90458,3488],{"class":50},[40,90460,90461],{"class":94},"'#login'",[40,90463,34126],{"class":50},[40,90465,61111],{"class":596},[40,90467,3488],{"class":50},[40,90469,61116],{"class":94},[40,90471,90325],{"class":50},[40,90473,88017],{"class":1283},[40,90475,18894],{"class":50},[40,90477,90478],{"class":42,"line":36053},[40,90479,90402],{"class":997},[40,90481,90482,90484,90487,90489,90491,90493,90495,90498,90500,90503],{"class":42,"line":36073},[40,90483,61526],{"class":1283},[40,90485,90486],{"class":63}," log",[40,90488,16886],{"class":1283},[40,90490,14900],{"class":1283},[40,90492,90066],{"class":596},[40,90494,3488],{"class":50},[40,90496,90497],{"class":94},"'友情提示'",[40,90499,15757],{"class":50},[40,90501,90502],{"class":94},"'您还没有登录呢'",[40,90504,1811],{"class":50},[40,90506,90507],{"class":42,"line":36079},[40,90508,90432],{"class":997},[40,90510,90511,90514,90516],{"class":42,"line":36095},[40,90512,90513],{"class":50},"      log.",[40,90515,90210],{"class":596},[40,90517,5302],{"class":50},[40,90519,90520],{"class":42,"line":36101},[40,90521,36761],{"class":50},[40,90523,90524],{"class":42,"line":36115},[40,90525,90526],{"class":997},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[40,90528,90529,90531,90533,90535,90537,90539,90541,90543],{"class":42,"line":36121},[40,90530,90201],{"class":63},[40,90532,4037],{"class":50},[40,90534,88874],{"class":63},[40,90536,4037],{"class":50},[40,90538,90353],{"class":596},[40,90540,16886],{"class":1283},[40,90542,62216],{"class":1283},[40,90544,57750],{"class":50},[40,90546,90547,90549,90551,90553],{"class":42,"line":36136},[40,90548,73348],{"class":63},[40,90550,90307],{"class":50},[40,90552,60304],{"class":596},[40,90554,5302],{"class":50},[40,90556,90557],{"class":42,"line":36142},[40,90558,5513],{"class":50},[40,90560,90561,90563,90565],{"class":42,"line":36151},[40,90562,55715],{"class":50},[40,90564,55111],{"class":46},[40,90566,54606],{"class":50},[40,90568,90569,90571,90573],{"class":42,"line":36157},[40,90570,55083],{"class":50},[40,90572,55098],{"class":46},[40,90574,54606],{"class":50},[40,90576,90577],{"class":42,"line":36166},[40,90578,1413],{"emptyLinePlaceholder":1412},[40,90580,90581,90583,90585],{"class":42,"line":36172},[40,90582,55083],{"class":50},[40,90584,53935],{"class":46},[40,90586,54606],{"class":50},[19,90588,90589],{},[438,90590],{"alt":36,"src":90591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,90593,90595],{"id":90594},"_414-深浅拷贝","4.14 深浅拷贝",[402,90597,90599],{"id":90598},"_4141-浅拷贝","4.14.1 浅拷贝",[19,90601,90602],{},[438,90603],{"alt":36,"src":90604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,90606,90607],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,90609,90610],{},[438,90611],{"alt":36,"src":90612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,90614,90615],{},[438,90616],{"alt":36,"src":90617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,90619,90620],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,90622,90623],{},[438,90624],{"alt":36,"src":90625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,90627,14654],{},[19,90629,90630],{},[438,90631],{"alt":36,"src":90632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[402,90634,90636],{"id":90635},"_4142-深拷贝","4.14.2 深拷贝",[19,90638,90639],{},"深拷贝：拷贝的是对象，不是地址",[19,90641,90642],{},"常用的三种方法：",[492,90644,90645,90648,90651],{},[495,90646,90647],{},"通过递归实现深拷贝",[495,90649,90650],{},"lodash\u002FcloneDeep",[495,90652,90653],{},"通过JSON.stringify()实现",[2423,90655,90657],{"id":90656},"_41421-递归函数","4.14.2.1 递归函数",[19,90659,90660],{},[438,90661],{"alt":36,"src":90662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[492,90664,90665],{},[495,90666,90667],{},"死递归占溢出：",[31,90669,90671],{"className":56365,"code":90670,"language":56367,"meta":36,"style":36},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[26,90672,90673,90681,90689,90693,90698,90702,90707,90715],{"__ignoreMap":36},[40,90674,90675,90677,90679],{"class":42,"line":43},[40,90676,4387],{"class":50},[40,90678,55098],{"class":46},[40,90680,54606],{"class":50},[40,90682,90683,90685,90687],{"class":42,"line":54},[40,90684,55442],{"class":50},[40,90686,55111],{"class":46},[40,90688,54606],{"class":50},[40,90690,90691],{"class":42,"line":70},[40,90692,80438],{"class":50},[40,90694,90695],{"class":42,"line":78},[40,90696,90697],{"class":50},"      fn()\n",[40,90699,90700],{"class":42,"line":86},[40,90701,5513],{"class":50},[40,90703,90704],{"class":42,"line":100},[40,90705,90706],{"class":50},"    fn()\n",[40,90708,90709,90711,90713],{"class":42,"line":108},[40,90710,55715],{"class":50},[40,90712,55111],{"class":46},[40,90714,54606],{"class":50},[40,90716,90717,90719,90721],{"class":42,"line":121},[40,90718,55083],{"class":50},[40,90720,55098],{"class":46},[40,90722,54606],{"class":50},[492,90724,90725],{"start":54},[495,90726,90727],{},"递归函数要加判断条件：",[19,90729,90730],{},[438,90731],{"alt":36,"src":90732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[492,90734,90735],{"start":70},[495,90736,90737],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[31,90739,90741],{"className":53933,"code":90740,"language":53935,"meta":36,"style":36},"\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",[26,90742,90743,90753,90767,90771,90779,90793,90813,90825,90833,90837,90845,90857,90865,90873,90898,90910,90914,90921,90929,90937,90941],{"__ignoreMap":36},[40,90744,90745,90747,90749,90751],{"class":42,"line":43},[40,90746,54597],{"class":50},[40,90748,54600],{"class":46},[40,90750,54603],{"class":596},[40,90752,54606],{"class":50},[40,90754,90755,90757,90759,90761,90763,90765],{"class":42,"line":54},[40,90756,4387],{"class":50},[40,90758,53935],{"class":46},[40,90760,54615],{"class":596},[40,90762,1284],{"class":50},[40,90764,54620],{"class":94},[40,90766,54606],{"class":50},[40,90768,90769],{"class":42,"line":70},[40,90770,1413],{"emptyLinePlaceholder":1412},[40,90772,90773,90775,90777],{"class":42,"line":78},[40,90774,4387],{"class":50},[40,90776,54633],{"class":46},[40,90778,54606],{"class":50},[40,90780,90781,90783,90785,90787,90789,90791],{"class":42,"line":86},[40,90782,55442],{"class":50},[40,90784,54643],{"class":46},[40,90786,54646],{"class":596},[40,90788,1284],{"class":50},[40,90790,54651],{"class":94},[40,90792,54606],{"class":50},[40,90794,90795,90797,90799,90801,90803,90805,90807,90809,90811],{"class":42,"line":100},[40,90796,55442],{"class":50},[40,90798,54643],{"class":46},[40,90800,18242],{"class":596},[40,90802,1284],{"class":50},[40,90804,54690],{"class":94},[40,90806,54670],{"class":596},[40,90808,1284],{"class":50},[40,90810,54697],{"class":94},[40,90812,54606],{"class":50},[40,90814,90815,90817,90819,90821,90823],{"class":42,"line":108},[40,90816,55442],{"class":50},[40,90818,54706],{"class":46},[40,90820,54709],{"class":50},[40,90822,54706],{"class":46},[40,90824,54606],{"class":50},[40,90826,90827,90829,90831],{"class":42,"line":121},[40,90828,55083],{"class":50},[40,90830,54633],{"class":46},[40,90832,54606],{"class":50},[40,90834,90835],{"class":42,"line":134},[40,90836,1413],{"emptyLinePlaceholder":1412},[40,90838,90839,90841,90843],{"class":42,"line":146},[40,90840,4387],{"class":50},[40,90842,55098],{"class":46},[40,90844,54606],{"class":50},[40,90846,90847,90849,90851,90853,90855],{"class":42,"line":154},[40,90848,55442],{"class":50},[40,90850,54909],{"class":46},[40,90852,58612],{"class":50},[40,90854,54909],{"class":46},[40,90856,54606],{"class":50},[40,90858,90859,90861,90863],{"class":42,"line":162},[40,90860,55442],{"class":50},[40,90862,55111],{"class":46},[40,90864,54606],{"class":50},[40,90866,90867,90869,90871],{"class":42,"line":170},[40,90868,73381],{"class":1283},[40,90870,77068],{"class":596},[40,90872,14175],{"class":50},[40,90874,90875,90877,90879,90881,90883,90885,90887,90889,90891,90893,90896],{"class":42,"line":183},[40,90876,59069],{"class":50},[40,90878,57697],{"class":596},[40,90880,3488],{"class":50},[40,90882,85226],{"class":94},[40,90884,77544],{"class":50},[40,90886,1284],{"class":1283},[40,90888,14900],{"class":1283},[40,90890,77084],{"class":596},[40,90892,20583],{"class":50},[40,90894,90895],{"class":596},"toLocaleString",[40,90897,5302],{"class":50},[40,90899,90900,90903,90906,90908],{"class":42,"line":196},[40,90901,90902],{"class":596},"      setTimeout",[40,90904,90905],{"class":50},"(getTime, ",[40,90907,9733],{"class":63},[40,90909,1811],{"class":50},[40,90911,90912],{"class":42,"line":204},[40,90913,5513],{"class":50},[40,90915,90916,90919],{"class":42,"line":217},[40,90917,90918],{"class":596},"    getTime",[40,90920,5302],{"class":50},[40,90922,90923,90925,90927],{"class":42,"line":230},[40,90924,55715],{"class":50},[40,90926,55111],{"class":46},[40,90928,54606],{"class":50},[40,90930,90931,90933,90935],{"class":42,"line":238},[40,90932,55083],{"class":50},[40,90934,55098],{"class":46},[40,90936,54606],{"class":50},[40,90938,90939],{"class":42,"line":251},[40,90940,1413],{"emptyLinePlaceholder":1412},[40,90942,90943,90945,90947],{"class":42,"line":264},[40,90944,55083],{"class":50},[40,90946,53935],{"class":46},[40,90948,54606],{"class":50},[19,90950,90951],{},[438,90952],{"alt":36,"src":90953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[492,90955,90956],{"start":78},[495,90957,90647],{},[19,90959,90960],{},[438,90961],{"alt":36,"src":90962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,90964,90965],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,90967,42489],{},[19,90969,90970],{},"这个是简易版的递归函数深拷贝",[19,90972,90973],{},"一定要注意先数组再对象，因为万物皆可对象",[31,90975,90977],{"className":53933,"code":90976,"language":53935,"meta":36,"style":36},"\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",[26,90978,90979,90989,91003,91007,91015,91029,91049,91061,91069,91073,91081,91089,91099,91108,91116,91132,91136,91144,91148,91152,91164,91169,91188,91204,91209,91214,91219,91234,91239,91244,91253,91261,91278,91286,91292,91300,91305,91310,91319,91323,91327,91331,91342,91351,91361,91375,91385,91393,91401,91409,91413],{"__ignoreMap":36},[40,90980,90981,90983,90985,90987],{"class":42,"line":43},[40,90982,54597],{"class":50},[40,90984,54600],{"class":46},[40,90986,54603],{"class":596},[40,90988,54606],{"class":50},[40,90990,90991,90993,90995,90997,90999,91001],{"class":42,"line":54},[40,90992,4387],{"class":50},[40,90994,53935],{"class":46},[40,90996,54615],{"class":596},[40,90998,1284],{"class":50},[40,91000,54620],{"class":94},[40,91002,54606],{"class":50},[40,91004,91005],{"class":42,"line":70},[40,91006,1413],{"emptyLinePlaceholder":1412},[40,91008,91009,91011,91013],{"class":42,"line":78},[40,91010,4387],{"class":50},[40,91012,54633],{"class":46},[40,91014,54606],{"class":50},[40,91016,91017,91019,91021,91023,91025,91027],{"class":42,"line":86},[40,91018,55442],{"class":50},[40,91020,54643],{"class":46},[40,91022,54646],{"class":596},[40,91024,1284],{"class":50},[40,91026,54651],{"class":94},[40,91028,54606],{"class":50},[40,91030,91031,91033,91035,91037,91039,91041,91043,91045,91047],{"class":42,"line":100},[40,91032,55442],{"class":50},[40,91034,54643],{"class":46},[40,91036,18242],{"class":596},[40,91038,1284],{"class":50},[40,91040,54690],{"class":94},[40,91042,54670],{"class":596},[40,91044,1284],{"class":50},[40,91046,54697],{"class":94},[40,91048,54606],{"class":50},[40,91050,91051,91053,91055,91057,91059],{"class":42,"line":108},[40,91052,55442],{"class":50},[40,91054,54706],{"class":46},[40,91056,54709],{"class":50},[40,91058,54706],{"class":46},[40,91060,54606],{"class":50},[40,91062,91063,91065,91067],{"class":42,"line":121},[40,91064,55083],{"class":50},[40,91066,54633],{"class":46},[40,91068,54606],{"class":50},[40,91070,91071],{"class":42,"line":134},[40,91072,1413],{"emptyLinePlaceholder":1412},[40,91074,91075,91077,91079],{"class":42,"line":146},[40,91076,4387],{"class":50},[40,91078,55098],{"class":46},[40,91080,54606],{"class":50},[40,91082,91083,91085,91087],{"class":42,"line":154},[40,91084,55442],{"class":50},[40,91086,55111],{"class":46},[40,91088,54606],{"class":50},[40,91090,91091,91093,91095,91097],{"class":42,"line":162},[40,91092,14543],{"class":1283},[40,91094,73268],{"class":63},[40,91096,16886],{"class":1283},[40,91098,18894],{"class":50},[40,91100,91101,91103,91106],{"class":42,"line":170},[40,91102,74912],{"class":50},[40,91104,91105],{"class":94},"'pink'",[40,91107,34766],{"class":50},[40,91109,91110,91112,91114],{"class":42,"line":183},[40,91111,74922],{"class":50},[40,91113,4128],{"class":63},[40,91115,34766],{"class":50},[40,91117,91118,91121,91124,91126,91129],{"class":42,"line":196},[40,91119,91120],{"class":50},"      hobby: [",[40,91122,91123],{"class":94},"'乒乓球'",[40,91125,15757],{"class":50},[40,91127,91128],{"class":94},"'足球'",[40,91130,91131],{"class":50},"],\n",[40,91133,91134],{"class":42,"line":204},[40,91135,81167],{"class":50},[40,91137,91138,91141],{"class":42,"line":217},[40,91139,91140],{"class":50},"        baby: ",[40,91142,91143],{"class":94},"'小pink'\n",[40,91145,91146],{"class":42,"line":230},[40,91147,55696],{"class":50},[40,91149,91150],{"class":42,"line":238},[40,91151,5513],{"class":50},[40,91153,91154,91156,91159,91161],{"class":42,"line":251},[40,91155,14543],{"class":1283},[40,91157,91158],{"class":63}," o",[40,91160,16886],{"class":1283},[40,91162,91163],{"class":50}," {}\n",[40,91165,91166],{"class":42,"line":264},[40,91167,91168],{"class":997},"    \u002F\u002F 拷贝函数\n",[40,91170,91171,91173,91176,91178,91181,91183,91186],{"class":42,"line":277},[40,91172,73381],{"class":1283},[40,91174,91175],{"class":596}," deepCopy",[40,91177,3488],{"class":50},[40,91179,91180],{"class":8539},"newObj",[40,91182,15757],{"class":50},[40,91184,91185],{"class":8539},"oldObj",[40,91187,15764],{"class":50},[40,91189,91190,91192,91194,91196,91199,91201],{"class":42,"line":290},[40,91191,55582],{"class":1283},[40,91193,4993],{"class":50},[40,91195,55145],{"class":1283},[40,91197,91198],{"class":50}," k ",[40,91200,29355],{"class":1283},[40,91202,91203],{"class":50}," oldObj) {\n",[40,91205,91206],{"class":42,"line":298},[40,91207,91208],{"class":997},"        \u002F\u002F 处理数组的问题\n",[40,91210,91211],{"class":42,"line":310},[40,91212,91213],{"class":997},"        \u002F\u002F 判断是否属于数组\n",[40,91215,91216],{"class":42,"line":5086},[40,91217,91218],{"class":997},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[40,91220,91221,91223,91226,91229,91232],{"class":42,"line":5091},[40,91222,5822],{"class":1283},[40,91224,91225],{"class":50}," (oldObj[k] ",[40,91227,91228],{"class":1283},"instanceof",[40,91230,91231],{"class":596}," Array",[40,91233,15764],{"class":50},[40,91235,91236],{"class":42,"line":5105},[40,91237,91238],{"class":997},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[40,91240,91241],{"class":42,"line":5110},[40,91242,91243],{"class":997},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[40,91245,91246,91249,91251],{"class":42,"line":5902},[40,91247,91248],{"class":50},"          newObj[k] ",[40,91250,1284],{"class":1283},[40,91252,55136],{"class":50},[40,91254,91255,91258],{"class":42,"line":5916},[40,91256,91257],{"class":596},"          deepCopy",[40,91259,91260],{"class":50},"(newObj[k], oldObj[k])\n",[40,91262,91263,91265,91267,91269,91271,91273,91276],{"class":42,"line":5924},[40,91264,83375],{"class":50},[40,91266,5032],{"class":1283},[40,91268,5035],{"class":1283},[40,91270,91225],{"class":50},[40,91272,91228],{"class":1283},[40,91274,91275],{"class":596}," Object",[40,91277,15764],{"class":50},[40,91279,91280,91282,91284],{"class":42,"line":5929},[40,91281,91248],{"class":50},[40,91283,1284],{"class":1283},[40,91285,91163],{"class":50},[40,91287,91288,91290],{"class":42,"line":5935},[40,91289,91257],{"class":596},[40,91291,91260],{"class":50},[40,91293,91294,91296,91298],{"class":42,"line":5941},[40,91295,83375],{"class":50},[40,91297,5032],{"class":1283},[40,91299,18894],{"class":50},[40,91301,91302],{"class":42,"line":5946},[40,91303,91304],{"class":997},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[40,91306,91307],{"class":42,"line":11270},[40,91308,91309],{"class":997},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[40,91311,91312,91314,91316],{"class":42,"line":11294},[40,91313,91248],{"class":50},[40,91315,1284],{"class":1283},[40,91317,91318],{"class":50}," oldObj[k]\n",[40,91320,91321],{"class":42,"line":11299},[40,91322,5854],{"class":50},[40,91324,91325],{"class":42,"line":11305},[40,91326,55696],{"class":50},[40,91328,91329],{"class":42,"line":11332},[40,91330,5513],{"class":50},[40,91332,91333,91336,91339],{"class":42,"line":11337},[40,91334,91335],{"class":596},"    deepCopy",[40,91337,91338],{"class":50},"(o, obj) ",[40,91340,91341],{"class":997},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[40,91343,91344,91346,91348],{"class":42,"line":11343},[40,91345,77048],{"class":50},[40,91347,61545],{"class":596},[40,91349,91350],{"class":50},"(o)\n",[40,91352,91353,91356,91358],{"class":42,"line":11355},[40,91354,91355],{"class":50},"    o.age ",[40,91357,1284],{"class":1283},[40,91359,91360],{"class":63}," 20\n",[40,91362,91363,91366,91368,91370,91372],{"class":42,"line":11367},[40,91364,91365],{"class":50},"    o.hobby[",[40,91367,3672],{"class":63},[40,91369,7766],{"class":50},[40,91371,1284],{"class":1283},[40,91373,91374],{"class":94}," '篮球'\n",[40,91376,91377,91380,91382],{"class":42,"line":11379},[40,91378,91379],{"class":50},"    o.family ",[40,91381,1284],{"class":1283},[40,91383,91384],{"class":94}," '老pink'\n",[40,91386,91387,91389,91391],{"class":42,"line":13038},[40,91388,77048],{"class":50},[40,91390,61545],{"class":596},[40,91392,73333],{"class":50},[40,91394,91395,91397,91399],{"class":42,"line":13063},[40,91396,55715],{"class":50},[40,91398,55111],{"class":46},[40,91400,54606],{"class":50},[40,91402,91403,91405,91407],{"class":42,"line":13086},[40,91404,55083],{"class":50},[40,91406,55098],{"class":46},[40,91408,54606],{"class":50},[40,91410,91411],{"class":42,"line":13110},[40,91412,1413],{"emptyLinePlaceholder":1412},[40,91414,91415,91417,91419],{"class":42,"line":13115},[40,91416,55083],{"class":50},[40,91418,53935],{"class":46},[40,91420,54606],{"class":50},[19,91422,91423],{},[438,91424],{"alt":36,"src":91425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[2423,91427,91429,91430],{"id":91428},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[409,91431,91432],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,91434,91435],{},[2106,91436,91437],{"href":91437,"rel":91438},"https:\u002F\u002Fwww.lodashjs.com\u002F",[2110],[19,91440,91441],{},"lodash里边的方法都要加上一个下划线_",[19,91443,91444],{},"_.cloneDeep()",[31,91446,91448],{"className":53933,"code":91447,"language":53935,"meta":36,"style":36},"\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",[26,91449,91450,91460,91474,91478,91486,91500,91520,91532,91540,91544,91552,91557,91576,91584,91594,91602,91610,91622,91626,91632,91636,91640,91656,91664,91673,91681,91689,91697,91701],{"__ignoreMap":36},[40,91451,91452,91454,91456,91458],{"class":42,"line":43},[40,91453,54597],{"class":50},[40,91455,54600],{"class":46},[40,91457,54603],{"class":596},[40,91459,54606],{"class":50},[40,91461,91462,91464,91466,91468,91470,91472],{"class":42,"line":54},[40,91463,4387],{"class":50},[40,91465,53935],{"class":46},[40,91467,54615],{"class":596},[40,91469,1284],{"class":50},[40,91471,54620],{"class":94},[40,91473,54606],{"class":50},[40,91475,91476],{"class":42,"line":70},[40,91477,1413],{"emptyLinePlaceholder":1412},[40,91479,91480,91482,91484],{"class":42,"line":78},[40,91481,4387],{"class":50},[40,91483,54633],{"class":46},[40,91485,54606],{"class":50},[40,91487,91488,91490,91492,91494,91496,91498],{"class":42,"line":86},[40,91489,55442],{"class":50},[40,91491,54643],{"class":46},[40,91493,54646],{"class":596},[40,91495,1284],{"class":50},[40,91497,54651],{"class":94},[40,91499,54606],{"class":50},[40,91501,91502,91504,91506,91508,91510,91512,91514,91516,91518],{"class":42,"line":100},[40,91503,55442],{"class":50},[40,91505,54643],{"class":46},[40,91507,18242],{"class":596},[40,91509,1284],{"class":50},[40,91511,54690],{"class":94},[40,91513,54670],{"class":596},[40,91515,1284],{"class":50},[40,91517,54697],{"class":94},[40,91519,54606],{"class":50},[40,91521,91522,91524,91526,91528,91530],{"class":42,"line":108},[40,91523,55442],{"class":50},[40,91525,54706],{"class":46},[40,91527,54709],{"class":50},[40,91529,54706],{"class":46},[40,91531,54606],{"class":50},[40,91533,91534,91536,91538],{"class":42,"line":121},[40,91535,55083],{"class":50},[40,91537,54633],{"class":46},[40,91539,54606],{"class":50},[40,91541,91542],{"class":42,"line":134},[40,91543,1413],{"emptyLinePlaceholder":1412},[40,91545,91546,91548,91550],{"class":42,"line":146},[40,91547,4387],{"class":50},[40,91549,55098],{"class":46},[40,91551,54606],{"class":50},[40,91553,91554],{"class":42,"line":154},[40,91555,91556],{"class":997},"  \u003C!-- 先引用这个库 -->\n",[40,91558,91559,91561,91563,91565,91567,91570,91572,91574],{"class":42,"line":162},[40,91560,55442],{"class":50},[40,91562,55111],{"class":46},[40,91564,58537],{"class":596},[40,91566,1284],{"class":50},[40,91568,91569],{"class":94},"\"lodash.min.js\"",[40,91571,58612],{"class":50},[40,91573,55111],{"class":46},[40,91575,54606],{"class":50},[40,91577,91578,91580,91582],{"class":42,"line":170},[40,91579,55442],{"class":50},[40,91581,55111],{"class":46},[40,91583,54606],{"class":50},[40,91585,91586,91588,91590,91592],{"class":42,"line":183},[40,91587,14543],{"class":1283},[40,91589,73268],{"class":63},[40,91591,16886],{"class":1283},[40,91593,18894],{"class":50},[40,91595,91596,91598,91600],{"class":42,"line":196},[40,91597,74912],{"class":50},[40,91599,91105],{"class":94},[40,91601,34766],{"class":50},[40,91603,91604,91606,91608],{"class":42,"line":204},[40,91605,74922],{"class":50},[40,91607,4128],{"class":63},[40,91609,34766],{"class":50},[40,91611,91612,91614,91616,91618,91620],{"class":42,"line":217},[40,91613,91120],{"class":50},[40,91615,91123],{"class":94},[40,91617,15757],{"class":50},[40,91619,91128],{"class":94},[40,91621,91131],{"class":50},[40,91623,91624],{"class":42,"line":230},[40,91625,81167],{"class":50},[40,91627,91628,91630],{"class":42,"line":238},[40,91629,91140],{"class":50},[40,91631,91143],{"class":94},[40,91633,91634],{"class":42,"line":251},[40,91635,55696],{"class":50},[40,91637,91638],{"class":42,"line":264},[40,91639,5513],{"class":50},[40,91641,91642,91644,91646,91648,91651,91654],{"class":42,"line":277},[40,91643,14543],{"class":1283},[40,91645,91158],{"class":63},[40,91647,16886],{"class":1283},[40,91649,91650],{"class":50}," _.",[40,91652,91653],{"class":596},"cloneDeep",[40,91655,73333],{"class":50},[40,91657,91658,91660,91662],{"class":42,"line":290},[40,91659,77048],{"class":50},[40,91661,61545],{"class":596},[40,91663,91350],{"class":50},[40,91665,91666,91669,91671],{"class":42,"line":298},[40,91667,91668],{"class":50},"    o.family.baby ",[40,91670,1284],{"class":1283},[40,91672,91384],{"class":94},[40,91674,91675,91677,91679],{"class":42,"line":310},[40,91676,77048],{"class":50},[40,91678,61545],{"class":596},[40,91680,73333],{"class":50},[40,91682,91683,91685,91687],{"class":42,"line":5086},[40,91684,55715],{"class":50},[40,91686,55111],{"class":46},[40,91688,54606],{"class":50},[40,91690,91691,91693,91695],{"class":42,"line":5091},[40,91692,55083],{"class":50},[40,91694,55098],{"class":46},[40,91696,54606],{"class":50},[40,91698,91699],{"class":42,"line":5105},[40,91700,1413],{"emptyLinePlaceholder":1412},[40,91702,91703,91705,91707],{"class":42,"line":5110},[40,91704,55083],{"class":50},[40,91706,53935],{"class":46},[40,91708,54606],{"class":50},[19,91710,91711],{},[438,91712],{"alt":36,"src":91713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[2423,91715,91717],{"id":91716},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[31,91719,91721],{"className":53933,"code":91720,"language":53935,"meta":36,"style":36},"\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",[26,91722,91723,91733,91747,91751,91759,91773,91793,91805,91813,91817,91825,91833,91843,91851,91859,91871,91875,91881,91885,91889,91894,91899,91904,91930,91938,91947,91955,91963,91971,91975],{"__ignoreMap":36},[40,91724,91725,91727,91729,91731],{"class":42,"line":43},[40,91726,54597],{"class":50},[40,91728,54600],{"class":46},[40,91730,54603],{"class":596},[40,91732,54606],{"class":50},[40,91734,91735,91737,91739,91741,91743,91745],{"class":42,"line":54},[40,91736,4387],{"class":50},[40,91738,53935],{"class":46},[40,91740,54615],{"class":596},[40,91742,1284],{"class":50},[40,91744,54620],{"class":94},[40,91746,54606],{"class":50},[40,91748,91749],{"class":42,"line":70},[40,91750,1413],{"emptyLinePlaceholder":1412},[40,91752,91753,91755,91757],{"class":42,"line":78},[40,91754,4387],{"class":50},[40,91756,54633],{"class":46},[40,91758,54606],{"class":50},[40,91760,91761,91763,91765,91767,91769,91771],{"class":42,"line":86},[40,91762,55442],{"class":50},[40,91764,54643],{"class":46},[40,91766,54646],{"class":596},[40,91768,1284],{"class":50},[40,91770,54651],{"class":94},[40,91772,54606],{"class":50},[40,91774,91775,91777,91779,91781,91783,91785,91787,91789,91791],{"class":42,"line":100},[40,91776,55442],{"class":50},[40,91778,54643],{"class":46},[40,91780,18242],{"class":596},[40,91782,1284],{"class":50},[40,91784,54690],{"class":94},[40,91786,54670],{"class":596},[40,91788,1284],{"class":50},[40,91790,54697],{"class":94},[40,91792,54606],{"class":50},[40,91794,91795,91797,91799,91801,91803],{"class":42,"line":108},[40,91796,55442],{"class":50},[40,91798,54706],{"class":46},[40,91800,54709],{"class":50},[40,91802,54706],{"class":46},[40,91804,54606],{"class":50},[40,91806,91807,91809,91811],{"class":42,"line":121},[40,91808,55083],{"class":50},[40,91810,54633],{"class":46},[40,91812,54606],{"class":50},[40,91814,91815],{"class":42,"line":134},[40,91816,1413],{"emptyLinePlaceholder":1412},[40,91818,91819,91821,91823],{"class":42,"line":146},[40,91820,4387],{"class":50},[40,91822,55098],{"class":46},[40,91824,54606],{"class":50},[40,91826,91827,91829,91831],{"class":42,"line":154},[40,91828,55442],{"class":50},[40,91830,55111],{"class":46},[40,91832,54606],{"class":50},[40,91834,91835,91837,91839,91841],{"class":42,"line":162},[40,91836,14543],{"class":1283},[40,91838,73268],{"class":63},[40,91840,16886],{"class":1283},[40,91842,18894],{"class":50},[40,91844,91845,91847,91849],{"class":42,"line":170},[40,91846,74912],{"class":50},[40,91848,91105],{"class":94},[40,91850,34766],{"class":50},[40,91852,91853,91855,91857],{"class":42,"line":183},[40,91854,74922],{"class":50},[40,91856,4128],{"class":63},[40,91858,34766],{"class":50},[40,91860,91861,91863,91865,91867,91869],{"class":42,"line":196},[40,91862,91120],{"class":50},[40,91864,91123],{"class":94},[40,91866,15757],{"class":50},[40,91868,91128],{"class":94},[40,91870,91131],{"class":50},[40,91872,91873],{"class":42,"line":204},[40,91874,81167],{"class":50},[40,91876,91877,91879],{"class":42,"line":217},[40,91878,91140],{"class":50},[40,91880,91143],{"class":94},[40,91882,91883],{"class":42,"line":230},[40,91884,55696],{"class":50},[40,91886,91887],{"class":42,"line":238},[40,91888,5513],{"class":50},[40,91890,91891],{"class":42,"line":251},[40,91892,91893],{"class":997},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[40,91895,91896],{"class":42,"line":264},[40,91897,91898],{"class":997},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[40,91900,91901],{"class":42,"line":277},[40,91902,91903],{"class":997},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[40,91905,91906,91908,91910,91912,91915,91917,91920,91922,91924,91926,91928],{"class":42,"line":290},[40,91907,14543],{"class":1283},[40,91909,91158],{"class":63},[40,91911,16886],{"class":1283},[40,91913,91914],{"class":63}," JSON",[40,91916,4037],{"class":50},[40,91918,91919],{"class":596},"parse",[40,91921,3488],{"class":50},[40,91923,2382],{"class":63},[40,91925,4037],{"class":50},[40,91927,74964],{"class":596},[40,91929,74967],{"class":50},[40,91931,91932,91934,91936],{"class":42,"line":298},[40,91933,77048],{"class":50},[40,91935,61545],{"class":596},[40,91937,91350],{"class":50},[40,91939,91940,91942,91944],{"class":42,"line":310},[40,91941,91668],{"class":50},[40,91943,1284],{"class":1283},[40,91945,91946],{"class":94}," '123'\n",[40,91948,91949,91951,91953],{"class":42,"line":5086},[40,91950,77048],{"class":50},[40,91952,61545],{"class":596},[40,91954,73333],{"class":50},[40,91956,91957,91959,91961],{"class":42,"line":5091},[40,91958,55715],{"class":50},[40,91960,55111],{"class":46},[40,91962,54606],{"class":50},[40,91964,91965,91967,91969],{"class":42,"line":5105},[40,91966,55083],{"class":50},[40,91968,55098],{"class":46},[40,91970,54606],{"class":50},[40,91972,91973],{"class":42,"line":5110},[40,91974,1413],{"emptyLinePlaceholder":1412},[40,91976,91977,91979,91981],{"class":42,"line":5902},[40,91978,55083],{"class":50},[40,91980,53935],{"class":46},[40,91982,54606],{"class":50},[19,91984,91985],{},[438,91986],{"alt":36,"src":91987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,91989,91991],{"id":91990},"_415-异常处理","4.15 异常处理",[492,91993,91994],{},[495,91995,91996],{},"throw抛异常",[19,91998,91999],{},[438,92000],{"alt":36,"src":92001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[492,92003,92004],{"start":54},[495,92005,92006],{},"try\u002Fcatch 捕获错误信息",[19,92008,92009],{},[438,92010],{"alt":36,"src":92011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[31,92013,92015],{"className":53933,"code":92014,"language":53935,"meta":36,"style":36},"\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",[26,92016,92017,92027,92041,92045,92053,92067,92087,92099,92107,92111,92119,92131,92139,92148,92155,92160,92179,92188,92199,92204,92214,92219,92224,92229,92246,92250,92255,92262,92274,92278,92290,92294,92298,92303,92308,92315,92323,92331,92335],{"__ignoreMap":36},[40,92018,92019,92021,92023,92025],{"class":42,"line":43},[40,92020,54597],{"class":50},[40,92022,54600],{"class":46},[40,92024,54603],{"class":596},[40,92026,54606],{"class":50},[40,92028,92029,92031,92033,92035,92037,92039],{"class":42,"line":54},[40,92030,4387],{"class":50},[40,92032,53935],{"class":46},[40,92034,54615],{"class":596},[40,92036,1284],{"class":50},[40,92038,54620],{"class":94},[40,92040,54606],{"class":50},[40,92042,92043],{"class":42,"line":70},[40,92044,1413],{"emptyLinePlaceholder":1412},[40,92046,92047,92049,92051],{"class":42,"line":78},[40,92048,4387],{"class":50},[40,92050,54633],{"class":46},[40,92052,54606],{"class":50},[40,92054,92055,92057,92059,92061,92063,92065],{"class":42,"line":86},[40,92056,55442],{"class":50},[40,92058,54643],{"class":46},[40,92060,54646],{"class":596},[40,92062,1284],{"class":50},[40,92064,54651],{"class":94},[40,92066,54606],{"class":50},[40,92068,92069,92071,92073,92075,92077,92079,92081,92083,92085],{"class":42,"line":100},[40,92070,55442],{"class":50},[40,92072,54643],{"class":46},[40,92074,18242],{"class":596},[40,92076,1284],{"class":50},[40,92078,54690],{"class":94},[40,92080,54670],{"class":596},[40,92082,1284],{"class":50},[40,92084,54697],{"class":94},[40,92086,54606],{"class":50},[40,92088,92089,92091,92093,92095,92097],{"class":42,"line":108},[40,92090,55442],{"class":50},[40,92092,54706],{"class":46},[40,92094,54709],{"class":50},[40,92096,54706],{"class":46},[40,92098,54606],{"class":50},[40,92100,92101,92103,92105],{"class":42,"line":121},[40,92102,55083],{"class":50},[40,92104,54633],{"class":46},[40,92106,54606],{"class":50},[40,92108,92109],{"class":42,"line":134},[40,92110,1413],{"emptyLinePlaceholder":1412},[40,92112,92113,92115,92117],{"class":42,"line":146},[40,92114,4387],{"class":50},[40,92116,55098],{"class":46},[40,92118,54606],{"class":50},[40,92120,92121,92123,92125,92127,92129],{"class":42,"line":154},[40,92122,55442],{"class":50},[40,92124,19],{"class":46},[40,92126,56792],{"class":50},[40,92128,19],{"class":46},[40,92130,54606],{"class":50},[40,92132,92133,92135,92137],{"class":42,"line":162},[40,92134,55442],{"class":50},[40,92136,55111],{"class":46},[40,92138,54606],{"class":50},[40,92140,92141,92143,92146],{"class":42,"line":170},[40,92142,73381],{"class":1283},[40,92144,92145],{"class":596}," fn",[40,92147,14175],{"class":50},[40,92149,92150,92153],{"class":42,"line":183},[40,92151,92152],{"class":1283},"      try",[40,92154,18894],{"class":50},[40,92156,92157],{"class":42,"line":196},[40,92158,92159],{"class":997},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[40,92161,92162,92164,92166,92168,92170,92172,92174,92177],{"class":42,"line":204},[40,92163,64568],{"class":1283},[40,92165,10148],{"class":63},[40,92167,16886],{"class":1283},[40,92169,57694],{"class":50},[40,92171,57697],{"class":596},[40,92173,3488],{"class":50},[40,92175,92176],{"class":94},"'.p'",[40,92178,1811],{"class":50},[40,92180,92181,92184,92186],{"class":42,"line":217},[40,92182,92183],{"class":50},"        p.style.color ",[40,92185,1284],{"class":1283},[40,92187,70349],{"class":94},[40,92189,92190,92193,92196],{"class":42,"line":230},[40,92191,92192],{"class":50},"      } ",[40,92194,92195],{"class":1283},"catch",[40,92197,92198],{"class":50}," (err) {\n",[40,92200,92201],{"class":42,"line":238},[40,92202,92203],{"class":997},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[40,92205,92206,92209,92211],{"class":42,"line":251},[40,92207,92208],{"class":50},"        console.",[40,92210,61545],{"class":596},[40,92212,92213],{"class":50},"(err.message)\n",[40,92215,92216],{"class":42,"line":264},[40,92217,92218],{"class":997},"        \u002F\u002F 想要中断程序，需要加return\n",[40,92220,92221],{"class":42,"line":277},[40,92222,92223],{"class":997},"        \u002F\u002F return\n",[40,92225,92226],{"class":42,"line":290},[40,92227,92228],{"class":997},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[40,92230,92231,92234,92236,92239,92241,92244],{"class":42,"line":298},[40,92232,92233],{"class":1283},"        throw",[40,92235,14900],{"class":1283},[40,92237,92238],{"class":596}," Error",[40,92240,3488],{"class":50},[40,92242,92243],{"class":94},"'你看看，选择器错误了吧'",[40,92245,1811],{"class":50},[40,92247,92248],{"class":42,"line":310},[40,92249,55696],{"class":50},[40,92251,92252],{"class":42,"line":5086},[40,92253,92254],{"class":997},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[40,92256,92257,92260],{"class":42,"line":5091},[40,92258,92259],{"class":1283},"      finally",[40,92261,18894],{"class":50},[40,92263,92264,92267,92269,92272],{"class":42,"line":5105},[40,92265,92266],{"class":596},"        alert",[40,92268,3488],{"class":50},[40,92270,92271],{"class":94},"'弹出对话框'",[40,92273,1811],{"class":50},[40,92275,92276],{"class":42,"line":5110},[40,92277,55696],{"class":50},[40,92279,92280,92282,92284,92286,92288],{"class":42,"line":5902},[40,92281,61542],{"class":50},[40,92283,61545],{"class":596},[40,92285,3488],{"class":50},[40,92287,3951],{"class":63},[40,92289,1811],{"class":50},[40,92291,92292],{"class":42,"line":5916},[40,92293,1413],{"emptyLinePlaceholder":1412},[40,92295,92296],{"class":42,"line":5924},[40,92297,5513],{"class":50},[40,92299,92300],{"class":42,"line":5929},[40,92301,92302],{"class":997},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[40,92304,92305],{"class":42,"line":5935},[40,92306,92307],{"class":997},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[40,92309,92310,92313],{"class":42,"line":5941},[40,92311,92312],{"class":596},"    fn",[40,92314,5302],{"class":50},[40,92316,92317,92319,92321],{"class":42,"line":5946},[40,92318,55715],{"class":50},[40,92320,55111],{"class":46},[40,92322,54606],{"class":50},[40,92324,92325,92327,92329],{"class":42,"line":11270},[40,92326,55083],{"class":50},[40,92328,55098],{"class":46},[40,92330,54606],{"class":50},[40,92332,92333],{"class":42,"line":11294},[40,92334,1413],{"emptyLinePlaceholder":1412},[40,92336,92337,92339,92341],{"class":42,"line":11299},[40,92338,55083],{"class":50},[40,92340,53935],{"class":46},[40,92342,54606],{"class":50},[19,92344,92345],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[492,92347,92348],{"start":70},[495,92349,92350],{},"debugger",[19,92352,92353],{},[438,92354],{"alt":36,"src":92355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,92357,92358],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,92360,92362],{"id":92361},"_416-处理this","4.16 处理this",[402,92364,92366],{"id":92365},"_4161-this的指向","4.16.1 this的指向",[492,92368,92369],{},[495,92370,92371],{},"普通函数的this",[19,92373,92374],{},[438,92375],{"alt":36,"src":92376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[492,92378,92379],{"start":54},[495,92380,92381],{},"箭头函数的this",[19,92383,92384],{},[438,92385],{"alt":36,"src":92386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,92388,92389],{},[438,92390],{"alt":36,"src":92391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,92393,92394],{},[438,92395],{"alt":36,"src":92396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[402,92398,92400],{"id":92399},"_4162-this的改变","4.16.2 this的改变",[19,92402,92403],{},"call() apply() bind()",[492,92405,92406],{},[495,92407,92408],{},"call()",[19,92410,92411],{},[438,92412],{"alt":36,"src":92413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,92415,92416],{},"两个作用：①调用函数；②改变this指向",[31,92418,92420],{"className":56365,"code":92419,"language":56367,"meta":36,"style":36},"\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",[26,92421,92422,92430,92438,92442,92447,92451,92456,92461,92466,92470,92475,92483],{"__ignoreMap":36},[40,92423,92424,92426,92428],{"class":42,"line":43},[40,92425,4387],{"class":50},[40,92427,55098],{"class":46},[40,92429,54606],{"class":50},[40,92431,92432,92434,92436],{"class":42,"line":54},[40,92433,55442],{"class":50},[40,92435,55111],{"class":46},[40,92437,54606],{"class":50},[40,92439,92440],{"class":42,"line":70},[40,92441,74819],{"class":50},[40,92443,92444],{"class":42,"line":78},[40,92445,92446],{"class":50},"      uname: 'pink'\n",[40,92448,92449],{"class":42,"line":86},[40,92450,5513],{"class":50},[40,92452,92453],{"class":42,"line":100},[40,92454,92455],{"class":50},"    function fn(x, y) {\n",[40,92457,92458],{"class":42,"line":108},[40,92459,92460],{"class":50},"      console.log(this)  \u002F\u002Fwindow\n",[40,92462,92463],{"class":42,"line":121},[40,92464,92465],{"class":50},"      console.log(x + y)\n",[40,92467,92468],{"class":42,"line":134},[40,92469,5513],{"class":50},[40,92471,92472],{"class":42,"line":146},[40,92473,92474],{"class":50},"    fn.call(obj, 1, 2)\n",[40,92476,92477,92479,92481],{"class":42,"line":154},[40,92478,55715],{"class":50},[40,92480,55111],{"class":46},[40,92482,54606],{"class":50},[40,92484,92485,92487,92489],{"class":42,"line":162},[40,92486,55083],{"class":50},[40,92488,55098],{"class":46},[40,92490,54606],{"class":50},[19,92492,92493],{},[438,92494],{"alt":36,"src":92495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[492,92497,92498],{"start":54},[495,92499,92500],{},"apply()",[19,92502,92503],{},[438,92504],{"alt":36,"src":92505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,92507,92416],{},[19,92509,92510],{},"call传递的是普通参数，而apply必须传递的是数组",[31,92512,92514],{"className":53933,"code":92513,"language":53935,"meta":36,"style":36},"\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",[26,92515,92516,92526,92540,92544,92552,92566,92586,92598,92606,92610,92618,92626,92636,92643,92647,92652,92668,92680,92694,92698,92703,92722,92727,92731,92736,92741,92749,92754,92776,92781,92797,92813,92825,92829,92834,92853,92861,92869,92873],{"__ignoreMap":36},[40,92517,92518,92520,92522,92524],{"class":42,"line":43},[40,92519,54597],{"class":50},[40,92521,54600],{"class":46},[40,92523,54603],{"class":596},[40,92525,54606],{"class":50},[40,92527,92528,92530,92532,92534,92536,92538],{"class":42,"line":54},[40,92529,4387],{"class":50},[40,92531,53935],{"class":46},[40,92533,54615],{"class":596},[40,92535,1284],{"class":50},[40,92537,54620],{"class":94},[40,92539,54606],{"class":50},[40,92541,92542],{"class":42,"line":70},[40,92543,1413],{"emptyLinePlaceholder":1412},[40,92545,92546,92548,92550],{"class":42,"line":78},[40,92547,4387],{"class":50},[40,92549,54633],{"class":46},[40,92551,54606],{"class":50},[40,92553,92554,92556,92558,92560,92562,92564],{"class":42,"line":86},[40,92555,55442],{"class":50},[40,92557,54643],{"class":46},[40,92559,54646],{"class":596},[40,92561,1284],{"class":50},[40,92563,54651],{"class":94},[40,92565,54606],{"class":50},[40,92567,92568,92570,92572,92574,92576,92578,92580,92582,92584],{"class":42,"line":100},[40,92569,55442],{"class":50},[40,92571,54643],{"class":46},[40,92573,18242],{"class":596},[40,92575,1284],{"class":50},[40,92577,54690],{"class":94},[40,92579,54670],{"class":596},[40,92581,1284],{"class":50},[40,92583,54697],{"class":94},[40,92585,54606],{"class":50},[40,92587,92588,92590,92592,92594,92596],{"class":42,"line":108},[40,92589,55442],{"class":50},[40,92591,54706],{"class":46},[40,92593,54709],{"class":50},[40,92595,54706],{"class":46},[40,92597,54606],{"class":50},[40,92599,92600,92602,92604],{"class":42,"line":121},[40,92601,55083],{"class":50},[40,92603,54633],{"class":46},[40,92605,54606],{"class":50},[40,92607,92608],{"class":42,"line":134},[40,92609,1413],{"emptyLinePlaceholder":1412},[40,92611,92612,92614,92616],{"class":42,"line":146},[40,92613,4387],{"class":50},[40,92615,55098],{"class":46},[40,92617,54606],{"class":50},[40,92619,92620,92622,92624],{"class":42,"line":154},[40,92621,55442],{"class":50},[40,92623,55111],{"class":46},[40,92625,54606],{"class":50},[40,92627,92628,92630,92632,92634],{"class":42,"line":162},[40,92629,14543],{"class":1283},[40,92631,73268],{"class":63},[40,92633,16886],{"class":1283},[40,92635,18894],{"class":50},[40,92637,92638,92640],{"class":42,"line":170},[40,92639,74922],{"class":50},[40,92641,92642],{"class":63},"18\n",[40,92644,92645],{"class":42,"line":183},[40,92646,5513],{"class":50},[40,92648,92649],{"class":42,"line":196},[40,92650,92651],{"class":997},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[40,92653,92654,92656,92658,92660,92662,92664,92666],{"class":42,"line":204},[40,92655,73381],{"class":1283},[40,92657,92145],{"class":596},[40,92659,3488],{"class":50},[40,92661,4297],{"class":8539},[40,92663,15757],{"class":50},[40,92665,4322],{"class":8539},[40,92667,15764],{"class":50},[40,92669,92670,92672,92674,92676,92678],{"class":42,"line":217},[40,92671,61542],{"class":50},[40,92673,61545],{"class":596},[40,92675,3488],{"class":50},[40,92677,90288],{"class":63},[40,92679,1811],{"class":50},[40,92681,92682,92684,92686,92689,92691],{"class":42,"line":230},[40,92683,61542],{"class":50},[40,92685,61545],{"class":596},[40,92687,92688],{"class":50},"(x ",[40,92690,3960],{"class":1283},[40,92692,92693],{"class":50}," y)\n",[40,92695,92696],{"class":42,"line":238},[40,92697,5513],{"class":50},[40,92699,92700],{"class":42,"line":251},[40,92701,92702],{"class":997},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[40,92704,92705,92708,92711,92714,92716,92718,92720],{"class":42,"line":264},[40,92706,92707],{"class":50},"    fn.",[40,92709,92710],{"class":596},"apply",[40,92712,92713],{"class":50},"(obj, [",[40,92715,3698],{"class":63},[40,92717,15757],{"class":50},[40,92719,64],{"class":63},[40,92721,7980],{"class":50},[40,92723,92724],{"class":42,"line":277},[40,92725,92726],{"class":997},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[40,92728,92729],{"class":42,"line":290},[40,92730,1413],{"emptyLinePlaceholder":1412},[40,92732,92733],{"class":42,"line":298},[40,92734,92735],{"class":997},"    \u002F\u002F 使用场景：求数组最大值\n",[40,92737,92738],{"class":42,"line":310},[40,92739,92740],{"class":997},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[40,92742,92743,92746],{"class":42,"line":5086},[40,92744,92745],{"class":997},"    \u002F\u002F console.log(max)",[40,92747,92748],{"class":997},"   \u002F\u002F3\n",[40,92750,92751],{"class":42,"line":5091},[40,92752,92753],{"class":997},"    \u002F\u002F 指向空或者Math都是可以的\n",[40,92755,92756,92758,92760,92762,92764,92766,92768,92770,92772,92774],{"class":42,"line":5105},[40,92757,14543],{"class":1283},[40,92759,60993],{"class":63},[40,92761,16886],{"class":1283},[40,92763,55524],{"class":50},[40,92765,3791],{"class":63},[40,92767,15757],{"class":50},[40,92769,3983],{"class":63},[40,92771,15757],{"class":50},[40,92773,4014],{"class":63},[40,92775,36546],{"class":50},[40,92777,92778],{"class":42,"line":5110},[40,92779,92780],{"class":997},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[40,92782,92783,92785,92787,92789,92792,92794],{"class":42,"line":5902},[40,92784,14543],{"class":1283},[40,92786,9274],{"class":63},[40,92788,16886],{"class":1283},[40,92790,92791],{"class":50}," Math.max.",[40,92793,92710],{"class":596},[40,92795,92796],{"class":50},"(Math, arr)\n",[40,92798,92799,92801,92804,92806,92809,92811],{"class":42,"line":5916},[40,92800,14543],{"class":1283},[40,92802,92803],{"class":63}," min",[40,92805,16886],{"class":1283},[40,92807,92808],{"class":50}," Math.min.",[40,92810,92710],{"class":596},[40,92812,92796],{"class":50},[40,92814,92815,92817,92819,92822],{"class":42,"line":5924},[40,92816,77048],{"class":50},[40,92818,61545],{"class":596},[40,92820,92821],{"class":50},"(max, min)     ",[40,92823,92824],{"class":997},"\u002F\u002F100,4\n",[40,92826,92827],{"class":42,"line":5929},[40,92828,1413],{"emptyLinePlaceholder":1412},[40,92830,92831],{"class":42,"line":5935},[40,92832,92833],{"class":997},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[40,92835,92836,92838,92840,92843,92845,92847,92850],{"class":42,"line":5941},[40,92837,77048],{"class":50},[40,92839,61545],{"class":596},[40,92841,92842],{"class":50},"(Max.",[40,92844,9338],{"class":596},[40,92846,3488],{"class":50},[40,92848,92849],{"class":1283},"...",[40,92851,92852],{"class":50},"arr))\n",[40,92854,92855,92857,92859],{"class":42,"line":5946},[40,92856,55715],{"class":50},[40,92858,55111],{"class":46},[40,92860,54606],{"class":50},[40,92862,92863,92865,92867],{"class":42,"line":11270},[40,92864,55083],{"class":50},[40,92866,55098],{"class":46},[40,92868,54606],{"class":50},[40,92870,92871],{"class":42,"line":11294},[40,92872,1413],{"emptyLinePlaceholder":1412},[40,92874,92875,92877,92879],{"class":42,"line":11299},[40,92876,55083],{"class":50},[40,92878,53935],{"class":46},[40,92880,54606],{"class":50},[19,92882,92883],{},[438,92884],{"alt":36,"src":92885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[492,92887,92888],{"start":70},[495,92889,92890],{},"bind()",[19,92892,92893],{},[438,92894],{"alt":36,"src":92895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,92897,92898],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,92900,92901],{},"bind的语法跟call很相似",[31,92903,92905],{"className":56365,"code":92904,"language":56367,"meta":36,"style":36},"\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",[26,92906,92907,92915,92923,92927,92932,92936,92940,92945,92949,92954,92959,92964,92969,92974,92979,92984,92988,92996],{"__ignoreMap":36},[40,92908,92909,92911,92913],{"class":42,"line":43},[40,92910,4387],{"class":50},[40,92912,55098],{"class":46},[40,92914,54606],{"class":50},[40,92916,92917,92919,92921],{"class":42,"line":54},[40,92918,55442],{"class":50},[40,92920,55111],{"class":46},[40,92922,54606],{"class":50},[40,92924,92925],{"class":42,"line":70},[40,92926,74819],{"class":50},[40,92928,92929],{"class":42,"line":78},[40,92930,92931],{"class":50},"      age: 18\n",[40,92933,92934],{"class":42,"line":86},[40,92935,5513],{"class":50},[40,92937,92938],{"class":42,"line":100},[40,92939,80438],{"class":50},[40,92941,92942],{"class":42,"line":108},[40,92943,92944],{"class":50},"      console.log(this)\n",[40,92946,92947],{"class":42,"line":121},[40,92948,5513],{"class":50},[40,92950,92951],{"class":42,"line":134},[40,92952,92953],{"class":50},"    \u002F\u002F 1.bind 不会调用函数\n",[40,92955,92956],{"class":42,"line":146},[40,92957,92958],{"class":50},"    \u002F\u002F 2.bind能改变this的指向\n",[40,92960,92961],{"class":42,"line":154},[40,92962,92963],{"class":50},"    fn.bind()\n",[40,92965,92966],{"class":42,"line":162},[40,92967,92968],{"class":50},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[40,92970,92971],{"class":42,"line":170},[40,92972,92973],{"class":50},"    const fun = fn.bind(obj)\n",[40,92975,92976],{"class":42,"line":183},[40,92977,92978],{"class":50},"    \u002F\u002F console.log(fun)\n",[40,92980,92981],{"class":42,"line":196},[40,92982,92983],{"class":50},"    \u002F\u002F 调用,查看this的指向\n",[40,92985,92986],{"class":42,"line":204},[40,92987,55949],{"class":50},[40,92989,92990,92992,92994],{"class":42,"line":217},[40,92991,55715],{"class":50},[40,92993,55111],{"class":46},[40,92995,54606],{"class":50},[40,92997,92998,93000,93002],{"class":42,"line":230},[40,92999,55083],{"class":50},[40,93001,55098],{"class":46},[40,93003,54606],{"class":50},[19,93005,93006],{},[438,93007],{"alt":36,"src":93008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[492,93010,93011],{"start":78},[495,93012,93013],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[31,93015,93017],{"className":56365,"code":93016,"language":56367,"meta":36,"style":36},"\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",[26,93018,93019,93027,93040,93048,93053,93057,93062,93067,93072,93077,93082,93087,93092,93097,93101,93109],{"__ignoreMap":36},[40,93020,93021,93023,93025],{"class":42,"line":43},[40,93022,4387],{"class":50},[40,93024,55098],{"class":46},[40,93026,54606],{"class":50},[40,93028,93029,93031,93033,93036,93038],{"class":42,"line":54},[40,93030,55442],{"class":50},[40,93032,57185],{"class":46},[40,93034,93035],{"class":50},">禁用\u003C\u002F",[40,93037,57185],{"class":46},[40,93039,54606],{"class":50},[40,93041,93042,93044,93046],{"class":42,"line":70},[40,93043,55442],{"class":50},[40,93045,55111],{"class":46},[40,93047,54606],{"class":50},[40,93049,93050],{"class":42,"line":78},[40,93051,93052],{"class":50},"    const btn = document.querySelector('button')\n",[40,93054,93055],{"class":42,"line":86},[40,93056,62314],{"class":50},[40,93058,93059],{"class":42,"line":100},[40,93060,93061],{"class":50},"      this.disabled = true\n",[40,93063,93064],{"class":42,"line":108},[40,93065,93066],{"class":50},"      \u002F\u002F 定时器是window进行调用的\n",[40,93068,93069],{"class":42,"line":121},[40,93070,93071],{"class":50},"      setTimeout(function () {\n",[40,93073,93074],{"class":42,"line":134},[40,93075,93076],{"class":50},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[40,93078,93079],{"class":42,"line":146},[40,93080,93081],{"class":50},"        this.disabled = false\n",[40,93083,93084],{"class":42,"line":154},[40,93085,93086],{"class":50},"      }.bind(this), 2000)\n",[40,93088,93089],{"class":42,"line":162},[40,93090,93091],{"class":50},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[40,93093,93094],{"class":42,"line":170},[40,93095,93096],{"class":50},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[40,93098,93099],{"class":42,"line":183},[40,93100,36761],{"class":50},[40,93102,93103,93105,93107],{"class":42,"line":196},[40,93104,55715],{"class":50},[40,93106,55111],{"class":46},[40,93108,54606],{"class":50},[40,93110,93111,93113,93115],{"class":42,"line":204},[40,93112,55083],{"class":50},[40,93114,55098],{"class":46},[40,93116,54606],{"class":50},[492,93118,93119],{"start":86},[495,93120,25274],{},[19,93122,93123],{},[438,93124],{"alt":36,"src":93125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,93127,93129],{"id":93128},"_417-性能优化","4.17 性能优化",[402,93131,93133],{"id":93132},"_4171-防抖","4.17.1 防抖",[19,93135,93136],{},[438,93137],{"alt":36,"src":93138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,93140,93141],{},[409,93142,93143],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,93145,93146],{},"防抖实现方式：",[1338,93148,93149],{},[495,93150,93151],{},"lodash 提供了防抖处理",[19,93153,93154],{},"_.debounce(func,[wait=0],[options={}])",[19,93156,93157],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[31,93159,93161],{"className":53933,"code":93160,"language":53935,"meta":36,"style":36},"\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",[26,93162,93163,93173,93187,93191,93199,93213,93233,93245,93253,93259,93269,93281,93293,93304,93316,93326,93336,93349,93353,93361,93369,93373,93381,93399,93417,93425,93444,93454,93463,93474,93479,93483,93488,93493,93498,93523,93531,93539,93543],{"__ignoreMap":36},[40,93164,93165,93167,93169,93171],{"class":42,"line":43},[40,93166,54597],{"class":50},[40,93168,54600],{"class":46},[40,93170,54603],{"class":596},[40,93172,54606],{"class":50},[40,93174,93175,93177,93179,93181,93183,93185],{"class":42,"line":54},[40,93176,4387],{"class":50},[40,93178,53935],{"class":46},[40,93180,54615],{"class":596},[40,93182,1284],{"class":50},[40,93184,54620],{"class":94},[40,93186,54606],{"class":50},[40,93188,93189],{"class":42,"line":70},[40,93190,1413],{"emptyLinePlaceholder":1412},[40,93192,93193,93195,93197],{"class":42,"line":78},[40,93194,4387],{"class":50},[40,93196,54633],{"class":46},[40,93198,54606],{"class":50},[40,93200,93201,93203,93205,93207,93209,93211],{"class":42,"line":86},[40,93202,55442],{"class":50},[40,93204,54643],{"class":46},[40,93206,54646],{"class":596},[40,93208,1284],{"class":50},[40,93210,54651],{"class":94},[40,93212,54606],{"class":50},[40,93214,93215,93217,93219,93221,93223,93225,93227,93229,93231],{"class":42,"line":100},[40,93216,55442],{"class":50},[40,93218,54643],{"class":46},[40,93220,18242],{"class":596},[40,93222,1284],{"class":50},[40,93224,54690],{"class":94},[40,93226,54670],{"class":596},[40,93228,1284],{"class":50},[40,93230,54697],{"class":94},[40,93232,54606],{"class":50},[40,93234,93235,93237,93239,93241,93243],{"class":42,"line":108},[40,93236,55442],{"class":50},[40,93238,54706],{"class":46},[40,93240,54709],{"class":50},[40,93242,54706],{"class":46},[40,93244,54606],{"class":50},[40,93246,93247,93249,93251],{"class":42,"line":121},[40,93248,55442],{"class":50},[40,93250,3384],{"class":46},[40,93252,54606],{"class":50},[40,93254,93255,93257],{"class":42,"line":134},[40,93256,58050],{"class":596},[40,93258,18894],{"class":50},[40,93260,93261,93263,93265,93267],{"class":42,"line":146},[40,93262,75891],{"class":63},[40,93264,60],{"class":50},[40,93266,63803],{"class":63},[40,93268,4637],{"class":50},[40,93270,93271,93273,93275,93277,93279],{"class":42,"line":154},[40,93272,58069],{"class":63},[40,93274,60],{"class":50},[40,93276,5053],{"class":63},[40,93278,54790],{"class":1283},[40,93280,4637],{"class":50},[40,93282,93283,93285,93287,93289,93291],{"class":42,"line":162},[40,93284,58083],{"class":63},[40,93286,60],{"class":50},[40,93288,5053],{"class":63},[40,93290,54790],{"class":1283},[40,93292,4637],{"class":50},[40,93294,93295,93297,93299,93302],{"class":42,"line":170},[40,93296,58182],{"class":63},[40,93298,60],{"class":50},[40,93300,93301],{"class":63},"gray",[40,93303,4637],{"class":50},[40,93305,93306,93308,93310,93312,93314],{"class":42,"line":183},[40,93307,58220],{"class":63},[40,93309,60],{"class":50},[40,93311,4302],{"class":63},[40,93313,54790],{"class":1283},[40,93315,4637],{"class":50},[40,93317,93318,93320,93322,93324],{"class":42,"line":196},[40,93319,60714],{"class":63},[40,93321,60],{"class":50},[40,93323,64140],{"class":63},[40,93325,4637],{"class":50},[40,93327,93328,93330,93332,93334],{"class":42,"line":204},[40,93329,60584],{"class":63},[40,93331,60],{"class":50},[40,93333,54890],{"class":63},[40,93335,4637],{"class":50},[40,93337,93338,93341,93343,93345,93347],{"class":42,"line":217},[40,93339,93340],{"class":63},"      padding-top",[40,93342,60],{"class":50},[40,93344,3799],{"class":63},[40,93346,54790],{"class":1283},[40,93348,4637],{"class":50},[40,93350,93351],{"class":42,"line":230},[40,93352,5513],{"class":50},[40,93354,93355,93357,93359],{"class":42,"line":238},[40,93356,55715],{"class":50},[40,93358,3384],{"class":46},[40,93360,54606],{"class":50},[40,93362,93363,93365,93367],{"class":42,"line":251},[40,93364,55083],{"class":50},[40,93366,54633],{"class":46},[40,93368,54606],{"class":50},[40,93370,93371],{"class":42,"line":264},[40,93372,1413],{"emptyLinePlaceholder":1412},[40,93374,93375,93377,93379],{"class":42,"line":277},[40,93376,4387],{"class":50},[40,93378,55098],{"class":46},[40,93380,54606],{"class":50},[40,93382,93383,93385,93387,93389,93391,93393,93395,93397],{"class":42,"line":290},[40,93384,55442],{"class":50},[40,93386,54909],{"class":46},[40,93388,56784],{"class":596},[40,93390,1284],{"class":50},[40,93392,56789],{"class":94},[40,93394,58612],{"class":50},[40,93396,54909],{"class":46},[40,93398,54606],{"class":50},[40,93400,93401,93403,93405,93407,93409,93411,93413,93415],{"class":42,"line":298},[40,93402,55442],{"class":50},[40,93404,55111],{"class":46},[40,93406,58537],{"class":596},[40,93408,1284],{"class":50},[40,93410,91569],{"class":94},[40,93412,58612],{"class":50},[40,93414,55111],{"class":46},[40,93416,54606],{"class":50},[40,93418,93419,93421,93423],{"class":42,"line":310},[40,93420,55442],{"class":50},[40,93422,55111],{"class":46},[40,93424,54606],{"class":50},[40,93426,93427,93429,93431,93433,93435,93437,93439,93442],{"class":42,"line":5086},[40,93428,14543],{"class":1283},[40,93430,90228],{"class":63},[40,93432,16886],{"class":1283},[40,93434,57694],{"class":50},[40,93436,57697],{"class":596},[40,93438,3488],{"class":50},[40,93440,93441],{"class":94},"'.box'",[40,93443,1811],{"class":50},[40,93445,93446,93448,93450,93452],{"class":42,"line":5091},[40,93447,55517],{"class":1283},[40,93449,12760],{"class":50},[40,93451,1284],{"class":1283},[40,93453,50633],{"class":63},[40,93455,93456,93458,93461],{"class":42,"line":5105},[40,93457,73381],{"class":1283},[40,93459,93460],{"class":596}," mouseMove",[40,93462,14175],{"class":50},[40,93464,93465,93468,93470,93472],{"class":42,"line":5110},[40,93466,93467],{"class":50},"      box.innerHTML ",[40,93469,1284],{"class":1283},[40,93471,6356],{"class":50},[40,93473,6026],{"class":1283},[40,93475,93476],{"class":42,"line":5902},[40,93477,93478],{"class":997},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[40,93480,93481],{"class":42,"line":5916},[40,93482,5513],{"class":50},[40,93484,93485],{"class":42,"line":5924},[40,93486,93487],{"class":997},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[40,93489,93490],{"class":42,"line":5929},[40,93491,93492],{"class":997},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[40,93494,93495],{"class":42,"line":5935},[40,93496,93497],{"class":997},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[40,93499,93500,93503,93505,93507,93510,93513,93516,93519,93521],{"class":42,"line":5941},[40,93501,93502],{"class":50},"    box.",[40,93504,61111],{"class":596},[40,93506,3488],{"class":50},[40,93508,93509],{"class":94},"'mousemove'",[40,93511,93512],{"class":50},", _.",[40,93514,93515],{"class":596},"debounce",[40,93517,93518],{"class":50},"(mouseMove, ",[40,93520,68372],{"class":63},[40,93522,33797],{"class":50},[40,93524,93525,93527,93529],{"class":42,"line":5946},[40,93526,55715],{"class":50},[40,93528,55111],{"class":46},[40,93530,54606],{"class":50},[40,93532,93533,93535,93537],{"class":42,"line":11270},[40,93534,55083],{"class":50},[40,93536,55098],{"class":46},[40,93538,54606],{"class":50},[40,93540,93541],{"class":42,"line":11294},[40,93542,1413],{"emptyLinePlaceholder":1412},[40,93544,93545,93547,93549],{"class":42,"line":11299},[40,93546,55083],{"class":50},[40,93548,53935],{"class":46},[40,93550,54606],{"class":50},[1338,93552,93553],{},[495,93554,93555],{},"手写一个防抖函数来处理",[19,93557,93558],{},"防抖的核心就是利用定时器来实现的：",[19,93560,93561],{},"①声明一个定时器变量",[19,93563,93564],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,93566,93567],{},"③如果没有定时器则开启定时器，记得存到变量里面",[31,93569,93571],{"className":53933,"code":93570,"language":53935,"meta":36,"style":36},"\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",[26,93572,93573,93583,93597,93601,93609,93623,93643,93655,93663,93669,93679,93691,93703,93713,93725,93735,93745,93757,93761,93769,93777,93781,93789,93807,93825,93833,93851,93861,93869,93879,93883,93887,93891,93896,93901,93906,93911,93916,93921,93939,93946,93951,93959,93964,93977,93993,94003,94008,94012,94016,94036,94040,94045,94050,94055,94060,94068,94076,94080],{"__ignoreMap":36},[40,93574,93575,93577,93579,93581],{"class":42,"line":43},[40,93576,54597],{"class":50},[40,93578,54600],{"class":46},[40,93580,54603],{"class":596},[40,93582,54606],{"class":50},[40,93584,93585,93587,93589,93591,93593,93595],{"class":42,"line":54},[40,93586,4387],{"class":50},[40,93588,53935],{"class":46},[40,93590,54615],{"class":596},[40,93592,1284],{"class":50},[40,93594,54620],{"class":94},[40,93596,54606],{"class":50},[40,93598,93599],{"class":42,"line":70},[40,93600,1413],{"emptyLinePlaceholder":1412},[40,93602,93603,93605,93607],{"class":42,"line":78},[40,93604,4387],{"class":50},[40,93606,54633],{"class":46},[40,93608,54606],{"class":50},[40,93610,93611,93613,93615,93617,93619,93621],{"class":42,"line":86},[40,93612,55442],{"class":50},[40,93614,54643],{"class":46},[40,93616,54646],{"class":596},[40,93618,1284],{"class":50},[40,93620,54651],{"class":94},[40,93622,54606],{"class":50},[40,93624,93625,93627,93629,93631,93633,93635,93637,93639,93641],{"class":42,"line":100},[40,93626,55442],{"class":50},[40,93628,54643],{"class":46},[40,93630,18242],{"class":596},[40,93632,1284],{"class":50},[40,93634,54690],{"class":94},[40,93636,54670],{"class":596},[40,93638,1284],{"class":50},[40,93640,54697],{"class":94},[40,93642,54606],{"class":50},[40,93644,93645,93647,93649,93651,93653],{"class":42,"line":108},[40,93646,55442],{"class":50},[40,93648,54706],{"class":46},[40,93650,54709],{"class":50},[40,93652,54706],{"class":46},[40,93654,54606],{"class":50},[40,93656,93657,93659,93661],{"class":42,"line":121},[40,93658,55442],{"class":50},[40,93660,3384],{"class":46},[40,93662,54606],{"class":50},[40,93664,93665,93667],{"class":42,"line":134},[40,93666,58050],{"class":596},[40,93668,18894],{"class":50},[40,93670,93671,93673,93675,93677],{"class":42,"line":146},[40,93672,75891],{"class":63},[40,93674,60],{"class":50},[40,93676,63803],{"class":63},[40,93678,4637],{"class":50},[40,93680,93681,93683,93685,93687,93689],{"class":42,"line":154},[40,93682,58069],{"class":63},[40,93684,60],{"class":50},[40,93686,5053],{"class":63},[40,93688,54790],{"class":1283},[40,93690,4637],{"class":50},[40,93692,93693,93695,93697,93699,93701],{"class":42,"line":162},[40,93694,58083],{"class":63},[40,93696,60],{"class":50},[40,93698,5053],{"class":63},[40,93700,54790],{"class":1283},[40,93702,4637],{"class":50},[40,93704,93705,93707,93709,93711],{"class":42,"line":170},[40,93706,58182],{"class":63},[40,93708,60],{"class":50},[40,93710,93301],{"class":63},[40,93712,4637],{"class":50},[40,93714,93715,93717,93719,93721,93723],{"class":42,"line":183},[40,93716,58220],{"class":63},[40,93718,60],{"class":50},[40,93720,4302],{"class":63},[40,93722,54790],{"class":1283},[40,93724,4637],{"class":50},[40,93726,93727,93729,93731,93733],{"class":42,"line":196},[40,93728,60714],{"class":63},[40,93730,60],{"class":50},[40,93732,64140],{"class":63},[40,93734,4637],{"class":50},[40,93736,93737,93739,93741,93743],{"class":42,"line":204},[40,93738,60584],{"class":63},[40,93740,60],{"class":50},[40,93742,54890],{"class":63},[40,93744,4637],{"class":50},[40,93746,93747,93749,93751,93753,93755],{"class":42,"line":217},[40,93748,93340],{"class":63},[40,93750,60],{"class":50},[40,93752,3799],{"class":63},[40,93754,54790],{"class":1283},[40,93756,4637],{"class":50},[40,93758,93759],{"class":42,"line":230},[40,93760,5513],{"class":50},[40,93762,93763,93765,93767],{"class":42,"line":238},[40,93764,55715],{"class":50},[40,93766,3384],{"class":46},[40,93768,54606],{"class":50},[40,93770,93771,93773,93775],{"class":42,"line":251},[40,93772,55083],{"class":50},[40,93774,54633],{"class":46},[40,93776,54606],{"class":50},[40,93778,93779],{"class":42,"line":264},[40,93780,1413],{"emptyLinePlaceholder":1412},[40,93782,93783,93785,93787],{"class":42,"line":277},[40,93784,4387],{"class":50},[40,93786,55098],{"class":46},[40,93788,54606],{"class":50},[40,93790,93791,93793,93795,93797,93799,93801,93803,93805],{"class":42,"line":290},[40,93792,55442],{"class":50},[40,93794,54909],{"class":46},[40,93796,56784],{"class":596},[40,93798,1284],{"class":50},[40,93800,56789],{"class":94},[40,93802,58612],{"class":50},[40,93804,54909],{"class":46},[40,93806,54606],{"class":50},[40,93808,93809,93811,93813,93815,93817,93819,93821,93823],{"class":42,"line":298},[40,93810,55442],{"class":50},[40,93812,55111],{"class":46},[40,93814,58537],{"class":596},[40,93816,1284],{"class":50},[40,93818,91569],{"class":94},[40,93820,58612],{"class":50},[40,93822,55111],{"class":46},[40,93824,54606],{"class":50},[40,93826,93827,93829,93831],{"class":42,"line":310},[40,93828,55442],{"class":50},[40,93830,55111],{"class":46},[40,93832,54606],{"class":50},[40,93834,93835,93837,93839,93841,93843,93845,93847,93849],{"class":42,"line":5086},[40,93836,14543],{"class":1283},[40,93838,90228],{"class":63},[40,93840,16886],{"class":1283},[40,93842,57694],{"class":50},[40,93844,57697],{"class":596},[40,93846,3488],{"class":50},[40,93848,93441],{"class":94},[40,93850,1811],{"class":50},[40,93852,93853,93855,93857,93859],{"class":42,"line":5091},[40,93854,55517],{"class":1283},[40,93856,12760],{"class":50},[40,93858,1284],{"class":1283},[40,93860,50633],{"class":63},[40,93862,93863,93865,93867],{"class":42,"line":5105},[40,93864,73381],{"class":1283},[40,93866,93460],{"class":596},[40,93868,14175],{"class":50},[40,93870,93871,93873,93875,93877],{"class":42,"line":5110},[40,93872,93467],{"class":50},[40,93874,1284],{"class":1283},[40,93876,6356],{"class":50},[40,93878,6026],{"class":1283},[40,93880,93881],{"class":42,"line":5902},[40,93882,93478],{"class":997},[40,93884,93885],{"class":42,"line":5916},[40,93886,5513],{"class":50},[40,93888,93889],{"class":42,"line":5924},[40,93890,93487],{"class":997},[40,93892,93893],{"class":42,"line":5929},[40,93894,93895],{"class":997},"    \u002F\u002F 手写防抖函数\n",[40,93897,93898],{"class":42,"line":5935},[40,93899,93900],{"class":997},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[40,93902,93903],{"class":42,"line":5941},[40,93904,93905],{"class":997},"    \u002F\u002F 1.声明定时器变量\n",[40,93907,93908],{"class":42,"line":5946},[40,93909,93910],{"class":997},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[40,93912,93913],{"class":42,"line":11270},[40,93914,93915],{"class":997},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[40,93917,93918],{"class":42,"line":11294},[40,93919,93920],{"class":997},"    \u002F\u002F 4.定时器里面写函数调用\n",[40,93922,93923,93925,93928,93930,93933,93935,93937],{"class":42,"line":11299},[40,93924,73381],{"class":1283},[40,93926,93927],{"class":596}," debounce",[40,93929,3488],{"class":50},[40,93931,93932],{"class":8539},"fn",[40,93934,15757],{"class":50},[40,93936,4198],{"class":8539},[40,93938,15764],{"class":50},[40,93940,93941,93943],{"class":42,"line":11305},[40,93942,83067],{"class":1283},[40,93944,93945],{"class":50}," timer\n",[40,93947,93948],{"class":42,"line":11332},[40,93949,93950],{"class":997},"      \u002F\u002F return 返回一个匿名函数\n",[40,93952,93953,93955,93957],{"class":42,"line":11337},[40,93954,77277],{"class":1283},[40,93956,62216],{"class":1283},[40,93958,57750],{"class":50},[40,93960,93961],{"class":42,"line":11343},[40,93962,93963],{"class":997},"        \u002F\u002F 这里边写第二三四步\n",[40,93965,93966,93968,93971,93974],{"class":42,"line":11355},[40,93967,5822],{"class":1283},[40,93969,93970],{"class":50}," (timer) ",[40,93972,93973],{"class":596},"clearTimeout",[40,93975,93976],{"class":50},"(timer)\n",[40,93978,93979,93982,93984,93987,93989,93991],{"class":42,"line":11367},[40,93980,93981],{"class":50},"        timer ",[40,93983,1284],{"class":1283},[40,93985,93986],{"class":596}," setTimeout",[40,93988,3488],{"class":50},[40,93990,57747],{"class":1283},[40,93992,57750],{"class":50},[40,93994,93995,93998,94000],{"class":42,"line":11379},[40,93996,93997],{"class":596},"          fn",[40,93999,16372],{"class":50},[40,94001,94002],{"class":997},"\u002F\u002F加小括号调用fn }, t)\n",[40,94004,94005],{"class":42,"line":13038},[40,94006,94007],{"class":50},"        }, t)\n",[40,94009,94010],{"class":42,"line":13063},[40,94011,55696],{"class":50},[40,94013,94014],{"class":42,"line":13086},[40,94015,5513],{"class":50},[40,94017,94018,94020,94022,94024,94026,94028,94030,94032,94034],{"class":42,"line":13110},[40,94019,93502],{"class":50},[40,94021,61111],{"class":596},[40,94023,3488],{"class":50},[40,94025,93509],{"class":94},[40,94027,15757],{"class":50},[40,94029,93515],{"class":596},[40,94031,93518],{"class":50},[40,94033,68372],{"class":63},[40,94035,33797],{"class":50},[40,94037,94038],{"class":42,"line":13115},[40,94039,1413],{"emptyLinePlaceholder":1412},[40,94041,94042],{"class":42,"line":13120},[40,94043,94044],{"class":997},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[40,94046,94047],{"class":42,"line":13125},[40,94048,94049],{"class":997},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[40,94051,94052],{"class":42,"line":13134},[40,94053,94054],{"class":997},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[40,94056,94057],{"class":42,"line":13139},[40,94058,94059],{"class":997},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[40,94061,94062,94064,94066],{"class":42,"line":13145},[40,94063,55715],{"class":50},[40,94065,55111],{"class":46},[40,94067,54606],{"class":50},[40,94069,94070,94072,94074],{"class":42,"line":13166},[40,94071,55083],{"class":50},[40,94073,55098],{"class":46},[40,94075,54606],{"class":50},[40,94077,94078],{"class":42,"line":13172},[40,94079,1413],{"emptyLinePlaceholder":1412},[40,94081,94082,94084,94086],{"class":42,"line":13186},[40,94083,55083],{"class":50},[40,94085,53935],{"class":46},[40,94087,54606],{"class":50},[402,94089,94091],{"id":94090},"_4172-节流","4.17.2 节流",[19,94093,94094],{},[438,94095],{"alt":36,"src":94096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,94098,94099],{},[438,94100],{"alt":36,"src":94101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,94103,94104],{},[409,94105,94106],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,94108,94109],{},"实现方式：",[1338,94111,94112],{},[495,94113,94114],{},"lodash 提供的节流函数来处理",[19,94116,94117],{},"_.throttle(func,[wait=0],[options=])",[19,94119,94120],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[31,94122,94124],{"className":53933,"code":94123,"language":53935,"meta":36,"style":36},"\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",[26,94125,94126,94136,94150,94154,94162,94176,94196,94208,94216,94222,94232,94244,94256,94266,94278,94288,94298,94310,94314,94322,94330,94334,94342,94360,94378,94386,94404,94414,94422,94432,94436,94440,94444,94449,94454,94475,94483,94491,94495],{"__ignoreMap":36},[40,94127,94128,94130,94132,94134],{"class":42,"line":43},[40,94129,54597],{"class":50},[40,94131,54600],{"class":46},[40,94133,54603],{"class":596},[40,94135,54606],{"class":50},[40,94137,94138,94140,94142,94144,94146,94148],{"class":42,"line":54},[40,94139,4387],{"class":50},[40,94141,53935],{"class":46},[40,94143,54615],{"class":596},[40,94145,1284],{"class":50},[40,94147,54620],{"class":94},[40,94149,54606],{"class":50},[40,94151,94152],{"class":42,"line":70},[40,94153,1413],{"emptyLinePlaceholder":1412},[40,94155,94156,94158,94160],{"class":42,"line":78},[40,94157,4387],{"class":50},[40,94159,54633],{"class":46},[40,94161,54606],{"class":50},[40,94163,94164,94166,94168,94170,94172,94174],{"class":42,"line":86},[40,94165,55442],{"class":50},[40,94167,54643],{"class":46},[40,94169,54646],{"class":596},[40,94171,1284],{"class":50},[40,94173,54651],{"class":94},[40,94175,54606],{"class":50},[40,94177,94178,94180,94182,94184,94186,94188,94190,94192,94194],{"class":42,"line":100},[40,94179,55442],{"class":50},[40,94181,54643],{"class":46},[40,94183,18242],{"class":596},[40,94185,1284],{"class":50},[40,94187,54690],{"class":94},[40,94189,54670],{"class":596},[40,94191,1284],{"class":50},[40,94193,54697],{"class":94},[40,94195,54606],{"class":50},[40,94197,94198,94200,94202,94204,94206],{"class":42,"line":108},[40,94199,55442],{"class":50},[40,94201,54706],{"class":46},[40,94203,54709],{"class":50},[40,94205,54706],{"class":46},[40,94207,54606],{"class":50},[40,94209,94210,94212,94214],{"class":42,"line":121},[40,94211,55442],{"class":50},[40,94213,3384],{"class":46},[40,94215,54606],{"class":50},[40,94217,94218,94220],{"class":42,"line":134},[40,94219,58050],{"class":596},[40,94221,18894],{"class":50},[40,94223,94224,94226,94228,94230],{"class":42,"line":146},[40,94225,75891],{"class":63},[40,94227,60],{"class":50},[40,94229,63803],{"class":63},[40,94231,4637],{"class":50},[40,94233,94234,94236,94238,94240,94242],{"class":42,"line":154},[40,94235,58069],{"class":63},[40,94237,60],{"class":50},[40,94239,5053],{"class":63},[40,94241,54790],{"class":1283},[40,94243,4637],{"class":50},[40,94245,94246,94248,94250,94252,94254],{"class":42,"line":162},[40,94247,58083],{"class":63},[40,94249,60],{"class":50},[40,94251,5053],{"class":63},[40,94253,54790],{"class":1283},[40,94255,4637],{"class":50},[40,94257,94258,94260,94262,94264],{"class":42,"line":170},[40,94259,58182],{"class":63},[40,94261,60],{"class":50},[40,94263,93301],{"class":63},[40,94265,4637],{"class":50},[40,94267,94268,94270,94272,94274,94276],{"class":42,"line":183},[40,94269,58220],{"class":63},[40,94271,60],{"class":50},[40,94273,4302],{"class":63},[40,94275,54790],{"class":1283},[40,94277,4637],{"class":50},[40,94279,94280,94282,94284,94286],{"class":42,"line":196},[40,94281,60714],{"class":63},[40,94283,60],{"class":50},[40,94285,64140],{"class":63},[40,94287,4637],{"class":50},[40,94289,94290,94292,94294,94296],{"class":42,"line":204},[40,94291,60584],{"class":63},[40,94293,60],{"class":50},[40,94295,54890],{"class":63},[40,94297,4637],{"class":50},[40,94299,94300,94302,94304,94306,94308],{"class":42,"line":217},[40,94301,93340],{"class":63},[40,94303,60],{"class":50},[40,94305,3799],{"class":63},[40,94307,54790],{"class":1283},[40,94309,4637],{"class":50},[40,94311,94312],{"class":42,"line":230},[40,94313,5513],{"class":50},[40,94315,94316,94318,94320],{"class":42,"line":238},[40,94317,55715],{"class":50},[40,94319,3384],{"class":46},[40,94321,54606],{"class":50},[40,94323,94324,94326,94328],{"class":42,"line":251},[40,94325,55083],{"class":50},[40,94327,54633],{"class":46},[40,94329,54606],{"class":50},[40,94331,94332],{"class":42,"line":264},[40,94333,1413],{"emptyLinePlaceholder":1412},[40,94335,94336,94338,94340],{"class":42,"line":277},[40,94337,4387],{"class":50},[40,94339,55098],{"class":46},[40,94341,54606],{"class":50},[40,94343,94344,94346,94348,94350,94352,94354,94356,94358],{"class":42,"line":290},[40,94345,55442],{"class":50},[40,94347,54909],{"class":46},[40,94349,56784],{"class":596},[40,94351,1284],{"class":50},[40,94353,56789],{"class":94},[40,94355,58612],{"class":50},[40,94357,54909],{"class":46},[40,94359,54606],{"class":50},[40,94361,94362,94364,94366,94368,94370,94372,94374,94376],{"class":42,"line":298},[40,94363,55442],{"class":50},[40,94365,55111],{"class":46},[40,94367,58537],{"class":596},[40,94369,1284],{"class":50},[40,94371,91569],{"class":94},[40,94373,58612],{"class":50},[40,94375,55111],{"class":46},[40,94377,54606],{"class":50},[40,94379,94380,94382,94384],{"class":42,"line":310},[40,94381,55442],{"class":50},[40,94383,55111],{"class":46},[40,94385,54606],{"class":50},[40,94387,94388,94390,94392,94394,94396,94398,94400,94402],{"class":42,"line":5086},[40,94389,14543],{"class":1283},[40,94391,90228],{"class":63},[40,94393,16886],{"class":1283},[40,94395,57694],{"class":50},[40,94397,57697],{"class":596},[40,94399,3488],{"class":50},[40,94401,93441],{"class":94},[40,94403,1811],{"class":50},[40,94405,94406,94408,94410,94412],{"class":42,"line":5091},[40,94407,55517],{"class":1283},[40,94409,12760],{"class":50},[40,94411,1284],{"class":1283},[40,94413,50633],{"class":63},[40,94415,94416,94418,94420],{"class":42,"line":5105},[40,94417,73381],{"class":1283},[40,94419,93460],{"class":596},[40,94421,14175],{"class":50},[40,94423,94424,94426,94428,94430],{"class":42,"line":5110},[40,94425,93467],{"class":50},[40,94427,1284],{"class":1283},[40,94429,6356],{"class":50},[40,94431,6026],{"class":1283},[40,94433,94434],{"class":42,"line":5902},[40,94435,93478],{"class":997},[40,94437,94438],{"class":42,"line":5916},[40,94439,5513],{"class":50},[40,94441,94442],{"class":42,"line":5924},[40,94443,93487],{"class":997},[40,94445,94446],{"class":42,"line":5929},[40,94447,94448],{"class":997},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[40,94450,94451],{"class":42,"line":5935},[40,94452,94453],{"class":997},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[40,94455,94456,94458,94460,94462,94464,94466,94469,94471,94473],{"class":42,"line":5941},[40,94457,93502],{"class":50},[40,94459,61111],{"class":596},[40,94461,3488],{"class":50},[40,94463,93509],{"class":94},[40,94465,93512],{"class":50},[40,94467,94468],{"class":596},"throttle",[40,94470,93518],{"class":50},[40,94472,68372],{"class":63},[40,94474,33797],{"class":50},[40,94476,94477,94479,94481],{"class":42,"line":5946},[40,94478,55715],{"class":50},[40,94480,55111],{"class":46},[40,94482,54606],{"class":50},[40,94484,94485,94487,94489],{"class":42,"line":11270},[40,94486,55083],{"class":50},[40,94488,55098],{"class":46},[40,94490,54606],{"class":50},[40,94492,94493],{"class":42,"line":11294},[40,94494,1413],{"emptyLinePlaceholder":1412},[40,94496,94497,94499,94501],{"class":42,"line":11299},[40,94498,55083],{"class":50},[40,94500,53935],{"class":46},[40,94502,54606],{"class":50},[1338,94504,94505],{},[495,94506,94507],{},"手写一个节流函数来处理",[19,94509,74248],{},[19,94511,93561],{},[19,94513,94514],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,94516,94517],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[31,94519,94521],{"className":53933,"code":94520,"language":53935,"meta":36,"style":36},"\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",[26,94522,94523,94533,94547,94551,94559,94573,94593,94605,94613,94619,94629,94641,94653,94663,94675,94685,94695,94707,94711,94719,94727,94731,94739,94757,94775,94783,94801,94811,94819,94829,94833,94837,94841,94846,94851,94856,94861,94866,94871,94888,94894,94902,94913,94928,94935,94940,94945,94955,94960,94965,94970,94974,94978,94982,95002,95010,95018,95022],{"__ignoreMap":36},[40,94524,94525,94527,94529,94531],{"class":42,"line":43},[40,94526,54597],{"class":50},[40,94528,54600],{"class":46},[40,94530,54603],{"class":596},[40,94532,54606],{"class":50},[40,94534,94535,94537,94539,94541,94543,94545],{"class":42,"line":54},[40,94536,4387],{"class":50},[40,94538,53935],{"class":46},[40,94540,54615],{"class":596},[40,94542,1284],{"class":50},[40,94544,54620],{"class":94},[40,94546,54606],{"class":50},[40,94548,94549],{"class":42,"line":70},[40,94550,1413],{"emptyLinePlaceholder":1412},[40,94552,94553,94555,94557],{"class":42,"line":78},[40,94554,4387],{"class":50},[40,94556,54633],{"class":46},[40,94558,54606],{"class":50},[40,94560,94561,94563,94565,94567,94569,94571],{"class":42,"line":86},[40,94562,55442],{"class":50},[40,94564,54643],{"class":46},[40,94566,54646],{"class":596},[40,94568,1284],{"class":50},[40,94570,54651],{"class":94},[40,94572,54606],{"class":50},[40,94574,94575,94577,94579,94581,94583,94585,94587,94589,94591],{"class":42,"line":100},[40,94576,55442],{"class":50},[40,94578,54643],{"class":46},[40,94580,18242],{"class":596},[40,94582,1284],{"class":50},[40,94584,54690],{"class":94},[40,94586,54670],{"class":596},[40,94588,1284],{"class":50},[40,94590,54697],{"class":94},[40,94592,54606],{"class":50},[40,94594,94595,94597,94599,94601,94603],{"class":42,"line":108},[40,94596,55442],{"class":50},[40,94598,54706],{"class":46},[40,94600,54709],{"class":50},[40,94602,54706],{"class":46},[40,94604,54606],{"class":50},[40,94606,94607,94609,94611],{"class":42,"line":121},[40,94608,55442],{"class":50},[40,94610,3384],{"class":46},[40,94612,54606],{"class":50},[40,94614,94615,94617],{"class":42,"line":134},[40,94616,58050],{"class":596},[40,94618,18894],{"class":50},[40,94620,94621,94623,94625,94627],{"class":42,"line":146},[40,94622,75891],{"class":63},[40,94624,60],{"class":50},[40,94626,63803],{"class":63},[40,94628,4637],{"class":50},[40,94630,94631,94633,94635,94637,94639],{"class":42,"line":154},[40,94632,58069],{"class":63},[40,94634,60],{"class":50},[40,94636,5053],{"class":63},[40,94638,54790],{"class":1283},[40,94640,4637],{"class":50},[40,94642,94643,94645,94647,94649,94651],{"class":42,"line":162},[40,94644,58083],{"class":63},[40,94646,60],{"class":50},[40,94648,5053],{"class":63},[40,94650,54790],{"class":1283},[40,94652,4637],{"class":50},[40,94654,94655,94657,94659,94661],{"class":42,"line":170},[40,94656,58182],{"class":63},[40,94658,60],{"class":50},[40,94660,93301],{"class":63},[40,94662,4637],{"class":50},[40,94664,94665,94667,94669,94671,94673],{"class":42,"line":183},[40,94666,58220],{"class":63},[40,94668,60],{"class":50},[40,94670,4302],{"class":63},[40,94672,54790],{"class":1283},[40,94674,4637],{"class":50},[40,94676,94677,94679,94681,94683],{"class":42,"line":196},[40,94678,60714],{"class":63},[40,94680,60],{"class":50},[40,94682,64140],{"class":63},[40,94684,4637],{"class":50},[40,94686,94687,94689,94691,94693],{"class":42,"line":204},[40,94688,60584],{"class":63},[40,94690,60],{"class":50},[40,94692,54890],{"class":63},[40,94694,4637],{"class":50},[40,94696,94697,94699,94701,94703,94705],{"class":42,"line":217},[40,94698,93340],{"class":63},[40,94700,60],{"class":50},[40,94702,3799],{"class":63},[40,94704,54790],{"class":1283},[40,94706,4637],{"class":50},[40,94708,94709],{"class":42,"line":230},[40,94710,5513],{"class":50},[40,94712,94713,94715,94717],{"class":42,"line":238},[40,94714,55715],{"class":50},[40,94716,3384],{"class":46},[40,94718,54606],{"class":50},[40,94720,94721,94723,94725],{"class":42,"line":251},[40,94722,55083],{"class":50},[40,94724,54633],{"class":46},[40,94726,54606],{"class":50},[40,94728,94729],{"class":42,"line":264},[40,94730,1413],{"emptyLinePlaceholder":1412},[40,94732,94733,94735,94737],{"class":42,"line":277},[40,94734,4387],{"class":50},[40,94736,55098],{"class":46},[40,94738,54606],{"class":50},[40,94740,94741,94743,94745,94747,94749,94751,94753,94755],{"class":42,"line":290},[40,94742,55442],{"class":50},[40,94744,54909],{"class":46},[40,94746,56784],{"class":596},[40,94748,1284],{"class":50},[40,94750,56789],{"class":94},[40,94752,58612],{"class":50},[40,94754,54909],{"class":46},[40,94756,54606],{"class":50},[40,94758,94759,94761,94763,94765,94767,94769,94771,94773],{"class":42,"line":298},[40,94760,55442],{"class":50},[40,94762,55111],{"class":46},[40,94764,58537],{"class":596},[40,94766,1284],{"class":50},[40,94768,91569],{"class":94},[40,94770,58612],{"class":50},[40,94772,55111],{"class":46},[40,94774,54606],{"class":50},[40,94776,94777,94779,94781],{"class":42,"line":310},[40,94778,55442],{"class":50},[40,94780,55111],{"class":46},[40,94782,54606],{"class":50},[40,94784,94785,94787,94789,94791,94793,94795,94797,94799],{"class":42,"line":5086},[40,94786,14543],{"class":1283},[40,94788,90228],{"class":63},[40,94790,16886],{"class":1283},[40,94792,57694],{"class":50},[40,94794,57697],{"class":596},[40,94796,3488],{"class":50},[40,94798,93441],{"class":94},[40,94800,1811],{"class":50},[40,94802,94803,94805,94807,94809],{"class":42,"line":5091},[40,94804,55517],{"class":1283},[40,94806,12760],{"class":50},[40,94808,1284],{"class":1283},[40,94810,50633],{"class":63},[40,94812,94813,94815,94817],{"class":42,"line":5105},[40,94814,73381],{"class":1283},[40,94816,93460],{"class":596},[40,94818,14175],{"class":50},[40,94820,94821,94823,94825,94827],{"class":42,"line":5110},[40,94822,93467],{"class":50},[40,94824,1284],{"class":1283},[40,94826,6356],{"class":50},[40,94828,6026],{"class":1283},[40,94830,94831],{"class":42,"line":5902},[40,94832,93478],{"class":997},[40,94834,94835],{"class":42,"line":5916},[40,94836,5513],{"class":50},[40,94838,94839],{"class":42,"line":5924},[40,94840,93487],{"class":997},[40,94842,94843],{"class":42,"line":5929},[40,94844,94845],{"class":997},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[40,94847,94848],{"class":42,"line":5935},[40,94849,94850],{"class":997},"    \u002F\u002F 1.声明一个定时器变量\n",[40,94852,94853],{"class":42,"line":5941},[40,94854,94855],{"class":997},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[40,94857,94858],{"class":42,"line":5946},[40,94859,94860],{"class":997},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[40,94862,94863],{"class":42,"line":11270},[40,94864,94865],{"class":997},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[40,94867,94868],{"class":42,"line":11294},[40,94869,94870],{"class":997},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[40,94872,94873,94875,94878,94880,94882,94884,94886],{"class":42,"line":11299},[40,94874,73381],{"class":1283},[40,94876,94877],{"class":596}," throttle",[40,94879,3488],{"class":50},[40,94881,93932],{"class":8539},[40,94883,15757],{"class":50},[40,94885,4198],{"class":8539},[40,94887,15764],{"class":50},[40,94889,94890,94892],{"class":42,"line":11305},[40,94891,83067],{"class":1283},[40,94893,93945],{"class":50},[40,94895,94896,94898,94900],{"class":42,"line":11332},[40,94897,77277],{"class":1283},[40,94899,62216],{"class":1283},[40,94901,57750],{"class":50},[40,94903,94904,94906,94908,94910],{"class":42,"line":11337},[40,94905,5822],{"class":1283},[40,94907,4993],{"class":50},[40,94909,3707],{"class":1283},[40,94911,94912],{"class":50},"timer) {\n",[40,94914,94915,94918,94920,94922,94924,94926],{"class":42,"line":11343},[40,94916,94917],{"class":50},"          timer ",[40,94919,1284],{"class":1283},[40,94921,93986],{"class":596},[40,94923,3488],{"class":50},[40,94925,57747],{"class":1283},[40,94927,57750],{"class":50},[40,94929,94930,94933],{"class":42,"line":11355},[40,94931,94932],{"class":596},"            fn",[40,94934,5302],{"class":50},[40,94936,94937],{"class":42,"line":11367},[40,94938,94939],{"class":997},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[40,94941,94942],{"class":42,"line":11379},[40,94943,94944],{"class":997},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[40,94946,94947,94950,94952],{"class":42,"line":13038},[40,94948,94949],{"class":50},"            timer ",[40,94951,1284],{"class":1283},[40,94953,94954],{"class":63}," null\n",[40,94956,94957],{"class":42,"line":13063},[40,94958,94959],{"class":997},"            \u002F\u002F 不能用clearTimeout(timer)\n",[40,94961,94962],{"class":42,"line":13086},[40,94963,94964],{"class":997},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[40,94966,94967],{"class":42,"line":13110},[40,94968,94969],{"class":50},"          }, t)\n",[40,94971,94972],{"class":42,"line":13115},[40,94973,5854],{"class":50},[40,94975,94976],{"class":42,"line":13120},[40,94977,55696],{"class":50},[40,94979,94980],{"class":42,"line":13125},[40,94981,5513],{"class":50},[40,94983,94984,94986,94988,94990,94992,94994,94996,94998,95000],{"class":42,"line":13134},[40,94985,93502],{"class":50},[40,94987,61111],{"class":596},[40,94989,3488],{"class":50},[40,94991,93509],{"class":94},[40,94993,15757],{"class":50},[40,94995,94468],{"class":596},[40,94997,93518],{"class":50},[40,94999,68372],{"class":63},[40,95001,33797],{"class":50},[40,95003,95004,95006,95008],{"class":42,"line":13139},[40,95005,55715],{"class":50},[40,95007,55111],{"class":46},[40,95009,54606],{"class":50},[40,95011,95012,95014,95016],{"class":42,"line":13145},[40,95013,55083],{"class":50},[40,95015,55098],{"class":46},[40,95017,54606],{"class":50},[40,95019,95020],{"class":42,"line":13166},[40,95021,1413],{"emptyLinePlaceholder":1412},[40,95023,95024,95026,95028],{"class":42,"line":13172},[40,95025,55083],{"class":50},[40,95027,53935],{"class":46},[40,95029,54606],{"class":50},[402,95031,95033],{"id":95032},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[31,95035,95037],{"className":56365,"code":95036,"language":56367,"meta":36,"style":36},"\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",[26,95038,95039,95047,95055,95060,95065,95070,95075,95079,95087],{"__ignoreMap":36},[40,95040,95041,95043,95045],{"class":42,"line":43},[40,95042,4387],{"class":50},[40,95044,55098],{"class":46},[40,95046,54606],{"class":50},[40,95048,95049,95051,95053],{"class":42,"line":54},[40,95050,55442],{"class":50},[40,95052,55111],{"class":46},[40,95054,54606],{"class":50},[40,95056,95057],{"class":42,"line":70},[40,95058,95059],{"class":50},"    let timer = null\n",[40,95061,95062],{"class":42,"line":78},[40,95063,95064],{"class":50},"    timer = setTimeout(() => {\n",[40,95066,95067],{"class":42,"line":86},[40,95068,95069],{"class":50},"      clearTimeout(timer)\n",[40,95071,95072],{"class":42,"line":100},[40,95073,95074],{"class":50},"      console.log(timer)\n",[40,95076,95077],{"class":42,"line":108},[40,95078,63523],{"class":50},[40,95080,95081,95083,95085],{"class":42,"line":121},[40,95082,55715],{"class":50},[40,95084,55111],{"class":46},[40,95086,54606],{"class":50},[40,95088,95089,95091,95093],{"class":42,"line":134},[40,95090,55083],{"class":50},[40,95092,55098],{"class":46},[40,95094,54606],{"class":50},[19,95096,95097],{},"输出为1",[19,95099,95100],{},"在开启的定时器里边写清除定时器",[19,95102,95103],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[402,95105,95107],{"id":95106},"_4174-节流综合案例","4.17.4 节流综合案例",[19,95109,95110],{},"页面打开，可以记录上一次的视频播放位置",[19,95112,95113],{},[438,95114],{"alt":36,"src":95115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,95117,95118],{},[438,95119],{"alt":36,"src":95120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[31,95122,95124],{"className":53933,"code":95123,"language":53935,"meta":36,"style":36},"\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",[26,95125,95126,95136,95150,95154,95162,95176,95196,95216,95238,95251,95259,95265,95275,95285,95295,95299,95303,95310,95323,95335,95339,95343,95353,95365,95379,95383,95387,95394,95404,95417,95429,95439,95449,95465,95477,95481,95485,95493,95503,95515,95525,95535,95545,95549,95553,95563,95574,95578,95586,95594,95598,95606,95621,95636,95651,95672,95680,95688,95703,95725,95733,95748,95774,95800,95826,95834,95842,95861,95869,95874,95893,95898,95916,95921,95926,95934,95939,95953,95961,95966,95983,95987,95992,96014,96018,96026,96034,96038],{"__ignoreMap":36},[40,95127,95128,95130,95132,95134],{"class":42,"line":43},[40,95129,54597],{"class":50},[40,95131,54600],{"class":46},[40,95133,54603],{"class":596},[40,95135,54606],{"class":50},[40,95137,95138,95140,95142,95144,95146,95148],{"class":42,"line":54},[40,95139,4387],{"class":50},[40,95141,53935],{"class":46},[40,95143,54615],{"class":596},[40,95145,1284],{"class":50},[40,95147,54620],{"class":94},[40,95149,54606],{"class":50},[40,95151,95152],{"class":42,"line":70},[40,95153,1413],{"emptyLinePlaceholder":1412},[40,95155,95156,95158,95160],{"class":42,"line":78},[40,95157,4387],{"class":50},[40,95159,54633],{"class":46},[40,95161,54606],{"class":50},[40,95163,95164,95166,95168,95170,95172,95174],{"class":42,"line":86},[40,95165,55442],{"class":50},[40,95167,54643],{"class":46},[40,95169,54646],{"class":596},[40,95171,1284],{"class":50},[40,95173,54651],{"class":94},[40,95175,62425],{"class":50},[40,95177,95178,95180,95182,95184,95186,95188,95190,95192,95194],{"class":42,"line":100},[40,95179,55442],{"class":50},[40,95181,54643],{"class":46},[40,95183,54662],{"class":596},[40,95185,1284],{"class":50},[40,95187,54667],{"class":94},[40,95189,54670],{"class":596},[40,95191,1284],{"class":50},[40,95193,54675],{"class":94},[40,95195,62425],{"class":50},[40,95197,95198,95200,95202,95204,95206,95208,95210,95212,95214],{"class":42,"line":108},[40,95199,55442],{"class":50},[40,95201,54643],{"class":46},[40,95203,18242],{"class":596},[40,95205,1284],{"class":50},[40,95207,54690],{"class":94},[40,95209,54670],{"class":596},[40,95211,1284],{"class":50},[40,95213,54697],{"class":94},[40,95215,62425],{"class":50},[40,95217,95218,95220,95222,95224,95226,95229,95231,95233,95236],{"class":42,"line":121},[40,95219,55442],{"class":50},[40,95221,54643],{"class":46},[40,95223,18242],{"class":596},[40,95225,1284],{"class":50},[40,95227,95228],{"class":94},"\"referrer\"",[40,95230,54670],{"class":596},[40,95232,1284],{"class":50},[40,95234,95235],{"class":94},"\"never\"",[40,95237,62425],{"class":50},[40,95239,95240,95242,95244,95247,95249],{"class":42,"line":134},[40,95241,55442],{"class":50},[40,95243,54706],{"class":46},[40,95245,95246],{"class":50},">综合案例\u003C\u002F",[40,95248,54706],{"class":46},[40,95250,54606],{"class":50},[40,95252,95253,95255,95257],{"class":42,"line":146},[40,95254,55442],{"class":50},[40,95256,3384],{"class":46},[40,95258,54606],{"class":50},[40,95260,95261,95263],{"class":42,"line":154},[40,95262,9726],{"class":46},[40,95264,18894],{"class":50},[40,95266,95267,95269,95271,95273],{"class":42,"line":162},[40,95268,57993],{"class":63},[40,95270,60],{"class":50},[40,95272,3672],{"class":63},[40,95274,4637],{"class":50},[40,95276,95277,95279,95281,95283],{"class":42,"line":170},[40,95278,58004],{"class":63},[40,95280,60],{"class":50},[40,95282,3672],{"class":63},[40,95284,4637],{"class":50},[40,95286,95287,95289,95291,95293],{"class":42,"line":183},[40,95288,75891],{"class":63},[40,95290,60],{"class":50},[40,95292,63803],{"class":63},[40,95294,4637],{"class":50},[40,95296,95297],{"class":42,"line":196},[40,95298,5513],{"class":50},[40,95300,95301],{"class":42,"line":204},[40,95302,1413],{"emptyLinePlaceholder":1412},[40,95304,95305,95308],{"class":42,"line":217},[40,95306,95307],{"class":596},"    .container",[40,95309,18894],{"class":50},[40,95311,95312,95314,95316,95319,95321],{"class":42,"line":230},[40,95313,58069],{"class":63},[40,95315,60],{"class":50},[40,95317,95318],{"class":63},"1200",[40,95320,54790],{"class":1283},[40,95322,4637],{"class":50},[40,95324,95325,95327,95329,95331,95333],{"class":42,"line":238},[40,95326,58004],{"class":63},[40,95328,60],{"class":50},[40,95330,3672],{"class":63},[40,95332,54854],{"class":63},[40,95334,4637],{"class":50},[40,95336,95337],{"class":42,"line":251},[40,95338,5513],{"class":50},[40,95340,95341],{"class":42,"line":264},[40,95342,1413],{"emptyLinePlaceholder":1412},[40,95344,95345,95348,95351],{"class":42,"line":277},[40,95346,95347],{"class":596},"    .video",[40,95349,95350],{"class":46}," video",[40,95352,18894],{"class":50},[40,95354,95355,95357,95359,95361,95363],{"class":42,"line":290},[40,95356,58069],{"class":63},[40,95358,60],{"class":50},[40,95360,3791],{"class":63},[40,95362,3808],{"class":1283},[40,95364,4637],{"class":50},[40,95366,95367,95369,95371,95373,95375,95377],{"class":42,"line":298},[40,95368,57993],{"class":63},[40,95370,60],{"class":50},[40,95372,4178],{"class":63},[40,95374,54790],{"class":1283},[40,95376,7416],{"class":63},[40,95378,4637],{"class":50},[40,95380,95381],{"class":42,"line":310},[40,95382,5513],{"class":50},[40,95384,95385],{"class":42,"line":5086},[40,95386,1413],{"emptyLinePlaceholder":1412},[40,95388,95389,95392],{"class":42,"line":5091},[40,95390,95391],{"class":596},"    .elevator",[40,95393,18894],{"class":50},[40,95395,95396,95398,95400,95402],{"class":42,"line":5105},[40,95397,58057],{"class":63},[40,95399,60],{"class":50},[40,95401,89528],{"class":63},[40,95403,4637],{"class":50},[40,95405,95406,95408,95410,95413,95415],{"class":42,"line":5110},[40,95407,58245],{"class":63},[40,95409,60],{"class":50},[40,95411,95412],{"class":63},"280",[40,95414,54790],{"class":1283},[40,95416,4637],{"class":50},[40,95418,95419,95421,95423,95425,95427],{"class":42,"line":5902},[40,95420,89722],{"class":63},[40,95422,60],{"class":50},[40,95424,4178],{"class":63},[40,95426,54790],{"class":1283},[40,95428,4637],{"class":50},[40,95430,95431,95433,95435,95437],{"class":42,"line":5916},[40,95432,89535],{"class":63},[40,95434,60],{"class":50},[40,95436,89540],{"class":63},[40,95438,4637],{"class":50},[40,95440,95441,95443,95445,95447],{"class":42,"line":5924},[40,95442,65019],{"class":63},[40,95444,60],{"class":50},[40,95446,64140],{"class":63},[40,95448,4637],{"class":50},[40,95450,95451,95453,95455,95457,95459,95461,95463],{"class":42,"line":5929},[40,95452,65275],{"class":63},[40,95454,60],{"class":50},[40,95456,3698],{"class":63},[40,95458,54790],{"class":1283},[40,95460,54819],{"class":63},[40,95462,65542],{"class":63},[40,95464,4637],{"class":50},[40,95466,95467,95469,95471,95473,95475],{"class":42,"line":5935},[40,95468,58069],{"class":63},[40,95470,60],{"class":50},[40,95472,4384],{"class":63},[40,95474,54790],{"class":1283},[40,95476,4637],{"class":50},[40,95478,95479],{"class":42,"line":5941},[40,95480,5513],{"class":50},[40,95482,95483],{"class":42,"line":5946},[40,95484,1413],{"emptyLinePlaceholder":1412},[40,95486,95487,95489,95491],{"class":42,"line":11270},[40,95488,95391],{"class":596},[40,95490,4741],{"class":46},[40,95492,18894],{"class":50},[40,95494,95495,95497,95499,95501],{"class":42,"line":11294},[40,95496,58307],{"class":63},[40,95498,60],{"class":50},[40,95500,64167],{"class":63},[40,95502,4637],{"class":50},[40,95504,95505,95507,95509,95511,95513],{"class":42,"line":11299},[40,95506,57993],{"class":63},[40,95508,60],{"class":50},[40,95510,3925],{"class":63},[40,95512,54790],{"class":1283},[40,95514,4637],{"class":50},[40,95516,95517,95519,95521,95523],{"class":42,"line":11305},[40,95518,67268],{"class":63},[40,95520,60],{"class":50},[40,95522,58035],{"class":63},[40,95524,4637],{"class":50},[40,95526,95527,95529,95531,95533],{"class":42,"line":11332},[40,95528,60584],{"class":63},[40,95530,60],{"class":50},[40,95532,54890],{"class":63},[40,95534,4637],{"class":50},[40,95536,95537,95539,95541,95543],{"class":42,"line":11337},[40,95538,60714],{"class":63},[40,95540,60],{"class":50},[40,95542,65368],{"class":63},[40,95544,4637],{"class":50},[40,95546,95547],{"class":42,"line":11343},[40,95548,5513],{"class":50},[40,95550,95551],{"class":42,"line":11355},[40,95552,1413],{"emptyLinePlaceholder":1412},[40,95554,95555,95557,95559,95561],{"class":42,"line":11367},[40,95556,95391],{"class":596},[40,95558,4741],{"class":46},[40,95560,67322],{"class":596},[40,95562,18894],{"class":50},[40,95564,95565,95567,95569,95572],{"class":42,"line":11379},[40,95566,60714],{"class":63},[40,95568,60],{"class":50},[40,95570,95571],{"class":63},"#1286ff",[40,95573,4637],{"class":50},[40,95575,95576],{"class":42,"line":13038},[40,95577,5513],{"class":50},[40,95579,95580,95582,95584],{"class":42,"line":13063},[40,95581,55715],{"class":50},[40,95583,3384],{"class":46},[40,95585,54606],{"class":50},[40,95587,95588,95590,95592],{"class":42,"line":13086},[40,95589,55083],{"class":50},[40,95591,54633],{"class":46},[40,95593,54606],{"class":50},[40,95595,95596],{"class":42,"line":13110},[40,95597,1413],{"emptyLinePlaceholder":1412},[40,95599,95600,95602,95604],{"class":42,"line":13115},[40,95601,4387],{"class":50},[40,95603,55098],{"class":46},[40,95605,54606],{"class":50},[40,95607,95608,95610,95612,95614,95616,95619],{"class":42,"line":13120},[40,95609,55442],{"class":50},[40,95611,54909],{"class":46},[40,95613,56784],{"class":596},[40,95615,1284],{"class":50},[40,95617,95618],{"class":94},"\"container\"",[40,95620,54606],{"class":50},[40,95622,95623,95625,95627,95629,95631,95634],{"class":42,"line":13125},[40,95624,54640],{"class":50},[40,95626,54909],{"class":46},[40,95628,56784],{"class":596},[40,95630,1284],{"class":50},[40,95632,95633],{"class":94},"\"header\"",[40,95635,54606],{"class":50},[40,95637,95638,95640,95642,95644,95646,95649],{"class":42,"line":13134},[40,95639,58532],{"class":50},[40,95641,2106],{"class":46},[40,95643,64355],{"class":596},[40,95645,1284],{"class":50},[40,95647,95648],{"class":94},"\"http:\u002F\u002Fpip.itcast.cn\"",[40,95650,54606],{"class":50},[40,95652,95653,95655,95657,95659,95661,95664,95666,95668,95670],{"class":42,"line":13139},[40,95654,58600],{"class":50},[40,95656,438],{"class":46},[40,95658,58537],{"class":596},[40,95660,1284],{"class":50},[40,95662,95663],{"class":94},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[40,95665,58545],{"class":596},[40,95667,1284],{"class":50},[40,95669,285],{"class":94},[40,95671,62425],{"class":50},[40,95673,95674,95676,95678],{"class":42,"line":13145},[40,95675,58705],{"class":50},[40,95677,2106],{"class":46},[40,95679,54606],{"class":50},[40,95681,95682,95684,95686],{"class":42,"line":13166},[40,95683,55074],{"class":50},[40,95685,54909],{"class":46},[40,95687,54606],{"class":50},[40,95689,95690,95692,95694,95696,95698,95701],{"class":42,"line":13172},[40,95691,54640],{"class":50},[40,95693,54909],{"class":46},[40,95695,56784],{"class":596},[40,95697,1284],{"class":50},[40,95699,95700],{"class":94},"\"video\"",[40,95702,54606],{"class":50},[40,95704,95705,95707,95709,95711,95713,95716,95719,95721,95723],{"class":42,"line":13186},[40,95706,58532],{"class":50},[40,95708,31488],{"class":46},[40,95710,58537],{"class":596},[40,95712,1284],{"class":50},[40,95714,95715],{"class":94},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[40,95717,95718],{"class":596}," controls",[40,95720,58612],{"class":50},[40,95722,31488],{"class":46},[40,95724,54606],{"class":50},[40,95726,95727,95729,95731],{"class":42,"line":13192},[40,95728,55074],{"class":50},[40,95730,54909],{"class":46},[40,95732,54606],{"class":50},[40,95734,95735,95737,95739,95741,95743,95746],{"class":42,"line":13219},[40,95736,54640],{"class":50},[40,95738,54909],{"class":46},[40,95740,56784],{"class":596},[40,95742,1284],{"class":50},[40,95744,95745],{"class":94},"\"elevator\"",[40,95747,54606],{"class":50},[40,95749,95750,95752,95754,95756,95758,95760,95763,95765,95767,95770,95772],{"class":42,"line":13228},[40,95751,58532],{"class":50},[40,95753,2106],{"class":46},[40,95755,64355],{"class":596},[40,95757,1284],{"class":50},[40,95759,67534],{"class":94},[40,95761,95762],{"class":596}," data-ref",[40,95764,1284],{"class":50},[40,95766,95700],{"class":94},[40,95768,95769],{"class":50},">视频介绍\u003C\u002F",[40,95771,2106],{"class":46},[40,95773,54606],{"class":50},[40,95775,95776,95778,95780,95782,95784,95786,95788,95790,95793,95796,95798],{"class":42,"line":13234},[40,95777,58532],{"class":50},[40,95779,2106],{"class":46},[40,95781,64355],{"class":596},[40,95783,1284],{"class":50},[40,95785,67534],{"class":94},[40,95787,95762],{"class":596},[40,95789,1284],{"class":50},[40,95791,95792],{"class":94},"\"intro\"",[40,95794,95795],{"class":50},">课程简介\u003C\u002F",[40,95797,2106],{"class":46},[40,95799,54606],{"class":50},[40,95801,95802,95804,95806,95808,95810,95812,95814,95816,95819,95822,95824],{"class":42,"line":13242},[40,95803,58532],{"class":50},[40,95805,2106],{"class":46},[40,95807,64355],{"class":596},[40,95809,1284],{"class":50},[40,95811,67534],{"class":94},[40,95813,95762],{"class":596},[40,95815,1284],{"class":50},[40,95817,95818],{"class":94},"\"outline\"",[40,95820,95821],{"class":50},">评论列表\u003C\u002F",[40,95823,2106],{"class":46},[40,95825,54606],{"class":50},[40,95827,95828,95830,95832],{"class":42,"line":13247},[40,95829,55074],{"class":50},[40,95831,54909],{"class":46},[40,95833,54606],{"class":50},[40,95835,95836,95838,95840],{"class":42,"line":19926},[40,95837,55715],{"class":50},[40,95839,54909],{"class":46},[40,95841,54606],{"class":50},[40,95843,95844,95846,95848,95850,95852,95855,95857,95859],{"class":42,"line":19932},[40,95845,55442],{"class":50},[40,95847,55111],{"class":46},[40,95849,58537],{"class":596},[40,95851,1284],{"class":50},[40,95853,95854],{"class":94},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[40,95856,58612],{"class":50},[40,95858,55111],{"class":46},[40,95860,54606],{"class":50},[40,95862,95863,95865,95867],{"class":42,"line":19955},[40,95864,55442],{"class":50},[40,95866,55111],{"class":46},[40,95868,54606],{"class":50},[40,95870,95871],{"class":42,"line":19961},[40,95872,95873],{"class":997},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[40,95875,95876,95878,95880,95882,95884,95886,95888,95891],{"class":42,"line":19984},[40,95877,14543],{"class":1283},[40,95879,95350],{"class":63},[40,95881,16886],{"class":1283},[40,95883,57694],{"class":50},[40,95885,57697],{"class":596},[40,95887,3488],{"class":50},[40,95889,95890],{"class":94},"'video'",[40,95892,1811],{"class":50},[40,95894,95895],{"class":42,"line":19998},[40,95896,95897],{"class":997},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[40,95899,95900,95903,95905,95907,95909,95912,95914],{"class":42,"line":20018},[40,95901,95902],{"class":50},"    video.ontimeupdate ",[40,95904,1284],{"class":1283},[40,95906,91650],{"class":50},[40,95908,94468],{"class":596},[40,95910,95911],{"class":50},"(() ",[40,95913,88017],{"class":1283},[40,95915,18894],{"class":50},[40,95917,95918],{"class":42,"line":20024},[40,95919,95920],{"class":997},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[40,95922,95923],{"class":42,"line":20035},[40,95924,95925],{"class":997},"      \u002F\u002F 控制台输出当前的时间\n",[40,95927,95928,95931],{"class":42,"line":20058},[40,95929,95930],{"class":997},"      \u002F\u002F console.log(video.currentTime)",[40,95932,95933],{"class":997},"  \u002F\u002F获得当前的视频时间\n",[40,95935,95936],{"class":42,"line":20080},[40,95937,95938],{"class":997},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[40,95940,95941,95943,95945,95947,95950],{"class":42,"line":20085},[40,95942,77978],{"class":50},[40,95944,74950],{"class":596},[40,95946,3488],{"class":50},[40,95948,95949],{"class":94},"'currentTime'",[40,95951,95952],{"class":50},", video.currentTime)\n",[40,95954,95955,95957,95959],{"class":42,"line":20091},[40,95956,57833],{"class":50},[40,95958,9733],{"class":63},[40,95960,1811],{"class":50},[40,95962,95963],{"class":42,"line":20105},[40,95964,95965],{"class":997},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[40,95967,95968,95971,95974,95976,95979,95981],{"class":42,"line":20118},[40,95969,95970],{"class":50},"    video.",[40,95972,95973],{"class":596},"onloadeddata",[40,95975,16886],{"class":1283},[40,95977,95978],{"class":50}," () ",[40,95980,88017],{"class":1283},[40,95982,18894],{"class":50},[40,95984,95985],{"class":42,"line":20123},[40,95986,63310],{"class":997},[40,95988,95989],{"class":42,"line":20137},[40,95990,95991],{"class":997},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[40,95993,95994,95997,95999,96002,96004,96006,96008,96010,96012],{"class":42,"line":20142},[40,95995,95996],{"class":50},"      video.currentTime ",[40,95998,1284],{"class":1283},[40,96000,96001],{"class":50}," localStorage.",[40,96003,74980],{"class":596},[40,96005,3488],{"class":50},[40,96007,95949],{"class":94},[40,96009,17036],{"class":50},[40,96011,74653],{"class":1283},[40,96013,50633],{"class":63},[40,96015,96016],{"class":42,"line":20148},[40,96017,5513],{"class":50},[40,96019,96020,96022,96024],{"class":42,"line":20153},[40,96021,55715],{"class":50},[40,96023,55111],{"class":46},[40,96025,54606],{"class":50},[40,96027,96028,96030,96032],{"class":42,"line":20167},[40,96029,55083],{"class":50},[40,96031,55098],{"class":46},[40,96033,54606],{"class":50},[40,96035,96036],{"class":42,"line":20172},[40,96037,1413],{"emptyLinePlaceholder":1412},[40,96039,96040,96042,96044],{"class":42,"line":20177},[40,96041,55083],{"class":50},[40,96043,53935],{"class":46},[40,96045,54606],{"class":50},[3384,96047,96048],{},"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":36,"searchDepth":54,"depth":54,"links":96050},[96051,96056,96060,96061,96062,96067,96072,96073,96074,96075,96082,96087,96088,96098,96102,96103,96107],{"id":79986,"depth":54,"text":79987,"children":96052},[96053,96054,96055],{"id":79990,"depth":70,"text":79991},{"id":80015,"depth":70,"text":80016},{"id":80027,"depth":70,"text":80028},{"id":80039,"depth":54,"text":80040,"children":96057},[96058,96059],{"id":80043,"depth":70,"text":80044},{"id":80058,"depth":70,"text":80059},{"id":80110,"depth":54,"text":80111},{"id":80154,"depth":54,"text":80155},{"id":80171,"depth":54,"text":80172,"children":96063},[96064,96065,96066],{"id":80175,"depth":70,"text":80176},{"id":80188,"depth":70,"text":80189},{"id":80293,"depth":70,"text":80294},{"id":80582,"depth":54,"text":80583,"children":96068},[96069,96070,96071],{"id":80586,"depth":70,"text":80587},{"id":81029,"depth":70,"text":81030},{"id":81440,"depth":70,"text":81441},{"id":81503,"depth":54,"text":81504},{"id":81582,"depth":54,"text":81583},{"id":81675,"depth":54,"text":81676},{"id":83520,"depth":54,"text":83521,"children":96076},[96077,96078,96079,96080,96081],{"id":83524,"depth":70,"text":83525},{"id":83536,"depth":70,"text":83537},{"id":83755,"depth":70,"text":83756},{"id":83773,"depth":70,"text":83774},{"id":83833,"depth":70,"text":83834},{"id":88101,"depth":54,"text":88102,"children":96083},[96084,96085,96086],{"id":88105,"depth":70,"text":88106},{"id":88123,"depth":70,"text":88124},{"id":88149,"depth":70,"text":88150},{"id":88158,"depth":54,"text":88159},{"id":88180,"depth":54,"text":88181,"children":96089},[96090,96091,96092,96093,96094,96095,96096,96097],{"id":88184,"depth":70,"text":88185},{"id":88445,"depth":70,"text":88446},{"id":88631,"depth":70,"text":88632},{"id":88998,"depth":70,"text":88999},{"id":89114,"depth":70,"text":89115},{"id":89150,"depth":70,"text":89151},{"id":89197,"depth":70,"text":89198},{"id":89231,"depth":70,"text":89232},{"id":90594,"depth":54,"text":90595,"children":96099},[96100,96101],{"id":90598,"depth":70,"text":90599},{"id":90635,"depth":70,"text":90636},{"id":91990,"depth":54,"text":91991},{"id":92361,"depth":54,"text":92362,"children":96104},[96105,96106],{"id":92365,"depth":70,"text":92366},{"id":92399,"depth":70,"text":92400},{"id":93128,"depth":54,"text":93129,"children":96108},[96109,96110,96111,96112],{"id":93132,"depth":70,"text":93133},{"id":94090,"depth":70,"text":94091},{"id":95032,"depth":70,"text":95033},{"id":95106,"depth":70,"text":95107},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":79975,"description":3413},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":96119,"title":96120,"body":96121,"description":96132,"extension":3414,"meta":96133,"navigation":1412,"path":96135,"seo":96136,"stem":96137,"__hash__":96138},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":96122,"toc":96130},[96123],[19,96124,96125,96126],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[2106,96127,96128],{"href":96128,"rel":96129},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[2110],{"title":36,"searchDepth":54,"depth":54,"links":96131},[],"三件套第三套学习",{"category":96134},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":96120,"description":96132},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":96140,"title":96141,"body":96142,"description":3413,"extension":3414,"meta":96247,"navigation":1412,"path":96248,"seo":96249,"stem":96250,"__hash__":96251},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":96143,"toc":96242},[96144,96151,96154,96157,96160,96164,96173,96176,96179,96183,96192,96195,96199,96202,96222,96225,96239],[19,96145,96146],{},[2106,96147,96150],{"href":96148,"rel":96149},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[2110],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,96152,96141],{"id":96153},"_1安装",[19,96155,96156],{},"numpy是科学计算基础库,底层是C语言",[19,96158,96159],{},"三种方式：",[14,96161,96163],{"id":96162},"_11-通过pip安装","1.1 通过pip安装",[31,96165,96167],{"className":33679,"code":96166,"language":2323,"meta":36,"style":36},"pip install numpy\n",[26,96168,96169],{"__ignoreMap":36},[40,96170,96171],{"class":42,"line":43},[40,96172,96166],{"class":50},[19,96174,96175],{},"首选方式，自动处理依赖项",[19,96177,96178],{},"在提示系统命令符中使用cmd",[14,96180,96182],{"id":96181},"_12-通过anaconda安装","1.2 通过Anaconda安装",[31,96184,96186],{"className":33679,"code":96185,"language":2323,"meta":36,"style":36},"conda install numpy\n",[26,96187,96188],{"__ignoreMap":36},[40,96189,96190],{"class":42,"line":43},[40,96191,96185],{"class":50},[19,96193,96194],{},"自动解决环境依赖",[14,96196,96198],{"id":96197},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,96200,96201],{},"对于Debian\u002FUbuntu",[31,96203,96205],{"className":33679,"code":96204,"language":2323,"meta":36,"style":36},"sudo apt-get install python3-numpy\n",[26,96206,96207],{"__ignoreMap":36},[40,96208,96209,96212,96214,96217,96219],{"class":42,"line":43},[40,96210,96211],{"class":50},"sudo apt",[40,96213,4011],{"class":1283},[40,96215,96216],{"class":50},"get install python3",[40,96218,4011],{"class":1283},[40,96220,96221],{"class":50},"numpy\n",[19,96223,96224],{},"对于Fedora:",[31,96226,96228],{"className":33679,"code":96227,"language":2323,"meta":36,"style":36},"sudo dnf install python3-numpy\n",[26,96229,96230],{"__ignoreMap":36},[40,96231,96232,96235,96237],{"class":42,"line":43},[40,96233,96234],{"class":50},"sudo dnf install python3",[40,96236,4011],{"class":1283},[40,96238,96221],{"class":50},[3384,96240,96241],{},"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":36,"searchDepth":54,"depth":54,"links":96243},[96244,96245,96246],{"id":96162,"depth":54,"text":96163},{"id":96181,"depth":54,"text":96182},{"id":96197,"depth":54,"text":96198},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":96141,"description":3413},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":96253,"title":96254,"body":96255,"description":3413,"extension":3414,"meta":96368,"navigation":1412,"path":96369,"seo":96370,"stem":96371,"__hash__":96372},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":96256,"toc":96366},[96257,96260,96263,96266,96269,96272,96275,96278,96281,96284,96360,96363],[10,96258,96254],{"id":96259},"_10算数函数",[19,96261,96262],{},"加减乘除运算跟python基础语法没区别",[19,96264,96265],{},"除了python那种方法外还可以使用函数",[19,96267,96268],{},"加：np.add(a,b)",[19,96270,96271],{},"减：np.subtract(a,b)",[19,96273,96274],{},"乘：np.multiply(a,b)",[19,96276,96277],{},"除：np.divide(a,b) == a\u002Fb",[19,96279,96280],{},"取余：np.mod(a,b) == a%b",[19,96282,96283],{},"必须会的用法：",[31,96285,96287],{"className":33679,"code":96286,"language":2323,"meta":36,"style":36},"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",[26,96288,96289,96311,96332,96342,96355],{"__ignoreMap":36},[40,96290,96291,96293,96295,96298,96300,96303,96305,96307,96309],{"class":42,"line":43},[40,96292,2106],{"class":50},[40,96294,1284],{"class":1283},[40,96296,96297],{"class":50},"np.arange(",[40,96299,3899],{"class":63},[40,96301,96302],{"class":50},").reshape(",[40,96304,3555],{"class":63},[40,96306,1299],{"class":50},[40,96308,3555],{"class":63},[40,96310,1811],{"class":50},[40,96312,96313,96315,96317,96320,96322,96324,96326,96328,96330],{"class":42,"line":54},[40,96314,3743],{"class":50},[40,96316,1284],{"class":1283},[40,96318,96319],{"class":50},"np.array([",[40,96321,3925],{"class":63},[40,96323,1299],{"class":50},[40,96325,3925],{"class":63},[40,96327,1299],{"class":50},[40,96329,3925],{"class":63},[40,96331,7980],{"class":50},[40,96333,96334,96337,96339],{"class":42,"line":70},[40,96335,96336],{"class":50},"result",[40,96338,1284],{"class":1283},[40,96340,96341],{"class":50},"np.empty_like(a)\n",[40,96343,96344,96347,96350,96352],{"class":42,"line":78},[40,96345,96346],{"class":50},"np.add(a,b,",[40,96348,96349],{"class":8539},"out",[40,96351,1284],{"class":1283},[40,96353,96354],{"class":50},"result)\n",[40,96356,96357],{"class":42,"line":86},[40,96358,96359],{"class":50},"result\n",[19,96361,96362],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[3384,96364,96365],{},"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":36,"searchDepth":54,"depth":54,"links":96367},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":96254,"description":3413},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":96374,"title":96375,"body":96376,"description":3413,"extension":3414,"meta":97138,"navigation":1412,"path":97139,"seo":97140,"stem":97141,"__hash__":97142},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":96377,"toc":97125},[96378,96381,96384,96387,96391,96430,96434,96478,96538,96542,96545,96584,96587,96632,96636,96672,96676,96745,96749,96813,96817,96820,96823,96826,96829,96865,96869,96909,96913,96985,96988,96992,97055,97059,97122],[10,96379,96375],{"id":96380},"_11统计函数",[19,96382,96383],{},"sum max min mean",[19,96385,96386],{},"这些有axis参数，可以指定方向",[14,96388,96390],{"id":96389},"_111-sum求和函数","11.1 sum()求和函数",[31,96392,96394],{"className":33679,"code":96393,"language":2323,"meta":36,"style":36},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[26,96395,96396,96401,96422],{"__ignoreMap":36},[40,96397,96398],{"class":42,"line":43},[40,96399,96400],{"class":997},"#创建一维数组\n",[40,96402,96403,96405,96407,96410,96412,96414,96416,96418,96420],{"class":42,"line":54},[40,96404,2106],{"class":50},[40,96406,1284],{"class":1283},[40,96408,96409],{"class":50},"np.random.randint(",[40,96411,3698],{"class":63},[40,96413,1299],{"class":50},[40,96415,3791],{"class":63},[40,96417,1299],{"class":50},[40,96419,4178],{"class":63},[40,96421,1811],{"class":50},[40,96423,96424,96427],{"class":42,"line":70},[40,96425,96426],{"class":50},"np.sum(a)",[40,96428,96429],{"class":997},"#求和\n",[14,96431,96433],{"id":96432},"_112-max求最大值函数","11.2 max()求最大值函数",[31,96435,96437],{"className":33679,"code":96436,"language":2323,"meta":36,"style":36},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[26,96438,96439,96443,96463,96468,96473],{"__ignoreMap":36},[40,96440,96441],{"class":42,"line":43},[40,96442,96400],{"class":997},[40,96444,96445,96447,96449,96451,96453,96455,96457,96459,96461],{"class":42,"line":54},[40,96446,2106],{"class":50},[40,96448,1284],{"class":1283},[40,96450,96409],{"class":50},[40,96452,3698],{"class":63},[40,96454,1299],{"class":50},[40,96456,3791],{"class":63},[40,96458,1299],{"class":50},[40,96460,4178],{"class":63},[40,96462,1811],{"class":50},[40,96464,96465],{"class":42,"line":70},[40,96466,96467],{"class":50},"np.max(a)\n",[40,96469,96470],{"class":42,"line":78},[40,96471,96472],{"class":997},"#最大索引(求最大元素的索引)arg\n",[40,96474,96475],{"class":42,"line":86},[40,96476,96477],{"class":50},"np.argmax(a)\n",[31,96479,96481],{"className":33679,"code":96480,"language":2323,"meta":36,"style":36},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[26,96482,96483,96504,96524,96528],{"__ignoreMap":36},[40,96484,96485,96487,96489,96492,96494,96496,96498,96500,96502],{"class":42,"line":43},[40,96486,14241],{"class":50},[40,96488,1284],{"class":1283},[40,96490,96491],{"class":50}," np.array([",[40,96493,3698],{"class":63},[40,96495,15757],{"class":50},[40,96497,3799],{"class":63},[40,96499,15757],{"class":50},[40,96501,3555],{"class":63},[40,96503,7980],{"class":50},[40,96505,96506,96508,96510,96512,96514,96516,96518,96520,96522],{"class":42,"line":54},[40,96507,14267],{"class":50},[40,96509,1284],{"class":1283},[40,96511,96491],{"class":50},[40,96513,3555],{"class":63},[40,96515,15757],{"class":50},[40,96517,64],{"class":63},[40,96519,15757],{"class":50},[40,96521,3773],{"class":63},[40,96523,7980],{"class":50},[40,96525,96526],{"class":42,"line":70},[40,96527,1413],{"emptyLinePlaceholder":1412},[40,96529,96530,96532,96535],{"class":42,"line":78},[40,96531,33715],{"class":63},[40,96533,96534],{"class":50},"(np.maximum(a, b))   ",[40,96536,96537],{"class":997},"# [3 5 4]，每个位置上取较大值\n",[14,96539,96541],{"id":96540},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,96543,96544],{},"①一维数组：",[31,96546,96548],{"className":33679,"code":96547,"language":2323,"meta":36,"style":36},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[26,96549,96550,96554,96574,96579],{"__ignoreMap":36},[40,96551,96552],{"class":42,"line":43},[40,96553,96400],{"class":997},[40,96555,96556,96558,96560,96562,96564,96566,96568,96570,96572],{"class":42,"line":54},[40,96557,2106],{"class":50},[40,96559,1284],{"class":1283},[40,96561,96409],{"class":50},[40,96563,3698],{"class":63},[40,96565,1299],{"class":50},[40,96567,3791],{"class":63},[40,96569,1299],{"class":50},[40,96571,4178],{"class":63},[40,96573,1811],{"class":50},[40,96575,96576],{"class":42,"line":70},[40,96577,96578],{"class":997},"#求平均值\n",[40,96580,96581],{"class":42,"line":78},[40,96582,96583],{"class":50},"np.mean(a)\n",[19,96585,96586],{},"②二维数组",[31,96588,96590],{"className":33679,"code":96589,"language":2323,"meta":36,"style":36},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[26,96591,96592,96597,96622,96627],{"__ignoreMap":36},[40,96593,96594],{"class":42,"line":43},[40,96595,96596],{"class":997},"#二维数组\n",[40,96598,96599,96602,96604,96606,96608,96610,96612,96614,96616,96618,96620],{"class":42,"line":54},[40,96600,96601],{"class":50},"aa",[40,96603,1284],{"class":1283},[40,96605,96297],{"class":50},[40,96607,3698],{"class":63},[40,96609,1299],{"class":50},[40,96611,4002],{"class":63},[40,96613,96302],{"class":50},[40,96615,3555],{"class":63},[40,96617,1299],{"class":50},[40,96619,3773],{"class":63},[40,96621,1811],{"class":50},[40,96623,96624],{"class":42,"line":70},[40,96625,96626],{"class":997},"#对数组中的所有数求平均\n",[40,96628,96629],{"class":42,"line":78},[40,96630,96631],{"class":50},"np.mean(aa)\n",[14,96633,96635],{"id":96634},"_114-median求中位数函数","11.4 median()求中位数函数",[31,96637,96639],{"className":33679,"code":96638,"language":2323,"meta":36,"style":36},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[26,96640,96641,96646,96662,96667],{"__ignoreMap":36},[40,96642,96643],{"class":42,"line":43},[40,96644,96645],{"class":997},"#求中位数\n",[40,96647,96648,96650,96652,96654,96656,96658,96660],{"class":42,"line":54},[40,96649,3743],{"class":50},[40,96651,1284],{"class":1283},[40,96653,96297],{"class":50},[40,96655,3698],{"class":63},[40,96657,1299],{"class":50},[40,96659,3925],{"class":63},[40,96661,1811],{"class":50},[40,96663,96664],{"class":42,"line":70},[40,96665,96666],{"class":50},"np.median(b)\n",[40,96668,96669],{"class":42,"line":78},[40,96670,96671],{"class":997},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,96673,96675],{"id":96674},"_115-power求幂运算函数","11.5 power()求幂运算函数",[31,96677,96679],{"className":33679,"code":96678,"language":2323,"meta":36,"style":36},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[26,96680,96681,96697,96702,96707,96716,96721,96730],{"__ignoreMap":36},[40,96682,96683,96685,96687,96689,96691,96693,96695],{"class":42,"line":43},[40,96684,3743],{"class":50},[40,96686,1284],{"class":1283},[40,96688,96297],{"class":50},[40,96690,3698],{"class":63},[40,96692,1299],{"class":50},[40,96694,3925],{"class":63},[40,96696,1811],{"class":50},[40,96698,96699],{"class":42,"line":54},[40,96700,96701],{"class":997},"#幂运算\n",[40,96703,96704],{"class":42,"line":70},[40,96705,96706],{"class":997},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[40,96708,96709,96712,96714],{"class":42,"line":78},[40,96710,96711],{"class":50},"np.power(b,",[40,96713,64],{"class":63},[40,96715,1811],{"class":50},[40,96717,96718],{"class":42,"line":86},[40,96719,96720],{"class":997},"#或者以下代码，将数据存储起来\n",[40,96722,96723,96725,96727],{"class":42,"line":100},[40,96724,4322],{"class":50},[40,96726,1284],{"class":1283},[40,96728,96729],{"class":50},"np.empty_like(b)\n",[40,96731,96732,96734,96736,96738,96740,96742],{"class":42,"line":108},[40,96733,96711],{"class":50},[40,96735,64],{"class":63},[40,96737,1299],{"class":50},[40,96739,96349],{"class":8539},[40,96741,1284],{"class":1283},[40,96743,96744],{"class":50},"y)\n",[14,96746,96748],{"id":96747},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[31,96750,96752],{"className":33679,"code":96751,"language":2323,"meta":36,"style":36},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[26,96753,96754,96770,96775,96780,96784,96802],{"__ignoreMap":36},[40,96755,96756,96758,96760,96762,96764,96766,96768],{"class":42,"line":43},[40,96757,3743],{"class":50},[40,96759,1284],{"class":1283},[40,96761,96297],{"class":50},[40,96763,3698],{"class":63},[40,96765,1299],{"class":50},[40,96767,3925],{"class":63},[40,96769,1811],{"class":50},[40,96771,96772],{"class":42,"line":54},[40,96773,96774],{"class":997},"#开方\n",[40,96776,96777],{"class":42,"line":70},[40,96778,96779],{"class":50},"np.sqrt(b)\n",[40,96781,96782],{"class":42,"line":78},[40,96783,96720],{"class":997},[40,96785,96786,96788,96790,96793,96796,96798,96800],{"class":42,"line":86},[40,96787,4322],{"class":50},[40,96789,1284],{"class":1283},[40,96791,96792],{"class":50},"np.empty_like(b,",[40,96794,96795],{"class":8539},"dtype",[40,96797,1284],{"class":1283},[40,96799,3526],{"class":63},[40,96801,1811],{"class":50},[40,96803,96804,96807,96809,96811],{"class":42,"line":100},[40,96805,96806],{"class":50},"np.sqrt(b,",[40,96808,96349],{"class":8539},[40,96810,1284],{"class":1283},[40,96812,96744],{"class":50},[14,96814,96816],{"id":96815},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,96818,96819],{},"对数组中的元素累计求和，可指定轴",[19,96821,96822],{},"#累计求和的意思是：",[19,96824,96825],{},"a = np.array([1, 2, 3, 4])",[19,96827,96828],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[31,96830,96832],{"className":33679,"code":96831,"language":2323,"meta":36,"style":36},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[26,96833,96834,96850,96855,96860],{"__ignoreMap":36},[40,96835,96836,96838,96840,96842,96844,96846,96848],{"class":42,"line":43},[40,96837,3743],{"class":50},[40,96839,1284],{"class":1283},[40,96841,96297],{"class":50},[40,96843,3698],{"class":63},[40,96845,1299],{"class":50},[40,96847,3925],{"class":63},[40,96849,1811],{"class":50},[40,96851,96852],{"class":42,"line":54},[40,96853,96854],{"class":50},"np.cumsum(b)\n",[40,96856,96857],{"class":42,"line":70},[40,96858,96859],{"class":997},"#结果：\n",[40,96861,96862],{"class":42,"line":78},[40,96863,96864],{"class":997},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,96866,96868],{"id":96867},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[31,96870,96872],{"className":33679,"code":96871,"language":2323,"meta":36,"style":36},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[26,96873,96874,96890,96895,96900,96904],{"__ignoreMap":36},[40,96875,96876,96878,96880,96882,96884,96886,96888],{"class":42,"line":43},[40,96877,3743],{"class":50},[40,96879,1284],{"class":1283},[40,96881,96297],{"class":50},[40,96883,3698],{"class":63},[40,96885,1299],{"class":50},[40,96887,3925],{"class":63},[40,96889,1811],{"class":50},[40,96891,96892],{"class":42,"line":54},[40,96893,96894],{"class":997},"#对数组中的元素累计求积，可指定轴\n",[40,96896,96897],{"class":42,"line":70},[40,96898,96899],{"class":50},"np.cumprod(b)\n",[40,96901,96902],{"class":42,"line":78},[40,96903,96859],{"class":997},[40,96905,96906],{"class":42,"line":86},[40,96907,96908],{"class":997},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,96910,96912],{"id":96911},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[31,96914,96916],{"className":33679,"code":96915,"language":2323,"meta":36,"style":36},"#删除数组中的重复数据，并对数据进行排序\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",[26,96917,96918,96923,96971,96976,96980],{"__ignoreMap":36},[40,96919,96920],{"class":42,"line":43},[40,96921,96922],{"class":997},"#删除数组中的重复数据，并对数据进行排序\n",[40,96924,96925,96927,96929,96931,96933,96935,96937,96939,96941,96943,96945,96947,96949,96951,96953,96955,96957,96959,96961,96963,96965,96967,96969],{"class":42,"line":54},[40,96926,2106],{"class":50},[40,96928,1284],{"class":1283},[40,96930,96319],{"class":50},[40,96932,3698],{"class":63},[40,96934,1299],{"class":50},[40,96936,64],{"class":63},[40,96938,1299],{"class":50},[40,96940,3555],{"class":63},[40,96942,1299],{"class":50},[40,96944,3977],{"class":63},[40,96946,1299],{"class":50},[40,96948,3555],{"class":63},[40,96950,1299],{"class":50},[40,96952,3925],{"class":63},[40,96954,1299],{"class":50},[40,96956,3678],{"class":63},[40,96958,1299],{"class":50},[40,96960,3672],{"class":63},[40,96962,1299],{"class":50},[40,96964,4253],{"class":63},[40,96966,1299],{"class":50},[40,96968,3773],{"class":63},[40,96970,7980],{"class":50},[40,96972,96973],{"class":42,"line":70},[40,96974,96975],{"class":50},"np.unique(a)\n",[40,96977,96978],{"class":42,"line":78},[40,96979,96859],{"class":997},[40,96981,96982],{"class":42,"line":86},[40,96983,96984],{"class":997},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,96986,96987],{},"升序形式排序",[14,96989,96991],{"id":96990},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[31,96993,96995],{"className":33679,"code":96994,"language":2323,"meta":36,"style":36},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[26,96996,96997,97045,97050],{"__ignoreMap":36},[40,96998,96999,97001,97003,97005,97007,97009,97011,97013,97015,97017,97019,97021,97023,97025,97027,97029,97031,97033,97035,97037,97039,97041,97043],{"class":42,"line":43},[40,97000,2106],{"class":50},[40,97002,1284],{"class":1283},[40,97004,96319],{"class":50},[40,97006,3698],{"class":63},[40,97008,1299],{"class":50},[40,97010,64],{"class":63},[40,97012,1299],{"class":50},[40,97014,3555],{"class":63},[40,97016,1299],{"class":50},[40,97018,3977],{"class":63},[40,97020,1299],{"class":50},[40,97022,3555],{"class":63},[40,97024,1299],{"class":50},[40,97026,3925],{"class":63},[40,97028,1299],{"class":50},[40,97030,3678],{"class":63},[40,97032,1299],{"class":50},[40,97034,3672],{"class":63},[40,97036,1299],{"class":50},[40,97038,4253],{"class":63},[40,97040,1299],{"class":50},[40,97042,3773],{"class":63},[40,97044,7980],{"class":50},[40,97046,97047],{"class":42,"line":54},[40,97048,97049],{"class":997},"#返回数组中非零元素的索引\n",[40,97051,97052],{"class":42,"line":70},[40,97053,97054],{"class":50},"np.nonzero(a)\n",[14,97056,97058],{"id":97057},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[31,97060,97062],{"className":33679,"code":97061,"language":2323,"meta":36,"style":36},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[26,97063,97064,97112,97117],{"__ignoreMap":36},[40,97065,97066,97068,97070,97072,97074,97076,97078,97080,97082,97084,97086,97088,97090,97092,97094,97096,97098,97100,97102,97104,97106,97108,97110],{"class":42,"line":43},[40,97067,2106],{"class":50},[40,97069,1284],{"class":1283},[40,97071,96319],{"class":50},[40,97073,3698],{"class":63},[40,97075,1299],{"class":50},[40,97077,64],{"class":63},[40,97079,1299],{"class":50},[40,97081,3555],{"class":63},[40,97083,1299],{"class":50},[40,97085,3977],{"class":63},[40,97087,1299],{"class":50},[40,97089,3555],{"class":63},[40,97091,1299],{"class":50},[40,97093,3925],{"class":63},[40,97095,1299],{"class":50},[40,97097,3678],{"class":63},[40,97099,1299],{"class":50},[40,97101,3672],{"class":63},[40,97103,1299],{"class":50},[40,97105,4253],{"class":63},[40,97107,1299],{"class":50},[40,97109,3773],{"class":63},[40,97111,7980],{"class":50},[40,97113,97114],{"class":42,"line":54},[40,97115,97116],{"class":997},"#计算一组数中最大值与最小值的差，可指定轴\n",[40,97118,97119],{"class":42,"line":70},[40,97120,97121],{"class":50},"np.ptp(a)\n",[3384,97123,97124],{},"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":36,"searchDepth":54,"depth":54,"links":97126},[97127,97128,97129,97130,97131,97132,97133,97134,97135,97136,97137],{"id":96389,"depth":54,"text":96390},{"id":96432,"depth":54,"text":96433},{"id":96540,"depth":54,"text":96541},{"id":96634,"depth":54,"text":96635},{"id":96674,"depth":54,"text":96675},{"id":96747,"depth":54,"text":96748},{"id":96815,"depth":54,"text":96816},{"id":96867,"depth":54,"text":96868},{"id":96911,"depth":54,"text":96912},{"id":96990,"depth":54,"text":96991},{"id":97057,"depth":54,"text":97058},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":96375,"description":3413},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":97144,"title":97145,"body":97146,"description":3413,"extension":3414,"meta":97801,"navigation":1412,"path":97802,"seo":97803,"stem":97804,"__hash__":97805},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":97147,"toc":97789},[97148,97151,97155,97158,97374,97378,97381,97590,97594,97660,97665,97669,97672,97675,97713,97717,97720,97725,97729,97732,97735,97740,97744,97747,97751,97754,97757,97762,97766,97769,97772,97777,97781,97786],[10,97149,97145],{"id":97150},"_12其他常用函数",[14,97152,97154],{"id":97153},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,97156,97157],{},"将数组的数据按照行列复制扩展",[31,97159,97161],{"className":33679,"code":97160,"language":2323,"meta":36,"style":36},"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",[26,97162,97163,97179,97188,97192,97197,97202,97215,97219,97224,97229,97234,97238,97243,97267,97279,97283,97287,97292,97297,97302,97307,97311,97324,97328,97332,97337,97342,97347,97352,97357,97361,97365,97370],{"__ignoreMap":36},[40,97164,97165,97167,97169,97171,97173,97175,97177],{"class":42,"line":43},[40,97166,2106],{"class":50},[40,97168,1284],{"class":1283},[40,97170,96297],{"class":50},[40,97172,3698],{"class":63},[40,97174,1299],{"class":50},[40,97176,3799],{"class":63},[40,97178,1811],{"class":50},[40,97180,97181,97184,97186],{"class":42,"line":54},[40,97182,97183],{"class":50},"np.tile(a,",[40,97185,64],{"class":63},[40,97187,1811],{"class":50},[40,97189,97190],{"class":42,"line":70},[40,97191,96859],{"class":997},[40,97193,97194],{"class":42,"line":78},[40,97195,97196],{"class":997},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[40,97198,97199],{"class":42,"line":86},[40,97200,97201],{"class":997},"#行复制两次，列复制三次\n",[40,97203,97204,97207,97209,97211,97213],{"class":42,"line":100},[40,97205,97206],{"class":50},"np.tile(a,(",[40,97208,64],{"class":63},[40,97210,1299],{"class":50},[40,97212,3555],{"class":63},[40,97214,33797],{"class":50},[40,97216,97217],{"class":42,"line":108},[40,97218,96859],{"class":997},[40,97220,97221],{"class":42,"line":121},[40,97222,97223],{"class":94},"'''\n",[40,97225,97226],{"class":42,"line":134},[40,97227,97228],{"class":94},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[40,97230,97231],{"class":42,"line":146},[40,97232,97233],{"class":94},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[40,97235,97236],{"class":42,"line":154},[40,97237,97223],{"class":94},[40,97239,97240],{"class":42,"line":162},[40,97241,97242],{"class":997},"#创建二维数组\n",[40,97244,97245,97247,97249,97251,97253,97255,97257,97259,97261,97263,97265],{"class":42,"line":170},[40,97246,96601],{"class":50},[40,97248,1284],{"class":1283},[40,97250,96297],{"class":50},[40,97252,3698],{"class":63},[40,97254,1299],{"class":50},[40,97256,4002],{"class":63},[40,97258,96302],{"class":50},[40,97260,3773],{"class":63},[40,97262,1299],{"class":50},[40,97264,3555],{"class":63},[40,97266,1811],{"class":50},[40,97268,97269,97272,97274,97276],{"class":42,"line":183},[40,97270,97271],{"class":50},"np.tile(aa,",[40,97273,64],{"class":63},[40,97275,3908],{"class":50},[40,97277,97278],{"class":997},"#一个数的时候就是行\n",[40,97280,97281],{"class":42,"line":196},[40,97282,96859],{"class":997},[40,97284,97285],{"class":42,"line":204},[40,97286,97223],{"class":94},[40,97288,97289],{"class":42,"line":217},[40,97290,97291],{"class":94},"array([[ 1,  2,  3,  1,  2,  3],\n",[40,97293,97294],{"class":42,"line":230},[40,97295,97296],{"class":94},"       [ 4,  5,  6,  4,  5,  6],\n",[40,97298,97299],{"class":42,"line":238},[40,97300,97301],{"class":94},"       [ 7,  8,  9,  7,  8,  9],\n",[40,97303,97304],{"class":42,"line":251},[40,97305,97306],{"class":94},"       [10, 11, 12, 10, 11, 12]])\n",[40,97308,97309],{"class":42,"line":264},[40,97310,97223],{"class":94},[40,97312,97313,97316,97318,97320,97322],{"class":42,"line":277},[40,97314,97315],{"class":50},"np.tile(aa,(",[40,97317,64],{"class":63},[40,97319,1299],{"class":50},[40,97321,3555],{"class":63},[40,97323,33797],{"class":50},[40,97325,97326],{"class":42,"line":290},[40,97327,96859],{"class":997},[40,97329,97330],{"class":42,"line":298},[40,97331,97223],{"class":94},[40,97333,97334],{"class":42,"line":310},[40,97335,97336],{"class":94},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[40,97338,97339],{"class":42,"line":5086},[40,97340,97341],{"class":94},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[40,97343,97344],{"class":42,"line":5091},[40,97345,97346],{"class":94},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[40,97348,97349],{"class":42,"line":5105},[40,97350,97351],{"class":94},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[40,97353,97354],{"class":42,"line":5110},[40,97355,97356],{"class":94},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[40,97358,97359],{"class":42,"line":5902},[40,97360,97341],{"class":94},[40,97362,97363],{"class":42,"line":5916},[40,97364,97346],{"class":94},[40,97366,97367],{"class":42,"line":5924},[40,97368,97369],{"class":94},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[40,97371,97372],{"class":42,"line":5929},[40,97373,97223],{"class":94},[14,97375,97377],{"id":97376},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,97379,97380],{},"repeat()将数组中的每个元素重复若干次",[31,97382,97384],{"className":33679,"code":97383,"language":2323,"meta":36,"style":36},"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",[26,97385,97386,97402,97411,97415,97420,97444,97449,97458,97462,97467,97471,97476,97492,97496,97500,97505,97510,97515,97519,97524,97528,97533,97538,97542,97558,97562,97566,97571,97576,97581,97586],{"__ignoreMap":36},[40,97387,97388,97390,97392,97394,97396,97398,97400],{"class":42,"line":43},[40,97389,2106],{"class":50},[40,97391,1284],{"class":1283},[40,97393,96297],{"class":50},[40,97395,3698],{"class":63},[40,97397,1299],{"class":50},[40,97399,3799],{"class":63},[40,97401,1811],{"class":50},[40,97403,97404,97407,97409],{"class":42,"line":54},[40,97405,97406],{"class":50},"np.repeat(a,",[40,97408,3555],{"class":63},[40,97410,1811],{"class":50},[40,97412,97413],{"class":42,"line":70},[40,97414,96859],{"class":997},[40,97416,97417],{"class":42,"line":78},[40,97418,97419],{"class":997},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[40,97421,97422,97424,97426,97428,97430,97432,97434,97436,97438,97440,97442],{"class":42,"line":86},[40,97423,96601],{"class":50},[40,97425,1284],{"class":1283},[40,97427,96297],{"class":50},[40,97429,3698],{"class":63},[40,97431,1299],{"class":50},[40,97433,4002],{"class":63},[40,97435,96302],{"class":50},[40,97437,3773],{"class":63},[40,97439,1299],{"class":50},[40,97441,3555],{"class":63},[40,97443,1811],{"class":50},[40,97445,97446],{"class":42,"line":100},[40,97447,97448],{"class":997},"#这个重复之后二维变成一维\n",[40,97450,97451,97454,97456],{"class":42,"line":108},[40,97452,97453],{"class":50},"np.repeat(aa,",[40,97455,64],{"class":63},[40,97457,1811],{"class":50},[40,97459,97460],{"class":42,"line":121},[40,97461,97223],{"class":94},[40,97463,97464],{"class":42,"line":134},[40,97465,97466],{"class":94},"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",[40,97468,97469],{"class":42,"line":146},[40,97470,97223],{"class":94},[40,97472,97473],{"class":42,"line":154},[40,97474,97475],{"class":997},"#指定axis\n",[40,97477,97478,97480,97482,97484,97486,97488,97490],{"class":42,"line":162},[40,97479,97453],{"class":50},[40,97481,64],{"class":63},[40,97483,1299],{"class":50},[40,97485,50814],{"class":8539},[40,97487,1284],{"class":1283},[40,97489,3672],{"class":63},[40,97491,1811],{"class":50},[40,97493,97494],{"class":42,"line":170},[40,97495,96859],{"class":997},[40,97497,97498],{"class":42,"line":183},[40,97499,97223],{"class":94},[40,97501,97502],{"class":42,"line":196},[40,97503,97504],{"class":94},"array([[ 1,  2,  3],\n",[40,97506,97507],{"class":42,"line":204},[40,97508,97509],{"class":94},"       [ 1,  2,  3],\n",[40,97511,97512],{"class":42,"line":217},[40,97513,97514],{"class":94},"       [ 4,  5,  6],\n",[40,97516,97517],{"class":42,"line":230},[40,97518,97514],{"class":94},[40,97520,97521],{"class":42,"line":238},[40,97522,97523],{"class":94},"       [ 7,  8,  9],\n",[40,97525,97526],{"class":42,"line":251},[40,97527,97523],{"class":94},[40,97529,97530],{"class":42,"line":264},[40,97531,97532],{"class":94},"       [10, 11, 12],\n",[40,97534,97535],{"class":42,"line":277},[40,97536,97537],{"class":94},"       [10, 11, 12]])\n",[40,97539,97540],{"class":42,"line":290},[40,97541,97223],{"class":94},[40,97543,97544,97546,97548,97550,97552,97554,97556],{"class":42,"line":298},[40,97545,97453],{"class":50},[40,97547,64],{"class":63},[40,97549,1299],{"class":50},[40,97551,50814],{"class":8539},[40,97553,1284],{"class":1283},[40,97555,3698],{"class":63},[40,97557,1811],{"class":50},[40,97559,97560],{"class":42,"line":310},[40,97561,96859],{"class":997},[40,97563,97564],{"class":42,"line":5086},[40,97565,97223],{"class":94},[40,97567,97568],{"class":42,"line":5091},[40,97569,97570],{"class":94},"array([[ 1,  1,  2,  2,  3,  3],\n",[40,97572,97573],{"class":42,"line":5105},[40,97574,97575],{"class":94},"       [ 4,  4,  5,  5,  6,  6],\n",[40,97577,97578],{"class":42,"line":5110},[40,97579,97580],{"class":94},"       [ 7,  7,  8,  8,  9,  9],\n",[40,97582,97583],{"class":42,"line":5902},[40,97584,97585],{"class":94},"       [10, 10, 11, 11, 12, 12]])\n",[40,97587,97588],{"class":42,"line":5916},[40,97589,97223],{"class":94},[14,97591,97593],{"id":97592},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[31,97595,97597],{"className":33679,"code":97596,"language":2323,"meta":36,"style":36},"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",[26,97598,97599,97615,97620,97632,97636,97641,97651,97655],{"__ignoreMap":36},[40,97600,97601,97603,97605,97607,97609,97611,97613],{"class":42,"line":43},[40,97602,2106],{"class":50},[40,97604,1284],{"class":1283},[40,97606,96297],{"class":50},[40,97608,3698],{"class":63},[40,97610,1299],{"class":50},[40,97612,3799],{"class":63},[40,97614,1811],{"class":50},[40,97616,97617],{"class":42,"line":54},[40,97618,97619],{"class":997},"#array([，2，3，4])\n",[40,97621,97622,97625,97627,97629],{"class":42,"line":70},[40,97623,97624],{"class":50},"np.roll(a,",[40,97626,64],{"class":63},[40,97628,3908],{"class":50},[40,97630,97631],{"class":997},"#传正数向后调多少位，传负数向前调多少位\n",[40,97633,97634],{"class":42,"line":78},[40,97635,96859],{"class":997},[40,97637,97638],{"class":42,"line":86},[40,97639,97640],{"class":997},"#array([3, 4, 1, 2])\n",[40,97642,97643,97645,97647,97649],{"class":42,"line":100},[40,97644,97624],{"class":50},[40,97646,4011],{"class":1283},[40,97648,3698],{"class":63},[40,97650,1811],{"class":50},[40,97652,97653],{"class":42,"line":108},[40,97654,96859],{"class":997},[40,97656,97657],{"class":42,"line":121},[40,97658,97659],{"class":997},"#array([2, 3, 4, 1])\n",[19,97661,97662],{},[438,97663],{"alt":36,"src":97664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,97666,97668],{"id":97667},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,97670,97671],{},"resize()重新调整数组的大小",[19,97673,97674],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[31,97676,97678],{"className":33679,"code":97677,"language":2323,"meta":36,"style":36},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[26,97679,97680,97685,97698],{"__ignoreMap":36},[40,97681,97682],{"class":42,"line":43},[40,97683,97684],{"class":997},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[40,97686,97687,97690,97692,97694,97696],{"class":42,"line":54},[40,97688,97689],{"class":50},"np.resize(aa,(",[40,97691,64],{"class":63},[40,97693,1299],{"class":50},[40,97695,3824],{"class":63},[40,97697,33797],{"class":50},[40,97699,97700,97702,97704,97706,97708,97710],{"class":42,"line":70},[40,97701,97689],{"class":50},[40,97703,64],{"class":63},[40,97705,1299],{"class":50},[40,97707,3899],{"class":63},[40,97709,86066],{"class":50},[40,97711,97712],{"class":997},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,97714,97716],{"id":97715},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,97718,97719],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,97721,97722],{},[438,97723],{"alt":36,"src":97724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,97726,97728],{"id":97727},"_126-保存加载文件","12.6 保存加载文件",[19,97730,97731],{},"savetxt():将数据保存到txt文件中",[19,97733,97734],{},"loadtxt():从文件加载数据",[19,97736,97737],{},[438,97738],{"alt":36,"src":97739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,97741,97743],{"id":97742},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,97745,97746],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,97748,97750],{"id":97749},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,97752,97753],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,97755,97756],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,97758,97759],{},[438,97760],{"alt":36,"src":97761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,97763,97765],{"id":97764},"_129-where语句","12.9 where语句",[19,97767,97768],{},"np.where(条件,x,y)",[19,97770,97771],{},"如果条件为True,对应值为x,否则对应值为y",[19,97773,97774],{},[438,97775],{"alt":36,"src":97776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,97778,97780],{"id":97779},"_1210-dot矩阵","12.10 dot()矩阵",[19,97782,97783],{},[438,97784],{"alt":36,"src":97785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[3384,97787,97788],{},"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":36,"searchDepth":54,"depth":54,"links":97790},[97791,97792,97793,97794,97795,97796,97797,97798,97799,97800],{"id":97153,"depth":54,"text":97154},{"id":97376,"depth":54,"text":97377},{"id":97592,"depth":54,"text":97593},{"id":97667,"depth":54,"text":97668},{"id":97715,"depth":54,"text":97716},{"id":97727,"depth":54,"text":97728},{"id":97742,"depth":54,"text":97743},{"id":97749,"depth":54,"text":97750},{"id":97764,"depth":54,"text":97765},{"id":97779,"depth":54,"text":97780},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":97145,"description":3413},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":97807,"title":97808,"body":97809,"description":3413,"extension":3414,"meta":98162,"navigation":1412,"path":98163,"seo":98164,"stem":98165,"__hash__":98166},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":97810,"toc":98160},[97811,97814,97817,97820,97823,97826,97891,97893,98157],[10,97812,97808],{"id":97813},"_13数组排序",[19,97815,97816],{},"排序主要用到的方法是np.sort和np.argsort",[19,97818,97819],{},"其中np.sort()对数组直接排序",[19,97821,97822],{},"而np.argsort()是返回排序后的原始索引",[19,97824,97825],{},"①一维数组",[31,97827,97829],{"className":33679,"code":97828,"language":2323,"meta":36,"style":36},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[26,97830,97831,97835,97875,97883],{"__ignoreMap":36},[40,97832,97833],{"class":42,"line":43},[40,97834,96400],{"class":997},[40,97836,97837,97839,97841,97843,97845,97847,97849,97851,97853,97855,97857,97859,97861,97863,97865,97867,97869,97871,97873],{"class":42,"line":54},[40,97838,2106],{"class":50},[40,97840,1284],{"class":1283},[40,97842,96319],{"class":50},[40,97844,3555],{"class":63},[40,97846,1299],{"class":50},[40,97848,3977],{"class":63},[40,97850,1299],{"class":50},[40,97852,3874],{"class":63},[40,97854,1299],{"class":50},[40,97856,4253],{"class":63},[40,97858,1299],{"class":50},[40,97860,3759],{"class":63},[40,97862,1299],{"class":50},[40,97864,4370],{"class":63},[40,97866,1299],{"class":50},[40,97868,3824],{"class":63},[40,97870,1299],{"class":50},[40,97872,3925],{"class":63},[40,97874,7980],{"class":50},[40,97876,97877,97880],{"class":42,"line":70},[40,97878,97879],{"class":50},"np.sort(a)",[40,97881,97882],{"class":997},"#升序排序\n",[40,97884,97885,97888],{"class":42,"line":78},[40,97886,97887],{"class":50},"np.argsort(a)",[40,97889,97890],{"class":997},"#按照元素大小来索引排序\n",[19,97892,96586],{},[31,97894,97896],{"className":33679,"code":97895,"language":2323,"meta":36,"style":36},"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",[26,97897,97898,97910,97936,97941,97945,97950,97955,97960,97965,97969,97977,97981,97986,97991,97996,98001,98005,98010,98023,98027,98032,98037,98042,98047,98051,98056,98068,98072,98076,98080,98084,98088,98092,98097,98112,98117,98126,98131,98135,98139,98144,98148,98153],{"__ignoreMap":36},[40,97899,97900,97903,97905,97907],{"class":42,"line":43},[40,97901,97902],{"class":50},"np.random.seed(",[40,97904,3672],{"class":63},[40,97906,3908],{"class":50},[40,97908,97909],{"class":997},"#保证每次值一样\n",[40,97911,97912,97914,97916,97918,97920,97922,97924,97926,97928,97930,97932,97934],{"class":42,"line":54},[40,97913,96601],{"class":50},[40,97915,1284],{"class":1283},[40,97917,96409],{"class":50},[40,97919,3791],{"class":63},[40,97921,1299],{"class":50},[40,97923,34796],{"class":8539},[40,97925,1284],{"class":1283},[40,97927,3488],{"class":50},[40,97929,3773],{"class":63},[40,97931,1299],{"class":50},[40,97933,3824],{"class":63},[40,97935,33797],{"class":50},[40,97937,97938],{"class":42,"line":70},[40,97939,97940],{"class":997},"#原数组：\n",[40,97942,97943],{"class":42,"line":78},[40,97944,97223],{"class":94},[40,97946,97947],{"class":42,"line":86},[40,97948,97949],{"class":94},"array([[44, 47, 64, 67, 67,  9],\n",[40,97951,97952],{"class":42,"line":100},[40,97953,97954],{"class":94},"       [83, 21, 36, 87, 70, 88],\n",[40,97956,97957],{"class":42,"line":108},[40,97958,97959],{"class":94},"       [88, 12, 58, 65, 39, 87],\n",[40,97961,97962],{"class":42,"line":121},[40,97963,97964],{"class":94},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[40,97966,97967],{"class":42,"line":134},[40,97968,97223],{"class":94},[40,97970,97971,97974],{"class":42,"line":146},[40,97972,97973],{"class":50},"np.sort(aa)",[40,97975,97976],{"class":997},"#每行进行了排序\n",[40,97978,97979],{"class":42,"line":154},[40,97980,97223],{"class":94},[40,97982,97983],{"class":42,"line":162},[40,97984,97985],{"class":94},"array([[ 9, 44, 47, 64, 67, 67],\n",[40,97987,97988],{"class":42,"line":170},[40,97989,97990],{"class":94},"       [21, 36, 70, 83, 87, 88],\n",[40,97992,97993],{"class":42,"line":183},[40,97994,97995],{"class":94},"       [12, 39, 58, 65, 87, 88],\n",[40,97997,97998],{"class":42,"line":196},[40,97999,98000],{"class":94},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[40,98002,98003],{"class":42,"line":204},[40,98004,97223],{"class":94},[40,98006,98007],{"class":42,"line":217},[40,98008,98009],{"class":997},"#axis=0时\n",[40,98011,98012,98015,98017,98019,98021],{"class":42,"line":230},[40,98013,98014],{"class":50},"np.sort(aa,",[40,98016,50814],{"class":8539},[40,98018,1284],{"class":1283},[40,98020,3672],{"class":63},[40,98022,1811],{"class":50},[40,98024,98025],{"class":42,"line":238},[40,98026,97223],{"class":94},[40,98028,98029],{"class":42,"line":251},[40,98030,98031],{"class":94},"array([[44, 12, 36, 37, 25,  9],\n",[40,98033,98034],{"class":42,"line":264},[40,98035,98036],{"class":94},"       [46, 21, 58, 65, 39, 77],\n",[40,98038,98039],{"class":42,"line":277},[40,98040,98041],{"class":94},"       [83, 47, 64, 67, 67, 87],\n",[40,98043,98044],{"class":42,"line":290},[40,98045,98046],{"class":94},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[40,98048,98049],{"class":42,"line":298},[40,98050,97223],{"class":94},[40,98052,98053],{"class":42,"line":310},[40,98054,98055],{"class":997},"#axis=1时,为默认值\n",[40,98057,98058,98060,98062,98064,98066],{"class":42,"line":5086},[40,98059,98014],{"class":50},[40,98061,50814],{"class":8539},[40,98063,1284],{"class":1283},[40,98065,3698],{"class":63},[40,98067,1811],{"class":50},[40,98069,98070],{"class":42,"line":5091},[40,98071,97223],{"class":94},[40,98073,98074],{"class":42,"line":5105},[40,98075,97985],{"class":94},[40,98077,98078],{"class":42,"line":5110},[40,98079,97990],{"class":94},[40,98081,98082],{"class":42,"line":5902},[40,98083,97995],{"class":94},[40,98085,98086],{"class":42,"line":5916},[40,98087,98000],{"class":94},[40,98089,98090],{"class":42,"line":5924},[40,98091,97223],{"class":94},[40,98093,98094],{"class":42,"line":5929},[40,98095,98096],{"class":997},"#按最后一列排序\n",[40,98098,98099,98101,98103,98106,98108,98110],{"class":42,"line":5935},[40,98100,3743],{"class":50},[40,98102,1284],{"class":1283},[40,98104,98105],{"class":50},"aa[:,",[40,98107,4011],{"class":1283},[40,98109,3698],{"class":63},[40,98111,36546],{"class":50},[40,98113,98114],{"class":42,"line":5941},[40,98115,98116],{"class":997},"#获取最后一列排好序的索引\n",[40,98118,98119,98121,98123],{"class":42,"line":5946},[40,98120,77353],{"class":50},[40,98122,1284],{"class":1283},[40,98124,98125],{"class":50},"np.argsort(b)\n",[40,98127,98128],{"class":42,"line":11270},[40,98129,98130],{"class":50},"aa[index]\n",[40,98132,98133],{"class":42,"line":11294},[40,98134,97223],{"class":94},[40,98136,98137],{"class":42,"line":11299},[40,98138,97949],{"class":94},[40,98140,98141],{"class":42,"line":11305},[40,98142,98143],{"class":94},"       [46, 88, 81, 37, 25, 77],\n",[40,98145,98146],{"class":42,"line":11332},[40,98147,97959],{"class":94},[40,98149,98150],{"class":42,"line":11337},[40,98151,98152],{"class":94},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[40,98154,98155],{"class":42,"line":11343},[40,98156,97223],{"class":94},[3384,98158,98159],{},"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":36,"searchDepth":54,"depth":54,"links":98161},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":97808,"description":3413},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":98168,"title":98169,"body":98170,"description":3413,"extension":3414,"meta":98200,"navigation":1412,"path":98201,"seo":98202,"stem":98203,"__hash__":98204},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":98171,"toc":98198},[98172,98175,98178,98181,98184,98187,98190,98193],[10,98173,98169],{"id":98174},"_14广播机制",[19,98176,98177],{},"广播的规则：",[19,98179,98180],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,98182,98183],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,98185,98186],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,98188,98189],{},"3.如果没有维度形状为1，则会引发异常",[19,98191,98192],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,98194,98195],{},[438,98196],{"alt":36,"src":98197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":36,"searchDepth":54,"depth":54,"links":98199},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":98169,"description":3413},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":98206,"title":98207,"body":98208,"description":3413,"extension":3414,"meta":98306,"navigation":1412,"path":98307,"seo":98308,"stem":98309,"__hash__":98310},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":98209,"toc":98304},[98210,98213,98216,98301],[10,98211,98207],{"id":98212},"_15比较掩码",[19,98214,98215],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[31,98217,98219],{"className":33679,"code":98218,"language":2323,"meta":36,"style":36},"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",[26,98220,98221,98267,98278,98292,98296],{"__ignoreMap":36},[40,98222,98223,98225,98227,98230,98232,98234,98236,98238,98240,98242,98244,98246,98248,98250,98252,98254,98256,98258,98260,98262,98264],{"class":42,"line":43},[40,98224,2106],{"class":50},[40,98226,1284],{"class":1283},[40,98228,98229],{"class":50},"np.array([[",[40,98231,3698],{"class":63},[40,98233,1299],{"class":50},[40,98235,64],{"class":63},[40,98237,1299],{"class":50},[40,98239,3555],{"class":63},[40,98241,51330],{"class":50},[40,98243,3951],{"class":63},[40,98245,1299],{"class":50},[40,98247,3977],{"class":63},[40,98249,1299],{"class":50},[40,98251,4002],{"class":63},[40,98253,51330],{"class":50},[40,98255,4203],{"class":63},[40,98257,1299],{"class":50},[40,98259,4228],{"class":63},[40,98261,1299],{"class":50},[40,98263,4253],{"class":63},[40,98265,98266],{"class":50},"]])\n",[40,98268,98269,98271,98273,98275],{"class":42,"line":54},[40,98270,2106],{"class":50},[40,98272,4387],{"class":1283},[40,98274,4178],{"class":63},[40,98276,98277],{"class":997},"#结果是一个由True,False组成的数组\n",[40,98279,98280,98283,98285,98287,98289],{"class":42,"line":70},[40,98281,98282],{"class":50},"a[a",[40,98284,4387],{"class":1283},[40,98286,4178],{"class":63},[40,98288,4417],{"class":50},[40,98290,98291],{"class":997},"#小于20的元素会存到这个数组中\n",[40,98293,98294],{"class":42,"line":78},[40,98295,96859],{"class":997},[40,98297,98298],{"class":42,"line":86},[40,98299,98300],{"class":997},"#array([ 1,  2,  3, 11, 12, 13])\n",[3384,98302,98303],{},"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":36,"searchDepth":54,"depth":54,"links":98305},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":98207,"description":3413},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":98312,"title":98313,"body":98314,"description":3413,"extension":3414,"meta":98406,"navigation":1412,"path":98407,"seo":98408,"stem":98409,"__hash__":98410},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":98315,"toc":98404},[98316,98319,98322,98325,98328,98331,98396,98401],[10,98317,98313],{"id":98318},"_16魔法命令time",[19,98320,98321],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,98323,98324],{},"%:行模式",[19,98326,98327],{},"%%:单元格模式",[19,98329,98330],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[31,98332,98334],{"className":33679,"code":98333,"language":2323,"meta":36,"style":36},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[26,98335,98336,98341,98348,98353,98362,98375,98379,98387],{"__ignoreMap":36},[40,98337,98338],{"class":42,"line":43},[40,98339,98340],{"class":997},"#程序执行时间\n",[40,98342,98343,98345],{"class":42,"line":54},[40,98344,33692],{"class":1283},[40,98346,98347],{"class":50}," time \n",[40,98349,98350],{"class":42,"line":70},[40,98351,98352],{"class":997},"#获取时间\n",[40,98354,98355,98358,98360],{"class":42,"line":78},[40,98356,98357],{"class":50},"start",[40,98359,1284],{"class":1283},[40,98361,35718],{"class":50},[40,98363,98364,98367,98370,98372],{"class":42,"line":86},[40,98365,98366],{"class":50},"time.sleep(",[40,98368,98369],{"class":63},"0.4",[40,98371,3908],{"class":50},[40,98373,98374],{"class":997},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[40,98376,98377],{"class":42,"line":100},[40,98378,98352],{"class":997},[40,98380,98381,98383,98385],{"class":42,"line":108},[40,98382,49101],{"class":50},[40,98384,1284],{"class":1283},[40,98386,35718],{"class":50},[40,98388,98389,98391,98393],{"class":42,"line":121},[40,98390,49101],{"class":50},[40,98392,4011],{"class":1283},[40,98394,98395],{"class":50},"start\n",[19,98397,98398],{},[438,98399],{"alt":36,"src":98400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[3384,98402,98403],{},"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":36,"searchDepth":54,"depth":54,"links":98405},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":98313,"description":3413},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":98412,"title":98413,"body":98414,"description":3413,"extension":3414,"meta":98449,"navigation":1412,"path":98450,"seo":98451,"stem":98452,"__hash__":98453},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":98415,"toc":98447},[98416,98419,98422,98425,98428,98431,98434,98437,98442],[10,98417,98413],{"id":98418},"_17魔法命令timeit",[19,98420,98421],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,98423,98424],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,98426,98427],{},"单元格模式：",[19,98429,98430],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,98432,98433],{},"初始化语句执行次数由轮数来决定",[19,98435,98436],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,98438,98439],{},[438,98440],{"alt":36,"src":98441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,98443,98444],{},[438,98445],{"alt":36,"src":98446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":36,"searchDepth":54,"depth":54,"links":98448},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":98413,"description":3413},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":98455,"title":98456,"body":98457,"description":3413,"extension":3414,"meta":98475,"navigation":1412,"path":98476,"seo":98477,"stem":98478,"__hash__":98479},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":98458,"toc":98473},[98459,98462,98465,98468],[10,98460,98456],{"id":98461},"_18魔法命令writefile和run",[19,98463,98464],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,98466,98467],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,98469,98470],{},[438,98471],{"alt":36,"src":98472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":36,"searchDepth":54,"depth":54,"links":98474},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":98456,"description":3413},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":98481,"title":98482,"body":98483,"description":3413,"extension":3414,"meta":98536,"navigation":1412,"path":98537,"seo":98538,"stem":98539,"__hash__":98540},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":98484,"toc":98534},[98485,98488,98491,98493,98496,98499,98504,98507,98510,98513,98516,98519,98522,98525,98528,98531],[10,98486,98482],{"id":98487},"_19魔法命令memit",[19,98489,98490],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,98492,27915],{},[19,98494,98495],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,98497,98498],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,98500,98501],{},[438,98502],{"alt":36,"src":98503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,98505,98506],{},"补充：",[19,98508,98509],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,98511,98512],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,98514,98515],{},"解决方法：",[19,98517,98518],{},"1.cmd",[19,98520,98521],{},"2.依次输入以下代码：",[19,98523,98524],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,98526,98527],{},"pip install --upgrade ipython",[19,98529,98530],{},"#升级 memory_profiler 和 setuptools",[19,98532,98533],{},"pip install --upgrade memory_profiler setuptools",{"title":36,"searchDepth":54,"depth":54,"links":98535},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":98482,"description":3413},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":98542,"title":98543,"body":98544,"description":3413,"extension":3414,"meta":100190,"navigation":1412,"path":100191,"seo":100192,"stem":100193,"__hash__":100194},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":98545,"toc":100160},[98546,98549,98553,98557,98618,98621,98626,98630,98635,98640,98645,98650,98653,98658,98662,98666,98699,98702,98705,98708,98760,98763,98799,98802,98844,98848,98869,98871,98908,98910,98915,98917,98922,98926,98929,98957,98961,98965,99018,99022,99114,99118,99122,99125,99130,99134,99159,99164,99168,99171,99174,99177,99180,99183,99186,99189,99201,99205,99209,99212,99244,99247,99270,99273,99299,99302,99328,99331,99365,99368,99430,99434,99437,99441,99444,99470,99473,99476,99481,99484,99553,99555,99560,99621,99624,99635,99641,99646,99650,99653,99666,99670,99685,99687,99710,99712,99738,99741,99744,99747,99795,99797,99802,99806,99810,99837,99841,99868,99871,99876,99881,99971,99975,100033,100038,100041,100044,100086,100090,100146,100151,100154,100157],[10,98547,98543],{"id":98548},"_2创建数组",[14,98550,98552],{"id":98551},"_21-array函数创建数组","2.1 array()函数创建数组",[402,98554,98556],{"id":98555},"_221-函数语句","2.2.1 函数语句",[31,98558,98560],{"className":33679,"code":98559,"language":2323,"meta":36,"style":36},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[26,98561,98562],{"__ignoreMap":36},[40,98563,98564,98567,98570,98572,98574,98576,98578,98580,98583,98585,98588,98590,98593,98595,98597,98599,98602,98604,98607,98609,98612,98614,98616],{"class":42,"line":43},[40,98565,98566],{"class":50},"numpy.array(",[40,98568,98569],{"class":63},"object",[40,98571,15757],{"class":50},[40,98573,96795],{"class":8539},[40,98575,16886],{"class":1283},[40,98577,42233],{"class":63},[40,98579,15757],{"class":50},[40,98581,98582],{"class":8539},"copy",[40,98584,16886],{"class":1283},[40,98586,98587],{"class":63}," True",[40,98589,15757],{"class":50},[40,98591,98592],{"class":8539},"order",[40,98594,16886],{"class":1283},[40,98596,42233],{"class":63},[40,98598,15757],{"class":50},[40,98600,98601],{"class":8539},"subok",[40,98603,16886],{"class":1283},[40,98605,98606],{"class":63}," False",[40,98608,15757],{"class":50},[40,98610,98611],{"class":8539},"ndmin",[40,98613,16886],{"class":1283},[40,98615,7416],{"class":63},[40,98617,1811],{"class":50},[19,98619,98620],{},"参数：",[19,98622,98623],{},[438,98624],{"alt":36,"src":98625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[402,98627,98629],{"id":98628},"_222-实例","2.2.2 实例",[19,98631,98632],{},[438,98633],{"alt":36,"src":98634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,98636,98637],{},[438,98638],{"alt":36,"src":98639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,98641,98642],{},[438,98643],{"alt":36,"src":98644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,98646,98647],{},[438,98648],{"alt":36,"src":98649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,98651,98652],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,98654,98655],{},[438,98656],{"alt":36,"src":98657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,98659,98661],{"id":98660},"_22-随机数创建数组","2.2 随机数创建数组",[402,98663,98665],{"id":98664},"_221-random语句","2.2.1 random语句",[31,98667,98669],{"className":33679,"code":98668,"language":2323,"meta":36,"style":36},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[26,98670,98671,98676,98681,98689,98694],{"__ignoreMap":36},[40,98672,98673],{"class":42,"line":43},[40,98674,98675],{"class":997},"#random.random()\n",[40,98677,98678],{"class":42,"line":54},[40,98679,98680],{"class":997},"#确定随机种子,就是每次运行结果是相同的\n",[40,98682,98683,98685,98687],{"class":42,"line":70},[40,98684,97902],{"class":50},[40,98686,3672],{"class":63},[40,98688,1811],{"class":50},[40,98690,98691],{"class":42,"line":78},[40,98692,98693],{"class":50},"np.random.random()\n",[40,98695,98696],{"class":42,"line":86},[40,98697,98698],{"class":997},"#生成一个随机的数目\n",[19,98700,98701],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,98703,98704],{},"可以指定数组形状 size",[19,98706,98707],{},"①生成一维数组",[31,98709,98711],{"className":33679,"code":98710,"language":2323,"meta":36,"style":36},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[26,98712,98713,98718,98731,98736,98752],{"__ignoreMap":36},[40,98714,98715],{"class":42,"line":43},[40,98716,98717],{"class":997},"#random.random(size())\n",[40,98719,98720,98723,98725,98727,98729],{"class":42,"line":54},[40,98721,98722],{"class":50},"np.random.random(",[40,98724,34796],{"class":8539},[40,98726,1284],{"class":1283},[40,98728,3799],{"class":63},[40,98730,1811],{"class":50},[40,98732,98733],{"class":42,"line":70},[40,98734,98735],{"class":997},"#生成一位的五个元素\n",[40,98737,98738,98740,98742,98744,98746,98748,98750],{"class":42,"line":78},[40,98739,2106],{"class":50},[40,98741,1284],{"class":1283},[40,98743,98722],{"class":50},[40,98745,34796],{"class":8539},[40,98747,1284],{"class":1283},[40,98749,3773],{"class":63},[40,98751,1811],{"class":50},[40,98753,98754,98757],{"class":42,"line":86},[40,98755,98756],{"class":50},"a.shape ",[40,98758,98759],{"class":997},"#输出数组形状\n",[19,98761,98762],{},"②生成二维数组",[31,98764,98766],{"className":33679,"code":98765,"language":2323,"meta":36,"style":36},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[26,98767,98768,98772,98794],{"__ignoreMap":36},[40,98769,98770],{"class":42,"line":43},[40,98771,96596],{"class":997},[40,98773,98774,98776,98778,98780,98782,98784,98786,98788,98790,98792],{"class":42,"line":54},[40,98775,96601],{"class":50},[40,98777,1284],{"class":1283},[40,98779,98722],{"class":50},[40,98781,34796],{"class":8539},[40,98783,1284],{"class":1283},[40,98785,3488],{"class":50},[40,98787,3773],{"class":63},[40,98789,1299],{"class":50},[40,98791,3799],{"class":63},[40,98793,33797],{"class":50},[40,98795,98796],{"class":42,"line":70},[40,98797,98798],{"class":997},"#生成四行五列的数组\n",[19,98800,98801],{},"③生成三维数组",[31,98803,98805],{"className":33679,"code":98804,"language":2323,"meta":36,"style":36},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[26,98806,98807,98812,98839],{"__ignoreMap":36},[40,98808,98809],{"class":42,"line":43},[40,98810,98811],{"class":997},"#三维数组\n",[40,98813,98814,98817,98819,98821,98823,98825,98827,98829,98831,98833,98835,98837],{"class":42,"line":54},[40,98815,98816],{"class":50},"aaa",[40,98818,1284],{"class":1283},[40,98820,98722],{"class":50},[40,98822,34796],{"class":8539},[40,98824,1284],{"class":1283},[40,98826,3488],{"class":50},[40,98828,64],{"class":63},[40,98830,1299],{"class":50},[40,98832,3555],{"class":63},[40,98834,1299],{"class":50},[40,98836,3773],{"class":63},[40,98838,33797],{"class":50},[40,98840,98841],{"class":42,"line":70},[40,98842,98843],{"class":50},"aaa.shape\n",[402,98845,98847],{"id":98846},"_222-randint语句","2.2.2 randint语句",[31,98849,98851],{"className":33679,"code":98850,"language":2323,"meta":36,"style":36},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[26,98852,98853,98858],{"__ignoreMap":36},[40,98854,98855],{"class":42,"line":43},[40,98856,98857],{"class":997},"#生成随机的整数 random.randint(low,high,size)\n",[40,98859,98860,98862,98864,98866],{"class":42,"line":54},[40,98861,96409],{"class":50},[40,98863,3799],{"class":63},[40,98865,17036],{"class":50},[40,98867,98868],{"class":997},"#0~5中的随机一个数\n",[19,98870,98707],{},[31,98872,98874],{"className":33679,"code":98873,"language":2323,"meta":36,"style":36},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[26,98875,98876,98881,98903],{"__ignoreMap":36},[40,98877,98878],{"class":42,"line":43},[40,98879,98880],{"class":997},"#一维\n",[40,98882,98883,98885,98887,98889,98891,98893,98895,98897,98899,98901],{"class":42,"line":54},[40,98884,96409],{"class":50},[40,98886,3698],{"class":63},[40,98888,1299],{"class":50},[40,98890,3951],{"class":63},[40,98892,1299],{"class":50},[40,98894,34796],{"class":8539},[40,98896,1284],{"class":1283},[40,98898,3488],{"class":50},[40,98900,3925],{"class":63},[40,98902,33797],{"class":50},[40,98904,98905],{"class":42,"line":70},[40,98906,98907],{"class":997},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,98909,98762],{},[19,98911,98912],{},[438,98913],{"alt":36,"src":98914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,98916,98801],{},[19,98918,98919],{},[438,98920],{"alt":36,"src":98921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[402,98923,98925],{"id":98924},"_222-rand语句","2.2.2 rand语句",[19,98927,98928],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[31,98930,98932],{"className":33679,"code":98931,"language":2323,"meta":36,"style":36},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[26,98933,98934,98947,98952],{"__ignoreMap":36},[40,98935,98936,98939,98941,98943,98945],{"class":42,"line":43},[40,98937,98938],{"class":50},"np.random.rand(",[40,98940,3791],{"class":63},[40,98942,1299],{"class":50},[40,98944,3925],{"class":63},[40,98946,1811],{"class":50},[40,98948,98949],{"class":42,"line":54},[40,98950,98951],{"class":997},"#第一个参数100：行数，表示有100个样本\n",[40,98953,98954],{"class":42,"line":70},[40,98955,98956],{"class":997},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,98958,98960],{"id":98959},"_23-arange创建数组","2.3 arange()创建数组",[402,98962,98964],{"id":98963},"_231-函数语句","2.3.1 函数语句",[31,98966,98968],{"className":33679,"code":98967,"language":2323,"meta":36,"style":36},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[26,98969,98970,98984,98989,98994,98999,99004,99009,99014],{"__ignoreMap":36},[40,98971,98972,98975,98977,98979,98982],{"class":42,"line":43},[40,98973,98974],{"class":50},"numpy.arange([start,] stop[, step], ",[40,98976,96795],{"class":8539},[40,98978,1284],{"class":1283},[40,98980,98981],{"class":63},"None",[40,98983,1811],{"class":50},[40,98985,98986],{"class":42,"line":54},[40,98987,98988],{"class":997},"#参数\n",[40,98990,98991],{"class":42,"line":70},[40,98992,98993],{"class":94},"\"\"\"\n",[40,98995,98996],{"class":42,"line":78},[40,98997,98998],{"class":94},"start:起始值，可选，默认从 0 开始。\n",[40,99000,99001],{"class":42,"line":86},[40,99002,99003],{"class":94},"stop:结束值（不包含该值）。\n",[40,99005,99006],{"class":42,"line":100},[40,99007,99008],{"class":94},"step:步长，可选，默认是 1。可以为浮点数。\n",[40,99010,99011],{"class":42,"line":108},[40,99012,99013],{"class":94},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[40,99015,99016],{"class":42,"line":121},[40,99017,98993],{"class":94},[402,99019,99021],{"id":99020},"_232-实例","2.3.2 实例",[31,99023,99025],{"className":33679,"code":99024,"language":2323,"meta":36,"style":36},"#创建一维数组\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",[26,99026,99027,99031,99055,99060,99065,99069,99092,99096,99100,99105,99110],{"__ignoreMap":36},[40,99028,99029],{"class":42,"line":43},[40,99030,96400],{"class":997},[40,99032,99033,99035,99037,99039,99041,99043,99045,99047,99049,99051,99053],{"class":42,"line":54},[40,99034,96297],{"class":50},[40,99036,3698],{"class":63},[40,99038,1299],{"class":50},[40,99040,4203],{"class":63},[40,99042,1299],{"class":50},[40,99044,3698],{"class":63},[40,99046,1299],{"class":50},[40,99048,96795],{"class":8539},[40,99050,1284],{"class":1283},[40,99052,3491],{"class":63},[40,99054,1811],{"class":50},[40,99056,99057],{"class":42,"line":70},[40,99058,99059],{"class":997},"#输出结果：\n",[40,99061,99062],{"class":42,"line":78},[40,99063,99064],{"class":997},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[40,99066,99067],{"class":42,"line":86},[40,99068,97242],{"class":997},[40,99070,99071,99074,99076,99078,99080,99083,99085,99087,99089],{"class":42,"line":100},[40,99072,99073],{"class":50},"np.array([np.arange(",[40,99075,3698],{"class":63},[40,99077,1299],{"class":50},[40,99079,3773],{"class":63},[40,99081,99082],{"class":50},"),np.arange(",[40,99084,3773],{"class":63},[40,99086,1299],{"class":50},[40,99088,3849],{"class":63},[40,99090,99091],{"class":50},")])\n",[40,99093,99094],{"class":42,"line":108},[40,99095,96859],{"class":997},[40,99097,99098],{"class":42,"line":121},[40,99099,98993],{"class":94},[40,99101,99102],{"class":42,"line":134},[40,99103,99104],{"class":94},"array([[1, 2, 3],\n",[40,99106,99107],{"class":42,"line":146},[40,99108,99109],{"class":94},"       [4, 5, 6]])\n",[40,99111,99112],{"class":42,"line":154},[40,99113,98993],{"class":94},[14,99115,99117],{"id":99116},"_24-生态分布","2.4 生态分布",[402,99119,99121],{"id":99120},"_241-标准正态分布","2.4.1 标准正态分布",[19,99123,99124],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,99126,99127],{},[438,99128],{"alt":36,"src":99129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[402,99131,99133],{"id":99132},"_242-常规正态分布","2.4.2 常规正态分布",[31,99135,99137],{"className":33679,"code":99136,"language":2323,"meta":36,"style":36},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[26,99138,99139,99144,99149,99154],{"__ignoreMap":36},[40,99140,99141],{"class":42,"line":43},[40,99142,99143],{"class":50},"random.normal(loc,scale,size)也可以生成正态分布\n",[40,99145,99146],{"class":42,"line":54},[40,99147,99148],{"class":997},"#loc:期望\n",[40,99150,99151],{"class":42,"line":70},[40,99152,99153],{"class":997},"#scale:方差\n",[40,99155,99156],{"class":42,"line":78},[40,99157,99158],{"class":997},"#size:用于确定是几维的数列\n",[19,99160,99161],{},[438,99162],{"alt":36,"src":99163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,99165,99167],{"id":99166},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,99169,99170],{},"ndim:秩，维度个数",[19,99172,99173],{},"size:数组元素的个数",[19,99175,99176],{},"shape:数组的形状",[19,99178,99179],{},"dtype:数组元素的类型",[19,99181,99182],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,99184,99185],{},"他们都是属性，通过数组.属性的形式来确定",[19,99187,99188],{},"如果需要输出多个可以通过以下方式：",[31,99190,99192],{"className":33679,"code":99191,"language":2323,"meta":36,"style":36},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[26,99193,99194],{"__ignoreMap":36},[40,99195,99196,99198],{"class":42,"line":43},[40,99197,33715],{"class":63},[40,99199,99200],{"class":50},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,99202,99204],{"id":99203},"_26-其他方式创建数组","2.6 其他方式创建数组",[402,99206,99208],{"id":99207},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,99210,99211],{},"①创建一维数组",[31,99213,99215],{"className":33679,"code":99214,"language":2323,"meta":36,"style":36},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[26,99216,99217,99226,99230,99235,99240],{"__ignoreMap":36},[40,99218,99219,99222,99224],{"class":42,"line":43},[40,99220,99221],{"class":50},"np.zeros(",[40,99223,3925],{"class":63},[40,99225,1811],{"class":50},[40,99227,99228],{"class":42,"line":54},[40,99229,98993],{"class":94},[40,99231,99232],{"class":42,"line":70},[40,99233,99234],{"class":94},"输出结果：\n",[40,99236,99237],{"class":42,"line":78},[40,99238,99239],{"class":94},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[40,99241,99242],{"class":42,"line":86},[40,99243,98993],{"class":94},[19,99245,99246],{},"上方代码等价于：",[31,99248,99250],{"className":33679,"code":99249,"language":2323,"meta":36,"style":36},"np.zeros(shape=(10))#创建10个元素的0数组\n",[26,99251,99252],{"__ignoreMap":36},[40,99253,99254,99256,99259,99261,99263,99265,99267],{"class":42,"line":43},[40,99255,99221],{"class":50},[40,99257,99258],{"class":8539},"shape",[40,99260,1284],{"class":1283},[40,99262,3488],{"class":50},[40,99264,3925],{"class":63},[40,99266,86066],{"class":50},[40,99268,99269],{"class":997},"#创建10个元素的0数组\n",[19,99271,99272],{},"也可以指定类型",[31,99274,99276],{"className":33679,"code":99275,"language":2323,"meta":36,"style":36},"#指定类型\nnp.zeros(5,dtype=int)\n",[26,99277,99278,99283],{"__ignoreMap":36},[40,99279,99280],{"class":42,"line":43},[40,99281,99282],{"class":997},"#指定类型\n",[40,99284,99285,99287,99289,99291,99293,99295,99297],{"class":42,"line":54},[40,99286,99221],{"class":50},[40,99288,3799],{"class":63},[40,99290,1299],{"class":50},[40,99292,96795],{"class":8539},[40,99294,1284],{"class":1283},[40,99296,3491],{"class":63},[40,99298,1811],{"class":50},[19,99300,99301],{},"②创建二维数组",[31,99303,99305],{"className":33679,"code":99304,"language":2323,"meta":36,"style":36},"np.zeros((3,4),dtype=int)\n",[26,99306,99307],{"__ignoreMap":36},[40,99308,99309,99312,99314,99316,99318,99320,99322,99324,99326],{"class":42,"line":43},[40,99310,99311],{"class":50},"np.zeros((",[40,99313,3555],{"class":63},[40,99315,1299],{"class":50},[40,99317,3773],{"class":63},[40,99319,45556],{"class":50},[40,99321,96795],{"class":8539},[40,99323,1284],{"class":1283},[40,99325,3491],{"class":63},[40,99327,1811],{"class":50},[19,99329,99330],{},"③创建三维数组",[31,99332,99334],{"className":33679,"code":99333,"language":2323,"meta":36,"style":36},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[26,99335,99336,99341],{"__ignoreMap":36},[40,99337,99338],{"class":42,"line":43},[40,99339,99340],{"class":997},"#创建三维数组\n",[40,99342,99343,99345,99347,99349,99351,99353,99355,99357,99359,99361,99363],{"class":42,"line":54},[40,99344,99311],{"class":50},[40,99346,3555],{"class":63},[40,99348,1299],{"class":50},[40,99350,3773],{"class":63},[40,99352,1299],{"class":50},[40,99354,3799],{"class":63},[40,99356,45556],{"class":50},[40,99358,96795],{"class":8539},[40,99360,1284],{"class":1283},[40,99362,3491],{"class":63},[40,99364,1811],{"class":50},[19,99366,99367],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[31,99369,99371],{"className":33679,"code":99370,"language":2323,"meta":36,"style":36},"#使用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",[26,99372,99373,99378,99393,99398,99403,99425],{"__ignoreMap":36},[40,99374,99375],{"class":42,"line":43},[40,99376,99377],{"class":997},"#使用zeros_like将创建的一维数组变成全0的数组\n",[40,99379,99380,99382,99384,99386,99388,99390],{"class":42,"line":54},[40,99381,2106],{"class":50},[40,99383,1284],{"class":1283},[40,99385,96297],{"class":50},[40,99387,3773],{"class":63},[40,99389,3908],{"class":50},[40,99391,99392],{"class":997},"#这个得到的结果：一维数组0，1，2，3\n",[40,99394,99395],{"class":42,"line":70},[40,99396,99397],{"class":50},"np.zeros_like(a)\n",[40,99399,99400],{"class":42,"line":78},[40,99401,99402],{"class":997},"#使用zeros_like将创建的二维数组变成全0的数组\n",[40,99404,99405,99407,99409,99411,99413,99415,99417,99419,99421,99423],{"class":42,"line":86},[40,99406,96601],{"class":50},[40,99408,1284],{"class":1283},[40,99410,98722],{"class":50},[40,99412,34796],{"class":8539},[40,99414,1284],{"class":1283},[40,99416,3488],{"class":50},[40,99418,3773],{"class":63},[40,99420,1299],{"class":50},[40,99422,3799],{"class":63},[40,99424,33797],{"class":50},[40,99426,99427],{"class":42,"line":100},[40,99428,99429],{"class":50},"np.zeros_like(aa)\n",[402,99431,99433],{"id":99432},"_262-ones创建数组","2.6.2 ones()创建数组",[19,99435,99436],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[402,99438,99440],{"id":99439},"_263-empty创建数组","2.6.3 empty()创建数组",[19,99442,99443],{},"①empty()用法",[31,99445,99447],{"className":33679,"code":99446,"language":2323,"meta":36,"style":36},"numpy.empty(shape,dtype=float,order='c')\n",[26,99448,99449],{"__ignoreMap":36},[40,99450,99451,99454,99456,99458,99460,99462,99464,99466,99468],{"class":42,"line":43},[40,99452,99453],{"class":50},"numpy.empty(shape,",[40,99455,96795],{"class":8539},[40,99457,1284],{"class":1283},[40,99459,3526],{"class":63},[40,99461,1299],{"class":50},[40,99463,98592],{"class":8539},[40,99465,1284],{"class":1283},[40,99467,79323],{"class":94},[40,99469,1811],{"class":50},[19,99471,99472],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,99474,99475],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,99477,99478],{},[438,99479],{"alt":36,"src":99480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,99482,99483],{},"②empty()用法",[31,99485,99487],{"className":33679,"code":99486,"language":2323,"meta":36,"style":36},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[26,99488,99489,99510,99522,99543,99548],{"__ignoreMap":36},[40,99490,99491,99493,99495,99498,99500,99502,99504,99506,99508],{"class":42,"line":43},[40,99492,4322],{"class":50},[40,99494,1284],{"class":1283},[40,99496,99497],{"class":50},"np.empty(",[40,99499,3925],{"class":63},[40,99501,1299],{"class":50},[40,99503,96795],{"class":8539},[40,99505,1284],{"class":1283},[40,99507,3491],{"class":63},[40,99509,1811],{"class":50},[40,99511,99512,99514,99516,99518,99520],{"class":42,"line":54},[40,99513,4297],{"class":50},[40,99515,1284],{"class":1283},[40,99517,96297],{"class":50},[40,99519,3799],{"class":63},[40,99521,1811],{"class":50},[40,99523,99524,99527,99529,99532,99534,99536,99539,99541],{"class":42,"line":70},[40,99525,99526],{"class":50},"np.add(",[40,99528,64],{"class":63},[40,99530,99531],{"class":50},",x,",[40,99533,96349],{"class":8539},[40,99535,1284],{"class":1283},[40,99537,99538],{"class":50},"y[:",[40,99540,3799],{"class":63},[40,99542,7980],{"class":50},[40,99544,99545],{"class":42,"line":78},[40,99546,99547],{"class":997},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[40,99549,99550],{"class":42,"line":86},[40,99551,99552],{"class":50},"y\n",[19,99554,14836],{},[19,99556,99557],{},[438,99558],{"alt":36,"src":99559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[31,99561,99563],{"className":33679,"code":99562,"language":2323,"meta":36,"style":36},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[26,99564,99565,99581,99601,99616],{"__ignoreMap":36},[40,99566,99567,99569,99571,99573,99575,99577,99579],{"class":42,"line":43},[40,99568,4297],{"class":50},[40,99570,1284],{"class":1283},[40,99572,96297],{"class":50},[40,99574,3698],{"class":63},[40,99576,1299],{"class":50},[40,99578,3824],{"class":63},[40,99580,1811],{"class":50},[40,99582,99583,99585,99587,99589,99591,99593,99595,99597,99599],{"class":42,"line":54},[40,99584,4322],{"class":50},[40,99586,1284],{"class":1283},[40,99588,99497],{"class":50},[40,99590,3799],{"class":63},[40,99592,1299],{"class":50},[40,99594,96795],{"class":8539},[40,99596,1284],{"class":1283},[40,99598,3491],{"class":63},[40,99600,1811],{"class":50},[40,99602,99603,99606,99608,99610,99612,99614],{"class":42,"line":70},[40,99604,99605],{"class":50},"np.add(x,",[40,99607,64],{"class":63},[40,99609,1299],{"class":50},[40,99611,96349],{"class":8539},[40,99613,1284],{"class":1283},[40,99615,96744],{"class":50},[40,99617,99618],{"class":42,"line":78},[40,99619,99620],{"class":997},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,99622,99623],{},"③empty_like()",[19,99625,99626],{},[409,99627,99628,99629,99634],{},"创建一个",[409,99630,99631],{},[409,99632,99633],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,99636,99637,99640],{},[26,99638,99639],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,99642,99643],{},[438,99644],{"alt":36,"src":99645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[402,99647,99649],{"id":99648},"_264-用法","2.6.4 ？？用法",[19,99651,99652],{},"当想查看一个函数的参数时，可以通过？？来实现",[31,99654,99656],{"className":33679,"code":99655,"language":2323,"meta":36,"style":36},"np.full??\n",[26,99657,99658],{"__ignoreMap":36},[40,99659,99660,99663],{"class":42,"line":43},[40,99661,99662],{"class":50},"np.full",[40,99664,99665],{"class":80698},"??\n",[402,99667,99669],{"id":99668},"_265-full创建数组","2.6.5 full()创建数组",[31,99671,99673],{"className":33679,"code":99672,"language":2323,"meta":36,"style":36},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[26,99674,99675,99680],{"__ignoreMap":36},[40,99676,99677],{"class":42,"line":43},[40,99678,99679],{"class":50},"full(shape,fill_value)\n",[40,99681,99682],{"class":42,"line":54},[40,99683,99684],{"class":50},"创建全为某个指定值的数组\n",[19,99686,97825],{},[31,99688,99690],{"className":33679,"code":99689,"language":2323,"meta":36,"style":36},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[26,99691,99692,99697],{"__ignoreMap":36},[40,99693,99694],{"class":42,"line":43},[40,99695,99696],{"class":997},"#创建一个一维数组,以20进行填充\n",[40,99698,99699,99702,99704,99706,99708],{"class":42,"line":54},[40,99700,99701],{"class":50},"np.full(",[40,99703,3925],{"class":63},[40,99705,1299],{"class":50},[40,99707,4178],{"class":63},[40,99709,1811],{"class":50},[19,99711,96586],{},[31,99713,99715],{"className":33679,"code":99714,"language":2323,"meta":36,"style":36},"#创建二维数组\nnp.full((3,5),11)\n",[26,99716,99717,99721],{"__ignoreMap":36},[40,99718,99719],{"class":42,"line":43},[40,99720,97242],{"class":997},[40,99722,99723,99726,99728,99730,99732,99734,99736],{"class":42,"line":54},[40,99724,99725],{"class":50},"np.full((",[40,99727,3555],{"class":63},[40,99729,1299],{"class":50},[40,99731,3799],{"class":63},[40,99733,45556],{"class":50},[40,99735,3951],{"class":63},[40,99737,1811],{"class":50},[19,99739,99740],{},"③full_like用法",[19,99742,99743],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,99745,99746],{},"这里是指定填充而已",[31,99748,99750],{"className":33679,"code":99749,"language":2323,"meta":36,"style":36},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[26,99751,99752,99757,99781,99786],{"__ignoreMap":36},[40,99753,99754],{"class":42,"line":43},[40,99755,99756],{"class":997},"#创建一个指定形状数组\n",[40,99758,99759,99761,99763,99765,99767,99769,99771,99773,99775,99777,99779],{"class":42,"line":54},[40,99760,2106],{"class":50},[40,99762,1284],{"class":1283},[40,99764,96297],{"class":50},[40,99766,3698],{"class":63},[40,99768,1299],{"class":50},[40,99770,3805],{"class":63},[40,99772,96302],{"class":50},[40,99774,3773],{"class":63},[40,99776,1299],{"class":50},[40,99778,3899],{"class":63},[40,99780,1811],{"class":50},[40,99782,99783],{"class":42,"line":70},[40,99784,99785],{"class":997},"#进行指定填充\n",[40,99787,99788,99791,99793],{"class":42,"line":78},[40,99789,99790],{"class":50},"np.full_like(a,",[40,99792,3925],{"class":63},[40,99794,1811],{"class":50},[19,99796,14836],{},[19,99798,99799],{},[438,99800],{"alt":36,"src":99801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[402,99803,99805],{"id":99804},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[2423,99807,99809],{"id":99808},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[31,99811,99813],{"className":33679,"code":99812,"language":2323,"meta":36,"style":36},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[26,99814,99815,99832],{"__ignoreMap":36},[40,99816,99817,99820,99822,99824,99826,99828,99830],{"class":42,"line":43},[40,99818,99819],{"class":50},"np.eye(",[40,99821,3773],{"class":63},[40,99823,1299],{"class":50},[40,99825,96795],{"class":8539},[40,99827,1284],{"class":1283},[40,99829,3491],{"class":63},[40,99831,1811],{"class":50},[40,99833,99834],{"class":42,"line":54},[40,99835,99836],{"class":997},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[2423,99838,99840],{"id":99839},"_2662-法2identity","2.6.6.2 法2：identity()",[31,99842,99844],{"className":33679,"code":99843,"language":2323,"meta":36,"style":36},"#identity()\nnp.identity(5,dtype=int)\n",[26,99845,99846,99851],{"__ignoreMap":36},[40,99847,99848],{"class":42,"line":43},[40,99849,99850],{"class":997},"#identity()\n",[40,99852,99853,99856,99858,99860,99862,99864,99866],{"class":42,"line":54},[40,99854,99855],{"class":50},"np.identity(",[40,99857,3799],{"class":63},[40,99859,1299],{"class":50},[40,99861,96795],{"class":8539},[40,99863,1284],{"class":1283},[40,99865,3491],{"class":63},[40,99867,1811],{"class":50},[19,99869,99870],{},"两个函数是有区别的",[19,99872,99873],{},[438,99874],{"alt":36,"src":99875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,99877,99878],{},[438,99879],{"alt":36,"src":99880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[31,99882,99884],{"className":33679,"code":99883,"language":2323,"meta":36,"style":36},"# 创建一个 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",[26,99885,99886,99891,99903,99908,99913,99918,99923,99927,99932,99952,99956,99961,99966],{"__ignoreMap":36},[40,99887,99888],{"class":42,"line":43},[40,99889,99890],{"class":997},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[40,99892,99893,99895,99897,99899,99901],{"class":42,"line":54},[40,99894,99819],{"class":50},[40,99896,3555],{"class":63},[40,99898,15757],{"class":50},[40,99900,3773],{"class":63},[40,99902,1811],{"class":50},[40,99904,99905],{"class":42,"line":70},[40,99906,99907],{"class":997},"# 输出:\n",[40,99909,99910],{"class":42,"line":78},[40,99911,99912],{"class":997},"# [[1. 0. 0. 0.]\n",[40,99914,99915],{"class":42,"line":86},[40,99916,99917],{"class":997},"#  [0. 1. 0. 0.]\n",[40,99919,99920],{"class":42,"line":100},[40,99921,99922],{"class":997},"#  [0. 0. 1. 0.]]\n",[40,99924,99925],{"class":42,"line":108},[40,99926,1413],{"emptyLinePlaceholder":1412},[40,99928,99929],{"class":42,"line":121},[40,99930,99931],{"class":997},"# 对角线向上偏移1\n",[40,99933,99934,99936,99938,99940,99942,99944,99946,99948,99950],{"class":42,"line":134},[40,99935,99819],{"class":50},[40,99937,3555],{"class":63},[40,99939,15757],{"class":50},[40,99941,3773],{"class":63},[40,99943,15757],{"class":50},[40,99945,3972],{"class":8539},[40,99947,1284],{"class":1283},[40,99949,3698],{"class":63},[40,99951,1811],{"class":50},[40,99953,99954],{"class":42,"line":146},[40,99955,99907],{"class":997},[40,99957,99958],{"class":42,"line":154},[40,99959,99960],{"class":997},"# [[0. 1. 0. 0.]\n",[40,99962,99963],{"class":42,"line":162},[40,99964,99965],{"class":997},"#  [0. 0. 1. 0.]\n",[40,99967,99968],{"class":42,"line":170},[40,99969,99970],{"class":997},"#  [0. 0. 0. 1.]]\n",[402,99972,99974],{"id":99973},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[31,99976,99978],{"className":33679,"code":99977,"language":2323,"meta":36,"style":36},"#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",[26,99979,99980,99985,99989,99994,99999,100004,100009,100014,100019,100024,100029],{"__ignoreMap":36},[40,99981,99982],{"class":42,"line":43},[40,99983,99984],{"class":997},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[40,99986,99987],{"class":42,"line":54},[40,99988,98993],{"class":94},[40,99990,99991],{"class":42,"line":70},[40,99992,99993],{"class":94},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[40,99995,99996],{"class":42,"line":78},[40,99997,99998],{"class":94},"参数介绍：\n",[40,100000,100001],{"class":42,"line":86},[40,100002,100003],{"class":94},"start：序列的起始值\n",[40,100005,100006],{"class":42,"line":100},[40,100007,100008],{"class":94},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[40,100010,100011],{"class":42,"line":108},[40,100012,100013],{"class":94},"num：要生长的等步长的样本数量，默认为50\n",[40,100015,100016],{"class":42,"line":121},[40,100017,100018],{"class":94},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[40,100020,100021],{"class":42,"line":134},[40,100022,100023],{"class":94},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[40,100025,100026],{"class":42,"line":146},[40,100027,100028],{"class":94},"dtype：ndarry的数据类型\n",[40,100030,100031],{"class":42,"line":154},[40,100032,98993],{"class":94},[19,100034,100035],{},[438,100036],{"alt":36,"src":100037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,100039,100040],{},"这里num=是可以省略的",[19,100042,100043],{},"也就是下方两行代码结果是一模一样的",[31,100045,100047],{"className":33679,"code":100046,"language":2323,"meta":36,"style":36},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[26,100048,100049,100066],{"__ignoreMap":36},[40,100050,100051,100054,100056,100058,100060,100062,100064],{"class":42,"line":43},[40,100052,100053],{"class":50},"np.linspace(",[40,100055,3698],{"class":63},[40,100057,1299],{"class":50},[40,100059,3799],{"class":63},[40,100061,1299],{"class":50},[40,100063,3799],{"class":63},[40,100065,1811],{"class":50},[40,100067,100068,100070,100072,100074,100076,100078,100080,100082,100084],{"class":42,"line":54},[40,100069,100053],{"class":50},[40,100071,3698],{"class":63},[40,100073,1299],{"class":50},[40,100075,3799],{"class":63},[40,100077,1299],{"class":50},[40,100079,5000],{"class":8539},[40,100081,1284],{"class":1283},[40,100083,3799],{"class":63},[40,100085,1811],{"class":50},[402,100087,100089],{"id":100088},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[31,100091,100093],{"className":33679,"code":100092,"language":2323,"meta":36,"style":36},"#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",[26,100094,100095,100100,100104,100109,100114,100119,100124,100128,100133,100138,100142],{"__ignoreMap":36},[40,100096,100097],{"class":42,"line":43},[40,100098,100099],{"class":997},"#logspace函数用于创建一个等比数列，格式如下：\n",[40,100101,100102],{"class":42,"line":54},[40,100103,98993],{"class":94},[40,100105,100106],{"class":42,"line":70},[40,100107,100108],{"class":94},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[40,100110,100111],{"class":42,"line":78},[40,100112,100113],{"class":94},"参数为：\n",[40,100115,100116],{"class":42,"line":86},[40,100117,100118],{"class":94},"start:序列的起始位置为：base**start\n",[40,100120,100121],{"class":42,"line":100},[40,100122,100123],{"class":94},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[40,100125,100126],{"class":42,"line":108},[40,100127,100013],{"class":94},[40,100129,100130],{"class":42,"line":121},[40,100131,100132],{"class":94},"endpoint：是否包含 stop 这个值，默认是 True\n",[40,100134,100135],{"class":42,"line":134},[40,100136,100137],{"class":94},"base：对数的底数，默认是 10（常见对数）\n",[40,100139,100140],{"class":42,"line":146},[40,100141,100028],{"class":94},[40,100143,100144],{"class":42,"line":154},[40,100145,98993],{"class":94},[19,100147,100148],{},[438,100149],{"alt":36,"src":100150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,100152,100153],{},"logspace()函数中的num参数也是可以不写num=的",[19,100155,100156],{},"endpoint是不可以省略的",[3384,100158,100159],{},"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":36,"searchDepth":54,"depth":54,"links":100161},[100162,100166,100171,100175,100179,100180],{"id":98551,"depth":54,"text":98552,"children":100163},[100164,100165],{"id":98555,"depth":70,"text":98556},{"id":98628,"depth":70,"text":98629},{"id":98660,"depth":54,"text":98661,"children":100167},[100168,100169,100170],{"id":98664,"depth":70,"text":98665},{"id":98846,"depth":70,"text":98847},{"id":98924,"depth":70,"text":98925},{"id":98959,"depth":54,"text":98960,"children":100172},[100173,100174],{"id":98963,"depth":70,"text":98964},{"id":99020,"depth":70,"text":99021},{"id":99116,"depth":54,"text":99117,"children":100176},[100177,100178],{"id":99120,"depth":70,"text":99121},{"id":99132,"depth":70,"text":99133},{"id":99166,"depth":54,"text":99167},{"id":99203,"depth":54,"text":99204,"children":100181},[100182,100183,100184,100185,100186,100187,100188,100189],{"id":99207,"depth":70,"text":99208},{"id":99432,"depth":70,"text":99433},{"id":99439,"depth":70,"text":99440},{"id":99648,"depth":70,"text":99649},{"id":99668,"depth":70,"text":99669},{"id":99804,"depth":70,"text":99805},{"id":99973,"depth":70,"text":99974},{"id":100088,"depth":70,"text":100089},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":98543,"description":3413},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":100196,"title":100197,"body":100198,"description":3413,"extension":3414,"meta":100291,"navigation":1412,"path":100292,"seo":100293,"stem":100294,"__hash__":100295},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":100199,"toc":100289},[100200,100203,100206,100209,100212,100215,100218,100221,100224,100227,100230,100233,100235,100238,100241,100246,100249,100252,100286],[10,100201,100197],{"id":100202},"_20魔法命令mprun",[19,100204,100205],{},"逐行分析数据内存的使用情况",[19,100207,100208],{},"语法格式：",[19,100210,100211],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,100213,100214],{},"分析结果列如下：",[19,100216,100217],{},"Line行号",[19,100219,100220],{},"Mem usage内存使用大小",[19,100222,100223],{},"increment内存增量",[19,100225,100226],{},"Line content代码内容",[19,100228,100229],{},"补充说明：",[19,100231,100232],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,100234,98498],{},[19,100236,100237],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,100239,100240],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,100242,100243],{},[438,100244],{"alt":36,"src":100245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,100247,100248],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,100250,100251],{},"这时候需要重新加载模块",[31,100253,100255],{"className":33679,"code":100254,"language":2323,"meta":36,"style":36},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[26,100256,100257,100262,100269,100274],{"__ignoreMap":36},[40,100258,100259],{"class":42,"line":43},[40,100260,100261],{"class":997},"#重新加载模块\n",[40,100263,100264,100266],{"class":42,"line":54},[40,100265,33692],{"class":1283},[40,100267,100268],{"class":50}," importlib\n",[40,100270,100271],{"class":42,"line":70},[40,100272,100273],{"class":50},"importlib.reload(mprun_test)\n",[40,100275,100276,100278,100281,100283],{"class":42,"line":78},[40,100277,3808],{"class":1283},[40,100279,100280],{"class":50},"mprun ",[40,100282,4011],{"class":1283},[40,100284,100285],{"class":50},"f mprun_test.fun_test mprun_test.fun_test()\n",[3384,100287,100288],{},"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":36,"searchDepth":54,"depth":54,"links":100290},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":100197,"description":3413},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":100297,"title":100298,"body":100299,"description":3413,"extension":3414,"meta":100316,"navigation":1412,"path":100317,"seo":100318,"stem":100319,"__hash__":100320},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":100300,"toc":100314},[100301,100304,100309],[10,100302,100298],{"id":100303},"_3一维数组的索引和切片",[19,100305,100306],{},[438,100307],{"alt":36,"src":100308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,100310,100311],{},[438,100312],{"alt":36,"src":100313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":36,"searchDepth":54,"depth":54,"links":100315},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":100298,"description":3413},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":100322,"title":100323,"body":100324,"description":3413,"extension":3414,"meta":100807,"navigation":1412,"path":100808,"seo":100809,"stem":100810,"__hash__":100811},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":100325,"toc":100805},[100326,100329,100332,100337,100370,100373,100411,100414,100448,100451,100556,100559,100596,100599,100700,100703,100754,100757,100799,100802],[10,100327,100323],{"id":100328},"_4二维数组的索引与切片",[19,100330,100331],{},"①获取指定单个元素",[19,100333,100334],{},[438,100335],{"alt":36,"src":100336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[31,100338,100340],{"className":33679,"code":100339,"language":2323,"meta":36,"style":36},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[26,100341,100342,100347,100352,100357],{"__ignoreMap":36},[40,100343,100344],{"class":42,"line":43},[40,100345,100346],{"class":997},"#获取元素9\n",[40,100348,100349],{"class":42,"line":54},[40,100350,100351],{"class":997},"#先获取所在行，再获取所在列\n",[40,100353,100354],{"class":42,"line":70},[40,100355,100356],{"class":997},"#数组[行索引号，列索引号]\n",[40,100358,100359,100362,100364,100366,100368],{"class":42,"line":78},[40,100360,100361],{"class":50},"a[",[40,100363,3698],{"class":63},[40,100365,1299],{"class":50},[40,100367,64],{"class":63},[40,100369,36546],{"class":50},[19,100371,100372],{},"②获取整行元素",[31,100374,100376],{"className":33679,"code":100375,"language":2323,"meta":36,"style":36},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[26,100377,100378,100383,100388,100396,100401],{"__ignoreMap":36},[40,100379,100380],{"class":42,"line":43},[40,100381,100382],{"class":997},"#获取整行 数组[行索引号]\n",[40,100384,100385],{"class":42,"line":54},[40,100386,100387],{"class":997},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[40,100389,100390,100392,100394],{"class":42,"line":70},[40,100391,100361],{"class":50},[40,100393,64],{"class":63},[40,100395,36546],{"class":50},[40,100397,100398],{"class":42,"line":78},[40,100399,100400],{"class":997},"#也可以负索引获取一行\n",[40,100402,100403,100405,100407,100409],{"class":42,"line":86},[40,100404,100361],{"class":50},[40,100406,4011],{"class":1283},[40,100408,3698],{"class":63},[40,100410,36546],{"class":50},[19,100412,100413],{},"③获取整列元素",[31,100415,100417],{"className":33679,"code":100416,"language":2323,"meta":36,"style":36},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[26,100418,100419,100424,100433,100438],{"__ignoreMap":36},[40,100420,100421],{"class":42,"line":43},[40,100422,100423],{"class":997},"#获取整列 数组名[:,列索引]\n",[40,100425,100426,100429,100431],{"class":42,"line":54},[40,100427,100428],{"class":50},"a[:,",[40,100430,64],{"class":63},[40,100432,36546],{"class":50},[40,100434,100435],{"class":42,"line":70},[40,100436,100437],{"class":997},"#也可以负索引获取一列\n",[40,100439,100440,100442,100444,100446],{"class":42,"line":78},[40,100441,100428],{"class":50},[40,100443,4011],{"class":1283},[40,100445,3698],{"class":63},[40,100447,36546],{"class":50},[19,100449,100450],{},"④部分行部分列的元素",[31,100452,100454],{"className":33679,"code":100453,"language":2323,"meta":36,"style":36},"#部分行部分列 数组名[行切片，列切片]\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",[26,100455,100456,100461,100471,100475,100479,100484,100489,100493,100505,100509,100513,100518,100523,100528,100533,100537,100542],{"__ignoreMap":36},[40,100457,100458],{"class":42,"line":43},[40,100459,100460],{"class":997},"#部分行部分列 数组名[行切片，列切片]\n",[40,100462,100463,100466,100468],{"class":42,"line":54},[40,100464,100465],{"class":50},"a[:",[40,100467,64],{"class":63},[40,100469,100470],{"class":50},",:]\n",[40,100472,100473],{"class":42,"line":70},[40,100474,96859],{"class":997},[40,100476,100477],{"class":42,"line":78},[40,100478,97223],{"class":94},[40,100480,100481],{"class":42,"line":86},[40,100482,100483],{"class":94},"array([[ 1,  2,  3,  4,  5,  6],\n",[40,100485,100486],{"class":42,"line":100},[40,100487,100488],{"class":94},"       [ 7,  8,  9, 10, 11, 12]])\n",[40,100490,100491],{"class":42,"line":108},[40,100492,97223],{"class":94},[40,100494,100495,100497,100499,100501,100503],{"class":42,"line":121},[40,100496,100428],{"class":50},[40,100498,3698],{"class":63},[40,100500,4336],{"class":50},[40,100502,3773],{"class":63},[40,100504,36546],{"class":50},[40,100506,100507],{"class":42,"line":134},[40,100508,96859],{"class":997},[40,100510,100511],{"class":42,"line":146},[40,100512,97223],{"class":94},[40,100514,100515],{"class":42,"line":154},[40,100516,100517],{"class":94},"array([[ 2,  3,  4],\n",[40,100519,100520],{"class":42,"line":162},[40,100521,100522],{"class":94},"       [ 8,  9, 10],\n",[40,100524,100525],{"class":42,"line":170},[40,100526,100527],{"class":94},"       [14, 15, 16],\n",[40,100529,100530],{"class":42,"line":183},[40,100531,100532],{"class":94},"       [20, 21, 22]])\n",[40,100534,100535],{"class":42,"line":196},[40,100536,97223],{"class":94},[40,100538,100539],{"class":42,"line":204},[40,100540,100541],{"class":997},"#对列行同时进行切片，使用了step参数\n",[40,100543,100544,100547,100549,100552,100554],{"class":42,"line":217},[40,100545,100546],{"class":50},"a[::",[40,100548,64],{"class":63},[40,100550,100551],{"class":50},",::",[40,100553,64],{"class":63},[40,100555,36546],{"class":50},[19,100557,100558],{},"⑤同时获取两个元素",[31,100560,100562],{"className":33679,"code":100561,"language":2323,"meta":36,"style":36},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[26,100563,100564,100569,100574],{"__ignoreMap":36},[40,100565,100566],{"class":42,"line":43},[40,100567,100568],{"class":997},"#同时获取第三行第二列，第四行第一列\n",[40,100570,100571],{"class":42,"line":54},[40,100572,100573],{"class":997},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[40,100575,100576,100579,100581,100583,100585,100587,100589,100591,100593],{"class":42,"line":70},[40,100577,100578],{"class":50},"a[(",[40,100580,64],{"class":63},[40,100582,1299],{"class":50},[40,100584,3555],{"class":63},[40,100586,45547],{"class":50},[40,100588,3698],{"class":63},[40,100590,1299],{"class":50},[40,100592,3672],{"class":63},[40,100594,100595],{"class":50},")]\n",[19,100597,100598],{},"⑥切片，对行进行反向获取",[31,100600,100602],{"className":33679,"code":100601,"language":2323,"meta":36,"style":36},"#切片 对所有行进行反向获取\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",[26,100603,100604,100609,100619,100623,100627,100632,100637,100642,100647,100651,100656,100672,100676,100681,100686,100691,100696],{"__ignoreMap":36},[40,100605,100606],{"class":42,"line":43},[40,100607,100608],{"class":997},"#切片 对所有行进行反向获取\n",[40,100610,100611,100613,100615,100617],{"class":42,"line":54},[40,100612,100546],{"class":50},[40,100614,4011],{"class":1283},[40,100616,3698],{"class":63},[40,100618,36546],{"class":50},[40,100620,100621],{"class":42,"line":70},[40,100622,96859],{"class":997},[40,100624,100625],{"class":42,"line":78},[40,100626,97223],{"class":94},[40,100628,100629],{"class":42,"line":86},[40,100630,100631],{"class":94},"array([[19, 20, 21, 22, 23, 24],\n",[40,100633,100634],{"class":42,"line":100},[40,100635,100636],{"class":94},"       [13, 14, 15, 16, 17, 18],\n",[40,100638,100639],{"class":42,"line":108},[40,100640,100641],{"class":94},"       [ 7,  8,  9, 10, 11, 12],\n",[40,100643,100644],{"class":42,"line":121},[40,100645,100646],{"class":94},"       [ 1,  2,  3,  4,  5,  6]])\n",[40,100648,100649],{"class":42,"line":134},[40,100650,97223],{"class":94},[40,100652,100653],{"class":42,"line":146},[40,100654,100655],{"class":997},"#对行列都进行反向切片获取\n",[40,100657,100658,100660,100662,100664,100666,100668,100670],{"class":42,"line":154},[40,100659,100546],{"class":50},[40,100661,4011],{"class":1283},[40,100663,3698],{"class":63},[40,100665,100551],{"class":50},[40,100667,4011],{"class":1283},[40,100669,3698],{"class":63},[40,100671,36546],{"class":50},[40,100673,100674],{"class":42,"line":162},[40,100675,97223],{"class":94},[40,100677,100678],{"class":42,"line":170},[40,100679,100680],{"class":94},"array([[24, 23, 22, 21, 20, 19],\n",[40,100682,100683],{"class":42,"line":183},[40,100684,100685],{"class":94},"       [18, 17, 16, 15, 14, 13],\n",[40,100687,100688],{"class":42,"line":196},[40,100689,100690],{"class":94},"       [12, 11, 10,  9,  8,  7],\n",[40,100692,100693],{"class":42,"line":204},[40,100694,100695],{"class":94},"       [ 6,  5,  4,  3,  2,  1]])\n",[40,100697,100698],{"class":42,"line":217},[40,100699,97223],{"class":94},[19,100701,100702],{},"⑦修改元素",[31,100704,100706],{"className":33679,"code":100705,"language":2323,"meta":36,"style":36},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[26,100707,100708,100713,100731,100736],{"__ignoreMap":36},[40,100709,100710],{"class":42,"line":43},[40,100711,100712],{"class":997},"#获取前两行和前两列\n",[40,100714,100715,100718,100720,100722,100724,100727,100729],{"class":42,"line":54},[40,100716,100717],{"class":50},"sub_a",[40,100719,1284],{"class":1283},[40,100721,100465],{"class":50},[40,100723,64],{"class":63},[40,100725,100726],{"class":50},",:",[40,100728,64],{"class":63},[40,100730,36546],{"class":50},[40,100732,100733],{"class":42,"line":70},[40,100734,100735],{"class":997},"#修改sub_a第一个元素的值\n",[40,100737,100738,100741,100743,100745,100747,100749,100751],{"class":42,"line":78},[40,100739,100740],{"class":50},"sub_a[",[40,100742,3672],{"class":63},[40,100744,1299],{"class":50},[40,100746,3672],{"class":63},[40,100748,4417],{"class":50},[40,100750,1284],{"class":1283},[40,100752,100753],{"class":63},"100\n",[19,100755,100756],{},"⑧数组复制copy()",[31,100758,100760],{"className":33679,"code":100759,"language":2323,"meta":36,"style":36},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[26,100761,100762,100767,100777,100782],{"__ignoreMap":36},[40,100763,100764],{"class":42,"line":43},[40,100765,100766],{"class":997},"#数组复制\n",[40,100768,100769,100772,100774],{"class":42,"line":54},[40,100770,100771],{"class":50},"copy_a",[40,100773,1284],{"class":1283},[40,100775,100776],{"class":50},"np.copy(sub_a)\n",[40,100778,100779],{"class":42,"line":70},[40,100780,100781],{"class":997},"#修改copy_a后不影响原数组\n",[40,100783,100784,100787,100789,100791,100793,100795,100797],{"class":42,"line":78},[40,100785,100786],{"class":50},"copy_a[",[40,100788,3672],{"class":63},[40,100790,1299],{"class":50},[40,100792,3672],{"class":63},[40,100794,4417],{"class":50},[40,100796,1284],{"class":1283},[40,100798,100753],{"class":63},[19,100800,100801],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[3384,100803,100804],{},"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":36,"searchDepth":54,"depth":54,"links":100806},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":100323,"description":3413},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":100813,"title":100814,"body":100815,"description":3413,"extension":3414,"meta":101307,"navigation":1412,"path":101308,"seo":101309,"stem":101310,"__hash__":101311},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":100816,"toc":101299},[100817,100820,100824,100827,100830,100883,100886,100911,100914,100933,100953,100956,100972,100976,101022,101026,101068,101072,101075,101078,101081,101084,101087,101149,101209,101213,101216,101273,101277,101282,101291,101296],[10,100818,100814],{"id":100819},"_5改变数组的维度",[14,100821,100823],{"id":100822},"_51-使用reshape","5.1 使用reshape()",[19,100825,100826],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,100828,100829],{},"①一维数组转换为二维数组",[31,100831,100833],{"className":33679,"code":100832,"language":2323,"meta":36,"style":36},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[26,100834,100835,100851,100856,100861,100866],{"__ignoreMap":36},[40,100836,100837,100839,100841,100843,100845,100847,100849],{"class":42,"line":43},[40,100838,2106],{"class":50},[40,100840,1284],{"class":1283},[40,100842,96297],{"class":50},[40,100844,3698],{"class":63},[40,100846,1299],{"class":50},[40,100848,4002],{"class":63},[40,100850,1811],{"class":50},[40,100852,100853],{"class":42,"line":54},[40,100854,100855],{"class":997},"#将一维数组进行转换\n",[40,100857,100858],{"class":42,"line":70},[40,100859,100860],{"class":997},"#注意点：元素个数不可以变\n",[40,100862,100863],{"class":42,"line":78},[40,100864,100865],{"class":997},"#转换维度要保持一致，不一致就异常！！！\n",[40,100867,100868,100870,100872,100875,100877,100879,100881],{"class":42,"line":86},[40,100869,96601],{"class":50},[40,100871,1284],{"class":1283},[40,100873,100874],{"class":50},"a.reshape(",[40,100876,64],{"class":63},[40,100878,1299],{"class":50},[40,100880,3824],{"class":63},[40,100882,1811],{"class":50},[19,100884,100885],{},"②一维数组转换为三维数组",[31,100887,100889],{"className":33679,"code":100888,"language":2323,"meta":36,"style":36},"aaa=a.reshape(2,3,2)\n",[26,100890,100891],{"__ignoreMap":36},[40,100892,100893,100895,100897,100899,100901,100903,100905,100907,100909],{"class":42,"line":43},[40,100894,98816],{"class":50},[40,100896,1284],{"class":1283},[40,100898,100874],{"class":50},[40,100900,64],{"class":63},[40,100902,1299],{"class":50},[40,100904,3555],{"class":63},[40,100906,1299],{"class":50},[40,100908,64],{"class":63},[40,100910,1811],{"class":50},[19,100912,100913],{},"③二维数组转化为一维数组",[31,100915,100917],{"className":33679,"code":100916,"language":2323,"meta":36,"style":36},"#知道元素个数：\naa.reshape(12)\n",[26,100918,100919,100924],{"__ignoreMap":36},[40,100920,100921],{"class":42,"line":43},[40,100922,100923],{"class":997},"#知道元素个数：\n",[40,100925,100926,100929,100931],{"class":42,"line":54},[40,100927,100928],{"class":50},"aa.reshape(",[40,100930,3977],{"class":63},[40,100932,1811],{"class":50},[31,100934,100936],{"className":33679,"code":100935,"language":2323,"meta":36,"style":36},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[26,100937,100938,100943],{"__ignoreMap":36},[40,100939,100940],{"class":42,"line":43},[40,100941,100942],{"class":997},"#不知道元素个数，参数传递-1\n",[40,100944,100945,100947,100949,100951],{"class":42,"line":54},[40,100946,100928],{"class":50},[40,100948,4011],{"class":1283},[40,100950,3698],{"class":63},[40,100952,1811],{"class":50},[19,100954,100955],{},"④三维数组转换为一维数组",[31,100957,100959],{"className":33679,"code":100958,"language":2323,"meta":36,"style":36},"aaa.reshape(-1)\n",[26,100960,100961],{"__ignoreMap":36},[40,100962,100963,100966,100968,100970],{"class":42,"line":43},[40,100964,100965],{"class":50},"aaa.reshape(",[40,100967,4011],{"class":1283},[40,100969,3698],{"class":63},[40,100971,1811],{"class":50},[14,100973,100975],{"id":100974},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[31,100977,100979],{"className":33679,"code":100978,"language":2323,"meta":36,"style":36},"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",[26,100980,100981,101008,101013,101017],{"__ignoreMap":36},[40,100982,100983,100985,100987,100989,100991,100993,100995,100997,100999,101001,101003,101005],{"class":42,"line":43},[40,100984,96601],{"class":50},[40,100986,1284],{"class":1283},[40,100988,96297],{"class":50},[40,100990,3698],{"class":63},[40,100992,1299],{"class":50},[40,100994,4002],{"class":63},[40,100996,96302],{"class":50},[40,100998,64],{"class":63},[40,101000,1299],{"class":50},[40,101002,3824],{"class":63},[40,101004,3908],{"class":50},[40,101006,101007],{"class":997},"#转换为2行6列的数组\n",[40,101009,101010],{"class":42,"line":54},[40,101011,101012],{"class":50},"aa.revel()\n",[40,101014,101015],{"class":42,"line":70},[40,101016,96859],{"class":997},[40,101018,101019],{"class":42,"line":78},[40,101020,101021],{"class":997},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,101023,101025],{"id":101024},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[31,101027,101029],{"className":33679,"code":101028,"language":2323,"meta":36,"style":36},"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",[26,101030,101031,101055,101060,101064],{"__ignoreMap":36},[40,101032,101033,101035,101037,101039,101041,101043,101045,101047,101049,101051,101053],{"class":42,"line":43},[40,101034,96601],{"class":50},[40,101036,1284],{"class":1283},[40,101038,96297],{"class":50},[40,101040,3698],{"class":63},[40,101042,1299],{"class":50},[40,101044,4002],{"class":63},[40,101046,96302],{"class":50},[40,101048,64],{"class":63},[40,101050,1299],{"class":50},[40,101052,3824],{"class":63},[40,101054,1811],{"class":50},[40,101056,101057],{"class":42,"line":54},[40,101058,101059],{"class":50},"aa.flatten()\n",[40,101061,101062],{"class":42,"line":70},[40,101063,96859],{"class":997},[40,101065,101066],{"class":42,"line":78},[40,101067,101021],{"class":997},[14,101069,101071],{"id":101070},"_54-使用resize","5.4 使用resize()",[19,101073,101074],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,101076,101077],{},"通过resize方法可以改变数组的维度",[19,101079,101080],{},"#resize修改数组维度",[19,101082,101083],{},"#以元组的形式指定形状",[19,101085,101086],{},"#改变的是原数组",[31,101088,101090],{"className":33679,"code":101089,"language":2323,"meta":36,"style":36},"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",[26,101091,101092,101108,101128,101141,101145],{"__ignoreMap":36},[40,101093,101094,101096,101098,101100,101102,101104,101106],{"class":42,"line":43},[40,101095,2106],{"class":50},[40,101097,1284],{"class":1283},[40,101099,96297],{"class":50},[40,101101,3698],{"class":63},[40,101103,1299],{"class":50},[40,101105,4002],{"class":63},[40,101107,1811],{"class":50},[40,101109,101110,101113,101115,101117,101119,101121,101123,101125],{"class":42,"line":54},[40,101111,101112],{"class":50},"a.shape",[40,101114,1284],{"class":1283},[40,101116,3488],{"class":50},[40,101118,64],{"class":63},[40,101120,1299],{"class":50},[40,101122,3824],{"class":63},[40,101124,3908],{"class":50},[40,101126,101127],{"class":997},"#改变了原数组\n",[40,101129,101130,101132,101134,101137,101139],{"class":42,"line":70},[40,101131,2106],{"class":50},[40,101133,1284],{"class":1283},[40,101135,101136],{"class":50},"resize((",[40,101138,3977],{"class":63},[40,101140,33797],{"class":50},[40,101142,101143],{"class":42,"line":78},[40,101144,96859],{"class":997},[40,101146,101147],{"class":42,"line":86},[40,101148,101021],{"class":997},[31,101150,101152],{"className":33679,"code":101151,"language":2323,"meta":36,"style":36},"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",[26,101153,101154,101167,101171,101175,101180,101185,101190,101195,101200,101205],{"__ignoreMap":36},[40,101155,101156,101159,101161,101163,101165],{"class":42,"line":43},[40,101157,101158],{"class":50},"a.resize((",[40,101160,3824],{"class":63},[40,101162,1299],{"class":50},[40,101164,64],{"class":63},[40,101166,33797],{"class":50},[40,101168,101169],{"class":42,"line":54},[40,101170,96859],{"class":997},[40,101172,101173],{"class":42,"line":70},[40,101174,97223],{"class":94},[40,101176,101177],{"class":42,"line":78},[40,101178,101179],{"class":94},"array([[ 1,  2],\n",[40,101181,101182],{"class":42,"line":86},[40,101183,101184],{"class":94},"       [ 3,  4],\n",[40,101186,101187],{"class":42,"line":100},[40,101188,101189],{"class":94},"       [ 5,  6],\n",[40,101191,101192],{"class":42,"line":108},[40,101193,101194],{"class":94},"       [ 7,  8],\n",[40,101196,101197],{"class":42,"line":121},[40,101198,101199],{"class":94},"       [ 9, 10],\n",[40,101201,101202],{"class":42,"line":134},[40,101203,101204],{"class":94},"       [11, 12]])\n",[40,101206,101207],{"class":42,"line":146},[40,101208,97223],{"class":94},[14,101210,101212],{"id":101211},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,101214,101215],{},"改变了原数组",[31,101217,101219],{"className":33679,"code":101218,"language":2323,"meta":36,"style":36},"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",[26,101220,101221,101237,101253,101257,101261,101265,101269],{"__ignoreMap":36},[40,101222,101223,101225,101227,101229,101231,101233,101235],{"class":42,"line":43},[40,101224,2106],{"class":50},[40,101226,1284],{"class":1283},[40,101228,96297],{"class":50},[40,101230,3698],{"class":63},[40,101232,1299],{"class":50},[40,101234,4002],{"class":63},[40,101236,1811],{"class":50},[40,101238,101239,101241,101243,101245,101247,101249,101251],{"class":42,"line":54},[40,101240,101112],{"class":50},[40,101242,1284],{"class":1283},[40,101244,3488],{"class":50},[40,101246,64],{"class":63},[40,101248,1299],{"class":50},[40,101250,3824],{"class":63},[40,101252,1811],{"class":50},[40,101254,101255],{"class":42,"line":70},[40,101256,96859],{"class":997},[40,101258,101259],{"class":42,"line":78},[40,101260,97223],{"class":94},[40,101262,101263],{"class":42,"line":86},[40,101264,100483],{"class":94},[40,101266,101267],{"class":42,"line":100},[40,101268,100488],{"class":94},[40,101270,101271],{"class":42,"line":108},[40,101272,97223],{"class":94},[14,101274,101276],{"id":101275},"_56-重要比较","5.6 重要比较：",[19,101278,101279],{},[438,101280],{"alt":36,"src":101281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,101283,101284,101285,101287,101288,101290],{},"口诀：NumPy 函数要么用 ",[26,101286,99258],{},"，要么用 ",[26,101289,34796],{},"，创建结构用 shape，造数据用 size",[19,101292,101293],{},[438,101294],{"alt":36,"src":101295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[3384,101297,101298],{},"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":36,"searchDepth":54,"depth":54,"links":101300},[101301,101302,101303,101304,101305,101306],{"id":100822,"depth":54,"text":100823},{"id":100974,"depth":54,"text":100975},{"id":101024,"depth":54,"text":101025},{"id":101070,"depth":54,"text":101071},{"id":101211,"depth":54,"text":101212},{"id":101275,"depth":54,"text":101276},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":100814,"description":3413},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":101313,"title":101314,"body":101315,"description":3413,"extension":3414,"meta":102387,"navigation":1412,"path":102388,"seo":102389,"stem":102390,"__hash__":102391},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":101316,"toc":102381},[101317,101320,101324,101327,101330,101333,101398,101401,101441,101444,101526,101529,101534,101556,101558,101563,101568,101571,101574,101729,101732,101934,101938,101941,101944,102012,102014,102019,102022,102025,102105,102109,102112,102114,102187,102189,102194,102196,102276,102280,102283,102286,102289,102292,102295,102298,102378],[10,101318,101314],{"id":101319},"_6数组的拼接",[14,101321,101323],{"id":101322},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,101325,101326],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,101328,101329],{},"函数内部传两个数列构成的数列或者元组",[19,101331,101332],{},"①一维数组的拼接",[31,101334,101336],{"className":33679,"code":101335,"language":2323,"meta":36,"style":36},"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",[26,101337,101338,101358,101378,101383,101388,101393],{"__ignoreMap":36},[40,101339,101340,101342,101344,101346,101348,101350,101352,101354,101356],{"class":42,"line":43},[40,101341,2106],{"class":50},[40,101343,1284],{"class":1283},[40,101345,96319],{"class":50},[40,101347,3698],{"class":63},[40,101349,1299],{"class":50},[40,101351,64],{"class":63},[40,101353,1299],{"class":50},[40,101355,3555],{"class":63},[40,101357,7980],{"class":50},[40,101359,101360,101362,101364,101366,101368,101370,101372,101374,101376],{"class":42,"line":54},[40,101361,3743],{"class":50},[40,101363,1284],{"class":1283},[40,101365,96319],{"class":50},[40,101367,3773],{"class":63},[40,101369,1299],{"class":50},[40,101371,3799],{"class":63},[40,101373,1299],{"class":50},[40,101375,3824],{"class":63},[40,101377,7980],{"class":50},[40,101379,101380],{"class":42,"line":70},[40,101381,101382],{"class":997},"#调用concatenate进行数组拼接\n",[40,101384,101385],{"class":42,"line":78},[40,101386,101387],{"class":50},"np.concatenate((a,b))\n",[40,101389,101390],{"class":42,"line":86},[40,101391,101392],{"class":997},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[40,101394,101395],{"class":42,"line":100},[40,101396,101397],{"class":997},"#np.concatenate([a,b])\n",[19,101399,101400],{},"②一维多个数组拼接",[31,101402,101404],{"className":33679,"code":101403,"language":2323,"meta":36,"style":36},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[26,101405,101406,101411,101431,101436],{"__ignoreMap":36},[40,101407,101408],{"class":42,"line":43},[40,101409,101410],{"class":997},"#也可以多个数组进行拼接\n",[40,101412,101413,101415,101417,101419,101421,101423,101425,101427,101429],{"class":42,"line":54},[40,101414,3768],{"class":50},[40,101416,1284],{"class":1283},[40,101418,96319],{"class":50},[40,101420,3925],{"class":63},[40,101422,1299],{"class":50},[40,101424,3951],{"class":63},[40,101426,1299],{"class":50},[40,101428,4002],{"class":63},[40,101430,7980],{"class":50},[40,101432,101433],{"class":42,"line":70},[40,101434,101435],{"class":50},"c\n",[40,101437,101438],{"class":42,"line":78},[40,101439,101440],{"class":50},"np.concatenate((a,b,c))\n",[19,101442,101443],{},"③二维数组拼接",[31,101445,101447],{"className":33679,"code":101446,"language":2323,"meta":36,"style":36},"#二维数组使用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",[26,101448,101449,101454,101478,101503,101508,101513],{"__ignoreMap":36},[40,101450,101451],{"class":42,"line":43},[40,101452,101453],{"class":997},"#二维数组使用concatenate进行拼接\n",[40,101455,101456,101458,101460,101462,101464,101466,101468,101470,101472,101474,101476],{"class":42,"line":54},[40,101457,96601],{"class":50},[40,101459,1284],{"class":1283},[40,101461,96297],{"class":50},[40,101463,3698],{"class":63},[40,101465,1299],{"class":50},[40,101467,4002],{"class":63},[40,101469,96302],{"class":50},[40,101471,3555],{"class":63},[40,101473,1299],{"class":50},[40,101475,3773],{"class":63},[40,101477,1811],{"class":50},[40,101479,101480,101483,101485,101487,101489,101491,101493,101495,101497,101499,101501],{"class":42,"line":70},[40,101481,101482],{"class":50},"bb",[40,101484,1284],{"class":1283},[40,101486,96297],{"class":50},[40,101488,3817],{"class":63},[40,101490,1299],{"class":50},[40,101492,4121],{"class":63},[40,101494,96302],{"class":50},[40,101496,3555],{"class":63},[40,101498,1299],{"class":50},[40,101500,3773],{"class":63},[40,101502,1811],{"class":50},[40,101504,101505],{"class":42,"line":78},[40,101506,101507],{"class":997},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[40,101509,101510],{"class":42,"line":86},[40,101511,101512],{"class":997},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[40,101514,101515,101518,101520,101522,101524],{"class":42,"line":100},[40,101516,101517],{"class":50},"np.concatenate((aa,bb),",[40,101519,50814],{"class":8539},[40,101521,1284],{"class":1283},[40,101523,3672],{"class":63},[40,101525,1811],{"class":50},[19,101527,101528],{},"结果：",[19,101530,101531],{},[438,101532],{"alt":36,"src":101533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[31,101535,101537],{"className":33679,"code":101536,"language":2323,"meta":36,"style":36},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[26,101538,101539,101544],{"__ignoreMap":36},[40,101540,101541],{"class":42,"line":43},[40,101542,101543],{"class":997},"#指定axis为1进行拼接\n",[40,101545,101546,101548,101550,101552,101554],{"class":42,"line":54},[40,101547,101517],{"class":50},[40,101549,50814],{"class":8539},[40,101551,1284],{"class":1283},[40,101553,3698],{"class":63},[40,101555,1811],{"class":50},[19,101557,101528],{},[19,101559,101560],{},[438,101561],{"alt":36,"src":101562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,101564,101565],{},[409,101566,101567],{},"二维数组总结：0竖着方向，1横着方向",[19,101569,101570],{},"④三维数组拼接",[19,101572,101573],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[31,101575,101577],{"className":33679,"code":101576,"language":2323,"meta":36,"style":36},"#两个三行六列\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",[26,101578,101579,101584,101612,101642,101647,101664,101669,101674,101679,101696,101701,101706,101711,101724],{"__ignoreMap":36},[40,101580,101581],{"class":42,"line":43},[40,101582,101583],{"class":997},"#两个三行六列\n",[40,101585,101586,101588,101590,101592,101594,101596,101598,101600,101602,101604,101606,101608,101610],{"class":42,"line":54},[40,101587,98816],{"class":50},[40,101589,1284],{"class":1283},[40,101591,96297],{"class":50},[40,101593,3698],{"class":63},[40,101595,1299],{"class":50},[40,101597,3805],{"class":63},[40,101599,96302],{"class":50},[40,101601,64],{"class":63},[40,101603,1299],{"class":50},[40,101605,3555],{"class":63},[40,101607,1299],{"class":50},[40,101609,3824],{"class":63},[40,101611,1811],{"class":50},[40,101613,101614,101617,101619,101621,101623,101625,101628,101630,101632,101634,101636,101638,101640],{"class":42,"line":70},[40,101615,101616],{"class":50},"bbb",[40,101618,1284],{"class":1283},[40,101620,96297],{"class":50},[40,101622,3817],{"class":63},[40,101624,1299],{"class":50},[40,101626,101627],{"class":63},"137",[40,101629,96302],{"class":50},[40,101631,64],{"class":63},[40,101633,1299],{"class":50},[40,101635,3555],{"class":63},[40,101637,1299],{"class":50},[40,101639,3824],{"class":63},[40,101641,1811],{"class":50},[40,101643,101644],{"class":42,"line":78},[40,101645,101646],{"class":997},"#axis=0\n",[40,101648,101649,101651,101653,101656,101658,101660,101662],{"class":42,"line":86},[40,101650,4173],{"class":50},[40,101652,1284],{"class":1283},[40,101654,101655],{"class":50},"np.concatenate((aaa,bbb),",[40,101657,50814],{"class":8539},[40,101659,1284],{"class":1283},[40,101661,3672],{"class":63},[40,101663,1811],{"class":50},[40,101665,101666],{"class":42,"line":100},[40,101667,101668],{"class":50},"s.shape\n",[40,101670,101671],{"class":42,"line":108},[40,101672,101673],{"class":997},"#输出：(4,3,6)\n",[40,101675,101676],{"class":42,"line":121},[40,101677,101678],{"class":997},"#axis=1\n",[40,101680,101681,101684,101686,101688,101690,101692,101694],{"class":42,"line":134},[40,101682,101683],{"class":50},"ss",[40,101685,1284],{"class":1283},[40,101687,101655],{"class":50},[40,101689,50814],{"class":8539},[40,101691,1284],{"class":1283},[40,101693,3698],{"class":63},[40,101695,1811],{"class":50},[40,101697,101698],{"class":42,"line":146},[40,101699,101700],{"class":50},"ss.shape\n",[40,101702,101703],{"class":42,"line":154},[40,101704,101705],{"class":997},"#输出：(2,6,6)\n",[40,101707,101708],{"class":42,"line":162},[40,101709,101710],{"class":997},"#axis=2\n",[40,101712,101713,101715,101717,101719,101721],{"class":42,"line":170},[40,101714,101655],{"class":50},[40,101716,50814],{"class":8539},[40,101718,1284],{"class":1283},[40,101720,64],{"class":63},[40,101722,101723],{"class":50},").shape\n",[40,101725,101726],{"class":42,"line":183},[40,101727,101728],{"class":997},"#输出：（2，3，12）\n",[19,101730,101731],{},"⑤四维数组拼接",[31,101733,101735],{"className":33679,"code":101734,"language":2323,"meta":36,"style":36},"#两个三行六列\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",[26,101736,101737,101741,101769,101797,101822,101848,101852,101865,101870,101874,101886,101891,101895,101907,101912,101917,101929],{"__ignoreMap":36},[40,101738,101739],{"class":42,"line":43},[40,101740,101583],{"class":997},[40,101742,101743,101745,101747,101749,101751,101753,101755,101757,101759,101761,101763,101765,101767],{"class":42,"line":54},[40,101744,98816],{"class":50},[40,101746,1284],{"class":1283},[40,101748,96297],{"class":50},[40,101750,3698],{"class":63},[40,101752,1299],{"class":50},[40,101754,3805],{"class":63},[40,101756,96302],{"class":50},[40,101758,64],{"class":63},[40,101760,1299],{"class":50},[40,101762,3555],{"class":63},[40,101764,1299],{"class":50},[40,101766,3824],{"class":63},[40,101768,1811],{"class":50},[40,101770,101771,101773,101775,101777,101779,101781,101783,101785,101787,101789,101791,101793,101795],{"class":42,"line":70},[40,101772,101616],{"class":50},[40,101774,1284],{"class":1283},[40,101776,96297],{"class":50},[40,101778,3817],{"class":63},[40,101780,1299],{"class":50},[40,101782,101627],{"class":63},[40,101784,96302],{"class":50},[40,101786,64],{"class":63},[40,101788,1299],{"class":50},[40,101790,3555],{"class":63},[40,101792,1299],{"class":50},[40,101794,3824],{"class":63},[40,101796,1811],{"class":50},[40,101798,101799,101802,101804,101806,101808,101810,101812,101814,101816,101818,101820],{"class":42,"line":78},[40,101800,101801],{"class":50},"aaaa",[40,101803,1284],{"class":1283},[40,101805,100965],{"class":50},[40,101807,64],{"class":63},[40,101809,1299],{"class":50},[40,101811,3555],{"class":63},[40,101813,1299],{"class":50},[40,101815,3555],{"class":63},[40,101817,1299],{"class":50},[40,101819,64],{"class":63},[40,101821,1811],{"class":50},[40,101823,101824,101827,101829,101832,101834,101836,101838,101840,101842,101844,101846],{"class":42,"line":86},[40,101825,101826],{"class":50},"bbbb",[40,101828,1284],{"class":1283},[40,101830,101831],{"class":50},"bbb.reshape(",[40,101833,64],{"class":63},[40,101835,1299],{"class":50},[40,101837,3555],{"class":63},[40,101839,1299],{"class":50},[40,101841,3555],{"class":63},[40,101843,1299],{"class":50},[40,101845,64],{"class":63},[40,101847,1811],{"class":50},[40,101849,101850],{"class":42,"line":100},[40,101851,101646],{"class":997},[40,101853,101854,101857,101859,101861,101863],{"class":42,"line":108},[40,101855,101856],{"class":50},"np.concatenate((aaaa,bbbb),",[40,101858,50814],{"class":8539},[40,101860,1284],{"class":1283},[40,101862,3672],{"class":63},[40,101864,101723],{"class":50},[40,101866,101867],{"class":42,"line":121},[40,101868,101869],{"class":997},"#结果：（4，3，3，2）\n",[40,101871,101872],{"class":42,"line":134},[40,101873,101678],{"class":997},[40,101875,101876,101878,101880,101882,101884],{"class":42,"line":146},[40,101877,101856],{"class":50},[40,101879,50814],{"class":8539},[40,101881,1284],{"class":1283},[40,101883,3698],{"class":63},[40,101885,101723],{"class":50},[40,101887,101888],{"class":42,"line":154},[40,101889,101890],{"class":997},"#结果：（2，6，3，2）\n",[40,101892,101893],{"class":42,"line":162},[40,101894,101710],{"class":997},[40,101896,101897,101899,101901,101903,101905],{"class":42,"line":170},[40,101898,101856],{"class":50},[40,101900,50814],{"class":8539},[40,101902,1284],{"class":1283},[40,101904,64],{"class":63},[40,101906,101723],{"class":50},[40,101908,101909],{"class":42,"line":183},[40,101910,101911],{"class":997},"#结果：（2，3，6，2）\n",[40,101913,101914],{"class":42,"line":196},[40,101915,101916],{"class":997},"#axis=3\n",[40,101918,101919,101921,101923,101925,101927],{"class":42,"line":204},[40,101920,101856],{"class":50},[40,101922,50814],{"class":8539},[40,101924,1284],{"class":1283},[40,101926,3555],{"class":63},[40,101928,101723],{"class":50},[40,101930,101931],{"class":42,"line":217},[40,101932,101933],{"class":997},"#结果：（2，3，3，4）\n",[14,101935,101937],{"id":101936},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,101939,101940],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,101942,101943],{},"①二维数组",[31,101945,101947],{"className":33679,"code":101946,"language":2323,"meta":36,"style":36},"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",[26,101948,101949,101973,101997,102002,102007],{"__ignoreMap":36},[40,101950,101951,101953,101955,101957,101959,101961,101963,101965,101967,101969,101971],{"class":42,"line":43},[40,101952,96601],{"class":50},[40,101954,1284],{"class":1283},[40,101956,96297],{"class":50},[40,101958,3698],{"class":63},[40,101960,1299],{"class":50},[40,101962,4002],{"class":63},[40,101964,96302],{"class":50},[40,101966,3555],{"class":63},[40,101968,1299],{"class":50},[40,101970,3773],{"class":63},[40,101972,1811],{"class":50},[40,101974,101975,101977,101979,101981,101983,101985,101987,101989,101991,101993,101995],{"class":42,"line":54},[40,101976,101482],{"class":50},[40,101978,1284],{"class":1283},[40,101980,96297],{"class":50},[40,101982,3817],{"class":63},[40,101984,1299],{"class":50},[40,101986,4121],{"class":63},[40,101988,96302],{"class":50},[40,101990,3555],{"class":63},[40,101992,1299],{"class":50},[40,101994,3773],{"class":63},[40,101996,1811],{"class":50},[40,101998,101999],{"class":42,"line":70},[40,102000,102001],{"class":50},"np.hstack((aa,bb))\n",[40,102003,102004],{"class":42,"line":78},[40,102005,102006],{"class":997},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[40,102008,102009],{"class":42,"line":86},[40,102010,102011],{"class":997},"#np.hstack([aa,bb])\n",[19,102013,101528],{},[19,102015,102016],{},[438,102017],{"alt":36,"src":102018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,102020,102021],{},"等效于concatenate()函数中axis=1时的情况",[19,102023,102024],{},"②三维数组",[31,102026,102028],{"className":33679,"code":102027,"language":2323,"meta":36,"style":36},"#两个三行六列\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",[26,102029,102030,102034,102062,102090,102095,102100],{"__ignoreMap":36},[40,102031,102032],{"class":42,"line":43},[40,102033,101583],{"class":997},[40,102035,102036,102038,102040,102042,102044,102046,102048,102050,102052,102054,102056,102058,102060],{"class":42,"line":54},[40,102037,98816],{"class":50},[40,102039,1284],{"class":1283},[40,102041,96297],{"class":50},[40,102043,3698],{"class":63},[40,102045,1299],{"class":50},[40,102047,3805],{"class":63},[40,102049,96302],{"class":50},[40,102051,64],{"class":63},[40,102053,1299],{"class":50},[40,102055,3555],{"class":63},[40,102057,1299],{"class":50},[40,102059,3824],{"class":63},[40,102061,1811],{"class":50},[40,102063,102064,102066,102068,102070,102072,102074,102076,102078,102080,102082,102084,102086,102088],{"class":42,"line":70},[40,102065,101616],{"class":50},[40,102067,1284],{"class":1283},[40,102069,96297],{"class":50},[40,102071,3817],{"class":63},[40,102073,1299],{"class":50},[40,102075,101627],{"class":63},[40,102077,96302],{"class":50},[40,102079,64],{"class":63},[40,102081,1299],{"class":50},[40,102083,3555],{"class":63},[40,102085,1299],{"class":50},[40,102087,3824],{"class":63},[40,102089,1811],{"class":50},[40,102091,102092],{"class":42,"line":78},[40,102093,102094],{"class":997},"#使用hstack\n",[40,102096,102097],{"class":42,"line":86},[40,102098,102099],{"class":50},"np.hstack((aaa,bbb)).shape\n",[40,102101,102102],{"class":42,"line":100},[40,102103,102104],{"class":997},"#输出：（2，6，6）\n",[14,102106,102108],{"id":102107},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,102110,102111],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,102113,101943],{},[31,102115,102117],{"className":33679,"code":102116,"language":2323,"meta":36,"style":36},"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",[26,102118,102119,102143,102167,102172,102177,102182],{"__ignoreMap":36},[40,102120,102121,102123,102125,102127,102129,102131,102133,102135,102137,102139,102141],{"class":42,"line":43},[40,102122,96601],{"class":50},[40,102124,1284],{"class":1283},[40,102126,96297],{"class":50},[40,102128,3698],{"class":63},[40,102130,1299],{"class":50},[40,102132,4002],{"class":63},[40,102134,96302],{"class":50},[40,102136,3555],{"class":63},[40,102138,1299],{"class":50},[40,102140,3773],{"class":63},[40,102142,1811],{"class":50},[40,102144,102145,102147,102149,102151,102153,102155,102157,102159,102161,102163,102165],{"class":42,"line":54},[40,102146,101482],{"class":50},[40,102148,1284],{"class":1283},[40,102150,96297],{"class":50},[40,102152,3817],{"class":63},[40,102154,1299],{"class":50},[40,102156,4121],{"class":63},[40,102158,96302],{"class":50},[40,102160,3555],{"class":63},[40,102162,1299],{"class":50},[40,102164,3773],{"class":63},[40,102166,1811],{"class":50},[40,102168,102169],{"class":42,"line":70},[40,102170,102171],{"class":997},"#vstack 垂直方向进行堆叠\n",[40,102173,102174],{"class":42,"line":78},[40,102175,102176],{"class":50},"np.vstack((aa,bb))\n",[40,102178,102179],{"class":42,"line":86},[40,102180,102181],{"class":997},"#与hstack传的参数类似，等价于：\n",[40,102183,102184],{"class":42,"line":100},[40,102185,102186],{"class":50},"np.vstack([aa,bb])\n",[19,102188,101528],{},[19,102190,102191],{},[438,102192],{"alt":36,"src":102193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,102195,102024],{},[31,102197,102199],{"className":33679,"code":102198,"language":2323,"meta":36,"style":36},"#两个三行六列\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",[26,102200,102201,102205,102233,102261,102266,102271],{"__ignoreMap":36},[40,102202,102203],{"class":42,"line":43},[40,102204,101583],{"class":997},[40,102206,102207,102209,102211,102213,102215,102217,102219,102221,102223,102225,102227,102229,102231],{"class":42,"line":54},[40,102208,98816],{"class":50},[40,102210,1284],{"class":1283},[40,102212,96297],{"class":50},[40,102214,3698],{"class":63},[40,102216,1299],{"class":50},[40,102218,3805],{"class":63},[40,102220,96302],{"class":50},[40,102222,64],{"class":63},[40,102224,1299],{"class":50},[40,102226,3555],{"class":63},[40,102228,1299],{"class":50},[40,102230,3824],{"class":63},[40,102232,1811],{"class":50},[40,102234,102235,102237,102239,102241,102243,102245,102247,102249,102251,102253,102255,102257,102259],{"class":42,"line":70},[40,102236,101616],{"class":50},[40,102238,1284],{"class":1283},[40,102240,96297],{"class":50},[40,102242,3817],{"class":63},[40,102244,1299],{"class":50},[40,102246,101627],{"class":63},[40,102248,96302],{"class":50},[40,102250,64],{"class":63},[40,102252,1299],{"class":50},[40,102254,3555],{"class":63},[40,102256,1299],{"class":50},[40,102258,3824],{"class":63},[40,102260,1811],{"class":50},[40,102262,102263],{"class":42,"line":78},[40,102264,102265],{"class":997},"#使用vstack\n",[40,102267,102268],{"class":42,"line":86},[40,102269,102270],{"class":50},"np.vstack((aaa,bbb)).shape\n",[40,102272,102273],{"class":42,"line":100},[40,102274,102275],{"class":997},"#输出：（4，3，6）\n",[14,102277,102279],{"id":102278},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,102281,102282],{},"该方法是三维数组特有的方法",[19,102284,102285],{},"也就是说",[19,102287,102288],{},"一维数组拼接方法用：concatenate()",[19,102290,102291],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,102293,102294],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,102296,102297],{},"四维数组及多维数组只能用concatenate进行拼接",[31,102299,102301],{"className":33679,"code":102300,"language":2323,"meta":36,"style":36},"#两个三行六列\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",[26,102302,102303,102307,102335,102363,102368,102373],{"__ignoreMap":36},[40,102304,102305],{"class":42,"line":43},[40,102306,101583],{"class":997},[40,102308,102309,102311,102313,102315,102317,102319,102321,102323,102325,102327,102329,102331,102333],{"class":42,"line":54},[40,102310,98816],{"class":50},[40,102312,1284],{"class":1283},[40,102314,96297],{"class":50},[40,102316,3698],{"class":63},[40,102318,1299],{"class":50},[40,102320,3805],{"class":63},[40,102322,96302],{"class":50},[40,102324,64],{"class":63},[40,102326,1299],{"class":50},[40,102328,3555],{"class":63},[40,102330,1299],{"class":50},[40,102332,3824],{"class":63},[40,102334,1811],{"class":50},[40,102336,102337,102339,102341,102343,102345,102347,102349,102351,102353,102355,102357,102359,102361],{"class":42,"line":70},[40,102338,101616],{"class":50},[40,102340,1284],{"class":1283},[40,102342,96297],{"class":50},[40,102344,3817],{"class":63},[40,102346,1299],{"class":50},[40,102348,101627],{"class":63},[40,102350,96302],{"class":50},[40,102352,64],{"class":63},[40,102354,1299],{"class":50},[40,102356,3555],{"class":63},[40,102358,1299],{"class":50},[40,102360,3824],{"class":63},[40,102362,1811],{"class":50},[40,102364,102365],{"class":42,"line":78},[40,102366,102367],{"class":997},"#使用dstack\n",[40,102369,102370],{"class":42,"line":86},[40,102371,102372],{"class":50},"np.dstack((aaa,bbb)).shape\n",[40,102374,102375],{"class":42,"line":100},[40,102376,102377],{"class":997},"#结果：（2，3，12）\n",[3384,102379,102380],{},"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":36,"searchDepth":54,"depth":54,"links":102382},[102383,102384,102385,102386],{"id":101322,"depth":54,"text":101323},{"id":101936,"depth":54,"text":101937},{"id":102107,"depth":54,"text":102108},{"id":102278,"depth":54,"text":102279},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":101314,"description":3413},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":102393,"title":102394,"body":102395,"description":3413,"extension":3414,"meta":102670,"navigation":1412,"path":102671,"seo":102672,"stem":102673,"__hash__":102674},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":102396,"toc":102668},[102397,102400,102403,102497,102500,102503,102506,102509,102512,102515,102518,102521,102665],[10,102398,102394],{"id":102399},"_7数组转置",[19,102401,102402],{},"使用transpose()函数",[31,102404,102406],{"className":33679,"code":102405,"language":2323,"meta":36,"style":36},"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",[26,102407,102408,102418,102442,102447,102452,102457,102462,102470,102474,102478,102483,102488,102493],{"__ignoreMap":36},[40,102409,102410,102412,102414,102416],{"class":42,"line":43},[40,102411,33692],{"class":1283},[40,102413,34680],{"class":50},[40,102415,34683],{"class":1283},[40,102417,34686],{"class":50},[40,102419,102420,102422,102424,102426,102428,102430,102432,102434,102436,102438,102440],{"class":42,"line":54},[40,102421,2106],{"class":50},[40,102423,1284],{"class":1283},[40,102425,35017],{"class":50},[40,102427,3698],{"class":63},[40,102429,1299],{"class":50},[40,102431,4002],{"class":63},[40,102433,96302],{"class":50},[40,102435,3773],{"class":63},[40,102437,1299],{"class":50},[40,102439,3555],{"class":63},[40,102441,1811],{"class":50},[40,102443,102444],{"class":42,"line":70},[40,102445,102446],{"class":997},"#二维数组转置\n",[40,102448,102449],{"class":42,"line":78},[40,102450,102451],{"class":997},"#调用transpose()函数\n",[40,102453,102454],{"class":42,"line":86},[40,102455,102456],{"class":50},"a.transpose()\n",[40,102458,102459],{"class":42,"line":100},[40,102460,102461],{"class":997},"#对于二维数组也可以采用.T来实现\n",[40,102463,102464,102467],{"class":42,"line":108},[40,102465,102466],{"class":50},"a.T",[40,102468,102469],{"class":997},"#与上述代码一样\n",[40,102471,102472],{"class":42,"line":121},[40,102473,96859],{"class":997},[40,102475,102476],{"class":42,"line":134},[40,102477,97223],{"class":94},[40,102479,102480],{"class":42,"line":146},[40,102481,102482],{"class":94},"array([[ 1,  4,  7, 10],\n",[40,102484,102485],{"class":42,"line":154},[40,102486,102487],{"class":94},"       [ 2,  5,  8, 11],\n",[40,102489,102490],{"class":42,"line":162},[40,102491,102492],{"class":94},"       [ 3,  6,  9, 12]])\n",[40,102494,102495],{"class":42,"line":170},[40,102496,97223],{"class":94},[19,102498,102499],{},"也可以使用np.transpose()的形式",[19,102501,102502],{},"#多维数组进行转置 np.transpose()",[19,102504,102505],{},"#对二维数组也可以使用np.transpose()进行转置",[19,102507,102508],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,102510,102511],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,102513,102514],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,102516,102517],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,102519,102520],{},"四维及以上的数组也是一样的道理",[31,102522,102524],{"className":33679,"code":102523,"language":2323,"meta":36,"style":36},"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",[26,102525,102526,102554,102559,102564,102569,102587,102592,102624,102629,102634,102639,102660],{"__ignoreMap":36},[40,102527,102528,102530,102532,102534,102536,102538,102540,102542,102544,102546,102548,102550,102552],{"class":42,"line":43},[40,102529,4297],{"class":50},[40,102531,1284],{"class":1283},[40,102533,96297],{"class":50},[40,102535,3698],{"class":63},[40,102537,1299],{"class":50},[40,102539,3805],{"class":63},[40,102541,96302],{"class":50},[40,102543,3555],{"class":63},[40,102545,1299],{"class":50},[40,102547,3824],{"class":63},[40,102549,1299],{"class":50},[40,102551,64],{"class":63},[40,102553,1811],{"class":50},[40,102555,102556],{"class":42,"line":54},[40,102557,102558],{"class":50},"x.shape\n",[40,102560,102561],{"class":42,"line":70},[40,102562,102563],{"class":997},"#结果：（3,6,2）\n",[40,102565,102566],{"class":42,"line":78},[40,102567,102568],{"class":997},"#使用np.transpose()进行转置 变为(2,6,3)\n",[40,102570,102571,102574,102576,102578,102580,102582,102584],{"class":42,"line":86},[40,102572,102573],{"class":50},"np.transpose(x,(",[40,102575,64],{"class":63},[40,102577,1299],{"class":50},[40,102579,3698],{"class":63},[40,102581,1299],{"class":50},[40,102583,3672],{"class":63},[40,102585,102586],{"class":50},")).shape\n",[40,102588,102589],{"class":42,"line":100},[40,102590,102591],{"class":997},"#结果：(2,6,3)\n",[40,102593,102594,102596,102598,102600,102602,102604,102606,102608,102610,102612,102614,102616,102618,102620,102622],{"class":42,"line":108},[40,102595,101801],{"class":50},[40,102597,1284],{"class":1283},[40,102599,96297],{"class":50},[40,102601,3698],{"class":63},[40,102603,1299],{"class":50},[40,102605,3805],{"class":63},[40,102607,96302],{"class":50},[40,102609,3555],{"class":63},[40,102611,1299],{"class":50},[40,102613,64],{"class":63},[40,102615,1299],{"class":50},[40,102617,3698],{"class":63},[40,102619,1299],{"class":50},[40,102621,3824],{"class":63},[40,102623,1811],{"class":50},[40,102625,102626],{"class":42,"line":121},[40,102627,102628],{"class":50},"aaaa.shape\n",[40,102630,102631],{"class":42,"line":134},[40,102632,102633],{"class":997},"#结果：（3，2，1，6）\n",[40,102635,102636],{"class":42,"line":146},[40,102637,102638],{"class":997},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[40,102640,102641,102644,102646,102648,102650,102652,102654,102656,102658],{"class":42,"line":154},[40,102642,102643],{"class":50},"np.transpose(aaaa,(",[40,102645,3698],{"class":63},[40,102647,1299],{"class":50},[40,102649,64],{"class":63},[40,102651,1299],{"class":50},[40,102653,3672],{"class":63},[40,102655,1299],{"class":50},[40,102657,3555],{"class":63},[40,102659,102586],{"class":50},[40,102661,102662],{"class":42,"line":162},[40,102663,102664],{"class":997},"#结果：(2,1,3,6)\n",[3384,102666,102667],{},"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":36,"searchDepth":54,"depth":54,"links":102669},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":102394,"description":3413},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":102676,"title":102677,"body":102678,"description":3413,"extension":3414,"meta":103412,"navigation":1412,"path":103413,"seo":103414,"stem":103415,"__hash__":103416},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":102679,"toc":103410},[102680,102683,102686,102689,102692,102695,102698,102701,102704,102813,102816,102819,103407],[10,102681,102677],{"id":102682},"_8数组分割",[19,102684,102685],{},"split分割",[19,102687,102688],{},"numpy.split(ary,indics_or_sections,axis)",[19,102690,102691],{},"解释：",[19,102693,102694],{},"ary:被分割的数组",[19,102696,102697],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,102699,102700],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,102702,102703],{},"①一维数组的分割",[31,102705,102707],{"className":33679,"code":102706,"language":2323,"meta":36,"style":36},"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",[26,102708,102709,102725,102730,102739,102743,102748,102756,102760,102765,102770,102783,102787,102792,102804,102808],{"__ignoreMap":36},[40,102710,102711,102713,102715,102717,102719,102721,102723],{"class":42,"line":43},[40,102712,2106],{"class":50},[40,102714,1284],{"class":1283},[40,102716,96297],{"class":50},[40,102718,3698],{"class":63},[40,102720,1299],{"class":50},[40,102722,3899],{"class":63},[40,102724,1811],{"class":50},[40,102726,102727],{"class":42,"line":54},[40,102728,102729],{"class":997},"#如果传入整数，必须能够平分，否则会报错\n",[40,102731,102732,102735,102737],{"class":42,"line":70},[40,102733,102734],{"class":50},"np.split(a,",[40,102736,64],{"class":63},[40,102738,1811],{"class":50},[40,102740,102741],{"class":42,"line":78},[40,102742,96859],{"class":997},[40,102744,102745],{"class":42,"line":86},[40,102746,102747],{"class":997},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[40,102749,102750,102752,102754],{"class":42,"line":100},[40,102751,102734],{"class":50},[40,102753,3773],{"class":63},[40,102755,1811],{"class":50},[40,102757,102758],{"class":42,"line":108},[40,102759,96859],{"class":997},[40,102761,102762],{"class":42,"line":121},[40,102763,102764],{"class":997},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[40,102766,102767],{"class":42,"line":134},[40,102768,102769],{"class":997},"#传入数组\n",[40,102771,102772,102775,102777,102779,102781],{"class":42,"line":146},[40,102773,102774],{"class":50},"np.split(a,[",[40,102776,3555],{"class":63},[40,102778,1299],{"class":50},[40,102780,3799],{"class":63},[40,102782,7980],{"class":50},[40,102784,102785],{"class":42,"line":154},[40,102786,96859],{"class":997},[40,102788,102789],{"class":42,"line":162},[40,102790,102791],{"class":997},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[40,102793,102794,102796,102798,102800,102802],{"class":42,"line":170},[40,102795,102774],{"class":50},[40,102797,3799],{"class":63},[40,102799,1299],{"class":50},[40,102801,3849],{"class":63},[40,102803,7980],{"class":50},[40,102805,102806],{"class":42,"line":183},[40,102807,96859],{"class":997},[40,102809,102810],{"class":42,"line":196},[40,102811,102812],{"class":997},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,102814,102815],{},"②二维数组的分割",[19,102817,102818],{},"使用split()",[31,102820,102822],{"className":33679,"code":102821,"language":2323,"meta":36,"style":36},"#二维数组分割\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",[26,102823,102824,102829,102853,102858,102867,102871,102875,102880,102885,102890,102895,102900,102905,102910,102914,102927,102931,102935,102939,102943,102947,102952,102957,102962,102966,102971,102987,102991,102995,103000,103005,103010,103015,103020,103025,103030,103035,103040,103045,103050,103055,103060,103065,103070,103075,103080,103085,103089,103093,103113,103117,103121,103126,103131,103136,103141,103146,103151,103156,103161,103166,103171,103176,103181,103186,103191,103196,103201,103206,103211,103215,103220,103229,103233,103237,103241,103245,103249,103253,103257,103261,103265,103274,103278,103282,103286,103290,103294,103298,103302,103306,103310,103314,103318,103322,103326,103330,103334,103338,103342,103346,103350,103354,103358,103371,103375,103379,103383,103387,103391,103395,103399,103403],{"__ignoreMap":36},[40,102825,102826],{"class":42,"line":43},[40,102827,102828],{"class":997},"#二维数组分割\n",[40,102830,102831,102833,102835,102837,102839,102841,102843,102845,102847,102849,102851],{"class":42,"line":54},[40,102832,96601],{"class":50},[40,102834,1284],{"class":1283},[40,102836,96297],{"class":50},[40,102838,3698],{"class":63},[40,102840,1299],{"class":50},[40,102842,3805],{"class":63},[40,102844,96302],{"class":50},[40,102846,3824],{"class":63},[40,102848,1299],{"class":50},[40,102850,3824],{"class":63},[40,102852,1811],{"class":50},[40,102854,102855],{"class":42,"line":70},[40,102856,102857],{"class":997},"#默认axis=0  传入整数平均分,按行来的\n",[40,102859,102860,102863,102865],{"class":42,"line":78},[40,102861,102862],{"class":50},"np.split(aa,",[40,102864,3555],{"class":63},[40,102866,1811],{"class":50},[40,102868,102869],{"class":42,"line":86},[40,102870,99059],{"class":997},[40,102872,102873],{"class":42,"line":100},[40,102874,97223],{"class":94},[40,102876,102877],{"class":42,"line":108},[40,102878,102879],{"class":94},"[array([[ 1,  2,  3,  4,  5,  6],\n",[40,102881,102882],{"class":42,"line":121},[40,102883,102884],{"class":94},"        [ 7,  8,  9, 10, 11, 12]]),\n",[40,102886,102887],{"class":42,"line":134},[40,102888,102889],{"class":94}," array([[13, 14, 15, 16, 17, 18],\n",[40,102891,102892],{"class":42,"line":146},[40,102893,102894],{"class":94},"        [19, 20, 21, 22, 23, 24]]),\n",[40,102896,102897],{"class":42,"line":154},[40,102898,102899],{"class":94}," array([[25, 26, 27, 28, 29, 30],\n",[40,102901,102902],{"class":42,"line":162},[40,102903,102904],{"class":94},"        [31, 32, 33, 34, 35, 36]])]\n",[40,102906,102907],{"class":42,"line":170},[40,102908,102909],{"class":94}," '''\n",[40,102911,102912],{"class":42,"line":183},[40,102913,102769],{"class":997},[40,102915,102916,102919,102921,102923,102925],{"class":42,"line":196},[40,102917,102918],{"class":50},"np.split(aa,[",[40,102920,64],{"class":63},[40,102922,1299],{"class":50},[40,102924,3799],{"class":63},[40,102926,7980],{"class":50},[40,102928,102929],{"class":42,"line":204},[40,102930,99059],{"class":997},[40,102932,102933],{"class":42,"line":217},[40,102934,97223],{"class":94},[40,102936,102937],{"class":42,"line":230},[40,102938,102879],{"class":94},[40,102940,102941],{"class":42,"line":238},[40,102942,102884],{"class":94},[40,102944,102945],{"class":42,"line":251},[40,102946,102889],{"class":94},[40,102948,102949],{"class":42,"line":264},[40,102950,102951],{"class":94},"        [19, 20, 21, 22, 23, 24],\n",[40,102953,102954],{"class":42,"line":277},[40,102955,102956],{"class":94},"        [25, 26, 27, 28, 29, 30]]),\n",[40,102958,102959],{"class":42,"line":290},[40,102960,102961],{"class":94}," array([[31, 32, 33, 34, 35, 36]])]\n",[40,102963,102964],{"class":42,"line":298},[40,102965,97223],{"class":94},[40,102967,102968],{"class":42,"line":310},[40,102969,102970],{"class":997},"#axis=1 按照列来分\n",[40,102972,102973,102975,102977,102979,102981,102983,102985],{"class":42,"line":5086},[40,102974,102862],{"class":50},[40,102976,3555],{"class":63},[40,102978,1299],{"class":50},[40,102980,50814],{"class":8539},[40,102982,1284],{"class":1283},[40,102984,3698],{"class":63},[40,102986,1811],{"class":50},[40,102988,102989],{"class":42,"line":5091},[40,102990,99059],{"class":997},[40,102992,102993],{"class":42,"line":5105},[40,102994,97223],{"class":94},[40,102996,102997],{"class":42,"line":5110},[40,102998,102999],{"class":94},"[array([[ 1,  2],\n",[40,103001,103002],{"class":42,"line":5902},[40,103003,103004],{"class":94},"        [ 7,  8],\n",[40,103006,103007],{"class":42,"line":5916},[40,103008,103009],{"class":94},"        [13, 14],\n",[40,103011,103012],{"class":42,"line":5924},[40,103013,103014],{"class":94},"        [19, 20],\n",[40,103016,103017],{"class":42,"line":5929},[40,103018,103019],{"class":94},"        [25, 26],\n",[40,103021,103022],{"class":42,"line":5935},[40,103023,103024],{"class":94},"        [31, 32]]),\n",[40,103026,103027],{"class":42,"line":5941},[40,103028,103029],{"class":94}," array([[ 3,  4],\n",[40,103031,103032],{"class":42,"line":5946},[40,103033,103034],{"class":94},"        [ 9, 10],\n",[40,103036,103037],{"class":42,"line":11270},[40,103038,103039],{"class":94},"        [15, 16],\n",[40,103041,103042],{"class":42,"line":11294},[40,103043,103044],{"class":94},"        [21, 22],\n",[40,103046,103047],{"class":42,"line":11299},[40,103048,103049],{"class":94},"        [27, 28],\n",[40,103051,103052],{"class":42,"line":11305},[40,103053,103054],{"class":94},"        [33, 34]]),\n",[40,103056,103057],{"class":42,"line":11332},[40,103058,103059],{"class":94}," array([[ 5,  6],\n",[40,103061,103062],{"class":42,"line":11337},[40,103063,103064],{"class":94},"        [11, 12],\n",[40,103066,103067],{"class":42,"line":11343},[40,103068,103069],{"class":94},"        [17, 18],\n",[40,103071,103072],{"class":42,"line":11355},[40,103073,103074],{"class":94},"        [23, 24],\n",[40,103076,103077],{"class":42,"line":11367},[40,103078,103079],{"class":94},"        [29, 30],\n",[40,103081,103082],{"class":42,"line":11379},[40,103083,103084],{"class":94},"        [35, 36]])]\n",[40,103086,103087],{"class":42,"line":13038},[40,103088,102909],{"class":94},[40,103090,103091],{"class":42,"line":13063},[40,103092,102769],{"class":997},[40,103094,103095,103097,103099,103101,103103,103105,103107,103109,103111],{"class":42,"line":13086},[40,103096,102918],{"class":50},[40,103098,3698],{"class":63},[40,103100,1299],{"class":50},[40,103102,64],{"class":63},[40,103104,44909],{"class":50},[40,103106,50814],{"class":8539},[40,103108,1284],{"class":1283},[40,103110,3698],{"class":63},[40,103112,1811],{"class":50},[40,103114,103115],{"class":42,"line":13110},[40,103116,96859],{"class":997},[40,103118,103119],{"class":42,"line":13115},[40,103120,97223],{"class":94},[40,103122,103123],{"class":42,"line":13120},[40,103124,103125],{"class":94},"[array([[ 1],\n",[40,103127,103128],{"class":42,"line":13125},[40,103129,103130],{"class":94},"        [ 7],\n",[40,103132,103133],{"class":42,"line":13134},[40,103134,103135],{"class":94},"        [13],\n",[40,103137,103138],{"class":42,"line":13139},[40,103139,103140],{"class":94},"        [19],\n",[40,103142,103143],{"class":42,"line":13145},[40,103144,103145],{"class":94},"        [25],\n",[40,103147,103148],{"class":42,"line":13166},[40,103149,103150],{"class":94},"        [31]]),\n",[40,103152,103153],{"class":42,"line":13172},[40,103154,103155],{"class":94}," array([[ 2],\n",[40,103157,103158],{"class":42,"line":13186},[40,103159,103160],{"class":94},"        [ 8],\n",[40,103162,103163],{"class":42,"line":13192},[40,103164,103165],{"class":94},"        [14],\n",[40,103167,103168],{"class":42,"line":13219},[40,103169,103170],{"class":94},"        [20],\n",[40,103172,103173],{"class":42,"line":13228},[40,103174,103175],{"class":94},"        [26],\n",[40,103177,103178],{"class":42,"line":13234},[40,103179,103180],{"class":94},"        [32]]),\n",[40,103182,103183],{"class":42,"line":13242},[40,103184,103185],{"class":94}," array([[ 3,  4,  5,  6],\n",[40,103187,103188],{"class":42,"line":13247},[40,103189,103190],{"class":94},"        [ 9, 10, 11, 12],\n",[40,103192,103193],{"class":42,"line":19926},[40,103194,103195],{"class":94},"        [15, 16, 17, 18],\n",[40,103197,103198],{"class":42,"line":19932},[40,103199,103200],{"class":94},"        [21, 22, 23, 24],\n",[40,103202,103203],{"class":42,"line":19955},[40,103204,103205],{"class":94},"        [27, 28, 29, 30],\n",[40,103207,103208],{"class":42,"line":19961},[40,103209,103210],{"class":94},"        [33, 34, 35, 36]])]\n",[40,103212,103213],{"class":42,"line":19984},[40,103214,97223],{"class":94},[40,103216,103217],{"class":42,"line":19998},[40,103218,103219],{"class":997},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[40,103221,103222,103225,103227],{"class":42,"line":20018},[40,103223,103224],{"class":50},"np.vsplit(aa,",[40,103226,3555],{"class":63},[40,103228,1811],{"class":50},[40,103230,103231],{"class":42,"line":20024},[40,103232,96859],{"class":997},[40,103234,103235],{"class":42,"line":20035},[40,103236,97223],{"class":94},[40,103238,103239],{"class":42,"line":20058},[40,103240,102879],{"class":94},[40,103242,103243],{"class":42,"line":20080},[40,103244,102884],{"class":94},[40,103246,103247],{"class":42,"line":20085},[40,103248,102889],{"class":94},[40,103250,103251],{"class":42,"line":20091},[40,103252,102894],{"class":94},[40,103254,103255],{"class":42,"line":20105},[40,103256,102899],{"class":94},[40,103258,103259],{"class":42,"line":20118},[40,103260,102904],{"class":94},[40,103262,103263],{"class":42,"line":20123},[40,103264,97223],{"class":94},[40,103266,103267,103270,103272],{"class":42,"line":20137},[40,103268,103269],{"class":50},"np.hsplit(aa,",[40,103271,3555],{"class":63},[40,103273,1811],{"class":50},[40,103275,103276],{"class":42,"line":20142},[40,103277,96859],{"class":997},[40,103279,103280],{"class":42,"line":20148},[40,103281,97223],{"class":94},[40,103283,103284],{"class":42,"line":20153},[40,103285,102999],{"class":94},[40,103287,103288],{"class":42,"line":20167},[40,103289,103004],{"class":94},[40,103291,103292],{"class":42,"line":20172},[40,103293,103009],{"class":94},[40,103295,103296],{"class":42,"line":20177},[40,103297,103014],{"class":94},[40,103299,103300],{"class":42,"line":20191},[40,103301,103019],{"class":94},[40,103303,103304],{"class":42,"line":20203},[40,103305,103024],{"class":94},[40,103307,103308],{"class":42,"line":20208},[40,103309,103029],{"class":94},[40,103311,103312],{"class":42,"line":20221},[40,103313,103034],{"class":94},[40,103315,103316],{"class":42,"line":20226},[40,103317,103039],{"class":94},[40,103319,103320],{"class":42,"line":20231},[40,103321,103044],{"class":94},[40,103323,103324],{"class":42,"line":20236},[40,103325,103049],{"class":94},[40,103327,103328],{"class":42,"line":20249},[40,103329,103054],{"class":94},[40,103331,103332],{"class":42,"line":20254},[40,103333,103059],{"class":94},[40,103335,103336],{"class":42,"line":35933},[40,103337,103064],{"class":94},[40,103339,103340],{"class":42,"line":35939},[40,103341,103069],{"class":94},[40,103343,103344],{"class":42,"line":35945},[40,103345,103074],{"class":94},[40,103347,103348],{"class":42,"line":35951},[40,103349,103079],{"class":94},[40,103351,103352],{"class":42,"line":35957},[40,103353,103084],{"class":94},[40,103355,103356],{"class":42,"line":35968},[40,103357,97223],{"class":94},[40,103359,103360,103363,103365,103367,103369],{"class":42,"line":35974},[40,103361,103362],{"class":50},"np.vsplit(aa,[",[40,103364,64],{"class":63},[40,103366,1299],{"class":50},[40,103368,3799],{"class":63},[40,103370,7980],{"class":50},[40,103372,103373],{"class":42,"line":35994},[40,103374,96859],{"class":997},[40,103376,103377],{"class":42,"line":36000},[40,103378,97223],{"class":94},[40,103380,103381],{"class":42,"line":36011},[40,103382,102879],{"class":94},[40,103384,103385],{"class":42,"line":36017},[40,103386,102884],{"class":94},[40,103388,103389],{"class":42,"line":36023},[40,103390,102889],{"class":94},[40,103392,103393],{"class":42,"line":36029},[40,103394,102951],{"class":94},[40,103396,103397],{"class":42,"line":36035},[40,103398,102956],{"class":94},[40,103400,103401],{"class":42,"line":36041},[40,103402,102961],{"class":94},[40,103404,103405],{"class":42,"line":36047},[40,103406,102909],{"class":94},[3384,103408,103409],{},"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":36,"searchDepth":54,"depth":54,"links":103411},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":102677,"description":3413},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":103418,"title":103419,"body":103420,"description":3413,"extension":3414,"meta":103914,"navigation":1412,"path":103915,"seo":103916,"stem":103917,"__hash__":103918},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":103421,"toc":103905},[103422,103425,103428,103453,103457,103516,103568,103572,103574,103610,103664,103666,103704,103775,103779,103784,103788,103791,103824,103827,103831,103834,103837,103840,103843,103848,103852,103855,103858,103861,103864,103869,103873,103878,103881,103902],[10,103423,103419],{"id":103424},"_9数学函数",[19,103426,103427],{},"补充回顾：python的列表推导式",[31,103429,103431],{"className":33679,"code":103430,"language":2323,"meta":36,"style":36},"[1\u002Fi for i in a]\n",[26,103432,103433],{"__ignoreMap":36},[40,103434,103435,103437,103439,103441,103444,103446,103448,103450],{"class":42,"line":43},[40,103436,4367],{"class":50},[40,103438,3698],{"class":63},[40,103440,4063],{"class":1283},[40,103442,103443],{"class":50},"i ",[40,103445,6349],{"class":1283},[40,103447,12760],{"class":50},[40,103449,29355],{"class":1283},[40,103451,103452],{"class":50}," a]\n",[14,103454,103456],{"id":103455},"_91-求倒数","9.1 求倒数",[31,103458,103460],{"className":33679,"code":103459,"language":2323,"meta":36,"style":36},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[26,103461,103462,103467,103495,103507],{"__ignoreMap":36},[40,103463,103464],{"class":42,"line":43},[40,103465,103466],{"class":997},"#数组求倒数\n",[40,103468,103469,103471,103473,103475,103477,103479,103481,103483,103485,103487,103489,103491,103493],{"class":42,"line":54},[40,103470,2106],{"class":50},[40,103472,1284],{"class":1283},[40,103474,4367],{"class":50},[40,103476,3698],{"class":63},[40,103478,1299],{"class":50},[40,103480,64],{"class":63},[40,103482,1299],{"class":50},[40,103484,3555],{"class":63},[40,103486,1299],{"class":50},[40,103488,3773],{"class":63},[40,103490,1299],{"class":50},[40,103492,3799],{"class":63},[40,103494,36546],{"class":50},[40,103496,103497,103499,103501,103504],{"class":42,"line":70},[40,103498,3743],{"class":50},[40,103500,1284],{"class":1283},[40,103502,103503],{"class":50},"np.array(a)",[40,103505,103506],{"class":997},"#将列表转换为数组\n",[40,103508,103509,103511,103513],{"class":42,"line":78},[40,103510,3698],{"class":63},[40,103512,4063],{"class":1283},[40,103514,103515],{"class":50},"b\n",[31,103517,103519],{"className":33679,"code":103518,"language":2323,"meta":36,"style":36},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[26,103520,103521,103549,103558,103563],{"__ignoreMap":36},[40,103522,103523,103525,103527,103529,103531,103533,103535,103537,103539,103541,103543,103545,103547],{"class":42,"line":43},[40,103524,2106],{"class":50},[40,103526,1284],{"class":1283},[40,103528,4367],{"class":50},[40,103530,3698],{"class":63},[40,103532,1299],{"class":50},[40,103534,64],{"class":63},[40,103536,1299],{"class":50},[40,103538,3555],{"class":63},[40,103540,1299],{"class":50},[40,103542,3773],{"class":63},[40,103544,1299],{"class":50},[40,103546,3799],{"class":63},[40,103548,36546],{"class":50},[40,103550,103551,103553,103555],{"class":42,"line":54},[40,103552,3743],{"class":50},[40,103554,1284],{"class":1283},[40,103556,103557],{"class":50},"np.array(a)\n",[40,103559,103560],{"class":42,"line":70},[40,103561,103562],{"class":997},"#调用numpy中的函数reciprocal()\n",[40,103564,103565],{"class":42,"line":78},[40,103566,103567],{"class":50},"np.reciprocal(b)\n",[14,103569,103571],{"id":103570},"_92-求平方","9.2 求平方",[19,103573,97825],{},[31,103575,103577],{"className":33679,"code":103576,"language":2323,"meta":36,"style":36},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[26,103578,103579,103584,103589,103605],{"__ignoreMap":36},[40,103580,103581],{"class":42,"line":43},[40,103582,103583],{"class":997},"#square()，求平方\n",[40,103585,103586],{"class":42,"line":54},[40,103587,103588],{"class":997},"#一维数组\n",[40,103590,103591,103593,103595,103597,103599,103601,103603],{"class":42,"line":70},[40,103592,2106],{"class":50},[40,103594,1284],{"class":1283},[40,103596,96297],{"class":50},[40,103598,3698],{"class":63},[40,103600,1299],{"class":50},[40,103602,3925],{"class":63},[40,103604,1811],{"class":50},[40,103606,103607],{"class":42,"line":78},[40,103608,103609],{"class":50},"np.square(a)\n",[31,103611,103613],{"className":33679,"code":103612,"language":2323,"meta":36,"style":36},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[26,103614,103615,103620,103625,103646],{"__ignoreMap":36},[40,103616,103617],{"class":42,"line":43},[40,103618,103619],{"class":997},"#或者通过循环遍历的形式来计算\n",[40,103621,103622],{"class":42,"line":54},[40,103623,103624],{"class":997},"#这是一个列表\n",[40,103626,103627,103630,103632,103634,103636,103638,103640,103643],{"class":42,"line":70},[40,103628,103629],{"class":50},"[i",[40,103631,3934],{"class":1283},[40,103633,103443],{"class":50},[40,103635,6349],{"class":1283},[40,103637,12760],{"class":50},[40,103639,29355],{"class":1283},[40,103641,103642],{"class":50}," a]",[40,103644,103645],{"class":997},"#这个求完之后在数列当中\n",[40,103647,103648,103651,103653,103655,103657,103659,103661],{"class":42,"line":78},[40,103649,103650],{"class":50},"np.array([i",[40,103652,3934],{"class":1283},[40,103654,103443],{"class":50},[40,103656,6349],{"class":1283},[40,103658,12760],{"class":50},[40,103660,29355],{"class":1283},[40,103662,103663],{"class":50}," a])\n",[19,103665,96586],{},[31,103667,103669],{"className":33679,"code":103668,"language":2323,"meta":36,"style":36},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[26,103670,103671,103675,103699],{"__ignoreMap":36},[40,103672,103673],{"class":42,"line":43},[40,103674,96596],{"class":997},[40,103676,103677,103679,103681,103683,103685,103687,103689,103691,103693,103695,103697],{"class":42,"line":54},[40,103678,96601],{"class":50},[40,103680,1284],{"class":1283},[40,103682,96297],{"class":50},[40,103684,3698],{"class":63},[40,103686,1299],{"class":50},[40,103688,4002],{"class":63},[40,103690,96302],{"class":50},[40,103692,3773],{"class":63},[40,103694,1299],{"class":50},[40,103696,3555],{"class":63},[40,103698,1811],{"class":50},[40,103700,103701],{"class":42,"line":70},[40,103702,103703],{"class":50},"np.square(aa)\n",[31,103705,103707],{"className":33679,"code":103706,"language":2323,"meta":36,"style":36},"#传统的方式\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",[26,103708,103709,103714,103723,103739,103755,103770],{"__ignoreMap":36},[40,103710,103711],{"class":42,"line":43},[40,103712,103713],{"class":997},"#传统的方式\n",[40,103715,103716,103718,103720],{"class":42,"line":54},[40,103717,101482],{"class":50},[40,103719,1284],{"class":1283},[40,103721,103722],{"class":50},"np.empty_like(aa)\n",[40,103724,103725,103727,103729,103731,103733,103735,103737],{"class":42,"line":70},[40,103726,6349],{"class":1283},[40,103728,12760],{"class":50},[40,103730,29355],{"class":1283},[40,103732,35743],{"class":63},[40,103734,3488],{"class":50},[40,103736,3773],{"class":63},[40,103738,34086],{"class":50},[40,103740,103741,103743,103745,103747,103749,103751,103753],{"class":42,"line":78},[40,103742,6525],{"class":1283},[40,103744,12822],{"class":50},[40,103746,29355],{"class":1283},[40,103748,35743],{"class":63},[40,103750,3488],{"class":50},[40,103752,3555],{"class":63},[40,103754,34086],{"class":50},[40,103756,103757,103760,103762,103765,103767],{"class":42,"line":86},[40,103758,103759],{"class":50},"        bb[i,j]",[40,103761,1284],{"class":1283},[40,103763,103764],{"class":50},"aa[i,j]",[40,103766,3934],{"class":1283},[40,103768,103769],{"class":50},"aa[i,j]\n",[40,103771,103772],{"class":42,"line":100},[40,103773,103774],{"class":50},"bb\n",[14,103776,103778],{"id":103777},"_93-求各元素的符号","9.3 求各元素的符号",[19,103780,103781],{},[438,103782],{"alt":36,"src":103783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,103785,103787],{"id":103786},"_94-modf函数","9.4 modf函数",[19,103789,103790],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[31,103792,103794],{"className":33679,"code":103793,"language":2323,"meta":36,"style":36},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[26,103795,103796,103819],{"__ignoreMap":36},[40,103797,103798,103800,103802,103804,103806,103808,103810,103812,103814,103817],{"class":42,"line":43},[40,103799,2106],{"class":50},[40,103801,1284],{"class":1283},[40,103803,96297],{"class":50},[40,103805,4011],{"class":1283},[40,103807,3925],{"class":63},[40,103809,1299],{"class":50},[40,103811,3925],{"class":63},[40,103813,1299],{"class":50},[40,103815,103816],{"class":63},"0.3",[40,103818,1811],{"class":50},[40,103820,103821],{"class":42,"line":54},[40,103822,103823],{"class":50},"np.modf(a)\n",[19,103825,103826],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,103828,103830],{"id":103829},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,103832,103833],{},"np.cell()",[19,103835,103836],{},"np.floor()",[19,103838,103839],{},"np.rint()",[19,103841,103842],{},"对各元素分别向上取整、向下取整、四舍五入",[19,103844,103845],{},[438,103846],{"alt":36,"src":103847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,103849,103851],{"id":103850},"_96-around函数","9.6 around()函数",[19,103853,103854],{},"around()函数也可以实现对数的小数位数进行操作",[19,103856,103857],{},"其中的参数：",[19,103859,103860],{},"1.要传的数组",[19,103862,103863],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,103865,103866],{},[438,103867],{"alt":36,"src":103868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,103870,103872],{"id":103871},"_97-三角函数","9.7 三角函数",[19,103874,103875],{},[438,103876],{"alt":36,"src":103877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,103879,103880],{},"引入图像模块非常重要",[31,103882,103884],{"className":33679,"code":103883,"language":2323,"meta":36,"style":36},"from matplotlib import pyplot as plt\n",[26,103885,103886],{"__ignoreMap":36},[40,103887,103888,103890,103893,103895,103898,103900],{"class":42,"line":43},[40,103889,34037],{"class":1283},[40,103891,103892],{"class":50}," matplotlib ",[40,103894,33692],{"class":1283},[40,103896,103897],{"class":50}," pyplot ",[40,103899,34683],{"class":1283},[40,103901,34737],{"class":50},[3384,103903,103904],{},"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":36,"searchDepth":54,"depth":54,"links":103906},[103907,103908,103909,103910,103911,103912,103913],{"id":103455,"depth":54,"text":103456},{"id":103570,"depth":54,"text":103571},{"id":103777,"depth":54,"text":103778},{"id":103786,"depth":54,"text":103787},{"id":103829,"depth":54,"text":103830},{"id":103850,"depth":54,"text":103851},{"id":103871,"depth":54,"text":103872},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":103419,"description":3413},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":103920,"title":103921,"body":103922,"description":3413,"extension":3414,"meta":103926,"navigation":1412,"path":103927,"seo":103928,"stem":103929,"__hash__":103930},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":103923,"toc":103924},[],{"title":36,"searchDepth":54,"depth":54,"links":103925},[],{"category":53720},"\u002Fwiki\u002F2025-08-14-numpy",{"title":103921,"description":3413},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":103932,"title":103933,"body":103934,"description":36,"extension":3414,"meta":105938,"navigation":1412,"path":105939,"seo":105940,"stem":105941,"__hash__":105942},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":103935,"toc":105914},[103936,103939,103943,103946,103949,103955,103958,103981,103984,104018,104021,104062,104066,104069,104162,104165,104208,104211,104228,104231,104245,104248,104251,104296,104299,104336,104340,104343,104349,104354,104374,104378,104381,104447,104450,104468,104472,104475,104504,104514,104520,104524,104527,104533,104544,104548,104551,104578,104581,104861,104864,104867,104878,104881,104884,104906,104913,104916,104934,104937,104940,104954,104962,104965,104991,104997,105000,105003,105013,105025,105045,105054,105074,105084,105108,105121,105135,105140,105181,105198,105223,105235,105255,105261,105306,105325,105342,105355,105371,105378,105390,105399,105434,105455,105480,105493,105517,105532,105557,105560,105581,105590,105593,105604,105608,105611,105617,105629,105636,105640,105643,105655,105658,105672,105675,105685,105695,105698,105738,105741,105745,105751,105754,105768,105772,105775,105808,105812,105815,105838,105846,105849,105855,105861,105864,105867,105895,105899,105902,105908,105911],[10,103937,103933],{"id":103938},"_1环境安装与第一个-mujoco-程序",[14,103940,103942],{"id":103941},"_1目标说明","1.目标说明",[19,103944,103945],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,103947,103948],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[31,103950,103953],{"className":103951,"code":103952,"language":8510,"meta":36},[8508],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[26,103954,103952],{"__ignoreMap":36},[19,103956,103957],{},"需要掌握:",[492,103959,103960,103963,103966,103971,103976],{},[495,103961,103962],{},"Fedora 44 下 MuJoCo 的系统依赖",[495,103964,103965],{},"Python 虚拟环境创建",[495,103967,103968],{},[26,103969,103970],{},"mujoco.MjModel",[495,103972,103973],{},[26,103974,103975],{},"mujoco.MjData",[495,103977,103978],{},[26,103979,103980],{},"mujoco.mj_step(model, data)",[19,103982,103983],{},"MuJoCo 中最重要的两个对象:",[3619,103985,103986,103996],{},[3622,103987,103988],{},[3625,103989,103990,103993],{},[3628,103991,103992],{"align":27055},"对象",[3628,103994,103995],{"align":27055},"含义",[3665,103997,103998,104008],{},[3625,103999,104000,104005],{},[3670,104001,104002],{"align":27055},[26,104003,104004],{},"MjModel",[3670,104006,104007],{"align":27055},"模型结构，来自 XML，基本不随时间变化",[3625,104009,104010,104015],{},[3670,104011,104012],{"align":27055},[26,104013,104014],{},"MjData",[3670,104016,104017],{"align":27055},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,104019,104020],{},"可以先用一个类比理解：",[3619,104022,104023,104033],{},[3622,104024,104025],{},[3625,104026,104027,104030],{},[3628,104028,104029],{"align":27055},"类比",[3628,104031,104032],{"align":27055},"MuJoCo 对象",[3665,104034,104035,104044,104053],{},[3625,104036,104037,104040],{},[3670,104038,104039],{"align":27055},"游戏地图和角色配置",[3670,104041,104042],{"align":27055},[26,104043,104004],{},[3625,104045,104046,104049],{},[3670,104047,104048],{"align":27055},"游戏运行到当前帧的状态",[3670,104050,104051],{"align":27055},[26,104052,104014],{},[3625,104054,104055,104058],{},[3670,104056,104057],{"align":27055},"前进一帧",[3670,104059,104060],{"align":27055},[26,104061,103980],{},[14,104063,104065],{"id":104064},"_2环境与依赖安装","2.环境与依赖安装",[19,104067,104068],{},"Fedora 44 系统依赖:",[31,104070,104072],{"className":27141,"code":104071,"language":27143,"meta":36,"style":36},"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",[26,104073,104074,104086,104099,104112,104122,104132,104151],{"__ignoreMap":36},[40,104075,104076,104078,104080,104082,104084],{"class":42,"line":43},[40,104077,923],{"class":596},[40,104079,29625],{"class":94},[40,104081,929],{"class":94},[40,104083,29710],{"class":63},[40,104085,27993],{"class":63},[40,104087,104088,104091,104094,104097],{"class":42,"line":54},[40,104089,104090],{"class":94},"  python3",[40,104092,104093],{"class":94}," python3-pip",[40,104095,104096],{"class":94}," python3-virtualenv",[40,104098,27993],{"class":63},[40,104100,104101,104104,104107,104110],{"class":42,"line":70},[40,104102,104103],{"class":94},"  mesa-libGL",[40,104105,104106],{"class":94}," mesa-libGLU",[40,104108,104109],{"class":94}," mesa-dri-drivers",[40,104111,27993],{"class":63},[40,104113,104114,104117,104120],{"class":42,"line":78},[40,104115,104116],{"class":94},"  libglvnd-glx",[40,104118,104119],{"class":94}," libglvnd-opengl",[40,104121,27993],{"class":63},[40,104123,104124,104127,104130],{"class":42,"line":86},[40,104125,104126],{"class":94},"  glfw",[40,104128,104129],{"class":94}," glfw-devel",[40,104131,27993],{"class":63},[40,104133,104134,104137,104140,104143,104146,104149],{"class":42,"line":100},[40,104135,104136],{"class":94},"  libX11",[40,104138,104139],{"class":94}," libXcursor",[40,104141,104142],{"class":94}," libXi",[40,104144,104145],{"class":94}," libXinerama",[40,104147,104148],{"class":94}," libXrandr",[40,104150,27993],{"class":63},[40,104152,104153,104156,104159],{"class":42,"line":108},[40,104154,104155],{"class":94},"  gcc",[40,104157,104158],{"class":94}," gcc-c++",[40,104160,104161],{"class":94}," make\n",[19,104163,104164],{},"创建 Python 环境:",[31,104166,104168],{"className":27141,"code":104167,"language":27143,"meta":36,"style":36},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[26,104169,104170,104183,104191],{"__ignoreMap":36},[40,104171,104172,104175,104177,104180],{"class":42,"line":43},[40,104173,104174],{"class":596},"python3",[40,104176,2326],{"class":63},[40,104178,104179],{"class":94}," venv",[40,104181,104182],{"class":94}," .venv\n",[40,104184,104185,104188],{"class":42,"line":54},[40,104186,104187],{"class":63},"source",[40,104189,104190],{"class":94}," .venv\u002Fbin\u002Factivate\n",[40,104192,104193,104195,104197,104200,104202,104205],{"class":42,"line":70},[40,104194,2323],{"class":596},[40,104196,2326],{"class":63},[40,104198,104199],{"class":94}," pip",[40,104201,929],{"class":94},[40,104203,104204],{"class":63}," --upgrade",[40,104206,104207],{"class":94}," pip\n",[19,104209,104210],{},"pip 安装:",[31,104212,104214],{"className":27141,"code":104213,"language":27143,"meta":36,"style":36},"pip install \"mujoco>=2.3\" numpy\n",[26,104215,104216],{"__ignoreMap":36},[40,104217,104218,104220,104222,104225],{"class":42,"line":43},[40,104219,27150],{"class":596},[40,104221,929],{"class":94},[40,104223,104224],{"class":94}," \"mujoco>=2.3\"",[40,104226,104227],{"class":94}," numpy\n",[19,104229,104230],{},"安装完成后，先做最小检查：",[31,104232,104234],{"className":27141,"code":104233,"language":27143,"meta":36,"style":36},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[26,104235,104236],{"__ignoreMap":36},[40,104237,104238,104240,104242],{"class":42,"line":43},[40,104239,2323],{"class":596},[40,104241,33659],{"class":63},[40,104243,104244],{"class":94}," \"import mujoco; print(mujoco.__version__)\"\n",[19,104246,104247],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,104249,104250],{},"conda 安装:",[31,104252,104254],{"className":27141,"code":104253,"language":27143,"meta":36,"style":36},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[26,104255,104256,104276,104286],{"__ignoreMap":36},[40,104257,104258,104260,104262,104264,104267,104270,104273],{"class":42,"line":43},[40,104259,33631],{"class":596},[40,104261,32479],{"class":94},[40,104263,1805],{"class":63},[40,104265,104266],{"class":94}," mujoco-study",[40,104268,104269],{"class":94}," python=",[40,104271,104272],{"class":63},"3.10",[40,104274,104275],{"class":63}," -y\n",[40,104277,104278,104280,104283],{"class":42,"line":54},[40,104279,33631],{"class":596},[40,104281,104282],{"class":94}," activate",[40,104284,104285],{"class":94}," mujoco-study\n",[40,104287,104288,104290,104292,104294],{"class":42,"line":70},[40,104289,27150],{"class":596},[40,104291,929],{"class":94},[40,104293,104224],{"class":94},[40,104295,104227],{"class":94},[19,104297,104298],{},"版本冲突说明:",[492,104300,104301,104307,104317,104326],{},[495,104302,104303,104304,776],{},"不要安装 ",[26,104305,104306],{},"mujoco-py",[495,104308,104309,104310,104312,104313,104316],{},"如果旧项目里同时安装了 ",[26,104311,104306],{}," 和 ",[26,104314,104315],{},"mujoco","，建议新建干净虚拟环境。",[495,104318,104319,104322,104323,776],{},[26,104320,104321],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[26,104324,104325],{},"~\u002F.mujoco\u002Fmujoco210",[495,104327,104328,104329,85834,104332,104335],{},"离屏渲染可能涉及 OpenGL 后端，",[26,104330,104331],{},"MUJOCO_GL=egl",[26,104333,104334],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,104337,104339],{"id":104338},"_3核心概念解释","3.核心概念解释",[19,104341,104342],{},"MuJoCo 的基本执行流程:",[31,104344,104347],{"className":104345,"code":104346,"language":8510,"meta":36},[8508],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[26,104348,104346],{"__ignoreMap":36},[19,104350,104351,104353],{},[26,104352,104004],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,104355,104356,104358,104359,3693,104362,3693,104365,3693,104368,3693,104371,776],{},[26,104357,104014],{}," 存放仿真运行时状态，例如 ",[26,104360,104361],{},"data.time",[26,104363,104364],{},"data.qpos",[26,104366,104367],{},"data.qvel",[26,104369,104370],{},"data.ctrl",[26,104372,104373],{},"data.xpos",[402,104375,104377],{"id":104376},"xml-是什么","XML 是什么",[19,104379,104380],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[31,104382,104384],{"className":56365,"code":104383,"language":56367,"meta":36,"style":36},"\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",[26,104385,104386,104408,104439],{"__ignoreMap":36},[40,104387,104388,104390,104392,104394,104396,104398,104401,104403,104406],{"class":42,"line":43},[40,104389,4387],{"class":50},[40,104391,55098],{"class":46},[40,104393,18242],{"class":596},[40,104395,1284],{"class":50},[40,104397,56789],{"class":94},[40,104399,104400],{"class":596}," pos",[40,104402,1284],{"class":50},[40,104404,104405],{"class":94},"\"0 0 1\"",[40,104407,54606],{"class":50},[40,104409,104410,104412,104415,104417,104419,104422,104424,104426,104428,104431,104433,104436],{"class":42,"line":54},[40,104411,55442],{"class":50},[40,104413,104414],{"class":46},"geom",[40,104416,18242],{"class":596},[40,104418,1284],{"class":50},[40,104420,104421],{"class":94},"\"box_geom\"",[40,104423,57122],{"class":596},[40,104425,1284],{"class":50},[40,104427,56789],{"class":94},[40,104429,104430],{"class":596}," size",[40,104432,1284],{"class":50},[40,104434,104435],{"class":94},"\"0.1 0.1 0.1\"",[40,104437,104438],{"class":50},"\u002F>\n",[40,104440,104441,104443,104445],{"class":42,"line":70},[40,104442,55083],{"class":50},[40,104444,55098],{"class":46},[40,104446,54606],{"class":50},[19,104448,104449],{},"这段意思是：",[492,104451,104452,104458,104465],{},[495,104453,104454,104455,104457],{},"创建一个叫 ",[26,104456,57012],{}," 的刚体。",[495,104459,104460,104461,104464],{},"它初始放在 ",[26,104462,104463],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[495,104466,104467],{},"它里面有一个盒子形状的几何体。",[402,104469,104471],{"id":104470},"timestep-是什么","timestep 是什么",[19,104473,104474],{},"XML 里的：",[31,104476,104478],{"className":56365,"code":104477,"language":56367,"meta":36,"style":36},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[26,104479,104480],{"__ignoreMap":36},[40,104481,104482,104484,104486,104489,104491,104494,104497,104499,104502],{"class":42,"line":43},[40,104483,4387],{"class":50},[40,104485,72464],{"class":46},[40,104487,104488],{"class":596}," timestep",[40,104490,1284],{"class":50},[40,104492,104493],{"class":94},"\"0.01\"",[40,104495,104496],{"class":596}," gravity",[40,104498,1284],{"class":50},[40,104500,104501],{"class":94},"\"0 0 -9.81\"",[40,104503,104438],{"class":50},[19,104505,104506,104507,104510,104511,104513],{},"表示每调用一次 ",[26,104508,104509],{},"mj_step","，仿真时间前进 ",[26,104512,42286],{}," 秒。循环 100 次，大约就是 1 秒：",[31,104515,104518],{"className":104516,"code":104517,"language":8510,"meta":36},[8508],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[26,104519,104517],{"__ignoreMap":36},[402,104521,104523],{"id":104522},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,104525,104526],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[31,104528,104531],{"className":104529,"code":104530,"language":8510,"meta":36},[8508],"x y z qw qx qy qz\n",[26,104532,104530],{"__ignoreMap":36},[19,104534,104535,104536,104539,104540,104543],{},"表示一个自由刚体的位置和姿态。其中 ",[26,104537,104538],{},"x y z"," 是位置，",[26,104541,104542],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,104545,104547],{"id":104546},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,104549,104550],{},"新建文件:",[31,104552,104554],{"className":27141,"code":104553,"language":27143,"meta":36,"style":36},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[26,104555,104556,104565,104571],{"__ignoreMap":36},[40,104557,104558,104560,104562],{"class":42,"line":43},[40,104559,970],{"class":596},[40,104561,973],{"class":63},[40,104563,104564],{"class":94}," mujoco_tutorial\n",[40,104566,104567,104569],{"class":42,"line":54},[40,104568,2288],{"class":63},[40,104570,104564],{"class":94},[40,104572,104573,104575],{"class":42,"line":70},[40,104574,3165],{"class":596},[40,104576,104577],{"class":94}," ch1_first_sim.py\n",[19,104579,104580],{},"写入:",[31,104582,104584],{"className":33679,"code":104583,"language":2323,"meta":36,"style":36},"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",[26,104585,104586,104593,104597,104601,104611,104616,104621,104625,104630,104635,104639,104644,104649,104654,104659,104664,104669,104673,104677,104681,104694,104708,104718,104722,104734,104746,104758,104770,104782,104786,104803,104808,104812,104823,104834,104838,104842,104856],{"__ignoreMap":36},[40,104587,104588,104590],{"class":42,"line":43},[40,104589,33692],{"class":1283},[40,104591,104592],{"class":50}," mujoco\n",[40,104594,104595],{"class":42,"line":54},[40,104596,1413],{"emptyLinePlaceholder":1412},[40,104598,104599],{"class":42,"line":70},[40,104600,1413],{"emptyLinePlaceholder":1412},[40,104602,104603,104606,104608],{"class":42,"line":78},[40,104604,104605],{"class":63},"XML",[40,104607,16886],{"class":1283},[40,104609,104610],{"class":94}," \"\"\"\n",[40,104612,104613],{"class":42,"line":86},[40,104614,104615],{"class":94},"\u003Cmujoco model=\"first_sim\">\n",[40,104617,104618],{"class":42,"line":100},[40,104619,104620],{"class":94},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[40,104622,104623],{"class":42,"line":108},[40,104624,1413],{"emptyLinePlaceholder":1412},[40,104626,104627],{"class":42,"line":121},[40,104628,104629],{"class":94},"  \u003Cworldbody>\n",[40,104631,104632],{"class":42,"line":134},[40,104633,104634],{"class":94},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[40,104636,104637],{"class":42,"line":146},[40,104638,1413],{"emptyLinePlaceholder":1412},[40,104640,104641],{"class":42,"line":154},[40,104642,104643],{"class":94},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[40,104645,104646],{"class":42,"line":162},[40,104647,104648],{"class":94},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[40,104650,104651],{"class":42,"line":170},[40,104652,104653],{"class":94},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[40,104655,104656],{"class":42,"line":183},[40,104657,104658],{"class":94},"    \u003C\u002Fbody>\n",[40,104660,104661],{"class":42,"line":196},[40,104662,104663],{"class":94},"  \u003C\u002Fworldbody>\n",[40,104665,104666],{"class":42,"line":204},[40,104667,104668],{"class":94},"\u003C\u002Fmujoco>\n",[40,104670,104671],{"class":42,"line":217},[40,104672,98993],{"class":94},[40,104674,104675],{"class":42,"line":230},[40,104676,1413],{"emptyLinePlaceholder":1412},[40,104678,104679],{"class":42,"line":238},[40,104680,1413],{"emptyLinePlaceholder":1412},[40,104682,104683,104685,104687,104690,104692],{"class":42,"line":251},[40,104684,35247],{"class":1283},[40,104686,5299],{"class":596},[40,104688,104689],{"class":50},"() -> ",[40,104691,98981],{"class":63},[40,104693,332],{"class":50},[40,104695,104696,104699,104701,104704,104706],{"class":42,"line":264},[40,104697,104698],{"class":50},"    model ",[40,104700,1284],{"class":1283},[40,104702,104703],{"class":50}," mujoco.MjModel.from_xml_string(",[40,104705,104605],{"class":63},[40,104707,1811],{"class":50},[40,104709,104710,104713,104715],{"class":42,"line":277},[40,104711,104712],{"class":50},"    data ",[40,104714,1284],{"class":1283},[40,104716,104717],{"class":50}," mujoco.MjData(model)\n",[40,104719,104720],{"class":42,"line":290},[40,104721,1413],{"emptyLinePlaceholder":1412},[40,104723,104724,104726,104728,104731],{"class":42,"line":298},[40,104725,34599],{"class":63},[40,104727,3488],{"class":50},[40,104729,104730],{"class":94},"\"nq:\"",[40,104732,104733],{"class":50},", model.nq)\n",[40,104735,104736,104738,104740,104743],{"class":42,"line":310},[40,104737,34599],{"class":63},[40,104739,3488],{"class":50},[40,104741,104742],{"class":94},"\"nv:\"",[40,104744,104745],{"class":50},", model.nv)\n",[40,104747,104748,104750,104752,104755],{"class":42,"line":5086},[40,104749,34599],{"class":63},[40,104751,3488],{"class":50},[40,104753,104754],{"class":94},"\"nu:\"",[40,104756,104757],{"class":50},", model.nu)\n",[40,104759,104760,104762,104764,104767],{"class":42,"line":5091},[40,104761,34599],{"class":63},[40,104763,3488],{"class":50},[40,104765,104766],{"class":94},"\"initial time:\"",[40,104768,104769],{"class":50},", data.time)\n",[40,104771,104772,104774,104776,104779],{"class":42,"line":5105},[40,104773,34599],{"class":63},[40,104775,3488],{"class":50},[40,104777,104778],{"class":94},"\"initial qpos:\"",[40,104780,104781],{"class":50},", data.qpos.copy())\n",[40,104783,104784],{"class":42,"line":5110},[40,104785,1413],{"emptyLinePlaceholder":1412},[40,104787,104788,104790,104793,104795,104797,104799,104801],{"class":42,"line":5902},[40,104789,6525],{"class":1283},[40,104791,104792],{"class":50}," _ ",[40,104794,29355],{"class":1283},[40,104796,35743],{"class":63},[40,104798,3488],{"class":50},[40,104800,3791],{"class":63},[40,104802,34086],{"class":50},[40,104804,104805],{"class":42,"line":5916},[40,104806,104807],{"class":50},"        mujoco.mj_step(model, data)\n",[40,104809,104810],{"class":42,"line":5924},[40,104811,1413],{"emptyLinePlaceholder":1412},[40,104813,104814,104816,104818,104821],{"class":42,"line":5929},[40,104815,34599],{"class":63},[40,104817,3488],{"class":50},[40,104819,104820],{"class":94},"\"final time:\"",[40,104822,104769],{"class":50},[40,104824,104825,104827,104829,104832],{"class":42,"line":5935},[40,104826,34599],{"class":63},[40,104828,3488],{"class":50},[40,104830,104831],{"class":94},"\"final qpos:\"",[40,104833,104781],{"class":50},[40,104835,104836],{"class":42,"line":5941},[40,104837,1413],{"emptyLinePlaceholder":1412},[40,104839,104840],{"class":42,"line":5946},[40,104841,1413],{"emptyLinePlaceholder":1412},[40,104843,104844,104846,104848,104851,104854],{"class":42,"line":11270},[40,104845,4873],{"class":1283},[40,104847,34520],{"class":63},[40,104849,104850],{"class":1283}," ==",[40,104852,104853],{"class":94}," \"__main__\"",[40,104855,332],{"class":50},[40,104857,104858],{"class":42,"line":11294},[40,104859,104860],{"class":50},"    main()\n",[402,104862,104863],{"id":104863},"代码逐段解释",[19,104865,104866],{},"导入库：",[31,104868,104870],{"className":33679,"code":104869,"language":2323,"meta":36,"style":36},"import mujoco\n",[26,104871,104872],{"__ignoreMap":36},[40,104873,104874,104876],{"class":42,"line":43},[40,104875,33692],{"class":1283},[40,104877,104592],{"class":50},[19,104879,104880],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,104882,104883],{},"定义 XML：",[31,104885,104887],{"className":33679,"code":104886,"language":2323,"meta":36,"style":36},"XML = \"\"\"\n...\n\"\"\"\n",[26,104888,104889,104897,104902],{"__ignoreMap":36},[40,104890,104891,104893,104895],{"class":42,"line":43},[40,104892,104605],{"class":63},[40,104894,16886],{"class":1283},[40,104896,104610],{"class":94},[40,104898,104899],{"class":42,"line":54},[40,104900,104901],{"class":94},"...\n",[40,104903,104904],{"class":42,"line":70},[40,104905,98993],{"class":94},[19,104907,104908,104909,104912],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[26,104910,104911],{},"freejoint"," 的方块。",[19,104914,104915],{},"编译模型：",[31,104917,104919],{"className":33679,"code":104918,"language":2323,"meta":36,"style":36},"model = mujoco.MjModel.from_xml_string(XML)\n",[26,104920,104921],{"__ignoreMap":36},[40,104922,104923,104926,104928,104930,104932],{"class":42,"line":43},[40,104924,104925],{"class":50},"model ",[40,104927,1284],{"class":1283},[40,104929,104703],{"class":50},[40,104931,104605],{"class":63},[40,104933,1811],{"class":50},[19,104935,104936],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,104938,104939],{},"创建数据：",[31,104941,104943],{"className":33679,"code":104942,"language":2323,"meta":36,"style":36},"data = mujoco.MjData(model)\n",[26,104944,104945],{"__ignoreMap":36},[40,104946,104947,104950,104952],{"class":42,"line":43},[40,104948,104949],{"class":50},"data ",[40,104951,1284],{"class":1283},[40,104953,104717],{"class":50},[19,104955,104956,104958,104959,104961],{},[26,104957,36701],{}," 会保存仿真当前状态。刚创建时，时间是 ",[26,104960,3672],{},"，方块还在初始位置。",[19,104963,104964],{},"推进仿真：",[31,104966,104968],{"className":33679,"code":104967,"language":2323,"meta":36,"style":36},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[26,104969,104970,104986],{"__ignoreMap":36},[40,104971,104972,104974,104976,104978,104980,104982,104984],{"class":42,"line":43},[40,104973,6349],{"class":1283},[40,104975,104792],{"class":50},[40,104977,29355],{"class":1283},[40,104979,35743],{"class":63},[40,104981,3488],{"class":50},[40,104983,3791],{"class":63},[40,104985,34086],{"class":50},[40,104987,104988],{"class":42,"line":54},[40,104989,104990],{"class":50},"    mujoco.mj_step(model, data)\n",[19,104992,104993,104994,104996],{},"每次 ",[26,104995,104509],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[402,104998,104999],{"id":104999},"代码逐行细讲",[19,105001,105002],{},"下面把完整代码按新手视角拆开讲。",[31,105004,105005],{"className":33679,"code":104869,"language":2323,"meta":36,"style":36},[26,105006,105007],{"__ignoreMap":36},[40,105008,105009,105011],{"class":42,"line":43},[40,105010,33692],{"class":1283},[40,105012,104592],{"class":50},[19,105014,105015,105017,105018,3693,105020,3693,105022,776],{},[26,105016,33692],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[26,105019,103970],{},[26,105021,103975],{},[26,105023,105024],{},"mujoco.mj_step",[31,105026,105027],{"className":33679,"code":104886,"language":2323,"meta":36,"style":36},[26,105028,105029,105037,105041],{"__ignoreMap":36},[40,105030,105031,105033,105035],{"class":42,"line":43},[40,105032,104605],{"class":63},[40,105034,16886],{"class":1283},[40,105036,104610],{"class":94},[40,105038,105039],{"class":42,"line":54},[40,105040,104901],{"class":94},[40,105042,105043],{"class":42,"line":70},[40,105044,98993],{"class":94},[19,105046,105047,105049,105050,105053],{},[26,105048,104605],{}," 是一个变量名。右边的三引号 ",[26,105051,105052],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[31,105055,105056],{"className":56365,"code":104615,"language":56367,"meta":36,"style":36},[26,105057,105058],{"__ignoreMap":36},[40,105059,105060,105062,105064,105067,105069,105072],{"class":42,"line":43},[40,105061,4387],{"class":50},[40,105063,104315],{"class":46},[40,105065,105066],{"class":596}," model",[40,105068,1284],{"class":50},[40,105070,105071],{"class":94},"\"first_sim\"",[40,105073,54606],{"class":50},[19,105075,105076,105077,105080,105081,776],{},"这是 XML 的根标签。",[26,105078,105079],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[26,105082,105083],{},"first_sim",[31,105085,105086],{"className":56365,"code":104477,"language":56367,"meta":36,"style":36},[26,105087,105088],{"__ignoreMap":36},[40,105089,105090,105092,105094,105096,105098,105100,105102,105104,105106],{"class":42,"line":43},[40,105091,4387],{"class":50},[40,105093,72464],{"class":46},[40,105095,104488],{"class":596},[40,105097,1284],{"class":50},[40,105099,104493],{"class":94},[40,105101,104496],{"class":596},[40,105103,1284],{"class":50},[40,105105,104501],{"class":94},[40,105107,104438],{"class":50},[19,105109,105110,105112,105113,105116,105117,105120],{},[26,105111,72464],{}," 用来设置仿真参数。",[26,105114,105115],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[26,105118,105119],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[31,105122,105124],{"className":56365,"code":105123,"language":56367,"meta":36,"style":36},"\u003Cworldbody>\n",[26,105125,105126],{"__ignoreMap":36},[40,105127,105128,105130,105133],{"class":42,"line":43},[40,105129,4387],{"class":50},[40,105131,105132],{"class":46},"worldbody",[40,105134,54606],{"class":50},[19,105136,105137,105139],{},[26,105138,105132],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[31,105141,105143],{"className":56365,"code":105142,"language":56367,"meta":36,"style":36},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[26,105144,105145],{"__ignoreMap":36},[40,105146,105147,105149,105151,105153,105155,105158,105160,105162,105165,105167,105169,105172,105174,105176,105179],{"class":42,"line":43},[40,105148,4387],{"class":50},[40,105150,104414],{"class":46},[40,105152,18242],{"class":596},[40,105154,1284],{"class":50},[40,105156,105157],{"class":94},"\"floor\"",[40,105159,57122],{"class":596},[40,105161,1284],{"class":50},[40,105163,105164],{"class":94},"\"plane\"",[40,105166,104430],{"class":596},[40,105168,1284],{"class":50},[40,105170,105171],{"class":94},"\"2 2 0.1\"",[40,105173,82062],{"class":596},[40,105175,1284],{"class":50},[40,105177,105178],{"class":94},"\"0.8 0.8 0.8 1\"",[40,105180,104438],{"class":50},[19,105182,105183,105184,105186,105187,105190,105191,105194,105195,105197],{},"这行创建地面。",[26,105185,104414],{}," 是几何体。",[26,105188,105189],{},"name=\"floor\""," 是名字。",[26,105192,105193],{},"type=\"plane\""," 表示平面。",[26,105196,58408],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[31,105199,105201],{"className":56365,"code":105200,"language":56367,"meta":36,"style":36},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[26,105202,105203],{"__ignoreMap":36},[40,105204,105205,105207,105209,105211,105213,105215,105217,105219,105221],{"class":42,"line":43},[40,105206,4387],{"class":50},[40,105208,55098],{"class":46},[40,105210,18242],{"class":596},[40,105212,1284],{"class":50},[40,105214,56789],{"class":94},[40,105216,104400],{"class":596},[40,105218,1284],{"class":50},[40,105220,104405],{"class":94},[40,105222,54606],{"class":50},[19,105224,105225,105226,776,105228,105231,105232,105234],{},"这行创建一个刚体，名字叫 ",[26,105227,57012],{},[26,105229,105230],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[26,105233,104463],{},"，也就是离地面 1 米高。",[31,105236,105238],{"className":56365,"code":105237,"language":56367,"meta":36,"style":36},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[26,105239,105240],{"__ignoreMap":36},[40,105241,105242,105244,105246,105248,105250,105253],{"class":42,"line":43},[40,105243,4387],{"class":50},[40,105245,104911],{"class":46},[40,105247,18242],{"class":596},[40,105249,1284],{"class":50},[40,105251,105252],{"class":94},"\"box_free\"",[40,105254,104438],{"class":50},[19,105256,105257,105258,105260],{},"这行很重要。",[26,105259,104911],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[31,105262,105264],{"className":56365,"code":105263,"language":56367,"meta":36,"style":36},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[26,105265,105266],{"__ignoreMap":36},[40,105267,105268,105270,105272,105274,105276,105278,105280,105282,105284,105286,105288,105290,105293,105295,105297,105299,105301,105304],{"class":42,"line":43},[40,105269,4387],{"class":50},[40,105271,104414],{"class":46},[40,105273,18242],{"class":596},[40,105275,1284],{"class":50},[40,105277,104421],{"class":94},[40,105279,57122],{"class":596},[40,105281,1284],{"class":50},[40,105283,56789],{"class":94},[40,105285,104430],{"class":596},[40,105287,1284],{"class":50},[40,105289,104435],{"class":94},[40,105291,105292],{"class":596}," mass",[40,105294,1284],{"class":50},[40,105296,7002],{"class":94},[40,105298,82062],{"class":596},[40,105300,1284],{"class":50},[40,105302,105303],{"class":94},"\"1 0 0 1\"",[40,105305,104438],{"class":50},[19,105307,105308,105309,105312,105313,105316,105317,105320,105321,105324],{},"这行给 box body 添加一个盒子形状。",[26,105310,105311],{},"type=\"box\""," 表示形状是盒子。",[26,105314,105315],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[26,105318,105319],{},"mass=\"1\""," 表示质量是 1。",[26,105322,105323],{},"rgba=\"1 0 0 1\""," 表示红色。",[31,105326,105328],{"className":33679,"code":105327,"language":2323,"meta":36,"style":36},"def main() -> None:\n",[26,105329,105330],{"__ignoreMap":36},[40,105331,105332,105334,105336,105338,105340],{"class":42,"line":43},[40,105333,35247],{"class":1283},[40,105335,5299],{"class":596},[40,105337,104689],{"class":50},[40,105339,98981],{"class":63},[40,105341,332],{"class":50},[19,105343,105344,105346,105347,105350,105351,105354],{},[26,105345,35247],{}," 用来定义函数。这里定义了一个叫 ",[26,105348,105349],{},"main"," 的函数。",[26,105352,105353],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[31,105356,105357],{"className":33679,"code":104918,"language":2323,"meta":36,"style":36},[26,105358,105359],{"__ignoreMap":36},[40,105360,105361,105363,105365,105367,105369],{"class":42,"line":43},[40,105362,104925],{"class":50},[40,105364,1284],{"class":1283},[40,105366,104703],{"class":50},[40,105368,104605],{"class":63},[40,105370,1811],{"class":50},[19,105372,105373,105374,105377],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[26,105375,105376],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[31,105379,105380],{"className":33679,"code":104942,"language":2323,"meta":36,"style":36},[26,105381,105382],{"__ignoreMap":36},[40,105383,105384,105386,105388],{"class":42,"line":43},[40,105385,104949],{"class":50},[40,105387,1284],{"class":1283},[40,105389,104717],{"class":50},[19,105391,105392,105393,105395,105396,105398],{},"这行创建仿真数据。",[26,105394,36701],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[26,105397,36701],{}," 都会变化。",[31,105400,105402],{"className":33679,"code":105401,"language":2323,"meta":36,"style":36},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[26,105403,105404,105414,105424],{"__ignoreMap":36},[40,105405,105406,105408,105410,105412],{"class":42,"line":43},[40,105407,33715],{"class":63},[40,105409,3488],{"class":50},[40,105411,104730],{"class":94},[40,105413,104733],{"class":50},[40,105415,105416,105418,105420,105422],{"class":42,"line":54},[40,105417,33715],{"class":63},[40,105419,3488],{"class":50},[40,105421,104742],{"class":94},[40,105423,104745],{"class":50},[40,105425,105426,105428,105430,105432],{"class":42,"line":70},[40,105427,33715],{"class":63},[40,105429,3488],{"class":50},[40,105431,104754],{"class":94},[40,105433,104757],{"class":50},[19,105435,105436,105438,105439,105442,105443,105446,105447,105450,105451,105454],{},[26,105437,33715],{}," 用来输出信息。",[26,105440,105441],{},"model.nq"," 是位置变量数量，",[26,105444,105445],{},"model.nv"," 是速度变量数量，",[26,105448,105449],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[26,105452,105453],{},"nu"," 是 0。",[31,105456,105458],{"className":33679,"code":105457,"language":2323,"meta":36,"style":36},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[26,105459,105460,105470],{"__ignoreMap":36},[40,105461,105462,105464,105466,105468],{"class":42,"line":43},[40,105463,33715],{"class":63},[40,105465,3488],{"class":50},[40,105467,104766],{"class":94},[40,105469,104769],{"class":50},[40,105471,105472,105474,105476,105478],{"class":42,"line":54},[40,105473,33715],{"class":63},[40,105475,3488],{"class":50},[40,105477,104778],{"class":94},[40,105479,104781],{"class":50},[19,105481,105482,105483,105485,105486,105488,105489,105492],{},"这里打印初始时间和初始位置。",[26,105484,104361],{}," 一开始是 0。",[26,105487,104364],{}," 是位置数组。",[26,105490,105491],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[31,105494,105495],{"className":33679,"code":104967,"language":2323,"meta":36,"style":36},[26,105496,105497,105513],{"__ignoreMap":36},[40,105498,105499,105501,105503,105505,105507,105509,105511],{"class":42,"line":43},[40,105500,6349],{"class":1283},[40,105502,104792],{"class":50},[40,105504,29355],{"class":1283},[40,105506,35743],{"class":63},[40,105508,3488],{"class":50},[40,105510,3791],{"class":63},[40,105512,34086],{"class":50},[40,105514,105515],{"class":42,"line":54},[40,105516,104990],{"class":50},[19,105518,105519,105521,105522,105525,105526,105528,105529,105531],{},[26,105520,6349],{}," 是循环。",[26,105523,105524],{},"range(100)"," 表示循环 100 次。",[26,105527,4469],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[26,105530,104509],{},"，仿真就前进一步。",[31,105533,105535],{"className":33679,"code":105534,"language":2323,"meta":36,"style":36},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[26,105536,105537,105547],{"__ignoreMap":36},[40,105538,105539,105541,105543,105545],{"class":42,"line":43},[40,105540,33715],{"class":63},[40,105542,3488],{"class":50},[40,105544,104820],{"class":94},[40,105546,104769],{"class":50},[40,105548,105549,105551,105553,105555],{"class":42,"line":54},[40,105550,33715],{"class":63},[40,105552,3488],{"class":50},[40,105554,104831],{"class":94},[40,105556,104781],{"class":50},[19,105558,105559],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[31,105561,105563],{"className":33679,"code":105562,"language":2323,"meta":36,"style":36},"if __name__ == \"__main__\":\n    main()\n",[26,105564,105565,105577],{"__ignoreMap":36},[40,105566,105567,105569,105571,105573,105575],{"class":42,"line":43},[40,105568,4873],{"class":1283},[40,105570,34520],{"class":63},[40,105572,104850],{"class":1283},[40,105574,104853],{"class":94},[40,105576,332],{"class":50},[40,105578,105579],{"class":42,"line":54},[40,105580,104860],{"class":50},[19,105582,105583,105584,105587,105588,776],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[26,105585,105586],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[26,105589,105586],{},[19,105591,105592],{},"运行:",[31,105594,105596],{"className":27141,"code":105595,"language":27143,"meta":36,"style":36},"python ch1_first_sim.py\n",[26,105597,105598],{"__ignoreMap":36},[40,105599,105600,105602],{"class":42,"line":43},[40,105601,2323],{"class":596},[40,105603,104577],{"class":94},[14,105605,105607],{"id":105606},"_5运行结果说明","5.运行结果说明",[19,105609,105610],{},"你应该看到类似输出:",[31,105612,105615],{"className":105613,"code":105614,"language":8510,"meta":36},[8508],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[26,105616,105614],{"__ignoreMap":36},[19,105618,105619,105621,105622,105625,105626,776],{},[26,105620,104911],{}," 有 7 个位置变量: ",[26,105623,105624],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[26,105627,105628],{},"vx vy vz wx wy wz",[19,105630,105631,105632,105635],{},"你还会看到 ",[26,105633,105634],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,105637,105639],{"id":105638},"_6验证步骤","6.验证步骤",[19,105641,105642],{},"确认版本:",[31,105644,105645],{"className":27141,"code":104233,"language":27143,"meta":36,"style":36},[26,105646,105647],{"__ignoreMap":36},[40,105648,105649,105651,105653],{"class":42,"line":43},[40,105650,2323],{"class":596},[40,105652,33659],{"class":63},[40,105654,104244],{"class":94},[19,105656,105657],{},"确认导入的是官方 bindings:",[31,105659,105661],{"className":27141,"code":105660,"language":27143,"meta":36,"style":36},"python -c \"import mujoco; print(mujoco)\"\n",[26,105662,105663],{"__ignoreMap":36},[40,105664,105665,105667,105669],{"class":42,"line":43},[40,105666,2323],{"class":596},[40,105668,33659],{"class":63},[40,105670,105671],{"class":94}," \"import mujoco; print(mujoco)\"\n",[19,105673,105674],{},"运行程序:",[31,105676,105677],{"className":27141,"code":105595,"language":27143,"meta":36,"style":36},[26,105678,105679],{"__ignoreMap":36},[40,105680,105681,105683],{"class":42,"line":43},[40,105682,2323],{"class":596},[40,105684,104577],{"class":94},[19,105686,105687,105688,105691,105692,776],{},"检查 ",[26,105689,105690],{},"final time"," 是否约等于 ",[26,105693,105694],{},"1.0",[19,105696,105697],{},"再做几个小实验：",[492,105699,105700,105710,105718,105731],{},[495,105701,105702,105703,105705,105706,105709],{},"把 ",[26,105704,105230],{}," 改成 ",[26,105707,105708],{},"pos=\"0 0 2\"","，观察初始高度变化。",[495,105711,105702,105712,105705,105714,105717],{},[26,105713,105119],{},[26,105715,105716],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[495,105719,105702,105720,105705,105722,105725,105726,105728,105729,776],{},[26,105721,105115],{},[26,105723,105724],{},"timestep=\"0.005\"","，观察 100 步后的 ",[26,105727,105690],{}," 是否变成约 ",[26,105730,38629],{},[495,105732,105733,105734,105737],{},"删除 ",[26,105735,105736],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,105739,105740],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,105742,105744],{"id":105743},"_7常见错误与解决方案","7.常见错误与解决方案",[402,105746,105748],{"id":105747},"modulenotfounderror-no-module-named-mujoco",[26,105749,105750],{},"ModuleNotFoundError: No module named 'mujoco'",[19,105752,105753],{},"解决:",[31,105755,105757],{"className":27141,"code":105756,"language":27143,"meta":36,"style":36},"pip install \"mujoco>=2.3\"\n",[26,105758,105759],{"__ignoreMap":36},[40,105760,105761,105763,105765],{"class":42,"line":43},[40,105762,27150],{"class":596},[40,105764,929],{"class":94},[40,105766,105767],{"class":94}," \"mujoco>=2.3\"\n",[402,105769,105771],{"id":105770},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,105773,105774],{},"先安装系统依赖:",[31,105776,105778],{"className":27141,"code":105777,"language":27143,"meta":36,"style":36},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[26,105779,105780],{"__ignoreMap":36},[40,105781,105782,105784,105786,105788,105790,105793,105795,105798,105800,105803,105805],{"class":42,"line":43},[40,105783,923],{"class":596},[40,105785,29625],{"class":94},[40,105787,929],{"class":94},[40,105789,29710],{"class":63},[40,105791,105792],{"class":94}," mesa-libGL",[40,105794,104109],{"class":94},[40,105796,105797],{"class":94}," glfw",[40,105799,104129],{"class":94},[40,105801,105802],{"class":94}," libX11",[40,105804,104142],{"class":94},[40,105806,105807],{"class":94}," libXrandr\n",[402,105809,105811],{"id":105810},"xml-解析失败","XML 解析失败",[19,105813,105814],{},"检查:",[492,105816,105817,105820,105823,105829],{},[495,105818,105819],{},"标签是否闭合",[495,105821,105822],{},"属性是否带引号",[495,105824,105825,105826],{},"根节点是否是 ",[26,105827,105828],{},"\u003Cmujoco>",[495,105830,105831,105833,105834,105837],{},[26,105832,55098],{}," 是否放在 ",[26,105835,105836],{},"\u003Cworldbody>"," 内部",[402,105839,105841,105843,105844],{"id":105840},"final-time-不是严格等于-10",[26,105842,105690],{}," 不是严格等于 ",[26,105845,105694],{},[19,105847,105848],{},"这通常不是错误。浮点数计算可能得到：",[31,105850,105853],{"className":105851,"code":105852,"language":8510,"meta":36},[8508],"1.0000000000000007\n",[26,105854,105852],{"__ignoreMap":36},[19,105856,105857,105858,105860],{},"只要接近 ",[26,105859,105694],{}," 就正常。",[402,105862,105863],{"id":105863},"方块没有掉下来",[19,105865,105866],{},"检查：",[492,105868,105869,105875,105881,105886],{},[495,105870,105871,105872],{},"方块 body 里是否有 ",[26,105873,105874],{},"\u003Cfreejoint\u002F>",[495,105876,105877,105878],{},"重力是否是 ",[26,105879,105880],{},"0 0 -9.81",[495,105882,105883,105884],{},"是否真的调用了 ",[26,105885,103980],{},[495,105887,105888,105889,105891,105892],{},"你看的是否是 ",[26,105890,105634],{},"，不是 ",[26,105893,105894],{},"initial qpos",[14,105896,105898],{"id":105897},"_8本章小结","8.本章小结",[19,105900,105901],{},"本章你已经完成了 MuJoCo 的最小闭环：",[31,105903,105906],{"className":105904,"code":105905,"language":8510,"meta":36},[8508],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[26,105907,105905],{"__ignoreMap":36},[19,105909,105910],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[3384,105912,105913],{},"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":36,"searchDepth":54,"depth":54,"links":105915},[105916,105917,105918,105923,105927,105928,105929,105937],{"id":103941,"depth":54,"text":103942},{"id":104064,"depth":54,"text":104065},{"id":104338,"depth":54,"text":104339,"children":105919},[105920,105921,105922],{"id":104376,"depth":70,"text":104377},{"id":104470,"depth":70,"text":104471},{"id":104522,"depth":70,"text":104523},{"id":104546,"depth":54,"text":104547,"children":105924},[105925,105926],{"id":104863,"depth":70,"text":104863},{"id":104999,"depth":70,"text":104999},{"id":105606,"depth":54,"text":105607},{"id":105638,"depth":54,"text":105639},{"id":105743,"depth":54,"text":105744,"children":105930},[105931,105932,105933,105934,105936],{"id":105747,"depth":70,"text":105750},{"id":105770,"depth":70,"text":105771},{"id":105810,"depth":70,"text":105811},{"id":105840,"depth":70,"text":105935},"final time 不是严格等于 1.0",{"id":105863,"depth":70,"text":105863},{"id":105897,"depth":54,"text":105898},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":103933,"description":36},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":105944,"title":105945,"body":105946,"description":36,"extension":3414,"meta":107602,"navigation":1412,"path":107603,"seo":107604,"stem":107605,"__hash__":107606},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":105947,"toc":107578},[105948,105951,105953,105956,105959,105976,106071,106074,106080,106082,106084,106108,106111,106125,106128,106169,106171,106184,106186,106189,106237,106249,106252,106255,106261,106274,106341,106344,106363,106366,106369,106375,106377,106386,106389,106393,106402,106484,106493,106497,106503,106517,106527,106529,106859,106862,106874,106876,106887,106889,106892,106910,106913,106916,106934,106945,106948,106963,106973,106975,106996,107013,107033,107039,107079,107095,107111,107117,107120,107144,107160,107165,107195,107212,107237,107240,107255,107264,107279,107288,107303,107310,107312,107322,107335,107342,107345,107384,107391,107393,107445,107447,107453,107456,107463,107470,107473,107475,107493,107496,107499,107533,107545,107547,107550,107572,107575],[10,105949,105945],{"id":105950},"_2xml-与-mjcf-物理建模基础",[14,105952,103942],{"id":103941},[19,105954,105955],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,105957,105958],{},"本章结束后，你应该能看懂一个简单模型里：",[492,105960,105961,105964,105967,105970,105973],{},[495,105962,105963],{},"地面在哪里。",[495,105965,105966],{},"物体初始位置在哪里。",[495,105968,105969],{},"几何体是什么形状。",[495,105971,105972],{},"哪些 body 可以自由运动。",[495,105974,105975],{},"如何用名字在 Python 里找到 XML 中的对象。",[3619,105977,105978,105988],{},[3622,105979,105980],{},[3625,105981,105982,105985],{},[3628,105983,105984],{"align":27055},"标签",[3628,105986,105987],{"align":27055},"作用",[3665,105989,105990,105999,106009,106018,106028,106038,106051,106061],{},[3625,105991,105992,105996],{},[3670,105993,105994],{"align":27055},[26,105995,105828],{},[3670,105997,105998],{"align":27055},"根节点",[3625,106000,106001,106006],{},[3670,106002,106003],{"align":27055},[26,106004,106005],{},"\u003Coption>",[3670,106007,106008],{"align":27055},"仿真参数",[3625,106010,106011,106015],{},[3670,106012,106013],{"align":27055},[26,106014,105836],{},[3670,106016,106017],{"align":27055},"世界中的物体",[3625,106019,106020,106025],{},[3670,106021,106022],{"align":27055},[26,106023,106024],{},"\u003Cbody>",[3670,106026,106027],{"align":27055},"刚体",[3625,106029,106030,106035],{},[3670,106031,106032],{"align":27055},[26,106033,106034],{},"\u003Cgeom>",[3670,106036,106037],{"align":27055},"几何体、碰撞体、可视体",[3625,106039,106040,106048],{},[3670,106041,106042,28293,106045],{"align":27055},[26,106043,106044],{},"\u003Cjoint>",[26,106046,106047],{},"\u003Cfreejoint>",[3670,106049,106050],{"align":27055},"关节",[3625,106052,106053,106058],{},[3670,106054,106055],{"align":27055},[26,106056,106057],{},"\u003Csite>",[3670,106059,106060],{"align":27055},"标记点",[3625,106062,106063,106068],{},[3670,106064,106065],{"align":27055},[26,106066,106067],{},"\u003Cactuator>",[3670,106069,106070],{"align":27055},"控制器",[19,106072,106073],{},"初学时可以先记住：",[31,106075,106078],{"className":106076,"code":106077,"language":8510,"meta":36},[8508],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[26,106079,106077],{"__ignoreMap":36},[14,106081,104065],{"id":104064},[19,106083,104068],{},[31,106085,106087],{"className":27141,"code":106086,"language":27143,"meta":36,"style":36},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[26,106088,106089],{"__ignoreMap":36},[40,106090,106091,106093,106095,106097,106099,106101,106103,106105],{"class":42,"line":43},[40,106092,923],{"class":596},[40,106094,29625],{"class":94},[40,106096,929],{"class":94},[40,106098,29710],{"class":63},[40,106100,105792],{"class":94},[40,106102,104109],{"class":94},[40,106104,105797],{"class":94},[40,106106,106107],{"class":94}," glfw-devel\n",[19,106109,106110],{},"pip:",[31,106112,106113],{"className":27141,"code":104213,"language":27143,"meta":36,"style":36},[26,106114,106115],{"__ignoreMap":36},[40,106116,106117,106119,106121,106123],{"class":42,"line":43},[40,106118,27150],{"class":596},[40,106120,929],{"class":94},[40,106122,104224],{"class":94},[40,106124,104227],{"class":94},[19,106126,106127],{},"conda:",[31,106129,106131],{"className":27141,"code":106130,"language":27143,"meta":36,"style":36},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[26,106132,106133,106150,106159],{"__ignoreMap":36},[40,106134,106135,106137,106139,106141,106144,106146,106148],{"class":42,"line":43},[40,106136,33631],{"class":596},[40,106138,32479],{"class":94},[40,106140,1805],{"class":63},[40,106142,106143],{"class":94}," mujoco-xml",[40,106145,104269],{"class":94},[40,106147,104272],{"class":63},[40,106149,104275],{"class":63},[40,106151,106152,106154,106156],{"class":42,"line":54},[40,106153,33631],{"class":596},[40,106155,104282],{"class":94},[40,106157,106158],{"class":94}," mujoco-xml\n",[40,106160,106161,106163,106165,106167],{"class":42,"line":70},[40,106162,27150],{"class":596},[40,106164,929],{"class":94},[40,106166,104224],{"class":94},[40,106168,104227],{"class":94},[19,106170,104298],{},[492,106172,106173,106176,106181],{},[495,106174,106175],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[495,106177,106178,106179,776],{},"本章使用基础标签，适用于 ",[26,106180,104321],{},[495,106182,106183],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,106185,104339],{"id":104338},[19,106187,106188],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[31,106190,106192],{"className":56365,"code":106191,"language":56367,"meta":36,"style":36},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[26,106193,106194,106208,106216,106221,106229],{"__ignoreMap":36},[40,106195,106196,106198,106200,106202,106204,106206],{"class":42,"line":43},[40,106197,4387],{"class":50},[40,106199,104315],{"class":46},[40,106201,105066],{"class":596},[40,106203,1284],{"class":50},[40,106205,65977],{"class":94},[40,106207,54606],{"class":50},[40,106209,106210,106212,106214],{"class":42,"line":54},[40,106211,55442],{"class":50},[40,106213,105132],{"class":46},[40,106215,54606],{"class":50},[40,106217,106218],{"class":42,"line":70},[40,106219,106220],{"class":50},"    ...\n",[40,106222,106223,106225,106227],{"class":42,"line":78},[40,106224,55715],{"class":50},[40,106226,105132],{"class":46},[40,106228,54606],{"class":50},[40,106230,106231,106233,106235],{"class":42,"line":86},[40,106232,55083],{"class":50},[40,106234,104315],{"class":46},[40,106236,54606],{"class":50},[19,106238,106239,106241,106242,106244,106245,106248],{},[26,106240,55098],{}," 表示刚体。",[26,106243,104414],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[26,106246,106247],{},"joint"," 表示刚体相对父刚体如何运动。",[402,106250,106251],{"id":106251},"层级结构非常重要",[19,106253,106254],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[31,106256,106259],{"className":106257,"code":106258,"language":8510,"meta":36},[8508],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[26,106260,106258],{"__ignoreMap":36},[19,106262,106263,104312,106266,106269,106270,106273],{},[26,106264,106265],{},"red_box_geom",[26,106267,106268],{},"box_center"," 都属于 ",[26,106271,106272],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[31,106275,106277],{"className":56365,"code":106276,"language":56367,"meta":36,"style":36},"\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",[26,106278,106279,106299,106313,106333],{"__ignoreMap":36},[40,106280,106281,106283,106285,106287,106289,106291,106293,106295,106297],{"class":42,"line":43},[40,106282,4387],{"class":50},[40,106284,55098],{"class":46},[40,106286,18242],{"class":596},[40,106288,1284],{"class":50},[40,106290,56789],{"class":94},[40,106292,104400],{"class":596},[40,106294,1284],{"class":50},[40,106296,104405],{"class":94},[40,106298,54606],{"class":50},[40,106300,106301,106303,106305,106307,106309,106311],{"class":42,"line":54},[40,106302,55442],{"class":50},[40,106304,104911],{"class":46},[40,106306,18242],{"class":596},[40,106308,1284],{"class":50},[40,106310,105252],{"class":94},[40,106312,104438],{"class":50},[40,106314,106315,106317,106319,106321,106323,106325,106327,106329,106331],{"class":42,"line":70},[40,106316,55442],{"class":50},[40,106318,104414],{"class":46},[40,106320,57122],{"class":596},[40,106322,1284],{"class":50},[40,106324,56789],{"class":94},[40,106326,104430],{"class":596},[40,106328,1284],{"class":50},[40,106330,104435],{"class":94},[40,106332,104438],{"class":50},[40,106334,106335,106337,106339],{"class":42,"line":78},[40,106336,55083],{"class":50},[40,106338,55098],{"class":46},[40,106340,54606],{"class":50},[19,106342,106343],{},"含义:",[492,106345,106346,106352,106357,106360],{},[495,106347,106348,106349,106351],{},"创建名为 ",[26,106350,57012],{}," 的刚体",[495,106353,106354,106355],{},"初始位置在世界坐标 ",[26,106356,104463],{},[495,106358,106359],{},"它有一个自由关节",[495,106361,106362],{},"它有一个盒子几何体",[402,106364,106365],{"id":106365},"坐标怎么理解",[19,106367,106368],{},"MuJoCo 默认使用三维坐标：",[31,106370,106373],{"className":106371,"code":106372,"language":8510,"meta":36},[8508],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[26,106374,106372],{"__ignoreMap":36},[19,106376,17955],{},[31,106378,106380],{"className":56365,"code":106379,"language":56367,"meta":36,"style":36},"pos=\"0 0 1\"\n",[26,106381,106382],{"__ignoreMap":36},[40,106383,106384],{"class":42,"line":43},[40,106385,106379],{"class":50},[19,106387,106388],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[402,106390,106392],{"id":106391},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,106394,106395,106396,85825,106399,106401],{},"不同 ",[26,106397,106398],{},"type",[26,106400,34796],{}," 含义不同：",[3619,106403,106404,106419],{},[3622,106405,106406],{},[3625,106407,106408,106412,106417],{},[3628,106409,106410],{"align":27055},[26,106411,106398],{},[3628,106413,106414,106416],{"align":27055},[26,106415,34796],{}," 示例",[3628,106418,103995],{"align":27055},[3665,106420,106421,106435,106450,106469],{},[3625,106422,106423,106427,106432],{},[3670,106424,106425],{"align":27055},[26,106426,57012],{},[3670,106428,106429],{"align":27055},[26,106430,106431],{},"size=\"0.1 0.2 0.3\"",[3670,106433,106434],{"align":27055},"x\u002Fy\u002Fz 半边长，不是完整长度",[3625,106436,106437,106442,106447],{},[3670,106438,106439],{"align":27055},[26,106440,106441],{},"sphere",[3670,106443,106444],{"align":27055},[26,106445,106446],{},"size=\"0.1\"",[3670,106448,106449],{"align":27055},"球半径",[3625,106451,106452,106457,106462],{},[3670,106453,106454],{"align":27055},[26,106455,106456],{},"capsule",[3670,106458,106459],{"align":27055},[26,106460,106461],{},"size=\"0.03\"",[3670,106463,106464,106465,106468],{"align":27055},"胶囊半径，长度常用 ",[26,106466,106467],{},"fromto"," 指定",[3625,106470,106471,106476,106481],{},[3670,106472,106473],{"align":27055},[26,106474,106475],{},"plane",[3670,106477,106478],{"align":27055},[26,106479,106480],{},"size=\"3 3 0.1\"",[3670,106482,106483],{"align":27055},"可视平面大小，通常当地面",[19,106485,106486,106487,106489,106490,106492],{},"最容易踩坑的是 box：",[26,106488,105315],{}," 表示边长大约是 ",[26,106491,35337],{},"，因为 MuJoCo 用的是半边长。",[402,106494,106496],{"id":106495},"site-是什么","site 是什么",[19,106498,106499,106502],{},[26,106500,106501],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[492,106504,106505,106508,106511,106514],{},[495,106506,106507],{},"标记机械臂末端。",[495,106509,106510],{},"标记目标位置。",[495,106512,106513],{},"放传感器或相机参考点。",[495,106515,106516],{},"在 Python 中读取某个关键点的世界坐标。",[19,106518,106519,106520,104312,106523,106526],{},"在后面的 Reacher 任务中，",[26,106521,106522],{},"tip",[26,106524,106525],{},"target"," 就会用 site 表示。",[14,106528,104547],{"id":104546},[31,106530,106532],{"className":33679,"code":106531,"language":2323,"meta":36,"style":36},"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",[26,106533,106534,106540,106550,106554,106558,106566,106571,106575,106579,106583,106588,106592,106597,106602,106607,106612,106616,106620,106624,106628,106632,106636,106648,106660,106668,106672,106687,106702,106706,106719,106734,106747,106760,106764,106780,106784,106788,106799,106811,106823,106835,106839,106843,106855],{"__ignoreMap":36},[40,106535,106536,106538],{"class":42,"line":43},[40,106537,33692],{"class":1283},[40,106539,104592],{"class":50},[40,106541,106542,106544,106546,106548],{"class":42,"line":54},[40,106543,33692],{"class":1283},[40,106545,34680],{"class":50},[40,106547,34683],{"class":1283},[40,106549,34686],{"class":50},[40,106551,106552],{"class":42,"line":70},[40,106553,1413],{"emptyLinePlaceholder":1412},[40,106555,106556],{"class":42,"line":78},[40,106557,1413],{"emptyLinePlaceholder":1412},[40,106559,106560,106562,106564],{"class":42,"line":86},[40,106561,104605],{"class":63},[40,106563,16886],{"class":1283},[40,106565,104610],{"class":94},[40,106567,106568],{"class":42,"line":100},[40,106569,106570],{"class":94},"\u003Cmujoco model=\"xml_basic\">\n",[40,106572,106573],{"class":42,"line":108},[40,106574,104620],{"class":94},[40,106576,106577],{"class":42,"line":121},[40,106578,1413],{"emptyLinePlaceholder":1412},[40,106580,106581],{"class":42,"line":134},[40,106582,104629],{"class":94},[40,106584,106585],{"class":42,"line":146},[40,106586,106587],{"class":94},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[40,106589,106590],{"class":42,"line":154},[40,106591,1413],{"emptyLinePlaceholder":1412},[40,106593,106594],{"class":42,"line":162},[40,106595,106596],{"class":94},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[40,106598,106599],{"class":42,"line":170},[40,106600,106601],{"class":94},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[40,106603,106604],{"class":42,"line":183},[40,106605,106606],{"class":94},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[40,106608,106609],{"class":42,"line":196},[40,106610,106611],{"class":94},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[40,106613,106614],{"class":42,"line":204},[40,106615,104658],{"class":94},[40,106617,106618],{"class":42,"line":217},[40,106619,104663],{"class":94},[40,106621,106622],{"class":42,"line":230},[40,106623,104668],{"class":94},[40,106625,106626],{"class":42,"line":238},[40,106627,98993],{"class":94},[40,106629,106630],{"class":42,"line":251},[40,106631,1413],{"emptyLinePlaceholder":1412},[40,106633,106634],{"class":42,"line":264},[40,106635,1413],{"emptyLinePlaceholder":1412},[40,106637,106638,106640,106642,106644,106646],{"class":42,"line":277},[40,106639,35247],{"class":1283},[40,106641,5299],{"class":596},[40,106643,104689],{"class":50},[40,106645,98981],{"class":63},[40,106647,332],{"class":50},[40,106649,106650,106652,106654,106656,106658],{"class":42,"line":290},[40,106651,104698],{"class":50},[40,106653,1284],{"class":1283},[40,106655,104703],{"class":50},[40,106657,104605],{"class":63},[40,106659,1811],{"class":50},[40,106661,106662,106664,106666],{"class":42,"line":298},[40,106663,104712],{"class":50},[40,106665,1284],{"class":1283},[40,106667,104717],{"class":50},[40,106669,106670],{"class":42,"line":310},[40,106671,1413],{"emptyLinePlaceholder":1412},[40,106673,106674,106677,106679,106682,106685],{"class":42,"line":5086},[40,106675,106676],{"class":50},"    box_body_id ",[40,106678,1284],{"class":1283},[40,106680,106681],{"class":50}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[40,106683,106684],{"class":94},"\"red_box\"",[40,106686,1811],{"class":50},[40,106688,106689,106692,106694,106697,106700],{"class":42,"line":5091},[40,106690,106691],{"class":50},"    site_id ",[40,106693,1284],{"class":1283},[40,106695,106696],{"class":50}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[40,106698,106699],{"class":94},"\"box_center\"",[40,106701,1811],{"class":50},[40,106703,106704],{"class":42,"line":5105},[40,106705,1413],{"emptyLinePlaceholder":1412},[40,106707,106708,106710,106713,106715,106717],{"class":42,"line":5110},[40,106709,6425],{"class":1283},[40,106711,106712],{"class":50}," box_body_id ",[40,106714,4387],{"class":1283},[40,106716,7416],{"class":63},[40,106718,332],{"class":50},[40,106720,106721,106724,106727,106729,106732],{"class":42,"line":5902},[40,106722,106723],{"class":1283},"        raise",[40,106725,106726],{"class":63}," RuntimeError",[40,106728,3488],{"class":50},[40,106730,106731],{"class":94},"\"body red_box not found\"",[40,106733,1811],{"class":50},[40,106735,106736,106738,106741,106743,106745],{"class":42,"line":5916},[40,106737,6425],{"class":1283},[40,106739,106740],{"class":50}," site_id ",[40,106742,4387],{"class":1283},[40,106744,7416],{"class":63},[40,106746,332],{"class":50},[40,106748,106749,106751,106753,106755,106758],{"class":42,"line":5924},[40,106750,106723],{"class":1283},[40,106752,106726],{"class":63},[40,106754,3488],{"class":50},[40,106756,106757],{"class":94},"\"site box_center not found\"",[40,106759,1811],{"class":50},[40,106761,106762],{"class":42,"line":5929},[40,106763,1413],{"emptyLinePlaceholder":1412},[40,106765,106766,106768,106770,106772,106774,106776,106778],{"class":42,"line":5935},[40,106767,6525],{"class":1283},[40,106769,104792],{"class":50},[40,106771,29355],{"class":1283},[40,106773,35743],{"class":63},[40,106775,3488],{"class":50},[40,106777,5053],{"class":63},[40,106779,34086],{"class":50},[40,106781,106782],{"class":42,"line":5941},[40,106783,104807],{"class":50},[40,106785,106786],{"class":42,"line":5946},[40,106787,1413],{"emptyLinePlaceholder":1412},[40,106789,106790,106792,106794,106797],{"class":42,"line":11270},[40,106791,34599],{"class":63},[40,106793,3488],{"class":50},[40,106795,106796],{"class":94},"\"simulation time:\"",[40,106798,104769],{"class":50},[40,106800,106801,106803,106805,106808],{"class":42,"line":11294},[40,106802,34599],{"class":63},[40,106804,3488],{"class":50},[40,106806,106807],{"class":94},"\"box body position:\"",[40,106809,106810],{"class":50},", data.xpos[box_body_id].copy())\n",[40,106812,106813,106815,106817,106820],{"class":42,"line":11299},[40,106814,34599],{"class":63},[40,106816,3488],{"class":50},[40,106818,106819],{"class":94},"\"site position:\"",[40,106821,106822],{"class":50},", data.site_xpos[site_id].copy())\n",[40,106824,106825,106827,106829,106832],{"class":42,"line":11305},[40,106826,34599],{"class":63},[40,106828,3488],{"class":50},[40,106830,106831],{"class":94},"\"box qpos:\"",[40,106833,106834],{"class":50},", np.array(data.qpos))\n",[40,106836,106837],{"class":42,"line":11332},[40,106838,1413],{"emptyLinePlaceholder":1412},[40,106840,106841],{"class":42,"line":11337},[40,106842,1413],{"emptyLinePlaceholder":1412},[40,106844,106845,106847,106849,106851,106853],{"class":42,"line":11343},[40,106846,4873],{"class":1283},[40,106848,34520],{"class":63},[40,106850,104850],{"class":1283},[40,106852,104853],{"class":94},[40,106854,332],{"class":50},[40,106856,106857],{"class":42,"line":11355},[40,106858,104860],{"class":50},[19,106860,106861],{},"保存为：",[31,106863,106865],{"className":27141,"code":106864,"language":27143,"meta":36,"style":36},"touch ch2_xml_basic.py\n",[26,106866,106867],{"__ignoreMap":36},[40,106868,106869,106871],{"class":42,"line":43},[40,106870,3165],{"class":596},[40,106872,106873],{"class":94}," ch2_xml_basic.py\n",[19,106875,105592],{},[31,106877,106879],{"className":27141,"code":106878,"language":27143,"meta":36,"style":36},"python ch2_xml_basic.py\n",[26,106880,106881],{"__ignoreMap":36},[40,106882,106883,106885],{"class":42,"line":43},[40,106884,2323],{"class":596},[40,106886,106873],{"class":94},[402,106888,104863],{"id":104863},[19,106890,106891],{},"用名字查找 body：",[31,106893,106895],{"className":33679,"code":106894,"language":2323,"meta":36,"style":36},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[26,106896,106897],{"__ignoreMap":36},[40,106898,106899,106902,106904,106906,106908],{"class":42,"line":43},[40,106900,106901],{"class":50},"box_body_id ",[40,106903,1284],{"class":1283},[40,106905,106681],{"class":50},[40,106907,106684],{"class":94},[40,106909,1811],{"class":50},[19,106911,106912],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,106914,106915],{},"用名字查找 site：",[31,106917,106919],{"className":33679,"code":106918,"language":2323,"meta":36,"style":36},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[26,106920,106921],{"__ignoreMap":36},[40,106922,106923,106926,106928,106930,106932],{"class":42,"line":43},[40,106924,106925],{"class":50},"site_id ",[40,106927,1284],{"class":1283},[40,106929,106696],{"class":50},[40,106931,106699],{"class":94},[40,106933,1811],{"class":50},[19,106935,106936,106937,106940,106941,106944],{},"注意第二个参数是对象类型。查 body 就用 ",[26,106938,106939],{},"mjOBJ_BODY","，查 site 就用 ",[26,106942,106943],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,106946,106947],{},"读取世界坐标：",[31,106949,106951],{"className":33679,"code":106950,"language":2323,"meta":36,"style":36},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[26,106952,106953,106958],{"__ignoreMap":36},[40,106954,106955],{"class":42,"line":43},[40,106956,106957],{"class":50},"data.xpos[box_body_id]\n",[40,106959,106960],{"class":42,"line":54},[40,106961,106962],{"class":50},"data.site_xpos[site_id]\n",[19,106964,106965,106968,106969,106972],{},[26,106966,106967],{},"xpos"," 是 body 的世界坐标，",[26,106970,106971],{},"site_xpos"," 是 site 的世界坐标。",[402,106974,104999],{"id":104999},[31,106976,106978],{"className":33679,"code":106977,"language":2323,"meta":36,"style":36},"import mujoco\nimport numpy as np\n",[26,106979,106980,106986],{"__ignoreMap":36},[40,106981,106982,106984],{"class":42,"line":43},[40,106983,33692],{"class":1283},[40,106985,104592],{"class":50},[40,106987,106988,106990,106992,106994],{"class":42,"line":54},[40,106989,33692],{"class":1283},[40,106991,34680],{"class":50},[40,106993,34683],{"class":1283},[40,106995,34686],{"class":50},[19,106997,106998,106999,107002,107003,107006,107007,3693,107010,776],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[26,107000,107001],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[26,107004,107005],{},"as np"," 是习惯写法，后面就可以写 ",[26,107008,107009],{},"np.array(...)",[26,107011,107012],{},"np.round(...)",[31,107014,107015],{"className":33679,"code":104886,"language":2323,"meta":36,"style":36},[26,107016,107017,107025,107029],{"__ignoreMap":36},[40,107018,107019,107021,107023],{"class":42,"line":43},[40,107020,104605],{"class":63},[40,107022,16886],{"class":1283},[40,107024,104610],{"class":94},[40,107026,107027],{"class":42,"line":54},[40,107028,104901],{"class":94},[40,107030,107031],{"class":42,"line":70},[40,107032,98993],{"class":94},[19,107034,107035,107036,776],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[26,107037,107038],{},"mujoco.MjModel.from_xml_string(XML)",[31,107040,107042],{"className":56365,"code":107041,"language":56367,"meta":36,"style":36},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[26,107043,107044],{"__ignoreMap":36},[40,107045,107046,107048,107050,107052,107054,107056,107058,107060,107063,107065,107067,107070,107072,107074,107077],{"class":42,"line":43},[40,107047,4387],{"class":50},[40,107049,106501],{"class":46},[40,107051,18242],{"class":596},[40,107053,1284],{"class":50},[40,107055,106699],{"class":94},[40,107057,104400],{"class":596},[40,107059,1284],{"class":50},[40,107061,107062],{"class":94},"\"0 0 0\"",[40,107064,104430],{"class":596},[40,107066,1284],{"class":50},[40,107068,107069],{"class":94},"\"0.03\"",[40,107071,82062],{"class":596},[40,107073,1284],{"class":50},[40,107075,107076],{"class":94},"\"0 1 0 1\"",[40,107078,104438],{"class":50},[19,107080,107081,107083,107084,107087,107088,107090,107091,107094],{},[26,107082,106501],{}," 是标记点。",[26,107085,107086],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[26,107089,106461],{}," 表示显示出来的小球大小。",[26,107092,107093],{},"rgba=\"0 1 0 1\""," 表示绿色。",[31,107096,107097],{"className":33679,"code":106894,"language":2323,"meta":36,"style":36},[26,107098,107099],{"__ignoreMap":36},[40,107100,107101,107103,107105,107107,107109],{"class":42,"line":43},[40,107102,106901],{"class":50},[40,107104,1284],{"class":1283},[40,107106,106681],{"class":50},[40,107108,106684],{"class":94},[40,107110,1811],{"class":50},[19,107112,107113,107114,107116],{},"这行的作用是：根据名字 ",[26,107115,106684],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,107118,107119],{},"拆开看：",[492,107121,107122,107128,107133,107139],{},[495,107123,107124,107127],{},[26,107125,107126],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[495,107129,107130,107132],{},[26,107131,105376],{}," 是被查询的模型。",[495,107134,107135,107138],{},[26,107136,107137],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[495,107140,107141,107143],{},[26,107142,106684],{}," 是 XML 里写的名字。",[31,107145,107146],{"className":33679,"code":106918,"language":2323,"meta":36,"style":36},[26,107147,107148],{"__ignoreMap":36},[40,107149,107150,107152,107154,107156,107158],{"class":42,"line":43},[40,107151,106925],{"class":50},[40,107153,1284],{"class":1283},[40,107155,106696],{"class":50},[40,107157,106699],{"class":94},[40,107159,1811],{"class":50},[19,107161,107162,107163,776],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[26,107164,106699],{},[31,107166,107168],{"className":33679,"code":107167,"language":2323,"meta":36,"style":36},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[26,107169,107170,107182],{"__ignoreMap":36},[40,107171,107172,107174,107176,107178,107180],{"class":42,"line":43},[40,107173,4873],{"class":1283},[40,107175,106712],{"class":50},[40,107177,4387],{"class":1283},[40,107179,7416],{"class":63},[40,107181,332],{"class":50},[40,107183,107184,107187,107189,107191,107193],{"class":42,"line":54},[40,107185,107186],{"class":1283},"    raise",[40,107188,106726],{"class":63},[40,107190,3488],{"class":50},[40,107192,106731],{"class":94},[40,107194,1811],{"class":50},[19,107196,107197,107199,107200,107203,107204,107207,107208,107211],{},[26,107198,4873],{}," 是条件判断。",[26,107201,107202],{},"mj_name2id"," 找不到对象时会返回 ",[26,107205,107206],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[26,107209,107210],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[31,107213,107215],{"className":33679,"code":107214,"language":2323,"meta":36,"style":36},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[26,107216,107217,107233],{"__ignoreMap":36},[40,107218,107219,107221,107223,107225,107227,107229,107231],{"class":42,"line":43},[40,107220,6349],{"class":1283},[40,107222,104792],{"class":50},[40,107224,29355],{"class":1283},[40,107226,35743],{"class":63},[40,107228,3488],{"class":50},[40,107230,5053],{"class":63},[40,107232,34086],{"class":50},[40,107234,107235],{"class":42,"line":54},[40,107236,104990],{"class":50},[19,107238,107239],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[31,107241,107243],{"className":33679,"code":107242,"language":2323,"meta":36,"style":36},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[26,107244,107245],{"__ignoreMap":36},[40,107246,107247,107249,107251,107253],{"class":42,"line":43},[40,107248,33715],{"class":63},[40,107250,3488],{"class":50},[40,107252,106807],{"class":94},[40,107254,106810],{"class":50},[19,107256,107257,107259,107260,107263],{},[26,107258,104373],{}," 保存所有 body 的世界坐标。",[26,107261,107262],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[31,107265,107267],{"className":33679,"code":107266,"language":2323,"meta":36,"style":36},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[26,107268,107269],{"__ignoreMap":36},[40,107270,107271,107273,107275,107277],{"class":42,"line":43},[40,107272,33715],{"class":63},[40,107274,3488],{"class":50},[40,107276,106819],{"class":94},[40,107278,106822],{"class":50},[19,107280,107281,107284,107285,107287],{},[26,107282,107283],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[26,107286,106268],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[31,107289,107291],{"className":33679,"code":107290,"language":2323,"meta":36,"style":36},"print(\"box qpos:\", np.array(data.qpos))\n",[26,107292,107293],{"__ignoreMap":36},[40,107294,107295,107297,107299,107301],{"class":42,"line":43},[40,107296,33715],{"class":63},[40,107298,3488],{"class":50},[40,107300,106831],{"class":94},[40,107302,106834],{"class":50},[19,107304,107305,107306,107309],{},"这里打印广义位置数组。",[26,107307,107308],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,107311,105607],{"id":105606},[19,107313,107314,107315,107318,107319,776],{},"程序会输出 ",[26,107316,107317],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[26,107320,107321],{},"qpos",[19,107323,107324,107326,107327,107330,107331,107334],{},[26,107325,107262],{}," 是 body 的世界坐标位置。",[26,107328,107329],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[26,107332,107333],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,107336,85517,107337,85825,107339,107341],{},[26,107338,106268],{},[26,107340,107086],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,107343,107344],{},"如果你把 site 改成：",[31,107346,107348],{"className":56365,"code":107347,"language":56367,"meta":36,"style":36},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[26,107349,107350],{"__ignoreMap":36},[40,107351,107352,107354,107356,107358,107360,107363,107365,107367,107370,107372,107374,107376,107378,107380,107382],{"class":42,"line":43},[40,107353,4387],{"class":50},[40,107355,106501],{"class":46},[40,107357,18242],{"class":596},[40,107359,1284],{"class":50},[40,107361,107362],{"class":94},"\"box_top\"",[40,107364,104400],{"class":596},[40,107366,1284],{"class":50},[40,107368,107369],{"class":94},"\"0 0 0.15\"",[40,107371,104430],{"class":596},[40,107373,1284],{"class":50},[40,107375,107069],{"class":94},[40,107377,82062],{"class":596},[40,107379,1284],{"class":50},[40,107381,107076],{"class":94},[40,107383,104438],{"class":50},[19,107385,107386,107387,107390],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[26,107388,107389],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,107392,105639],{"id":105638},[492,107394,107395,107404,107407,107414,107420,107431],{},[495,107396,105702,107397,107399,107400,105705,107402,776],{},[26,107398,106272],{}," 的初始高度从 ",[26,107401,3698],{},[26,107403,64],{},[495,107405,107406],{},"重新运行程序。",[495,107408,107409,107410,107413],{},"观察 ",[26,107411,107412],{},"box qpos"," 和最终位置是否变化。",[495,107415,107416,107417,107419],{},"故意把 ",[26,107418,106501],{}," 名称改错，确认程序能报错。",[495,107421,105702,107422,107424,107425,105705,107427,107430],{},[26,107423,104414],{}," 的颜色 ",[26,107426,105323],{},[26,107428,107429],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[495,107432,105702,107433,85825,107435,105705,107438,107441,107442,107444],{},[26,107434,106268],{},[26,107436,107437],{},"pos",[26,107439,107440],{},"0 0 0.2","，观察 ",[26,107443,107389],{}," 如何变化。",[14,107446,105744],{"id":105743},[402,107448,107450],{"id":107449},"xml-error-schema-violation",[26,107451,107452],{},"XML Error: Schema violation",[19,107454,107455],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[402,107457,107459,84585,107461],{"id":107458},"mj_name2id-返回-1",[26,107460,107202],{},[26,107462,107206],{},[19,107464,107465,107466,107469],{},"说明名字没有找到。检查 XML 中 ",[26,107467,107468],{},"name=\"...\"","，并确认对象类型正确。",[402,107471,107472],{"id":107472},"物体不下落",[19,107474,105814],{},[492,107476,107477,107482,107487],{},[495,107478,107479,107480],{},"body 是否有 ",[26,107481,104911],{},[495,107483,107484,107485],{},"gravity 是否为 ",[26,107486,105880],{},[495,107488,107489,107490,107492],{},"body 是否被固定在 ",[26,107491,105132],{}," 中",[402,107494,107495],{"id":107495},"坐标看起来不符合预期",[19,107497,107498],{},"先区分两种坐标：",[3619,107500,107501,107510],{},[3622,107502,107503],{},[3625,107504,107505,107508],{},[3628,107506,107507],{"align":27055},"坐标",[3628,107509,103995],{"align":27055},[3665,107511,107512,107522],{},[3625,107513,107514,107519],{},[3670,107515,107516,107517],{"align":27055},"XML 里的 ",[26,107518,107437],{},[3670,107520,107521],{"align":27055},"相对父 body 的局部坐标",[3625,107523,107524,107530],{},[3670,107525,107526,28293,107528],{"align":27055},[26,107527,104373],{},[26,107529,107283],{},[3670,107531,107532],{"align":27055},"仿真更新后的世界坐标",[19,107534,107535,107536,107538,107539,85834,107542,107544],{},"如果你修改了 ",[26,107537,104364],{},"，但还没调用 ",[26,107540,107541],{},"mj_forward",[26,107543,104509],{},"，世界坐标可能还没有更新。",[14,107546,105898],{"id":105897},[19,107548,107549],{},"MJCF 建模先掌握四件事：",[492,107551,107552,107557,107562,107567],{},[495,107553,107554,107556],{},[26,107555,55098],{}," 表示刚体层级。",[495,107558,107559,107561],{},[26,107560,104414],{}," 表示形状、碰撞和质量。",[495,107563,107564,107566],{},[26,107565,106247],{}," 决定 body 能不能动、怎么动。",[495,107568,107569,107571],{},[26,107570,106501],{}," 用来标记关键点，方便 Python 读取位置。",[19,107573,107574],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[3384,107576,107577],{},"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":36,"searchDepth":54,"depth":54,"links":107579},[107580,107581,107582,107588,107592,107593,107594,107601],{"id":103941,"depth":54,"text":103942},{"id":104064,"depth":54,"text":104065},{"id":104338,"depth":54,"text":104339,"children":107583},[107584,107585,107586,107587],{"id":106251,"depth":70,"text":106251},{"id":106365,"depth":70,"text":106365},{"id":106391,"depth":70,"text":106392},{"id":106495,"depth":70,"text":106496},{"id":104546,"depth":54,"text":104547,"children":107589},[107590,107591],{"id":104863,"depth":70,"text":104863},{"id":104999,"depth":70,"text":104999},{"id":105606,"depth":54,"text":105607},{"id":105638,"depth":54,"text":105639},{"id":105743,"depth":54,"text":105744,"children":107595},[107596,107597,107599,107600],{"id":107449,"depth":70,"text":107452},{"id":107458,"depth":70,"text":107598},"mj_name2id 返回 -1",{"id":107472,"depth":70,"text":107472},{"id":107495,"depth":70,"text":107495},{"id":105897,"depth":54,"text":105898},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":105945,"description":36},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":107608,"title":107609,"body":107610,"description":36,"extension":3414,"meta":109105,"navigation":1412,"path":109106,"seo":109107,"stem":109108,"__hash__":109109},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":107611,"toc":109077},[107612,107615,107617,107620,107623,107661,107664,107670,107673,107675,107677,107704,107706,107720,107722,107763,107765,107789,107791,107794,107803,107812,107815,107824,107832,107841,107844,107854,107857,107909,107916,107922,107930,107978,107981,108000,108003,108011,108015,108024,108057,108059,108407,108409,108421,108423,108434,108436,108439,108460,108466,108469,108494,108504,108507,108515,108518,108521,108542,108553,108555,108575,108578,108599,108608,108627,108633,108658,108661,108675,108682,108706,108709,108717,108726,108742,108754,108762,108771,108773,108776,108800,108805,108808,108830,108832,108871,108873,108880,108882,108890,108893,108896,108908,108949,108956,108967,108974,108977,109026,109029,109032,109038,109040,109045,109071,109074],[10,107613,107609],{"id":107614},"_3python-控制接口读取状态与推进仿真",[14,107616,103942],{"id":103941},[19,107618,107619],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,107621,107622],{},"你将学习:",[492,107624,107625,107630,107635,107639,107644,107655],{},[495,107626,107627],{},[26,107628,107629],{},"MjModel.from_xml_string",[495,107631,107632],{},[26,107633,107634],{},"MjData(model)",[495,107636,107637],{},[26,107638,104509],{},[495,107640,107641],{},[26,107642,107643],{},"mj_resetData",[495,107645,107646,107647,3693,107649,3693,107652],{},"读取 ",[26,107648,107321],{},[26,107650,107651],{},"qvel",[26,107653,107654],{},"ctrl",[495,107656,107657,107658],{},"使用 ",[26,107659,107660],{},"model.opt.timestep",[19,107662,107663],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[31,107665,107668],{"className":107666,"code":107667,"language":8510,"meta":36},[8508],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[26,107669,107667],{"__ignoreMap":36},[19,107671,107672],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,107674,104065],{"id":104064},[19,107676,104068],{},[31,107678,107680],{"className":27141,"code":107679,"language":27143,"meta":36,"style":36},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[26,107681,107682],{"__ignoreMap":36},[40,107683,107684,107686,107688,107690,107692,107695,107697,107699,107701],{"class":42,"line":43},[40,107685,923],{"class":596},[40,107687,29625],{"class":94},[40,107689,929],{"class":94},[40,107691,29710],{"class":63},[40,107693,107694],{"class":94}," python3",[40,107696,104093],{"class":94},[40,107698,105792],{"class":94},[40,107700,104109],{"class":94},[40,107702,107703],{"class":94}," glfw\n",[19,107705,106110],{},[31,107707,107708],{"className":27141,"code":104213,"language":27143,"meta":36,"style":36},[26,107709,107710],{"__ignoreMap":36},[40,107711,107712,107714,107716,107718],{"class":42,"line":43},[40,107713,27150],{"class":596},[40,107715,929],{"class":94},[40,107717,104224],{"class":94},[40,107719,104227],{"class":94},[19,107721,106127],{},[31,107723,107725],{"className":27141,"code":107724,"language":27143,"meta":36,"style":36},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[26,107726,107727,107744,107753],{"__ignoreMap":36},[40,107728,107729,107731,107733,107735,107738,107740,107742],{"class":42,"line":43},[40,107730,33631],{"class":596},[40,107732,32479],{"class":94},[40,107734,1805],{"class":63},[40,107736,107737],{"class":94}," mujoco-python-api",[40,107739,104269],{"class":94},[40,107741,104272],{"class":63},[40,107743,104275],{"class":63},[40,107745,107746,107748,107750],{"class":42,"line":54},[40,107747,33631],{"class":596},[40,107749,104282],{"class":94},[40,107751,107752],{"class":94}," mujoco-python-api\n",[40,107754,107755,107757,107759,107761],{"class":42,"line":70},[40,107756,27150],{"class":596},[40,107758,929],{"class":94},[40,107760,104224],{"class":94},[40,107762,104227],{"class":94},[19,107764,104298],{},[492,107766,107767,107774,107783],{},[495,107768,107769,104312,107771,107773],{},[26,107770,103970],{},[26,107772,103975],{}," 是官方 Python bindings 的类名。",[495,107775,107776,107777,107780,107781,776],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[26,107778,107779],{},"mjModel"," 在 Python 中是 ",[26,107782,104004],{},[495,107784,107785,107786,776],{},"不要使用 ",[26,107787,107788],{},"sim = mujoco_py.MjSim(...)",[14,107790,104339],{"id":104338},[19,107792,107793],{},"仿真推进核心代码:",[31,107795,107797],{"className":33679,"code":107796,"language":2323,"meta":36,"style":36},"mujoco.mj_step(model, data)\n",[26,107798,107799],{"__ignoreMap":36},[40,107800,107801],{"class":42,"line":43},[40,107802,107796],{"class":50},[19,107804,107805,107806,3693,107808,3693,107810,776],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[26,107807,104364],{},[26,107809,104367],{},[26,107811,104361],{},[19,107813,107814],{},"重置仿真:",[31,107816,107818],{"className":33679,"code":107817,"language":2323,"meta":36,"style":36},"mujoco.mj_resetData(model, data)\n",[26,107819,107820],{"__ignoreMap":36},[40,107821,107822],{"class":42,"line":43},[40,107823,107817],{"class":50},[19,107825,107826,107827,85834,107829,107831],{},"如果手动修改了 ",[26,107828,104364],{},[26,107830,104367],{},"，通常应调用:",[31,107833,107835],{"className":33679,"code":107834,"language":2323,"meta":36,"style":36},"mujoco.mj_forward(model, data)\n",[26,107836,107837],{"__ignoreMap":36},[40,107838,107839],{"class":42,"line":43},[40,107840,107834],{"class":50},[19,107842,107843],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[402,107845,107847,3693,107849,3693,107851,107853],{"id":107846},"qposqvelctrl-是什么",[26,107848,107321],{},[26,107850,107651],{},[26,107852,107654],{}," 是什么",[19,107855,107856],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[3619,107858,107859,107871],{},[3622,107860,107861],{},[3625,107862,107863,107866,107868],{},[3628,107864,107865],{"align":27055},"字段",[3628,107867,103995],{"align":27055},[3628,107869,107870],{"align":27055},"谁来修改",[3665,107872,107873,107885,107897],{},[3625,107874,107875,107879,107882],{},[3670,107876,107877],{"align":27055},[26,107878,104364],{},[3670,107880,107881],{"align":27055},"广义位置，例如小车位置、关节角、自由物体位置姿态",[3670,107883,107884],{"align":27055},"MuJoCo 更新，也可以手动设置初始状态",[3625,107886,107887,107891,107894],{},[3670,107888,107889],{"align":27055},[26,107890,104367],{},[3670,107892,107893],{"align":27055},"广义速度，例如小车速度、关节角速度",[3670,107895,107896],{"align":27055},"MuJoCo 更新，也可以手动清零",[3625,107898,107899,107903,107906],{},[3670,107900,107901],{"align":27055},[26,107902,104370],{},[3670,107904,107905],{"align":27055},"actuator 的控制输入",[3670,107907,107908],{"align":27055},"主要由你的控制代码写入",[19,107910,12347,107911,104312,107913,107915],{},[26,107912,107321],{},[26,107914,107651],{}," 不一定同维。自由刚体就是典型例子：",[31,107917,107920],{"className":107918,"code":107919,"language":8510,"meta":36},[8508],"freejoint: qpos 7 维，qvel 6 维\n",[26,107921,107919],{"__ignoreMap":36},[402,107923,107925,104312,107927,107929],{"id":107924},"mj_step-和-mj_forward-的区别",[26,107926,104509],{},[26,107928,107541],{}," 的区别",[3619,107931,107932,107945],{},[3622,107933,107934],{},[3625,107935,107936,107939,107942],{},[3628,107937,107938],{"align":27055},"函数",[3628,107940,107941],{"align":27055},"是否推进时间",[3628,107943,107944],{"align":27055},"什么时候用",[3665,107946,107947,107960],{},[3625,107948,107949,107954,107957],{},[3670,107950,107951],{"align":27055},[26,107952,107953],{},"mj_step(model, data)",[3670,107955,107956],{"align":27055},"是",[3670,107958,107959],{"align":27055},"正常仿真循环，每调用一次前进一步",[3625,107961,107962,107967,107970],{},[3670,107963,107964],{"align":27055},[26,107965,107966],{},"mj_forward(model, data)",[3670,107968,107969],{"align":27055},"否",[3670,107971,107972,107973,3693,107975,107977],{"align":27055},"手动改了 ",[26,107974,107321],{},[26,107976,107651],{}," 后，刷新派生量",[19,107979,107980],{},"例如你写：",[31,107982,107984],{"className":33679,"code":107983,"language":2323,"meta":36,"style":36},"data.qpos[2] = 2.0\n",[26,107985,107986],{"__ignoreMap":36},[40,107987,107988,107991,107993,107995,107997],{"class":42,"line":43},[40,107989,107990],{"class":50},"data.qpos[",[40,107992,64],{"class":63},[40,107994,7766],{"class":50},[40,107996,1284],{"class":1283},[40,107998,107999],{"class":63}," 2.0\n",[19,108001,108002],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[31,108004,108005],{"className":33679,"code":107834,"language":2323,"meta":36,"style":36},[26,108006,108007],{"__ignoreMap":36},[40,108008,108009],{"class":42,"line":43},[40,108010,107834],{"class":50},[402,108012,108014],{"id":108013},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,108016,108017,108020,108021,108023],{},[26,108018,108019],{},"mujoco.mj_resetData(model, data)"," 会把 ",[26,108022,36701],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[31,108025,108027],{"className":33679,"code":108026,"language":2323,"meta":36,"style":36},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[26,108028,108029,108033,108043,108053],{"__ignoreMap":36},[40,108030,108031],{"class":42,"line":43},[40,108032,107817],{"class":50},[40,108034,108035,108038,108040],{"class":42,"line":54},[40,108036,108037],{"class":50},"data.qpos[:] ",[40,108039,1284],{"class":1283},[40,108041,108042],{"class":50}," random_qpos\n",[40,108044,108045,108048,108050],{"class":42,"line":70},[40,108046,108047],{"class":50},"data.qvel[:] ",[40,108049,1284],{"class":1283},[40,108051,108052],{"class":63}," 0.0\n",[40,108054,108055],{"class":42,"line":78},[40,108056,107834],{"class":50},[14,108058,104547],{"id":104546},[31,108060,108062],{"className":33679,"code":108061,"language":2323,"meta":36,"style":36},"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",[26,108063,108064,108070,108080,108084,108088,108096,108101,108105,108109,108113,108118,108122,108127,108132,108137,108141,108145,108149,108153,108157,108161,108180,108187,108199,108210,108226,108242,108246,108250,108262,108274,108282,108286,108297,108301,108317,108321,108325,108334,108338,108343,108352,108356,108369,108374,108383,108387,108391,108403],{"__ignoreMap":36},[40,108065,108066,108068],{"class":42,"line":43},[40,108067,33692],{"class":1283},[40,108069,104592],{"class":50},[40,108071,108072,108074,108076,108078],{"class":42,"line":54},[40,108073,33692],{"class":1283},[40,108075,34680],{"class":50},[40,108077,34683],{"class":1283},[40,108079,34686],{"class":50},[40,108081,108082],{"class":42,"line":70},[40,108083,1413],{"emptyLinePlaceholder":1412},[40,108085,108086],{"class":42,"line":78},[40,108087,1413],{"emptyLinePlaceholder":1412},[40,108089,108090,108092,108094],{"class":42,"line":86},[40,108091,104605],{"class":63},[40,108093,16886],{"class":1283},[40,108095,104610],{"class":94},[40,108097,108098],{"class":42,"line":100},[40,108099,108100],{"class":94},"\u003Cmujoco model=\"state_api\">\n",[40,108102,108103],{"class":42,"line":108},[40,108104,104620],{"class":94},[40,108106,108107],{"class":42,"line":121},[40,108108,1413],{"emptyLinePlaceholder":1412},[40,108110,108111],{"class":42,"line":134},[40,108112,104629],{"class":94},[40,108114,108115],{"class":42,"line":146},[40,108116,108117],{"class":94},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[40,108119,108120],{"class":42,"line":154},[40,108121,1413],{"emptyLinePlaceholder":1412},[40,108123,108124],{"class":42,"line":162},[40,108125,108126],{"class":94},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[40,108128,108129],{"class":42,"line":170},[40,108130,108131],{"class":94},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[40,108133,108134],{"class":42,"line":183},[40,108135,108136],{"class":94},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[40,108138,108139],{"class":42,"line":196},[40,108140,104658],{"class":94},[40,108142,108143],{"class":42,"line":204},[40,108144,104663],{"class":94},[40,108146,108147],{"class":42,"line":217},[40,108148,104668],{"class":94},[40,108150,108151],{"class":42,"line":230},[40,108152,98993],{"class":94},[40,108154,108155],{"class":42,"line":238},[40,108156,1413],{"emptyLinePlaceholder":1412},[40,108158,108159],{"class":42,"line":251},[40,108160,1413],{"emptyLinePlaceholder":1412},[40,108162,108163,108165,108168,108171,108173,108176,108178],{"class":42,"line":264},[40,108164,35247],{"class":1283},[40,108166,108167],{"class":596}," print_state",[40,108169,108170],{"class":50},"(prefix: ",[40,108172,4646],{"class":63},[40,108174,108175],{"class":50},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[40,108177,98981],{"class":63},[40,108179,332],{"class":50},[40,108181,108182,108184],{"class":42,"line":277},[40,108183,34599],{"class":63},[40,108185,108186],{"class":50},"(prefix)\n",[40,108188,108189,108191,108193,108196],{"class":42,"line":290},[40,108190,34599],{"class":63},[40,108192,3488],{"class":50},[40,108194,108195],{"class":94},"\"  timestep:\"",[40,108197,108198],{"class":50},", model.opt.timestep)\n",[40,108200,108201,108203,108205,108208],{"class":42,"line":298},[40,108202,34599],{"class":63},[40,108204,3488],{"class":50},[40,108206,108207],{"class":94},"\"  time:\"",[40,108209,104769],{"class":50},[40,108211,108212,108214,108216,108219,108222,108224],{"class":42,"line":310},[40,108213,34599],{"class":63},[40,108215,3488],{"class":50},[40,108217,108218],{"class":94},"\"  qpos:\"",[40,108220,108221],{"class":50},", np.round(data.qpos.copy(), ",[40,108223,3773],{"class":63},[40,108225,33797],{"class":50},[40,108227,108228,108230,108232,108235,108238,108240],{"class":42,"line":5086},[40,108229,34599],{"class":63},[40,108231,3488],{"class":50},[40,108233,108234],{"class":94},"\"  qvel:\"",[40,108236,108237],{"class":50},", np.round(data.qvel.copy(), ",[40,108239,3773],{"class":63},[40,108241,33797],{"class":50},[40,108243,108244],{"class":42,"line":5091},[40,108245,1413],{"emptyLinePlaceholder":1412},[40,108247,108248],{"class":42,"line":5105},[40,108249,1413],{"emptyLinePlaceholder":1412},[40,108251,108252,108254,108256,108258,108260],{"class":42,"line":5110},[40,108253,35247],{"class":1283},[40,108255,5299],{"class":596},[40,108257,104689],{"class":50},[40,108259,98981],{"class":63},[40,108261,332],{"class":50},[40,108263,108264,108266,108268,108270,108272],{"class":42,"line":5902},[40,108265,104698],{"class":50},[40,108267,1284],{"class":1283},[40,108269,104703],{"class":50},[40,108271,104605],{"class":63},[40,108273,1811],{"class":50},[40,108275,108276,108278,108280],{"class":42,"line":5916},[40,108277,104712],{"class":50},[40,108279,1284],{"class":1283},[40,108281,104717],{"class":50},[40,108283,108284],{"class":42,"line":5924},[40,108285,1413],{"emptyLinePlaceholder":1412},[40,108287,108288,108291,108294],{"class":42,"line":5929},[40,108289,108290],{"class":50},"    print_state(",[40,108292,108293],{"class":94},"\"initial\"",[40,108295,108296],{"class":50},", model, data)\n",[40,108298,108299],{"class":42,"line":5935},[40,108300,1413],{"emptyLinePlaceholder":1412},[40,108302,108303,108305,108307,108309,108311,108313,108315],{"class":42,"line":5941},[40,108304,6525],{"class":1283},[40,108306,104792],{"class":50},[40,108308,29355],{"class":1283},[40,108310,35743],{"class":63},[40,108312,3488],{"class":50},[40,108314,4134],{"class":63},[40,108316,34086],{"class":50},[40,108318,108319],{"class":42,"line":5946},[40,108320,104807],{"class":50},[40,108322,108323],{"class":42,"line":11270},[40,108324,1413],{"emptyLinePlaceholder":1412},[40,108326,108327,108329,108332],{"class":42,"line":11294},[40,108328,108290],{"class":50},[40,108330,108331],{"class":94},"\"after 50 steps\"",[40,108333,108296],{"class":50},[40,108335,108336],{"class":42,"line":11299},[40,108337,1413],{"emptyLinePlaceholder":1412},[40,108339,108340],{"class":42,"line":11305},[40,108341,108342],{"class":50},"    mujoco.mj_resetData(model, data)\n",[40,108344,108345,108347,108350],{"class":42,"line":11332},[40,108346,108290],{"class":50},[40,108348,108349],{"class":94},"\"after reset\"",[40,108351,108296],{"class":50},[40,108353,108354],{"class":42,"line":11337},[40,108355,1413],{"emptyLinePlaceholder":1412},[40,108357,108358,108361,108363,108365,108367],{"class":42,"line":11343},[40,108359,108360],{"class":50},"    data.qpos[",[40,108362,64],{"class":63},[40,108364,7766],{"class":50},[40,108366,1284],{"class":1283},[40,108368,107999],{"class":63},[40,108370,108371],{"class":42,"line":11355},[40,108372,108373],{"class":50},"    mujoco.mj_forward(model, data)\n",[40,108375,108376,108378,108381],{"class":42,"line":11367},[40,108377,108290],{"class":50},[40,108379,108380],{"class":94},"\"after manual qpos edit\"",[40,108382,108296],{"class":50},[40,108384,108385],{"class":42,"line":11379},[40,108386,1413],{"emptyLinePlaceholder":1412},[40,108388,108389],{"class":42,"line":13038},[40,108390,1413],{"emptyLinePlaceholder":1412},[40,108392,108393,108395,108397,108399,108401],{"class":42,"line":13063},[40,108394,4873],{"class":1283},[40,108396,34520],{"class":63},[40,108398,104850],{"class":1283},[40,108400,104853],{"class":94},[40,108402,332],{"class":50},[40,108404,108405],{"class":42,"line":13086},[40,108406,104860],{"class":50},[19,108408,106861],{},[31,108410,108412],{"className":27141,"code":108411,"language":27143,"meta":36,"style":36},"touch ch3_python_state.py\n",[26,108413,108414],{"__ignoreMap":36},[40,108415,108416,108418],{"class":42,"line":43},[40,108417,3165],{"class":596},[40,108419,108420],{"class":94}," ch3_python_state.py\n",[19,108422,105592],{},[31,108424,108426],{"className":27141,"code":108425,"language":27143,"meta":36,"style":36},"python ch3_python_state.py\n",[26,108427,108428],{"__ignoreMap":36},[40,108429,108430,108432],{"class":42,"line":43},[40,108431,2323],{"class":596},[40,108433,108420],{"class":94},[402,108435,104863],{"id":104863},[19,108437,108438],{},"打印状态的函数：",[31,108440,108442],{"className":33679,"code":108441,"language":2323,"meta":36,"style":36},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[26,108443,108444],{"__ignoreMap":36},[40,108445,108446,108448,108450,108452,108454,108456,108458],{"class":42,"line":43},[40,108447,35247],{"class":1283},[40,108449,108167],{"class":596},[40,108451,108170],{"class":50},[40,108453,4646],{"class":63},[40,108455,108175],{"class":50},[40,108457,98981],{"class":63},[40,108459,332],{"class":50},[19,108461,108462,108463,108465],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[26,108464,36701],{}," 里发生了什么。",[19,108467,108468],{},"推进 50 步：",[31,108470,108472],{"className":33679,"code":108471,"language":2323,"meta":36,"style":36},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[26,108473,108474,108490],{"__ignoreMap":36},[40,108475,108476,108478,108480,108482,108484,108486,108488],{"class":42,"line":43},[40,108477,6349],{"class":1283},[40,108479,104792],{"class":50},[40,108481,29355],{"class":1283},[40,108483,35743],{"class":63},[40,108485,3488],{"class":50},[40,108487,4134],{"class":63},[40,108489,34086],{"class":50},[40,108491,108492],{"class":42,"line":54},[40,108493,104990],{"class":50},[19,108495,108496,108497,108500,108501,108503],{},"由于 ",[26,108498,108499],{},"timestep=0.01","，所以 50 步后时间约为 ",[26,108502,38629],{}," 秒。",[19,108505,108506],{},"重置：",[31,108508,108509],{"className":33679,"code":107817,"language":2323,"meta":36,"style":36},[26,108510,108511],{"__ignoreMap":36},[40,108512,108513],{"class":42,"line":43},[40,108514,107817],{"class":50},[19,108516,108517],{},"这会把时间、位置、速度恢复到初始状态。",[19,108519,108520],{},"手动改高度：",[31,108522,108524],{"className":33679,"code":108523,"language":2323,"meta":36,"style":36},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[26,108525,108526,108538],{"__ignoreMap":36},[40,108527,108528,108530,108532,108534,108536],{"class":42,"line":43},[40,108529,107990],{"class":50},[40,108531,64],{"class":63},[40,108533,7766],{"class":50},[40,108535,1284],{"class":1283},[40,108537,107999],{"class":63},[40,108539,108540],{"class":42,"line":54},[40,108541,107834],{"class":50},[19,108543,108544,108545,108548,108549,108552],{},"这个例子里 ",[26,108546,108547],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[26,108550,108551],{},"2.0"," 表示把小球放到更高的位置。",[402,108554,104999],{"id":104999},[31,108556,108557],{"className":33679,"code":108441,"language":2323,"meta":36,"style":36},[26,108558,108559],{"__ignoreMap":36},[40,108560,108561,108563,108565,108567,108569,108571,108573],{"class":42,"line":43},[40,108562,35247],{"class":1283},[40,108564,108167],{"class":596},[40,108566,108170],{"class":50},[40,108568,4646],{"class":63},[40,108570,108175],{"class":50},[40,108572,98981],{"class":63},[40,108574,332],{"class":50},[19,108576,108577],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[492,108579,108580,108589,108594],{},[495,108581,108582,108585,108586,108588],{},[26,108583,108584],{},"prefix","：一段文字，比如 ",[26,108587,108293],{},"，用来说明现在打印的是哪个阶段。",[495,108590,108591,108593],{},[26,108592,105376],{},"：MuJoCo 模型。",[495,108595,108596,108598],{},[26,108597,36701],{},"：MuJoCo 当前状态。",[19,108600,108601,3693,108604,108607],{},[26,108602,108603],{},"prefix: str",[26,108605,108606],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[31,108609,108611],{"className":33679,"code":108610,"language":2323,"meta":36,"style":36},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[26,108612,108613],{"__ignoreMap":36},[40,108614,108615,108617,108619,108621,108623,108625],{"class":42,"line":43},[40,108616,33715],{"class":63},[40,108618,3488],{"class":50},[40,108620,108218],{"class":94},[40,108622,108221],{"class":50},[40,108624,3773],{"class":63},[40,108626,33797],{"class":50},[19,108628,108629,108632],{},[26,108630,108631],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[31,108634,108636],{"className":33679,"code":108635,"language":2323,"meta":36,"style":36},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[26,108637,108638,108650],{"__ignoreMap":36},[40,108639,108640,108642,108644,108646,108648],{"class":42,"line":43},[40,108641,104925],{"class":50},[40,108643,1284],{"class":1283},[40,108645,104703],{"class":50},[40,108647,104605],{"class":63},[40,108649,1811],{"class":50},[40,108651,108652,108654,108656],{"class":42,"line":54},[40,108653,104949],{"class":50},[40,108655,1284],{"class":1283},[40,108657,104717],{"class":50},[19,108659,108660],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[31,108662,108664],{"className":33679,"code":108663,"language":2323,"meta":36,"style":36},"print_state(\"initial\", model, data)\n",[26,108665,108666],{"__ignoreMap":36},[40,108667,108668,108671,108673],{"class":42,"line":43},[40,108669,108670],{"class":50},"print_state(",[40,108672,108293],{"class":94},[40,108674,108296],{"class":50},[19,108676,108677,108678,108681],{},"调用刚才定义的 ",[26,108679,108680],{},"print_state"," 函数，打印初始状态。",[31,108683,108684],{"className":33679,"code":108471,"language":2323,"meta":36,"style":36},[26,108685,108686,108702],{"__ignoreMap":36},[40,108687,108688,108690,108692,108694,108696,108698,108700],{"class":42,"line":43},[40,108689,6349],{"class":1283},[40,108691,104792],{"class":50},[40,108693,29355],{"class":1283},[40,108695,35743],{"class":63},[40,108697,3488],{"class":50},[40,108699,4134],{"class":63},[40,108701,34086],{"class":50},[40,108703,108704],{"class":42,"line":54},[40,108705,104990],{"class":50},[19,108707,108708],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[31,108710,108711],{"className":33679,"code":107817,"language":2323,"meta":36,"style":36},[26,108712,108713],{"__ignoreMap":36},[40,108714,108715],{"class":42,"line":43},[40,108716,107817],{"class":50},[19,108718,108719,108720,108722,108723,108725],{},"重置 ",[26,108721,36701],{},"。注意它不会重新创建 ",[26,108724,105376],{},"，因为模型结构没有变，只是状态回到初始值。",[31,108727,108728],{"className":33679,"code":107983,"language":2323,"meta":36,"style":36},[26,108729,108730],{"__ignoreMap":36},[40,108731,108732,108734,108736,108738,108740],{"class":42,"line":43},[40,108733,107990],{"class":50},[40,108735,64],{"class":63},[40,108737,7766],{"class":50},[40,108739,1284],{"class":1283},[40,108741,107999],{"class":63},[19,108743,108744,108745,3693,108748,3693,108751,108753],{},"这行是“手动改状态”。在 freejoint 中，",[26,108746,108747],{},"qpos[0]",[26,108749,108750],{},"qpos[1]",[26,108752,108547],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[31,108755,108756],{"className":33679,"code":107834,"language":2323,"meta":36,"style":36},[26,108757,108758],{"__ignoreMap":36},[40,108759,108760],{"class":42,"line":43},[40,108761,107834],{"class":50},[19,108763,108764,108765,108767,108768,108770],{},"手动改完 ",[26,108766,107321],{}," 后，调用 ",[26,108769,107541],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,108772,105607],{"id":105606},[19,108774,108775],{},"你会看到:",[492,108777,108778,108783,108788,108791],{},[495,108779,108780,108781],{},"初始时间为 ",[26,108782,3672],{},[495,108784,108785,108786],{},"50 步后时间约为 ",[26,108787,38629],{},[495,108789,108790],{},"reset 后状态恢复",[495,108792,108793,108794,108797,108798],{},"手动修改 ",[26,108795,108796],{},"data.qpos[2]"," 后，小球高度变为 ",[26,108799,108551],{},[19,108801,108802,108804],{},[26,108803,108547],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,108806,108807],{},"输出里可以重点看三件事：",[492,108809,108810,108818,108823],{},[495,108811,108812,108814,108815,108817],{},[26,108813,5713],{}," 是否随着 ",[26,108816,104509],{}," 增加。",[495,108819,108820,108822],{},[26,108821,107321],{}," 的 z 坐标是否因为下落而变化。",[495,108824,108825,108827,108828,776],{},[26,108826,107643],{}," 后时间是否回到 ",[26,108829,3672],{},[14,108831,105639],{"id":105638},[492,108833,108834,108840,108846,108852,108855,108864],{},[495,108835,108836,108837,776],{},"修改 timestep 为 ",[26,108838,108839],{},"0.005",[495,108841,108842,108843,776],{},"重新运行，检查 50 步后时间是否约为 ",[26,108844,108845],{},"0.25",[495,108847,108848,108849,776],{},"修改重力为 ",[26,108850,108851],{},"0 0 -1.0",[495,108853,108854],{},"观察小球下降速度是否变慢。",[495,108856,105702,108857,105705,108860,108863],{},[26,108858,108859],{},"data.qpos[2] = 2.0",[26,108861,108862],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[495,108865,108866,108867,108870],{},"注释掉 ",[26,108868,108869],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,108872,105744],{"id":105743},[402,108874,108876,108877,108879],{"id":108875},"修改-dataqpos-后位置没有更新","修改 ",[26,108878,104364],{}," 后位置没有更新",[19,108881,105753],{},[31,108883,108884],{"className":33679,"code":107834,"language":2323,"meta":36,"style":36},[26,108885,108886],{"__ignoreMap":36},[40,108887,108888],{"class":42,"line":43},[40,108889,107834],{"class":50},[402,108891,108892],{"id":108892},"数组维度看不懂",[19,108894,108895],{},"打印模型维度:",[31,108897,108899],{"className":33679,"code":108898,"language":2323,"meta":36,"style":36},"print(model.nq, model.nv, model.nu)\n",[26,108900,108901],{"__ignoreMap":36},[40,108902,108903,108905],{"class":42,"line":43},[40,108904,33715],{"class":63},[40,108906,108907],{"class":50},"(model.nq, model.nv, model.nu)\n",[3619,108909,108910,108918],{},[3622,108911,108912],{},[3625,108913,108914,108916],{},[3628,108915,107865],{"align":27055},[3628,108917,103995],{"align":27055},[3665,108919,108920,108930,108940],{},[3625,108921,108922,108927],{},[3670,108923,108924],{"align":27055},[26,108925,108926],{},"nq",[3670,108928,108929],{"align":27055},"位置变量数量",[3625,108931,108932,108937],{},[3670,108933,108934],{"align":27055},[26,108935,108936],{},"nv",[3670,108938,108939],{"align":27055},"速度变量数量",[3625,108941,108942,108946],{},[3670,108943,108944],{"align":27055},[26,108945,105453],{},[3670,108947,108948],{"align":27055},"控制输入数量",[402,108950,108952,108953,108955],{"id":108951},"误以为-qpos-一定等于关节数","误以为 ",[26,108954,107321],{}," 一定等于关节数",[19,108957,108958,108959,85825,108961,108963,108964,108966],{},"不是。例如 ",[26,108960,104911],{},[26,108962,107321],{}," 是 7 维，但 ",[26,108965,107651],{}," 是 6 维。",[402,108968,108970,108971,108973],{"id":108969},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[26,108972,107321],{}," 的第几位",[19,108975,108976],{},"初学时可以先打印：",[31,108978,108980],{"className":33679,"code":108979,"language":2323,"meta":36,"style":36},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[26,108981,108982,108992,109002,109014],{"__ignoreMap":36},[40,108983,108984,108986,108988,108990],{"class":42,"line":43},[40,108985,33715],{"class":63},[40,108987,3488],{"class":50},[40,108989,104730],{"class":94},[40,108991,104733],{"class":50},[40,108993,108994,108996,108998,109000],{"class":42,"line":54},[40,108995,33715],{"class":63},[40,108997,3488],{"class":50},[40,108999,104742],{"class":94},[40,109001,104745],{"class":50},[40,109003,109004,109006,109008,109011],{"class":42,"line":70},[40,109005,33715],{"class":63},[40,109007,3488],{"class":50},[40,109009,109010],{"class":94},"\"qpos:\"",[40,109012,109013],{"class":50},", data.qpos)\n",[40,109015,109016,109018,109020,109023],{"class":42,"line":78},[40,109017,33715],{"class":63},[40,109019,3488],{"class":50},[40,109021,109022],{"class":94},"\"qvel:\"",[40,109024,109025],{"class":50},", data.qvel)\n",[19,109027,109028],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[402,109030,109031],{"id":109031},"仿真结果每次都一样",[19,109033,109034,109035,109037],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[26,109036,107321],{},"、目标点或控制输入。",[14,109039,105898],{"id":105897},[19,109041,109042,109043,27933],{},"Python 控制 MuJoCo 的核心就是读写 ",[26,109044,36701],{},[492,109046,109047,109055,109060,109065],{},[495,109048,109049,109050,104312,109052,109054],{},"用 ",[26,109051,104364],{},[26,109053,104367],{}," 读取状态。",[495,109056,109049,109057,109059],{},[26,109058,104370],{}," 写入控制。",[495,109061,109049,109062,109064],{},[26,109063,104509],{}," 推进时间。",[495,109066,109067,109068,109070],{},"手动改状态后用 ",[26,109069,107541],{}," 刷新派生量。",[19,109072,109073],{},"理解这一章后，就可以进入关节和 actuator 控制。",[3384,109075,109076],{},"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":36,"searchDepth":54,"depth":54,"links":109078},[109079,109080,109081,109088,109092,109093,109094,109104],{"id":103941,"depth":54,"text":103942},{"id":104064,"depth":54,"text":104065},{"id":104338,"depth":54,"text":104339,"children":109082},[109083,109085,109087],{"id":107846,"depth":70,"text":109084},"qpos、qvel、ctrl 是什么",{"id":107924,"depth":70,"text":109086},"mj_step 和 mj_forward 的区别",{"id":108013,"depth":70,"text":108014},{"id":104546,"depth":54,"text":104547,"children":109089},[109090,109091],{"id":104863,"depth":70,"text":104863},{"id":104999,"depth":70,"text":104999},{"id":105606,"depth":54,"text":105607},{"id":105638,"depth":54,"text":105639},{"id":105743,"depth":54,"text":105744,"children":109095},[109096,109098,109099,109101,109103],{"id":108875,"depth":70,"text":109097},"修改 data.qpos 后位置没有更新",{"id":108892,"depth":70,"text":108892},{"id":108951,"depth":70,"text":109100},"误以为 qpos 一定等于关节数",{"id":108969,"depth":70,"text":109102},"不知道某个元素在 qpos 的第几位",{"id":109031,"depth":70,"text":109031},{"id":105897,"depth":54,"text":105898},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":107609,"description":36},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":109111,"title":109112,"body":109113,"description":36,"extension":3414,"meta":110803,"navigation":1412,"path":110804,"seo":110805,"stem":110806,"__hash__":110807},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":109114,"toc":110779},[109115,109118,109120,109123,109125,109150,109153,109172,109175,109177,109179,109203,109205,109219,109221,109262,109264,109288,109290,109293,109327,109329,109342,109345,109413,109422,109426,109429,109463,109469,109472,109476,109515,109518,109538,109542,109585,109587,109616,109619,109625,109628,109630,110024,110026,110038,110040,110051,110053,110056,110085,110093,110096,110131,110134,110136,110144,110147,110149,110160,110170,110190,110193,110229,110241,110289,110308,110350,110363,110391,110396,110417,110427,110445,110448,110482,110485,110505,110508,110527,110533,110535,110538,110544,110550,110560,110563,110569,110578,110580,110626,110628,110634,110640,110643,110646,110666,110669,110675,110681,110683,110706,110709,110712,110721,110724,110762,110764,110767,110773,110776],[10,109116,109112],{"id":109117},"_4关节actuator-与力控制",[14,109119,103942],{"id":103941},[19,109121,109122],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,109124,107622],{},[492,109126,109127,109133,109138,109142,109147],{},[495,109128,109129,109132],{},[26,109130,109131],{},"hinge"," 关节",[495,109134,109135],{},[26,109136,109137],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[495,109139,109140],{},[26,109141,104370],{},[495,109143,109144],{},[26,109145,109146],{},"ctrlrange",[495,109148,109149],{},"读取关节角和角速度",[19,109151,109152],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[31,109154,109156],{"className":33679,"code":109155,"language":2323,"meta":36,"style":36},"data.ctrl[0] = ...\n",[26,109157,109158],{"__ignoreMap":36},[40,109159,109160,109163,109165,109167,109169],{"class":42,"line":43},[40,109161,109162],{"class":50},"data.ctrl[",[40,109164,3672],{"class":63},[40,109166,7766],{"class":50},[40,109168,1284],{"class":1283},[40,109170,109171],{"class":63}," ...\n",[19,109173,109174],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,109176,104065],{"id":104064},[19,109178,104068],{},[31,109180,109181],{"className":27141,"code":107679,"language":27143,"meta":36,"style":36},[26,109182,109183],{"__ignoreMap":36},[40,109184,109185,109187,109189,109191,109193,109195,109197,109199,109201],{"class":42,"line":43},[40,109186,923],{"class":596},[40,109188,29625],{"class":94},[40,109190,929],{"class":94},[40,109192,29710],{"class":63},[40,109194,107694],{"class":94},[40,109196,104093],{"class":94},[40,109198,105792],{"class":94},[40,109200,104109],{"class":94},[40,109202,107703],{"class":94},[19,109204,106110],{},[31,109206,109207],{"className":27141,"code":104213,"language":27143,"meta":36,"style":36},[26,109208,109209],{"__ignoreMap":36},[40,109210,109211,109213,109215,109217],{"class":42,"line":43},[40,109212,27150],{"class":596},[40,109214,929],{"class":94},[40,109216,104224],{"class":94},[40,109218,104227],{"class":94},[19,109220,106127],{},[31,109222,109224],{"className":27141,"code":109223,"language":27143,"meta":36,"style":36},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[26,109225,109226,109243,109252],{"__ignoreMap":36},[40,109227,109228,109230,109232,109234,109237,109239,109241],{"class":42,"line":43},[40,109229,33631],{"class":596},[40,109231,32479],{"class":94},[40,109233,1805],{"class":63},[40,109235,109236],{"class":94}," mujoco-control",[40,109238,104269],{"class":94},[40,109240,104272],{"class":63},[40,109242,104275],{"class":63},[40,109244,109245,109247,109249],{"class":42,"line":54},[40,109246,33631],{"class":596},[40,109248,104282],{"class":94},[40,109250,109251],{"class":94}," mujoco-control\n",[40,109253,109254,109256,109258,109260],{"class":42,"line":70},[40,109255,27150],{"class":596},[40,109257,929],{"class":94},[40,109259,104224],{"class":94},[40,109261,104227],{"class":94},[19,109263,104298],{},[492,109265,109266,109272,109279,109285],{},[495,109267,109268,109271],{},[26,109269,109270],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[495,109273,109274,109276,109277,776],{},[26,109275,104370],{}," 长度等于 ",[26,109278,105449],{},[495,109280,85517,109281,109284],{},[26,109282,109283],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[495,109286,109287],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,109289,104339],{"id":104338},[19,109291,109292],{},"关节决定 body 如何运动:",[31,109294,109296],{"className":56365,"code":109295,"language":56367,"meta":36,"style":36},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[26,109297,109298],{"__ignoreMap":36},[40,109299,109300,109302,109304,109306,109308,109311,109313,109315,109317,109320,109322,109325],{"class":42,"line":43},[40,109301,4387],{"class":50},[40,109303,106247],{"class":46},[40,109305,18242],{"class":596},[40,109307,1284],{"class":50},[40,109309,109310],{"class":94},"\"hinge\"",[40,109312,57122],{"class":596},[40,109314,1284],{"class":50},[40,109316,109310],{"class":94},[40,109318,109319],{"class":596}," axis",[40,109321,1284],{"class":50},[40,109323,109324],{"class":94},"\"0 1 0\"",[40,109326,104438],{"class":50},[19,109328,106343],{},[492,109330,109331,109336,109339],{},[495,109332,109333,109334],{},"名字是 ",[26,109335,109131],{},[495,109337,109338],{},"类型是旋转关节",[495,109340,109341],{},"绕 y 轴旋转",[19,109343,109344],{},"actuator 决定如何施加控制:",[31,109346,109348],{"className":56365,"code":109347,"language":56367,"meta":36,"style":36},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[26,109349,109350,109359,109405],{"__ignoreMap":36},[40,109351,109352,109354,109357],{"class":42,"line":43},[40,109353,4387],{"class":50},[40,109355,109356],{"class":46},"actuator",[40,109358,54606],{"class":50},[40,109360,109361,109363,109366,109368,109370,109373,109376,109378,109380,109383,109385,109387,109390,109392,109395,109398,109400,109403],{"class":42,"line":54},[40,109362,55442],{"class":50},[40,109364,109365],{"class":46},"motor",[40,109367,18242],{"class":596},[40,109369,1284],{"class":50},[40,109371,109372],{"class":94},"\"hinge_motor\"",[40,109374,109375],{"class":596}," joint",[40,109377,1284],{"class":50},[40,109379,109310],{"class":94},[40,109381,109382],{"class":596}," gear",[40,109384,1284],{"class":50},[40,109386,7002],{"class":94},[40,109388,109389],{"class":596}," ctrlrange",[40,109391,1284],{"class":50},[40,109393,109394],{"class":94},"\"-2 2\"",[40,109396,109397],{"class":596}," ctrllimited",[40,109399,1284],{"class":50},[40,109401,109402],{"class":94},"\"true\"",[40,109404,104438],{"class":50},[40,109406,109407,109409,109411],{"class":42,"line":70},[40,109408,55083],{"class":50},[40,109410,109356],{"class":46},[40,109412,54606],{"class":50},[19,109414,109415,109418,109419,776],{},[26,109416,109417],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[26,109420,109421],{},"[-2, 2]",[402,109423,109425],{"id":109424},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,109427,109428],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[3619,109430,109431,109441],{},[3622,109432,109433],{},[3625,109434,109435,109437,109439],{},[3628,109436,479],{"align":27055},[3628,109438,105987],{"align":27055},[3628,109440,104029],{"align":27055},[3665,109442,109443,109453],{},[3625,109444,109445,109447,109450],{},[3670,109446,106247],{"align":27055},[3670,109448,109449],{"align":27055},"定义能怎么动",[3670,109451,109452],{"align":27055},"门轴允许门旋转",[3625,109454,109455,109457,109460],{},[3670,109456,109356],{"align":27055},[3670,109458,109459],{"align":27055},"定义怎么施力或控制",[3670,109461,109462],{"align":27055},"人推门、马达带动门",[19,109464,109465,109466,109468],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[26,109467,104370],{}," 主动控制它。",[19,109470,109471],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[402,109473,109475],{"id":109474},"hinge-joint","hinge joint",[31,109477,109479],{"className":56365,"code":109478,"language":56367,"meta":36,"style":36},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[26,109480,109481],{"__ignoreMap":36},[40,109482,109483,109485,109487,109489,109491,109493,109495,109497,109499,109501,109503,109505,109508,109510,109513],{"class":42,"line":43},[40,109484,4387],{"class":50},[40,109486,106247],{"class":46},[40,109488,18242],{"class":596},[40,109490,1284],{"class":50},[40,109492,109310],{"class":94},[40,109494,57122],{"class":596},[40,109496,1284],{"class":50},[40,109498,109310],{"class":94},[40,109500,109319],{"class":596},[40,109502,1284],{"class":50},[40,109504,109324],{"class":94},[40,109506,109507],{"class":596}," damping",[40,109509,1284],{"class":50},[40,109511,109512],{"class":94},"\"0.1\"",[40,109514,104438],{"class":50},[19,109516,109517],{},"含义：",[492,109519,109520,109526,109532],{},[495,109521,109522,109525],{},[26,109523,109524],{},"type=\"hinge\"","：只能绕一个轴旋转。",[495,109527,109528,109531],{},[26,109529,109530],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[495,109533,109534,109537],{},[26,109535,109536],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[402,109539,109541],{"id":109540},"motor-actuator","motor actuator",[31,109543,109545],{"className":56365,"code":109544,"language":56367,"meta":36,"style":36},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[26,109546,109547],{"__ignoreMap":36},[40,109548,109549,109551,109553,109555,109557,109559,109561,109563,109565,109567,109569,109571,109573,109575,109577,109579,109581,109583],{"class":42,"line":43},[40,109550,4387],{"class":50},[40,109552,109365],{"class":46},[40,109554,18242],{"class":596},[40,109556,1284],{"class":50},[40,109558,109372],{"class":94},[40,109560,109375],{"class":596},[40,109562,1284],{"class":50},[40,109564,109310],{"class":94},[40,109566,109382],{"class":596},[40,109568,1284],{"class":50},[40,109570,7002],{"class":94},[40,109572,109389],{"class":596},[40,109574,1284],{"class":50},[40,109576,109394],{"class":94},[40,109578,109397],{"class":596},[40,109580,1284],{"class":50},[40,109582,109402],{"class":94},[40,109584,104438],{"class":50},[19,109586,109517],{},[492,109588,109589,109598,109604,109610],{},[495,109590,109591,109594,109595,109597],{},[26,109592,109593],{},"joint=\"hinge\"","：这个电机作用在名为 ",[26,109596,109131],{}," 的关节上。",[495,109599,109600,109603],{},[26,109601,109602],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[495,109605,109606,109609],{},[26,109607,109608],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[495,109611,109612,109615],{},[26,109613,109614],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,109617,109618],{},"简单理解：",[31,109620,109623],{"className":109621,"code":109622,"language":8510,"meta":36},[8508],"实际施加效果 ≈ data.ctrl[0] * gear\n",[26,109624,109622],{"__ignoreMap":36},[19,109626,109627],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,109629,104547],{"id":104546},[31,109631,109633],{"className":33679,"code":109632,"language":2323,"meta":36,"style":36},"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",[26,109634,109635,109642,109646,109652,109662,109666,109670,109678,109683,109688,109692,109696,109701,109706,109710,109715,109720,109725,109730,109734,109738,109742,109747,109752,109757,109761,109765,109769,109773,109785,109797,109805,109809,109819,109829,109839,109843,109856,109869,109873,109890,109904,109939,109943,109947,109958,109973,109988,110000,110004,110008,110020],{"__ignoreMap":36},[40,109636,109637,109639],{"class":42,"line":43},[40,109638,33692],{"class":1283},[40,109640,109641],{"class":50}," math\n",[40,109643,109644],{"class":42,"line":54},[40,109645,1413],{"emptyLinePlaceholder":1412},[40,109647,109648,109650],{"class":42,"line":70},[40,109649,33692],{"class":1283},[40,109651,104592],{"class":50},[40,109653,109654,109656,109658,109660],{"class":42,"line":78},[40,109655,33692],{"class":1283},[40,109657,34680],{"class":50},[40,109659,34683],{"class":1283},[40,109661,34686],{"class":50},[40,109663,109664],{"class":42,"line":86},[40,109665,1413],{"emptyLinePlaceholder":1412},[40,109667,109668],{"class":42,"line":100},[40,109669,1413],{"emptyLinePlaceholder":1412},[40,109671,109672,109674,109676],{"class":42,"line":108},[40,109673,104605],{"class":63},[40,109675,16886],{"class":1283},[40,109677,104610],{"class":94},[40,109679,109680],{"class":42,"line":121},[40,109681,109682],{"class":94},"\u003Cmujoco model=\"one_link_motor\">\n",[40,109684,109685],{"class":42,"line":134},[40,109686,109687],{"class":94},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[40,109689,109690],{"class":42,"line":146},[40,109691,1413],{"emptyLinePlaceholder":1412},[40,109693,109694],{"class":42,"line":154},[40,109695,104629],{"class":94},[40,109697,109698],{"class":42,"line":162},[40,109699,109700],{"class":94},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[40,109702,109703],{"class":42,"line":170},[40,109704,109705],{"class":94},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[40,109707,109708],{"class":42,"line":183},[40,109709,1413],{"emptyLinePlaceholder":1412},[40,109711,109712],{"class":42,"line":196},[40,109713,109714],{"class":94},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[40,109716,109717],{"class":42,"line":204},[40,109718,109719],{"class":94},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[40,109721,109722],{"class":42,"line":217},[40,109723,109724],{"class":94},"        \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",[40,109726,109727],{"class":42,"line":230},[40,109728,109729],{"class":94},"      \u003C\u002Fbody>\n",[40,109731,109732],{"class":42,"line":238},[40,109733,104658],{"class":94},[40,109735,109736],{"class":42,"line":251},[40,109737,104663],{"class":94},[40,109739,109740],{"class":42,"line":264},[40,109741,1413],{"emptyLinePlaceholder":1412},[40,109743,109744],{"class":42,"line":277},[40,109745,109746],{"class":94},"  \u003Cactuator>\n",[40,109748,109749],{"class":42,"line":290},[40,109750,109751],{"class":94},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[40,109753,109754],{"class":42,"line":298},[40,109755,109756],{"class":94},"  \u003C\u002Factuator>\n",[40,109758,109759],{"class":42,"line":310},[40,109760,104668],{"class":94},[40,109762,109763],{"class":42,"line":5086},[40,109764,98993],{"class":94},[40,109766,109767],{"class":42,"line":5091},[40,109768,1413],{"emptyLinePlaceholder":1412},[40,109770,109771],{"class":42,"line":5105},[40,109772,1413],{"emptyLinePlaceholder":1412},[40,109774,109775,109777,109779,109781,109783],{"class":42,"line":5110},[40,109776,35247],{"class":1283},[40,109778,5299],{"class":596},[40,109780,104689],{"class":50},[40,109782,98981],{"class":63},[40,109784,332],{"class":50},[40,109786,109787,109789,109791,109793,109795],{"class":42,"line":5902},[40,109788,104698],{"class":50},[40,109790,1284],{"class":1283},[40,109792,104703],{"class":50},[40,109794,104605],{"class":63},[40,109796,1811],{"class":50},[40,109798,109799,109801,109803],{"class":42,"line":5916},[40,109800,104712],{"class":50},[40,109802,1284],{"class":1283},[40,109804,104717],{"class":50},[40,109806,109807],{"class":42,"line":5924},[40,109808,1413],{"emptyLinePlaceholder":1412},[40,109810,109811,109813,109815,109817],{"class":42,"line":5929},[40,109812,34599],{"class":63},[40,109814,3488],{"class":50},[40,109816,104730],{"class":94},[40,109818,104733],{"class":50},[40,109820,109821,109823,109825,109827],{"class":42,"line":5935},[40,109822,34599],{"class":63},[40,109824,3488],{"class":50},[40,109826,104742],{"class":94},[40,109828,104745],{"class":50},[40,109830,109831,109833,109835,109837],{"class":42,"line":5941},[40,109832,34599],{"class":63},[40,109834,3488],{"class":50},[40,109836,104754],{"class":94},[40,109838,104757],{"class":50},[40,109840,109841],{"class":42,"line":5946},[40,109842,1413],{"emptyLinePlaceholder":1412},[40,109844,109845,109847,109850,109852,109854],{"class":42,"line":11270},[40,109846,6425],{"class":1283},[40,109848,109849],{"class":50}," model.nu ",[40,109851,24269],{"class":1283},[40,109853,28431],{"class":63},[40,109855,332],{"class":50},[40,109857,109858,109860,109862,109864,109867],{"class":42,"line":11294},[40,109859,106723],{"class":1283},[40,109861,106726],{"class":63},[40,109863,3488],{"class":50},[40,109865,109866],{"class":94},"\"expected exactly one actuator\"",[40,109868,1811],{"class":50},[40,109870,109871],{"class":42,"line":11299},[40,109872,1413],{"emptyLinePlaceholder":1412},[40,109874,109875,109877,109879,109881,109883,109885,109888],{"class":42,"line":11305},[40,109876,6525],{"class":1283},[40,109878,34916],{"class":50},[40,109880,29355],{"class":1283},[40,109882,35743],{"class":63},[40,109884,3488],{"class":50},[40,109886,109887],{"class":63},"2000",[40,109889,34086],{"class":50},[40,109891,109892,109895,109897,109899,109901],{"class":42,"line":11332},[40,109893,109894],{"class":50},"        t ",[40,109896,1284],{"class":1283},[40,109898,34916],{"class":50},[40,109900,3934],{"class":1283},[40,109902,109903],{"class":50}," model.opt.timestep\n",[40,109905,109906,109909,109911,109913,109915,109918,109920,109923,109925,109927,109930,109932,109934,109936],{"class":42,"line":11337},[40,109907,109908],{"class":50},"        data.ctrl[",[40,109910,3672],{"class":63},[40,109912,7766],{"class":50},[40,109914,1284],{"class":1283},[40,109916,109917],{"class":63}," 1.5",[40,109919,9841],{"class":1283},[40,109921,109922],{"class":50}," math.sin(",[40,109924,108551],{"class":63},[40,109926,9841],{"class":1283},[40,109928,109929],{"class":50}," math.pi ",[40,109931,3934],{"class":1283},[40,109933,65165],{"class":63},[40,109935,9841],{"class":1283},[40,109937,109938],{"class":50}," t)\n",[40,109940,109941],{"class":42,"line":11343},[40,109942,104807],{"class":50},[40,109944,109945],{"class":42,"line":11355},[40,109946,1413],{"emptyLinePlaceholder":1412},[40,109948,109949,109951,109953,109956],{"class":42,"line":11367},[40,109950,34599],{"class":63},[40,109952,3488],{"class":50},[40,109954,109955],{"class":94},"\"time:\"",[40,109957,104769],{"class":50},[40,109959,109960,109962,109964,109967,109969,109971],{"class":42,"line":11379},[40,109961,34599],{"class":63},[40,109963,3488],{"class":50},[40,109965,109966],{"class":94},"\"joint qpos:\"",[40,109968,108221],{"class":50},[40,109970,3773],{"class":63},[40,109972,33797],{"class":50},[40,109974,109975,109977,109979,109982,109984,109986],{"class":42,"line":13038},[40,109976,34599],{"class":63},[40,109978,3488],{"class":50},[40,109980,109981],{"class":94},"\"joint qvel:\"",[40,109983,108237],{"class":50},[40,109985,3773],{"class":63},[40,109987,33797],{"class":50},[40,109989,109990,109992,109994,109997],{"class":42,"line":13063},[40,109991,34599],{"class":63},[40,109993,3488],{"class":50},[40,109995,109996],{"class":94},"\"last ctrl:\"",[40,109998,109999],{"class":50},", data.ctrl.copy())\n",[40,110001,110002],{"class":42,"line":13086},[40,110003,1413],{"emptyLinePlaceholder":1412},[40,110005,110006],{"class":42,"line":13110},[40,110007,1413],{"emptyLinePlaceholder":1412},[40,110009,110010,110012,110014,110016,110018],{"class":42,"line":13115},[40,110011,4873],{"class":1283},[40,110013,34520],{"class":63},[40,110015,104850],{"class":1283},[40,110017,104853],{"class":94},[40,110019,332],{"class":50},[40,110021,110022],{"class":42,"line":13120},[40,110023,104860],{"class":50},[19,110025,106861],{},[31,110027,110029],{"className":27141,"code":110028,"language":27143,"meta":36,"style":36},"touch ch4_joint_motor.py\n",[26,110030,110031],{"__ignoreMap":36},[40,110032,110033,110035],{"class":42,"line":43},[40,110034,3165],{"class":596},[40,110036,110037],{"class":94}," ch4_joint_motor.py\n",[19,110039,105592],{},[31,110041,110043],{"className":27141,"code":110042,"language":27143,"meta":36,"style":36},"python ch4_joint_motor.py\n",[26,110044,110045],{"__ignoreMap":36},[40,110046,110047,110049],{"class":42,"line":43},[40,110048,2323],{"class":596},[40,110050,110037],{"class":94},[402,110052,104863],{"id":104863},[19,110054,110055],{},"检查 actuator 数量：",[31,110057,110059],{"className":33679,"code":110058,"language":2323,"meta":36,"style":36},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[26,110060,110061,110073],{"__ignoreMap":36},[40,110062,110063,110065,110067,110069,110071],{"class":42,"line":43},[40,110064,4873],{"class":1283},[40,110066,109849],{"class":50},[40,110068,24269],{"class":1283},[40,110070,28431],{"class":63},[40,110072,332],{"class":50},[40,110074,110075,110077,110079,110081,110083],{"class":42,"line":54},[40,110076,107186],{"class":1283},[40,110078,106726],{"class":63},[40,110080,3488],{"class":50},[40,110082,109866],{"class":94},[40,110084,1811],{"class":50},[19,110086,110087,110089,110090,110092],{},[26,110088,105449],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[26,110091,104370],{}," 长度应该是 1。",[19,110094,110095],{},"产生正弦控制信号：",[31,110097,110099],{"className":33679,"code":110098,"language":2323,"meta":36,"style":36},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[26,110100,110101],{"__ignoreMap":36},[40,110102,110103,110105,110107,110109,110111,110113,110115,110117,110119,110121,110123,110125,110127,110129],{"class":42,"line":43},[40,110104,109162],{"class":50},[40,110106,3672],{"class":63},[40,110108,7766],{"class":50},[40,110110,1284],{"class":1283},[40,110112,109917],{"class":63},[40,110114,9841],{"class":1283},[40,110116,109922],{"class":50},[40,110118,108551],{"class":63},[40,110120,9841],{"class":1283},[40,110122,109929],{"class":50},[40,110124,3934],{"class":1283},[40,110126,65165],{"class":63},[40,110128,9841],{"class":1283},[40,110130,109938],{"class":50},[19,110132,110133],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,110135,104964],{},[31,110137,110138],{"className":33679,"code":107796,"language":2323,"meta":36,"style":36},[26,110139,110140],{"__ignoreMap":36},[40,110141,110142],{"class":42,"line":43},[40,110143,107796],{"class":50},[19,110145,110146],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[402,110148,104999],{"id":104999},[31,110150,110152],{"className":33679,"code":110151,"language":2323,"meta":36,"style":36},"import math\n",[26,110153,110154],{"__ignoreMap":36},[40,110155,110156,110158],{"class":42,"line":43},[40,110157,33692],{"class":1283},[40,110159,109641],{"class":50},[19,110161,110162,110163,104312,110166,110169],{},"导入 Python 标准库里的数学模块。后面要用 ",[26,110164,110165],{},"math.sin",[26,110167,110168],{},"math.pi"," 生成周期变化的控制信号。",[31,110171,110172],{"className":33679,"code":106977,"language":2323,"meta":36,"style":36},[26,110173,110174,110180],{"__ignoreMap":36},[40,110175,110176,110178],{"class":42,"line":43},[40,110177,33692],{"class":1283},[40,110179,104592],{"class":50},[40,110181,110182,110184,110186,110188],{"class":42,"line":54},[40,110183,33692],{"class":1283},[40,110185,34680],{"class":50},[40,110187,34683],{"class":1283},[40,110189,34686],{"class":50},[19,110191,110192],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[31,110194,110195],{"className":56365,"code":109478,"language":56367,"meta":36,"style":36},[26,110196,110197],{"__ignoreMap":36},[40,110198,110199,110201,110203,110205,110207,110209,110211,110213,110215,110217,110219,110221,110223,110225,110227],{"class":42,"line":43},[40,110200,4387],{"class":50},[40,110202,106247],{"class":46},[40,110204,18242],{"class":596},[40,110206,1284],{"class":50},[40,110208,109310],{"class":94},[40,110210,57122],{"class":596},[40,110212,1284],{"class":50},[40,110214,109310],{"class":94},[40,110216,109319],{"class":596},[40,110218,1284],{"class":50},[40,110220,109324],{"class":94},[40,110222,109507],{"class":596},[40,110224,1284],{"class":50},[40,110226,109512],{"class":94},[40,110228,104438],{"class":50},[19,110230,110231,110232,110234,110235,110237,110238,110240],{},"这行定义关节。",[26,110233,109131],{}," 表示旋转关节。",[26,110236,109530],{}," 表示绕 y 轴旋转。",[26,110239,109536],{}," 表示有一点阻尼，运动不会完全无损耗。",[31,110242,110244],{"className":56365,"code":110243,"language":56367,"meta":36,"style":36},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[26,110245,110246],{"__ignoreMap":36},[40,110247,110248,110250,110252,110254,110256,110259,110261,110263,110266,110269,110271,110274,110276,110278,110280,110282,110284,110287],{"class":42,"line":43},[40,110249,4387],{"class":50},[40,110251,104414],{"class":46},[40,110253,18242],{"class":596},[40,110255,1284],{"class":50},[40,110257,110258],{"class":94},"\"link_geom\"",[40,110260,57122],{"class":596},[40,110262,1284],{"class":50},[40,110264,110265],{"class":94},"\"capsule\"",[40,110267,110268],{"class":596}," fromto",[40,110270,1284],{"class":50},[40,110272,110273],{"class":94},"\"0 0 0 0 0 0.5\"",[40,110275,104430],{"class":596},[40,110277,1284],{"class":50},[40,110279,107069],{"class":94},[40,110281,105292],{"class":596},[40,110283,1284],{"class":50},[40,110285,110286],{"class":94},"\"0.5\"",[40,110288,104438],{"class":50},[19,110290,110291,110292,110294,110295,110297,110298,110301,110302,776,110305,110307],{},"这行定义摆杆的形状。",[26,110293,106456],{}," 是胶囊体，适合表示杆子。",[26,110296,106467],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[26,110299,110300],{},"(0,0,0)"," 延伸到 ",[26,110303,110304],{},"(0,0,0.5)",[26,110306,106461],{}," 是半径。",[31,110309,110310],{"className":56365,"code":109544,"language":56367,"meta":36,"style":36},[26,110311,110312],{"__ignoreMap":36},[40,110313,110314,110316,110318,110320,110322,110324,110326,110328,110330,110332,110334,110336,110338,110340,110342,110344,110346,110348],{"class":42,"line":43},[40,110315,4387],{"class":50},[40,110317,109365],{"class":46},[40,110319,18242],{"class":596},[40,110321,1284],{"class":50},[40,110323,109372],{"class":94},[40,110325,109375],{"class":596},[40,110327,1284],{"class":50},[40,110329,109310],{"class":94},[40,110331,109382],{"class":596},[40,110333,1284],{"class":50},[40,110335,7002],{"class":94},[40,110337,109389],{"class":596},[40,110339,1284],{"class":50},[40,110341,109394],{"class":94},[40,110343,109397],{"class":596},[40,110345,1284],{"class":50},[40,110347,109402],{"class":94},[40,110349,104438],{"class":50},[19,110351,110352,110353,110355,110356,110359,110360,110362],{},"这行定义电机。它作用在 ",[26,110354,109131],{}," 关节上。",[26,110357,110358],{},"gear"," 可以理解成放大倍数。",[26,110361,109146],{}," 限制控制输入范围。",[31,110364,110365],{"className":33679,"code":110058,"language":2323,"meta":36,"style":36},[26,110366,110367,110379],{"__ignoreMap":36},[40,110368,110369,110371,110373,110375,110377],{"class":42,"line":43},[40,110370,4873],{"class":1283},[40,110372,109849],{"class":50},[40,110374,24269],{"class":1283},[40,110376,28431],{"class":63},[40,110378,332],{"class":50},[40,110380,110381,110383,110385,110387,110389],{"class":42,"line":54},[40,110382,107186],{"class":1283},[40,110384,106726],{"class":63},[40,110386,3488],{"class":50},[40,110388,109866],{"class":94},[40,110390,1811],{"class":50},[19,110392,110393,110395],{},[26,110394,105449],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[31,110397,110399],{"className":33679,"code":110398,"language":2323,"meta":36,"style":36},"for step in range(2000):\n",[26,110400,110401],{"__ignoreMap":36},[40,110402,110403,110405,110407,110409,110411,110413,110415],{"class":42,"line":43},[40,110404,6349],{"class":1283},[40,110406,34916],{"class":50},[40,110408,29355],{"class":1283},[40,110410,35743],{"class":63},[40,110412,3488],{"class":50},[40,110414,109887],{"class":63},[40,110416,34086],{"class":50},[19,110418,110419,110420,110422,110423,110426],{},"循环 2000 步。这里没有用 ",[26,110421,4469],{},"，而是用 ",[26,110424,110425],{},"step","，因为后面要用当前步数计算时间。",[31,110428,110430],{"className":33679,"code":110429,"language":2323,"meta":36,"style":36},"t = step * model.opt.timestep\n",[26,110431,110432],{"__ignoreMap":36},[40,110433,110434,110437,110439,110441,110443],{"class":42,"line":43},[40,110435,110436],{"class":50},"t ",[40,110438,1284],{"class":1283},[40,110440,34916],{"class":50},[40,110442,3934],{"class":1283},[40,110444,109903],{"class":50},[19,110446,110447],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[31,110449,110450],{"className":33679,"code":110098,"language":2323,"meta":36,"style":36},[26,110451,110452],{"__ignoreMap":36},[40,110453,110454,110456,110458,110460,110462,110464,110466,110468,110470,110472,110474,110476,110478,110480],{"class":42,"line":43},[40,110455,109162],{"class":50},[40,110457,3672],{"class":63},[40,110459,7766],{"class":50},[40,110461,1284],{"class":1283},[40,110463,109917],{"class":63},[40,110465,9841],{"class":1283},[40,110467,109922],{"class":50},[40,110469,108551],{"class":63},[40,110471,9841],{"class":1283},[40,110473,109929],{"class":50},[40,110475,3934],{"class":1283},[40,110477,65165],{"class":63},[40,110479,9841],{"class":1283},[40,110481,109938],{"class":50},[19,110483,110484],{},"这行给电机输入一个正弦波。拆开看：",[492,110486,110487,110493,110499],{},[495,110488,110489,110492],{},[26,110490,110491],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[495,110494,110495,110498],{},[26,110496,110497],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[495,110500,110501,110504],{},[26,110502,110503],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,110506,110507],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[31,110509,110511],{"className":33679,"code":110510,"language":2323,"meta":36,"style":36},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[26,110512,110513],{"__ignoreMap":36},[40,110514,110515,110517,110519,110521,110523,110525],{"class":42,"line":43},[40,110516,33715],{"class":63},[40,110518,3488],{"class":50},[40,110520,109966],{"class":94},[40,110522,108221],{"class":50},[40,110524,3773],{"class":63},[40,110526,33797],{"class":50},[19,110528,110529,110530,110532],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[26,110531,104364],{}," 只有一个数。",[14,110534,105607],{"id":105606},[19,110536,110537],{},"输出类似:",[31,110539,110542],{"className":110540,"code":110541,"language":8510,"meta":36},[8508],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[26,110543,110541],{"__ignoreMap":36},[19,110545,110546,110547,110549],{},"这里 ",[26,110548,109417],{}," 是电机输入。",[19,110551,110552,110555,110556,110559],{},[26,110553,110554],{},"joint qpos"," 是关节角度，单位通常是弧度。",[26,110557,110558],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,110561,110562],{},"角度单位提示：",[31,110564,110567],{"className":110565,"code":110566,"language":8510,"meta":36},[8508],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[26,110568,110566],{"__ignoreMap":36},[19,110570,110571,110572,110574,110575,110577],{},"如果你看到 ",[26,110573,107321],{}," 是 ",[26,110576,38629],{},"，大约就是 28.6 度。",[14,110579,105639],{"id":105638},[492,110581,110582,110589,110592,110599,110602,110610,110618],{},[495,110583,105702,110584,105705,110586,776],{},[26,110585,109602],{},[26,110587,110588],{},"gear=\"5\"",[495,110590,110591],{},"重新运行，观察关节运动是否更剧烈。",[495,110593,105702,110594,105705,110596,776],{},[26,110595,109146],{},[26,110597,110598],{},"-0.2 0.2",[495,110600,110601],{},"重新运行，观察控制能力是否变弱。",[495,110603,110604,110605,110607,110608,776],{},"去掉 actuator，确认 ",[26,110606,105449],{}," 变成 ",[26,110609,3672],{},[495,110611,105702,110612,105705,110614,110617],{},[26,110613,109536],{},[26,110615,110616],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[495,110619,105702,110620,105705,110622,110625],{},[26,110621,109530],{},[26,110623,110624],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,110627,105744],{"id":105743},[402,110629,110631],{"id":110630},"indexerror-index-0-is-out-of-bounds",[26,110632,110633],{},"IndexError: index 0 is out of bounds",[19,110635,110636,110637,110639],{},"原因是 ",[26,110638,109283],{},"，没有 actuator。",[402,110641,110642],{"id":110642},"关节几乎不动",[19,110644,110645],{},"可能原因:",[492,110647,110648,110653,110657,110663],{},[495,110649,110650,110652],{},[26,110651,110358],{}," 太小",[495,110654,110655,110652],{},[26,110656,109146],{},[495,110658,110659,110662],{},[26,110660,110661],{},"damping"," 太大",[495,110664,110665],{},"重力方向导致运动不明显",[402,110667,110668],{"id":110668},"模型编译失败",[19,110670,110671,110672,110674],{},"检查 actuator 引用的 ",[26,110673,109593],{}," 是否存在，joint 名称是否拼写一致。",[402,110676,110678,110680],{"id":110677},"datactrl0-写了但没有效果",[26,110679,109417],{}," 写了但没有效果",[19,110682,105866],{},[492,110684,110685,110690,110693,110698,110703],{},[495,110686,110687,110689],{},[26,110688,105449],{}," 是否大于 0。",[495,110691,110692],{},"motor 是否引用了正确 joint。",[495,110694,110695,110697],{},[26,110696,110358],{}," 是否太小。",[495,110699,110700,110702],{},[26,110701,109146],{}," 是否把输入限制得太小。",[495,110704,110705],{},"body 是否真的有可动 joint。",[402,110707,110708],{"id":110708},"控制输入超过范围会怎样",[19,110710,110711],{},"如果设置了：",[31,110713,110715],{"className":56365,"code":110714,"language":56367,"meta":36,"style":36},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[26,110716,110717],{"__ignoreMap":36},[40,110718,110719],{"class":42,"line":43},[40,110720,110714],{"class":50},[19,110722,110723],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[31,110725,110727],{"className":33679,"code":110726,"language":2323,"meta":36,"style":36},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[26,110728,110729,110749],{"__ignoreMap":36},[40,110730,110731,110734,110736,110739,110741,110743,110745,110747],{"class":42,"line":43},[40,110732,110733],{"class":50},"action ",[40,110735,1284],{"class":1283},[40,110737,110738],{"class":50}," np.clip(action, ",[40,110740,4011],{"class":1283},[40,110742,108551],{"class":63},[40,110744,15757],{"class":50},[40,110746,108551],{"class":63},[40,110748,1811],{"class":50},[40,110750,110751,110753,110755,110757,110759],{"class":42,"line":54},[40,110752,109162],{"class":50},[40,110754,3672],{"class":63},[40,110756,7766],{"class":50},[40,110758,1284],{"class":1283},[40,110760,110761],{"class":50}," action\n",[14,110763,105898],{"id":105897},[19,110765,110766],{},"这一章建立了控制任务的基本形式：",[31,110768,110771],{"className":110769,"code":110770,"language":8510,"meta":36},[8508],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[26,110772,110770],{"__ignoreMap":36},[19,110774,110775],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[3384,110777,110778],{},"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":36,"searchDepth":54,"depth":54,"links":110780},[110781,110782,110783,110788,110792,110793,110794,110802],{"id":103941,"depth":54,"text":103942},{"id":104064,"depth":54,"text":104065},{"id":104338,"depth":54,"text":104339,"children":110784},[110785,110786,110787],{"id":109424,"depth":70,"text":109425},{"id":109474,"depth":70,"text":109475},{"id":109540,"depth":70,"text":109541},{"id":104546,"depth":54,"text":104547,"children":110789},[110790,110791],{"id":104863,"depth":70,"text":104863},{"id":104999,"depth":70,"text":104999},{"id":105606,"depth":54,"text":105607},{"id":105638,"depth":54,"text":105639},{"id":105743,"depth":54,"text":105744,"children":110795},[110796,110797,110798,110799,110801],{"id":110630,"depth":70,"text":110633},{"id":110642,"depth":70,"text":110642},{"id":110668,"depth":70,"text":110668},{"id":110677,"depth":70,"text":110800},"data.ctrl[0] 写了但没有效果",{"id":110708,"depth":70,"text":110708},{"id":105897,"depth":54,"text":105898},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":109112,"description":36},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":110809,"title":110810,"body":110811,"description":36,"extension":3414,"meta":112720,"navigation":1412,"path":112721,"seo":112722,"stem":112723,"__hash__":112724},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":110812,"toc":112696},[110813,110816,110818,110821,110829,110832,110849,110852,110877,110880,110926,110928,110930,110985,110987,111006,111008,111051,111054,111071,111074,111090,111100,111107,111109,111112,111115,111149,111152,111200,111204,111207,111221,111230,111234,111237,111262,111265,111269,111282,111285,111291,111294,111309,111311,111314,111574,111576,111588,111591,111903,111905,111917,111919,111922,111937,111942,111945,111967,111970,111973,112007,112010,112014,112025,112028,112045,112048,112062,112069,112089,112096,112110,112113,112125,112140,112160,112163,112185,112188,112192,112207,112218,112233,112236,112266,112282,112311,112319,112343,112346,112364,112374,112386,112393,112402,112408,112417,112420,112422,112431,112434,112449,112451,112454,112465,112468,112479,112482,112500,112502,112519,112522,112550,112552,112556,112559,112589,112595,112598,112602,112610,112613,112615,112636,112639,112642,112658,112661,112677,112679,112682,112693],[10,110814,110810],{"id":110815},"_5viewer-可视化与-renderer-离屏渲染",[14,110817,103942],{"id":103941},[19,110819,110820],{},"本章掌握两类可视化方式:",[492,110822,110823,110826],{},[495,110824,110825],{},"交互式 viewer: 适合人工观察仿真",[495,110827,110828],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,110830,110831],{},"使用官方接口:",[31,110833,110835],{"className":33679,"code":110834,"language":2323,"meta":36,"style":36},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[26,110836,110837,110844],{"__ignoreMap":36},[40,110838,110839,110841],{"class":42,"line":43},[40,110840,33692],{"class":1283},[40,110842,110843],{"class":50}," mujoco.viewer\n",[40,110845,110846],{"class":42,"line":54},[40,110847,110848],{"class":50},"mujoco.viewer.launch_passive(model, data)\n",[19,110850,110851],{},"以及:",[31,110853,110855],{"className":33679,"code":110854,"language":2323,"meta":36,"style":36},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[26,110856,110857,110867],{"__ignoreMap":36},[40,110858,110859,110862,110864],{"class":42,"line":43},[40,110860,110861],{"class":50},"renderer ",[40,110863,1284],{"class":1283},[40,110865,110866],{"class":50}," mujoco.Renderer(model)\n",[40,110868,110869,110872,110874],{"class":42,"line":54},[40,110870,110871],{"class":50},"image ",[40,110873,1284],{"class":1283},[40,110875,110876],{"class":50}," renderer.render()\n",[19,110878,110879],{},"新手建议先理解二者区别：",[3619,110881,110882,110898],{},[3622,110883,110884],{},[3625,110885,110886,110889,110892,110895],{},[3628,110887,110888],{"align":27055},"工具",[3628,110890,110891],{"align":27055},"用途",[3628,110893,110894],{"align":27055},"是否打开窗口",[3628,110896,110897],{"align":27055},"常见场景",[3665,110899,110900,110913],{},[3625,110901,110902,110905,110908,110910],{},[3670,110903,110904],{"align":27055},"Viewer",[3670,110906,110907],{"align":27055},"人眼实时观察仿真",[3670,110909,107956],{"align":27055},[3670,110911,110912],{"align":27055},"调试模型、看控制效果",[3625,110914,110915,110918,110921,110923],{},[3670,110916,110917],{"align":27055},"Renderer",[3670,110919,110920],{"align":27055},"生成图像数组",[3670,110922,107969],{"align":27055},[3670,110924,110925],{"align":27055},"保存图片、训练视觉策略、服务器批量采集",[14,110927,104065],{"id":104064},[19,110929,104068],{},[31,110931,110933],{"className":27141,"code":110932,"language":27143,"meta":36,"style":36},"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",[26,110934,110935,110947,110957,110965,110973],{"__ignoreMap":36},[40,110936,110937,110939,110941,110943,110945],{"class":42,"line":43},[40,110938,923],{"class":596},[40,110940,29625],{"class":94},[40,110942,929],{"class":94},[40,110944,29710],{"class":63},[40,110946,27993],{"class":63},[40,110948,110949,110951,110953,110955],{"class":42,"line":54},[40,110950,104103],{"class":94},[40,110952,104106],{"class":94},[40,110954,104109],{"class":94},[40,110956,27993],{"class":63},[40,110958,110959,110961,110963],{"class":42,"line":70},[40,110960,104116],{"class":94},[40,110962,104119],{"class":94},[40,110964,27993],{"class":63},[40,110966,110967,110969,110971],{"class":42,"line":78},[40,110968,104126],{"class":94},[40,110970,104129],{"class":94},[40,110972,27993],{"class":63},[40,110974,110975,110977,110979,110981,110983],{"class":42,"line":86},[40,110976,104136],{"class":94},[40,110978,104139],{"class":94},[40,110980,104142],{"class":94},[40,110982,104145],{"class":94},[40,110984,105807],{"class":94},[19,110986,106110],{},[31,110988,110990],{"className":27141,"code":110989,"language":27143,"meta":36,"style":36},"pip install \"mujoco>=2.3\" numpy pillow\n",[26,110991,110992],{"__ignoreMap":36},[40,110993,110994,110996,110998,111000,111003],{"class":42,"line":43},[40,110995,27150],{"class":596},[40,110997,929],{"class":94},[40,110999,104224],{"class":94},[40,111001,111002],{"class":94}," numpy",[40,111004,111005],{"class":94}," pillow\n",[19,111007,106127],{},[31,111009,111011],{"className":27141,"code":111010,"language":27143,"meta":36,"style":36},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[26,111012,111013,111030,111039],{"__ignoreMap":36},[40,111014,111015,111017,111019,111021,111024,111026,111028],{"class":42,"line":43},[40,111016,33631],{"class":596},[40,111018,32479],{"class":94},[40,111020,1805],{"class":63},[40,111022,111023],{"class":94}," mujoco-render",[40,111025,104269],{"class":94},[40,111027,104272],{"class":63},[40,111029,104275],{"class":63},[40,111031,111032,111034,111036],{"class":42,"line":54},[40,111033,33631],{"class":596},[40,111035,104282],{"class":94},[40,111037,111038],{"class":94}," mujoco-render\n",[40,111040,111041,111043,111045,111047,111049],{"class":42,"line":70},[40,111042,27150],{"class":596},[40,111044,929],{"class":94},[40,111046,104224],{"class":94},[40,111048,111002],{"class":94},[40,111050,111005],{"class":94},[19,111052,111053],{},"离屏渲染后端:",[31,111055,111057],{"className":27141,"code":111056,"language":27143,"meta":36,"style":36},"export MUJOCO_GL=egl\n",[26,111058,111059],{"__ignoreMap":36},[40,111060,111061,111063,111066,111068],{"class":42,"line":43},[40,111062,28357],{"class":1283},[40,111064,111065],{"class":50}," MUJOCO_GL",[40,111067,1284],{"class":1283},[40,111069,111070],{"class":50},"egl\n",[19,111072,111073],{},"或:",[31,111075,111077],{"className":27141,"code":111076,"language":27143,"meta":36,"style":36},"export MUJOCO_GL=osmesa\n",[26,111078,111079],{"__ignoreMap":36},[40,111080,111081,111083,111085,111087],{"class":42,"line":43},[40,111082,28357],{"class":1283},[40,111084,111065],{"class":50},[40,111086,1284],{"class":1283},[40,111088,111089],{"class":50},"osmesa\n",[19,111091,111092,111093,111096,111097,776],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[26,111094,111095],{},"egl"," 失败，再尝试 ",[26,111098,111099],{},"osmesa",[19,111101,111102,111103,111106],{},"如果你在本机桌面环境运行，通常先不要设置 ",[26,111104,111105],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,111108,104339],{"id":104338},[19,111110,111111],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,111113,111114],{},"典型 viewer 流程:",[31,111116,111118],{"className":33679,"code":111117,"language":2323,"meta":36,"style":36},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[26,111119,111120,111133,111140,111144],{"__ignoreMap":36},[40,111121,111122,111125,111128,111130],{"class":42,"line":43},[40,111123,111124],{"class":1283},"with",[40,111126,111127],{"class":50}," mujoco.viewer.launch_passive(model, data) ",[40,111129,34683],{"class":1283},[40,111131,111132],{"class":50}," viewer:\n",[40,111134,111135,111137],{"class":42,"line":54},[40,111136,5577],{"class":1283},[40,111138,111139],{"class":50}," viewer.is_running():\n",[40,111141,111142],{"class":42,"line":70},[40,111143,104807],{"class":50},[40,111145,111146],{"class":42,"line":78},[40,111147,111148],{"class":50},"        viewer.sync()\n",[19,111150,111151],{},"典型 renderer 流程:",[31,111153,111155],{"className":33679,"code":111154,"language":2323,"meta":36,"style":36},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[26,111156,111157,111183,111187,111192],{"__ignoreMap":36},[40,111158,111159,111161,111163,111166,111168,111170,111172,111174,111176,111178,111181],{"class":42,"line":43},[40,111160,110861],{"class":50},[40,111162,1284],{"class":1283},[40,111164,111165],{"class":50}," mujoco.Renderer(model, ",[40,111167,28296],{"class":8539},[40,111169,1284],{"class":1283},[40,111171,45642],{"class":63},[40,111173,15757],{"class":50},[40,111175,28292],{"class":8539},[40,111177,1284],{"class":1283},[40,111179,111180],{"class":63},"640",[40,111182,1811],{"class":50},[40,111184,111185],{"class":42,"line":54},[40,111186,107796],{"class":50},[40,111188,111189],{"class":42,"line":70},[40,111190,111191],{"class":50},"renderer.update_scene(data)\n",[40,111193,111194,111196,111198],{"class":42,"line":78},[40,111195,110871],{"class":50},[40,111197,1284],{"class":1283},[40,111199,110876],{"class":50},[402,111201,111203],{"id":111202},"viewer-的同步逻辑","viewer 的同步逻辑",[19,111205,111206],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[31,111208,111210],{"className":33679,"code":111209,"language":2323,"meta":36,"style":36},"mujoco.mj_step(model, data)\nviewer.sync()\n",[26,111211,111212,111216],{"__ignoreMap":36},[40,111213,111214],{"class":42,"line":43},[40,111215,107796],{"class":50},[40,111217,111218],{"class":42,"line":54},[40,111219,111220],{"class":50},"viewer.sync()\n",[19,111222,111223,111225,111226,111229],{},[26,111224,104509],{}," 负责算物理，",[26,111227,111228],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[402,111231,111233],{"id":111232},"为什么要-sleep","为什么要 sleep",[19,111235,111236],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[31,111238,111240],{"className":33679,"code":111239,"language":2323,"meta":36,"style":36},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[26,111241,111242],{"__ignoreMap":36},[40,111243,111244,111247,111249,111252,111254,111257,111259],{"class":42,"line":43},[40,111245,111246],{"class":50},"sleep_time ",[40,111248,1284],{"class":1283},[40,111250,111251],{"class":50}," model.opt.timestep ",[40,111253,4011],{"class":1283},[40,111255,111256],{"class":50}," (time.time() ",[40,111258,4011],{"class":1283},[40,111260,111261],{"class":50}," step_start)\n",[19,111263,111264],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[402,111266,111268],{"id":111267},"renderer-输出是什么","renderer 输出是什么",[31,111270,111272],{"className":33679,"code":111271,"language":2323,"meta":36,"style":36},"image = renderer.render()\n",[26,111273,111274],{"__ignoreMap":36},[40,111275,111276,111278,111280],{"class":42,"line":43},[40,111277,110871],{"class":50},[40,111279,1284],{"class":1283},[40,111281,110876],{"class":50},[19,111283,111284],{},"得到的是 NumPy 数组，形状通常是：",[31,111286,111289],{"className":111287,"code":111288,"language":8510,"meta":36},[8508],"(height, width, 3)\n",[26,111290,111288],{"__ignoreMap":36},[19,111292,111293],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[31,111295,111297],{"className":33679,"code":111296,"language":2323,"meta":36,"style":36},"Image.fromarray(image).save(\"render_output.png\")\n",[26,111298,111299],{"__ignoreMap":36},[40,111300,111301,111304,111307],{"class":42,"line":43},[40,111302,111303],{"class":50},"Image.fromarray(image).save(",[40,111305,111306],{"class":94},"\"render_output.png\"",[40,111308,1811],{"class":50},[14,111310,104547],{"id":104546},[19,111312,111313],{},"交互式 Viewer:",[31,111315,111317],{"className":33679,"code":111316,"language":2323,"meta":36,"style":36},"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",[26,111318,111319,111325,111329,111335,111341,111345,111349,111357,111362,111366,111370,111374,111379,111384,111388,111392,111396,111401,111405,111409,111413,111417,111421,111425,111437,111449,111457,111461,111471,111491,111501,111506,111511,111515,111532,111545,111550,111554,111558,111570],{"__ignoreMap":36},[40,111320,111321,111323],{"class":42,"line":43},[40,111322,33692],{"class":1283},[40,111324,35129],{"class":50},[40,111326,111327],{"class":42,"line":54},[40,111328,1413],{"emptyLinePlaceholder":1412},[40,111330,111331,111333],{"class":42,"line":70},[40,111332,33692],{"class":1283},[40,111334,104592],{"class":50},[40,111336,111337,111339],{"class":42,"line":78},[40,111338,33692],{"class":1283},[40,111340,110843],{"class":50},[40,111342,111343],{"class":42,"line":86},[40,111344,1413],{"emptyLinePlaceholder":1412},[40,111346,111347],{"class":42,"line":100},[40,111348,1413],{"emptyLinePlaceholder":1412},[40,111350,111351,111353,111355],{"class":42,"line":108},[40,111352,104605],{"class":63},[40,111354,16886],{"class":1283},[40,111356,104610],{"class":94},[40,111358,111359],{"class":42,"line":121},[40,111360,111361],{"class":94},"\u003Cmujoco model=\"viewer_demo\">\n",[40,111363,111364],{"class":42,"line":134},[40,111365,104620],{"class":94},[40,111367,111368],{"class":42,"line":146},[40,111369,1413],{"emptyLinePlaceholder":1412},[40,111371,111372],{"class":42,"line":154},[40,111373,104629],{"class":94},[40,111375,111376],{"class":42,"line":162},[40,111377,111378],{"class":94},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[40,111380,111381],{"class":42,"line":170},[40,111382,111383],{"class":94},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[40,111385,111386],{"class":42,"line":183},[40,111387,1413],{"emptyLinePlaceholder":1412},[40,111389,111390],{"class":42,"line":196},[40,111391,104643],{"class":94},[40,111393,111394],{"class":42,"line":204},[40,111395,104648],{"class":94},[40,111397,111398],{"class":42,"line":217},[40,111399,111400],{"class":94},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[40,111402,111403],{"class":42,"line":230},[40,111404,104658],{"class":94},[40,111406,111407],{"class":42,"line":238},[40,111408,104663],{"class":94},[40,111410,111411],{"class":42,"line":251},[40,111412,104668],{"class":94},[40,111414,111415],{"class":42,"line":264},[40,111416,98993],{"class":94},[40,111418,111419],{"class":42,"line":277},[40,111420,1413],{"emptyLinePlaceholder":1412},[40,111422,111423],{"class":42,"line":290},[40,111424,1413],{"emptyLinePlaceholder":1412},[40,111426,111427,111429,111431,111433,111435],{"class":42,"line":298},[40,111428,35247],{"class":1283},[40,111430,5299],{"class":596},[40,111432,104689],{"class":50},[40,111434,98981],{"class":63},[40,111436,332],{"class":50},[40,111438,111439,111441,111443,111445,111447],{"class":42,"line":310},[40,111440,104698],{"class":50},[40,111442,1284],{"class":1283},[40,111444,104703],{"class":50},[40,111446,104605],{"class":63},[40,111448,1811],{"class":50},[40,111450,111451,111453,111455],{"class":42,"line":5086},[40,111452,104712],{"class":50},[40,111454,1284],{"class":1283},[40,111456,104717],{"class":50},[40,111458,111459],{"class":42,"line":5091},[40,111460,1413],{"emptyLinePlaceholder":1412},[40,111462,111463,111465,111467,111469],{"class":42,"line":5105},[40,111464,37478],{"class":1283},[40,111466,111127],{"class":50},[40,111468,34683],{"class":1283},[40,111470,111132],{"class":50},[40,111472,111473,111476,111479,111481,111484,111486,111489],{"class":42,"line":5110},[40,111474,111475],{"class":1283},"        while",[40,111477,111478],{"class":50}," viewer.is_running() ",[40,111480,33762],{"class":1283},[40,111482,111483],{"class":50}," data.time ",[40,111485,4387],{"class":1283},[40,111487,111488],{"class":63}," 5.0",[40,111490,332],{"class":50},[40,111492,111493,111496,111498],{"class":42,"line":5902},[40,111494,111495],{"class":50},"            step_start ",[40,111497,1284],{"class":1283},[40,111499,111500],{"class":50}," time.time()\n",[40,111502,111503],{"class":42,"line":5916},[40,111504,111505],{"class":50},"            mujoco.mj_step(model, data)\n",[40,111507,111508],{"class":42,"line":5924},[40,111509,111510],{"class":50},"            viewer.sync()\n",[40,111512,111513],{"class":42,"line":5929},[40,111514,1413],{"emptyLinePlaceholder":1412},[40,111516,111517,111520,111522,111524,111526,111528,111530],{"class":42,"line":5935},[40,111518,111519],{"class":50},"            sleep_time ",[40,111521,1284],{"class":1283},[40,111523,111251],{"class":50},[40,111525,4011],{"class":1283},[40,111527,111256],{"class":50},[40,111529,4011],{"class":1283},[40,111531,111261],{"class":50},[40,111533,111534,111536,111539,111541,111543],{"class":42,"line":5941},[40,111535,7965],{"class":1283},[40,111537,111538],{"class":50}," sleep_time ",[40,111540,4437],{"class":1283},[40,111542,7416],{"class":63},[40,111544,332],{"class":50},[40,111546,111547],{"class":42,"line":5946},[40,111548,111549],{"class":50},"                time.sleep(sleep_time)\n",[40,111551,111552],{"class":42,"line":11270},[40,111553,1413],{"emptyLinePlaceholder":1412},[40,111555,111556],{"class":42,"line":11294},[40,111557,1413],{"emptyLinePlaceholder":1412},[40,111559,111560,111562,111564,111566,111568],{"class":42,"line":11299},[40,111561,4873],{"class":1283},[40,111563,34520],{"class":63},[40,111565,104850],{"class":1283},[40,111567,104853],{"class":94},[40,111569,332],{"class":50},[40,111571,111572],{"class":42,"line":11305},[40,111573,104860],{"class":50},[19,111575,106861],{},[31,111577,111579],{"className":27141,"code":111578,"language":27143,"meta":36,"style":36},"touch ch5_viewer.py\n",[26,111580,111581],{"__ignoreMap":36},[40,111582,111583,111585],{"class":42,"line":43},[40,111584,3165],{"class":596},[40,111586,111587],{"class":94}," ch5_viewer.py\n",[19,111589,111590],{},"离屏 Renderer 保存图片:",[31,111592,111594],{"className":33679,"code":111593,"language":2323,"meta":36,"style":36},"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",[26,111595,111596,111608,111612,111618,111628,111632,111636,111644,111649,111653,111657,111661,111665,111670,111674,111678,111682,111686,111690,111694,111698,111702,111706,111710,111714,111726,111738,111746,111771,111775,111791,111795,111799,111814,111823,111827,111841,111846,111851,111855,111867,111879,111883,111887,111899],{"__ignoreMap":36},[40,111597,111598,111600,111603,111605],{"class":42,"line":43},[40,111599,34037],{"class":1283},[40,111601,111602],{"class":50}," pathlib ",[40,111604,33692],{"class":1283},[40,111606,111607],{"class":50}," Path\n",[40,111609,111610],{"class":42,"line":54},[40,111611,1413],{"emptyLinePlaceholder":1412},[40,111613,111614,111616],{"class":42,"line":70},[40,111615,33692],{"class":1283},[40,111617,104592],{"class":50},[40,111619,111620,111622,111624,111626],{"class":42,"line":78},[40,111621,34037],{"class":1283},[40,111623,50563],{"class":63},[40,111625,50566],{"class":1283},[40,111627,50569],{"class":50},[40,111629,111630],{"class":42,"line":86},[40,111631,1413],{"emptyLinePlaceholder":1412},[40,111633,111634],{"class":42,"line":100},[40,111635,1413],{"emptyLinePlaceholder":1412},[40,111637,111638,111640,111642],{"class":42,"line":108},[40,111639,104605],{"class":63},[40,111641,16886],{"class":1283},[40,111643,104610],{"class":94},[40,111645,111646],{"class":42,"line":121},[40,111647,111648],{"class":94},"\u003Cmujoco model=\"renderer_demo\">\n",[40,111650,111651],{"class":42,"line":134},[40,111652,104620],{"class":94},[40,111654,111655],{"class":42,"line":146},[40,111656,1413],{"emptyLinePlaceholder":1412},[40,111658,111659],{"class":42,"line":154},[40,111660,104629],{"class":94},[40,111662,111663],{"class":42,"line":162},[40,111664,111378],{"class":94},[40,111666,111667],{"class":42,"line":170},[40,111668,111669],{"class":94},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[40,111671,111672],{"class":42,"line":183},[40,111673,111383],{"class":94},[40,111675,111676],{"class":42,"line":196},[40,111677,1413],{"emptyLinePlaceholder":1412},[40,111679,111680],{"class":42,"line":204},[40,111681,104643],{"class":94},[40,111683,111684],{"class":42,"line":217},[40,111685,104648],{"class":94},[40,111687,111688],{"class":42,"line":230},[40,111689,111400],{"class":94},[40,111691,111692],{"class":42,"line":238},[40,111693,104658],{"class":94},[40,111695,111696],{"class":42,"line":251},[40,111697,104663],{"class":94},[40,111699,111700],{"class":42,"line":264},[40,111701,104668],{"class":94},[40,111703,111704],{"class":42,"line":277},[40,111705,98993],{"class":94},[40,111707,111708],{"class":42,"line":290},[40,111709,1413],{"emptyLinePlaceholder":1412},[40,111711,111712],{"class":42,"line":298},[40,111713,1413],{"emptyLinePlaceholder":1412},[40,111715,111716,111718,111720,111722,111724],{"class":42,"line":310},[40,111717,35247],{"class":1283},[40,111719,5299],{"class":596},[40,111721,104689],{"class":50},[40,111723,98981],{"class":63},[40,111725,332],{"class":50},[40,111727,111728,111730,111732,111734,111736],{"class":42,"line":5086},[40,111729,104698],{"class":50},[40,111731,1284],{"class":1283},[40,111733,104703],{"class":50},[40,111735,104605],{"class":63},[40,111737,1811],{"class":50},[40,111739,111740,111742,111744],{"class":42,"line":5091},[40,111741,104712],{"class":50},[40,111743,1284],{"class":1283},[40,111745,104717],{"class":50},[40,111747,111748,111751,111753,111755,111757,111759,111761,111763,111765,111767,111769],{"class":42,"line":5105},[40,111749,111750],{"class":50},"    renderer ",[40,111752,1284],{"class":1283},[40,111754,111165],{"class":50},[40,111756,28296],{"class":8539},[40,111758,1284],{"class":1283},[40,111760,45642],{"class":63},[40,111762,15757],{"class":50},[40,111764,28292],{"class":8539},[40,111766,1284],{"class":1283},[40,111768,111180],{"class":63},[40,111770,1811],{"class":50},[40,111772,111773],{"class":42,"line":5110},[40,111774,1413],{"emptyLinePlaceholder":1412},[40,111776,111777,111779,111781,111783,111785,111787,111789],{"class":42,"line":5902},[40,111778,6525],{"class":1283},[40,111780,104792],{"class":50},[40,111782,29355],{"class":1283},[40,111784,35743],{"class":63},[40,111786,3488],{"class":50},[40,111788,3791],{"class":63},[40,111790,34086],{"class":50},[40,111792,111793],{"class":42,"line":5916},[40,111794,104807],{"class":50},[40,111796,111797],{"class":42,"line":5924},[40,111798,1413],{"emptyLinePlaceholder":1412},[40,111800,111801,111804,111807,111809,111812],{"class":42,"line":5929},[40,111802,111803],{"class":50},"    renderer.update_scene(data, ",[40,111805,111806],{"class":8539},"camera",[40,111808,1284],{"class":1283},[40,111810,111811],{"class":94},"\"fixed_camera\"",[40,111813,1811],{"class":50},[40,111815,111816,111819,111821],{"class":42,"line":5935},[40,111817,111818],{"class":50},"    image ",[40,111820,1284],{"class":1283},[40,111822,110876],{"class":50},[40,111824,111825],{"class":42,"line":5941},[40,111826,1413],{"emptyLinePlaceholder":1412},[40,111828,111829,111832,111834,111837,111839],{"class":42,"line":5946},[40,111830,111831],{"class":50},"    output_path ",[40,111833,1284],{"class":1283},[40,111835,111836],{"class":50}," Path(",[40,111838,111306],{"class":94},[40,111840,1811],{"class":50},[40,111842,111843],{"class":42,"line":11270},[40,111844,111845],{"class":50},"    Image.fromarray(image).save(output_path)\n",[40,111847,111848],{"class":42,"line":11294},[40,111849,111850],{"class":50},"    renderer.close()\n",[40,111852,111853],{"class":42,"line":11299},[40,111854,1413],{"emptyLinePlaceholder":1412},[40,111856,111857,111859,111861,111864],{"class":42,"line":11305},[40,111858,34599],{"class":63},[40,111860,3488],{"class":50},[40,111862,111863],{"class":94},"\"saved:\"",[40,111865,111866],{"class":50},", output_path.resolve())\n",[40,111868,111869,111871,111873,111876],{"class":42,"line":11332},[40,111870,34599],{"class":63},[40,111872,3488],{"class":50},[40,111874,111875],{"class":94},"\"image shape:\"",[40,111877,111878],{"class":50},", image.shape)\n",[40,111880,111881],{"class":42,"line":11337},[40,111882,1413],{"emptyLinePlaceholder":1412},[40,111884,111885],{"class":42,"line":11343},[40,111886,1413],{"emptyLinePlaceholder":1412},[40,111888,111889,111891,111893,111895,111897],{"class":42,"line":11355},[40,111890,4873],{"class":1283},[40,111892,34520],{"class":63},[40,111894,104850],{"class":1283},[40,111896,104853],{"class":94},[40,111898,332],{"class":50},[40,111900,111901],{"class":42,"line":11367},[40,111902,104860],{"class":50},[19,111904,106861],{},[31,111906,111908],{"className":27141,"code":111907,"language":27143,"meta":36,"style":36},"touch ch5_renderer.py\n",[26,111909,111910],{"__ignoreMap":36},[40,111911,111912,111914],{"class":42,"line":43},[40,111913,3165],{"class":596},[40,111915,111916],{"class":94}," ch5_renderer.py\n",[402,111918,104863],{"id":104863},[19,111920,111921],{},"viewer 上下文：",[31,111923,111925],{"className":33679,"code":111924,"language":2323,"meta":36,"style":36},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[26,111926,111927],{"__ignoreMap":36},[40,111928,111929,111931,111933,111935],{"class":42,"line":43},[40,111930,111124],{"class":1283},[40,111932,111127],{"class":50},[40,111934,34683],{"class":1283},[40,111936,111132],{"class":50},[19,111938,111939,111941],{},[26,111940,111124],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,111943,111944],{},"窗口循环：",[31,111946,111948],{"className":33679,"code":111947,"language":2323,"meta":36,"style":36},"while viewer.is_running() and data.time \u003C 5.0:\n",[26,111949,111950],{"__ignoreMap":36},[40,111951,111952,111955,111957,111959,111961,111963,111965],{"class":42,"line":43},[40,111953,111954],{"class":1283},"while",[40,111956,111478],{"class":50},[40,111958,33762],{"class":1283},[40,111960,111483],{"class":50},[40,111962,4387],{"class":1283},[40,111964,111488],{"class":63},[40,111966,332],{"class":50},[19,111968,111969],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,111971,111972],{},"固定相机：",[31,111974,111976],{"className":56365,"code":111975,"language":56367,"meta":36,"style":36},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[26,111977,111978],{"__ignoreMap":36},[40,111979,111980,111982,111984,111986,111988,111990,111992,111994,111997,112000,112002,112005],{"class":42,"line":43},[40,111981,4387],{"class":50},[40,111983,111806],{"class":46},[40,111985,18242],{"class":596},[40,111987,1284],{"class":50},[40,111989,111811],{"class":94},[40,111991,104400],{"class":596},[40,111993,1284],{"class":50},[40,111995,111996],{"class":94},"\"1.5 -2.0 1.2\"",[40,111998,111999],{"class":596}," xyaxes",[40,112001,1284],{"class":50},[40,112003,112004],{"class":94},"\"1 0.75 0 0 0 1\"",[40,112006,104438],{"class":50},[19,112008,112009],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[402,112011,112013],{"id":112012},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[31,112015,112017],{"className":33679,"code":112016,"language":2323,"meta":36,"style":36},"import time\n",[26,112018,112019],{"__ignoreMap":36},[40,112020,112021,112023],{"class":42,"line":43},[40,112022,33692],{"class":1283},[40,112024,35129],{"class":50},[19,112026,112027],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[31,112029,112031],{"className":33679,"code":112030,"language":2323,"meta":36,"style":36},"import mujoco\nimport mujoco.viewer\n",[26,112032,112033,112039],{"__ignoreMap":36},[40,112034,112035,112037],{"class":42,"line":43},[40,112036,33692],{"class":1283},[40,112038,104592],{"class":50},[40,112040,112041,112043],{"class":42,"line":54},[40,112042,33692],{"class":1283},[40,112044,110843],{"class":50},[19,112046,112047],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[31,112049,112050],{"className":33679,"code":111924,"language":2323,"meta":36,"style":36},[26,112051,112052],{"__ignoreMap":36},[40,112053,112054,112056,112058,112060],{"class":42,"line":43},[40,112055,111124],{"class":1283},[40,112057,111127],{"class":50},[40,112059,34683],{"class":1283},[40,112061,111132],{"class":50},[19,112063,112064,112065,112068],{},"打开一个 viewer 窗口。",[26,112066,112067],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[31,112070,112071],{"className":33679,"code":111947,"language":2323,"meta":36,"style":36},[26,112072,112073],{"__ignoreMap":36},[40,112074,112075,112077,112079,112081,112083,112085,112087],{"class":42,"line":43},[40,112076,111954],{"class":1283},[40,112078,111478],{"class":50},[40,112080,33762],{"class":1283},[40,112082,111483],{"class":50},[40,112084,4387],{"class":1283},[40,112086,111488],{"class":63},[40,112088,332],{"class":50},[19,112090,112091,112092,112095],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[26,112093,112094],{},"viewer.is_running()"," 会变成 false，循环结束。",[31,112097,112099],{"className":33679,"code":112098,"language":2323,"meta":36,"style":36},"step_start = time.time()\n",[26,112100,112101],{"__ignoreMap":36},[40,112102,112103,112106,112108],{"class":42,"line":43},[40,112104,112105],{"class":50},"step_start ",[40,112107,1284],{"class":1283},[40,112109,111500],{"class":50},[19,112111,112112],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[31,112114,112115],{"className":33679,"code":111209,"language":2323,"meta":36,"style":36},[26,112116,112117,112121],{"__ignoreMap":36},[40,112118,112119],{"class":42,"line":43},[40,112120,107796],{"class":50},[40,112122,112123],{"class":42,"line":54},[40,112124,111220],{"class":50},[19,112126,112127,112129,112130,112132,112133,112135,112136,112139],{},[26,112128,104509],{}," 推进物理仿真。",[26,112131,111228],{}," 把最新的 ",[26,112134,36701],{}," 同步到窗口里显示。没有 ",[26,112137,112138],{},"sync()","，窗口可能看不到最新状态。",[31,112141,112142],{"className":33679,"code":111239,"language":2323,"meta":36,"style":36},[26,112143,112144],{"__ignoreMap":36},[40,112145,112146,112148,112150,112152,112154,112156,112158],{"class":42,"line":43},[40,112147,111246],{"class":50},[40,112149,1284],{"class":1283},[40,112151,111251],{"class":50},[40,112153,4011],{"class":1283},[40,112155,111256],{"class":50},[40,112157,4011],{"class":1283},[40,112159,111261],{"class":50},[19,112161,112162],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[31,112164,112166],{"className":33679,"code":112165,"language":2323,"meta":36,"style":36},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[26,112167,112168,112180],{"__ignoreMap":36},[40,112169,112170,112172,112174,112176,112178],{"class":42,"line":43},[40,112171,4873],{"class":1283},[40,112173,111538],{"class":50},[40,112175,4437],{"class":1283},[40,112177,7416],{"class":63},[40,112179,332],{"class":50},[40,112181,112182],{"class":42,"line":54},[40,112183,112184],{"class":50},"    time.sleep(sleep_time)\n",[19,112186,112187],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[402,112189,112191],{"id":112190},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[31,112193,112195],{"className":33679,"code":112194,"language":2323,"meta":36,"style":36},"from pathlib import Path\n",[26,112196,112197],{"__ignoreMap":36},[40,112198,112199,112201,112203,112205],{"class":42,"line":43},[40,112200,34037],{"class":1283},[40,112202,111602],{"class":50},[40,112204,33692],{"class":1283},[40,112206,111607],{"class":50},[19,112208,112209,112210,112213,112214,112217],{},"导入 ",[26,112211,112212],{},"Path","，用来处理文件路径。相比直接写字符串，",[26,112215,112216],{},"Path(\"render_output.png\")"," 更清晰。",[31,112219,112221],{"className":33679,"code":112220,"language":2323,"meta":36,"style":36},"from PIL import Image\n",[26,112222,112223],{"__ignoreMap":36},[40,112224,112225,112227,112229,112231],{"class":42,"line":43},[40,112226,34037],{"class":1283},[40,112228,50563],{"class":63},[40,112230,50566],{"class":1283},[40,112232,50569],{"class":50},[19,112234,112235],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[31,112237,112238],{"className":56365,"code":111975,"language":56367,"meta":36,"style":36},[26,112239,112240],{"__ignoreMap":36},[40,112241,112242,112244,112246,112248,112250,112252,112254,112256,112258,112260,112262,112264],{"class":42,"line":43},[40,112243,4387],{"class":50},[40,112245,111806],{"class":46},[40,112247,18242],{"class":596},[40,112249,1284],{"class":50},[40,112251,111811],{"class":94},[40,112253,104400],{"class":596},[40,112255,1284],{"class":50},[40,112257,111996],{"class":94},[40,112259,111999],{"class":596},[40,112261,1284],{"class":50},[40,112263,112004],{"class":94},[40,112265,104438],{"class":50},[19,112267,112268,112269,112271,112272,112274,112275,112278,112279,112281],{},"定义一个相机。",[26,112270,83105],{}," 是相机名字。",[26,112273,107437],{}," 是相机在世界里的位置。",[26,112276,112277],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[26,112280,107437],{}," 来调视角。",[31,112283,112285],{"className":33679,"code":112284,"language":2323,"meta":36,"style":36},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[26,112286,112287],{"__ignoreMap":36},[40,112288,112289,112291,112293,112295,112297,112299,112301,112303,112305,112307,112309],{"class":42,"line":43},[40,112290,110861],{"class":50},[40,112292,1284],{"class":1283},[40,112294,111165],{"class":50},[40,112296,28296],{"class":8539},[40,112298,1284],{"class":1283},[40,112300,45642],{"class":63},[40,112302,15757],{"class":50},[40,112304,28292],{"class":8539},[40,112306,1284],{"class":1283},[40,112308,111180],{"class":63},[40,112310,1811],{"class":50},[19,112312,112313,112314,104312,112316,112318],{},"创建离屏渲染器。",[26,112315,28296],{},[26,112317,28292],{}," 决定输出图片大小。",[31,112320,112321],{"className":33679,"code":104967,"language":2323,"meta":36,"style":36},[26,112322,112323,112339],{"__ignoreMap":36},[40,112324,112325,112327,112329,112331,112333,112335,112337],{"class":42,"line":43},[40,112326,6349],{"class":1283},[40,112328,104792],{"class":50},[40,112330,29355],{"class":1283},[40,112332,35743],{"class":63},[40,112334,3488],{"class":50},[40,112336,3791],{"class":63},[40,112338,34086],{"class":50},[40,112340,112341],{"class":42,"line":54},[40,112342,104990],{"class":50},[19,112344,112345],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[31,112347,112349],{"className":33679,"code":112348,"language":2323,"meta":36,"style":36},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[26,112350,112351],{"__ignoreMap":36},[40,112352,112353,112356,112358,112360,112362],{"class":42,"line":43},[40,112354,112355],{"class":50},"renderer.update_scene(data, ",[40,112357,111806],{"class":8539},[40,112359,1284],{"class":1283},[40,112361,111811],{"class":94},[40,112363,1811],{"class":50},[19,112365,112366,112367,112369,112370,112373],{},"告诉 renderer：用当前 ",[26,112368,36701],{}," 的状态更新画面，并使用名为 ",[26,112371,112372],{},"fixed_camera"," 的相机视角。",[31,112375,112376],{"className":33679,"code":111271,"language":2323,"meta":36,"style":36},[26,112377,112378],{"__ignoreMap":36},[40,112379,112380,112382,112384],{"class":42,"line":43},[40,112381,110871],{"class":50},[40,112383,1284],{"class":1283},[40,112385,110876],{"class":50},[19,112387,112388,112389,112392],{},"真正渲染出图像。",[26,112390,112391],{},"image"," 是一个 NumPy 数组，不是文件。",[31,112394,112396],{"className":33679,"code":112395,"language":2323,"meta":36,"style":36},"Image.fromarray(image).save(output_path)\n",[26,112397,112398],{"__ignoreMap":36},[40,112399,112400],{"class":42,"line":43},[40,112401,112395],{"class":50},[19,112403,112404,112405,776],{},"把数组转换成图片，并保存到 ",[26,112406,112407],{},"render_output.png",[31,112409,112411],{"className":33679,"code":112410,"language":2323,"meta":36,"style":36},"renderer.close()\n",[26,112412,112413],{"__ignoreMap":36},[40,112414,112415],{"class":42,"line":43},[40,112416,112410],{"class":50},[19,112418,112419],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,112421,105607],{"id":105606},[19,112423,112424,112425,112427,112428,776],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[26,112426,112407],{},"，并输出图像数组形状，例如 ",[26,112429,112430],{},"(480, 640, 3)",[19,112432,112433],{},"如果图片里看不到方块，先检查：",[492,112435,112436,112439,112442],{},[495,112437,112438],{},"方块是否掉到相机视野外。",[495,112440,112441],{},"camera 位置是否合理。",[495,112443,112444,112445,112448],{},"是否在 ",[26,112446,112447],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,112450,105639],{"id":105638},[19,112452,112453],{},"运行 viewer:",[31,112455,112457],{"className":27141,"code":112456,"language":27143,"meta":36,"style":36},"python ch5_viewer.py\n",[26,112458,112459],{"__ignoreMap":36},[40,112460,112461,112463],{"class":42,"line":43},[40,112462,2323],{"class":596},[40,112464,111587],{"class":94},[19,112466,112467],{},"运行 renderer:",[31,112469,112471],{"className":27141,"code":112470,"language":27143,"meta":36,"style":36},"python ch5_renderer.py\n",[26,112472,112473],{"__ignoreMap":36},[40,112474,112475,112477],{"class":42,"line":43},[40,112476,2323],{"class":596},[40,112478,111916],{"class":94},[19,112480,112481],{},"如果在服务器上运行:",[31,112483,112485],{"className":27141,"code":112484,"language":27143,"meta":36,"style":36},"MUJOCO_GL=egl python ch5_renderer.py\n",[26,112486,112487],{"__ignoreMap":36},[40,112488,112489,112491,112493,112495,112498],{"class":42,"line":43},[40,112490,111105],{"class":50},[40,112492,1284],{"class":1283},[40,112494,111095],{"class":94},[40,112496,112497],{"class":596}," python",[40,112499,111916],{"class":94},[19,112501,111073],{},[31,112503,112505],{"className":27141,"code":112504,"language":27143,"meta":36,"style":36},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[26,112506,112507],{"__ignoreMap":36},[40,112508,112509,112511,112513,112515,112517],{"class":42,"line":43},[40,112510,111105],{"class":50},[40,112512,1284],{"class":1283},[40,112514,111099],{"class":94},[40,112516,112497],{"class":596},[40,112518,111916],{"class":94},[19,112520,112521],{},"再做几个练习：",[492,112523,112524,112531,112534,112540],{},[495,112525,112526,112527,112530],{},"把 renderer 分辨率改成 ",[26,112528,112529],{},"height=240, width=320","，观察输出 shape。",[495,112532,112533],{},"把方块颜色改成蓝色，重新保存图片。",[495,112535,112536,112537,112539],{},"把相机 ",[26,112538,107437],{}," 改远一点，观察画面中物体是否变小。",[495,112541,112542,112543,105705,112546,112549],{},"把 viewer 示例中的 ",[26,112544,112545],{},"data.time \u003C 5.0",[26,112547,112548],{},"data.time \u003C 20.0","，观察更长时间。",[14,112551,105744],{"id":105743},[402,112553,112555],{"id":112554},"viewer-窗口打不开","viewer 窗口打不开",[19,112557,112558],{},"安装:",[31,112560,112562],{"className":27141,"code":112561,"language":27143,"meta":36,"style":36},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[26,112563,112564],{"__ignoreMap":36},[40,112565,112566,112568,112570,112572,112574,112576,112578,112580,112582,112584,112586],{"class":42,"line":43},[40,112567,923],{"class":596},[40,112569,29625],{"class":94},[40,112571,929],{"class":94},[40,112573,29710],{"class":63},[40,112575,105797],{"class":94},[40,112577,104129],{"class":94},[40,112579,105802],{"class":94},[40,112581,104142],{"class":94},[40,112583,104148],{"class":94},[40,112585,104139],{"class":94},[40,112587,112588],{"class":94}," libXinerama\n",[402,112590,112592],{"id":112591},"glfwerror",[26,112593,112594],{},"GLFWError",[19,112596,112597],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[402,112599,112601],{"id":112600},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,112603,112604,112605,85834,112607,112609],{},"尝试 ",[26,112606,104331],{},[26,112608,104334],{},"。可能存在版本差异。",[402,112611,112612],{"id":112612},"保存图片是黑的",[19,112614,105866],{},[492,112616,112617,112620,112623,112633],{},[495,112618,112619],{},"XML 里是否有 light。",[495,112621,112622],{},"相机是否对着模型。",[495,112624,112625,112626,112629,112630,776],{},"是否先 ",[26,112627,112628],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[26,112631,112632],{},"renderer.render()",[495,112634,112635],{},"物体是否已经掉出视野。",[402,112637,112638],{"id":112638},"远程服务器没有显示器",[19,112640,112641],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[31,112643,112644],{"className":27141,"code":112484,"language":27143,"meta":36,"style":36},[26,112645,112646],{"__ignoreMap":36},[40,112647,112648,112650,112652,112654,112656],{"class":42,"line":43},[40,112649,111105],{"class":50},[40,112651,1284],{"class":1283},[40,112653,111095],{"class":94},[40,112655,112497],{"class":596},[40,112657,111916],{"class":94},[19,112659,112660],{},"如果 EGL 不可用，再尝试：",[31,112662,112663],{"className":27141,"code":112504,"language":27143,"meta":36,"style":36},[26,112664,112665],{"__ignoreMap":36},[40,112666,112667,112669,112671,112673,112675],{"class":42,"line":43},[40,112668,111105],{"class":50},[40,112670,1284],{"class":1283},[40,112672,111099],{"class":94},[40,112674,112497],{"class":596},[40,112676,111916],{"class":94},[14,112678,105898],{"id":105897},[19,112680,112681],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[492,112683,112684,112687,112690],{},[495,112685,112686],{},"先用 viewer 看模型和控制是否正常。",[495,112688,112689],{},"再用 renderer 保存图片或构造视觉观测。",[495,112691,112692],{},"最后把状态、动作、图像、奖励组织成训练数据。",[3384,112694,112695],{},"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":36,"searchDepth":54,"depth":54,"links":112697},[112698,112699,112700,112705,112710,112711,112712,112719],{"id":103941,"depth":54,"text":103942},{"id":104064,"depth":54,"text":104065},{"id":104338,"depth":54,"text":104339,"children":112701},[112702,112703,112704],{"id":111202,"depth":70,"text":111203},{"id":111232,"depth":70,"text":111233},{"id":111267,"depth":70,"text":111268},{"id":104546,"depth":54,"text":104547,"children":112706},[112707,112708,112709],{"id":104863,"depth":70,"text":104863},{"id":112012,"depth":70,"text":112013},{"id":112190,"depth":70,"text":112191},{"id":105606,"depth":54,"text":105607},{"id":105638,"depth":54,"text":105639},{"id":105743,"depth":54,"text":105744,"children":112713},[112714,112715,112716,112717,112718],{"id":112554,"depth":70,"text":112555},{"id":112591,"depth":70,"text":112594},{"id":112600,"depth":70,"text":112601},{"id":112612,"depth":70,"text":112612},{"id":112638,"depth":70,"text":112638},{"id":105897,"depth":54,"text":105898},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":110810,"description":36},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":112726,"title":112727,"body":112728,"description":36,"extension":3414,"meta":114639,"navigation":1412,"path":114640,"seo":114641,"stem":114642,"__hash__":114643},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":112729,"toc":114615},[112730,112733,112735,112738,112740,112759,112762,112768,112771,112773,112775,112799,112801,112815,112817,112858,112860,112871,112873,112876,112882,112885,112919,112922,112954,112957,112989,112993,112996,113036,113039,113045,113048,113054,113058,113061,113067,113070,113074,113077,113117,113119,113132,113135,113137,113719,113721,113733,113736,113747,113749,113752,113771,113783,113786,113807,113810,113813,113856,113859,113862,113882,113889,113891,113909,113924,113927,113933,113936,113942,113959,113966,113997,114008,114042,114053,114070,114079,114087,114092,114106,114109,114130,114136,114150,114155,114185,114195,114220,114228,114251,114254,114270,114273,114281,114287,114309,114322,114343,114352,114391,114402,114404,114407,114413,114416,114419,114425,114428,114448,114451,114453,114492,114494,114497,114505,114508,114511,114538,114541,114551,114557,114560,114566,114568,114574,114578,114581,114583,114586,114610,114613],[10,112731,112727],{"id":112732},"_6控制任务cartpole",[14,112734,103942],{"id":103941},[19,112736,112737],{},"本章搭建一个最小 Cartpole 控制任务。",[19,112739,107622],{},[492,112741,112742,112745,112747,112750,112753,112756],{},[495,112743,112744],{},"slide joint",[495,112746,109475],{},[495,112748,112749],{},"cart force actuator",[495,112751,112752],{},"状态观测",[495,112754,112755],{},"简单控制循环",[495,112757,112758],{},"reward 设计雏形",[19,112760,112761],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[31,112763,112766],{"className":112764,"code":112765,"language":8510,"meta":36},[8508],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[26,112767,112765],{"__ignoreMap":36},[19,112769,112770],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,112772,104065],{"id":104064},[19,112774,104068],{},[31,112776,112777],{"className":27141,"code":107679,"language":27143,"meta":36,"style":36},[26,112778,112779],{"__ignoreMap":36},[40,112780,112781,112783,112785,112787,112789,112791,112793,112795,112797],{"class":42,"line":43},[40,112782,923],{"class":596},[40,112784,29625],{"class":94},[40,112786,929],{"class":94},[40,112788,29710],{"class":63},[40,112790,107694],{"class":94},[40,112792,104093],{"class":94},[40,112794,105792],{"class":94},[40,112796,104109],{"class":94},[40,112798,107703],{"class":94},[19,112800,106110],{},[31,112802,112803],{"className":27141,"code":104213,"language":27143,"meta":36,"style":36},[26,112804,112805],{"__ignoreMap":36},[40,112806,112807,112809,112811,112813],{"class":42,"line":43},[40,112808,27150],{"class":596},[40,112810,929],{"class":94},[40,112812,104224],{"class":94},[40,112814,104227],{"class":94},[19,112816,106127],{},[31,112818,112820],{"className":27141,"code":112819,"language":27143,"meta":36,"style":36},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[26,112821,112822,112839,112848],{"__ignoreMap":36},[40,112823,112824,112826,112828,112830,112833,112835,112837],{"class":42,"line":43},[40,112825,33631],{"class":596},[40,112827,32479],{"class":94},[40,112829,1805],{"class":63},[40,112831,112832],{"class":94}," mujoco-cartpole",[40,112834,104269],{"class":94},[40,112836,104272],{"class":63},[40,112838,104275],{"class":63},[40,112840,112841,112843,112845],{"class":42,"line":54},[40,112842,33631],{"class":596},[40,112844,104282],{"class":94},[40,112846,112847],{"class":94}," mujoco-cartpole\n",[40,112849,112850,112852,112854,112856],{"class":42,"line":70},[40,112851,27150],{"class":596},[40,112853,929],{"class":94},[40,112855,104224],{"class":94},[40,112857,104227],{"class":94},[19,112859,104298],{},[492,112861,112862,112865,112868],{},[495,112863,112864],{},"本章不依赖 Gymnasium。",[495,112866,112867],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[495,112869,112870],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,112872,104339],{"id":104338},[19,112874,112875],{},"Cartpole 的模型结构:",[31,112877,112880],{"className":112878,"code":112879,"language":8510,"meta":36},[8508],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[26,112881,112879],{"__ignoreMap":36},[19,112883,112884],{},"小车通过 slide joint 左右移动:",[31,112886,112888],{"className":56365,"code":112887,"language":56367,"meta":36,"style":36},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[26,112889,112890],{"__ignoreMap":36},[40,112891,112892,112894,112896,112898,112900,112903,112905,112907,112910,112912,112914,112917],{"class":42,"line":43},[40,112893,4387],{"class":50},[40,112895,106247],{"class":46},[40,112897,18242],{"class":596},[40,112899,1284],{"class":50},[40,112901,112902],{"class":94},"\"cart_x\"",[40,112904,57122],{"class":596},[40,112906,1284],{"class":50},[40,112908,112909],{"class":94},"\"slide\"",[40,112911,109319],{"class":596},[40,112913,1284],{"class":50},[40,112915,112916],{"class":94},"\"1 0 0\"",[40,112918,104438],{"class":50},[19,112920,112921],{},"杆子通过 hinge joint 旋转:",[31,112923,112925],{"className":56365,"code":112924,"language":56367,"meta":36,"style":36},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[26,112926,112927],{"__ignoreMap":36},[40,112928,112929,112931,112933,112935,112937,112940,112942,112944,112946,112948,112950,112952],{"class":42,"line":43},[40,112930,4387],{"class":50},[40,112932,106247],{"class":46},[40,112934,18242],{"class":596},[40,112936,1284],{"class":50},[40,112938,112939],{"class":94},"\"pole_hinge\"",[40,112941,57122],{"class":596},[40,112943,1284],{"class":50},[40,112945,109310],{"class":94},[40,112947,109319],{"class":596},[40,112949,1284],{"class":50},[40,112951,109324],{"class":94},[40,112953,104438],{"class":50},[19,112955,112956],{},"控制力作用在小车 slide joint 上:",[31,112958,112960],{"className":56365,"code":112959,"language":56367,"meta":36,"style":36},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[26,112961,112962],{"__ignoreMap":36},[40,112963,112964,112966,112968,112970,112972,112975,112977,112979,112981,112983,112985,112987],{"class":42,"line":43},[40,112965,4387],{"class":50},[40,112967,109365],{"class":46},[40,112969,18242],{"class":596},[40,112971,1284],{"class":50},[40,112973,112974],{"class":94},"\"cart_motor\"",[40,112976,109375],{"class":596},[40,112978,1284],{"class":50},[40,112980,112902],{"class":94},[40,112982,109382],{"class":596},[40,112984,1284],{"class":50},[40,112986,57614],{"class":94},[40,112988,104438],{"class":50},[402,112990,112992],{"id":112991},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,112994,112995],{},"这个简化模型有两个关节：",[3619,112997,112998,113009],{},[3622,112999,113000],{},[3625,113001,113002,113004,113006],{},[3628,113003,106050],{"align":27055},[3628,113005,27056],{"align":27055},[3628,113007,113008],{"align":27055},"对应状态",[3665,113010,113011,113024],{},[3625,113012,113013,113018,113021],{},[3670,113014,113015],{"align":27055},[26,113016,113017],{},"cart_x",[3670,113019,113020],{"align":27055},"slide",[3670,113022,113023],{"align":27055},"小车 x 位置",[3625,113025,113026,113031,113033],{},[3670,113027,113028],{"align":27055},[26,113029,113030],{},"pole_hinge",[3670,113032,109131],{"align":27055},[3670,113034,113035],{"align":27055},"杆子角度",[19,113037,113038],{},"所以：",[31,113040,113043],{"className":113041,"code":113042,"language":8510,"meta":36},[8508],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[26,113044,113042],{"__ignoreMap":36},[19,113046,113047],{},"把它们拼起来就是观测：",[31,113049,113052],{"className":113050,"code":113051,"language":8510,"meta":36},[8508],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[26,113053,113051],{"__ignoreMap":36},[402,113055,113057],{"id":113056},"action-是什么","action 是什么",[19,113059,113060],{},"本章只有一个 actuator：",[31,113062,113065],{"className":113063,"code":113064,"language":8510,"meta":36},[8508],"data.ctrl[0] = action\n",[26,113066,113064],{"__ignoreMap":36},[19,113068,113069],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[402,113071,113073],{"id":113072},"reward-是什么","reward 是什么",[19,113075,113076],{},"奖励函数：",[31,113078,113080],{"className":33679,"code":113079,"language":2323,"meta":36,"style":36},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[26,113081,113082],{"__ignoreMap":36},[40,113083,113084,113086,113089,113091,113093,113095,113098,113100,113103,113105,113107,113109,113112,113114],{"class":42,"line":43},[40,113085,20368],{"class":1283},[40,113087,113088],{"class":63}," float",[40,113090,3488],{"class":50},[40,113092,105694],{"class":63},[40,113094,55569],{"class":1283},[40,113096,113097],{"class":63}," 0.1",[40,113099,9841],{"class":1283},[40,113101,113102],{"class":50}," cart_x ",[40,113104,3934],{"class":1283},[40,113106,113102],{"class":50},[40,113108,4011],{"class":1283},[40,113110,113111],{"class":50}," pole_angle ",[40,113113,3934],{"class":1283},[40,113115,113116],{"class":50}," pole_angle)\n",[19,113118,109517],{},[492,113120,113121,113126,113129],{},[495,113122,113123,113124,776],{},"基础奖励是 ",[26,113125,105694],{},[495,113127,113128],{},"小车离中心越远，扣分越多。",[495,113130,113131],{},"杆子角度越大，扣分越多。",[19,113133,113134],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,113136,104547],{"id":104546},[31,113138,113140],{"className":33679,"code":113139,"language":2323,"meta":36,"style":36},"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",[26,113141,113142,113148,113158,113162,113166,113174,113179,113183,113187,113191,113196,113200,113205,113210,113215,113219,113224,113229,113234,113238,113242,113246,113250,113254,113259,113263,113267,113271,113275,113279,113289,113296,113300,113304,113318,113332,113345,113375,113379,113383,113395,113407,113415,113419,113432,113436,113440,113449,113453,113469,113479,113492,113505,113509,113532,113550,113554,113566,113570,113574,113584,113594,113598,113614,113655,113659,113679,113695,113699,113703,113715],{"__ignoreMap":36},[40,113143,113144,113146],{"class":42,"line":43},[40,113145,33692],{"class":1283},[40,113147,104592],{"class":50},[40,113149,113150,113152,113154,113156],{"class":42,"line":54},[40,113151,33692],{"class":1283},[40,113153,34680],{"class":50},[40,113155,34683],{"class":1283},[40,113157,34686],{"class":50},[40,113159,113160],{"class":42,"line":70},[40,113161,1413],{"emptyLinePlaceholder":1412},[40,113163,113164],{"class":42,"line":78},[40,113165,1413],{"emptyLinePlaceholder":1412},[40,113167,113168,113170,113172],{"class":42,"line":86},[40,113169,104605],{"class":63},[40,113171,16886],{"class":1283},[40,113173,104610],{"class":94},[40,113175,113176],{"class":42,"line":100},[40,113177,113178],{"class":94},"\u003Cmujoco model=\"cartpole\">\n",[40,113180,113181],{"class":42,"line":108},[40,113182,104620],{"class":94},[40,113184,113185],{"class":42,"line":121},[40,113186,1413],{"emptyLinePlaceholder":1412},[40,113188,113189],{"class":42,"line":134},[40,113190,104629],{"class":94},[40,113192,113193],{"class":42,"line":146},[40,113194,113195],{"class":94},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[40,113197,113198],{"class":42,"line":154},[40,113199,1413],{"emptyLinePlaceholder":1412},[40,113201,113202],{"class":42,"line":162},[40,113203,113204],{"class":94},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[40,113206,113207],{"class":42,"line":170},[40,113208,113209],{"class":94},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[40,113211,113212],{"class":42,"line":183},[40,113213,113214],{"class":94},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[40,113216,113217],{"class":42,"line":196},[40,113218,1413],{"emptyLinePlaceholder":1412},[40,113220,113221],{"class":42,"line":204},[40,113222,113223],{"class":94},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[40,113225,113226],{"class":42,"line":217},[40,113227,113228],{"class":94},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[40,113230,113231],{"class":42,"line":230},[40,113232,113233],{"class":94},"        \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",[40,113235,113236],{"class":42,"line":238},[40,113237,109729],{"class":94},[40,113239,113240],{"class":42,"line":251},[40,113241,104658],{"class":94},[40,113243,113244],{"class":42,"line":264},[40,113245,104663],{"class":94},[40,113247,113248],{"class":42,"line":277},[40,113249,1413],{"emptyLinePlaceholder":1412},[40,113251,113252],{"class":42,"line":290},[40,113253,109746],{"class":94},[40,113255,113256],{"class":42,"line":298},[40,113257,113258],{"class":94},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[40,113260,113261],{"class":42,"line":310},[40,113262,109756],{"class":94},[40,113264,113265],{"class":42,"line":5086},[40,113266,104668],{"class":94},[40,113268,113269],{"class":42,"line":5091},[40,113270,98993],{"class":94},[40,113272,113273],{"class":42,"line":5105},[40,113274,1413],{"emptyLinePlaceholder":1412},[40,113276,113277],{"class":42,"line":5110},[40,113278,1413],{"emptyLinePlaceholder":1412},[40,113280,113281,113283,113286],{"class":42,"line":5902},[40,113282,35247],{"class":1283},[40,113284,113285],{"class":596}," get_observation",[40,113287,113288],{"class":50},"(data: mujoco.MjData) -> np.ndarray:\n",[40,113290,113291,113293],{"class":42,"line":5916},[40,113292,7413],{"class":1283},[40,113294,113295],{"class":50}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[40,113297,113298],{"class":42,"line":5924},[40,113299,1413],{"emptyLinePlaceholder":1412},[40,113301,113302],{"class":42,"line":5929},[40,113303,1413],{"emptyLinePlaceholder":1412},[40,113305,113306,113308,113311,113314,113316],{"class":42,"line":5935},[40,113307,35247],{"class":1283},[40,113309,113310],{"class":596}," compute_reward",[40,113312,113313],{"class":50},"(obs: np.ndarray) -> ",[40,113315,3526],{"class":63},[40,113317,332],{"class":50},[40,113319,113320,113323,113325,113328,113330],{"class":42,"line":5941},[40,113321,113322],{"class":50},"    cart_x ",[40,113324,1284],{"class":1283},[40,113326,113327],{"class":50}," obs[",[40,113329,3672],{"class":63},[40,113331,36546],{"class":50},[40,113333,113334,113337,113339,113341,113343],{"class":42,"line":5946},[40,113335,113336],{"class":50},"    pole_angle ",[40,113338,1284],{"class":1283},[40,113340,113327],{"class":50},[40,113342,3698],{"class":63},[40,113344,36546],{"class":50},[40,113346,113347,113349,113351,113353,113355,113357,113359,113361,113363,113365,113367,113369,113371,113373],{"class":42,"line":11270},[40,113348,7413],{"class":1283},[40,113350,113088],{"class":63},[40,113352,3488],{"class":50},[40,113354,105694],{"class":63},[40,113356,55569],{"class":1283},[40,113358,113097],{"class":63},[40,113360,9841],{"class":1283},[40,113362,113102],{"class":50},[40,113364,3934],{"class":1283},[40,113366,113102],{"class":50},[40,113368,4011],{"class":1283},[40,113370,113111],{"class":50},[40,113372,3934],{"class":1283},[40,113374,113116],{"class":50},[40,113376,113377],{"class":42,"line":11294},[40,113378,1413],{"emptyLinePlaceholder":1412},[40,113380,113381],{"class":42,"line":11299},[40,113382,1413],{"emptyLinePlaceholder":1412},[40,113384,113385,113387,113389,113391,113393],{"class":42,"line":11305},[40,113386,35247],{"class":1283},[40,113388,5299],{"class":596},[40,113390,104689],{"class":50},[40,113392,98981],{"class":63},[40,113394,332],{"class":50},[40,113396,113397,113399,113401,113403,113405],{"class":42,"line":11332},[40,113398,104698],{"class":50},[40,113400,1284],{"class":1283},[40,113402,104703],{"class":50},[40,113404,104605],{"class":63},[40,113406,1811],{"class":50},[40,113408,113409,113411,113413],{"class":42,"line":11337},[40,113410,104712],{"class":50},[40,113412,1284],{"class":1283},[40,113414,104717],{"class":50},[40,113416,113417],{"class":42,"line":11343},[40,113418,1413],{"emptyLinePlaceholder":1412},[40,113420,113421,113423,113425,113427,113429],{"class":42,"line":11355},[40,113422,108360],{"class":50},[40,113424,3698],{"class":63},[40,113426,7766],{"class":50},[40,113428,1284],{"class":1283},[40,113430,113431],{"class":63}," 0.1\n",[40,113433,113434],{"class":42,"line":11367},[40,113435,108373],{"class":50},[40,113437,113438],{"class":42,"line":11379},[40,113439,1413],{"emptyLinePlaceholder":1412},[40,113441,113442,113445,113447],{"class":42,"line":13038},[40,113443,113444],{"class":50},"    total_reward ",[40,113446,1284],{"class":1283},[40,113448,108052],{"class":63},[40,113450,113451],{"class":42,"line":13063},[40,113452,1413],{"emptyLinePlaceholder":1412},[40,113454,113455,113457,113459,113461,113463,113465,113467],{"class":42,"line":13086},[40,113456,6525],{"class":1283},[40,113458,34916],{"class":50},[40,113460,29355],{"class":1283},[40,113462,35743],{"class":63},[40,113464,3488],{"class":50},[40,113466,9733],{"class":63},[40,113468,34086],{"class":50},[40,113470,113471,113474,113476],{"class":42,"line":13110},[40,113472,113473],{"class":50},"        obs ",[40,113475,1284],{"class":1283},[40,113477,113478],{"class":50}," get_observation(data)\n",[40,113480,113481,113484,113486,113488,113490],{"class":42,"line":13115},[40,113482,113483],{"class":50},"        pole_angle ",[40,113485,1284],{"class":1283},[40,113487,113327],{"class":50},[40,113489,3698],{"class":63},[40,113491,36546],{"class":50},[40,113493,113494,113497,113499,113501,113503],{"class":42,"line":13120},[40,113495,113496],{"class":50},"        pole_angular_velocity ",[40,113498,1284],{"class":1283},[40,113500,113327],{"class":50},[40,113502,3555],{"class":63},[40,113504,36546],{"class":50},[40,113506,113507],{"class":42,"line":13125},[40,113508,1413],{"emptyLinePlaceholder":1412},[40,113510,113511,113514,113516,113519,113521,113523,113525,113527,113529],{"class":42,"line":13134},[40,113512,113513],{"class":50},"        action ",[40,113515,1284],{"class":1283},[40,113517,113518],{"class":63}," 2.0",[40,113520,9841],{"class":1283},[40,113522,113111],{"class":50},[40,113524,3960],{"class":1283},[40,113526,65165],{"class":63},[40,113528,9841],{"class":1283},[40,113530,113531],{"class":50}," pole_angular_velocity\n",[40,113533,113534,113536,113538,113540,113542,113544,113546,113548],{"class":42,"line":13139},[40,113535,113513],{"class":50},[40,113537,1284],{"class":1283},[40,113539,110738],{"class":50},[40,113541,4011],{"class":1283},[40,113543,105694],{"class":63},[40,113545,15757],{"class":50},[40,113547,105694],{"class":63},[40,113549,1811],{"class":50},[40,113551,113552],{"class":42,"line":13145},[40,113553,1413],{"emptyLinePlaceholder":1412},[40,113555,113556,113558,113560,113562,113564],{"class":42,"line":13166},[40,113557,109908],{"class":50},[40,113559,3672],{"class":63},[40,113561,7766],{"class":50},[40,113563,1284],{"class":1283},[40,113565,110761],{"class":50},[40,113567,113568],{"class":42,"line":13172},[40,113569,104807],{"class":50},[40,113571,113572],{"class":42,"line":13186},[40,113573,1413],{"emptyLinePlaceholder":1412},[40,113575,113576,113579,113581],{"class":42,"line":13192},[40,113577,113578],{"class":50},"        reward ",[40,113580,1284],{"class":1283},[40,113582,113583],{"class":50}," compute_reward(get_observation(data))\n",[40,113585,113586,113589,113591],{"class":42,"line":13219},[40,113587,113588],{"class":50},"        total_reward ",[40,113590,12799],{"class":1283},[40,113592,113593],{"class":50}," reward\n",[40,113595,113596],{"class":42,"line":13228},[40,113597,1413],{"emptyLinePlaceholder":1412},[40,113599,113600,113602,113604,113606,113608,113610,113612],{"class":42,"line":13234},[40,113601,5822],{"class":1283},[40,113603,34916],{"class":50},[40,113605,3808],{"class":1283},[40,113607,9077],{"class":63},[40,113609,104850],{"class":1283},[40,113611,7416],{"class":63},[40,113613,332],{"class":50},[40,113615,113616,113618,113620,113623,113626,113629,113632,113634,113637,113640,113642,113644,113646,113648,113651,113653],{"class":42,"line":13242},[40,113617,37950],{"class":63},[40,113619,3488],{"class":50},[40,113621,113622],{"class":94},"\"step:\"",[40,113624,113625],{"class":50},", step, ",[40,113627,113628],{"class":94},"\"obs:\"",[40,113630,113631],{"class":50},", np.round(obs, ",[40,113633,3555],{"class":63},[40,113635,113636],{"class":50},"), ",[40,113638,113639],{"class":94},"\"action:\"",[40,113641,15757],{"class":50},[40,113643,35318],{"class":63},[40,113645,3488],{"class":50},[40,113647,3526],{"class":63},[40,113649,113650],{"class":50},"(action), ",[40,113652,3555],{"class":63},[40,113654,33797],{"class":50},[40,113656,113657],{"class":42,"line":13247},[40,113658,1413],{"emptyLinePlaceholder":1412},[40,113660,113661,113663,113665,113668,113670,113672,113675,113677],{"class":42,"line":19926},[40,113662,34599],{"class":63},[40,113664,3488],{"class":50},[40,113666,113667],{"class":94},"\"total_reward:\"",[40,113669,15757],{"class":50},[40,113671,35318],{"class":63},[40,113673,113674],{"class":50},"(total_reward, ",[40,113676,3555],{"class":63},[40,113678,33797],{"class":50},[40,113680,113681,113683,113685,113688,113691,113693],{"class":42,"line":19932},[40,113682,34599],{"class":63},[40,113684,3488],{"class":50},[40,113686,113687],{"class":94},"\"final obs:\"",[40,113689,113690],{"class":50},", np.round(get_observation(data), ",[40,113692,3555],{"class":63},[40,113694,33797],{"class":50},[40,113696,113697],{"class":42,"line":19955},[40,113698,1413],{"emptyLinePlaceholder":1412},[40,113700,113701],{"class":42,"line":19961},[40,113702,1413],{"emptyLinePlaceholder":1412},[40,113704,113705,113707,113709,113711,113713],{"class":42,"line":19984},[40,113706,4873],{"class":1283},[40,113708,34520],{"class":63},[40,113710,104850],{"class":1283},[40,113712,104853],{"class":94},[40,113714,332],{"class":50},[40,113716,113717],{"class":42,"line":19998},[40,113718,104860],{"class":50},[19,113720,106861],{},[31,113722,113724],{"className":27141,"code":113723,"language":27143,"meta":36,"style":36},"touch ch6_cartpole.py\n",[26,113725,113726],{"__ignoreMap":36},[40,113727,113728,113730],{"class":42,"line":43},[40,113729,3165],{"class":596},[40,113731,113732],{"class":94}," ch6_cartpole.py\n",[19,113734,113735],{},"运行：",[31,113737,113739],{"className":27141,"code":113738,"language":27143,"meta":36,"style":36},"python ch6_cartpole.py\n",[26,113740,113741],{"__ignoreMap":36},[40,113742,113743,113745],{"class":42,"line":43},[40,113744,2323],{"class":596},[40,113746,113732],{"class":94},[402,113748,104863],{"id":104863},[19,113750,113751],{},"构造观测：",[31,113753,113755],{"className":33679,"code":113754,"language":2323,"meta":36,"style":36},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[26,113756,113757,113765],{"__ignoreMap":36},[40,113758,113759,113761,113763],{"class":42,"line":43},[40,113760,35247],{"class":1283},[40,113762,113285],{"class":596},[40,113764,113288],{"class":50},[40,113766,113767,113769],{"class":42,"line":54},[40,113768,7413],{"class":1283},[40,113770,113295],{"class":50},[19,113772,113773,113776,113777,113779,113780,113782],{},[26,113774,113775],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[26,113778,107321],{}," 2 维，",[26,113781,107651],{}," 2 维，所以 obs 是 4 维。",[19,113784,113785],{},"设置初始角度：",[31,113787,113789],{"className":33679,"code":113788,"language":2323,"meta":36,"style":36},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[26,113790,113791,113803],{"__ignoreMap":36},[40,113792,113793,113795,113797,113799,113801],{"class":42,"line":43},[40,113794,107990],{"class":50},[40,113796,3698],{"class":63},[40,113798,7766],{"class":50},[40,113800,1284],{"class":1283},[40,113802,113431],{"class":63},[40,113804,113805],{"class":42,"line":54},[40,113806,107834],{"class":50},[19,113808,113809],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,113811,113812],{},"简单反馈控制：",[31,113814,113816],{"className":33679,"code":113815,"language":2323,"meta":36,"style":36},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[26,113817,113818,113838],{"__ignoreMap":36},[40,113819,113820,113822,113824,113826,113828,113830,113832,113834,113836],{"class":42,"line":43},[40,113821,110733],{"class":50},[40,113823,1284],{"class":1283},[40,113825,113518],{"class":63},[40,113827,9841],{"class":1283},[40,113829,113111],{"class":50},[40,113831,3960],{"class":1283},[40,113833,65165],{"class":63},[40,113835,9841],{"class":1283},[40,113837,113531],{"class":50},[40,113839,113840,113842,113844,113846,113848,113850,113852,113854],{"class":42,"line":54},[40,113841,110733],{"class":50},[40,113843,1284],{"class":1283},[40,113845,110738],{"class":50},[40,113847,4011],{"class":1283},[40,113849,105694],{"class":63},[40,113851,15757],{"class":50},[40,113853,105694],{"class":63},[40,113855,1811],{"class":50},[19,113857,113858],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,113860,113861],{},"限制动作：",[31,113863,113865],{"className":33679,"code":113864,"language":2323,"meta":36,"style":36},"np.clip(action, -1.0, 1.0)\n",[26,113866,113867],{"__ignoreMap":36},[40,113868,113869,113872,113874,113876,113878,113880],{"class":42,"line":43},[40,113870,113871],{"class":50},"np.clip(action, ",[40,113873,4011],{"class":1283},[40,113875,105694],{"class":63},[40,113877,15757],{"class":50},[40,113879,105694],{"class":63},[40,113881,1811],{"class":50},[19,113883,113884,113885,113888],{},"因为 XML 里 ",[26,113886,113887],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[402,113890,104999],{"id":104999},[31,113892,113893],{"className":33679,"code":113754,"language":2323,"meta":36,"style":36},[26,113894,113895,113903],{"__ignoreMap":36},[40,113896,113897,113899,113901],{"class":42,"line":43},[40,113898,35247],{"class":1283},[40,113900,113285],{"class":596},[40,113902,113288],{"class":50},[40,113904,113905,113907],{"class":42,"line":54},[40,113906,7413],{"class":1283},[40,113908,113295],{"class":50},[19,113910,113911,113912,113915,113916,113919,113920,113923],{},"这段定义了一个函数，用来获取当前观测。",[26,113913,113914],{},"data.qpos.copy()"," 是位置数组副本，",[26,113917,113918],{},"data.qvel.copy()"," 是速度数组副本。",[26,113921,113922],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,113925,113926],{},"在本章模型里：",[31,113928,113931],{"className":113929,"code":113930,"language":8510,"meta":36},[8508],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[26,113932,113930],{"__ignoreMap":36},[19,113934,113935],{},"所以返回的 obs 是：",[31,113937,113940],{"className":113938,"code":113939,"language":8510,"meta":36},[8508],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[26,113941,113939],{"__ignoreMap":36},[31,113943,113945],{"className":33679,"code":113944,"language":2323,"meta":36,"style":36},"def compute_reward(obs: np.ndarray) -> float:\n",[26,113946,113947],{"__ignoreMap":36},[40,113948,113949,113951,113953,113955,113957],{"class":42,"line":43},[40,113950,35247],{"class":1283},[40,113952,113310],{"class":596},[40,113954,113313],{"class":50},[40,113956,3526],{"class":63},[40,113958,332],{"class":50},[19,113960,113961,113962,113965],{},"这行定义奖励函数。输入是观测 ",[26,113963,113964],{},"obs","，输出是一个浮点数奖励。",[31,113967,113969],{"className":33679,"code":113968,"language":2323,"meta":36,"style":36},"cart_x = obs[0]\npole_angle = obs[1]\n",[26,113970,113971,113984],{"__ignoreMap":36},[40,113972,113973,113976,113978,113980,113982],{"class":42,"line":43},[40,113974,113975],{"class":50},"cart_x ",[40,113977,1284],{"class":1283},[40,113979,113327],{"class":50},[40,113981,3672],{"class":63},[40,113983,36546],{"class":50},[40,113985,113986,113989,113991,113993,113995],{"class":42,"line":54},[40,113987,113988],{"class":50},"pole_angle ",[40,113990,1284],{"class":1283},[40,113992,113327],{"class":50},[40,113994,3698],{"class":63},[40,113996,36546],{"class":50},[19,113998,113999,114000,114003,114004,114007],{},"数组索引从 0 开始。",[26,114001,114002],{},"obs[0]"," 是第一个元素，也就是小车位置。",[26,114005,114006],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[31,114009,114010],{"className":33679,"code":113079,"language":2323,"meta":36,"style":36},[26,114011,114012],{"__ignoreMap":36},[40,114013,114014,114016,114018,114020,114022,114024,114026,114028,114030,114032,114034,114036,114038,114040],{"class":42,"line":43},[40,114015,20368],{"class":1283},[40,114017,113088],{"class":63},[40,114019,3488],{"class":50},[40,114021,105694],{"class":63},[40,114023,55569],{"class":1283},[40,114025,113097],{"class":63},[40,114027,9841],{"class":1283},[40,114029,113102],{"class":50},[40,114031,3934],{"class":1283},[40,114033,113102],{"class":50},[40,114035,4011],{"class":1283},[40,114037,113111],{"class":50},[40,114039,3934],{"class":1283},[40,114041,113116],{"class":50},[19,114043,114044,114045,114048,114049,114052],{},"这行计算奖励。",[26,114046,114047],{},"cart_x * cart_x"," 是小车位置的平方，",[26,114050,114051],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[31,114054,114056],{"className":33679,"code":114055,"language":2323,"meta":36,"style":36},"data.qpos[1] = 0.1\n",[26,114057,114058],{"__ignoreMap":36},[40,114059,114060,114062,114064,114066,114068],{"class":42,"line":43},[40,114061,107990],{"class":50},[40,114063,3698],{"class":63},[40,114065,7766],{"class":50},[40,114067,1284],{"class":1283},[40,114069,113431],{"class":63},[19,114071,114072,114073,114075,114076,114078],{},"手动设置杆子的初始角度。因为 ",[26,114074,108747],{}," 是小车位置，",[26,114077,108750],{}," 是杆子角度，所以这里改的是杆子。",[31,114080,114081],{"className":33679,"code":107834,"language":2323,"meta":36,"style":36},[26,114082,114083],{"__ignoreMap":36},[40,114084,114085],{"class":42,"line":43},[40,114086,107834],{"class":50},[19,114088,108793,114089,114091],{},[26,114090,107321],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[31,114093,114095],{"className":33679,"code":114094,"language":2323,"meta":36,"style":36},"total_reward = 0.0\n",[26,114096,114097],{"__ignoreMap":36},[40,114098,114099,114102,114104],{"class":42,"line":43},[40,114100,114101],{"class":50},"total_reward ",[40,114103,1284],{"class":1283},[40,114105,108052],{"class":63},[19,114107,114108],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[31,114110,114112],{"className":33679,"code":114111,"language":2323,"meta":36,"style":36},"for step in range(1000):\n",[26,114113,114114],{"__ignoreMap":36},[40,114115,114116,114118,114120,114122,114124,114126,114128],{"class":42,"line":43},[40,114117,6349],{"class":1283},[40,114119,34916],{"class":50},[40,114121,29355],{"class":1283},[40,114123,35743],{"class":63},[40,114125,3488],{"class":50},[40,114127,9733],{"class":63},[40,114129,34086],{"class":50},[19,114131,114132,114133,114135],{},"循环 1000 步。",[26,114134,110425],{}," 是当前步数，从 0 到 999。",[31,114137,114139],{"className":33679,"code":114138,"language":2323,"meta":36,"style":36},"obs = get_observation(data)\n",[26,114140,114141],{"__ignoreMap":36},[40,114142,114143,114146,114148],{"class":42,"line":43},[40,114144,114145],{"class":50},"obs ",[40,114147,1284],{"class":1283},[40,114149,113478],{"class":50},[19,114151,114152,114153,776],{},"读取当前状态，保存到 ",[26,114154,113964],{},[31,114156,114158],{"className":33679,"code":114157,"language":2323,"meta":36,"style":36},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[26,114159,114160,114172],{"__ignoreMap":36},[40,114161,114162,114164,114166,114168,114170],{"class":42,"line":43},[40,114163,113988],{"class":50},[40,114165,1284],{"class":1283},[40,114167,113327],{"class":50},[40,114169,3698],{"class":63},[40,114171,36546],{"class":50},[40,114173,114174,114177,114179,114181,114183],{"class":42,"line":54},[40,114175,114176],{"class":50},"pole_angular_velocity ",[40,114178,1284],{"class":1283},[40,114180,113327],{"class":50},[40,114182,3555],{"class":63},[40,114184,36546],{"class":50},[19,114186,114187,114188,114191,114192,776],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[26,114189,114190],{},"obs[3]","？因为 obs 的顺序是 ",[26,114193,114194],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[31,114196,114198],{"className":33679,"code":114197,"language":2323,"meta":36,"style":36},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[26,114199,114200],{"__ignoreMap":36},[40,114201,114202,114204,114206,114208,114210,114212,114214,114216,114218],{"class":42,"line":43},[40,114203,110733],{"class":50},[40,114205,1284],{"class":1283},[40,114207,113518],{"class":63},[40,114209,9841],{"class":1283},[40,114211,113111],{"class":50},[40,114213,3960],{"class":1283},[40,114215,65165],{"class":63},[40,114217,9841],{"class":1283},[40,114219,113531],{"class":50},[19,114221,114222,114223,104312,114225,114227],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[26,114224,108551],{},[26,114226,38629],{}," 是人为设置的系数，不是固定公式。",[31,114229,114231],{"className":33679,"code":114230,"language":2323,"meta":36,"style":36},"action = np.clip(action, -1.0, 1.0)\n",[26,114232,114233],{"__ignoreMap":36},[40,114234,114235,114237,114239,114241,114243,114245,114247,114249],{"class":42,"line":43},[40,114236,110733],{"class":50},[40,114238,1284],{"class":1283},[40,114240,110738],{"class":50},[40,114242,4011],{"class":1283},[40,114244,105694],{"class":63},[40,114246,15757],{"class":50},[40,114248,105694],{"class":63},[40,114250,1811],{"class":50},[19,114252,114253],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[31,114255,114256],{"className":33679,"code":113064,"language":2323,"meta":36,"style":36},[26,114257,114258],{"__ignoreMap":36},[40,114259,114260,114262,114264,114266,114268],{"class":42,"line":43},[40,114261,109162],{"class":50},[40,114263,3672],{"class":63},[40,114265,7766],{"class":50},[40,114267,1284],{"class":1283},[40,114269,110761],{"class":50},[19,114271,114272],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[31,114274,114275],{"className":33679,"code":107796,"language":2323,"meta":36,"style":36},[26,114276,114277],{"__ignoreMap":36},[40,114278,114279],{"class":42,"line":43},[40,114280,107796],{"class":50},[19,114282,114283,114284,114286],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[26,114285,109417],{}," 计算小车和杆子的下一刻状态。",[31,114288,114290],{"className":33679,"code":114289,"language":2323,"meta":36,"style":36},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[26,114291,114292,114301],{"__ignoreMap":36},[40,114293,114294,114297,114299],{"class":42,"line":43},[40,114295,114296],{"class":50},"reward ",[40,114298,1284],{"class":1283},[40,114300,113583],{"class":50},[40,114302,114303,114305,114307],{"class":42,"line":54},[40,114304,114101],{"class":50},[40,114306,12799],{"class":1283},[40,114308,113593],{"class":50},[19,114310,114311,114312,114314,114315,114318,114319,776],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[26,114313,12799],{}," 是简写，",[26,114316,114317],{},"total_reward += reward"," 等价于 ",[26,114320,114321],{},"total_reward = total_reward + reward",[31,114323,114325],{"className":33679,"code":114324,"language":2323,"meta":36,"style":36},"if step % 100 == 0:\n",[26,114326,114327],{"__ignoreMap":36},[40,114328,114329,114331,114333,114335,114337,114339,114341],{"class":42,"line":43},[40,114330,4873],{"class":1283},[40,114332,34916],{"class":50},[40,114334,3808],{"class":1283},[40,114336,9077],{"class":63},[40,114338,104850],{"class":1283},[40,114340,7416],{"class":63},[40,114342,332],{"class":50},[19,114344,114345,114347,114348,114351],{},[26,114346,3808],{}," 是取余数。",[26,114349,114350],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[31,114353,114355],{"className":33679,"code":114354,"language":2323,"meta":36,"style":36},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[26,114356,114357],{"__ignoreMap":36},[40,114358,114359,114361,114363,114365,114367,114369,114371,114373,114375,114377,114379,114381,114383,114385,114387,114389],{"class":42,"line":43},[40,114360,33715],{"class":63},[40,114362,3488],{"class":50},[40,114364,113622],{"class":94},[40,114366,113625],{"class":50},[40,114368,113628],{"class":94},[40,114370,113631],{"class":50},[40,114372,3555],{"class":63},[40,114374,113636],{"class":50},[40,114376,113639],{"class":94},[40,114378,15757],{"class":50},[40,114380,35318],{"class":63},[40,114382,3488],{"class":50},[40,114384,3526],{"class":63},[40,114386,113650],{"class":50},[40,114388,3555],{"class":63},[40,114390,33797],{"class":50},[19,114392,114393,114394,114397,114398,114401],{},"打印当前步数、观测和动作。",[26,114395,114396],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[26,114399,114400],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,114403,105607],{"id":105606},[19,114405,114406],{},"观测向量:",[31,114408,114411],{"className":114409,"code":114410,"language":8510,"meta":36},[8508],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[26,114412,114410],{"__ignoreMap":36},[19,114414,114415],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,114417,114418],{},"每隔 100 步会打印一次：",[31,114420,114423],{"className":114421,"code":114422,"language":8510,"meta":36},[8508],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[26,114424,114422],{"__ignoreMap":36},[19,114426,114427],{},"重点观察：",[492,114429,114430,114436,114441],{},[495,114431,114432,114435],{},[26,114433,114434],{},"pole_angle"," 是否越来越大。",[495,114437,114438,114440],{},[26,114439,113017],{}," 是否跑得太远。",[495,114442,114443,114444,85834,114446,776],{},"action 是否经常被 clip 到 ",[26,114445,107206],{},[26,114447,3698],{},[19,114449,114450],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,114452,105639],{"id":105638},[492,114454,114455,114461,114464,114470,114480,114486,114489],{},[495,114456,114457,114458,776],{},"把初始角度改为 ",[26,114459,114460],{},"data.qpos[1] = 0.3",[495,114462,114463],{},"重新运行，观察控制是否变差。",[495,114465,114466,114467,114469],{},"把 actuator ",[26,114468,110358],{}," 改小。",[495,114471,114472,114473,114476,114477,776],{},"打印 ",[26,114474,114475],{},"model.nq, model.nv, model.nu","，应为 ",[26,114478,114479],{},"2 2 1",[495,114481,114482,114483,114485],{},"把 reward 里的 ",[26,114484,114051],{}," 系数改大，观察总奖励变化。",[495,114487,114488],{},"把控制器改成反号，观察杆子是否更容易倒。",[495,114490,114491],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,114493,105744],{"id":105743},[402,114495,114496],{"id":114496},"杆子方向和预期不一致",[19,114498,105687,114499,114501,114502,114504],{},[26,114500,109530],{}," 和 capsule 的 ",[26,114503,106467],{},"，必要时用 viewer 可视化确认。",[402,114506,114507],{"id":114507},"控制器越控越倒",[19,114509,114510],{},"说明反馈符号可能反了，尝试:",[31,114512,114514],{"className":33679,"code":114513,"language":2323,"meta":36,"style":36},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[26,114515,114516],{"__ignoreMap":36},[40,114517,114518,114520,114522,114524,114526,114528,114530,114532,114534,114536],{"class":42,"line":43},[40,114519,110733],{"class":50},[40,114521,1284],{"class":1283},[40,114523,55569],{"class":1283},[40,114525,108551],{"class":63},[40,114527,9841],{"class":1283},[40,114529,113111],{"class":50},[40,114531,4011],{"class":1283},[40,114533,65165],{"class":63},[40,114535,9841],{"class":1283},[40,114537,113531],{"class":50},[402,114539,114540],{"id":114540},"小车飞走",[19,114542,114543,114544,114546,114547,114550],{},"降低 ",[26,114545,110358],{}," 或缩小 ",[26,114548,114549],{},"action"," 的 clip 范围。",[402,114552,114554,114556],{"id":114553},"obs3-为什么是杆子角速度",[26,114555,114190],{}," 为什么是杆子角速度",[19,114558,114559],{},"因为这个模型里：",[31,114561,114564],{"className":114562,"code":114563,"language":8510,"meta":36},[8508],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[26,114565,114563],{"__ignoreMap":36},[19,114567,113038],{},[31,114569,114572],{"className":114570,"code":114571,"language":8510,"meta":36},[8508],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[26,114573,114571],{"__ignoreMap":36},[402,114575,114577],{"id":114576},"reward-变成负数是否错误","reward 变成负数是否错误",[19,114579,114580],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,114582,105898],{"id":105897},[19,114584,114585],{},"一个控制任务通常包含：",[492,114587,114588,114591,114599,114604,114607],{},[495,114589,114590],{},"模型：Cartpole 的 body、joint、actuator。",[495,114592,114593,114594,3693,114596,114598],{},"观测：从 ",[26,114595,107321],{},[26,114597,107651],{}," 里取状态。",[495,114600,114601,114602,776],{},"动作：写入 ",[26,114603,104370],{},[495,114605,114606],{},"奖励：根据任务目标打分。",[495,114608,114609],{},"循环：obs -> action -> step -> reward。",[19,114611,114612],{},"这就是后面 Gymnasium 环境的基本骨架。",[3384,114614,107577],{},{"title":36,"searchDepth":54,"depth":54,"links":114616},[114617,114618,114619,114624,114628,114629,114630,114638],{"id":103941,"depth":54,"text":103942},{"id":104064,"depth":54,"text":104065},{"id":104338,"depth":54,"text":104339,"children":114620},[114621,114622,114623],{"id":112991,"depth":70,"text":112992},{"id":113056,"depth":70,"text":113057},{"id":113072,"depth":70,"text":113073},{"id":104546,"depth":54,"text":104547,"children":114625},[114626,114627],{"id":104863,"depth":70,"text":104863},{"id":104999,"depth":70,"text":104999},{"id":105606,"depth":54,"text":105607},{"id":105638,"depth":54,"text":105639},{"id":105743,"depth":54,"text":105744,"children":114631},[114632,114633,114634,114635,114637],{"id":114496,"depth":70,"text":114496},{"id":114507,"depth":70,"text":114507},{"id":114540,"depth":70,"text":114540},{"id":114553,"depth":70,"text":114636},"obs[3] 为什么是杆子角速度",{"id":114576,"depth":70,"text":114577},{"id":105897,"depth":54,"text":105898},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":112727,"description":36},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":114645,"title":114646,"body":114647,"description":36,"extension":3414,"meta":116661,"navigation":1412,"path":116662,"seo":116663,"stem":116664,"__hash__":116665},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":114648,"toc":116637},[114649,114652,114654,114657,114659,114676,114679,114682,114688,114691,114693,114695,114719,114721,114735,114737,114778,114780,114798,114800,114803,114809,114812,114840,114844,114850,114875,114878,114909,114916,114919,114922,114928,114931,114937,114940,114946,114950,114953,114978,114981,114983,115743,115745,115757,115759,115770,115772,115775,115792,115795,115797,115808,115811,115813,115859,115862,115875,115878,115960,115963,115965,115981,115991,116004,116007,116046,116056,116067,116077,116090,116093,116122,116125,116135,116138,116144,116161,116172,116174,116180,116197,116208,116229,116232,116244,116247,116268,116271,116279,116287,116304,116307,116376,116383,116391,116394,116407,116414,116416,116419,116425,116428,116431,116437,116443,116445,116485,116487,116493,116502,116505,116507,116527,116530,116533,116539,116543,116545,116572,116575,116578,116605,116611,116614,116617,116619,116622,116625,116631,116634],[10,114650,114646],{"id":114651},"_7控制任务reacher-机械臂到达目标",[14,114653,103942],{"id":103941},[19,114655,114656],{},"本章搭建一个二维两关节 reacher 任务。",[19,114658,107622],{},[492,114660,114661,114664,114667,114670,114673],{},[495,114662,114663],{},"两个 hinge joint",[495,114665,114666],{},"两个 motor actuator",[495,114668,114669],{},"site 作为末端点和目标点",[495,114671,114672],{},"根据末端和目标距离设计 reward",[495,114674,114675],{},"构造机械臂任务的基本形式",[19,114677,114678],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,114680,114681],{},"Reacher 任务可以理解为：",[31,114683,114686],{"className":114684,"code":114685,"language":8510,"meta":36},[8508],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[26,114687,114685],{"__ignoreMap":36},[19,114689,114690],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,114692,104065],{"id":104064},[19,114694,104068],{},[31,114696,114697],{"className":27141,"code":107679,"language":27143,"meta":36,"style":36},[26,114698,114699],{"__ignoreMap":36},[40,114700,114701,114703,114705,114707,114709,114711,114713,114715,114717],{"class":42,"line":43},[40,114702,923],{"class":596},[40,114704,29625],{"class":94},[40,114706,929],{"class":94},[40,114708,29710],{"class":63},[40,114710,107694],{"class":94},[40,114712,104093],{"class":94},[40,114714,105792],{"class":94},[40,114716,104109],{"class":94},[40,114718,107703],{"class":94},[19,114720,106110],{},[31,114722,114723],{"className":27141,"code":104213,"language":27143,"meta":36,"style":36},[26,114724,114725],{"__ignoreMap":36},[40,114726,114727,114729,114731,114733],{"class":42,"line":43},[40,114728,27150],{"class":596},[40,114730,929],{"class":94},[40,114732,104224],{"class":94},[40,114734,104227],{"class":94},[19,114736,106127],{},[31,114738,114740],{"className":27141,"code":114739,"language":27143,"meta":36,"style":36},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[26,114741,114742,114759,114768],{"__ignoreMap":36},[40,114743,114744,114746,114748,114750,114753,114755,114757],{"class":42,"line":43},[40,114745,33631],{"class":596},[40,114747,32479],{"class":94},[40,114749,1805],{"class":63},[40,114751,114752],{"class":94}," mujoco-reacher",[40,114754,104269],{"class":94},[40,114756,104272],{"class":63},[40,114758,104275],{"class":63},[40,114760,114761,114763,114765],{"class":42,"line":54},[40,114762,33631],{"class":596},[40,114764,104282],{"class":94},[40,114766,114767],{"class":94}," mujoco-reacher\n",[40,114769,114770,114772,114774,114776],{"class":42,"line":70},[40,114771,27150],{"class":596},[40,114773,929],{"class":94},[40,114775,104224],{"class":94},[40,114777,104227],{"class":94},[19,114779,104298],{},[492,114781,114782,114785,114788],{},[495,114783,114784],{},"本章使用低维状态，不使用图像输入。",[495,114786,114787],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[495,114789,114790,114791,3693,114793,3693,114795,114797],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[26,114792,107321],{},[26,114794,107651],{},[26,114796,106971],{}," 的方法一致。",[14,114799,104339],{"id":104338},[19,114801,114802],{},"Reacher 任务核心:",[31,114804,114807],{"className":114805,"code":114806,"language":8510,"meta":36},[8508],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[26,114808,114806],{"__ignoreMap":36},[19,114810,114811],{},"读取 site 世界坐标:",[31,114813,114815],{"className":33679,"code":114814,"language":2323,"meta":36,"style":36},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[26,114816,114817,114830],{"__ignoreMap":36},[40,114818,114819,114821,114823,114825,114828],{"class":42,"line":43},[40,114820,106925],{"class":50},[40,114822,1284],{"class":1283},[40,114824,106696],{"class":50},[40,114826,114827],{"class":94},"\"tip\"",[40,114829,1811],{"class":50},[40,114831,114832,114835,114837],{"class":42,"line":54},[40,114833,114834],{"class":50},"tip_pos ",[40,114836,1284],{"class":1283},[40,114838,114839],{"class":50}," data.site_xpos[site_id]\n",[402,114841,114843],{"id":114842},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,114845,114846,114847,114849],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[26,114848,107321],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[31,114851,114853],{"className":33679,"code":114852,"language":2323,"meta":36,"style":36},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[26,114854,114855,114865],{"__ignoreMap":36},[40,114856,114857,114860,114862],{"class":42,"line":43},[40,114858,114859],{"class":50},"tip ",[40,114861,1284],{"class":1283},[40,114863,114864],{"class":50}," data.site_xpos[tip_site_id]\n",[40,114866,114867,114870,114872],{"class":42,"line":54},[40,114868,114869],{"class":50},"target ",[40,114871,1284],{"class":1283},[40,114873,114874],{"class":50}," data.site_xpos[target_site_id]\n",[19,114876,114877],{},"这样 reward 就很容易写：",[31,114879,114881],{"className":33679,"code":114880,"language":2323,"meta":36,"style":36},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[26,114882,114883,114898],{"__ignoreMap":36},[40,114884,114885,114888,114890,114893,114895],{"class":42,"line":43},[40,114886,114887],{"class":50},"dist ",[40,114889,1284],{"class":1283},[40,114891,114892],{"class":50}," np.linalg.norm(tip ",[40,114894,4011],{"class":1283},[40,114896,114897],{"class":50}," target)\n",[40,114899,114900,114902,114904,114906],{"class":42,"line":54},[40,114901,114296],{"class":50},[40,114903,1284],{"class":1283},[40,114905,55569],{"class":1283},[40,114907,114908],{"class":50},"dist\n",[19,114910,114911,114912,114915],{},"距离越小，",[26,114913,114914],{},"-dist"," 越接近 0，奖励越高。",[402,114917,114918],{"id":114918},"两关节机械臂的状态",[19,114920,114921],{},"这个模型有两个 hinge joint：",[31,114923,114926],{"className":114924,"code":114925,"language":8510,"meta":36},[8508],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[26,114927,114925],{"__ignoreMap":36},[19,114929,114930],{},"再加上末端和目标位置：",[31,114932,114935],{"className":114933,"code":114934,"language":8510,"meta":36},[8508],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[26,114936,114934],{"__ignoreMap":36},[19,114938,114939],{},"总维度：",[31,114941,114944],{"className":114942,"code":114943,"language":8510,"meta":36},[8508],"2 + 2 + 3 + 3 = 10\n",[26,114945,114943],{"__ignoreMap":36},[402,114947,114949],{"id":114948},"为什么-gravity-是-0","为什么 gravity 是 0",[19,114951,114952],{},"本章把重力设为：",[31,114954,114956],{"className":56365,"code":114955,"language":56367,"meta":36,"style":36},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[26,114957,114958],{"__ignoreMap":36},[40,114959,114960,114962,114964,114966,114968,114970,114972,114974,114976],{"class":42,"line":43},[40,114961,4387],{"class":50},[40,114963,72464],{"class":46},[40,114965,104488],{"class":596},[40,114967,1284],{"class":50},[40,114969,104493],{"class":94},[40,114971,104496],{"class":596},[40,114973,1284],{"class":50},[40,114975,107062],{"class":94},[40,114977,104438],{"class":50},[19,114979,114980],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,114982,104547],{"id":104546},[31,114984,114986],{"className":33679,"code":114985,"language":2323,"meta":36,"style":36},"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",[26,114987,114988,114994,115004,115008,115012,115020,115025,115030,115034,115038,115043,115048,115052,115057,115062,115067,115071,115076,115081,115086,115091,115095,115099,115103,115107,115111,115116,115121,115125,115129,115133,115137,115141,115156,115165,115177,115200,115207,115211,115215,115225,115239,115253,115260,115264,115268,115282,115294,115306,115319,115334,115351,115355,115359,115371,115383,115391,115399,115403,115419,115424,115437,115450,115465,115469,115504,115536,115540,115544,115553,115557,115573,115583,115594,115610,115626,115642,115658,115662,115680,115700,115719,115723,115727,115739],{"__ignoreMap":36},[40,114989,114990,114992],{"class":42,"line":43},[40,114991,33692],{"class":1283},[40,114993,104592],{"class":50},[40,114995,114996,114998,115000,115002],{"class":42,"line":54},[40,114997,33692],{"class":1283},[40,114999,34680],{"class":50},[40,115001,34683],{"class":1283},[40,115003,34686],{"class":50},[40,115005,115006],{"class":42,"line":70},[40,115007,1413],{"emptyLinePlaceholder":1412},[40,115009,115010],{"class":42,"line":78},[40,115011,1413],{"emptyLinePlaceholder":1412},[40,115013,115014,115016,115018],{"class":42,"line":86},[40,115015,104605],{"class":63},[40,115017,16886],{"class":1283},[40,115019,104610],{"class":94},[40,115021,115022],{"class":42,"line":100},[40,115023,115024],{"class":94},"\u003Cmujoco model=\"two_link_reacher\">\n",[40,115026,115027],{"class":42,"line":108},[40,115028,115029],{"class":94},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[40,115031,115032],{"class":42,"line":121},[40,115033,1413],{"emptyLinePlaceholder":1412},[40,115035,115036],{"class":42,"line":134},[40,115037,104629],{"class":94},[40,115039,115040],{"class":42,"line":146},[40,115041,115042],{"class":94},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[40,115044,115045],{"class":42,"line":154},[40,115046,115047],{"class":94},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[40,115049,115050],{"class":42,"line":162},[40,115051,1413],{"emptyLinePlaceholder":1412},[40,115053,115054],{"class":42,"line":170},[40,115055,115056],{"class":94},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[40,115058,115059],{"class":42,"line":183},[40,115060,115061],{"class":94},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[40,115063,115064],{"class":42,"line":196},[40,115065,115066],{"class":94},"      \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",[40,115068,115069],{"class":42,"line":204},[40,115070,1413],{"emptyLinePlaceholder":1412},[40,115072,115073],{"class":42,"line":217},[40,115074,115075],{"class":94},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[40,115077,115078],{"class":42,"line":230},[40,115079,115080],{"class":94},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[40,115082,115083],{"class":42,"line":238},[40,115084,115085],{"class":94},"        \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",[40,115087,115088],{"class":42,"line":251},[40,115089,115090],{"class":94},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[40,115092,115093],{"class":42,"line":264},[40,115094,109729],{"class":94},[40,115096,115097],{"class":42,"line":277},[40,115098,104658],{"class":94},[40,115100,115101],{"class":42,"line":290},[40,115102,104663],{"class":94},[40,115104,115105],{"class":42,"line":298},[40,115106,1413],{"emptyLinePlaceholder":1412},[40,115108,115109],{"class":42,"line":310},[40,115110,109746],{"class":94},[40,115112,115113],{"class":42,"line":5086},[40,115114,115115],{"class":94},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[40,115117,115118],{"class":42,"line":5091},[40,115119,115120],{"class":94},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[40,115122,115123],{"class":42,"line":5105},[40,115124,109756],{"class":94},[40,115126,115127],{"class":42,"line":5110},[40,115128,104668],{"class":94},[40,115130,115131],{"class":42,"line":5902},[40,115132,98993],{"class":94},[40,115134,115135],{"class":42,"line":5916},[40,115136,1413],{"emptyLinePlaceholder":1412},[40,115138,115139],{"class":42,"line":5924},[40,115140,1413],{"emptyLinePlaceholder":1412},[40,115142,115143,115145,115148,115151,115153],{"class":42,"line":5929},[40,115144,35247],{"class":1283},[40,115146,115147],{"class":596}," site_position",[40,115149,115150],{"class":50},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[40,115152,4646],{"class":63},[40,115154,115155],{"class":50},") -> np.ndarray:\n",[40,115157,115158,115160,115162],{"class":42,"line":5935},[40,115159,106691],{"class":50},[40,115161,1284],{"class":1283},[40,115163,115164],{"class":50}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[40,115166,115167,115169,115171,115173,115175],{"class":42,"line":5941},[40,115168,6425],{"class":1283},[40,115170,106740],{"class":50},[40,115172,4387],{"class":1283},[40,115174,7416],{"class":63},[40,115176,332],{"class":50},[40,115178,115179,115181,115183,115185,115187,115190,115192,115194,115196,115198],{"class":42,"line":5946},[40,115180,106723],{"class":1283},[40,115182,106726],{"class":63},[40,115184,3488],{"class":50},[40,115186,3537],{"class":1283},[40,115188,115189],{"class":94},"\"site not found: ",[40,115191,4373],{"class":63},[40,115193,83105],{"class":50},[40,115195,4423],{"class":63},[40,115197,3731],{"class":94},[40,115199,1811],{"class":50},[40,115201,115202,115204],{"class":42,"line":11270},[40,115203,7413],{"class":1283},[40,115205,115206],{"class":50}," data.site_xpos[site_id].copy()\n",[40,115208,115209],{"class":42,"line":11294},[40,115210,1413],{"emptyLinePlaceholder":1412},[40,115212,115213],{"class":42,"line":11299},[40,115214,1413],{"emptyLinePlaceholder":1412},[40,115216,115217,115219,115222],{"class":42,"line":11305},[40,115218,35247],{"class":1283},[40,115220,115221],{"class":596}," get_obs",[40,115223,115224],{"class":50},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[40,115226,115227,115230,115232,115235,115237],{"class":42,"line":11332},[40,115228,115229],{"class":50},"    tip ",[40,115231,1284],{"class":1283},[40,115233,115234],{"class":50}," site_position(model, data, ",[40,115236,114827],{"class":94},[40,115238,1811],{"class":50},[40,115240,115241,115244,115246,115248,115251],{"class":42,"line":11337},[40,115242,115243],{"class":50},"    target ",[40,115245,1284],{"class":1283},[40,115247,115234],{"class":50},[40,115249,115250],{"class":94},"\"target\"",[40,115252,1811],{"class":50},[40,115254,115255,115257],{"class":42,"line":11343},[40,115256,7413],{"class":1283},[40,115258,115259],{"class":50}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[40,115261,115262],{"class":42,"line":11355},[40,115263,1413],{"emptyLinePlaceholder":1412},[40,115265,115266],{"class":42,"line":11367},[40,115267,1413],{"emptyLinePlaceholder":1412},[40,115269,115270,115272,115275,115278,115280],{"class":42,"line":11379},[40,115271,35247],{"class":1283},[40,115273,115274],{"class":596}," reward",[40,115276,115277],{"class":50},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[40,115279,3526],{"class":63},[40,115281,332],{"class":50},[40,115283,115284,115286,115288,115290,115292],{"class":42,"line":13038},[40,115285,115229],{"class":50},[40,115287,1284],{"class":1283},[40,115289,115234],{"class":50},[40,115291,114827],{"class":94},[40,115293,1811],{"class":50},[40,115295,115296,115298,115300,115302,115304],{"class":42,"line":13063},[40,115297,115243],{"class":50},[40,115299,1284],{"class":1283},[40,115301,115234],{"class":50},[40,115303,115250],{"class":94},[40,115305,1811],{"class":50},[40,115307,115308,115311,115313,115315,115317],{"class":42,"line":13086},[40,115309,115310],{"class":50},"    dist ",[40,115312,1284],{"class":1283},[40,115314,114892],{"class":50},[40,115316,4011],{"class":1283},[40,115318,114897],{"class":50},[40,115320,115321,115324,115326,115329,115331],{"class":42,"line":13110},[40,115322,115323],{"class":50},"    control_cost ",[40,115325,1284],{"class":1283},[40,115327,115328],{"class":63}," 0.01",[40,115330,9841],{"class":1283},[40,115332,115333],{"class":50}," np.sum(np.square(data.ctrl))\n",[40,115335,115336,115338,115340,115342,115344,115346,115348],{"class":42,"line":13115},[40,115337,7413],{"class":1283},[40,115339,113088],{"class":63},[40,115341,3488],{"class":50},[40,115343,4011],{"class":1283},[40,115345,114887],{"class":50},[40,115347,4011],{"class":1283},[40,115349,115350],{"class":50}," control_cost)\n",[40,115352,115353],{"class":42,"line":13120},[40,115354,1413],{"emptyLinePlaceholder":1412},[40,115356,115357],{"class":42,"line":13125},[40,115358,1413],{"emptyLinePlaceholder":1412},[40,115360,115361,115363,115365,115367,115369],{"class":42,"line":13134},[40,115362,35247],{"class":1283},[40,115364,5299],{"class":596},[40,115366,104689],{"class":50},[40,115368,98981],{"class":63},[40,115370,332],{"class":50},[40,115372,115373,115375,115377,115379,115381],{"class":42,"line":13139},[40,115374,104698],{"class":50},[40,115376,1284],{"class":1283},[40,115378,104703],{"class":50},[40,115380,104605],{"class":63},[40,115382,1811],{"class":50},[40,115384,115385,115387,115389],{"class":42,"line":13145},[40,115386,104712],{"class":50},[40,115388,1284],{"class":1283},[40,115390,104717],{"class":50},[40,115392,115393,115395,115397],{"class":42,"line":13166},[40,115394,113444],{"class":50},[40,115396,1284],{"class":1283},[40,115398,108052],{"class":63},[40,115400,115401],{"class":42,"line":13172},[40,115402,1413],{"emptyLinePlaceholder":1412},[40,115404,115405,115407,115409,115411,115413,115415,115417],{"class":42,"line":13186},[40,115406,6525],{"class":1283},[40,115408,34916],{"class":50},[40,115410,29355],{"class":1283},[40,115412,35743],{"class":63},[40,115414,3488],{"class":50},[40,115416,68372],{"class":63},[40,115418,34086],{"class":50},[40,115420,115421],{"class":42,"line":13192},[40,115422,115423],{"class":50},"        mujoco.mj_forward(model, data)\n",[40,115425,115426,115429,115431,115433,115435],{"class":42,"line":13219},[40,115427,115428],{"class":50},"        tip ",[40,115430,1284],{"class":1283},[40,115432,115234],{"class":50},[40,115434,114827],{"class":94},[40,115436,1811],{"class":50},[40,115438,115439,115442,115444,115446,115448],{"class":42,"line":13228},[40,115440,115441],{"class":50},"        target ",[40,115443,1284],{"class":1283},[40,115445,115234],{"class":50},[40,115447,115250],{"class":94},[40,115449,1811],{"class":50},[40,115451,115452,115455,115457,115460,115462],{"class":42,"line":13234},[40,115453,115454],{"class":50},"        error ",[40,115456,1284],{"class":1283},[40,115458,115459],{"class":50}," target ",[40,115461,4011],{"class":1283},[40,115463,115464],{"class":50}," tip\n",[40,115466,115467],{"class":42,"line":13242},[40,115468,1413],{"emptyLinePlaceholder":1412},[40,115470,115471,115473,115475,115477,115479,115482,115484,115486,115489,115491,115494,115496,115498,115500,115502],{"class":42,"line":13247},[40,115472,109908],{"class":50},[40,115474,3672],{"class":63},[40,115476,7766],{"class":50},[40,115478,1284],{"class":1283},[40,115480,115481],{"class":50}," np.clip(",[40,115483,108551],{"class":63},[40,115485,9841],{"class":1283},[40,115487,115488],{"class":50}," error[",[40,115490,64],{"class":63},[40,115492,115493],{"class":50},"], ",[40,115495,4011],{"class":1283},[40,115497,105694],{"class":63},[40,115499,15757],{"class":50},[40,115501,105694],{"class":63},[40,115503,1811],{"class":50},[40,115505,115506,115508,115510,115512,115514,115516,115518,115520,115522,115524,115526,115528,115530,115532,115534],{"class":42,"line":19926},[40,115507,109908],{"class":50},[40,115509,3698],{"class":63},[40,115511,7766],{"class":50},[40,115513,1284],{"class":1283},[40,115515,115481],{"class":50},[40,115517,108551],{"class":63},[40,115519,9841],{"class":1283},[40,115521,115488],{"class":50},[40,115523,3672],{"class":63},[40,115525,115493],{"class":50},[40,115527,4011],{"class":1283},[40,115529,105694],{"class":63},[40,115531,15757],{"class":50},[40,115533,105694],{"class":63},[40,115535,1811],{"class":50},[40,115537,115538],{"class":42,"line":19932},[40,115539,1413],{"emptyLinePlaceholder":1412},[40,115541,115542],{"class":42,"line":19955},[40,115543,104807],{"class":50},[40,115545,115546,115548,115550],{"class":42,"line":19961},[40,115547,113588],{"class":50},[40,115549,12799],{"class":1283},[40,115551,115552],{"class":50}," reward(model, data)\n",[40,115554,115555],{"class":42,"line":19984},[40,115556,1413],{"emptyLinePlaceholder":1412},[40,115558,115559,115561,115563,115565,115567,115569,115571],{"class":42,"line":19998},[40,115560,5822],{"class":1283},[40,115562,34916],{"class":50},[40,115564,3808],{"class":1283},[40,115566,9077],{"class":63},[40,115568,104850],{"class":1283},[40,115570,7416],{"class":63},[40,115572,332],{"class":50},[40,115574,115575,115578,115580],{"class":42,"line":20018},[40,115576,115577],{"class":50},"            obs ",[40,115579,1284],{"class":1283},[40,115581,115582],{"class":50}," get_obs(model, data)\n",[40,115584,115585,115587,115589,115591],{"class":42,"line":20024},[40,115586,37950],{"class":63},[40,115588,3488],{"class":50},[40,115590,113622],{"class":94},[40,115592,115593],{"class":50},", step)\n",[40,115595,115596,115598,115600,115603,115606,115608],{"class":42,"line":20035},[40,115597,37950],{"class":63},[40,115599,3488],{"class":50},[40,115601,115602],{"class":94},"\"  tip:\"",[40,115604,115605],{"class":50},", np.round(tip, ",[40,115607,3555],{"class":63},[40,115609,33797],{"class":50},[40,115611,115612,115614,115616,115619,115622,115624],{"class":42,"line":20058},[40,115613,37950],{"class":63},[40,115615,3488],{"class":50},[40,115617,115618],{"class":94},"\"  target:\"",[40,115620,115621],{"class":50},", np.round(target, ",[40,115623,3555],{"class":63},[40,115625,33797],{"class":50},[40,115627,115628,115630,115632,115635,115638,115640],{"class":42,"line":20080},[40,115629,37950],{"class":63},[40,115631,3488],{"class":50},[40,115633,115634],{"class":94},"\"  ctrl:\"",[40,115636,115637],{"class":50},", np.round(data.ctrl.copy(), ",[40,115639,3555],{"class":63},[40,115641,33797],{"class":50},[40,115643,115644,115646,115648,115651,115654,115656],{"class":42,"line":20085},[40,115645,37950],{"class":63},[40,115647,3488],{"class":50},[40,115649,115650],{"class":94},"\"  obs_dim:\"",[40,115652,115653],{"class":50},", obs.shape[",[40,115655,3672],{"class":63},[40,115657,7980],{"class":50},[40,115659,115660],{"class":42,"line":20091},[40,115661,1413],{"emptyLinePlaceholder":1412},[40,115663,115664,115666,115668,115670,115672,115674,115676,115678],{"class":42,"line":20105},[40,115665,34599],{"class":63},[40,115667,3488],{"class":50},[40,115669,113667],{"class":94},[40,115671,15757],{"class":50},[40,115673,35318],{"class":63},[40,115675,113674],{"class":50},[40,115677,3555],{"class":63},[40,115679,33797],{"class":50},[40,115681,115682,115684,115686,115689,115692,115694,115696,115698],{"class":42,"line":20118},[40,115683,34599],{"class":63},[40,115685,3488],{"class":50},[40,115687,115688],{"class":94},"\"final tip:\"",[40,115690,115691],{"class":50},", np.round(site_position(model, data, ",[40,115693,114827],{"class":94},[40,115695,113636],{"class":50},[40,115697,3555],{"class":63},[40,115699,33797],{"class":50},[40,115701,115702,115704,115706,115709,115711,115713,115715,115717],{"class":42,"line":20123},[40,115703,34599],{"class":63},[40,115705,3488],{"class":50},[40,115707,115708],{"class":94},"\"target:\"",[40,115710,115691],{"class":50},[40,115712,115250],{"class":94},[40,115714,113636],{"class":50},[40,115716,3555],{"class":63},[40,115718,33797],{"class":50},[40,115720,115721],{"class":42,"line":20137},[40,115722,1413],{"emptyLinePlaceholder":1412},[40,115724,115725],{"class":42,"line":20142},[40,115726,1413],{"emptyLinePlaceholder":1412},[40,115728,115729,115731,115733,115735,115737],{"class":42,"line":20148},[40,115730,4873],{"class":1283},[40,115732,34520],{"class":63},[40,115734,104850],{"class":1283},[40,115736,104853],{"class":94},[40,115738,332],{"class":50},[40,115740,115741],{"class":42,"line":20153},[40,115742,104860],{"class":50},[19,115744,106861],{},[31,115746,115748],{"className":27141,"code":115747,"language":27143,"meta":36,"style":36},"touch ch7_reacher.py\n",[26,115749,115750],{"__ignoreMap":36},[40,115751,115752,115754],{"class":42,"line":43},[40,115753,3165],{"class":596},[40,115755,115756],{"class":94}," ch7_reacher.py\n",[19,115758,113735],{},[31,115760,115762],{"className":27141,"code":115761,"language":27143,"meta":36,"style":36},"python ch7_reacher.py\n",[26,115763,115764],{"__ignoreMap":36},[40,115765,115766,115768],{"class":42,"line":43},[40,115767,2323],{"class":596},[40,115769,115756],{"class":94},[402,115771,104863],{"id":104863},[19,115773,115774],{},"读取 site 坐标：",[31,115776,115778],{"className":33679,"code":115777,"language":2323,"meta":36,"style":36},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[26,115779,115780],{"__ignoreMap":36},[40,115781,115782,115784,115786,115788,115790],{"class":42,"line":43},[40,115783,35247],{"class":1283},[40,115785,115147],{"class":596},[40,115787,115150],{"class":50},[40,115789,4646],{"class":63},[40,115791,115155],{"class":50},[19,115793,115794],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,115796,113751],{},[31,115798,115800],{"className":33679,"code":115799,"language":2323,"meta":36,"style":36},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[26,115801,115802],{"__ignoreMap":36},[40,115803,115804,115806],{"class":42,"line":43},[40,115805,20368],{"class":1283},[40,115807,115259],{"class":50},[19,115809,115810],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,115812,113076],{},[31,115814,115816],{"className":33679,"code":115815,"language":2323,"meta":36,"style":36},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[26,115817,115818,115830,115843],{"__ignoreMap":36},[40,115819,115820,115822,115824,115826,115828],{"class":42,"line":43},[40,115821,114887],{"class":50},[40,115823,1284],{"class":1283},[40,115825,114892],{"class":50},[40,115827,4011],{"class":1283},[40,115829,114897],{"class":50},[40,115831,115832,115835,115837,115839,115841],{"class":42,"line":54},[40,115833,115834],{"class":50},"control_cost ",[40,115836,1284],{"class":1283},[40,115838,115328],{"class":63},[40,115840,9841],{"class":1283},[40,115842,115333],{"class":50},[40,115844,115845,115847,115849,115851,115853,115855,115857],{"class":42,"line":70},[40,115846,20368],{"class":1283},[40,115848,113088],{"class":63},[40,115850,3488],{"class":50},[40,115852,4011],{"class":1283},[40,115854,114887],{"class":50},[40,115856,4011],{"class":1283},[40,115858,115350],{"class":50},[19,115860,115861],{},"奖励由两部分组成：",[492,115863,115864,115869],{},[495,115865,115866,115868],{},[26,115867,114914],{},"：末端离目标越远，奖励越低。",[495,115870,115871,115874],{},[26,115872,115873],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,115876,115877],{},"简单控制器：",[31,115879,115881],{"className":33679,"code":115880,"language":2323,"meta":36,"style":36},"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",[26,115882,115883,115896,115928],{"__ignoreMap":36},[40,115884,115885,115888,115890,115892,115894],{"class":42,"line":43},[40,115886,115887],{"class":50},"error ",[40,115889,1284],{"class":1283},[40,115891,115459],{"class":50},[40,115893,4011],{"class":1283},[40,115895,115464],{"class":50},[40,115897,115898,115900,115902,115904,115906,115908,115910,115912,115914,115916,115918,115920,115922,115924,115926],{"class":42,"line":54},[40,115899,109162],{"class":50},[40,115901,3672],{"class":63},[40,115903,7766],{"class":50},[40,115905,1284],{"class":1283},[40,115907,115481],{"class":50},[40,115909,108551],{"class":63},[40,115911,9841],{"class":1283},[40,115913,115488],{"class":50},[40,115915,64],{"class":63},[40,115917,115493],{"class":50},[40,115919,4011],{"class":1283},[40,115921,105694],{"class":63},[40,115923,15757],{"class":50},[40,115925,105694],{"class":63},[40,115927,1811],{"class":50},[40,115929,115930,115932,115934,115936,115938,115940,115942,115944,115946,115948,115950,115952,115954,115956,115958],{"class":42,"line":70},[40,115931,109162],{"class":50},[40,115933,3698],{"class":63},[40,115935,7766],{"class":50},[40,115937,1284],{"class":1283},[40,115939,115481],{"class":50},[40,115941,108551],{"class":63},[40,115943,9841],{"class":1283},[40,115945,115488],{"class":50},[40,115947,3672],{"class":63},[40,115949,115493],{"class":50},[40,115951,4011],{"class":1283},[40,115953,105694],{"class":63},[40,115955,15757],{"class":50},[40,115957,105694],{"class":63},[40,115959,1811],{"class":50},[19,115961,115962],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[402,115964,104999],{"id":104999},[31,115966,115967],{"className":33679,"code":115777,"language":2323,"meta":36,"style":36},[26,115968,115969],{"__ignoreMap":36},[40,115970,115971,115973,115975,115977,115979],{"class":42,"line":43},[40,115972,35247],{"class":1283},[40,115974,115147],{"class":596},[40,115976,115150],{"class":50},[40,115978,4646],{"class":63},[40,115980,115155],{"class":50},[19,115982,115983,115984,115986,115987,85834,115989,776],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[26,115985,83105],{}," 是 site 的名字，比如 ",[26,115988,114827],{},[26,115990,115250],{},[31,115992,115994],{"className":33679,"code":115993,"language":2323,"meta":36,"style":36},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[26,115995,115996],{"__ignoreMap":36},[40,115997,115998,116000,116002],{"class":42,"line":43},[40,115999,106925],{"class":50},[40,116001,1284],{"class":1283},[40,116003,115164],{"class":50},[19,116005,116006],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[31,116008,116010],{"className":33679,"code":116009,"language":2323,"meta":36,"style":36},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[26,116011,116012,116024],{"__ignoreMap":36},[40,116013,116014,116016,116018,116020,116022],{"class":42,"line":43},[40,116015,4873],{"class":1283},[40,116017,106740],{"class":50},[40,116019,4387],{"class":1283},[40,116021,7416],{"class":63},[40,116023,332],{"class":50},[40,116025,116026,116028,116030,116032,116034,116036,116038,116040,116042,116044],{"class":42,"line":54},[40,116027,107186],{"class":1283},[40,116029,106726],{"class":63},[40,116031,3488],{"class":50},[40,116033,3537],{"class":1283},[40,116035,115189],{"class":94},[40,116037,4373],{"class":63},[40,116039,83105],{"class":50},[40,116041,4423],{"class":63},[40,116043,3731],{"class":94},[40,116045,1811],{"class":50},[19,116047,116048,116049,116052,116053,116055],{},"如果 site 没找到，就主动报错。",[26,116050,116051],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[26,116054,83105],{}," 的值放进字符串里。",[31,116057,116059],{"className":33679,"code":116058,"language":2323,"meta":36,"style":36},"return data.site_xpos[site_id].copy()\n",[26,116060,116061],{"__ignoreMap":36},[40,116062,116063,116065],{"class":42,"line":43},[40,116064,20368],{"class":1283},[40,116066,115206],{"class":50},[19,116068,116069,116070,116072,116073,116076],{},"返回这个 site 的世界坐标。",[26,116071,106971],{}," 里的每一行都是一个 site 的 ",[26,116074,116075],{},"(x, y, z)"," 坐标。",[31,116078,116080],{"className":33679,"code":116079,"language":2323,"meta":36,"style":36},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[26,116081,116082],{"__ignoreMap":36},[40,116083,116084,116086,116088],{"class":42,"line":43},[40,116085,35247],{"class":1283},[40,116087,115221],{"class":596},[40,116089,115224],{"class":50},[19,116091,116092],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[31,116094,116096],{"className":33679,"code":116095,"language":2323,"meta":36,"style":36},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[26,116097,116098,116110],{"__ignoreMap":36},[40,116099,116100,116102,116104,116106,116108],{"class":42,"line":43},[40,116101,114859],{"class":50},[40,116103,1284],{"class":1283},[40,116105,115234],{"class":50},[40,116107,114827],{"class":94},[40,116109,1811],{"class":50},[40,116111,116112,116114,116116,116118,116120],{"class":42,"line":54},[40,116113,114869],{"class":50},[40,116115,1284],{"class":1283},[40,116117,115234],{"class":50},[40,116119,115250],{"class":94},[40,116121,1811],{"class":50},[19,116123,116124],{},"分别读取末端点和目标点的世界坐标。",[31,116126,116127],{"className":33679,"code":115799,"language":2323,"meta":36,"style":36},[26,116128,116129],{"__ignoreMap":36},[40,116130,116131,116133],{"class":42,"line":43},[40,116132,20368],{"class":1283},[40,116134,115259],{"class":50},[19,116136,116137],{},"把四部分拼成一个观测数组：",[31,116139,116142],{"className":116140,"code":116141,"language":8510,"meta":36},[8508],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[26,116143,116141],{"__ignoreMap":36},[31,116145,116147],{"className":33679,"code":116146,"language":2323,"meta":36,"style":36},"dist = np.linalg.norm(tip - target)\n",[26,116148,116149],{"__ignoreMap":36},[40,116150,116151,116153,116155,116157,116159],{"class":42,"line":43},[40,116152,114887],{"class":50},[40,116154,1284],{"class":1283},[40,116156,114892],{"class":50},[40,116158,4011],{"class":1283},[40,116160,114897],{"class":50},[19,116162,116163,116164,116167,116168,116171],{},"计算 tip 到 target 的距离。",[26,116165,116166],{},"tip - target"," 得到一个三维向量，",[26,116169,116170],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,116173,17955],{},[31,116175,116178],{"className":116176,"code":116177,"language":8510,"meta":36},[8508],"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",[26,116179,116177],{"__ignoreMap":36},[31,116181,116183],{"className":33679,"code":116182,"language":2323,"meta":36,"style":36},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[26,116184,116185],{"__ignoreMap":36},[40,116186,116187,116189,116191,116193,116195],{"class":42,"line":43},[40,116188,115834],{"class":50},[40,116190,1284],{"class":1283},[40,116192,115328],{"class":63},[40,116194,9841],{"class":1283},[40,116196,115333],{"class":50},[19,116198,116199,116200,116203,116204,116207],{},"计算动作惩罚。",[26,116201,116202],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[26,116205,116206],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[31,116209,116211],{"className":33679,"code":116210,"language":2323,"meta":36,"style":36},"return float(-dist - control_cost)\n",[26,116212,116213],{"__ignoreMap":36},[40,116214,116215,116217,116219,116221,116223,116225,116227],{"class":42,"line":43},[40,116216,20368],{"class":1283},[40,116218,113088],{"class":63},[40,116220,3488],{"class":50},[40,116222,4011],{"class":1283},[40,116224,114887],{"class":50},[40,116226,4011],{"class":1283},[40,116228,115350],{"class":50},[19,116230,116231],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[31,116233,116234],{"className":33679,"code":114094,"language":2323,"meta":36,"style":36},[26,116235,116236],{"__ignoreMap":36},[40,116237,116238,116240,116242],{"class":42,"line":43},[40,116239,114101],{"class":50},[40,116241,1284],{"class":1283},[40,116243,108052],{"class":63},[19,116245,116246],{},"累计奖励变量，记录整个运行过程的总分。",[31,116248,116250],{"className":33679,"code":116249,"language":2323,"meta":36,"style":36},"for step in range(500):\n",[26,116251,116252],{"__ignoreMap":36},[40,116253,116254,116256,116258,116260,116262,116264,116266],{"class":42,"line":43},[40,116255,6349],{"class":1283},[40,116257,34916],{"class":50},[40,116259,29355],{"class":1283},[40,116261,35743],{"class":63},[40,116263,3488],{"class":50},[40,116265,68372],{"class":63},[40,116267,34086],{"class":50},[19,116269,116270],{},"运行 500 个控制步。",[31,116272,116273],{"className":33679,"code":107834,"language":2323,"meta":36,"style":36},[26,116274,116275],{"__ignoreMap":36},[40,116276,116277],{"class":42,"line":43},[40,116278,107834],{"class":50},[19,116280,116281,116282,104312,116284,116286],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[26,116283,106522],{},[26,116285,106525],{}," 是当前状态下的坐标。",[31,116288,116290],{"className":33679,"code":116289,"language":2323,"meta":36,"style":36},"error = target - tip\n",[26,116291,116292],{"__ignoreMap":36},[40,116293,116294,116296,116298,116300,116302],{"class":42,"line":43},[40,116295,115887],{"class":50},[40,116297,1284],{"class":1283},[40,116299,115459],{"class":50},[40,116301,4011],{"class":1283},[40,116303,115464],{"class":50},[19,116305,116306],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[31,116308,116310],{"className":33679,"code":116309,"language":2323,"meta":36,"style":36},"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",[26,116311,116312,116344],{"__ignoreMap":36},[40,116313,116314,116316,116318,116320,116322,116324,116326,116328,116330,116332,116334,116336,116338,116340,116342],{"class":42,"line":43},[40,116315,109162],{"class":50},[40,116317,3672],{"class":63},[40,116319,7766],{"class":50},[40,116321,1284],{"class":1283},[40,116323,115481],{"class":50},[40,116325,108551],{"class":63},[40,116327,9841],{"class":1283},[40,116329,115488],{"class":50},[40,116331,64],{"class":63},[40,116333,115493],{"class":50},[40,116335,4011],{"class":1283},[40,116337,105694],{"class":63},[40,116339,15757],{"class":50},[40,116341,105694],{"class":63},[40,116343,1811],{"class":50},[40,116345,116346,116348,116350,116352,116354,116356,116358,116360,116362,116364,116366,116368,116370,116372,116374],{"class":42,"line":54},[40,116347,109162],{"class":50},[40,116349,3698],{"class":63},[40,116351,7766],{"class":50},[40,116353,1284],{"class":1283},[40,116355,115481],{"class":50},[40,116357,108551],{"class":63},[40,116359,9841],{"class":1283},[40,116361,115488],{"class":50},[40,116363,3672],{"class":63},[40,116365,115493],{"class":50},[40,116367,4011],{"class":1283},[40,116369,105694],{"class":63},[40,116371,15757],{"class":50},[40,116373,105694],{"class":63},[40,116375,1811],{"class":50},[19,116377,116378,116379,116382],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[26,116380,116381],{},"error -> ctrl -> step"," 的流程。",[31,116384,116385],{"className":33679,"code":107796,"language":2323,"meta":36,"style":36},[26,116386,116387],{"__ignoreMap":36},[40,116388,116389],{"class":42,"line":43},[40,116390,107796],{"class":50},[19,116392,116393],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[31,116395,116397],{"className":33679,"code":116396,"language":2323,"meta":36,"style":36},"obs = get_obs(model, data)\n",[26,116398,116399],{"__ignoreMap":36},[40,116400,116401,116403,116405],{"class":42,"line":43},[40,116402,114145],{"class":50},[40,116404,1284],{"class":1283},[40,116406,115582],{"class":50},[19,116408,116409,116410,116413],{},"读取最新观测。后面打印 ",[26,116411,116412],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,116415,105607],{"id":105606},[19,116417,116418],{},"观测维度为:",[31,116420,116423],{"className":116421,"code":116422,"language":8510,"meta":36},[8508],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[26,116424,116422],{"__ignoreMap":36},[19,116426,116427],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,116429,116430],{},"程序每 100 步打印：",[31,116432,116435],{"className":116433,"code":116434,"language":8510,"meta":36},[8508],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[26,116436,116434],{"__ignoreMap":36},[19,116438,116439,116440,116442],{},"如果控制有效，你应该看到最终 ",[26,116441,106522],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,116444,105639],{"id":105638},[492,116446,116447,116450,116453,116459,116465,116472,116482],{},[495,116448,116449],{},"修改目标点位置。",[495,116451,116452],{},"重新运行，观察最终 tip 是否变化。",[495,116454,116455,116456,116458],{},"把 gravity 改成 ",[26,116457,105880],{},"，观察控制是否变差。",[495,116460,114472,116461,114476,116463,776],{},[26,116462,105449],{},[26,116464,64],{},[495,116466,105702,116467,105705,116469,116471],{},[26,116468,113887],{},[26,116470,110598],{},"，观察机械臂是否更难移动。",[495,116473,105702,116474,85825,116476,105705,116478,116481],{},[26,116475,106525],{},[26,116477,107437],{},[26,116479,116480],{},"0.2 0 0.6","，观察 reward 和 final tip。",[495,116483,116484],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,116486,105744],{"id":105743},[402,116488,116490],{"id":116489},"site-not-found",[26,116491,116492],{},"site not found",[19,116494,116495,116496,104312,116499,776],{},"检查 XML 中是否有 ",[26,116497,116498],{},"site name=\"tip\"",[26,116500,116501],{},"site name=\"target\"",[402,116503,116504],{"id":116504},"机械臂完全不动",[19,116506,105814],{},[492,116508,116509,116514,116517,116522],{},[495,116510,116511,116513],{},[26,116512,105449],{}," 是否为 2",[495,116515,116516],{},"actuator 是否引用正确 joint",[495,116518,116519,116521],{},[26,116520,104370],{}," 是否被赋值",[495,116523,116524,116525],{},"是否执行了 ",[26,116526,103980],{},[402,116528,116529],{"id":116529},"控制效果不好",[19,116531,116532],{},"正常。本章重点不是控制器最优，而是任务结构:",[31,116534,116537],{"className":116535,"code":116536,"language":8510,"meta":36},[8508],"obs → action → mj_step → reward → next_obs\n",[26,116538,116536],{"__ignoreMap":36},[402,116540,116542],{"id":116541},"tip-坐标不变化","tip 坐标不变化",[19,116544,105866],{},[492,116546,116547,116552,116560,116569],{},[495,116548,116549,116550,776],{},"是否每步调用了 ",[26,116551,103980],{},[495,116553,116554,116555,104312,116557,776],{},"是否写入了 ",[26,116556,109417],{},[26,116558,116559],{},"data.ctrl[1]",[495,116561,116562,116563,3693,116566,776],{},"actuator 是否正确引用 ",[26,116564,116565],{},"joint1",[26,116567,116568],{},"joint2",[495,116570,116571],{},"控制输入是否太小。",[402,116573,116574],{"id":116574},"目标点不会动",[19,116576,116577],{},"本章的 target 是固定 site：",[31,116579,116581],{"className":56365,"code":116580,"language":56367,"meta":36,"style":36},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[26,116582,116583],{"__ignoreMap":36},[40,116584,116585,116587,116589,116591,116593,116595,116597,116599,116602],{"class":42,"line":43},[40,116586,4387],{"class":50},[40,116588,106501],{"class":46},[40,116590,18242],{"class":596},[40,116592,1284],{"class":50},[40,116594,115250],{"class":94},[40,116596,104400],{"class":596},[40,116598,1284],{"class":50},[40,116600,116601],{"class":94},"\"0.5 0 0.4\"",[40,116603,116604],{"class":50}," ...\u002F>\n",[19,116606,116607,116608,116610],{},"它直接挂在 ",[26,116609,105132],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[402,116612,116613],{"id":116613},"机械臂不像真实机械臂",[19,116615,116616],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,116618,105898],{"id":105897},[19,116620,116621],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,116623,116624],{},"核心公式：",[31,116626,116629],{"className":116627,"code":116628,"language":8510,"meta":36},[8508],"distance = ||tip - target||\nreward = -distance - action_cost\n",[26,116630,116628],{"__ignoreMap":36},[19,116632,116633],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[3384,116635,116636],{},"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":36,"searchDepth":54,"depth":54,"links":116638},[116639,116640,116641,116646,116650,116651,116652,116660],{"id":103941,"depth":54,"text":103942},{"id":104064,"depth":54,"text":104065},{"id":104338,"depth":54,"text":104339,"children":116642},[116643,116644,116645],{"id":114842,"depth":70,"text":114843},{"id":114918,"depth":70,"text":114918},{"id":114948,"depth":70,"text":114949},{"id":104546,"depth":54,"text":104547,"children":116647},[116648,116649],{"id":104863,"depth":70,"text":104863},{"id":104999,"depth":70,"text":104999},{"id":105606,"depth":54,"text":105607},{"id":105638,"depth":54,"text":105639},{"id":105743,"depth":54,"text":105744,"children":116653},[116654,116655,116656,116657,116658,116659],{"id":116489,"depth":70,"text":116492},{"id":116504,"depth":70,"text":116504},{"id":116529,"depth":70,"text":116529},{"id":116541,"depth":70,"text":116542},{"id":116574,"depth":70,"text":116574},{"id":116613,"depth":70,"text":116613},{"id":105897,"depth":54,"text":105898},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":114646,"description":36},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":116667,"title":116668,"body":116669,"description":36,"extension":3414,"meta":120131,"navigation":1412,"path":120132,"seo":120133,"stem":120134,"__hash__":120135},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":116670,"toc":120102},[116671,116674,116676,116679,116682,116707,116710,116716,116719,116725,116727,116729,116753,116755,116773,116775,116818,116820,116847,116849,116852,116904,116907,116913,116922,116925,116963,116966,117005,117008,117016,117023,117026,117032,117034,117088,117095,117140,117143,117147,117163,117173,117175,118436,118438,118450,118452,118463,118465,118468,118489,118492,118495,118528,118534,118537,118570,118573,118576,118617,118622,118636,118639,118652,118657,118680,118682,118697,118707,118722,118729,118749,118764,118782,118785,118802,118810,118826,118832,118864,118877,118909,118919,118954,118968,119014,119028,119070,119081,119094,119100,119133,119136,119163,119173,119213,119223,119240,119247,119265,119268,119309,119322,119337,119340,119363,119366,119378,119381,119400,119405,119426,119429,119444,119447,119481,119493,119508,119511,119536,119539,119558,119561,119593,119596,119620,119626,119656,119663,119676,119679,119681,119683,119689,119692,119695,119707,119710,119712,119766,119768,119772,119778,119787,119790,119797,119799,119822,119825,119829,119831,119849,119855,119857,119890,119893,119899,119903,119906,119926,119931,119935,119942,119962,119967,119971,119974,119994,119997,120083,120087,120090,120096,120099],[10,116672,116668],{"id":116673},"_8gymnasium-风格强化学习接口基础",[14,116675,103942],{"id":103941},[19,116677,116678],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,116680,116681],{},"你将实现:",[31,116683,116685],{"className":33679,"code":116684,"language":2323,"meta":36,"style":36},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[26,116686,116687,116697],{"__ignoreMap":36},[40,116688,116689,116692,116694],{"class":42,"line":43},[40,116690,116691],{"class":50},"obs, info ",[40,116693,1284],{"class":1283},[40,116695,116696],{"class":50}," env.reset()\n",[40,116698,116699,116702,116704],{"class":42,"line":54},[40,116700,116701],{"class":50},"obs, reward, terminated, truncated, info ",[40,116703,1284],{"class":1283},[40,116705,116706],{"class":50}," env.step(action)\n",[19,116708,116709],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,116711,116712,116713,116715],{},"前面章节的代码都是“脚本式”的：在 ",[26,116714,105586],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,116717,116718],{},"可以先记住 Gymnasium 环境的核心交互：",[31,116720,116723],{"className":116721,"code":116722,"language":8510,"meta":36},[8508],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[26,116724,116722],{"__ignoreMap":36},[14,116726,104065],{"id":104064},[19,116728,104068],{},[31,116730,116731],{"className":27141,"code":107679,"language":27143,"meta":36,"style":36},[26,116732,116733],{"__ignoreMap":36},[40,116734,116735,116737,116739,116741,116743,116745,116747,116749,116751],{"class":42,"line":43},[40,116736,923],{"class":596},[40,116738,29625],{"class":94},[40,116740,929],{"class":94},[40,116742,29710],{"class":63},[40,116744,107694],{"class":94},[40,116746,104093],{"class":94},[40,116748,105792],{"class":94},[40,116750,104109],{"class":94},[40,116752,107703],{"class":94},[19,116754,106110],{},[31,116756,116758],{"className":27141,"code":116757,"language":27143,"meta":36,"style":36},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[26,116759,116760],{"__ignoreMap":36},[40,116761,116762,116764,116766,116768,116770],{"class":42,"line":43},[40,116763,27150],{"class":596},[40,116765,929],{"class":94},[40,116767,104224],{"class":94},[40,116769,111002],{"class":94},[40,116771,116772],{"class":94}," gymnasium\n",[19,116774,106127],{},[31,116776,116778],{"className":27141,"code":116777,"language":27143,"meta":36,"style":36},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[26,116779,116780,116797,116806],{"__ignoreMap":36},[40,116781,116782,116784,116786,116788,116791,116793,116795],{"class":42,"line":43},[40,116783,33631],{"class":596},[40,116785,32479],{"class":94},[40,116787,1805],{"class":63},[40,116789,116790],{"class":94}," mujoco-gym-api",[40,116792,104269],{"class":94},[40,116794,104272],{"class":63},[40,116796,104275],{"class":63},[40,116798,116799,116801,116803],{"class":42,"line":54},[40,116800,33631],{"class":596},[40,116802,104282],{"class":94},[40,116804,116805],{"class":94}," mujoco-gym-api\n",[40,116807,116808,116810,116812,116814,116816],{"class":42,"line":70},[40,116809,27150],{"class":596},[40,116811,929],{"class":94},[40,116813,104224],{"class":94},[40,116815,111002],{"class":94},[40,116817,116772],{"class":94},[19,116819,104298],{},[492,116821,116822,116832,116835,116841],{},[495,116823,116824,116825,116828,116829,776],{},"本章使用 ",[26,116826,116827],{},"gymnasium","，不是旧版 ",[26,116830,116831],{},"gym",[495,116833,116834],{},"Gymnasium API 与旧 Gym API 有差异。",[495,116836,116837,116838,776],{},"旧 Gym 常见返回值是 4 个: ",[26,116839,116840],{},"obs, reward, done, info",[495,116842,116843,116844,776],{},"Gymnasium 返回值是 5 个: ",[26,116845,116846],{},"obs, reward, terminated, truncated, info",[14,116848,104339],{"id":104338},[19,116850,116851],{},"强化学习环境接口包含:",[3619,116853,116854,116863],{},[3622,116855,116856],{},[3625,116857,116858,116861],{},[3628,116859,116860],{"align":27055},"方法",[3628,116862,105987],{"align":27055},[3665,116864,116865,116875,116885,116895],{},[3625,116866,116867,116872],{},[3670,116868,116869],{"align":27055},[26,116870,116871],{},"reset()",[3670,116873,116874],{"align":27055},"重置环境",[3625,116876,116877,116882],{},[3670,116878,116879],{"align":27055},[26,116880,116881],{},"step(action)",[3670,116883,116884],{"align":27055},"执行动作",[3625,116886,116887,116892],{},[3670,116888,116889],{"align":27055},[26,116890,116891],{},"observation_space",[3670,116893,116894],{"align":27055},"观测空间",[3625,116896,116897,116902],{},[3670,116898,116899],{"align":27055},[26,116900,116901],{},"action_space",[3670,116903,26973],{"align":27055},[19,116905,116906],{},"一个最小环境需要完成:",[31,116908,116911],{"className":116909,"code":116910,"language":8510,"meta":36},[8508],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[26,116912,116910],{"__ignoreMap":36},[402,116914,116916,104312,116919,107929],{"id":116915},"terminated-和-truncated-的区别",[26,116917,116918],{},"terminated",[26,116920,116921],{},"truncated",[19,116923,116924],{},"Gymnasium 把“结束”拆成两个概念：",[3619,116926,116927,116937],{},[3622,116928,116929],{},[3625,116930,116931,116933,116935],{},[3628,116932,107865],{"align":27055},[3628,116934,103995],{"align":27055},[3628,116936,24508],{"align":27055},[3665,116938,116939,116951],{},[3625,116940,116941,116945,116948],{},[3670,116942,116943],{"align":27055},[26,116944,116918],{},[3670,116946,116947],{"align":27055},"任务自然结束",[3670,116949,116950],{"align":27055},"机械臂到达目标、机器人摔倒",[3625,116952,116953,116957,116960],{},[3670,116954,116955],{"align":27055},[26,116956,116921],{},[3670,116958,116959],{"align":27055},"因外部限制截断",[3670,116961,116962],{"align":27055},"达到最大步数、时间限制",[19,116964,116965],{},"本章中：",[31,116967,116969],{"className":33679,"code":116968,"language":2323,"meta":36,"style":36},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[26,116970,116971,116986],{"__ignoreMap":36},[40,116972,116973,116976,116978,116981,116983],{"class":42,"line":43},[40,116974,116975],{"class":50},"terminated ",[40,116977,1284],{"class":1283},[40,116979,116980],{"class":50}," dist ",[40,116982,4387],{"class":1283},[40,116984,116985],{"class":63}," 0.05\n",[40,116987,116988,116991,116993,116995,116998,117000,117002],{"class":42,"line":54},[40,116989,116990],{"class":50},"truncated ",[40,116992,1284],{"class":1283},[40,116994,42173],{"class":63},[40,116996,116997],{"class":50},".steps ",[40,116999,5041],{"class":1283},[40,117001,42173],{"class":63},[40,117003,117004],{"class":50},".max_steps\n",[19,117006,117007],{},"也就是：",[492,117009,117010,117013],{},[495,117011,117012],{},"末端距离目标小于 0.05，任务成功结束。",[495,117014,117015],{},"步数超过上限，episode 被截断。",[402,117017,117019,104312,117021],{"id":117018},"observation_space-和-action_space",[26,117020,116891],{},[26,117022,116901],{},[19,117024,117025],{},"这两个对象告诉算法：",[31,117027,117030],{"className":117028,"code":117029,"language":8510,"meta":36},[8508],"观测长什么样\n动作允许多大\n",[26,117031,117029],{"__ignoreMap":36},[19,117033,17955],{},[31,117035,117037],{"className":33679,"code":117036,"language":2323,"meta":36,"style":36},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[26,117038,117039],{"__ignoreMap":36},[40,117040,117041,117043,117046,117048,117051,117054,117057,117059,117061,117064,117066,117068,117070,117072,117074,117076,117078,117081,117083,117085],{"class":42,"line":43},[40,117042,34123],{"class":63},[40,117044,117045],{"class":50},".action_space ",[40,117047,1284],{"class":1283},[40,117049,117050],{"class":50}," spaces.Box(",[40,117052,117053],{"class":8539},"low",[40,117055,117056],{"class":1283},"=-",[40,117058,105694],{"class":63},[40,117060,15757],{"class":50},[40,117062,117063],{"class":8539},"high",[40,117065,1284],{"class":1283},[40,117067,105694],{"class":63},[40,117069,15757],{"class":50},[40,117071,99258],{"class":8539},[40,117073,1284],{"class":1283},[40,117075,3488],{"class":50},[40,117077,64],{"class":63},[40,117079,117080],{"class":50},",), ",[40,117082,96795],{"class":8539},[40,117084,1284],{"class":1283},[40,117086,117087],{"class":50},"np.float32)\n",[19,117089,117090,117091,117094],{},"表示动作是 2 维数组，每个值都在 ",[26,117092,117093],{},"[-1, 1]"," 范围内。",[31,117096,117098],{"className":33679,"code":117097,"language":2323,"meta":36,"style":36},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[26,117099,117100],{"__ignoreMap":36},[40,117101,117102,117104,117107,117109,117111,117113,117115,117118,117120,117122,117124,117126,117128,117130,117132,117134,117136,117138],{"class":42,"line":43},[40,117103,34123],{"class":63},[40,117105,117106],{"class":50},".observation_space ",[40,117108,1284],{"class":1283},[40,117110,117050],{"class":50},[40,117112,117053],{"class":8539},[40,117114,117056],{"class":1283},[40,117116,117117],{"class":50},"np.inf, ",[40,117119,117063],{"class":8539},[40,117121,1284],{"class":1283},[40,117123,117117],{"class":50},[40,117125,99258],{"class":8539},[40,117127,1284],{"class":1283},[40,117129,3488],{"class":50},[40,117131,3925],{"class":63},[40,117133,117080],{"class":50},[40,117135,96795],{"class":8539},[40,117137,1284],{"class":1283},[40,117139,117087],{"class":50},[19,117141,117142],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[402,117144,117146],{"id":117145},"frame_skip-是什么","frame_skip 是什么",[31,117148,117150],{"className":33679,"code":117149,"language":2323,"meta":36,"style":36},"self.frame_skip = 5\n",[26,117151,117152],{"__ignoreMap":36},[40,117153,117154,117156,117159,117161],{"class":42,"line":43},[40,117155,34123],{"class":63},[40,117157,117158],{"class":50},".frame_skip ",[40,117160,1284],{"class":1283},[40,117162,57725],{"class":63},[19,117164,117165,117166,117169,117170,117172],{},"表示外部调用一次 ",[26,117167,117168],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[26,117171,104509],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,117174,104547],{"id":104546},[31,117176,117178],{"className":33679,"code":117177,"language":2323,"meta":36,"style":36},"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",[26,117179,117180,117192,117198,117208,117219,117223,117227,117235,117240,117244,117248,117252,117256,117260,117264,117268,117273,117277,117281,117285,117290,117294,117298,117302,117306,117310,117314,117318,117322,117326,117330,117334,117338,117342,117360,117375,117379,117392,117402,117417,117434,117438,117459,117478,117503,117517,117521,117531,117543,117553,117557,117599,117637,117641,117651,117667,117682,117701,117708,117712,117725,117740,117755,117768,117787,117803,117807,117848,117863,117878,117882,117921,117932,117945,117949,117959,117968,117972,117982,117997,118015,118019,118030,118047,118060,118064,118074,118078,118089,118100,118104,118118,118132,118148,118152,118165,118182,118197,118204,118208,118212,118224,118234,118252,118264,118276,118280,118288,118304,118313,118322,118330,118372,118385,118390,118394,118412,118416,118420,118432],{"__ignoreMap":36},[40,117181,117182,117184,117187,117189],{"class":42,"line":43},[40,117183,33692],{"class":1283},[40,117185,117186],{"class":50}," gymnasium ",[40,117188,34683],{"class":1283},[40,117190,117191],{"class":50}," gym\n",[40,117193,117194,117196],{"class":42,"line":54},[40,117195,33692],{"class":1283},[40,117197,104592],{"class":50},[40,117199,117200,117202,117204,117206],{"class":42,"line":70},[40,117201,33692],{"class":1283},[40,117203,34680],{"class":50},[40,117205,34683],{"class":1283},[40,117207,34686],{"class":50},[40,117209,117210,117212,117214,117216],{"class":42,"line":78},[40,117211,34037],{"class":1283},[40,117213,117186],{"class":50},[40,117215,33692],{"class":1283},[40,117217,117218],{"class":50}," spaces\n",[40,117220,117221],{"class":42,"line":86},[40,117222,1413],{"emptyLinePlaceholder":1412},[40,117224,117225],{"class":42,"line":100},[40,117226,1413],{"emptyLinePlaceholder":1412},[40,117228,117229,117231,117233],{"class":42,"line":108},[40,117230,104605],{"class":63},[40,117232,16886],{"class":1283},[40,117234,104610],{"class":94},[40,117236,117237],{"class":42,"line":121},[40,117238,117239],{"class":94},"\u003Cmujoco model=\"gym_reacher\">\n",[40,117241,117242],{"class":42,"line":134},[40,117243,115029],{"class":94},[40,117245,117246],{"class":42,"line":146},[40,117247,1413],{"emptyLinePlaceholder":1412},[40,117249,117250],{"class":42,"line":154},[40,117251,104629],{"class":94},[40,117253,117254],{"class":42,"line":162},[40,117255,115047],{"class":94},[40,117257,117258],{"class":42,"line":170},[40,117259,1413],{"emptyLinePlaceholder":1412},[40,117261,117262],{"class":42,"line":183},[40,117263,115056],{"class":94},[40,117265,117266],{"class":42,"line":196},[40,117267,115061],{"class":94},[40,117269,117270],{"class":42,"line":204},[40,117271,117272],{"class":94},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[40,117274,117275],{"class":42,"line":217},[40,117276,1413],{"emptyLinePlaceholder":1412},[40,117278,117279],{"class":42,"line":230},[40,117280,115075],{"class":94},[40,117282,117283],{"class":42,"line":238},[40,117284,115080],{"class":94},[40,117286,117287],{"class":42,"line":251},[40,117288,117289],{"class":94},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[40,117291,117292],{"class":42,"line":264},[40,117293,115090],{"class":94},[40,117295,117296],{"class":42,"line":277},[40,117297,109729],{"class":94},[40,117299,117300],{"class":42,"line":290},[40,117301,104658],{"class":94},[40,117303,117304],{"class":42,"line":298},[40,117305,104663],{"class":94},[40,117307,117308],{"class":42,"line":310},[40,117309,1413],{"emptyLinePlaceholder":1412},[40,117311,117312],{"class":42,"line":5086},[40,117313,109746],{"class":94},[40,117315,117316],{"class":42,"line":5091},[40,117317,115115],{"class":94},[40,117319,117320],{"class":42,"line":5105},[40,117321,115120],{"class":94},[40,117323,117324],{"class":42,"line":5110},[40,117325,109756],{"class":94},[40,117327,117328],{"class":42,"line":5902},[40,117329,104668],{"class":94},[40,117331,117332],{"class":42,"line":5916},[40,117333,98993],{"class":94},[40,117335,117336],{"class":42,"line":5924},[40,117337,1413],{"emptyLinePlaceholder":1412},[40,117339,117340],{"class":42,"line":5929},[40,117341,1413],{"emptyLinePlaceholder":1412},[40,117343,117344,117346,117349,117351,117353,117355,117358],{"class":42,"line":5935},[40,117345,18016],{"class":1283},[40,117347,117348],{"class":596}," ReacherEnv",[40,117350,3488],{"class":50},[40,117352,116831],{"class":596},[40,117354,4037],{"class":50},[40,117356,117357],{"class":596},"Env",[40,117359,34086],{"class":50},[40,117361,117362,117365,117367,117369,117372],{"class":42,"line":5941},[40,117363,117364],{"class":50},"    metadata ",[40,117366,1284],{"class":1283},[40,117368,7771],{"class":50},[40,117370,117371],{"class":94},"\"render_modes\"",[40,117373,117374],{"class":50},": []}\n",[40,117376,117377],{"class":42,"line":5946},[40,117378,1413],{"emptyLinePlaceholder":1412},[40,117380,117381,117383,117385,117388,117390],{"class":42,"line":11270},[40,117382,34101],{"class":1283},[40,117384,34104],{"class":63},[40,117386,117387],{"class":50},"(self) -> ",[40,117389,98981],{"class":63},[40,117391,332],{"class":50},[40,117393,117394,117396,117398,117400],{"class":42,"line":11294},[40,117395,34117],{"class":63},[40,117397,20583],{"class":50},[40,117399,34129],{"class":63},[40,117401,5302],{"class":50},[40,117403,117404,117406,117409,117411,117413,117415],{"class":42,"line":11299},[40,117405,34145],{"class":63},[40,117407,117408],{"class":50},".model ",[40,117410,1284],{"class":1283},[40,117412,104703],{"class":50},[40,117414,104605],{"class":63},[40,117416,1811],{"class":50},[40,117418,117419,117421,117424,117426,117429,117431],{"class":42,"line":11305},[40,117420,34145],{"class":63},[40,117422,117423],{"class":50},".data ",[40,117425,1284],{"class":1283},[40,117427,117428],{"class":50}," mujoco.MjData(",[40,117430,34123],{"class":63},[40,117432,117433],{"class":50},".model)\n",[40,117435,117436],{"class":42,"line":11332},[40,117437,1413],{"emptyLinePlaceholder":1412},[40,117439,117440,117442,117445,117447,117450,117452,117455,117457],{"class":42,"line":11337},[40,117441,34145],{"class":63},[40,117443,117444],{"class":50},".tip_site_id ",[40,117446,1284],{"class":1283},[40,117448,117449],{"class":50}," mujoco.mj_name2id(",[40,117451,34123],{"class":63},[40,117453,117454],{"class":50},".model, mujoco.mjtObj.mjOBJ_SITE, ",[40,117456,114827],{"class":94},[40,117458,1811],{"class":50},[40,117460,117461,117463,117466,117468,117470,117472,117474,117476],{"class":42,"line":11343},[40,117462,34145],{"class":63},[40,117464,117465],{"class":50},".target_site_id ",[40,117467,1284],{"class":1283},[40,117469,117449],{"class":50},[40,117471,34123],{"class":63},[40,117473,117454],{"class":50},[40,117475,115250],{"class":94},[40,117477,1811],{"class":50},[40,117479,117480,117482,117484,117486,117488,117490,117493,117495,117497,117499,117501],{"class":42,"line":11355},[40,117481,5822],{"class":1283},[40,117483,42173],{"class":63},[40,117485,117444],{"class":50},[40,117487,4387],{"class":1283},[40,117489,7416],{"class":63},[40,117491,117492],{"class":1283}," or",[40,117494,42173],{"class":63},[40,117496,117465],{"class":50},[40,117498,4387],{"class":1283},[40,117500,7416],{"class":63},[40,117502,332],{"class":50},[40,117504,117505,117508,117510,117512,117515],{"class":42,"line":11367},[40,117506,117507],{"class":1283},"            raise",[40,117509,106726],{"class":63},[40,117511,3488],{"class":50},[40,117513,117514],{"class":94},"\"required sites not found\"",[40,117516,1811],{"class":50},[40,117518,117519],{"class":42,"line":11379},[40,117520,1413],{"emptyLinePlaceholder":1412},[40,117522,117523,117525,117527,117529],{"class":42,"line":13038},[40,117524,34145],{"class":63},[40,117526,117158],{"class":50},[40,117528,1284],{"class":1283},[40,117530,57725],{"class":63},[40,117532,117533,117535,117538,117540],{"class":42,"line":13063},[40,117534,34145],{"class":63},[40,117536,117537],{"class":50},".max_steps ",[40,117539,1284],{"class":1283},[40,117541,117542],{"class":63}," 200\n",[40,117544,117545,117547,117549,117551],{"class":42,"line":13086},[40,117546,34145],{"class":63},[40,117548,116997],{"class":50},[40,117550,1284],{"class":1283},[40,117552,50633],{"class":63},[40,117554,117555],{"class":42,"line":13110},[40,117556,1413],{"emptyLinePlaceholder":1412},[40,117558,117559,117561,117563,117565,117567,117569,117571,117573,117575,117577,117579,117581,117583,117585,117587,117589,117591,117593,117595,117597],{"class":42,"line":13115},[40,117560,34145],{"class":63},[40,117562,117045],{"class":50},[40,117564,1284],{"class":1283},[40,117566,117050],{"class":50},[40,117568,117053],{"class":8539},[40,117570,117056],{"class":1283},[40,117572,105694],{"class":63},[40,117574,15757],{"class":50},[40,117576,117063],{"class":8539},[40,117578,1284],{"class":1283},[40,117580,105694],{"class":63},[40,117582,15757],{"class":50},[40,117584,99258],{"class":8539},[40,117586,1284],{"class":1283},[40,117588,3488],{"class":50},[40,117590,64],{"class":63},[40,117592,117080],{"class":50},[40,117594,96795],{"class":8539},[40,117596,1284],{"class":1283},[40,117598,117087],{"class":50},[40,117600,117601,117603,117605,117607,117609,117611,117613,117615,117617,117619,117621,117623,117625,117627,117629,117631,117633,117635],{"class":42,"line":13120},[40,117602,34145],{"class":63},[40,117604,117106],{"class":50},[40,117606,1284],{"class":1283},[40,117608,117050],{"class":50},[40,117610,117053],{"class":8539},[40,117612,117056],{"class":1283},[40,117614,117117],{"class":50},[40,117616,117063],{"class":8539},[40,117618,1284],{"class":1283},[40,117620,117117],{"class":50},[40,117622,99258],{"class":8539},[40,117624,1284],{"class":1283},[40,117626,3488],{"class":50},[40,117628,3925],{"class":63},[40,117630,117080],{"class":50},[40,117632,96795],{"class":8539},[40,117634,1284],{"class":1283},[40,117636,117087],{"class":50},[40,117638,117639],{"class":42,"line":13125},[40,117640,1413],{"emptyLinePlaceholder":1412},[40,117642,117643,117645,117648],{"class":42,"line":13134},[40,117644,34101],{"class":1283},[40,117646,117647],{"class":596}," _get_obs",[40,117649,117650],{"class":50},"(self) -> np.ndarray:\n",[40,117652,117653,117655,117657,117659,117662,117664],{"class":42,"line":13139},[40,117654,115428],{"class":50},[40,117656,1284],{"class":1283},[40,117658,42173],{"class":63},[40,117660,117661],{"class":50},".data.site_xpos[",[40,117663,34123],{"class":63},[40,117665,117666],{"class":50},".tip_site_id].copy()\n",[40,117668,117669,117671,117673,117675,117677,117679],{"class":42,"line":13145},[40,117670,115441],{"class":50},[40,117672,1284],{"class":1283},[40,117674,42173],{"class":63},[40,117676,117661],{"class":50},[40,117678,34123],{"class":63},[40,117680,117681],{"class":50},".target_site_id].copy()\n",[40,117683,117684,117686,117688,117691,117693,117696,117698],{"class":42,"line":13166},[40,117685,113473],{"class":50},[40,117687,1284],{"class":1283},[40,117689,117690],{"class":50}," np.concatenate([",[40,117692,34123],{"class":63},[40,117694,117695],{"class":50},".data.qpos.copy(), ",[40,117697,34123],{"class":63},[40,117699,117700],{"class":50},".data.qvel.copy(), tip, target])\n",[40,117702,117703,117705],{"class":42,"line":13172},[40,117704,18074],{"class":1283},[40,117706,117707],{"class":50}," obs.astype(np.float32)\n",[40,117709,117710],{"class":42,"line":13186},[40,117711,1413],{"emptyLinePlaceholder":1412},[40,117713,117714,117716,117719,117721,117723],{"class":42,"line":13192},[40,117715,34101],{"class":1283},[40,117717,117718],{"class":596}," _get_reward",[40,117720,117387],{"class":50},[40,117722,3526],{"class":63},[40,117724,332],{"class":50},[40,117726,117727,117729,117731,117733,117735,117737],{"class":42,"line":13219},[40,117728,115428],{"class":50},[40,117730,1284],{"class":1283},[40,117732,42173],{"class":63},[40,117734,117661],{"class":50},[40,117736,34123],{"class":63},[40,117738,117739],{"class":50},".tip_site_id]\n",[40,117741,117742,117744,117746,117748,117750,117752],{"class":42,"line":13228},[40,117743,115441],{"class":50},[40,117745,1284],{"class":1283},[40,117747,42173],{"class":63},[40,117749,117661],{"class":50},[40,117751,34123],{"class":63},[40,117753,117754],{"class":50},".target_site_id]\n",[40,117756,117757,117760,117762,117764,117766],{"class":42,"line":13234},[40,117758,117759],{"class":50},"        dist ",[40,117761,1284],{"class":1283},[40,117763,114892],{"class":50},[40,117765,4011],{"class":1283},[40,117767,114897],{"class":50},[40,117769,117770,117773,117775,117777,117779,117782,117784],{"class":42,"line":13242},[40,117771,117772],{"class":50},"        control_cost ",[40,117774,1284],{"class":1283},[40,117776,115328],{"class":63},[40,117778,9841],{"class":1283},[40,117780,117781],{"class":50}," np.sum(np.square(",[40,117783,34123],{"class":63},[40,117785,117786],{"class":50},".data.ctrl))\n",[40,117788,117789,117791,117793,117795,117797,117799,117801],{"class":42,"line":13247},[40,117790,18074],{"class":1283},[40,117792,113088],{"class":63},[40,117794,3488],{"class":50},[40,117796,4011],{"class":1283},[40,117798,114887],{"class":50},[40,117800,4011],{"class":1283},[40,117802,115350],{"class":50},[40,117804,117805],{"class":42,"line":19926},[40,117806,1413],{"emptyLinePlaceholder":1412},[40,117808,117809,117811,117814,117817,117819,117822,117824,117826,117828,117830,117832,117835,117838,117840,117842,117844,117846],{"class":42,"line":19932},[40,117810,34101],{"class":1283},[40,117812,117813],{"class":596}," reset",[40,117815,117816],{"class":50},"(self, ",[40,117818,3934],{"class":1283},[40,117820,117821],{"class":50},", seed: ",[40,117823,3491],{"class":63},[40,117825,1465],{"class":1283},[40,117827,42233],{"class":63},[40,117829,16886],{"class":1283},[40,117831,42233],{"class":63},[40,117833,117834],{"class":50},", options: ",[40,117836,117837],{"class":63},"dict",[40,117839,1465],{"class":1283},[40,117841,42233],{"class":63},[40,117843,16886],{"class":1283},[40,117845,42233],{"class":63},[40,117847,34086],{"class":50},[40,117849,117850,117852,117855,117858,117860],{"class":42,"line":19955},[40,117851,34117],{"class":63},[40,117853,117854],{"class":50},"().reset(",[40,117856,117857],{"class":8539},"seed",[40,117859,1284],{"class":1283},[40,117861,117862],{"class":50},"seed)\n",[40,117864,117865,117868,117870,117873,117875],{"class":42,"line":19961},[40,117866,117867],{"class":50},"        mujoco.mj_resetData(",[40,117869,34123],{"class":63},[40,117871,117872],{"class":50},".model, ",[40,117874,34123],{"class":63},[40,117876,117877],{"class":50},".data)\n",[40,117879,117880],{"class":42,"line":19984},[40,117881,1413],{"emptyLinePlaceholder":1412},[40,117883,117884,117886,117889,117891,117893,117896,117898,117900,117902,117904,117906,117908,117910,117912,117914,117916,117918],{"class":42,"line":19998},[40,117885,34145],{"class":63},[40,117887,117888],{"class":50},".data.qpos[:] ",[40,117890,1284],{"class":1283},[40,117892,42173],{"class":63},[40,117894,117895],{"class":50},".np_random.uniform(",[40,117897,117053],{"class":8539},[40,117899,117056],{"class":1283},[40,117901,89505],{"class":63},[40,117903,15757],{"class":50},[40,117905,117063],{"class":8539},[40,117907,1284],{"class":1283},[40,117909,89505],{"class":63},[40,117911,15757],{"class":50},[40,117913,34796],{"class":8539},[40,117915,1284],{"class":1283},[40,117917,34123],{"class":63},[40,117919,117920],{"class":50},".model.nq)\n",[40,117922,117923,117925,117928,117930],{"class":42,"line":20018},[40,117924,34145],{"class":63},[40,117926,117927],{"class":50},".data.qvel[:] ",[40,117929,1284],{"class":1283},[40,117931,108052],{"class":63},[40,117933,117934,117937,117939,117941,117943],{"class":42,"line":20024},[40,117935,117936],{"class":50},"        mujoco.mj_forward(",[40,117938,34123],{"class":63},[40,117940,117872],{"class":50},[40,117942,34123],{"class":63},[40,117944,117877],{"class":50},[40,117946,117947],{"class":42,"line":20035},[40,117948,1413],{"emptyLinePlaceholder":1412},[40,117950,117951,117953,117955,117957],{"class":42,"line":20058},[40,117952,34145],{"class":63},[40,117954,116997],{"class":50},[40,117956,1284],{"class":1283},[40,117958,50633],{"class":63},[40,117960,117961,117963,117965],{"class":42,"line":20080},[40,117962,18074],{"class":1283},[40,117964,42173],{"class":63},[40,117966,117967],{"class":50},"._get_obs(), {}\n",[40,117969,117970],{"class":42,"line":20085},[40,117971,1413],{"emptyLinePlaceholder":1412},[40,117973,117974,117976,117979],{"class":42,"line":20091},[40,117975,34101],{"class":1283},[40,117977,117978],{"class":596}," step",[40,117980,117981],{"class":50},"(self, action):\n",[40,117983,117984,117986,117988,117991,117993,117995],{"class":42,"line":20105},[40,117985,113513],{"class":50},[40,117987,1284],{"class":1283},[40,117989,117990],{"class":50}," np.asarray(action, ",[40,117992,96795],{"class":8539},[40,117994,1284],{"class":1283},[40,117996,117087],{"class":50},[40,117998,117999,118001,118003,118005,118007,118010,118012],{"class":42,"line":20118},[40,118000,113513],{"class":50},[40,118002,1284],{"class":1283},[40,118004,110738],{"class":50},[40,118006,34123],{"class":63},[40,118008,118009],{"class":50},".action_space.low, ",[40,118011,34123],{"class":63},[40,118013,118014],{"class":50},".action_space.high)\n",[40,118016,118017],{"class":42,"line":20123},[40,118018,1413],{"emptyLinePlaceholder":1412},[40,118020,118021,118023,118026,118028],{"class":42,"line":20137},[40,118022,34145],{"class":63},[40,118024,118025],{"class":50},".data.ctrl[:] ",[40,118027,1284],{"class":1283},[40,118029,110761],{"class":50},[40,118031,118032,118034,118036,118038,118040,118042,118044],{"class":42,"line":20142},[40,118033,6727],{"class":1283},[40,118035,104792],{"class":50},[40,118037,29355],{"class":1283},[40,118039,35743],{"class":63},[40,118041,3488],{"class":50},[40,118043,34123],{"class":63},[40,118045,118046],{"class":50},".frame_skip):\n",[40,118048,118049,118052,118054,118056,118058],{"class":42,"line":20148},[40,118050,118051],{"class":50},"            mujoco.mj_step(",[40,118053,34123],{"class":63},[40,118055,117872],{"class":50},[40,118057,34123],{"class":63},[40,118059,117877],{"class":50},[40,118061,118062],{"class":42,"line":20153},[40,118063,1413],{"emptyLinePlaceholder":1412},[40,118065,118066,118068,118070,118072],{"class":42,"line":20167},[40,118067,34145],{"class":63},[40,118069,116997],{"class":50},[40,118071,12799],{"class":1283},[40,118073,58997],{"class":63},[40,118075,118076],{"class":42,"line":20172},[40,118077,1413],{"emptyLinePlaceholder":1412},[40,118079,118080,118082,118084,118086],{"class":42,"line":20177},[40,118081,113473],{"class":50},[40,118083,1284],{"class":1283},[40,118085,42173],{"class":63},[40,118087,118088],{"class":50},"._get_obs()\n",[40,118090,118091,118093,118095,118097],{"class":42,"line":20191},[40,118092,113578],{"class":50},[40,118094,1284],{"class":1283},[40,118096,42173],{"class":63},[40,118098,118099],{"class":50},"._get_reward()\n",[40,118101,118102],{"class":42,"line":20203},[40,118103,1413],{"emptyLinePlaceholder":1412},[40,118105,118106,118108,118110,118112,118114,118116],{"class":42,"line":20208},[40,118107,115428],{"class":50},[40,118109,1284],{"class":1283},[40,118111,42173],{"class":63},[40,118113,117661],{"class":50},[40,118115,34123],{"class":63},[40,118117,117739],{"class":50},[40,118119,118120,118122,118124,118126,118128,118130],{"class":42,"line":20221},[40,118121,115441],{"class":50},[40,118123,1284],{"class":1283},[40,118125,42173],{"class":63},[40,118127,117661],{"class":50},[40,118129,34123],{"class":63},[40,118131,117754],{"class":50},[40,118133,118134,118136,118138,118140,118143,118145],{"class":42,"line":20226},[40,118135,117759],{"class":50},[40,118137,1284],{"class":1283},[40,118139,113088],{"class":63},[40,118141,118142],{"class":50},"(np.linalg.norm(tip ",[40,118144,4011],{"class":1283},[40,118146,118147],{"class":50}," target))\n",[40,118149,118150],{"class":42,"line":20231},[40,118151,1413],{"emptyLinePlaceholder":1412},[40,118153,118154,118157,118159,118161,118163],{"class":42,"line":20236},[40,118155,118156],{"class":50},"        terminated ",[40,118158,1284],{"class":1283},[40,118160,116980],{"class":50},[40,118162,4387],{"class":1283},[40,118164,116985],{"class":63},[40,118166,118167,118170,118172,118174,118176,118178,118180],{"class":42,"line":20249},[40,118168,118169],{"class":50},"        truncated ",[40,118171,1284],{"class":1283},[40,118173,42173],{"class":63},[40,118175,116997],{"class":50},[40,118177,5041],{"class":1283},[40,118179,42173],{"class":63},[40,118181,117004],{"class":50},[40,118183,118184,118187,118189,118191,118194],{"class":42,"line":20254},[40,118185,118186],{"class":50},"        info ",[40,118188,1284],{"class":1283},[40,118190,7771],{"class":50},[40,118192,118193],{"class":94},"\"distance\"",[40,118195,118196],{"class":50},": dist}\n",[40,118198,118199,118201],{"class":42,"line":35933},[40,118200,18074],{"class":1283},[40,118202,118203],{"class":50}," obs, reward, terminated, truncated, info\n",[40,118205,118206],{"class":42,"line":35939},[40,118207,1413],{"emptyLinePlaceholder":1412},[40,118209,118210],{"class":42,"line":35945},[40,118211,1413],{"emptyLinePlaceholder":1412},[40,118213,118214,118216,118218,118220,118222],{"class":42,"line":35951},[40,118215,35247],{"class":1283},[40,118217,5299],{"class":596},[40,118219,104689],{"class":50},[40,118221,98981],{"class":63},[40,118223,332],{"class":50},[40,118225,118226,118229,118231],{"class":42,"line":35957},[40,118227,118228],{"class":50},"    env ",[40,118230,1284],{"class":1283},[40,118232,118233],{"class":50}," ReacherEnv()\n",[40,118235,118236,118239,118241,118244,118246,118248,118250],{"class":42,"line":35968},[40,118237,118238],{"class":50},"    obs, info ",[40,118240,1284],{"class":1283},[40,118242,118243],{"class":50}," env.reset(",[40,118245,117857],{"class":8539},[40,118247,1284],{"class":1283},[40,118249,3672],{"class":63},[40,118251,1811],{"class":50},[40,118253,118254,118256,118258,118261],{"class":42,"line":35974},[40,118255,34599],{"class":63},[40,118257,3488],{"class":50},[40,118259,118260],{"class":94},"\"initial obs shape:\"",[40,118262,118263],{"class":50},", obs.shape)\n",[40,118265,118266,118268,118270,118273],{"class":42,"line":35994},[40,118267,34599],{"class":63},[40,118269,3488],{"class":50},[40,118271,118272],{"class":94},"\"initial info:\"",[40,118274,118275],{"class":50},", info)\n",[40,118277,118278],{"class":42,"line":36000},[40,118279,1413],{"emptyLinePlaceholder":1412},[40,118281,118282,118284,118286],{"class":42,"line":36011},[40,118283,113444],{"class":50},[40,118285,1284],{"class":1283},[40,118287,108052],{"class":63},[40,118289,118290,118292,118294,118296,118298,118300,118302],{"class":42,"line":36017},[40,118291,6525],{"class":1283},[40,118293,34916],{"class":50},[40,118295,29355],{"class":1283},[40,118297,35743],{"class":63},[40,118299,3488],{"class":50},[40,118301,4178],{"class":63},[40,118303,34086],{"class":50},[40,118305,118306,118308,118310],{"class":42,"line":36023},[40,118307,113513],{"class":50},[40,118309,1284],{"class":1283},[40,118311,118312],{"class":50}," env.action_space.sample()\n",[40,118314,118315,118318,118320],{"class":42,"line":36029},[40,118316,118317],{"class":50},"        obs, reward, terminated, truncated, info ",[40,118319,1284],{"class":1283},[40,118321,116706],{"class":50},[40,118323,118324,118326,118328],{"class":42,"line":36035},[40,118325,113588],{"class":50},[40,118327,12799],{"class":1283},[40,118329,113593],{"class":50},[40,118331,118332,118334,118336,118338,118340,118343,118345,118347,118350,118352,118354,118357,118359,118361,118364,118366,118368,118370],{"class":42,"line":36041},[40,118333,35751],{"class":63},[40,118335,3488],{"class":50},[40,118337,113622],{"class":94},[40,118339,113625],{"class":50},[40,118341,118342],{"class":94},"\"reward:\"",[40,118344,15757],{"class":50},[40,118346,35318],{"class":63},[40,118348,118349],{"class":50},"(reward, ",[40,118351,3555],{"class":63},[40,118353,113636],{"class":50},[40,118355,118356],{"class":94},"\"distance:\"",[40,118358,15757],{"class":50},[40,118360,35318],{"class":63},[40,118362,118363],{"class":50},"(info[",[40,118365,118193],{"class":94},[40,118367,115493],{"class":50},[40,118369,3555],{"class":63},[40,118371,33797],{"class":50},[40,118373,118374,118376,118379,118382],{"class":42,"line":36047},[40,118375,5822],{"class":1283},[40,118377,118378],{"class":50}," terminated ",[40,118380,118381],{"class":1283},"or",[40,118383,118384],{"class":50}," truncated:\n",[40,118386,118387],{"class":42,"line":36053},[40,118388,118389],{"class":1283},"            break\n",[40,118391,118392],{"class":42,"line":36073},[40,118393,1413],{"emptyLinePlaceholder":1412},[40,118395,118396,118398,118400,118402,118404,118406,118408,118410],{"class":42,"line":36079},[40,118397,34599],{"class":63},[40,118399,3488],{"class":50},[40,118401,113667],{"class":94},[40,118403,15757],{"class":50},[40,118405,35318],{"class":63},[40,118407,113674],{"class":50},[40,118409,3555],{"class":63},[40,118411,33797],{"class":50},[40,118413,118414],{"class":42,"line":36095},[40,118415,1413],{"emptyLinePlaceholder":1412},[40,118417,118418],{"class":42,"line":36101},[40,118419,1413],{"emptyLinePlaceholder":1412},[40,118421,118422,118424,118426,118428,118430],{"class":42,"line":36115},[40,118423,4873],{"class":1283},[40,118425,34520],{"class":63},[40,118427,104850],{"class":1283},[40,118429,104853],{"class":94},[40,118431,332],{"class":50},[40,118433,118434],{"class":42,"line":36121},[40,118435,104860],{"class":50},[19,118437,106861],{},[31,118439,118441],{"className":27141,"code":118440,"language":27143,"meta":36,"style":36},"touch ch8_gym_env.py\n",[26,118442,118443],{"__ignoreMap":36},[40,118444,118445,118447],{"class":42,"line":43},[40,118446,3165],{"class":596},[40,118448,118449],{"class":94}," ch8_gym_env.py\n",[19,118451,113735],{},[31,118453,118455],{"className":27141,"code":118454,"language":27143,"meta":36,"style":36},"python ch8_gym_env.py\n",[26,118456,118457],{"__ignoreMap":36},[40,118458,118459,118461],{"class":42,"line":43},[40,118460,2323],{"class":596},[40,118462,118449],{"class":94},[402,118464,104863],{"id":104863},[19,118466,118467],{},"继承 Gymnasium 环境：",[31,118469,118471],{"className":33679,"code":118470,"language":2323,"meta":36,"style":36},"class ReacherEnv(gym.Env):\n",[26,118472,118473],{"__ignoreMap":36},[40,118474,118475,118477,118479,118481,118483,118485,118487],{"class":42,"line":43},[40,118476,18016],{"class":1283},[40,118478,117348],{"class":596},[40,118480,3488],{"class":50},[40,118482,116831],{"class":596},[40,118484,4037],{"class":50},[40,118486,117357],{"class":596},[40,118488,34086],{"class":50},[19,118490,118491],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,118493,118494],{},"初始化模型：",[31,118496,118498],{"className":33679,"code":118497,"language":2323,"meta":36,"style":36},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[26,118499,118500,118514],{"__ignoreMap":36},[40,118501,118502,118504,118506,118508,118510,118512],{"class":42,"line":43},[40,118503,34123],{"class":63},[40,118505,117408],{"class":50},[40,118507,1284],{"class":1283},[40,118509,104703],{"class":50},[40,118511,104605],{"class":63},[40,118513,1811],{"class":50},[40,118515,118516,118518,118520,118522,118524,118526],{"class":42,"line":54},[40,118517,34123],{"class":63},[40,118519,117423],{"class":50},[40,118521,1284],{"class":1283},[40,118523,117428],{"class":50},[40,118525,34123],{"class":63},[40,118527,117433],{"class":50},[19,118529,118530,118531,118533],{},"这和前面章节一样，只是现在放到了类的 ",[26,118532,34129],{}," 里。",[19,118535,118536],{},"缓存 site ID：",[31,118538,118540],{"className":33679,"code":118539,"language":2323,"meta":36,"style":36},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[26,118541,118542,118556],{"__ignoreMap":36},[40,118543,118544,118546,118548,118550,118552,118554],{"class":42,"line":43},[40,118545,34123],{"class":63},[40,118547,117444],{"class":50},[40,118549,1284],{"class":1283},[40,118551,117449],{"class":50},[40,118553,92849],{"class":63},[40,118555,1811],{"class":50},[40,118557,118558,118560,118562,118564,118566,118568],{"class":42,"line":54},[40,118559,34123],{"class":63},[40,118561,117465],{"class":50},[40,118563,1284],{"class":1283},[40,118565,117449],{"class":50},[40,118567,92849],{"class":63},[40,118569,1811],{"class":50},[19,118571,118572],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,118574,118575],{},"reset：",[31,118577,118579],{"className":33679,"code":118578,"language":2323,"meta":36,"style":36},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[26,118580,118581],{"__ignoreMap":36},[40,118582,118583,118585,118587,118589,118591,118593,118595,118597,118599,118601,118603,118605,118607,118609,118611,118613,118615],{"class":42,"line":43},[40,118584,35247],{"class":1283},[40,118586,117813],{"class":596},[40,118588,117816],{"class":50},[40,118590,3934],{"class":1283},[40,118592,117821],{"class":50},[40,118594,3491],{"class":63},[40,118596,1465],{"class":1283},[40,118598,42233],{"class":63},[40,118600,16886],{"class":1283},[40,118602,42233],{"class":63},[40,118604,117834],{"class":50},[40,118606,117837],{"class":63},[40,118608,1465],{"class":1283},[40,118610,42233],{"class":63},[40,118612,16886],{"class":1283},[40,118614,42233],{"class":63},[40,118616,34086],{"class":50},[19,118618,118619,118621],{},[26,118620,73353],{}," 做四件事：",[492,118623,118624,118627,118630,118633],{},[495,118625,118626],{},"设置随机种子。",[495,118628,118629],{},"重置 MuJoCo data。",[495,118631,118632],{},"随机初始化关节角。",[495,118634,118635],{},"返回初始观测和 info。",[19,118637,118638],{},"step：",[31,118640,118642],{"className":33679,"code":118641,"language":2323,"meta":36,"style":36},"def step(self, action):\n",[26,118643,118644],{"__ignoreMap":36},[40,118645,118646,118648,118650],{"class":42,"line":43},[40,118647,35247],{"class":1283},[40,118649,117978],{"class":596},[40,118651,117981],{"class":50},[19,118653,118654,118656],{},[26,118655,110425],{}," 做六件事：",[492,118658,118659,118662,118668,118671,118674,118677],{},[495,118660,118661],{},"检查并裁剪 action。",[495,118663,118664,118665,776],{},"写入 ",[26,118666,118667],{},"self.data.ctrl",[495,118669,118670],{},"连续推进若干个 MuJoCo 物理步。",[495,118672,118673],{},"计算新观测。",[495,118675,118676],{},"计算奖励和结束条件。",[495,118678,118679],{},"返回 Gymnasium 标准五元组。",[402,118681,104999],{"id":104999},[31,118683,118685],{"className":33679,"code":118684,"language":2323,"meta":36,"style":36},"import gymnasium as gym\n",[26,118686,118687],{"__ignoreMap":36},[40,118688,118689,118691,118693,118695],{"class":42,"line":43},[40,118690,33692],{"class":1283},[40,118692,117186],{"class":50},[40,118694,34683],{"class":1283},[40,118696,117191],{"class":50},[19,118698,118699,118700,118702,118703,118706],{},"导入 Gymnasium，并起别名 ",[26,118701,116831],{},"。后面写 ",[26,118704,118705],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[31,118708,118710],{"className":33679,"code":118709,"language":2323,"meta":36,"style":36},"from gymnasium import spaces\n",[26,118711,118712],{"__ignoreMap":36},[40,118713,118714,118716,118718,118720],{"class":42,"line":43},[40,118715,34037],{"class":1283},[40,118717,117186],{"class":50},[40,118719,33692],{"class":1283},[40,118721,117218],{"class":50},[19,118723,118724,118725,118728],{},"导入空间定义工具。",[26,118726,118727],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[31,118730,118731],{"className":33679,"code":118470,"language":2323,"meta":36,"style":36},[26,118732,118733],{"__ignoreMap":36},[40,118734,118735,118737,118739,118741,118743,118745,118747],{"class":42,"line":43},[40,118736,18016],{"class":1283},[40,118738,117348],{"class":596},[40,118740,3488],{"class":50},[40,118742,116831],{"class":596},[40,118744,4037],{"class":50},[40,118746,117357],{"class":596},[40,118748,34086],{"class":50},[19,118750,118751,118752,118755,118756,118758,118759,104312,118761,118763],{},"定义一个类，名字叫 ",[26,118753,118754],{},"ReacherEnv","。括号里的 ",[26,118757,118705],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[26,118760,73353],{},[26,118762,110425],{}," 这两个核心方法。",[31,118765,118767],{"className":33679,"code":118766,"language":2323,"meta":36,"style":36},"metadata = {\"render_modes\": []}\n",[26,118768,118769],{"__ignoreMap":36},[40,118770,118771,118774,118776,118778,118780],{"class":42,"line":43},[40,118772,118773],{"class":50},"metadata ",[40,118775,1284],{"class":1283},[40,118777,7771],{"class":50},[40,118779,117371],{"class":94},[40,118781,117374],{"class":50},[19,118783,118784],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[31,118786,118788],{"className":33679,"code":118787,"language":2323,"meta":36,"style":36},"def __init__(self) -> None:\n",[26,118789,118790],{"__ignoreMap":36},[40,118791,118792,118794,118796,118798,118800],{"class":42,"line":43},[40,118793,35247],{"class":1283},[40,118795,34104],{"class":63},[40,118797,117387],{"class":50},[40,118799,98981],{"class":63},[40,118801,332],{"class":50},[19,118803,118804,118806,118807,776],{},[26,118805,34129],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[26,118808,118809],{},"env = ReacherEnv()",[31,118811,118813],{"className":33679,"code":118812,"language":2323,"meta":36,"style":36},"super().__init__()\n",[26,118814,118815],{"__ignoreMap":36},[40,118816,118817,118820,118822,118824],{"class":42,"line":43},[40,118818,118819],{"class":63},"super",[40,118821,20583],{"class":50},[40,118823,34129],{"class":63},[40,118825,5302],{"class":50},[19,118827,118828,118829,118831],{},"调用父类 ",[26,118830,118705],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[31,118833,118834],{"className":33679,"code":118497,"language":2323,"meta":36,"style":36},[26,118835,118836,118850],{"__ignoreMap":36},[40,118837,118838,118840,118842,118844,118846,118848],{"class":42,"line":43},[40,118839,34123],{"class":63},[40,118841,117408],{"class":50},[40,118843,1284],{"class":1283},[40,118845,104703],{"class":50},[40,118847,104605],{"class":63},[40,118849,1811],{"class":50},[40,118851,118852,118854,118856,118858,118860,118862],{"class":42,"line":54},[40,118853,34123],{"class":63},[40,118855,117423],{"class":50},[40,118857,1284],{"class":1283},[40,118859,117428],{"class":50},[40,118861,34123],{"class":63},[40,118863,117433],{"class":50},[19,118865,118866,118867,118869,118870,104312,118873,118876],{},"把 MuJoCo 模型和状态保存到 ",[26,118868,34123],{}," 上。",[26,118871,118872],{},"self.model",[26,118874,118875],{},"self.data"," 表示这个环境对象自己的模型和状态。",[31,118878,118879],{"className":33679,"code":118539,"language":2323,"meta":36,"style":36},[26,118880,118881,118895],{"__ignoreMap":36},[40,118882,118883,118885,118887,118889,118891,118893],{"class":42,"line":43},[40,118884,34123],{"class":63},[40,118886,117444],{"class":50},[40,118888,1284],{"class":1283},[40,118890,117449],{"class":50},[40,118892,92849],{"class":63},[40,118894,1811],{"class":50},[40,118896,118897,118899,118901,118903,118905,118907],{"class":42,"line":54},[40,118898,34123],{"class":63},[40,118900,117465],{"class":50},[40,118902,1284],{"class":1283},[40,118904,117449],{"class":50},[40,118906,92849],{"class":63},[40,118908,1811],{"class":50},[19,118910,118911,118912,104312,118915,118918],{},"提前查好 tip 和 target 的 site ID。这样 ",[26,118913,118914],{},"_get_obs",[26,118916,118917],{},"_get_reward"," 里就不用每次按名字查找。",[31,118920,118922],{"className":33679,"code":118921,"language":2323,"meta":36,"style":36},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[26,118923,118924,118934,118944],{"__ignoreMap":36},[40,118925,118926,118928,118930,118932],{"class":42,"line":43},[40,118927,34123],{"class":63},[40,118929,117158],{"class":50},[40,118931,1284],{"class":1283},[40,118933,57725],{"class":63},[40,118935,118936,118938,118940,118942],{"class":42,"line":54},[40,118937,34123],{"class":63},[40,118939,117537],{"class":50},[40,118941,1284],{"class":1283},[40,118943,117542],{"class":63},[40,118945,118946,118948,118950,118952],{"class":42,"line":70},[40,118947,34123],{"class":63},[40,118949,116997],{"class":50},[40,118951,1284],{"class":1283},[40,118953,50633],{"class":63},[19,118955,118956,118959,118960,118963,118964,118967],{},[26,118957,118958],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[26,118961,118962],{},"max_steps"," 是一个 episode 最多运行多少步。",[26,118965,118966],{},"steps"," 记录当前 episode 已经走了多少步。",[31,118969,118970],{"className":33679,"code":117036,"language":2323,"meta":36,"style":36},[26,118971,118972],{"__ignoreMap":36},[40,118973,118974,118976,118978,118980,118982,118984,118986,118988,118990,118992,118994,118996,118998,119000,119002,119004,119006,119008,119010,119012],{"class":42,"line":43},[40,118975,34123],{"class":63},[40,118977,117045],{"class":50},[40,118979,1284],{"class":1283},[40,118981,117050],{"class":50},[40,118983,117053],{"class":8539},[40,118985,117056],{"class":1283},[40,118987,105694],{"class":63},[40,118989,15757],{"class":50},[40,118991,117063],{"class":8539},[40,118993,1284],{"class":1283},[40,118995,105694],{"class":63},[40,118997,15757],{"class":50},[40,118999,99258],{"class":8539},[40,119001,1284],{"class":1283},[40,119003,3488],{"class":50},[40,119005,64],{"class":63},[40,119007,117080],{"class":50},[40,119009,96795],{"class":8539},[40,119011,1284],{"class":1283},[40,119013,117087],{"class":50},[19,119015,119016,119017,119020,119021,104312,119024,119027],{},"定义动作空间。",[26,119018,119019],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[26,119022,119023],{},"low=-1.0",[26,119025,119026],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[31,119029,119030],{"className":33679,"code":117097,"language":2323,"meta":36,"style":36},[26,119031,119032],{"__ignoreMap":36},[40,119033,119034,119036,119038,119040,119042,119044,119046,119048,119050,119052,119054,119056,119058,119060,119062,119064,119066,119068],{"class":42,"line":43},[40,119035,34123],{"class":63},[40,119037,117106],{"class":50},[40,119039,1284],{"class":1283},[40,119041,117050],{"class":50},[40,119043,117053],{"class":8539},[40,119045,117056],{"class":1283},[40,119047,117117],{"class":50},[40,119049,117063],{"class":8539},[40,119051,1284],{"class":1283},[40,119053,117117],{"class":50},[40,119055,99258],{"class":8539},[40,119057,1284],{"class":1283},[40,119059,3488],{"class":50},[40,119061,3925],{"class":63},[40,119063,117080],{"class":50},[40,119065,96795],{"class":8539},[40,119067,1284],{"class":1283},[40,119069,117087],{"class":50},[19,119071,119072,119073,119076,119077,119080],{},"定义观测空间。",[26,119074,119075],{},"shape=(10,)"," 表示观测是 10 个数。",[26,119078,119079],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[31,119082,119084],{"className":33679,"code":119083,"language":2323,"meta":36,"style":36},"def _get_obs(self) -> np.ndarray:\n",[26,119085,119086],{"__ignoreMap":36},[40,119087,119088,119090,119092],{"class":42,"line":43},[40,119089,35247],{"class":1283},[40,119091,117647],{"class":596},[40,119093,117650],{"class":50},[19,119095,119096,119097,119099],{},"定义内部函数，用来生成观测。函数名前面的 ",[26,119098,4469],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[31,119101,119103],{"className":33679,"code":119102,"language":2323,"meta":36,"style":36},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[26,119104,119105,119119],{"__ignoreMap":36},[40,119106,119107,119109,119111,119113,119115,119117],{"class":42,"line":43},[40,119108,114859],{"class":50},[40,119110,1284],{"class":1283},[40,119112,42173],{"class":63},[40,119114,117661],{"class":50},[40,119116,34123],{"class":63},[40,119118,117666],{"class":50},[40,119120,119121,119123,119125,119127,119129,119131],{"class":42,"line":54},[40,119122,114869],{"class":50},[40,119124,1284],{"class":1283},[40,119126,42173],{"class":63},[40,119128,117661],{"class":50},[40,119130,34123],{"class":63},[40,119132,117681],{"class":50},[19,119134,119135],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[31,119137,119139],{"className":33679,"code":119138,"language":2323,"meta":36,"style":36},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[26,119140,119141,119157],{"__ignoreMap":36},[40,119142,119143,119145,119147,119149,119151,119153,119155],{"class":42,"line":43},[40,119144,114145],{"class":50},[40,119146,1284],{"class":1283},[40,119148,117690],{"class":50},[40,119150,34123],{"class":63},[40,119152,117695],{"class":50},[40,119154,34123],{"class":63},[40,119156,117700],{"class":50},[40,119158,119159,119161],{"class":42,"line":54},[40,119160,20368],{"class":1283},[40,119162,117707],{"class":50},[19,119164,119165,119166,119169,119170,119172],{},"拼接观测，并转换成 ",[26,119167,119168],{},"float32","。很多强化学习库默认使用 ",[26,119171,119168],{},"，所以这里主动转换。",[31,119174,119175],{"className":33679,"code":118578,"language":2323,"meta":36,"style":36},[26,119176,119177],{"__ignoreMap":36},[40,119178,119179,119181,119183,119185,119187,119189,119191,119193,119195,119197,119199,119201,119203,119205,119207,119209,119211],{"class":42,"line":43},[40,119180,35247],{"class":1283},[40,119182,117813],{"class":596},[40,119184,117816],{"class":50},[40,119186,3934],{"class":1283},[40,119188,117821],{"class":50},[40,119190,3491],{"class":63},[40,119192,1465],{"class":1283},[40,119194,42233],{"class":63},[40,119196,16886],{"class":1283},[40,119198,42233],{"class":63},[40,119200,117834],{"class":50},[40,119202,117837],{"class":63},[40,119204,1465],{"class":1283},[40,119206,42233],{"class":63},[40,119208,16886],{"class":1283},[40,119210,42233],{"class":63},[40,119212,34086],{"class":50},[19,119214,119215,119216,119218,119219,119222],{},"定义 reset。",[26,119217,117857],{}," 用来控制随机数，保证实验可以复现。",[26,119220,119221],{},"options"," 用来接收额外配置，本章暂时不用。",[31,119224,119226],{"className":33679,"code":119225,"language":2323,"meta":36,"style":36},"super().reset(seed=seed)\n",[26,119227,119228],{"__ignoreMap":36},[40,119229,119230,119232,119234,119236,119238],{"class":42,"line":43},[40,119231,118819],{"class":63},[40,119233,117854],{"class":50},[40,119235,117857],{"class":8539},[40,119237,1284],{"class":1283},[40,119239,117862],{"class":50},[19,119241,119242,119243,119246],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[26,119244,119245],{},"self.np_random"," 生成可复现的随机数。",[31,119248,119250],{"className":33679,"code":119249,"language":2323,"meta":36,"style":36},"mujoco.mj_resetData(self.model, self.data)\n",[26,119251,119252],{"__ignoreMap":36},[40,119253,119254,119257,119259,119261,119263],{"class":42,"line":43},[40,119255,119256],{"class":50},"mujoco.mj_resetData(",[40,119258,34123],{"class":63},[40,119260,117872],{"class":50},[40,119262,34123],{"class":63},[40,119264,117877],{"class":50},[19,119266,119267],{},"把 MuJoCo 状态重置到默认状态。",[31,119269,119271],{"className":33679,"code":119270,"language":2323,"meta":36,"style":36},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[26,119272,119273],{"__ignoreMap":36},[40,119274,119275,119277,119279,119281,119283,119285,119287,119289,119291,119293,119295,119297,119299,119301,119303,119305,119307],{"class":42,"line":43},[40,119276,34123],{"class":63},[40,119278,117888],{"class":50},[40,119280,1284],{"class":1283},[40,119282,42173],{"class":63},[40,119284,117895],{"class":50},[40,119286,117053],{"class":8539},[40,119288,117056],{"class":1283},[40,119290,89505],{"class":63},[40,119292,15757],{"class":50},[40,119294,117063],{"class":8539},[40,119296,1284],{"class":1283},[40,119298,89505],{"class":63},[40,119300,15757],{"class":50},[40,119302,34796],{"class":8539},[40,119304,1284],{"class":1283},[40,119306,34123],{"class":63},[40,119308,117920],{"class":50},[19,119310,118632,119311,119314,119315,119318,119319,119321],{},[26,119312,119313],{},"[:]"," 表示修改整个数组。",[26,119316,119317],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[26,119320,105441],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[31,119323,119325],{"className":33679,"code":119324,"language":2323,"meta":36,"style":36},"self.data.qvel[:] = 0.0\n",[26,119326,119327],{"__ignoreMap":36},[40,119328,119329,119331,119333,119335],{"class":42,"line":43},[40,119330,34123],{"class":63},[40,119332,117927],{"class":50},[40,119334,1284],{"class":1283},[40,119336,108052],{"class":63},[19,119338,119339],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[31,119341,119343],{"className":33679,"code":119342,"language":2323,"meta":36,"style":36},"self.steps = 0\nreturn self._get_obs(), {}\n",[26,119344,119345,119355],{"__ignoreMap":36},[40,119346,119347,119349,119351,119353],{"class":42,"line":43},[40,119348,34123],{"class":63},[40,119350,116997],{"class":50},[40,119352,1284],{"class":1283},[40,119354,50633],{"class":63},[40,119356,119357,119359,119361],{"class":42,"line":54},[40,119358,20368],{"class":1283},[40,119360,42173],{"class":63},[40,119362,117967],{"class":50},[19,119364,119365],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[31,119367,119368],{"className":33679,"code":118641,"language":2323,"meta":36,"style":36},[26,119369,119370],{"__ignoreMap":36},[40,119371,119372,119374,119376],{"class":42,"line":43},[40,119373,35247],{"class":1283},[40,119375,117978],{"class":596},[40,119377,117981],{"class":50},[19,119379,119380],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[31,119382,119384],{"className":33679,"code":119383,"language":2323,"meta":36,"style":36},"action = np.asarray(action, dtype=np.float32)\n",[26,119385,119386],{"__ignoreMap":36},[40,119387,119388,119390,119392,119394,119396,119398],{"class":42,"line":43},[40,119389,110733],{"class":50},[40,119391,1284],{"class":1283},[40,119393,117990],{"class":50},[40,119395,96795],{"class":8539},[40,119397,1284],{"class":1283},[40,119399,117087],{"class":50},[19,119401,119402,119403,776],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[26,119404,119168],{},[31,119406,119408],{"className":33679,"code":119407,"language":2323,"meta":36,"style":36},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[26,119409,119410],{"__ignoreMap":36},[40,119411,119412,119414,119416,119418,119420,119422,119424],{"class":42,"line":43},[40,119413,110733],{"class":50},[40,119415,1284],{"class":1283},[40,119417,110738],{"class":50},[40,119419,34123],{"class":63},[40,119421,118009],{"class":50},[40,119423,34123],{"class":63},[40,119425,118014],{"class":50},[19,119427,119428],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[31,119430,119432],{"className":33679,"code":119431,"language":2323,"meta":36,"style":36},"self.data.ctrl[:] = action\n",[26,119433,119434],{"__ignoreMap":36},[40,119435,119436,119438,119440,119442],{"class":42,"line":43},[40,119437,34123],{"class":63},[40,119439,118025],{"class":50},[40,119441,1284],{"class":1283},[40,119443,110761],{"class":50},[19,119445,119446],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[31,119448,119450],{"className":33679,"code":119449,"language":2323,"meta":36,"style":36},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[26,119451,119452,119468],{"__ignoreMap":36},[40,119453,119454,119456,119458,119460,119462,119464,119466],{"class":42,"line":43},[40,119455,6349],{"class":1283},[40,119457,104792],{"class":50},[40,119459,29355],{"class":1283},[40,119461,35743],{"class":63},[40,119463,3488],{"class":50},[40,119465,34123],{"class":63},[40,119467,118046],{"class":50},[40,119469,119470,119473,119475,119477,119479],{"class":42,"line":54},[40,119471,119472],{"class":50},"    mujoco.mj_step(",[40,119474,34123],{"class":63},[40,119476,117872],{"class":50},[40,119478,34123],{"class":63},[40,119480,117877],{"class":50},[19,119482,119483,119484,119487,119488,119490,119491,776],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[26,119485,119486],{},"frame_skip=5","，所以外部调用一次 ",[26,119489,117168],{},"，内部实际执行 5 次 ",[26,119492,104509],{},[31,119494,119496],{"className":33679,"code":119495,"language":2323,"meta":36,"style":36},"self.steps += 1\n",[26,119497,119498],{"__ignoreMap":36},[40,119499,119500,119502,119504,119506],{"class":42,"line":43},[40,119501,34123],{"class":63},[40,119503,116997],{"class":50},[40,119505,12799],{"class":1283},[40,119507,58997],{"class":63},[19,119509,119510],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[31,119512,119514],{"className":33679,"code":119513,"language":2323,"meta":36,"style":36},"obs = self._get_obs()\nreward = self._get_reward()\n",[26,119515,119516,119526],{"__ignoreMap":36},[40,119517,119518,119520,119522,119524],{"class":42,"line":43},[40,119519,114145],{"class":50},[40,119521,1284],{"class":1283},[40,119523,42173],{"class":63},[40,119525,118088],{"class":50},[40,119527,119528,119530,119532,119534],{"class":42,"line":54},[40,119529,114296],{"class":50},[40,119531,1284],{"class":1283},[40,119533,42173],{"class":63},[40,119535,118099],{"class":50},[19,119537,119538],{},"计算新的观测和奖励。",[31,119540,119542],{"className":33679,"code":119541,"language":2323,"meta":36,"style":36},"dist = float(np.linalg.norm(tip - target))\n",[26,119543,119544],{"__ignoreMap":36},[40,119545,119546,119548,119550,119552,119554,119556],{"class":42,"line":43},[40,119547,114887],{"class":50},[40,119549,1284],{"class":1283},[40,119551,113088],{"class":63},[40,119553,118142],{"class":50},[40,119555,4011],{"class":1283},[40,119557,118147],{"class":50},[19,119559,119560],{},"计算末端到目标的距离，并转换成 Python float。",[31,119562,119563],{"className":33679,"code":116968,"language":2323,"meta":36,"style":36},[26,119564,119565,119577],{"__ignoreMap":36},[40,119566,119567,119569,119571,119573,119575],{"class":42,"line":43},[40,119568,116975],{"class":50},[40,119570,1284],{"class":1283},[40,119572,116980],{"class":50},[40,119574,4387],{"class":1283},[40,119576,116985],{"class":63},[40,119578,119579,119581,119583,119585,119587,119589,119591],{"class":42,"line":54},[40,119580,116990],{"class":50},[40,119582,1284],{"class":1283},[40,119584,42173],{"class":63},[40,119586,116997],{"class":50},[40,119588,5041],{"class":1283},[40,119590,42173],{"class":63},[40,119592,117004],{"class":50},[19,119594,119595],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[31,119597,119599],{"className":33679,"code":119598,"language":2323,"meta":36,"style":36},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[26,119600,119601,119614],{"__ignoreMap":36},[40,119602,119603,119606,119608,119610,119612],{"class":42,"line":43},[40,119604,119605],{"class":50},"info ",[40,119607,1284],{"class":1283},[40,119609,7771],{"class":50},[40,119611,118193],{"class":94},[40,119613,118196],{"class":50},[40,119615,119616,119618],{"class":42,"line":54},[40,119617,20368],{"class":1283},[40,119619,118203],{"class":50},[19,119621,119622,119625],{},[26,119623,119624],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[31,119627,119629],{"className":33679,"code":119628,"language":2323,"meta":36,"style":36},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[26,119630,119631,119640],{"__ignoreMap":36},[40,119632,119633,119636,119638],{"class":42,"line":43},[40,119634,119635],{"class":50},"env ",[40,119637,1284],{"class":1283},[40,119639,118233],{"class":50},[40,119641,119642,119644,119646,119648,119650,119652,119654],{"class":42,"line":54},[40,119643,116691],{"class":50},[40,119645,1284],{"class":1283},[40,119647,118243],{"class":50},[40,119649,117857],{"class":8539},[40,119651,1284],{"class":1283},[40,119653,3672],{"class":63},[40,119655,1811],{"class":50},[19,119657,119658,119659,119662],{},"创建环境并重置。",[26,119660,119661],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[31,119664,119666],{"className":33679,"code":119665,"language":2323,"meta":36,"style":36},"action = env.action_space.sample()\n",[26,119667,119668],{"__ignoreMap":36},[40,119669,119670,119672,119674],{"class":42,"line":43},[40,119671,110733],{"class":50},[40,119673,1284],{"class":1283},[40,119675,118312],{"class":50},[19,119677,119678],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,119680,105607],{"id":105606},[19,119682,108775],{},[31,119684,119687],{"className":119685,"code":119686,"language":8510,"meta":36},[8508],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[26,119688,119686],{"__ignoreMap":36},[19,119690,119691],{},"这个环境已经具备强化学习环境的基本结构。",[19,119693,119694],{},"主函数里使用随机动作：",[31,119696,119697],{"className":33679,"code":119665,"language":2323,"meta":36,"style":36},[26,119698,119699],{"__ignoreMap":36},[40,119700,119701,119703,119705],{"class":42,"line":43},[40,119702,110733],{"class":50},[40,119704,1284],{"class":1283},[40,119706,118312],{"class":50},[19,119708,119709],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,119711,105639],{"id":105638},[492,119713,119714,119717,119723,119732,119741,119750,119756],{},[495,119715,119716],{},"运行程序。",[495,119718,119719,119720,776],{},"确认 ",[26,119721,119722],{},"obs.shape == (10,)",[495,119724,114472,119725,119728,119729,776],{},[26,119726,119727],{},"env.action_space","，应类似 ",[26,119730,119731],{},"Box(-1.0, 1.0, (2,), float32)",[495,119733,108876,119734,119737,119738,776],{},[26,119735,119736],{},"self.max_steps = 10","，确认环境会更快 ",[26,119739,119740],{},"truncated=True",[495,119742,105702,119743,105705,119746,119749],{},[26,119744,119745],{},"terminated = dist \u003C 0.05",[26,119747,119748],{},"dist \u003C 0.2","，观察是否更容易结束。",[495,119751,105702,119752,119755],{},[26,119753,119754],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[495,119757,119758,119759,119761,119762,119765],{},"在 ",[26,119760,119624],{}," 里加入 ",[26,119763,119764],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,119767,105744],{"id":105743},[402,119769,119771],{"id":119770},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,119773,119774,119775,119777],{},"Gymnasium 的 ",[26,119776,110425],{}," 返回 5 个值:",[31,119779,119781],{"className":33679,"code":119780,"language":2323,"meta":36,"style":36},"obs, reward, terminated, truncated, info\n",[26,119782,119783],{"__ignoreMap":36},[40,119784,119785],{"class":42,"line":43},[40,119786,119780],{"class":50},[19,119788,119789],{},"不是旧 Gym 的 4 个值。",[402,119791,119793,119796],{"id":119792},"datactrl-action-维度错误",[26,119794,119795],{},"data.ctrl[:] = action"," 维度错误",[19,119798,105814],{},[31,119800,119802],{"className":33679,"code":119801,"language":2323,"meta":36,"style":36},"print(self.model.nu)\nprint(action.shape)\n",[26,119803,119804,119815],{"__ignoreMap":36},[40,119805,119806,119808,119810,119812],{"class":42,"line":43},[40,119807,33715],{"class":63},[40,119809,3488],{"class":50},[40,119811,34123],{"class":63},[40,119813,119814],{"class":50},".model.nu)\n",[40,119816,119817,119819],{"class":42,"line":54},[40,119818,33715],{"class":63},[40,119820,119821],{"class":50},"(action.shape)\n",[19,119823,119824],{},"两者必须匹配。",[402,119826,119828],{"id":119827},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,119830,105753],{},[31,119832,119834],{"className":33679,"code":119833,"language":2323,"meta":36,"style":36},"mujoco.mj_forward(self.model, self.data)\n",[26,119835,119836],{"__ignoreMap":36},[40,119837,119838,119841,119843,119845,119847],{"class":42,"line":43},[40,119839,119840],{"class":50},"mujoco.mj_forward(",[40,119842,34123],{"class":63},[40,119844,117872],{"class":50},[40,119846,34123],{"class":63},[40,119848,117877],{"class":50},[402,119850,119852,119854],{"id":119851},"observation_space-维度和-obs-不一致",[26,119853,116891],{}," 维度和 obs 不一致",[19,119856,105866],{},[31,119858,119860],{"className":33679,"code":119859,"language":2323,"meta":36,"style":36},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[26,119861,119862,119872,119879],{"__ignoreMap":36},[40,119863,119864,119866,119868,119870],{"class":42,"line":43},[40,119865,114145],{"class":50},[40,119867,1284],{"class":1283},[40,119869,42173],{"class":63},[40,119871,118088],{"class":50},[40,119873,119874,119876],{"class":42,"line":54},[40,119875,33715],{"class":63},[40,119877,119878],{"class":50},"(obs.shape)\n",[40,119880,119881,119883,119885,119887],{"class":42,"line":70},[40,119882,33715],{"class":63},[40,119884,3488],{"class":50},[40,119886,34123],{"class":63},[40,119888,119889],{"class":50},".observation_space.shape)\n",[19,119891,119892],{},"两者必须一致。本章观测是：",[31,119894,119897],{"className":119895,"code":119896,"language":8510,"meta":36},[8508],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[26,119898,119896],{"__ignoreMap":36},[402,119900,119902],{"id":119901},"action-超过范围","action 超过范围",[19,119904,119905],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[31,119907,119908],{"className":33679,"code":119407,"language":2323,"meta":36,"style":36},[26,119909,119910],{"__ignoreMap":36},[40,119911,119912,119914,119916,119918,119920,119922,119924],{"class":42,"line":43},[40,119913,110733],{"class":50},[40,119915,1284],{"class":1283},[40,119917,110738],{"class":50},[40,119919,34123],{"class":63},[40,119921,118009],{"class":50},[40,119923,34123],{"class":63},[40,119925,118014],{"class":50},[19,119927,119928,119929,776],{},"这能避免无效动作直接写入 ",[26,119930,104370],{},[402,119932,119934],{"id":119933},"忘记返回-info","忘记返回 info",[19,119936,119774,119937,104312,119939,119941],{},[26,119938,73353],{},[26,119940,110425],{}," 都会返回 info：",[31,119943,119944],{"className":33679,"code":116684,"language":2323,"meta":36,"style":36},[26,119945,119946,119954],{"__ignoreMap":36},[40,119947,119948,119950,119952],{"class":42,"line":43},[40,119949,116691],{"class":50},[40,119951,1284],{"class":1283},[40,119953,116696],{"class":50},[40,119955,119956,119958,119960],{"class":42,"line":54},[40,119957,116701],{"class":50},[40,119959,1284],{"class":1283},[40,119961,116706],{"class":50},[19,119963,119964,119965,776],{},"即使暂时没有额外信息，也返回 ",[26,119966,35759],{},[14,119968,119970],{"id":119969},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,119972,119973],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[492,119975,119976,119979,119982,119985,119988,119991],{},[495,119977,119978],{},"更稳定的 reward。",[495,119980,119981],{},"合理的 episode 长度。",[495,119983,119984],{},"可重复的随机目标采样。",[495,119986,119987],{},"render 接口。",[495,119989,119990],{},"环境注册代码。",[495,119992,119993],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,119995,119996],{},"如果只是自己写训练循环，最小形式是：",[31,119998,120000],{"className":33679,"code":119999,"language":2323,"meta":36,"style":36},"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",[26,120001,120002,120010,120026,120030,120046,120055,120064,120074],{"__ignoreMap":36},[40,120003,120004,120006,120008],{"class":42,"line":43},[40,120005,119635],{"class":50},[40,120007,1284],{"class":1283},[40,120009,118233],{"class":50},[40,120011,120012,120014,120016,120018,120020,120022,120024],{"class":42,"line":54},[40,120013,116691],{"class":50},[40,120015,1284],{"class":1283},[40,120017,118243],{"class":50},[40,120019,117857],{"class":8539},[40,120021,1284],{"class":1283},[40,120023,3672],{"class":63},[40,120025,1811],{"class":50},[40,120027,120028],{"class":42,"line":70},[40,120029,1413],{"emptyLinePlaceholder":1412},[40,120031,120032,120034,120036,120038,120040,120042,120044],{"class":42,"line":78},[40,120033,6349],{"class":1283},[40,120035,104792],{"class":50},[40,120037,29355],{"class":1283},[40,120039,35743],{"class":63},[40,120041,3488],{"class":50},[40,120043,9733],{"class":63},[40,120045,34086],{"class":50},[40,120047,120048,120051,120053],{"class":42,"line":86},[40,120049,120050],{"class":50},"    action ",[40,120052,1284],{"class":1283},[40,120054,118312],{"class":50},[40,120056,120057,120060,120062],{"class":42,"line":100},[40,120058,120059],{"class":50},"    obs, reward, terminated, truncated, info ",[40,120061,1284],{"class":1283},[40,120063,116706],{"class":50},[40,120065,120066,120068,120070,120072],{"class":42,"line":108},[40,120067,6425],{"class":1283},[40,120069,118378],{"class":50},[40,120071,118381],{"class":1283},[40,120073,118384],{"class":50},[40,120075,120076,120079,120081],{"class":42,"line":121},[40,120077,120078],{"class":50},"        obs, info ",[40,120080,1284],{"class":1283},[40,120082,116696],{"class":50},[14,120084,120086],{"id":120085},"_9本章小结","9.本章小结",[19,120088,120089],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[31,120091,120094],{"className":120092,"code":120093,"language":8510,"meta":36},[8508],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[26,120095,120093],{"__ignoreMap":36},[19,120097,120098],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[3384,120100,120101],{},"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":36,"searchDepth":54,"depth":54,"links":120103},[120104,120105,120106,120113,120117,120118,120119,120129,120130],{"id":103941,"depth":54,"text":103942},{"id":104064,"depth":54,"text":104065},{"id":104338,"depth":54,"text":104339,"children":120107},[120108,120110,120112],{"id":116915,"depth":70,"text":120109},"terminated 和 truncated 的区别",{"id":117018,"depth":70,"text":120111},"observation_space 和 action_space",{"id":117145,"depth":70,"text":117146},{"id":104546,"depth":54,"text":104547,"children":120114},[120115,120116],{"id":104863,"depth":70,"text":104863},{"id":104999,"depth":70,"text":104999},{"id":105606,"depth":54,"text":105607},{"id":105638,"depth":54,"text":105639},{"id":105743,"depth":54,"text":105744,"children":120120},[120121,120122,120124,120125,120127,120128],{"id":119770,"depth":70,"text":119771},{"id":119792,"depth":70,"text":120123},"data.ctrl[:] = action 维度错误",{"id":119827,"depth":70,"text":119828},{"id":119851,"depth":70,"text":120126},"observation_space 维度和 obs 不一致",{"id":119901,"depth":70,"text":119902},{"id":119933,"depth":70,"text":119934},{"id":119969,"depth":54,"text":119970},{"id":120085,"depth":54,"text":120086},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":116668,"description":36},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":120137,"title":120138,"body":120139,"description":120562,"extension":3414,"meta":120563,"navigation":1412,"path":120564,"seo":120565,"stem":120566,"__hash__":120567},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":120140,"toc":120552},[120141,120145,120148,120151,120171,120177,120183,120193,120196,120199,120219,120222,120226,120229,120235,120238,120252,120255,120258,120332,120335,120341,120344,120367,120370,120420,120423,120429,120432,120435,120438,120457,120460,120466,120469,120472,120475,120495,120498,120501,120504,120549],[10,120142,120144],{"id":120143},"mujoco-学习","MuJoCo 学习",[19,120146,120147],{},"初版",[19,120149,120150],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[492,120152,120153,120156,120159,120168],{},[495,120154,120155],{},"MuJoCo 模型文件在描述什么。",[495,120157,120158],{},"Python 代码怎样读取和推进仿真。",[495,120160,120161,3693,120163,3693,120165,120167],{},[26,120162,107321],{},[26,120164,107651],{},[26,120166,107654],{}," 这些数组为什么重要。",[495,120169,120170],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,120172,120173,120174,120176],{},"默认环境为 Fedora 44、Python >= 3.10、",[26,120175,104321],{}," 官方 Python bindings。",[19,120178,120179,120180,120182],{},"注意：本文禁止使用 ",[26,120181,104306],{},"。所有示例均使用：",[31,120184,120185],{"className":33679,"code":104869,"language":2323,"meta":36,"style":36},[26,120186,120187],{"__ignoreMap":36},[40,120188,120189,120191],{"class":42,"line":43},[40,120190,33692],{"class":1283},[40,120192,104592],{"class":50},[14,120194,120195],{"id":120195},"适合谁阅读",[19,120197,120198],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[492,120200,120201,120204,120207,120210],{},[495,120202,120203],{},"没学过 MuJoCo，只会一点 Python。",[495,120205,120206],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[495,120208,120209],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[495,120211,120212,120213,120215,120216,120218],{},"以前接触过 ",[26,120214,104306],{},"，现在想迁移到官方 ",[26,120217,104315],{}," Python bindings。",[19,120220,120221],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,120223,120225],{"id":120224},"mujoco-到底是什么","MuJoCo 到底是什么",[19,120227,120228],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[31,120230,120233],{"className":120231,"code":120232,"language":8510,"meta":36},[8508],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[26,120234,120232],{"__ignoreMap":36},[19,120236,120237],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[492,120239,120240,120243,120246,120249],{},[495,120241,120242],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[495,120244,120245],{},"快速测试控制算法，不必一开始就上真实机器人。",[495,120247,120248],{},"生成强化学习环境。",[495,120250,120251],{},"采集状态、动作、图像、奖励等训练数据。",[14,120253,120254],{"id":120254},"学习前的心智模型",[19,120256,120257],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[3619,120259,120260,120272],{},[3622,120261,120262],{},[3625,120263,120264,120267,120270],{},[3628,120265,120266],{"align":27055},"部分",[3628,120268,120269],{"align":27055},"负责什么",[3628,120271,24508],{"align":27055},[3665,120273,120274,120285,120297,120309,120321],{},[3625,120275,120276,120279,120282],{},[3670,120277,120278],{"align":27055},"MJCF XML",[3670,120280,120281],{"align":27055},"定义世界和机器人结构",[3670,120283,120284],{"align":27055},"地面、盒子、关节、电机、摄像头",[3625,120286,120287,120291,120294],{},[3670,120288,120289],{"align":27055},[26,120290,104004],{},[3670,120292,120293],{"align":27055},"编译后的静态模型",[3670,120295,120296],{"align":27055},"有几个关节、有几个电机、时间步长是多少",[3625,120298,120299,120303,120306],{},[3670,120300,120301],{"align":27055},[26,120302,104014],{},[3670,120304,120305],{"align":27055},"运行中的动态状态",[3670,120307,120308],{"align":27055},"当前时间、位置、速度、电机输入",[3625,120310,120311,120315,120318],{},[3670,120312,120313],{"align":27055},[26,120314,104509],{},[3670,120316,120317],{"align":27055},"推进一步物理仿真",[3670,120319,120320],{"align":27055},"根据重力、力、碰撞更新状态",[3625,120322,120323,120326,120329],{},[3670,120324,120325],{"align":27055},"Viewer \u002F Renderer",[3670,120327,120328],{"align":27055},"把仿真显示出来",[3670,120330,120331],{"align":27055},"打开窗口或保存图片",[19,120333,120334],{},"一句话总结：",[31,120336,120339],{"className":120337,"code":120338,"language":8510,"meta":36},[8508],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[26,120340,120338],{"__ignoreMap":36},[19,120342,120343],{},"参考来源：",[1338,120345,120346,120353,120360],{},[495,120347,120348,120349],{},"MuJoCo Python 官方文档：",[2106,120350,120351],{"href":120351,"rel":120352},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[2110],[495,120354,120355,120356],{},"MuJoCo XML Reference：",[2106,120357,120358],{"href":120358,"rel":120359},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[2110],[495,120361,120362,120363],{},"MuJoCo Overview：",[2106,120364,120365],{"href":120365,"rel":120366},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[2110],[14,120368,120369],{"id":120369},"章节目录",[492,120371,120372,120378,120384,120390,120396,120402,120408,120414],{},[495,120373,120374],{},[2106,120375,120377],{"href":120376},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[495,120379,120380],{},[2106,120381,120383],{"href":120382},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[495,120385,120386],{},[2106,120387,120389],{"href":120388},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[495,120391,120392],{},[2106,120393,120395],{"href":120394},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[495,120397,120398],{},[2106,120399,120401],{"href":120400},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[495,120403,120404],{},[2106,120405,120407],{"href":120406},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[495,120409,120410],{},[2106,120411,120413],{"href":120412},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[495,120415,120416],{},[2106,120417,120419],{"href":120418},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,120421,120422],{"id":120422},"推荐学习路线",[31,120424,120427],{"className":120425,"code":120426,"language":8510,"meta":36},[8508],"环境安装\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",[26,120428,120426],{"__ignoreMap":36},[19,120430,120431],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,120433,120434],{"id":120434},"建议的目录结构",[19,120436,120437],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[31,120439,120441],{"className":27141,"code":120440,"language":27143,"meta":36,"style":36},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[26,120442,120443,120451],{"__ignoreMap":36},[40,120444,120445,120447,120449],{"class":42,"line":43},[40,120446,970],{"class":596},[40,120448,973],{"class":63},[40,120450,104564],{"class":94},[40,120452,120453,120455],{"class":42,"line":54},[40,120454,2288],{"class":63},[40,120456,104564],{"class":94},[19,120458,120459],{},"每一章的代码都单独保存：",[31,120461,120464],{"className":120462,"code":120463,"language":8510,"meta":36},[8508],"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",[26,120465,120463],{"__ignoreMap":36},[19,120467,120468],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,120470,120471],{"id":120471},"学习方法",[19,120473,120474],{},"每章建议按这个顺序操作：",[492,120476,120477,120480,120483,120486,120489,120492],{},[495,120478,120479],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[495,120481,120482],{},"复制最小可运行代码，保存成指定文件。",[495,120484,120485],{},"运行代码，确认没有报错。",[495,120487,120488],{},"对照“运行结果说明”理解输出。",[495,120490,120491],{},"做“验证步骤”，主动改一两个参数。",[495,120493,120494],{},"遇到报错先看“常见错误与解决方案”。",[19,120496,120497],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,120499,120500],{"id":120500},"全局排错顺序",[19,120502,120503],{},"遇到问题时，按下面顺序查：",[492,120505,120506,120512,120518,120523,120526,120529,120536,120546],{},[495,120507,120508,120509],{},"Python 环境是否激活：",[26,120510,120511],{},"which python",[495,120513,120514,120515],{},"MuJoCo 是否能导入：",[26,120516,120517],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[495,120519,120520,120521],{},"是否误装了 ",[26,120522,104306],{},[495,120524,120525],{},"XML 标签是否闭合、属性是否拼写正确",[495,120527,120528],{},"actuator 引用的 joint 名字是否存在",[495,120530,120531,120533,120534],{},[26,120532,104370],{}," 的长度是否等于 ",[26,120535,105449],{},[495,120537,108876,120538,85834,120540,120542,120543],{},[26,120539,107321],{},[26,120541,107651],{}," 后是否调用了 ",[26,120544,120545],{},"mujoco.mj_forward",[495,120547,120548],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[3384,120550,120551],{},"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":36,"searchDepth":54,"depth":54,"links":120553},[120554,120555,120556,120557,120558,120559,120560,120561],{"id":120195,"depth":54,"text":120195},{"id":120224,"depth":54,"text":120225},{"id":120254,"depth":54,"text":120254},{"id":120369,"depth":54,"text":120369},{"id":120422,"depth":54,"text":120422},{"id":120434,"depth":54,"text":120434},{"id":120471,"depth":54,"text":120471},{"id":120500,"depth":54,"text":120500},"仿真搭建。",{"category":26698},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":120138,"description":120562},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":120569,"title":120570,"body":120571,"description":3413,"extension":3414,"meta":121021,"navigation":1412,"path":121022,"seo":121023,"stem":121024,"__hash__":121025},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":120572,"toc":121019},[120573,120576,120579,120585,121016],[10,120574,120570],{"id":120575},"_1-最常用的基本操作更新",[19,120577,120578],{},"装linux系统教程：",[19,120580,120581],{},[2106,120582,120583],{"href":120583,"rel":120584},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[2110],[31,120586,120588],{"className":587,"code":120587,"language":589,"meta":36,"style":36},"#更新相关的知识\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",[26,120589,120590,120595,120600,120608,120613,120621,120626,120645,120650,120661,120666,120675,120680,120708,120713,120732,120737,120756,120760,120765,120781,120785,120790,120820,120824,120829,120845,120849,120854,120869,120873,120878,120894,120898,120903,120915,120927,120931,120936,120953,120957,120962,120980,120984,120989,120998,121002,121007],{"__ignoreMap":36},[40,120591,120592],{"class":42,"line":43},[40,120593,120594],{"class":997},"#更新相关的知识\n",[40,120596,120597],{"class":42,"line":54},[40,120598,120599],{"class":997},"# 更新软件包列表（从服务器获取最新软件信息）\n",[40,120601,120602,120604,120606],{"class":42,"line":70},[40,120603,923],{"class":596},[40,120605,926],{"class":94},[40,120607,2126],{"class":94},[40,120609,120610],{"class":42,"line":78},[40,120611,120612],{"class":997},"# 升级所有可更新的软件包（不删除旧包）\n",[40,120614,120615,120617,120619],{"class":42,"line":86},[40,120616,923],{"class":596},[40,120618,926],{"class":94},[40,120620,2238],{"class":94},[40,120622,120623],{"class":42,"line":100},[40,120624,120625],{"class":997},"#更新和升级软件包\n",[40,120627,120628,120630,120632,120634,120636,120638,120640,120643],{"class":42,"line":108},[40,120629,923],{"class":596},[40,120631,926],{"class":94},[40,120633,2230],{"class":94},[40,120635,2233],{"class":50},[40,120637,923],{"class":596},[40,120639,926],{"class":94},[40,120641,120642],{"class":94}," upgrade",[40,120644,104275],{"class":63},[40,120646,120647],{"class":42,"line":121},[40,120648,120649],{"class":997},"#列出可更新的软件包及版本信息\n",[40,120651,120652,120655,120658],{"class":42,"line":134},[40,120653,120654],{"class":596},"apt",[40,120656,120657],{"class":94}," list",[40,120659,120660],{"class":63}," --upgradable\n",[40,120662,120663],{"class":42,"line":146},[40,120664,120665],{"class":997},"#彻底升级（处理依赖关系，可能删除旧包）\n",[40,120667,120668,120670,120672],{"class":42,"line":154},[40,120669,923],{"class":596},[40,120671,926],{"class":94},[40,120673,120674],{"class":94}," full-upgrade\n",[40,120676,120677],{"class":42,"line":162},[40,120678,120679],{"class":997},"#设置指定版本\n",[40,120681,120682,120684,120686,120688,120690,120693,120695,120697,120699,120701,120704,120706],{"class":42,"line":170},[40,120683,923],{"class":596},[40,120685,926],{"class":94},[40,120687,929],{"class":94},[40,120689,32205],{"class":1283},[40,120691,120692],{"class":94},"package_nam",[40,120694,3558],{"class":50},[40,120696,4437],{"class":1283},[40,120698,1284],{"class":94},[40,120700,4387],{"class":1283},[40,120702,120703],{"class":94},"version_numbe",[40,120705,4148],{"class":50},[40,120707,54606],{"class":1283},[40,120709,120710],{"class":42,"line":183},[40,120711,120712],{"class":997},"#只安装软件包不升级\n",[40,120714,120715,120717,120719,120721,120723,120725,120727,120729],{"class":42,"line":196},[40,120716,923],{"class":596},[40,120718,926],{"class":94},[40,120720,929],{"class":94},[40,120722,32205],{"class":1283},[40,120724,120692],{"class":94},[40,120726,3558],{"class":50},[40,120728,4437],{"class":1283},[40,120730,120731],{"class":63}," --no-upgrade\n",[40,120733,120734],{"class":42,"line":204},[40,120735,120736],{"class":997},"#只升级，不存在就不安装\n",[40,120738,120739,120741,120743,120745,120747,120749,120751,120753],{"class":42,"line":217},[40,120740,923],{"class":596},[40,120742,926],{"class":94},[40,120744,929],{"class":94},[40,120746,32205],{"class":1283},[40,120748,120692],{"class":94},[40,120750,3558],{"class":50},[40,120752,4437],{"class":1283},[40,120754,120755],{"class":63}," --only-upgrade\n",[40,120757,120758],{"class":42,"line":230},[40,120759,1413],{"emptyLinePlaceholder":1412},[40,120761,120762],{"class":42,"line":238},[40,120763,120764],{"class":997},"#安装指定的软件命令\n",[40,120766,120767,120769,120771,120773,120775,120777,120779],{"class":42,"line":251},[40,120768,923],{"class":596},[40,120770,926],{"class":94},[40,120772,929],{"class":94},[40,120774,32205],{"class":1283},[40,120776,120692],{"class":94},[40,120778,3558],{"class":50},[40,120780,54606],{"class":1283},[40,120782,120783],{"class":42,"line":264},[40,120784,1413],{"emptyLinePlaceholder":1412},[40,120786,120787],{"class":42,"line":277},[40,120788,120789],{"class":997},"#安装多个软件包\n",[40,120791,120792,120794,120796,120798,120800,120803,120806,120808,120810,120813,120815,120817],{"class":42,"line":290},[40,120793,923],{"class":596},[40,120795,926],{"class":94},[40,120797,929],{"class":94},[40,120799,32205],{"class":1283},[40,120801,120802],{"class":94},"package_",[40,120804,120805],{"class":1283},"1>",[40,120807,32205],{"class":1283},[40,120809,120802],{"class":94},[40,120811,120812],{"class":1283},"2>",[40,120814,32205],{"class":1283},[40,120816,120802],{"class":94},[40,120818,120819],{"class":1283},"3>\n",[40,120821,120822],{"class":42,"line":298},[40,120823,1413],{"emptyLinePlaceholder":1412},[40,120825,120826],{"class":42,"line":310},[40,120827,120828],{"class":997},"#更新指定的软件命令\n",[40,120830,120831,120833,120835,120837,120839,120841,120843],{"class":42,"line":5086},[40,120832,923],{"class":596},[40,120834,926],{"class":94},[40,120836,2230],{"class":94},[40,120838,32205],{"class":1283},[40,120840,120692],{"class":94},[40,120842,3558],{"class":50},[40,120844,54606],{"class":1283},[40,120846,120847],{"class":42,"line":5091},[40,120848,1413],{"emptyLinePlaceholder":1412},[40,120850,120851],{"class":42,"line":5105},[40,120852,120853],{"class":997},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[40,120855,120856,120858,120861,120863,120865,120867],{"class":42,"line":5110},[40,120857,120654],{"class":596},[40,120859,120860],{"class":94}," show",[40,120862,32205],{"class":1283},[40,120864,120692],{"class":94},[40,120866,3558],{"class":50},[40,120868,54606],{"class":1283},[40,120870,120871],{"class":42,"line":5902},[40,120872,1413],{"emptyLinePlaceholder":1412},[40,120874,120875],{"class":42,"line":5916},[40,120876,120877],{"class":997},"#删除软件包命令\n",[40,120879,120880,120882,120884,120886,120888,120890,120892],{"class":42,"line":5924},[40,120881,923],{"class":596},[40,120883,926],{"class":94},[40,120885,29391],{"class":94},[40,120887,32205],{"class":1283},[40,120889,120692],{"class":94},[40,120891,3558],{"class":50},[40,120893,54606],{"class":1283},[40,120895,120896],{"class":42,"line":5929},[40,120897,1413],{"emptyLinePlaceholder":1412},[40,120899,120900],{"class":42,"line":5935},[40,120901,120902],{"class":997},"# 清理旧版本和缓存（释放磁盘空间）\n",[40,120904,120905,120907,120909,120912],{"class":42,"line":5941},[40,120906,923],{"class":596},[40,120908,926],{"class":94},[40,120910,120911],{"class":94}," autoremove",[40,120913,120914],{"class":997},"  # 删除不再需要的依赖和库文件\n",[40,120916,120917,120919,120921,120924],{"class":42,"line":5946},[40,120918,923],{"class":596},[40,120920,926],{"class":94},[40,120922,120923],{"class":94}," clean",[40,120925,120926],{"class":997},"       # 清理下载的缓存包\n",[40,120928,120929],{"class":42,"line":11270},[40,120930,1413],{"emptyLinePlaceholder":1412},[40,120932,120933],{"class":42,"line":11294},[40,120934,120935],{"class":997},"#移除软件包及配置文件\n",[40,120937,120938,120940,120942,120945,120947,120949,120951],{"class":42,"line":11299},[40,120939,923],{"class":596},[40,120941,926],{"class":94},[40,120943,120944],{"class":94}," purge",[40,120946,32205],{"class":1283},[40,120948,120692],{"class":94},[40,120950,3558],{"class":50},[40,120952,54606],{"class":1283},[40,120954,120955],{"class":42,"line":11305},[40,120956,1413],{"emptyLinePlaceholder":1412},[40,120958,120959],{"class":42,"line":11332},[40,120960,120961],{"class":997},"#查找软件包命令\n",[40,120963,120964,120966,120968,120971,120973,120976,120978],{"class":42,"line":11337},[40,120965,923],{"class":596},[40,120967,926],{"class":94},[40,120969,120970],{"class":94}," search",[40,120972,32205],{"class":1283},[40,120974,120975],{"class":94},"keywor",[40,120977,3794],{"class":50},[40,120979,54606],{"class":1283},[40,120981,120982],{"class":42,"line":11343},[40,120983,1413],{"emptyLinePlaceholder":1412},[40,120985,120986],{"class":42,"line":11355},[40,120987,120988],{"class":997},"#列出所有已安装的包\n",[40,120990,120991,120993,120995],{"class":42,"line":11367},[40,120992,120654],{"class":596},[40,120994,120657],{"class":94},[40,120996,120997],{"class":63}," --installed\n",[40,120999,121000],{"class":42,"line":11379},[40,121001,1413],{"emptyLinePlaceholder":1412},[40,121003,121004],{"class":42,"line":13038},[40,121005,121006],{"class":997},"#列出所有已安装的包的版本信息\n",[40,121008,121009,121011,121013],{"class":42,"line":13063},[40,121010,120654],{"class":596},[40,121012,120657],{"class":94},[40,121014,121015],{"class":63}," --all-versions\n",[3384,121017,121018],{},"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":36,"searchDepth":54,"depth":54,"links":121020},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":120570,"description":3413},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":121027,"title":121028,"body":121029,"description":3413,"extension":3414,"meta":121769,"navigation":1412,"path":121770,"seo":121771,"stem":121772,"__hash__":121773},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":121030,"toc":121756},[121031,121034,121038,121041,121047,121051,121055,121061,121066,121071,121076,121081,121086,121089,121092,121095,121098,121102,121105,121110,121113,121118,121121,121126,121133,121136,121139,121142,121145,121148,121159,121163,121167,121172,121177,121181,121186,121190,121195,121199,121203,121208,121211,121255,121260,121264,121268,121273,121279,121284,121294,121299,121309,121314,121319,121346,121350,121353,121358,121361,121386,121390,121395,121398,121403,121408,121428,121433,121436,121451,121455,121508,121511,121516,121520,121523,121538,121541,121544,121549,121553,121557,121560,121564,121568,121571,121576,121581,121585,121592,121600,121603,121610,121615,121620,121623,121628,121635,121640,121647,121651,121653,121658,121662,121665,121668,121673,121676,121681,121684,121689,121694,121699,121703,121708,121712,121753],[10,121032,121028],{"id":121033},"_2-linux装机教程",[14,121035,121037],{"id":121036},"_21-实体机","2.1 实体机",[19,121039,121040],{},"使用清华源：（Ubuntu24.04）",[19,121042,121043],{},[2106,121044,121045],{"href":121045,"rel":121046},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[2110],[14,121048,121050],{"id":121049},"_22-普通虚拟机","2.2 普通虚拟机",[402,121052,121054],{"id":121053},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,121056,121057],{},[2106,121058,121059],{"href":121059,"rel":121060},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[2110],[19,121062,121063],{},[438,121064],{"alt":36,"src":121065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,121067,121068],{},[438,121069],{"alt":36,"src":121070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,121072,121073],{},[438,121074],{"alt":36,"src":121075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,121077,121078],{},[438,121079],{"alt":36,"src":121080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,121082,121083],{},[438,121084],{"alt":36,"src":121085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,121087,121088],{},"内存4G（4096MB）；",[19,121090,121091],{},"CPU给4个核；",[19,121093,121094],{},"硬盘动态分配60G；",[19,121096,121097],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[402,121099,121101],{"id":121100},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,121103,121104],{},"按照1.1的步骤下载Ubuntu",[19,121106,121107],{},[438,121108],{"alt":36,"src":121109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,121111,121112],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,121114,121115],{},[438,121116],{"alt":36,"src":121117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,121119,121120],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,121122,121123],{},[438,121124],{"alt":36,"src":121125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,121127,121128,121129,121132],{},"选择“正常安装”(找不到都用Alt+F7)， ",[409,121130,121131],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,121134,121135],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,121137,121138],{},"将改动写入磁盘吗 继续",[19,121140,121141],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,121143,121144],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,121146,121147],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,121149,121150,121151,121154,121155,121158],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[409,121152,121153],{},"除了"," 选不发送系统信息与不升级之外， ",[409,121156,121157],{},"其它"," 都跳过或前进）",[402,121160,121162],{"id":121161},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[2423,121164,121166],{"id":121165},"_2231-全屏","2.2.3.1 全屏",[19,121168,121169],{},[438,121170],{"alt":36,"src":121171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,121173,121174],{},[438,121175],{"alt":36,"src":121176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[2423,121178,121180],{"id":121179},"_2232-文件交换","2.2.3.2 文件交换",[19,121182,121183],{},[438,121184],{"alt":36,"src":121185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[2423,121187,121189],{"id":121188},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,121191,121192],{},[438,121193],{"alt":36,"src":121194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,121196,121198],{"id":121197},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[402,121200,121202],{"id":121201},"_231-简介与优缺点","2.3.1 简介与优缺点",[492,121204,121205],{},[495,121206,121207],{},"什么情况下推荐？",[19,121209,121210],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[492,121212,121213],{"start":54},[495,121214,121215,121216],{},"优缺点：",[492,121217,121218,121248],{},[495,121219,121220,121221],{},"优点：",[492,121222,121223,121226,121233,121236,121239,121242,121245],{},[495,121224,121225],{},"WSL2是最好的Linux发行版;(bushi)",[495,121227,121228,121229,121232],{},"性能损耗极低。且比在Windows上跑深度性能 ",[409,121230,121231],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[495,121234,121235],{},"非常方便调用USB设备，可以USB直通;",[495,121237,121238],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[495,121240,121241],{},"非常方便Win与WSL2互相传文件等协同操作;",[495,121243,121244],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[495,121246,121247],{},"非常方便使用Windows的VScode远程开发;",[495,121249,1491,121250],{},[492,121251,121252],{},[495,121253,121254],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,121256,121257],{},[438,121258],{"alt":36,"src":121259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[402,121261,121263],{"id":121262},"_232-安装教程","2.3.2 安装教程",[2423,121265,121267],{"id":121266},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[492,121269,121270],{},[495,121271,121272],{},"方法一(图形界面)",[19,121274,121275,121276,27933],{},"用Win+R输入",[26,121277,121278],{},"appwiz.cpl",[19,121280,121281],{},[438,121282],{"alt":36,"src":121283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,121285,121286,121287,121290,121291,2261],{},"点击OK进入 ",[409,121288,121289],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[409,121292,121293],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,121295,121296],{},[438,121297],{"alt":36,"src":121298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,121300,121301,121302,104312,121305,121308],{},"选择 ",[409,121303,121304],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[409,121306,121307],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,121310,121311],{},[438,121312],{"alt":36,"src":121313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[492,121315,121316],{"start":54},[495,121317,121318],{},"方法二(命令行)",[31,121320,121324],{"className":121321,"code":121322,"language":121323,"meta":36,"style":36},"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",[26,121325,121326,121331,121336,121341],{"__ignoreMap":36},[40,121327,121328],{"class":42,"line":43},[40,121329,121330],{},"# 开启 Linux 子系统\n",[40,121332,121333],{"class":42,"line":54},[40,121334,121335],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[40,121337,121338],{"class":42,"line":70},[40,121339,121340],{},"# 开启虚拟机平台\n",[40,121342,121343],{"class":42,"line":78},[40,121344,121345],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[2423,121347,121349],{"id":121348},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,121351,121352],{},"用管理员权限打开powershell",[19,121354,121355],{},[438,121356],{"alt":36,"src":121357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,121359,121360],{},"升级WSL并设置默认版本为WSL2",[31,121362,121364],{"className":121321,"code":121363,"language":121323,"meta":36,"style":36},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[26,121365,121366,121371,121376,121381],{"__ignoreMap":36},[40,121367,121368],{"class":42,"line":43},[40,121369,121370],{},"# 更新 wsl\n",[40,121372,121373],{"class":42,"line":54},[40,121374,121375],{},"wsl --update\n",[40,121377,121378],{"class":42,"line":70},[40,121379,121380],{},"# 将 wsl 版本设置为 wsl2\n",[40,121382,121383],{"class":42,"line":78},[40,121384,121385],{},"wsl --set-default-version 2\n",[2423,121387,121389],{"id":121388},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[492,121391,121392],{},[495,121393,121394],{},"方式一(商店下载)",[19,121396,121397],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,121399,121400],{},[438,121401],{"alt":36,"src":121402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[492,121404,121405],{"start":54},[495,121406,121407],{},"方式二(命令行安装)",[31,121409,121411],{"className":121321,"code":121410,"language":121323,"meta":36,"style":36},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[26,121412,121413,121418,121423],{"__ignoreMap":36},[40,121414,121415],{"class":42,"line":43},[40,121416,121417],{},"# 列出可安装的 Linux 版本\n",[40,121419,121420],{"class":42,"line":54},[40,121421,121422],{},"#（需要科学手段）\n",[40,121424,121425],{"class":42,"line":70},[40,121426,121427],{},"wsl --list --online\n",[19,121429,121430],{},[438,121431],{"alt":36,"src":121432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,121434,121435],{},"选择对应发行版并安装",[31,121437,121439],{"className":121321,"code":121438,"language":121323,"meta":36,"style":36},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[26,121440,121441,121446],{"__ignoreMap":36},[40,121442,121443],{"class":42,"line":43},[40,121444,121445],{},"# Ubuntu安装完毕后需要重启系统\n",[40,121447,121448],{"class":42,"line":54},[40,121449,121450],{},"wsl --install -d Ubuntu-24.04\n",[2423,121452,121454],{"id":121453},"_2324-查看系统状态","2.3.2.4 查看系统状态",[31,121456,121458],{"className":121321,"code":121457,"language":121323,"meta":36,"style":36},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[26,121459,121460,121465,121470,121475,121480,121484,121488,121493,121498,121503],{"__ignoreMap":36},[40,121461,121462],{"class":42,"line":43},[40,121463,121464],{},"# 查看 wsl\n",[40,121466,121467],{"class":42,"line":54},[40,121468,121469],{},"wsl -l\n",[40,121471,121472],{"class":42,"line":70},[40,121473,121474],{},"# 查看 wsl 运行版本或模式\n",[40,121476,121477],{"class":42,"line":78},[40,121478,121479],{},"wsl -l -v\n",[40,121481,121482],{"class":42,"line":86},[40,121483,1413],{"emptyLinePlaceholder":1412},[40,121485,121486],{"class":42,"line":100},[40,121487,1413],{"emptyLinePlaceholder":1412},[40,121489,121490],{"class":42,"line":108},[40,121491,121492],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[40,121494,121495],{"class":42,"line":121},[40,121496,121497],{},"wsl --set-version \u003Cdistro> 2\n",[40,121499,121500],{"class":42,"line":134},[40,121501,121502],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[40,121504,121505],{"class":42,"line":146},[40,121506,121507],{},"wsl --unregister \u003Cdistro>\n",[19,121509,121510],{},"输出Version为2即正常",[19,121512,121513],{},[438,121514],{"alt":36,"src":121515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[2423,121517,121519],{"id":121518},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,121521,121522],{},"直接在Powershell里输入wsl命令进入子系统",[31,121524,121526],{"className":121321,"code":121525,"language":121323,"meta":36,"style":36},"# 进入子系统\nwsl\n",[26,121527,121528,121533],{"__ignoreMap":36},[40,121529,121530],{"class":42,"line":43},[40,121531,121532],{},"# 进入子系统\n",[40,121534,121535],{"class":42,"line":54},[40,121536,121537],{},"wsl\n",[19,121539,121540],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,121542,121543],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,121545,121546],{},[438,121547],{"alt":36,"src":121548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[402,121550,121552],{"id":121551},"_233-配置各种环境","2.3.3 配置各种环境",[2423,121554,121556],{"id":121555},"_2331-换源","2.3.3.1 换源",[19,121558,121559],{},"(同实体机LINUX，往下找教程)",[2423,121561,121563],{"id":121562},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[26230,121565,121567],{"id":121566},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,121569,121570],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,121572,121573],{},[438,121574],{"alt":36,"src":121575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,121577,121578],{},[438,121579],{"alt":36,"src":121580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[26230,121582,121584],{"id":121583},"_23322-cuda","2.3.3.2.2 CUDA",[19,121586,121587,121588],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[2106,121589,121590],{"href":121590,"rel":121591},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[2110],[19,121593,121594,121597],{},[438,121595],{"alt":36,"src":121596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[438,121598],{"alt":36,"src":121599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,121601,121602],{},"在下方的网站，选择合适的版本。",[19,121604,121605,121606],{},"WSL2 专属 CUDA 指南：",[2106,121607,121608],{"href":121608,"rel":121609},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[2110],[19,121611,121612],{},[409,121613,121614],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,121616,121617],{},[438,121618],{"alt":36,"src":121619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,121621,121622],{},"挨行敲一遍",[19,121624,121625],{},[438,121626],{"alt":36,"src":121627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,121629,121630,121631,121634],{},"敲完后，输入",[26,121632,121633],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,121636,121637],{},[438,121638],{"alt":36,"src":121639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,121641,121642,121643,121646],{},"（请详看下方教程的",[409,121644,121645],{},"安装CUDA的配置环境来看","如何配置环境）",[26230,121648,121650],{"id":121649},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,121652,121559],{},[19,121654,121655],{},[438,121656],{"alt":36,"src":121657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[2423,121659,121661],{"id":121660},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,121663,121664],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,121666,121667],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,121669,121670],{},[438,121671],{"alt":36,"src":121672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,121674,121675],{},"连接WSL2",[19,121677,121678],{},[438,121679],{"alt":36,"src":121680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,121682,121683],{},"远程开发成功。",[19,121685,121686],{},[438,121687],{"alt":36,"src":121688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,121690,121691],{},[438,121692],{"alt":36,"src":121693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,121695,121696],{},[438,121697],{"alt":36,"src":121698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[2423,121700,121702],{"id":121701},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,121704,121705],{},[438,121706],{"alt":36,"src":121707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[2423,121709,121711],{"id":121710},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[31,121713,121715],{"className":587,"code":121714,"language":589,"meta":36,"style":36},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[26,121716,121717,121725,121733,121744,121748],{"__ignoreMap":36},[40,121718,121719,121721,121723],{"class":42,"line":43},[40,121720,923],{"class":596},[40,121722,926],{"class":94},[40,121724,2126],{"class":94},[40,121726,121727,121729,121731],{"class":42,"line":54},[40,121728,923],{"class":596},[40,121730,926],{"class":94},[40,121732,2238],{"class":94},[40,121734,121735,121737,121739,121741],{"class":42,"line":70},[40,121736,923],{"class":596},[40,121738,926],{"class":94},[40,121740,929],{"class":94},[40,121742,121743],{"class":94}," mesa-utils\n",[40,121745,121746],{"class":42,"line":78},[40,121747,1413],{"emptyLinePlaceholder":1412},[40,121749,121750],{"class":42,"line":86},[40,121751,121752],{"class":997},"#然后重启wsl2即可\n",[3384,121754,121755],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":36,"searchDepth":54,"depth":54,"links":121757},[121758,121759,121764],{"id":121036,"depth":54,"text":121037},{"id":121049,"depth":54,"text":121050,"children":121760},[121761,121762,121763],{"id":121053,"depth":70,"text":121054},{"id":121100,"depth":70,"text":121101},{"id":121161,"depth":70,"text":121162},{"id":121197,"depth":54,"text":121198,"children":121765},[121766,121767,121768],{"id":121201,"depth":70,"text":121202},{"id":121262,"depth":70,"text":121263},{"id":121551,"depth":70,"text":121552},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":121028,"description":3413},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":121775,"title":121776,"body":121777,"description":3413,"extension":3414,"meta":124705,"navigation":1412,"path":124706,"seo":124707,"stem":124708,"__hash__":124709},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":121778,"toc":124677},[121779,121782,121786,121792,121796,121802,121806,121993,121996,122001,122005,122009,122012,122015,122021,122026,122029,122032,122037,122070,122075,122079,122156,122159,122164,122168,122171,122210,122213,122222,122240,122245,122252,122369,122374,122377,122404,122409,122413,122422,122472,122479,122483,122486,122500,122506,122540,122545,122549,122572,122575,122580,122584,122587,122590,122593,122635,122639,122642,122645,122686,122690,122694,122697,122702,122707,122710,122733,122736,122744,122749,122752,122757,122762,122765,122770,122774,122779,122802,122807,122869,122877,122882,122887,122890,122895,122898,122903,122908,122926,122931,122937,122942,122956,122960,122963,122966,122969,123012,123015,123020,123121,123124,123129,123133,123137,123174,123178,123182,123186,123232,123236,123281,123285,123292,123300,123354,123357,123434,123437,123460,123464,123467,123472,123477,123485,123488,123493,123498,123503,123506,123511,123520,123523,123528,123531,123602,123607,123610,123615,123618,123623,123626,123631,123634,123639,123644,123647,123722,123725,123738,123743,123746,123760,123763,123792,123797,123826,123829,123834,123838,123843,123852,123855,123860,123863,123868,123871,123874,123879,123882,123887,123892,123895,123900,123903,124028,124033,124063,124066,124071,124076,124093,124096,124136,124139,124166,124171,124184,124327,124331,124336,124350,124353,124404,124407,124437,124440,124456,124461,124475,124478,124545,124550,124559,124564,124567,124577,124582,124589,124613,124616,124621,124624,124643,124648,124655,124667,124674],[10,121780,121776],{"id":121781},"_3-安装必备配置",[14,121783,121785],{"id":121784},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[31,121787,121790],{"className":121788,"code":121789,"language":8510},[8508],"  打开下方网站（注意，该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",[26,121791,121789],{"__ignoreMap":36},[402,121793,121795],{"id":121794},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[31,121797,121800],{"className":121798,"code":121799,"language":8510},[8508],"  输入以下命令\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",[26,121801,121799],{"__ignoreMap":36},[402,121803,121805],{"id":121804},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[31,121807,121811],{"className":121808,"code":121809,"language":121810,"meta":36,"style":36},"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",[26,121812,121813,121821,121832,121844,121858,121862,121871,121876,121880,121884,121889,121893,121905,121909,121914,121918,121929,121933,121949,121953,121964,121968,121973,121977,121985],{"__ignoreMap":36},[40,121814,121815,121817,121819],{"class":42,"line":43},[40,121816,923],{"class":596},[40,121818,926],{"class":94},[40,121820,2126],{"class":94},[40,121822,121823,121825,121827,121829],{"class":42,"line":54},[40,121824,923],{"class":596},[40,121826,926],{"class":94},[40,121828,929],{"class":94},[40,121830,121831],{"class":94}," vim\n",[40,121833,121834,121836,121839,121841],{"class":42,"line":70},[40,121835,923],{"class":596},[40,121837,121838],{"class":94}," rm",[40,121840,28638],{"class":63},[40,121842,121843],{"class":94}," \u002Fetc\u002Fapt\u002Fsources.list\n",[40,121845,121846,121848,121850,121852,121855],{"class":42,"line":78},[40,121847,923],{"class":596},[40,121849,121838],{"class":94},[40,121851,28638],{"class":63},[40,121853,121854],{"class":94}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[40,121856,121857],{"class":63},"**\n",[40,121859,121860],{"class":42,"line":86},[40,121861,1413],{"emptyLinePlaceholder":1412},[40,121863,121864,121866,121868],{"class":42,"line":100},[40,121865,923],{"class":596},[40,121867,1264],{"class":94},[40,121869,121870],{"class":94}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[40,121872,121873],{"class":42,"line":108},[40,121874,121875],{"class":94},"```\n",[40,121877,121878],{"class":42,"line":121},[40,121879,1413],{"emptyLinePlaceholder":1412},[40,121881,121882],{"class":42,"line":134},[40,121883,1413],{"emptyLinePlaceholder":1412},[40,121885,121886],{"class":42,"line":146},[40,121887,121888],{"class":596},"选择好Ubuntu版本后，复制下方的内容。\n",[40,121890,121891],{"class":42,"line":154},[40,121892,1413],{"emptyLinePlaceholder":1412},[40,121894,121895,121897,121900,121903],{"class":42,"line":162},[40,121896,3707],{"class":1283},[40,121898,121899],{"class":94},"[](",[40,121901,121902],{"class":596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[40,121904,1811],{"class":94},[40,121906,121907],{"class":42,"line":170},[40,121908,1413],{"emptyLinePlaceholder":1412},[40,121910,121911],{"class":42,"line":183},[40,121912,121913],{"class":596},"粘贴进去\n",[40,121915,121916],{"class":42,"line":196},[40,121917,1413],{"emptyLinePlaceholder":1412},[40,121919,121920,121922,121924,121927],{"class":42,"line":204},[40,121921,3707],{"class":1283},[40,121923,121899],{"class":94},[40,121925,121926],{"class":596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[40,121928,1811],{"class":94},[40,121930,121931],{"class":42,"line":217},[40,121932,1413],{"emptyLinePlaceholder":1412},[40,121934,121935,121938,121941,121944,121946],{"class":42,"line":230},[40,121936,121937],{"class":596},"按一下ESC，然后英文冒号，输入",[40,121939,121940],{"class":94}," `",[40,121942,121943],{"class":596},":wq!",[40,121945,4449],{"class":94},[40,121947,121948],{"class":596},"然后回车\n",[40,121950,121951],{"class":42,"line":238},[40,121952,1413],{"emptyLinePlaceholder":1412},[40,121954,121955,121957,121959,121962],{"class":42,"line":251},[40,121956,3707],{"class":1283},[40,121958,121899],{"class":94},[40,121960,121961],{"class":596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[40,121963,1811],{"class":94},[40,121965,121966],{"class":42,"line":264},[40,121967,1413],{"emptyLinePlaceholder":1412},[40,121969,121970],{"class":42,"line":277},[40,121971,121972],{"class":596},"输入以下命令\n",[40,121974,121975],{"class":42,"line":290},[40,121976,1413],{"emptyLinePlaceholder":1412},[40,121978,121979,121982],{"class":42,"line":298},[40,121980,121981],{"class":94},"```",[40,121983,121984],{"class":596},"Bash\n",[40,121986,121987,121989,121991],{"class":42,"line":310},[40,121988,923],{"class":596},[40,121990,926],{"class":94},[40,121992,2126],{"class":94},[19,121994,121995],{},"这里被替换成对应学校则成功",[19,121997,121998],{},[438,121999],{"alt":36,"src":122000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,122002,122004],{"id":122003},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[402,122006,122008],{"id":122007},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,122010,122011],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,122013,122014],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,122016,122017],{},[2106,122018,122019],{"href":122019,"rel":122020},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[2110],[19,122022,122023],{},[438,122024],{"alt":36,"src":122025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,122027,122028],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,122030,122031],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,122033,122034],{},[438,122035],{"alt":36,"src":122036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[31,122038,122040],{"className":587,"code":122039,"language":589,"meta":36,"style":36},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[26,122041,122042,122047,122054,122059],{"__ignoreMap":36},[40,122043,122044],{"class":42,"line":43},[40,122045,122046],{"class":997},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[40,122048,122049,122051],{"class":42,"line":54},[40,122050,2288],{"class":63},[40,122052,122053],{"class":94}," ~\u002FDownloads\n",[40,122055,122056],{"class":42,"line":70},[40,122057,122058],{"class":997},"#下方chrome安装包名不一定是这个，根据名字来看\n",[40,122060,122061,122063,122065,122067],{"class":42,"line":78},[40,122062,923],{"class":596},[40,122064,926],{"class":94},[40,122066,929],{"class":94},[40,122068,122069],{"class":94}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,122071,122072],{},[438,122073],{"alt":36,"src":122074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[402,122076,122078],{"id":122077},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[31,122080,122082],{"className":587,"code":122081,"language":589,"meta":36,"style":36},"# 老版\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",[26,122083,122084,122089,122097,122108,122113,122117,122122,122132,122140,122151],{"__ignoreMap":36},[40,122085,122086],{"class":42,"line":43},[40,122087,122088],{"class":997},"# 老版\n",[40,122090,122091,122093,122095],{"class":42,"line":54},[40,122092,923],{"class":596},[40,122094,926],{"class":94},[40,122096,2126],{"class":94},[40,122098,122099,122101,122103,122105],{"class":42,"line":70},[40,122100,923],{"class":596},[40,122102,926],{"class":94},[40,122104,929],{"class":94},[40,122106,122107],{"class":94}," neofetch\n",[40,122109,122110],{"class":42,"line":78},[40,122111,122112],{"class":596},"neofetch\n",[40,122114,122115],{"class":42,"line":86},[40,122116,1413],{"emptyLinePlaceholder":1412},[40,122118,122119],{"class":42,"line":100},[40,122120,122121],{"class":997},"# 新版\n",[40,122123,122124,122126,122129],{"class":42,"line":108},[40,122125,923],{"class":596},[40,122127,122128],{"class":94}," add-apt-repository",[40,122130,122131],{"class":94}," ppa:zhangsongcui3371\u002Ffastfetch\n",[40,122133,122134,122136,122138],{"class":42,"line":121},[40,122135,923],{"class":596},[40,122137,926],{"class":94},[40,122139,2126],{"class":94},[40,122141,122142,122144,122146,122148],{"class":42,"line":134},[40,122143,923],{"class":596},[40,122145,926],{"class":94},[40,122147,929],{"class":94},[40,122149,122150],{"class":94}," fastfetch\n",[40,122152,122153],{"class":42,"line":146},[40,122154,122155],{"class":596},"fastfetch\n",[19,122157,122158],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,122160,122161],{},[438,122162],{"alt":36,"src":122163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[402,122165,122167],{"id":122166},"_323-移除snap应用","3.2.3 移除snap应用",[19,122169,122170],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[31,122172,122174],{"className":587,"code":122173,"language":589,"meta":36,"style":36},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[26,122175,122176,122188,122199],{"__ignoreMap":36},[40,122177,122178,122180,122182,122185],{"class":42,"line":43},[40,122179,923],{"class":596},[40,122181,29822],{"class":94},[40,122183,122184],{"class":94}," disable",[40,122186,122187],{"class":94}," snapd.service\n",[40,122189,122190,122192,122194,122196],{"class":42,"line":54},[40,122191,923],{"class":596},[40,122193,29822],{"class":94},[40,122195,122184],{"class":94},[40,122197,122198],{"class":94}," snapd.socket\n",[40,122200,122201,122203,122205,122207],{"class":42,"line":70},[40,122202,923],{"class":596},[40,122204,29822],{"class":94},[40,122206,122184],{"class":94},[40,122208,122209],{"class":94}," snapd.seeded.service\n",[19,122211,122212],{},"然后查看snap应用列表",[19,122214,122215,122216,122221],{},"根据你安装的选择不同（最小安装或普通安装），有",[2106,122217,122220],{"href":122218,"rel":122219},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[2110],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[31,122223,122225],{"className":587,"code":122224,"language":589,"meta":36,"style":36},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[26,122226,122227,122232],{"__ignoreMap":36},[40,122228,122229],{"class":42,"line":43},[40,122230,122231],{"class":997},"# 查询当前系统上snap安装了哪些app\n",[40,122233,122234,122237],{"class":42,"line":54},[40,122235,122236],{"class":596},"snap",[40,122238,122239],{"class":94}," list\n",[19,122241,122242],{},[438,122243],{"alt":36,"src":122244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,122246,122247,122248,122251],{},"卸载掉图中所有应用，按照 ",[409,122249,122250],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[31,122253,122255],{"className":587,"code":122254,"language":589,"meta":36,"style":36},"#移除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",[26,122256,122257,122262,122274,122279,122290,122295,122306,122311,122322,122327,122331,122336,122347,122358],{"__ignoreMap":36},[40,122258,122259],{"class":42,"line":43},[40,122260,122261],{"class":997},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[40,122263,122264,122266,122269,122271],{"class":42,"line":54},[40,122265,923],{"class":596},[40,122267,122268],{"class":94}," snap",[40,122270,29391],{"class":94},[40,122272,122273],{"class":94}," snap-store\n",[40,122275,122276],{"class":42,"line":70},[40,122277,122278],{"class":997},"#移除firefox浏览器\n",[40,122280,122281,122283,122285,122287],{"class":42,"line":78},[40,122282,923],{"class":596},[40,122284,122268],{"class":94},[40,122286,29391],{"class":94},[40,122288,122289],{"class":94}," firefox\n",[40,122291,122292],{"class":42,"line":86},[40,122293,122294],{"class":997},"#移除gnome-42-2204\n",[40,122296,122297,122299,122301,122303],{"class":42,"line":100},[40,122298,923],{"class":596},[40,122300,122268],{"class":94},[40,122302,29391],{"class":94},[40,122304,122305],{"class":94}," gnome-42-2204\n",[40,122307,122308],{"class":42,"line":108},[40,122309,122310],{"class":997},"#移除gtk-common-themes\n",[40,122312,122313,122315,122317,122319],{"class":42,"line":121},[40,122314,923],{"class":596},[40,122316,122268],{"class":94},[40,122318,29391],{"class":94},[40,122320,122321],{"class":94}," gtk-common-themes\n",[40,122323,122324],{"class":42,"line":134},[40,122325,122326],{"class":997},"#移除其它...\n",[40,122328,122329],{"class":42,"line":146},[40,122330,67],{"class":50},[40,122332,122333],{"class":42,"line":154},[40,122334,122335],{"class":997},"#移除core22,bare以及snapd\n",[40,122337,122338,122340,122342,122344],{"class":42,"line":162},[40,122339,923],{"class":596},[40,122341,122268],{"class":94},[40,122343,29391],{"class":94},[40,122345,122346],{"class":94}," core22\n",[40,122348,122349,122351,122353,122355],{"class":42,"line":170},[40,122350,923],{"class":596},[40,122352,122268],{"class":94},[40,122354,29391],{"class":94},[40,122356,122357],{"class":94}," bare\n",[40,122359,122360,122362,122364,122366],{"class":42,"line":183},[40,122361,923],{"class":596},[40,122363,122268],{"class":94},[40,122365,29391],{"class":94},[40,122367,122368],{"class":94}," snapd\n",[19,122370,122371],{},[438,122372],{"alt":36,"src":122373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,122375,122376],{},"输入以下命令查看是否还有snap包",[31,122378,122380],{"className":587,"code":122379,"language":589,"meta":36,"style":36},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[26,122381,122382,122388,122392,122396,122400],{"__ignoreMap":36},[40,122383,122384,122386],{"class":42,"line":43},[40,122385,122236],{"class":596},[40,122387,122239],{"class":94},[40,122389,122390],{"class":42,"line":54},[40,122391,122088],{"class":997},[40,122393,122394],{"class":42,"line":70},[40,122395,122112],{"class":596},[40,122397,122398],{"class":42,"line":78},[40,122399,122121],{"class":997},[40,122401,122402],{"class":42,"line":86},[40,122403,122155],{"class":596},[19,122405,122406],{},[438,122407],{"alt":36,"src":122408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[402,122410,122412],{"id":122411},"_324-移除snap","3.2.4 移除snap",[19,122414,122415,122416,122421],{},"在删除掉",[2106,122417,122420],{"href":122418,"rel":122419},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[2110],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[31,122423,122425],{"className":587,"code":122424,"language":589,"meta":36,"style":36}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[26,122426,122427,122432,122445,122450,122461],{"__ignoreMap":36},[40,122428,122429],{"class":42,"line":43},[40,122430,122431],{"class":997}," #使用apt移除掉snap\n",[40,122433,122434,122436,122438,122440,122443],{"class":42,"line":54},[40,122435,923],{"class":596},[40,122437,926],{"class":94},[40,122439,120911],{"class":94},[40,122441,122442],{"class":63}," --purge",[40,122444,122368],{"class":94},[40,122446,122447],{"class":42,"line":70},[40,122448,122449],{"class":997},"#移除snapd的一些目录\n",[40,122451,122452,122454,122456,122458],{"class":42,"line":78},[40,122453,923],{"class":596},[40,122455,121838],{"class":94},[40,122457,28638],{"class":63},[40,122459,122460],{"class":94}," \u002Fvar\u002Fcache\u002Fsnapd\n",[40,122462,122463,122465,122467,122469],{"class":42,"line":86},[40,122464,923],{"class":596},[40,122466,121838],{"class":94},[40,122468,28638],{"class":63},[40,122470,122471],{"class":94}," ~\u002Fsnap\n",[19,122473,122474,122475,122478],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[26,122476,122477],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[402,122480,122482],{"id":122481},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,122484,122485],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[31,122487,122489],{"className":587,"code":122488,"language":589,"meta":36,"style":36},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[26,122490,122491],{"__ignoreMap":36},[40,122492,122493,122495,122497],{"class":42,"line":43},[40,122494,923],{"class":596},[40,122496,1264],{"class":94},[40,122498,122499],{"class":94}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,122501,122502,122503,122505],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[26,122504,2214],{}," 回车",[31,122507,122509],{"className":587,"code":122508,"language":589,"meta":36,"style":36},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[26,122510,122511,122518,122532],{"__ignoreMap":36},[40,122512,122513,122516],{"class":42,"line":43},[40,122514,122515],{"class":596},"Package:",[40,122517,122368],{"class":94},[40,122519,122520,122523,122526,122529],{"class":42,"line":54},[40,122521,122522],{"class":596},"Pin:",[40,122524,122525],{"class":94}," release",[40,122527,122528],{"class":94}," a=",[40,122530,122531],{"class":63},"*\n",[40,122533,122534,122537],{"class":42,"line":70},[40,122535,122536],{"class":596},"Pin-Priority:",[40,122538,122539],{"class":63}," -10\n",[19,122541,122542],{},[438,122543],{"alt":36,"src":122544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[402,122546,122548],{"id":122547},"_326-测试是否成功","3.2.6 测试是否成功",[31,122550,122552],{"className":587,"code":122551,"language":589,"meta":36,"style":36},"sudo apt update\nsudo apt install firefox\n",[26,122553,122554,122562],{"__ignoreMap":36},[40,122555,122556,122558,122560],{"class":42,"line":43},[40,122557,923],{"class":596},[40,122559,926],{"class":94},[40,122561,2126],{"class":94},[40,122563,122564,122566,122568,122570],{"class":42,"line":54},[40,122565,923],{"class":596},[40,122567,926],{"class":94},[40,122569,929],{"class":94},[40,122571,122289],{"class":94},[19,122573,122574],{},"这里提示snapd无法被安装，就证明成功了",[19,122576,122577],{},[438,122578],{"alt":36,"src":122579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[402,122581,122583],{"id":122582},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,122585,122586],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,122588,122589],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,122591,122592],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[31,122594,122596],{"className":587,"code":122595,"language":589,"meta":36,"style":36},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[26,122597,122598,122603,122612,122617,122625],{"__ignoreMap":36},[40,122599,122600],{"class":42,"line":43},[40,122601,122602],{"class":997},"# 添加Mozilla提供的源\n",[40,122604,122605,122607,122609],{"class":42,"line":54},[40,122606,923],{"class":596},[40,122608,122128],{"class":94},[40,122610,122611],{"class":94}," ppa:mozillateam\u002Fppa\n",[40,122613,122614],{"class":42,"line":70},[40,122615,122616],{"class":997},"# 安装Firefox\n",[40,122618,122619,122621,122623],{"class":42,"line":78},[40,122620,923],{"class":596},[40,122622,926],{"class":94},[40,122624,2126],{"class":94},[40,122626,122627,122629,122631,122633],{"class":42,"line":86},[40,122628,923],{"class":596},[40,122630,926],{"class":94},[40,122632,929],{"class":94},[40,122634,122289],{"class":94},[402,122636,122638],{"id":122637},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,122640,122641],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,122643,122644],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[31,122646,122648],{"className":587,"code":122647,"language":589,"meta":36,"style":36},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[26,122649,122650,122655,122665,122673,122677],{"__ignoreMap":36},[40,122651,122652],{"class":42,"line":43},[40,122653,122654],{"class":997},"#删掉禁止安装snap的配置文件\n",[40,122656,122657,122659,122661,122663],{"class":42,"line":54},[40,122658,923],{"class":596},[40,122660,121838],{"class":94},[40,122662,28638],{"class":63},[40,122664,122499],{"class":94},[40,122666,122667,122669,122671],{"class":42,"line":70},[40,122668,923],{"class":596},[40,122670,926],{"class":94},[40,122672,2126],{"class":94},[40,122674,122675],{"class":42,"line":78},[40,122676,1413],{"emptyLinePlaceholder":1412},[40,122678,122679,122681,122683],{"class":42,"line":86},[40,122680,923],{"class":596},[40,122682,926],{"class":94},[40,122684,122685],{"class":94}," dist-update\n",[14,122687,122689],{"id":122688},"_33-中文输入法","3.3 中文输入法",[402,122691,122693],{"id":122692},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,122695,122696],{},"官网下载搜狗输入法",[19,122698,122699],{},[438,122700],{"alt":36,"src":122701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,122703,122704],{},[438,122705],{"alt":36,"src":122706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,122708,122709],{},"打开终端输入如下",[31,122711,122713],{"className":587,"code":122712,"language":589,"meta":36,"style":36},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[26,122714,122715,122722],{"__ignoreMap":36},[40,122716,122717,122719],{"class":42,"line":43},[40,122718,2288],{"class":63},[40,122720,122721],{"class":94}," ~\u002FDownloads\u002F\n",[40,122723,122724,122726,122728,122730],{"class":42,"line":54},[40,122725,923],{"class":596},[40,122727,926],{"class":94},[40,122729,929],{"class":94},[40,122731,122732],{"class":94}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,122734,122735],{},"打开Fcitx",[19,122737,122738,122741],{},[438,122739],{"alt":36,"src":122740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[438,122742],{"alt":36,"src":122743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,122745,122746],{},[438,122747],{"alt":36,"src":122748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,122750,122751],{},"添加搜狗输入法",[19,122753,122754],{},[438,122755],{"alt":36,"src":122756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,122758,122759],{},[438,122760],{"alt":36,"src":122761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,122763,122764],{},"将搜狗输入法设置为唯一输入法",[19,122766,122767],{},[438,122768],{"alt":36,"src":122769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[402,122771,122773],{"id":122772},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[492,122775,122776],{},[495,122777,122778],{},"卸载旧输入法",[31,122780,122782],{"className":121808,"code":122781,"language":121810,"meta":36,"style":36},"sudo apt purge fcitx* ibus*\n",[26,122783,122784],{"__ignoreMap":36},[40,122785,122786,122788,122790,122792,122795,122797,122800],{"class":42,"line":43},[40,122787,923],{"class":596},[40,122789,926],{"class":94},[40,122791,120944],{"class":94},[40,122793,122794],{"class":94}," fcitx",[40,122796,3934],{"class":63},[40,122798,122799],{"class":94}," ibus",[40,122801,122531],{"class":63},[492,122803,122804],{"start":54},[495,122805,122806],{},"安装Fcitx5",[31,122808,122810],{"className":587,"code":122809,"language":589,"meta":36,"style":36},"# 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",[26,122811,122812,122817,122831,122835,122840,122849,122857],{"__ignoreMap":36},[40,122813,122814],{"class":42,"line":43},[40,122815,122816],{"class":997},"# Ubuntu22.04及以上、Debian12及以上\n",[40,122818,122819,122821,122823,122825,122828],{"class":42,"line":54},[40,122820,923],{"class":596},[40,122822,926],{"class":94},[40,122824,929],{"class":94},[40,122826,122827],{"class":94}," fcitx5",[40,122829,122830],{"class":94}," fcitx5-chinese-addons\n",[40,122832,122833],{"class":42,"line":70},[40,122834,1413],{"emptyLinePlaceholder":1412},[40,122836,122837],{"class":42,"line":78},[40,122838,122839],{"class":997},"# Ubuntu20.04\n",[40,122841,122842,122844,122846],{"class":42,"line":86},[40,122843,923],{"class":596},[40,122845,122128],{"class":94},[40,122847,122848],{"class":94}," ppa:zhsj\u002Ffcitx5\n",[40,122850,122851,122853,122855],{"class":42,"line":100},[40,122852,923],{"class":596},[40,122854,926],{"class":94},[40,122856,2126],{"class":94},[40,122858,122859,122861,122863,122865,122867],{"class":42,"line":108},[40,122860,923],{"class":596},[40,122862,926],{"class":94},[40,122864,929],{"class":94},[40,122866,122827],{"class":94},[40,122868,122830],{"class":94},[492,122870,122871,122874],{"start":70},[495,122872,122873],{},"Reboot System",[495,122875,122876],{},"启动Fcitx5",[19,122878,122879],{},[438,122880],{"alt":36,"src":122881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[492,122883,122884],{"start":86},[495,122885,122886],{},"修改一些设置",[19,122888,122889],{},"将Pinyin和Keyboard - English US加入到左边。",[19,122891,122892],{},[438,122893],{"alt":36,"src":122894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,122896,122897],{},"添加快捷键以便于更好切换中英文",[19,122899,122900],{},[438,122901],{"alt":36,"src":122902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[492,122904,122905],{"start":100},[495,122906,122907],{},"重启",[31,122909,122911],{"className":121808,"code":122910,"language":121810,"meta":36,"style":36},"sudo shutdown -r now\n",[26,122912,122913],{"__ignoreMap":36},[40,122914,122915,122917,122920,122923],{"class":42,"line":43},[40,122916,923],{"class":596},[40,122918,122919],{"class":94}," shutdown",[40,122921,122922],{"class":63}," -r",[40,122924,122925],{"class":94}," now\n",[492,122927,122928],{"start":108},[495,122929,122930],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,122932,122933],{},[2106,122934,122935],{"href":122935,"rel":122936},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[2110],[492,122938,122939],{"start":121},[495,122940,122941],{},"再重启",[31,122943,122944],{"className":121808,"code":122910,"language":121810,"meta":36,"style":36},[26,122945,122946],{"__ignoreMap":36},[40,122947,122948,122950,122952,122954],{"class":42,"line":43},[40,122949,923],{"class":596},[40,122951,122919],{"class":94},[40,122953,122922],{"class":63},[40,122955,122925],{"class":94},[14,122957,122959],{"id":122958},"_34-pip3源替换","3.4 pip3源替换",[19,122961,122962],{},"非Debian系发行版需要做。",[19,122964,122965],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,122967,122968],{},"使用dnf的系统也可能不用做。",[31,122970,122972],{"className":587,"code":122971,"language":589,"meta":36,"style":36},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[26,122973,122974,122979,122986,122991,122996],{"__ignoreMap":36},[40,122975,122976],{"class":42,"line":43},[40,122977,122978],{"class":997},"# 检查是否已安装 pip\n",[40,122980,122981,122984],{"class":42,"line":54},[40,122982,122983],{"class":596},"pip3",[40,122985,29603],{"class":63},[40,122987,122988],{"class":42,"line":70},[40,122989,122990],{"class":997},"# 如果未安装，先安装 pip3（见下方）\n",[40,122992,122993],{"class":42,"line":78},[40,122994,122995],{"class":997},"# 配置 pip 使用清华源\n",[40,122997,122998,123000,123003,123006,123009],{"class":42,"line":86},[40,122999,122983],{"class":596},[40,123001,123002],{"class":94}," config",[40,123004,123005],{"class":94}," set",[40,123007,123008],{"class":94}," global.index-url",[40,123010,123011],{"class":94}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,123013,123014],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,123016,123017],{},[438,123018],{"alt":36,"src":123019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[31,123021,123023],{"className":587,"code":123022,"language":589,"meta":36,"style":36},"#安装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",[26,123024,123025,123030,123038,123049,123053,123058,123077,123081,123086,123098,123102,123107],{"__ignoreMap":36},[40,123026,123027],{"class":42,"line":43},[40,123028,123029],{"class":997},"#安装pip3\n",[40,123031,123032,123034,123036],{"class":42,"line":54},[40,123033,923],{"class":596},[40,123035,926],{"class":94},[40,123037,2126],{"class":94},[40,123039,123040,123042,123044,123046],{"class":42,"line":70},[40,123041,923],{"class":596},[40,123043,29388],{"class":94},[40,123045,929],{"class":94},[40,123047,123048],{"class":94}," python3-pip\n",[40,123050,123051],{"class":42,"line":78},[40,123052,1413],{"emptyLinePlaceholder":1412},[40,123054,123055],{"class":42,"line":86},[40,123056,123057],{"class":997},"#更新pip3\n",[40,123059,123060,123062,123064,123066,123068,123070,123073,123075],{"class":42,"line":100},[40,123061,104174],{"class":596},[40,123063,2326],{"class":63},[40,123065,104199],{"class":94},[40,123067,929],{"class":94},[40,123069,29740],{"class":63},[40,123071,123072],{"class":94}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[40,123074,104204],{"class":63},[40,123076,104207],{"class":94},[40,123078,123079],{"class":42,"line":108},[40,123080,1413],{"emptyLinePlaceholder":1412},[40,123082,123083],{"class":42,"line":121},[40,123084,123085],{"class":997},"#设置pip源为清华源\n",[40,123087,123088,123090,123092,123094,123096],{"class":42,"line":134},[40,123089,122983],{"class":596},[40,123091,123002],{"class":94},[40,123093,123005],{"class":94},[40,123095,123008],{"class":94},[40,123097,123011],{"class":94},[40,123099,123100],{"class":42,"line":146},[40,123101,1413],{"emptyLinePlaceholder":1412},[40,123103,123104],{"class":42,"line":154},[40,123105,123106],{"class":997},"#测试\n",[40,123108,123109,123111,123113,123115,123117,123119],{"class":42,"line":162},[40,123110,104174],{"class":596},[40,123112,2326],{"class":63},[40,123114,104199],{"class":94},[40,123116,929],{"class":94},[40,123118,104204],{"class":63},[40,123120,104207],{"class":94},[19,123122,123123],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,123125,123126],{},[438,123127],{"alt":36,"src":123128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,123130,123132],{"id":123131},"_35-显卡驱动安装","3.5 显卡驱动安装",[402,123134,123136],{"id":123135},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[31,123138,123140],{"className":121808,"code":123139,"language":121810,"meta":36,"style":36},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[26,123141,123142,123147,123162,123167],{"__ignoreMap":36},[40,123143,123144],{"class":42,"line":43},[40,123145,123146],{"class":997},"# 如果是使用apt安装的驱动\n",[40,123148,123149,123151,123153,123155,123157,123160],{"class":42,"line":54},[40,123150,923],{"class":596},[40,123152,29388],{"class":94},[40,123154,29391],{"class":94},[40,123156,122442],{"class":63},[40,123158,123159],{"class":94}," nvidia",[40,123161,122531],{"class":63},[40,123163,123164],{"class":42,"line":70},[40,123165,123166],{"class":997},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[40,123168,123169,123171],{"class":42,"line":78},[40,123170,923],{"class":596},[40,123172,123173],{"class":94}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[402,123175,123177],{"id":123176},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[2423,123179,123181],{"id":123180},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[26230,123183,123185],{"id":123184},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[31,123187,123189],{"className":121808,"code":123188,"language":121810,"meta":36,"style":36},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[26,123190,123191,123196,123207,123212,123222,123227],{"__ignoreMap":36},[40,123192,123193],{"class":42,"line":43},[40,123194,123195],{"class":997},"# 安装英伟达驱动\n",[40,123197,123198,123200,123202,123204],{"class":42,"line":54},[40,123199,923],{"class":596},[40,123201,926],{"class":94},[40,123203,929],{"class":94},[40,123205,123206],{"class":94}," nvidia-driver-版本号\n",[40,123208,123209],{"class":42,"line":70},[40,123210,123211],{"class":997},"# 重启 \n",[40,123213,123214,123216,123218,123220],{"class":42,"line":78},[40,123215,923],{"class":596},[40,123217,122919],{"class":94},[40,123219,122922],{"class":63},[40,123221,122925],{"class":94},[40,123223,123224],{"class":42,"line":86},[40,123225,123226],{"class":997},"# 检查驱动是否安装成功\n",[40,123228,123229],{"class":42,"line":100},[40,123230,123231],{"class":596},"nvidia-smi\n",[26230,123233,123235],{"id":123234},"_35212-debian","3.5.2.1.2 Debian",[31,123237,123239],{"className":121808,"code":123238,"language":121810,"meta":36,"style":36},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[26,123240,123241,123245,123259,123263,123273,123277],{"__ignoreMap":36},[40,123242,123243],{"class":42,"line":43},[40,123244,123195],{"class":997},[40,123246,123247,123249,123251,123253,123256],{"class":42,"line":54},[40,123248,923],{"class":596},[40,123250,926],{"class":94},[40,123252,929],{"class":94},[40,123254,123255],{"class":94}," nvidia-driver",[40,123257,123258],{"class":94}," nvidia-settings\n",[40,123260,123261],{"class":42,"line":70},[40,123262,123211],{"class":997},[40,123264,123265,123267,123269,123271],{"class":42,"line":78},[40,123266,923],{"class":596},[40,123268,122919],{"class":94},[40,123270,122922],{"class":63},[40,123272,122925],{"class":94},[40,123274,123275],{"class":42,"line":86},[40,123276,123226],{"class":997},[40,123278,123279],{"class":42,"line":100},[40,123280,123231],{"class":596},[2423,123282,123284],{"id":123283},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,123286,123287,123288,123291],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[409,123289,123290],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,123293,123294,123295],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[1356,123296,123297],{},[409,123298,123299],{},"（也可以不禁用桌面环境，直接进行下一步。）",[31,123301,123303],{"className":121808,"code":123302,"language":121810,"meta":36,"style":36},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[26,123304,123305,123310,123320,123325,123337,123342],{"__ignoreMap":36},[40,123306,123307],{"class":42,"line":43},[40,123308,123309],{"class":997},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[40,123311,123312,123314,123317],{"class":42,"line":54},[40,123313,923],{"class":596},[40,123315,123316],{"class":94}," telinit",[40,123318,123319],{"class":63}," 3\n",[40,123321,123322],{"class":42,"line":70},[40,123323,123324],{"class":997},"# ubuntu 使用下方命令\n",[40,123326,123327,123329,123331,123334],{"class":42,"line":78},[40,123328,923],{"class":596},[40,123330,1390],{"class":94},[40,123332,123333],{"class":94}," lightdm",[40,123335,123336],{"class":94}," stop\n",[40,123338,123339],{"class":42,"line":86},[40,123340,123341],{"class":997},"# Fedora 使用下方命令\n",[40,123343,123344,123346,123348,123351],{"class":42,"line":100},[40,123345,923],{"class":596},[40,123347,29822],{"class":94},[40,123349,123350],{"class":94}," isolate",[40,123352,123353],{"class":94}," multi-user.target\n",[19,123355,123356],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[31,123358,123360],{"className":121808,"code":123359,"language":121810,"meta":36,"style":36},"# 编译环境+准备工作\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",[26,123361,123362,123367,123378,123383,123390,123395,123407,123412,123419,123424],{"__ignoreMap":36},[40,123363,123364],{"class":42,"line":43},[40,123365,123366],{"class":997},"# 编译环境+准备工作\n",[40,123368,123369,123371,123373,123375],{"class":42,"line":54},[40,123370,923],{"class":596},[40,123372,926],{"class":94},[40,123374,929],{"class":94},[40,123376,123377],{"class":94}," build-essential\n",[40,123379,123380],{"class":42,"line":70},[40,123381,123382],{"class":997},"# 进入到.run目录中\n",[40,123384,123385,123387],{"class":42,"line":78},[40,123386,2288],{"class":63},[40,123388,123389],{"class":94}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[40,123391,123392],{"class":42,"line":86},[40,123393,123394],{"class":997},"# 给驱动文件增加可执行权限：\n",[40,123396,123397,123399,123401,123404],{"class":42,"line":100},[40,123398,923],{"class":596},[40,123400,3181],{"class":94},[40,123402,123403],{"class":94}," a+x",[40,123405,123406],{"class":94}," NVIDIA-Linux-x86_64-550.107.02.run\n",[40,123408,123409],{"class":42,"line":108},[40,123410,123411],{"class":997},"# 然后执行安装：\n",[40,123413,123414,123416],{"class":42,"line":121},[40,123415,923],{"class":596},[40,123417,123418],{"class":94}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[40,123420,123421],{"class":42,"line":134},[40,123422,123423],{"class":997},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[40,123425,123426,123428,123431],{"class":42,"line":146},[40,123427,923],{"class":596},[40,123429,123430],{"class":94}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[40,123432,123433],{"class":63},"  --no-opengl-files\n",[19,123435,123436],{},"安装完毕重启即可",[31,123438,123440],{"className":121808,"code":123439,"language":121810,"meta":36,"style":36},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[26,123441,123442,123446,123452,123456],{"__ignoreMap":36},[40,123443,123444],{"class":42,"line":43},[40,123445,123211],{"class":997},[40,123447,123448,123450],{"class":42,"line":54},[40,123449,923],{"class":596},[40,123451,29952],{"class":94},[40,123453,123454],{"class":42,"line":70},[40,123455,123226],{"class":997},[40,123457,123458],{"class":42,"line":78},[40,123459,123231],{"class":596},[402,123461,123463],{"id":123462},"_353-安装cuda","3.5.3 安装CUDA",[19,123465,123466],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,123468,123469],{},[438,123470],{"alt":36,"src":123471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[492,123473,123474],{},[495,123475,123476],{},"先查看显卡驱动所支持的最高CUDA版本",[31,123478,123479],{"className":121808,"code":123231,"language":121810,"meta":36,"style":36},[26,123480,123481],{"__ignoreMap":36},[40,123482,123483],{"class":42,"line":43},[40,123484,123231],{"class":596},[19,123486,123487],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,123489,123490],{},[438,123491],{"alt":36,"src":123492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[492,123494,123495],{"start":54},[495,123496,123497],{},"下载CUDA并安装CUDA",[19,123499,121587,123500],{},[2106,123501,121590],{"href":121590,"rel":123502},[2110],[19,123504,123505],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,123507,123508],{},[438,123509],{"alt":36,"src":123510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,123512,123513,123514,123519],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[2106,123515,123518],{"href":123516,"rel":123517},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[2110],"Vinci机器人队单片机教程","）",[19,123521,123522],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,123524,123525],{},[438,123526],{"alt":36,"src":123527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,123529,123530],{},"将最下方框框里的命令敲入终端",[31,123532,123534],{"className":121808,"code":123533,"language":121810,"meta":36,"style":36},"# 在当前文件夹下创建一个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",[26,123535,123536,123541,123550,123555,123562,123567,123575,123580,123591,123596],{"__ignoreMap":36},[40,123537,123538],{"class":42,"line":43},[40,123539,123540],{"class":997},"# 在当前文件夹下创建一个ttt的子文件夹\n",[40,123542,123543,123545,123547],{"class":42,"line":54},[40,123544,970],{"class":596},[40,123546,973],{"class":63},[40,123548,123549],{"class":94}," .\u002Fttt\n",[40,123551,123552],{"class":42,"line":70},[40,123553,123554],{"class":997},"# 进入ttt文件夹\n",[40,123556,123557,123559],{"class":42,"line":78},[40,123558,2288],{"class":63},[40,123560,123561],{"class":94}," ttt\n",[40,123563,123564],{"class":42,"line":86},[40,123565,123566],{"class":997},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[40,123568,123569,123572],{"class":42,"line":100},[40,123570,123571],{"class":596},"wget",[40,123573,123574],{"class":94}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[40,123576,123577],{"class":42,"line":108},[40,123578,123579],{"class":997},"# 给予权限\n",[40,123581,123582,123584,123586,123588],{"class":42,"line":121},[40,123583,923],{"class":596},[40,123585,3181],{"class":94},[40,123587,123403],{"class":94},[40,123589,123590],{"class":94}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[40,123592,123593],{"class":42,"line":134},[40,123594,123595],{"class":997},"# 运行脚本\n",[40,123597,123598,123600],{"class":42,"line":146},[40,123599,923],{"class":596},[40,123601,123590],{"class":94},[19,123603,123604],{},[438,123605],{"alt":36,"src":123606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,123608,123609],{},"正在安装中：",[19,123611,123612],{},[438,123613],{"alt":36,"src":123614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,123616,123617],{},"输入accept接受即可",[19,123619,123620],{},[438,123621],{"alt":36,"src":123622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,123624,123625],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,123627,123628],{},[438,123629],{"alt":36,"src":123630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,123632,123633],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,123635,123636],{},[438,123637],{"alt":36,"src":123638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[492,123640,123641],{"start":70},[495,123642,123643],{},"配置环境",[19,123645,123646],{},"根据上方确认一下路径，比如我上面红色框起来的为",[31,123648,123650],{"className":121808,"code":123649,"language":121810,"meta":36,"style":36},"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",[26,123651,123652,123668,123683],{"__ignoreMap":36},[40,123653,123654,123657,123660,123663,123666],{"class":42,"line":43},[40,123655,123656],{"class":596},"Please",[40,123658,123659],{"class":94}," make",[40,123661,123662],{"class":94}," sure",[40,123664,123665],{"class":94}," that",[40,123667,67],{"class":50},[40,123669,123670,123672,123675,123678,123681],{"class":42,"line":54},[40,123671,55569],{"class":596},[40,123673,123674],{"class":94},"   PATH",[40,123676,123677],{"class":94}," includes",[40,123679,123680],{"class":94}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[40,123682,67],{"class":50},[40,123684,123685,123687,123690,123692,123695,123698,123700,123703,123706,123709,123712,123714,123717,123719],{"class":42,"line":70},[40,123686,55569],{"class":596},[40,123688,123689],{"class":94},"   LD_LIBRARY_PATH",[40,123691,123677],{"class":94},[40,123693,123694],{"class":94}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[40,123696,123697],{"class":94}," or,",[40,123699,8532],{"class":94},[40,123701,123702],{"class":94}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[40,123704,123705],{"class":94}," to",[40,123707,123708],{"class":94}," \u002Fetc\u002Fld.so.conf",[40,123710,123711],{"class":94}," and",[40,123713,30535],{"class":94},[40,123715,123716],{"class":94}," ldconfig",[40,123718,67902],{"class":94},[40,123720,123721],{"class":94}," root\n",[19,123723,123724],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[31,123726,123728],{"className":121808,"code":123727,"language":121810,"meta":36,"style":36},"which nvcc\n",[26,123729,123730],{"__ignoreMap":36},[40,123731,123732,123735],{"class":42,"line":43},[40,123733,123734],{"class":63},"which",[40,123736,123737],{"class":94}," nvcc\n",[19,123739,123740],{},[438,123741],{"alt":36,"src":123742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,123744,123745],{},"所以我进行以下操作：",[31,123747,123749],{"className":121808,"code":123748,"language":121810,"meta":36,"style":36},"sudo vim ~\u002F.bashrc\n",[26,123750,123751],{"__ignoreMap":36},[40,123752,123753,123755,123757],{"class":42,"line":43},[40,123754,923],{"class":596},[40,123756,1264],{"class":94},[40,123758,123759],{"class":94}," ~\u002F.bashrc\n",[19,123761,123762],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[31,123764,123766],{"className":121808,"code":123765,"language":121810,"meta":36,"style":36},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[26,123767,123768,123780],{"__ignoreMap":36},[40,123769,123770,123772,123775,123777],{"class":42,"line":43},[40,123771,28357],{"class":1283},[40,123773,123774],{"class":50}," PATH",[40,123776,1284],{"class":1283},[40,123778,123779],{"class":50},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[40,123781,123782,123784,123787,123789],{"class":42,"line":54},[40,123783,28357],{"class":1283},[40,123785,123786],{"class":50}," LD_LIBRARY_PATH",[40,123788,1284],{"class":1283},[40,123790,123791],{"class":50},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,123793,123794],{},[438,123795],{"alt":36,"src":123796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[31,123798,123800],{"className":121808,"code":123799,"language":121810,"meta":36,"style":36},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[26,123801,123802,123807,123813,123818],{"__ignoreMap":36},[40,123803,123804],{"class":42,"line":43},[40,123805,123806],{"class":997},"# 刷新当前终端的环境变量\n",[40,123808,123809,123811],{"class":42,"line":54},[40,123810,104187],{"class":63},[40,123812,123759],{"class":94},[40,123814,123815],{"class":42,"line":70},[40,123816,123817],{"class":997},"# 验证CUDA是否安装成功\n",[40,123819,123820,123823],{"class":42,"line":78},[40,123821,123822],{"class":596},"nvcc",[40,123824,123825],{"class":63}," -V\n",[19,123827,123828],{},"出现下图这种则安装成功。",[19,123830,123831],{},[438,123832],{"alt":36,"src":123833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[402,123835,123837],{"id":123836},"_354-安装cudnn","3.5.4 安装cuDNN",[492,123839,123840],{},[495,123841,123842],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,123844,123845,123846,123851],{},"前往 NVIDIA cuDNN 下载页面：",[2106,123847,123850],{"href":123848,"rel":123849},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[2110],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,123853,123854],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,123856,123857],{},[438,123858],{"alt":36,"src":123859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,123861,123862],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,123864,123865],{},[438,123866],{"alt":36,"src":123867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,123869,123870],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,123872,123873],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,123875,123876],{},[409,123877,123878],{},"我这里选择所有Linux X86_64最通用的办法：",[19,123880,123881],{},"下载好的：",[19,123883,123884],{},[438,123885],{"alt":36,"src":123886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[492,123888,123889],{"start":54},[495,123890,123891],{},"安装cuDNN",[19,123893,123894],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,123896,123897],{},[438,123898],{"alt":36,"src":123899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,123901,123902],{},"解压文件，并复制到对应位置完成安装",[31,123904,123906],{"className":121808,"code":123905,"language":121810,"meta":36,"style":36},"# 解压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",[26,123907,123908,123913,123924,123929,123936,123941,123957,123971,123976,123987,123996,124000,124016],{"__ignoreMap":36},[40,123909,123910],{"class":42,"line":43},[40,123911,123912],{"class":997},"# 解压cuDNN文件\n",[40,123914,123915,123918,123921],{"class":42,"line":54},[40,123916,123917],{"class":596},"tar",[40,123919,123920],{"class":63}," -xvf",[40,123922,123923],{"class":94}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[40,123925,123926],{"class":42,"line":70},[40,123927,123928],{"class":997},"# cd进文件夹\n",[40,123930,123931,123933],{"class":42,"line":78},[40,123932,2288],{"class":63},[40,123934,123935],{"class":94}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[40,123937,123938],{"class":42,"line":86},[40,123939,123940],{"class":997},"# 复制cuDNN文件到CUDA目录\n",[40,123942,123943,123945,123947,123950,123952,123955],{"class":42,"line":100},[40,123944,923],{"class":596},[40,123946,31166],{"class":94},[40,123948,123949],{"class":94}," include\u002Fcudnn",[40,123951,3934],{"class":63},[40,123953,123954],{"class":94},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[40,123956,67],{"class":50},[40,123958,123959,123961,123963,123966,123968],{"class":42,"line":108},[40,123960,923],{"class":596},[40,123962,31166],{"class":94},[40,123964,123965],{"class":94}," lib\u002Flibcudnn",[40,123967,3934],{"class":63},[40,123969,123970],{"class":94},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[40,123972,123973],{"class":42,"line":121},[40,123974,123975],{"class":997},"# 对比一下有没有缺文件\n",[40,123977,123978,123980,123983,123985],{"class":42,"line":134},[40,123979,30066],{"class":596},[40,123981,123982],{"class":94}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[40,123984,3934],{"class":63},[40,123986,67],{"class":50},[40,123988,123989,123991,123994],{"class":42,"line":146},[40,123990,30066],{"class":596},[40,123992,123993],{"class":94}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[40,123995,122531],{"class":63},[40,123997,123998],{"class":42,"line":154},[40,123999,123579],{"class":997},[40,124001,124002,124004,124006,124009,124011,124013],{"class":42,"line":162},[40,124003,923],{"class":596},[40,124005,3181],{"class":94},[40,124007,124008],{"class":94}," a+r",[40,124010,123982],{"class":94},[40,124012,3934],{"class":63},[40,124014,124015],{"class":50},"   \n",[40,124017,124018,124020,124022,124024,124026],{"class":42,"line":170},[40,124019,923],{"class":596},[40,124021,3181],{"class":94},[40,124023,124008],{"class":94},[40,124025,123993],{"class":94},[40,124027,122531],{"class":63},[492,124029,124030],{"start":70},[495,124031,124032],{},"检查是否安装成功",[31,124034,124036],{"className":121808,"code":124035,"language":121810,"meta":36,"style":36},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[26,124037,124038,124043],{"__ignoreMap":36},[40,124039,124040],{"class":42,"line":43},[40,124041,124042],{"class":997},"# 检查cuDNN版本命令\n",[40,124044,124045,124048,124051,124053,124055,124058,124061],{"class":42,"line":54},[40,124046,124047],{"class":596},"cat",[40,124049,124050],{"class":94}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[40,124052,1465],{"class":1283},[40,124054,1468],{"class":596},[40,124056,124057],{"class":94}," CUDNN_MAJOR",[40,124059,124060],{"class":63}," -A",[40,124062,51023],{"class":63},[19,124064,124065],{},"出现下图这样的就是安装成功了",[19,124067,124068],{},[438,124069],{"alt":36,"src":124070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[492,124072,124073],{"start":78},[495,124074,124075],{},"软链接(一般不需要)",[31,124077,124079],{"className":121808,"code":124078,"language":121810,"meta":36,"style":36},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[26,124080,124081,124086],{"__ignoreMap":36},[40,124082,124083],{"class":42,"line":43},[40,124084,124085],{"class":997},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[40,124087,124088,124090],{"class":42,"line":54},[40,124089,923],{"class":596},[40,124091,124092],{"class":94}," ldconfig\n",[19,124094,124095],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[31,124097,124099],{"className":515,"code":124098,"language":517,"meta":518,"style":36},"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",[26,124100,124101,124106,124111,124116,124121,124126,124131],{"__ignoreMap":36},[40,124102,124103],{"class":42,"line":43},[40,124104,124105],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[40,124107,124108],{"class":42,"line":54},[40,124109,124110],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[40,124112,124113],{"class":42,"line":70},[40,124114,124115],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[40,124117,124118],{"class":42,"line":78},[40,124119,124120],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[40,124122,124123],{"class":42,"line":86},[40,124124,124125],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[40,124127,124128],{"class":42,"line":100},[40,124129,124130],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[40,124132,124133],{"class":42,"line":108},[40,124134,124135],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,124137,124138],{},"运行下方的命令",[31,124140,124142],{"className":121808,"code":124141,"language":121810,"meta":36,"style":36},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[26,124143,124144,124149,124156,124161],{"__ignoreMap":36},[40,124145,124146],{"class":42,"line":43},[40,124147,124148],{"class":997},"# cd进入CUDA路径\n",[40,124150,124151,124153],{"class":42,"line":54},[40,124152,2288],{"class":63},[40,124154,124155],{"class":94}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[40,124157,124158],{"class":42,"line":70},[40,124159,124160],{"class":997}," # 查看本路径下的需要软链接的文件名\n",[40,124162,124163],{"class":42,"line":78},[40,124164,124165],{"class":596}," ls\n",[19,124167,124168],{},[438,124169],{"alt":36,"src":124170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,124172,124173,124174,2046,124177,2046,124180,124183],{},"如上图，我需要将",[26,124175,124176],{},"libcudnn_xxx_xxxxx.so.8.9.7",[26,124178,124179],{},"libcudnn_xxx_xxxxx.so.8",[26,124181,124182],{},"libcudnn_xxx_xxxxx.so","软链接",[31,124185,124187],{"className":121808,"code":124186,"language":121810,"meta":36,"style":36},"# 创建符号链接。对于每个 .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",[26,124188,124189,124194,124210,124224,124238,124252,124266,124280,124294,124299,124305,124310],{"__ignoreMap":36},[40,124190,124191],{"class":42,"line":43},[40,124192,124193],{"class":997},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[40,124195,124196,124198,124201,124204,124207],{"class":42,"line":54},[40,124197,923],{"class":596},[40,124199,124200],{"class":94}," ln",[40,124202,124203],{"class":63}," -sf",[40,124205,124206],{"class":94}," libcudnn_cnn_train.so.8.9.7",[40,124208,124209],{"class":94}," libcudnn_cnn_train.so.8\n",[40,124211,124212,124214,124216,124218,124221],{"class":42,"line":70},[40,124213,923],{"class":596},[40,124215,124200],{"class":94},[40,124217,124203],{"class":63},[40,124219,124220],{"class":94}," libcudnn_adv_infer.so.8.9.7",[40,124222,124223],{"class":94}," libcudnn_adv_infer.so.8\n",[40,124225,124226,124228,124230,124232,124235],{"class":42,"line":78},[40,124227,923],{"class":596},[40,124229,124200],{"class":94},[40,124231,124203],{"class":63},[40,124233,124234],{"class":94}," libcudnn_adv_train.so.8.9.7",[40,124236,124237],{"class":94}," libcudnn_adv_train.so.8\n",[40,124239,124240,124242,124244,124246,124249],{"class":42,"line":86},[40,124241,923],{"class":596},[40,124243,124200],{"class":94},[40,124245,124203],{"class":63},[40,124247,124248],{"class":94}," libcudnn_cnn_infer.so.8.9.7",[40,124250,124251],{"class":94}," libcudnn_cnn_infer.so.8\n",[40,124253,124254,124256,124258,124260,124263],{"class":42,"line":100},[40,124255,923],{"class":596},[40,124257,124200],{"class":94},[40,124259,124203],{"class":63},[40,124261,124262],{"class":94}," libcudnn.so.8.9.7",[40,124264,124265],{"class":94}," libcudnn.so.8\n",[40,124267,124268,124270,124272,124274,124277],{"class":42,"line":108},[40,124269,923],{"class":596},[40,124271,124200],{"class":94},[40,124273,124203],{"class":63},[40,124275,124276],{"class":94}," libcudnn_ops_infer.so.8.9.7",[40,124278,124279],{"class":94}," libcudnn_ops_infer.so.8\n",[40,124281,124282,124284,124286,124288,124291],{"class":42,"line":121},[40,124283,923],{"class":596},[40,124285,124200],{"class":94},[40,124287,124203],{"class":63},[40,124289,124290],{"class":94}," libcudnn_ops_train.so.8.9.7",[40,124292,124293],{"class":94}," libcudnn_ops_train.so.8\n",[40,124295,124296],{"class":42,"line":134},[40,124297,124298],{"class":997},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[40,124300,124301,124303],{"class":42,"line":146},[40,124302,923],{"class":596},[40,124304,124092],{"class":94},[40,124306,124307],{"class":42,"line":154},[40,124308,124309],{"class":997},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[40,124311,124312,124314,124317,124320,124322,124325],{"class":42,"line":162},[40,124313,30066],{"class":596},[40,124315,124316],{"class":63}," -l",[40,124318,124319],{"class":94}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[40,124321,3934],{"class":63},[40,124323,124324],{"class":94},".so",[40,124326,122531],{"class":63},[402,124328,124330],{"id":124329},"_355-常见问题","3.5.5 常见问题",[492,124332,124333],{},[495,124334,124335],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[31,124337,124339],{"className":121808,"code":124338,"language":121810,"meta":36,"style":36},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[26,124340,124341],{"__ignoreMap":36},[40,124342,124343,124345,124347],{"class":42,"line":43},[40,124344,923],{"class":596},[40,124346,1264],{"class":94},[40,124348,124349],{"class":94}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,124351,124352],{},"blacklist-nouveau.conf文件内容如下：",[31,124354,124356],{"className":121808,"code":124355,"language":121810,"meta":36,"style":36},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[26,124357,124358,124366,124373,124385,124395],{"__ignoreMap":36},[40,124359,124360,124363],{"class":42,"line":43},[40,124361,124362],{"class":596},"blacklist",[40,124364,124365],{"class":94}," nouveau\n",[40,124367,124368,124370],{"class":42,"line":54},[40,124369,124362],{"class":596},[40,124371,124372],{"class":94}," lbm-nouveau\n",[40,124374,124375,124377,124380,124383],{"class":42,"line":70},[40,124376,119221],{"class":596},[40,124378,124379],{"class":94}," nouveau",[40,124381,124382],{"class":94}," modeset=",[40,124384,6409],{"class":63},[40,124386,124387,124390,124392],{"class":42,"line":78},[40,124388,124389],{"class":63},"alias",[40,124391,124379],{"class":94},[40,124393,124394],{"class":94}," off\n",[40,124396,124397,124399,124402],{"class":42,"line":86},[40,124398,124389],{"class":63},[40,124400,124401],{"class":94}," lbm-nouveau",[40,124403,124394],{"class":94},[19,124405,124406],{},"接着运行下方命令",[31,124408,124410],{"className":121808,"code":124409,"language":121810,"meta":36,"style":36},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[26,124411,124412,124422,124427],{"__ignoreMap":36},[40,124413,124414,124416,124419],{"class":42,"line":43},[40,124415,923],{"class":596},[40,124417,124418],{"class":94}," update-initramfs",[40,124420,124421],{"class":63}," -u\n",[40,124423,124424],{"class":42,"line":54},[40,124425,124426],{"class":596},"或者\n",[40,124428,124429,124431,124434],{"class":42,"line":70},[40,124430,923],{"class":596},[40,124432,124433],{"class":94}," dracut",[40,124435,124436],{"class":63}," --force\n",[19,124438,124439],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[31,124441,124443],{"className":121808,"code":124442,"language":121810,"meta":36,"style":36},"lsmod | grep nouveau\n",[26,124444,124445],{"__ignoreMap":36},[40,124446,124447,124450,124452,124454],{"class":42,"line":43},[40,124448,124449],{"class":596},"lsmod",[40,124451,1465],{"class":1283},[40,124453,1468],{"class":596},[40,124455,124365],{"class":94},[492,124457,124458],{"start":54},[495,124459,124460],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[31,124462,124464],{"className":121808,"code":124463,"language":121810,"meta":36,"style":36},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[26,124465,124466],{"__ignoreMap":36},[40,124467,124468,124470,124472],{"class":42,"line":43},[40,124469,923],{"class":596},[40,124471,1264],{"class":94},[40,124473,124474],{"class":94}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,124476,124477],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[31,124479,124481],{"className":121808,"code":124480,"language":121810,"meta":36,"style":36},"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",[26,124482,124483,124491,124499,124507,124514,124522,124532,124540],{"__ignoreMap":36},[40,124484,124485,124488],{"class":42,"line":43},[40,124486,124487],{"class":596},"Section",[40,124489,124490],{"class":94}," \"OutputClass\"\n",[40,124492,124493,124496],{"class":42,"line":54},[40,124494,124495],{"class":596},"   Identifier",[40,124497,124498],{"class":94}," \"nvidia\"\n",[40,124500,124501,124504],{"class":42,"line":70},[40,124502,124503],{"class":596},"   MatchDriver",[40,124505,124506],{"class":94}," \"nvidia-drm\"\n",[40,124508,124509,124512],{"class":42,"line":78},[40,124510,124511],{"class":596},"   Driver",[40,124513,124498],{"class":94},[40,124515,124516,124519],{"class":42,"line":86},[40,124517,124518],{"class":596},"   Option",[40,124520,124521],{"class":94}," \"AllowEmptyInitialConfiguration\"\n",[40,124523,124524,124526,124529],{"class":42,"line":100},[40,124525,124518],{"class":596},[40,124527,124528],{"class":94}," \"PrimaryGPU\"",[40,124530,124531],{"class":94}," \"yes\"\n",[40,124533,124534,124537],{"class":42,"line":108},[40,124535,124536],{"class":596},"   ModulePath",[40,124538,124539],{"class":94}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[40,124541,124542],{"class":42,"line":121},[40,124543,124544],{"class":596},"EndSection\n",[492,124546,124547],{"start":70},[495,124548,124549],{},"安装N卡驱动提示错误",[31,124551,124553],{"className":515,"code":124552,"language":517,"meta":518,"style":36},"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",[26,124554,124555],{"__ignoreMap":36},[40,124556,124557],{"class":42,"line":43},[40,124558,124552],{},[492,124560,124561],{},[495,124562,124563],{},"检查当前运行的内核版本：",[19,124565,124566],{},"运行以下命令以查看你当前正在使用的内核版本：",[31,124568,124569],{"className":587,"code":2664,"language":589,"meta":36,"style":36},[26,124570,124571],{"__ignoreMap":36},[40,124572,124573,124575],{"class":42,"line":43},[40,124574,2671],{"class":596},[40,124576,2674],{"class":63},[492,124578,124579],{"start":54},[495,124580,124581],{},"安装内核开发文件：",[19,124583,124584,124585,124588],{},"确保你已经安装了与当前内核版本相匹配的 ",[26,124586,124587],{},"kernel-devel"," 包。运行以下命令来安装：",[31,124590,124592],{"className":587,"code":124591,"language":589,"meta":36,"style":36},"sudo dnf install kernel-devel-$(uname -r)\n",[26,124593,124594],{"__ignoreMap":36},[40,124595,124596,124598,124600,124602,124605,124607,124609,124611],{"class":42,"line":43},[40,124597,923],{"class":596},[40,124599,29625],{"class":94},[40,124601,929],{"class":94},[40,124603,124604],{"class":94}," kernel-devel-",[40,124606,28414],{"class":50},[40,124608,2671],{"class":596},[40,124610,122922],{"class":63},[40,124612,1811],{"class":50},[19,124614,124615],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[492,124617,124618],{"start":70},[495,124619,124620],{},"安装内核源代码（如果需要）：",[19,124622,124623],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[31,124625,124627],{"className":587,"code":124626,"language":589,"meta":36,"style":36},"sudo dnf install kernel-headers kernel-source\n",[26,124628,124629],{"__ignoreMap":36},[40,124630,124631,124633,124635,124637,124640],{"class":42,"line":43},[40,124632,923],{"class":596},[40,124634,29625],{"class":94},[40,124636,929],{"class":94},[40,124638,124639],{"class":94}," kernel-headers",[40,124641,124642],{"class":94}," kernel-source\n",[492,124644,124645],{"start":78},[495,124646,124647],{},"检查安装：",[19,124649,124650,124651,124654],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[26,124652,124653],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[31,124656,124658],{"className":587,"code":124657,"language":589,"meta":36,"style":36},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[26,124659,124660],{"__ignoreMap":36},[40,124661,124662,124664],{"class":42,"line":43},[40,124663,30066],{"class":596},[40,124665,124666],{"class":94}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,124668,124669,124670,124673],{},"如果仍然遇到问题，可以通过 ",[26,124671,124672],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[3384,124675,124676],{},"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":36,"searchDepth":54,"depth":54,"links":124678},[124679,124683,124693,124697,124698],{"id":121784,"depth":54,"text":121785,"children":124680},[124681,124682],{"id":121794,"depth":70,"text":121795},{"id":121804,"depth":70,"text":121805},{"id":122003,"depth":54,"text":122004,"children":124684},[124685,124686,124687,124688,124689,124690,124691,124692],{"id":122007,"depth":70,"text":122008},{"id":122077,"depth":70,"text":122078},{"id":122166,"depth":70,"text":122167},{"id":122411,"depth":70,"text":122412},{"id":122481,"depth":70,"text":122482},{"id":122547,"depth":70,"text":122548},{"id":122582,"depth":70,"text":122583},{"id":122637,"depth":70,"text":122638},{"id":122688,"depth":54,"text":122689,"children":124694},[124695,124696],{"id":122692,"depth":70,"text":122693},{"id":122772,"depth":70,"text":122773},{"id":122958,"depth":54,"text":122959},{"id":123131,"depth":54,"text":123132,"children":124699},[124700,124701,124702,124703,124704],{"id":123135,"depth":70,"text":123136},{"id":123176,"depth":70,"text":123177},{"id":123462,"depth":70,"text":123463},{"id":123836,"depth":70,"text":123837},{"id":124329,"depth":70,"text":124330},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":121776,"description":3413},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":124711,"title":124712,"body":124713,"description":3413,"extension":3414,"meta":125051,"navigation":1412,"path":125052,"seo":125053,"stem":125054,"__hash__":125055},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":124714,"toc":125049},[124715,124718,124723,124726,124970,124975,124978,125014,125017,125046],[10,124716,124712],{"id":124717},"_4-命令教程长期积累",[492,124719,124720],{},[495,124721,124722],{},"大多数命令",[19,124724,124725],{},"常用 Linux 命令速查：",[31,124727,124729],{"className":587,"code":124728,"language":589,"meta":36,"style":36},"# 文件与目录\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",[26,124730,124731,124736,124743,124750,124758,124765,124772,124780,124787,124794,124801,124809,124813,124818,124825,124833,124840,124844,124849,124856,124864,124872,124880,124888,124892,124897,124905,124912,124919,124926,124934,124938,124943,124952,124961],{"__ignoreMap":36},[40,124732,124733],{"class":42,"line":43},[40,124734,124735],{"class":997},"# 文件与目录\n",[40,124737,124738,124740],{"class":42,"line":54},[40,124739,30066],{"class":596},[40,124741,124742],{"class":997},"        # 列出目录内容\n",[40,124744,124745,124747],{"class":42,"line":70},[40,124746,2288],{"class":63},[40,124748,124749],{"class":997},"        # 切换目录\n",[40,124751,124752,124755],{"class":42,"line":78},[40,124753,124754],{"class":63},"pwd",[40,124756,124757],{"class":997},"       # 显示当前路径\n",[40,124759,124760,124762],{"class":42,"line":86},[40,124761,970],{"class":596},[40,124763,124764],{"class":997},"     # 创建目录\n",[40,124766,124767,124769],{"class":42,"line":100},[40,124768,28635],{"class":596},[40,124770,124771],{"class":997},"        # 删除文件或目录\n",[40,124773,124774,124777],{"class":42,"line":108},[40,124775,124776],{"class":596},"cp",[40,124778,124779],{"class":997},"        # 复制文件或目录\n",[40,124781,124782,124784],{"class":42,"line":121},[40,124783,2694],{"class":596},[40,124785,124786],{"class":997},"        # 移动\u002F重命名文件或目录\n",[40,124788,124789,124791],{"class":42,"line":134},[40,124790,3165],{"class":596},[40,124792,124793],{"class":997},"     # 创建空文件\n",[40,124795,124796,124798],{"class":42,"line":146},[40,124797,124047],{"class":596},[40,124799,124800],{"class":997},"       # 查看文件内容\n",[40,124802,124803,124806],{"class":42,"line":154},[40,124804,124805],{"class":596},"head\u002Ftail",[40,124807,124808],{"class":997}," # 查看文件头部\u002F尾部\n",[40,124810,124811],{"class":42,"line":162},[40,124812,1413],{"emptyLinePlaceholder":1412},[40,124814,124815],{"class":42,"line":170},[40,124816,124817],{"class":997},"# 权限管理\n",[40,124819,124820,124822],{"class":42,"line":183},[40,124821,1039],{"class":596},[40,124823,124824],{"class":997},"     # 修改文件权限\n",[40,124826,124827,124830],{"class":42,"line":196},[40,124828,124829],{"class":596},"chown",[40,124831,124832],{"class":997},"     # 修改文件所有者\n",[40,124834,124835,124837],{"class":42,"line":204},[40,124836,923],{"class":596},[40,124838,124839],{"class":997},"      # 以管理员身份执行\n",[40,124841,124842],{"class":42,"line":217},[40,124843,1413],{"emptyLinePlaceholder":1412},[40,124845,124846],{"class":42,"line":230},[40,124847,124848],{"class":997},"# 系统信息\n",[40,124850,124851,124853],{"class":42,"line":238},[40,124852,2671],{"class":596},[40,124854,124855],{"class":997},"     # 系统信息\n",[40,124857,124858,124861],{"class":42,"line":251},[40,124859,124860],{"class":596},"df",[40,124862,124863],{"class":997},"        # 磁盘使用情况\n",[40,124865,124866,124869],{"class":42,"line":264},[40,124867,124868],{"class":596},"free",[40,124870,124871],{"class":997},"      # 内存使用情况\n",[40,124873,124874,124877],{"class":42,"line":277},[40,124875,124876],{"class":596},"top\u002Fhtop",[40,124878,124879],{"class":997},"  # 进程监控\n",[40,124881,124882,124885],{"class":42,"line":290},[40,124883,124884],{"class":596},"ps",[40,124886,124887],{"class":997},"        # 查看进程\n",[40,124889,124890],{"class":42,"line":298},[40,124891,1413],{"emptyLinePlaceholder":1412},[40,124893,124894],{"class":42,"line":310},[40,124895,124896],{"class":997},"# 网络\n",[40,124898,124899,124902],{"class":42,"line":5086},[40,124900,124901],{"class":596},"ping",[40,124903,124904],{"class":997},"      # 测试网络连通性\n",[40,124906,124907,124909],{"class":42,"line":5091},[40,124908,30154],{"class":596},[40,124910,124911],{"class":997},"      # 发送 HTTP 请求\n",[40,124913,124914,124916],{"class":42,"line":5105},[40,124915,123571],{"class":596},[40,124917,124918],{"class":997},"      # 下载文件\n",[40,124920,124921,124923],{"class":42,"line":5110},[40,124922,597],{"class":596},[40,124924,124925],{"class":997},"       # 远程登录\n",[40,124927,124928,124931],{"class":42,"line":5902},[40,124929,124930],{"class":596},"scp",[40,124932,124933],{"class":997},"       # 远程文件传输\n",[40,124935,124936],{"class":42,"line":5916},[40,124937,1413],{"emptyLinePlaceholder":1412},[40,124939,124940],{"class":42,"line":5924},[40,124941,124942],{"class":997},"# 包管理（Debian\u002FUbuntu）\n",[40,124944,124945,124947,124949],{"class":42,"line":5929},[40,124946,120654],{"class":596},[40,124948,2230],{"class":94},[40,124950,124951],{"class":997},"   # 更新软件源\n",[40,124953,124954,124956,124958],{"class":42,"line":5935},[40,124955,120654],{"class":596},[40,124957,929],{"class":94},[40,124959,124960],{"class":997},"  # 安装软件包\n",[40,124962,124963,124965,124967],{"class":42,"line":5941},[40,124964,120654],{"class":596},[40,124966,29391],{"class":94},[40,124968,124969],{"class":997},"   # 卸载软件包\n",[492,124971,124972],{"start":54},[495,124973,124974],{},"KDE Dolphin 以root打开",[19,124976,124977],{},"kde5",[31,124979,124981],{"className":587,"code":124980,"language":589,"meta":36,"style":36},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[26,124982,124983],{"__ignoreMap":36},[40,124984,124985,124988,124991,124994,124996,124998,125001,125004,125006,125009,125011],{"class":42,"line":43},[40,124986,124987],{"class":596},"pkexec",[40,124989,124990],{"class":94}," env",[40,124992,124993],{"class":94}," DISPLAY=",[40,124995,31448],{"class":50},[40,124997,31506],{"class":94},[40,124999,125000],{"class":50},"$XAUTHORITY ",[40,125002,125003],{"class":94},"KDE_SESSION_VERSION=",[40,125005,3799],{"class":63},[40,125007,125008],{"class":94}," KDE_FULL_SESSION=",[40,125010,129],{"class":63},[40,125012,125013],{"class":94}," dolphin\n",[19,125015,125016],{},"kde6",[31,125018,125020],{"className":587,"code":125019,"language":589,"meta":36,"style":36},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[26,125021,125022],{"__ignoreMap":36},[40,125023,125024,125026,125028,125030,125032,125034,125036,125038,125040,125042,125044],{"class":42,"line":43},[40,125025,124987],{"class":596},[40,125027,124990],{"class":94},[40,125029,124993],{"class":94},[40,125031,31448],{"class":50},[40,125033,31506],{"class":94},[40,125035,125000],{"class":50},[40,125037,125003],{"class":94},[40,125039,3824],{"class":63},[40,125041,125008],{"class":94},[40,125043,129],{"class":63},[40,125045,125013],{"class":94},[3384,125047,125048],{},"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":36,"searchDepth":54,"depth":54,"links":125050},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":124712,"description":3413},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":125057,"title":125058,"body":125059,"description":3413,"extension":3414,"meta":125073,"navigation":1412,"path":125074,"seo":125075,"stem":125076,"__hash__":125077},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":125060,"toc":125071},[125061,125064],[10,125062,125058],{"id":125063},"_5-各种环境配置",[19,125065,125066],{},[2106,125067,125070],{"href":125068,"rel":125069},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[2110],"电控组环境搭建大全",{"title":36,"searchDepth":54,"depth":54,"links":125072},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":125058,"description":3413},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":125079,"title":125080,"body":125081,"description":3413,"extension":3414,"meta":125429,"navigation":1412,"path":125430,"seo":125431,"stem":125432,"__hash__":125433},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":125082,"toc":125421},[125083,125086,125090,125094,125098,125103,125110,125114,125407,125411,125418],[10,125084,125080],{"id":125085},"_6-拓展功能",[14,125087,125089],{"id":125088},"_61-wine","6.1 Wine",[14,125091,125093],{"id":125092},"_62-android","6.2 Android",[402,125095,125097],{"id":125096},"_621-i卡a卡","6.2.1 I卡、A卡",[492,125099,125100],{},[495,125101,125102],{},"Wayland-Waydroid(体验超级好)",[19,125104,125105,125106],{},"Waydroid 官网与安装指南：",[2106,125107,125108],{"href":125108,"rel":125109},"https:\u002F\u002Fwaydro.id\u002F",[2110],[402,125111,125113],{"id":125112},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[492,125115,125116],{},[495,125117,125118,125119,125121,125122,125126,125128,125131,125136,125333],{},"QEMU-KVM虚拟机 + BlissOS-X86",[57014,125120],{},"BlissOS 官网下载：",[2106,125123,125124],{"href":125124,"rel":125125},"https:\u002F\u002Fblissos.org\u002F",[2110],[57014,125127],{},[438,125129],{"alt":36,"src":125130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[492,125132,125133],{"start":70},[495,125134,125135],{},"比较推荐的配置",[31,125137,125139],{"className":587,"code":125138,"language":589,"meta":36,"style":36},"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",[26,125140,125141,125148,125158,125168,125178,125190,125200,125207,125217,125226,125235,125245,125255,125264,125274,125284,125296,125306,125315,125325],{"__ignoreMap":36},[40,125142,125143,125146],{"class":42,"line":43},[40,125144,125145],{"class":596},"qemu-system-x86_64",[40,125147,27993],{"class":63},[40,125149,125150,125153,125156],{"class":42,"line":54},[40,125151,125152],{"class":63},"        -M",[40,125154,125155],{"class":94}," q35,vmport=off",[40,125157,27993],{"class":63},[40,125159,125160,125163,125166],{"class":42,"line":70},[40,125161,125162],{"class":63},"        -accel",[40,125164,125165],{"class":94}," kvm",[40,125167,27993],{"class":63},[40,125169,125170,125173,125176],{"class":42,"line":78},[40,125171,125172],{"class":63},"        -cpu",[40,125174,125175],{"class":94}," qemu64,+sse3,+sse4.2",[40,125177,27993],{"class":63},[40,125179,125180,125183,125186,125188],{"class":42,"line":86},[40,125181,125182],{"class":63},"        -smp",[40,125184,125185],{"class":94}," 8,cores=",[40,125187,3773],{"class":63},[40,125189,27993],{"class":63},[40,125191,125192,125195,125198],{"class":42,"line":100},[40,125193,125194],{"class":63},"        -m",[40,125196,125197],{"class":94}," 6G",[40,125199,27993],{"class":63},[40,125201,125202,125205],{"class":42,"line":108},[40,125203,125204],{"class":63},"        -usb",[40,125206,27993],{"class":63},[40,125208,125209,125212,125215],{"class":42,"line":121},[40,125210,125211],{"class":63},"        -device",[40,125213,125214],{"class":94}," virtio-tablet",[40,125216,27993],{"class":63},[40,125218,125219,125221,125224],{"class":42,"line":134},[40,125220,125211],{"class":63},[40,125222,125223],{"class":94}," virtio-keyboard",[40,125225,27993],{"class":63},[40,125227,125228,125230,125233],{"class":42,"line":146},[40,125229,125211],{"class":63},[40,125231,125232],{"class":94}," usb-tablet",[40,125234,27993],{"class":63},[40,125236,125237,125240,125243],{"class":42,"line":154},[40,125238,125239],{"class":63},"        -bios",[40,125241,125242],{"class":94}," OVMF-pure-efi64.fd",[40,125244,27993],{"class":63},[40,125246,125247,125250,125253],{"class":42,"line":162},[40,125248,125249],{"class":63},"        -net",[40,125251,125252],{"class":94}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[40,125254,27993],{"class":63},[40,125256,125257,125259,125262],{"class":42,"line":170},[40,125258,125249],{"class":63},[40,125260,125261],{"class":94}," nic,model=virtio",[40,125263,27993],{"class":63},[40,125265,125266,125269,125272],{"class":42,"line":183},[40,125267,125268],{"class":63},"        -audio",[40,125270,125271],{"class":94}," sdl,model=hda",[40,125273,27993],{"class":63},[40,125275,125276,125279,125282],{"class":42,"line":196},[40,125277,125278],{"class":63},"        -display",[40,125280,125281],{"class":94}," sdl,gl=on,show-cursor=on",[40,125283,27993],{"class":63},[40,125285,125286,125288,125291,125294],{"class":42,"line":204},[40,125287,125211],{"class":63},[40,125289,125290],{"class":94}," virtio-vga-gl,xres=1920,yres=",[40,125292,125293],{"class":63},"1080",[40,125295,27993],{"class":63},[40,125297,125298,125301,125304],{"class":42,"line":217},[40,125299,125300],{"class":63},"        -drive",[40,125302,125303],{"class":94}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[40,125305,27993],{"class":63},[40,125307,125308,125310,125313],{"class":42,"line":230},[40,125309,125300],{"class":63},[40,125311,125312],{"class":94}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[40,125314,27993],{"class":63},[40,125316,125317,125320,125323],{"class":42,"line":238},[40,125318,125319],{"class":63},"        -monitor",[40,125321,125322],{"class":94}," stdio",[40,125324,27993],{"class":63},[40,125326,125327,125330],{"class":42,"line":251},[40,125328,125329],{"class":63},"        -serial",[40,125331,125332],{"class":94}," none\n",[492,125334,125335],{"start":86},[495,125336,125337,125338],{},"常用操作：",[492,125339,125340,125343,125399],{},[495,125341,125342],{},"全屏：Ctrl+Alt+F",[495,125344,125345,125346,125351],{},"adb调试",[492,125347,125348],{},[495,125349,125350],{},"使Linux与Android用ADB连接。",[31,125352,125354],{"className":587,"code":125353,"language":589,"meta":36,"style":36},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[26,125355,125356,125361,125372,125377,125389,125394],{"__ignoreMap":36},[40,125357,125358],{"class":42,"line":43},[40,125359,125360],{"class":997},"# 连接安卓\n",[40,125362,125363,125366,125369],{"class":42,"line":54},[40,125364,125365],{"class":596},"adb",[40,125367,125368],{"class":94}," connect",[40,125370,125371],{"class":63}," 127.0.0.1\n",[40,125373,125374],{"class":42,"line":70},[40,125375,125376],{"class":997},"# 打开shell\n",[40,125378,125379,125381,125383,125386],{"class":42,"line":78},[40,125380,125365],{"class":596},[40,125382,30188],{"class":63},[40,125384,125385],{"class":94}," 127.0.0.1:5555",[40,125387,125388],{"class":94}," shell\n",[40,125390,125391],{"class":42,"line":86},[40,125392,125393],{"class":997},"# 使用root权限\n",[40,125395,125396],{"class":42,"line":100},[40,125397,125398],{"class":596},"su\n",[495,125400,125401,125402],{},"中文输入法",[492,125403,125404],{},[495,125405,125406],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,125408,125410],{"id":125409},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,125412,125413,125414],{},"rEFInd 官网与文档：",[2106,125415,125416],{"href":125416,"rel":125417},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[2110],[3384,125419,125420],{},"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":36,"searchDepth":54,"depth":54,"links":125422},[125423,125424,125428],{"id":125088,"depth":54,"text":125089},{"id":125092,"depth":54,"text":125093,"children":125425},[125426,125427],{"id":125096,"depth":70,"text":125097},{"id":125112,"depth":70,"text":125113},{"id":125409,"depth":54,"text":125410},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":125080,"description":3413},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":4,"title":5,"body":125435,"description":3413,"extension":3414,"meta":128033,"navigation":1412,"path":3416,"seo":128034,"stem":3418,"__hash__":3419},{"type":7,"value":125436,"toc":128007},[125437,125439,125441,125443,125447,125659,125661,125727,125729,125731,125733,125737,125739,125741,125743,125747,125749,125751,125753,125757,125759,125763,125765,125767,125771,125773,125777,125779,125781,125785,125787,125791,125793,125803,125805,125807,125815,125817,125825,125827,125829,125837,125839,125847,125849,125851,125859,125861,125863,125875,125877,125879,125887,125891,125893,125895,125903,125905,125913,125915,125923,125925,125933,125937,125939,125945,125949,125951,125959,125961,125967,125971,125973,125981,125983,125985,125987,125989,125993,125995,125999,126007,126011,126015,126021,126025,126029,126033,126041,126045,126047,126051,126055,126059,126065,126069,126073,126077,126083,126087,126089,126091,126093,126095,126099,126101,126117,126121,126123,126131,126135,126137,126155,126157,126181,126183,126187,126189,126201,126205,126219,126221,126223,126227,126237,126241,126245,126247,126251,126253,126265,126267,126271,126275,126277,126281,126315,126317,126319,126323,126327,126331,126333,126337,126341,126345,126347,126349,126353,126365,126367,126415,126417,126427,126435,126437,126439,126441,126495,126497,126499,126501,126517,126519,126523,126527,126531,126533,126535,126539,126543,126547,126549,126551,126587,126591,126593,126613,126621,126623,126627,126639,126691,126693,126695,126749,126751,126753,126757,126761,126763,126767,126769,126771,126827,126831,126833,126835,126839,126851,126925,126927,126929,126983,126987,126989,126993,126997,126999,127003,127005,127017,127037,127039,127041,127043,127045,127050,127052,127062,127064,127076,127078,127092,127126,127128,127144,127146,127158,127162,127164,127172,127184,127194,127224,127228,127236,127240,127244,127264,127270,127272,127274,127278,127280,127282,127284,127288,127290,127294,127296,127300,127302,127306,127308,127310,127314,127316,127320,127322,127324,127328,127330,127334,127336,127340,127342,127344,127348,127350,127354,127356,127360,127362,127364,127368,127370,127374,127376,127380,127382,127386,127388,127392,127394,127398,127400,127402,127406,127408,127412,127416,127418,127422,127424,127428,127430,127432,127436,127438,127440,127442,127444,127446,127448,127450,127460,127464,127468,127486,127490,127494,127498,127500,127504,127506,127508,127512,127514,127516,127518,127520,127522,127524,127526,127528,127530,127532,127534,127536,127540,127544,127548,127552,127556,127560,127564,127566,127568,127570,127572,127576,127580,127584,127588,127590,127595,127601,127605,127607,127611,127623,127625,127629,127653,127665,127667,127711,127729,127737,127739,127747,127749,127761,127765,127767,127772,127776,127778,127782,127784,127788,127792,127796,127798,127810,127812,127844,127848,127854,127886,127888,127890,127894,127896,127900,127906,127938,127942,127944,127952,127956,127961,127963,127967,127975,127979,127981,127983,127987,127995,127997,128001,128005],[10,125438,5],{"id":12},[14,125440,17],{"id":16},[19,125442,21],{},[19,125444,24,125445,29],{},[26,125446,28],{},[31,125448,125449],{"className":33,"code":34,"language":35,"meta":36,"style":36},[26,125450,125451,125457,125467,125473,125479,125489,125495,125505,125515,125525,125531,125537,125543,125553,125563,125569,125579,125589,125595,125605,125615,125625,125635,125641,125651],{"__ignoreMap":36},[40,125452,125453,125455],{"class":42,"line":43},[40,125454,47],{"class":46},[40,125456,51],{"class":50},[40,125458,125459,125461,125463,125465],{"class":42,"line":54},[40,125460,57],{"class":46},[40,125462,60],{"class":50},[40,125464,64],{"class":63},[40,125466,67],{"class":50},[40,125468,125469,125471],{"class":42,"line":70},[40,125470,73],{"class":46},[40,125472,51],{"class":50},[40,125474,125475,125477],{"class":42,"line":78},[40,125476,81],{"class":46},[40,125478,51],{"class":50},[40,125480,125481,125483,125485,125487],{"class":42,"line":86},[40,125482,89],{"class":46},[40,125484,60],{"class":50},[40,125486,95],{"class":94},[40,125488,67],{"class":50},[40,125490,125491,125493],{"class":42,"line":100},[40,125492,103],{"class":46},[40,125494,51],{"class":50},[40,125496,125497,125499,125501,125503],{"class":42,"line":108},[40,125498,111],{"class":46},[40,125500,60],{"class":50},[40,125502,116],{"class":94},[40,125504,67],{"class":50},[40,125506,125507,125509,125511,125513],{"class":42,"line":121},[40,125508,124],{"class":46},[40,125510,60],{"class":50},[40,125512,129],{"class":63},[40,125514,67],{"class":50},[40,125516,125517,125519,125521,125523],{"class":42,"line":134},[40,125518,137],{"class":46},[40,125520,60],{"class":50},[40,125522,129],{"class":63},[40,125524,67],{"class":50},[40,125526,125527,125529],{"class":42,"line":146},[40,125528,149],{"class":46},[40,125530,51],{"class":50},[40,125532,125533,125535],{"class":42,"line":154},[40,125534,157],{"class":94},[40,125536,51],{"class":50},[40,125538,125539,125541],{"class":42,"line":162},[40,125540,165],{"class":46},[40,125542,51],{"class":50},[40,125544,125545,125547,125549,125551],{"class":42,"line":170},[40,125546,173],{"class":46},[40,125548,60],{"class":50},[40,125550,178],{"class":94},[40,125552,67],{"class":50},[40,125554,125555,125557,125559,125561],{"class":42,"line":183},[40,125556,186],{"class":46},[40,125558,60],{"class":50},[40,125560,191],{"class":94},[40,125562,67],{"class":50},[40,125564,125565,125567],{"class":42,"line":196},[40,125566,199],{"class":46},[40,125568,51],{"class":50},[40,125570,125571,125573,125575,125577],{"class":42,"line":204},[40,125572,207],{"class":46},[40,125574,60],{"class":50},[40,125576,212],{"class":94},[40,125578,67],{"class":50},[40,125580,125581,125583,125585,125587],{"class":42,"line":217},[40,125582,220],{"class":46},[40,125584,60],{"class":50},[40,125586,225],{"class":94},[40,125588,67],{"class":50},[40,125590,125591,125593],{"class":42,"line":230},[40,125592,233],{"class":46},[40,125594,51],{"class":50},[40,125596,125597,125599,125601,125603],{"class":42,"line":238},[40,125598,241],{"class":46},[40,125600,60],{"class":50},[40,125602,246],{"class":94},[40,125604,67],{"class":50},[40,125606,125607,125609,125611,125613],{"class":42,"line":251},[40,125608,254],{"class":46},[40,125610,60],{"class":50},[40,125612,259],{"class":94},[40,125614,67],{"class":50},[40,125616,125617,125619,125621,125623],{"class":42,"line":264},[40,125618,267],{"class":46},[40,125620,60],{"class":50},[40,125622,272],{"class":94},[40,125624,67],{"class":50},[40,125626,125627,125629,125631,125633],{"class":42,"line":277},[40,125628,280],{"class":46},[40,125630,60],{"class":50},[40,125632,285],{"class":94},[40,125634,67],{"class":50},[40,125636,125637,125639],{"class":42,"line":290},[40,125638,293],{"class":46},[40,125640,51],{"class":50},[40,125642,125643,125645,125647,125649],{"class":42,"line":298},[40,125644,301],{"class":46},[40,125646,60],{"class":50},[40,125648,212],{"class":94},[40,125650,67],{"class":50},[40,125652,125653,125655,125657],{"class":42,"line":310},[40,125654,111],{"class":46},[40,125656,60],{"class":50},[40,125658,317],{"class":94},[19,125660,320],{},[31,125662,125663],{"className":33,"code":323,"language":35,"meta":36,"style":36},[26,125664,125665,125671,125679,125685,125691,125699,125707,125713,125719],{"__ignoreMap":36},[40,125666,125667,125669],{"class":42,"line":43},[40,125668,47],{"class":46},[40,125670,332],{"class":50},[40,125672,125673,125675,125677],{"class":42,"line":54},[40,125674,57],{"class":46},[40,125676,60],{"class":50},[40,125678,341],{"class":63},[40,125680,125681,125683],{"class":42,"line":70},[40,125682,73],{"class":46},[40,125684,332],{"class":50},[40,125686,125687,125689],{"class":42,"line":78},[40,125688,352],{"class":46},[40,125690,332],{"class":50},[40,125692,125693,125695,125697],{"class":42,"line":86},[40,125694,124],{"class":46},[40,125696,60],{"class":50},[40,125698,363],{"class":63},[40,125700,125701,125703,125705],{"class":42,"line":100},[40,125702,137],{"class":46},[40,125704,60],{"class":50},[40,125706,363],{"class":63},[40,125708,125709,125711],{"class":42,"line":108},[40,125710,149],{"class":46},[40,125712,332],{"class":50},[40,125714,125715,125717],{"class":42,"line":121},[40,125716,157],{"class":94},[40,125718,332],{"class":50},[40,125720,125721,125723,125725],{"class":42,"line":134},[40,125722,388],{"class":46},[40,125724,60],{"class":50},[40,125726,393],{"class":94},[19,125728,396],{},[14,125730,400],{"id":399},[402,125732,405],{"id":404},[19,125734,125735],{},[409,125736,411],{},[19,125738,414],{},[19,125740,417],{},[19,125742,420],{},[19,125744,125745],{},[409,125746,425],{},[19,125748,428],{},[19,125750,431],{},[19,125752,434],{},[19,125754,125755],{},[438,125756],{"alt":36,"src":440},[19,125758,443],{},[19,125760,125761],{},[438,125762],{"alt":36,"src":448},[19,125764,451],{},[19,125766,454],{},[19,125768,125769],{},[438,125770],{"alt":36,"src":459},[19,125772,462],{},[19,125774,125775],{},[438,125776],{"alt":36,"src":467},[19,125778,470],{},[402,125780,474],{"id":473},[19,125782,125783],{},[409,125784,479],{},[19,125786,482],{},[19,125788,125789],{},[409,125790,487],{},[19,125792,490],{},[492,125794,125795,125797,125799,125801],{},[495,125796,497],{},[495,125798,500],{},[495,125800,503],{},[495,125802,506],{},[19,125804,509],{},[19,125806,512],{},[31,125808,125809],{"className":515,"code":516,"language":517,"meta":518,"style":36},[26,125810,125811],{"__ignoreMap":36},[40,125812,125813],{"class":42,"line":43},[40,125814,516],{},[19,125816,527],{},[31,125818,125819],{"className":515,"code":530,"language":517,"meta":518,"style":36},[26,125820,125821],{"__ignoreMap":36},[40,125822,125823],{"class":42,"line":43},[40,125824,530],{},[19,125826,539],{},[19,125828,542],{},[31,125830,125831],{"className":515,"code":545,"language":517,"meta":518,"style":36},[26,125832,125833],{"__ignoreMap":36},[40,125834,125835],{"class":42,"line":43},[40,125836,545],{},[19,125838,554],{},[31,125840,125841],{"className":515,"code":557,"language":517,"meta":518,"style":36},[26,125842,125843],{"__ignoreMap":36},[40,125844,125845],{"class":42,"line":43},[40,125846,557],{},[19,125848,566],{},[19,125850,569],{},[31,125852,125853],{"className":515,"code":572,"language":517,"meta":518,"style":36},[26,125854,125855],{"__ignoreMap":36},[40,125856,125857],{"class":42,"line":43},[40,125858,572],{},[19,125860,581],{},[19,125862,584],{},[31,125864,125865],{"className":587,"code":588,"language":589,"meta":36,"style":36},[26,125866,125867],{"__ignoreMap":36},[40,125868,125869,125871,125873],{"class":42,"line":43},[40,125870,597],{"class":596},[40,125872,600],{"class":63},[40,125874,603],{"class":94},[19,125876,606],{},[19,125878,609],{},[31,125880,125881],{"className":515,"code":612,"language":517,"meta":518,"style":36},[26,125882,125883],{"__ignoreMap":36},[40,125884,125885],{"class":42,"line":43},[40,125886,612],{},[19,125888,125889],{},[409,125890,623],{},[19,125892,626],{},[19,125894,629],{},[31,125896,125897],{"className":515,"code":632,"language":517,"meta":518,"style":36},[26,125898,125899],{"__ignoreMap":36},[40,125900,125901],{"class":42,"line":43},[40,125902,632],{},[19,125904,641],{},[31,125906,125907],{"className":515,"code":644,"language":517,"meta":518,"style":36},[26,125908,125909],{"__ignoreMap":36},[40,125910,125911],{"class":42,"line":43},[40,125912,644],{},[19,125914,653],{},[31,125916,125917],{"className":515,"code":656,"language":517,"meta":518,"style":36},[26,125918,125919],{"__ignoreMap":36},[40,125920,125921],{"class":42,"line":43},[40,125922,656],{},[19,125924,665],{},[31,125926,125927],{"className":515,"code":668,"language":517,"meta":518,"style":36},[26,125928,125929],{"__ignoreMap":36},[40,125930,125931],{"class":42,"line":43},[40,125932,668],{},[19,125934,125935],{},[409,125936,679],{},[19,125938,682],{},[492,125940,125941,125943],{},[495,125942,687],{},[495,125944,690],{},[19,125946,125947],{},[409,125948,695],{},[19,125950,698],{},[31,125952,125953],{"className":515,"code":701,"language":517,"meta":518,"style":36},[26,125954,125955],{"__ignoreMap":36},[40,125956,125957],{"class":42,"line":43},[40,125958,701],{},[19,125960,710],{},[492,125962,125963,125965],{},[495,125964,715],{},[495,125966,718],{},[19,125968,125969],{},[409,125970,723],{},[19,125972,726],{},[31,125974,125975],{"className":515,"code":729,"language":517,"meta":518,"style":36},[26,125976,125977],{"__ignoreMap":36},[40,125978,125979],{"class":42,"line":43},[40,125980,729],{},[19,125982,738],{},[19,125984,741],{},[402,125986,745],{"id":744},[19,125988,748],{},[19,125990,125991],{},[409,125992,753],{},[19,125994,756],{},[19,125996,125997],{},[409,125998,761],{},[19,126000,764,126001,768,126003,772,126005,776],{},[26,126002,767],{},[26,126004,771],{},[26,126006,775],{},[19,126008,126009],{},[438,126010],{"alt":36,"src":781},[19,126012,126013],{},[409,126014,786],{},[19,126016,789,126017,793,126019,797],{},[26,126018,792],{},[26,126020,796],{},[19,126022,126023],{},[438,126024],{"alt":36,"src":802},[19,126026,805,126027,776],{},[26,126028,808],{},[19,126030,126031],{},[438,126032],{"alt":36,"src":813},[19,126034,816,126035,820,126037,824,126039,828],{},[26,126036,819],{},[26,126038,823],{},[26,126040,827],{},[19,126042,126043],{},[438,126044],{"alt":36,"src":833},[19,126046,836],{},[19,126048,126049],{},[438,126050],{"alt":36,"src":841},[19,126052,126053],{},[438,126054],{"alt":36,"src":846},[19,126056,126057],{},[409,126058,851],{},[19,126060,854,126061,793,126063,859],{},[26,126062,792],{},[26,126064,796],{},[19,126066,126067],{},[438,126068],{"alt":36,"src":864},[19,126070,867,126071,871],{},[26,126072,870],{},[19,126074,126075],{},[438,126076],{"alt":36,"src":876},[19,126078,879,126079,883,126081,887],{},[26,126080,882],{},[26,126082,886],{},[19,126084,126085],{},[438,126086],{"alt":36,"src":892},[19,126088,895],{},[14,126090,899],{"id":898},[19,126092,902],{},[19,126094,905],{},[492,126096,126097],{},[495,126098,910],{},[19,126100,913],{},[31,126102,126103],{"className":587,"code":916,"language":589,"meta":36,"style":36},[26,126104,126105],{"__ignoreMap":36},[40,126106,126107,126109,126111,126113,126115],{"class":42,"line":43},[40,126108,923],{"class":596},[40,126110,926],{"class":94},[40,126112,929],{"class":94},[40,126114,932],{"class":94},[40,126116,935],{"class":94},[492,126118,126119],{"start":54},[495,126120,940],{},[19,126122,943],{},[31,126124,126125],{"className":587,"code":946,"language":589,"meta":36,"style":36},[26,126126,126127],{"__ignoreMap":36},[40,126128,126129],{"class":42,"line":43},[40,126130,946],{"class":596},[492,126132,126133],{"start":70},[495,126134,957],{},[19,126136,960],{},[31,126138,126139],{"className":587,"code":963,"language":589,"meta":36,"style":36},[26,126140,126141,126149],{"__ignoreMap":36},[40,126142,126143,126145,126147],{"class":42,"line":43},[40,126144,970],{"class":596},[40,126146,973],{"class":63},[40,126148,976],{"class":94},[40,126150,126151,126153],{"class":42,"line":54},[40,126152,981],{"class":596},[40,126154,984],{"class":94},[19,126156,987],{},[31,126158,126159],{"className":587,"code":990,"language":589,"meta":36,"style":36},[26,126160,126161,126165,126171,126177],{"__ignoreMap":36},[40,126162,126163],{"class":42,"line":43},[40,126164,998],{"class":997},[40,126166,126167,126169],{"class":42,"line":54},[40,126168,1003],{"class":63},[40,126170,1006],{"class":94},[40,126172,126173,126175],{"class":42,"line":70},[40,126174,1003],{"class":63},[40,126176,1013],{"class":94},[40,126178,126179],{"class":42,"line":78},[40,126180,1018],{"class":596},[19,126182,1021],{},[492,126184,126185],{"start":78},[495,126186,1026],{},[19,126188,1029],{},[31,126190,126191],{"className":587,"code":1032,"language":589,"meta":36,"style":36},[26,126192,126193],{"__ignoreMap":36},[40,126194,126195,126197,126199],{"class":42,"line":43},[40,126196,1039],{"class":596},[40,126198,1042],{"class":94},[40,126200,984],{"class":94},[492,126202,126203],{"start":86},[495,126204,1049],{},[31,126206,126207],{"className":587,"code":1052,"language":589,"meta":36,"style":36},[26,126208,126209],{"__ignoreMap":36},[40,126210,126211,126213,126215,126217],{"class":42,"line":43},[40,126212,1059],{"class":596},[40,126214,1062],{"class":63},[40,126216,1065],{"class":94},[40,126218,1068],{"class":63},[19,126220,1071],{},[19,126222,1074],{},[492,126224,126225],{"start":100},[495,126226,1079],{},[31,126228,126229],{"className":587,"code":1082,"language":589,"meta":36,"style":36},[26,126230,126231],{"__ignoreMap":36},[40,126232,126233,126235],{"class":42,"line":43},[40,126234,1059],{"class":596},[40,126236,1091],{"class":63},[19,126238,126239],{},[438,126240],{"alt":36,"src":1096},[492,126242,126243],{"start":108},[495,126244,1101],{},[19,126246,1104],{},[492,126248,126249],{"start":121},[495,126250,1109],{},[19,126252,1112],{},[31,126254,126255],{"className":587,"code":1115,"language":589,"meta":36,"style":36},[26,126256,126257],{"__ignoreMap":36},[40,126258,126259,126261,126263],{"class":42,"line":43},[40,126260,1059],{"class":596},[40,126262,1124],{"class":63},[40,126264,1127],{"class":94},[19,126266,1130],{},[19,126268,126269],{},[438,126270],{"alt":36,"src":1135},[19,126272,126273],{},[438,126274],{"alt":36,"src":1140},[14,126276,1144],{"id":1143},[19,126278,126279],{},[409,126280,1149],{},[31,126282,126283],{"className":587,"code":1152,"language":589,"meta":36,"style":36},[26,126284,126285,126289,126301,126307,126311],{"__ignoreMap":36},[40,126286,126287],{"class":42,"line":43},[40,126288,1159],{"class":997},[40,126290,126291,126293,126295,126297,126299],{"class":42,"line":54},[40,126292,923],{"class":596},[40,126294,1166],{"class":94},[40,126296,1169],{"class":63},[40,126298,1172],{"class":94},[40,126300,1175],{"class":50},[40,126302,126303,126305],{"class":42,"line":70},[40,126304,1180],{"class":596},[40,126306,1183],{"class":94},[40,126308,126309],{"class":42,"line":78},[40,126310,1188],{"class":997},[40,126312,126313],{"class":42,"line":86},[40,126314,1193],{"class":596},[19,126316,1196],{},[402,126318,1200],{"id":1199},[19,126320,126321,1206],{},[409,126322,1205],{},[19,126324,126325,1212],{},[409,126326,1211],{},[19,126328,126329],{},[409,126330,1217],{},[19,126332,1220],{},[19,126334,1223,126335,1227],{},[26,126336,1226],{},[19,126338,126339],{},[438,126340],{"alt":36,"src":1232},[19,126342,1235,126343,1239],{},[26,126344,1238],{},[19,126346,1242],{},[19,126348,1245],{},[19,126350,1248,126351,1252],{},[26,126352,1251],{},[31,126354,126355],{"className":587,"code":1255,"language":589,"meta":36,"style":36},[26,126356,126357],{"__ignoreMap":36},[40,126358,126359,126361,126363],{"class":42,"line":43},[40,126360,923],{"class":596},[40,126362,1264],{"class":94},[40,126364,1267],{"class":94},[19,126366,1270],{},[31,126368,126369],{"className":587,"code":1273,"language":589,"meta":36,"style":36},[26,126370,126371,126393],{"__ignoreMap":36},[40,126372,126373,126375,126377,126379,126381,126383,126385,126387,126389,126391],{"class":42,"line":43},[40,126374,1280],{"class":50},[40,126376,1284],{"class":1283},[40,126378,1287],{"class":94},[40,126380,1290],{"class":596},[40,126382,1293],{"class":94},[40,126384,1296],{"class":596},[40,126386,1299],{"class":596},[40,126388,1302],{"class":94},[40,126390,1305],{"class":94},[40,126392,1308],{"class":94},[40,126394,126395,126397,126399,126401,126403,126405,126407,126409,126411,126413],{"class":42,"line":54},[40,126396,1280],{"class":50},[40,126398,1284],{"class":1283},[40,126400,1287],{"class":94},[40,126402,1290],{"class":596},[40,126404,1293],{"class":94},[40,126406,1323],{"class":596},[40,126408,1299],{"class":596},[40,126410,1328],{"class":94},[40,126412,1305],{"class":94},[40,126414,1333],{"class":94},[19,126416,1336],{},[1338,126418,126419,126421,126423,126425],{},[495,126420,1342],{},[495,126422,1345],{},[495,126424,1348],{},[495,126426,1351],{},[19,126428,1354,126429,126431,126433],{},[1356,126430,1358],{},[26,126432,1361],{},[1356,126434,1364],{},[19,126436,1367],{},[19,126438,1370],{},[19,126440,1373],{},[31,126442,126443],{"className":587,"code":1376,"language":589,"meta":36,"style":36},[26,126444,126445,126449,126459,126469,126473,126477,126487],{"__ignoreMap":36},[40,126446,126447],{"class":42,"line":43},[40,126448,1383],{"class":997},[40,126450,126451,126453,126455,126457],{"class":42,"line":54},[40,126452,923],{"class":596},[40,126454,1390],{"class":94},[40,126456,1393],{"class":94},[40,126458,1396],{"class":94},[40,126460,126461,126463,126465,126467],{"class":42,"line":70},[40,126462,923],{"class":596},[40,126464,1390],{"class":94},[40,126466,1393],{"class":94},[40,126468,1407],{"class":94},[40,126470,126471],{"class":42,"line":78},[40,126472,1413],{"emptyLinePlaceholder":1412},[40,126474,126475],{"class":42,"line":86},[40,126476,1418],{"class":997},[40,126478,126479,126481,126483,126485],{"class":42,"line":100},[40,126480,923],{"class":596},[40,126482,1425],{"class":94},[40,126484,1428],{"class":94},[40,126486,1431],{"class":63},[40,126488,126489,126491,126493],{"class":42,"line":108},[40,126490,923],{"class":596},[40,126492,1425],{"class":94},[40,126494,1440],{"class":94},[19,126496,1443],{},[19,126498,1446],{},[19,126500,1449],{},[31,126502,126503],{"className":587,"code":1452,"language":589,"meta":36,"style":36},[26,126504,126505],{"__ignoreMap":36},[40,126506,126507,126509,126511,126513,126515],{"class":42,"line":43},[40,126508,1459],{"class":596},[40,126510,1462],{"class":94},[40,126512,1465],{"class":1283},[40,126514,1468],{"class":596},[40,126516,1471],{"class":94},[19,126518,1474],{},[19,126520,126521],{},[438,126522],{"alt":36,"src":1479},[19,126524,1482,126525,1486],{},[26,126526,1485],{},[19,126528,126529],{},[409,126530,1491],{},[19,126532,1494],{},[402,126534,1498],{"id":1497},[19,126536,126537,1503],{},[409,126538,1205],{},[19,126540,126541,1508],{},[409,126542,1211],{},[19,126544,126545],{},[409,126546,1217],{},[19,126548,1515],{},[19,126550,1518],{},[31,126552,126553],{"className":587,"code":1521,"language":589,"meta":36,"style":36},[26,126554,126555,126571],{"__ignoreMap":36},[40,126556,126557,126559,126561,126563,126565,126567,126569],{"class":42,"line":43},[40,126558,1528],{"class":596},[40,126560,1531],{"class":94},[40,126562,1534],{"class":63},[40,126564,1537],{"class":63},[40,126566,1465],{"class":1283},[40,126568,1468],{"class":596},[40,126570,1544],{"class":94},[40,126572,126573,126575,126577,126579,126581,126583,126585],{"class":42,"line":54},[40,126574,1528],{"class":596},[40,126576,1531],{"class":94},[40,126578,1534],{"class":63},[40,126580,1555],{"class":63},[40,126582,1465],{"class":1283},[40,126584,1468],{"class":596},[40,126586,1544],{"class":94},[19,126588,126589],{},[438,126590],{"alt":36,"src":1566},[19,126592,1569],{},[31,126594,126595],{"className":587,"code":1572,"language":589,"meta":36,"style":36},[26,126596,126597],{"__ignoreMap":36},[40,126598,126599,126601,126603,126605,126607,126609,126611],{"class":42,"line":43},[40,126600,1528],{"class":596},[40,126602,1531],{"class":94},[40,126604,1534],{"class":63},[40,126606,1585],{"class":63},[40,126608,1465],{"class":1283},[40,126610,1468],{"class":596},[40,126612,1544],{"class":94},[19,126614,1594,126615,1598,126617,1602,126619,1606],{},[26,126616,1597],{},[26,126618,1601],{},[409,126620,1605],{},[19,126622,1245],{},[19,126624,1248,126625,1613],{},[26,126626,1251],{},[31,126628,126629],{"className":587,"code":1255,"language":589,"meta":36,"style":36},[26,126630,126631],{"__ignoreMap":36},[40,126632,126633,126635,126637],{"class":42,"line":43},[40,126634,923],{"class":596},[40,126636,1264],{"class":94},[40,126638,1267],{"class":94},[31,126640,126641],{"className":587,"code":1628,"language":589,"meta":36,"style":36},[26,126642,126643,126667],{"__ignoreMap":36},[40,126644,126645,126647,126649,126651,126653,126655,126657,126659,126661,126663,126665],{"class":42,"line":43},[40,126646,1280],{"class":50},[40,126648,1284],{"class":1283},[40,126650,1287],{"class":94},[40,126652,1641],{"class":50},[40,126654,1284],{"class":1283},[40,126656,1646],{"class":94},[40,126658,1649],{"class":596},[40,126660,1284],{"class":94},[40,126662,1654],{"class":596},[40,126664,1299],{"class":596},[40,126666,1659],{"class":94},[40,126668,126669,126671,126673,126675,126677,126679,126681,126683,126685,126687,126689],{"class":42,"line":54},[40,126670,1280],{"class":50},[40,126672,1284],{"class":1283},[40,126674,1287],{"class":94},[40,126676,1641],{"class":50},[40,126678,1284],{"class":1283},[40,126680,1674],{"class":94},[40,126682,1649],{"class":596},[40,126684,1284],{"class":94},[40,126686,1654],{"class":596},[40,126688,1299],{"class":596},[40,126690,1685],{"class":94},[19,126692,1370],{},[19,126694,1373],{},[31,126696,126697],{"className":587,"code":1376,"language":589,"meta":36,"style":36},[26,126698,126699,126703,126713,126723,126727,126731,126741],{"__ignoreMap":36},[40,126700,126701],{"class":42,"line":43},[40,126702,1383],{"class":997},[40,126704,126705,126707,126709,126711],{"class":42,"line":54},[40,126706,923],{"class":596},[40,126708,1390],{"class":94},[40,126710,1393],{"class":94},[40,126712,1396],{"class":94},[40,126714,126715,126717,126719,126721],{"class":42,"line":70},[40,126716,923],{"class":596},[40,126718,1390],{"class":94},[40,126720,1393],{"class":94},[40,126722,1407],{"class":94},[40,126724,126725],{"class":42,"line":78},[40,126726,1413],{"emptyLinePlaceholder":1412},[40,126728,126729],{"class":42,"line":86},[40,126730,1418],{"class":997},[40,126732,126733,126735,126737,126739],{"class":42,"line":100},[40,126734,923],{"class":596},[40,126736,1425],{"class":94},[40,126738,1428],{"class":94},[40,126740,1431],{"class":63},[40,126742,126743,126745,126747],{"class":42,"line":108},[40,126744,923],{"class":596},[40,126746,1425],{"class":94},[40,126748,1440],{"class":94},[19,126750,1443],{},[19,126752,1446],{},[19,126754,1449,126755,1753],{},[26,126756,1752],{},[19,126758,126759],{},[438,126760],{"alt":36,"src":1758},[19,126762,1761],{},[19,126764,126765,1766],{},[409,126766,1491],{},[402,126768,1770],{"id":1769},[19,126770,1773],{},[31,126772,126773],{"className":587,"code":1776,"language":589,"meta":36,"style":36},[26,126774,126775,126801],{"__ignoreMap":36},[40,126776,126777,126779,126781,126783,126785,126787,126789,126791,126793,126795,126797,126799],{"class":42,"line":43},[40,126778,1528],{"class":596},[40,126780,1531],{"class":94},[40,126782,1787],{"class":63},[40,126784,973],{"class":63},[40,126786,1792],{"class":50},[40,126788,1528],{"class":596},[40,126790,1531],{"class":94},[40,126792,1799],{"class":63},[40,126794,1802],{"class":94},[40,126796,1805],{"class":63},[40,126798,1808],{"class":94},[40,126800,1811],{"class":50},[40,126802,126803,126805,126807,126809,126811,126813,126815,126817,126819,126821,126823,126825],{"class":42,"line":54},[40,126804,1528],{"class":596},[40,126806,1531],{"class":94},[40,126808,1787],{"class":63},[40,126810,973],{"class":63},[40,126812,1792],{"class":50},[40,126814,1528],{"class":596},[40,126816,1531],{"class":94},[40,126818,1799],{"class":63},[40,126820,1802],{"class":94},[40,126822,1805],{"class":63},[40,126824,1836],{"class":94},[40,126826,1811],{"class":50},[19,126828,126829],{},[438,126830],{"alt":36,"src":1843},[19,126832,1846],{},[19,126834,1245],{},[19,126836,1248,126837,1613],{},[26,126838,1251],{},[31,126840,126841],{"className":587,"code":1255,"language":589,"meta":36,"style":36},[26,126842,126843],{"__ignoreMap":36},[40,126844,126845,126847,126849],{"class":42,"line":43},[40,126846,923],{"class":596},[40,126848,1264],{"class":94},[40,126850,1267],{"class":94},[31,126852,126853],{"className":587,"code":1867,"language":589,"meta":36,"style":36},[26,126854,126855,126879,126903],{"__ignoreMap":36},[40,126856,126857,126859,126861,126863,126865,126867,126869,126871,126873,126875,126877],{"class":42,"line":43},[40,126858,1280],{"class":50},[40,126860,1284],{"class":1283},[40,126862,1878],{"class":94},[40,126864,1290],{"class":596},[40,126866,1293],{"class":94},[40,126868,1323],{"class":596},[40,126870,1299],{"class":596},[40,126872,1889],{"class":94},[40,126874,1892],{"class":94},[40,126876,1305],{"class":94},[40,126878,1897],{"class":94},[40,126880,126881,126883,126885,126887,126889,126891,126893,126895,126897,126899,126901],{"class":42,"line":54},[40,126882,1280],{"class":50},[40,126884,1284],{"class":1283},[40,126886,1878],{"class":94},[40,126888,1290],{"class":596},[40,126890,1293],{"class":94},[40,126892,1323],{"class":596},[40,126894,1299],{"class":596},[40,126896,1889],{"class":94},[40,126898,1918],{"class":94},[40,126900,1305],{"class":94},[40,126902,1923],{"class":94},[40,126904,126905,126907,126909,126911,126913,126915,126917,126919,126921,126923],{"class":42,"line":70},[40,126906,1280],{"class":50},[40,126908,1284],{"class":1283},[40,126910,1287],{"class":94},[40,126912,1290],{"class":596},[40,126914,1293],{"class":94},[40,126916,1323],{"class":596},[40,126918,1299],{"class":596},[40,126920,1328],{"class":94},[40,126922,1305],{"class":94},[40,126924,1946],{"class":94},[19,126926,1370],{},[19,126928,1373],{},[31,126930,126931],{"className":587,"code":1376,"language":589,"meta":36,"style":36},[26,126932,126933,126937,126947,126957,126961,126965,126975],{"__ignoreMap":36},[40,126934,126935],{"class":42,"line":43},[40,126936,1383],{"class":997},[40,126938,126939,126941,126943,126945],{"class":42,"line":54},[40,126940,923],{"class":596},[40,126942,1390],{"class":94},[40,126944,1393],{"class":94},[40,126946,1396],{"class":94},[40,126948,126949,126951,126953,126955],{"class":42,"line":70},[40,126950,923],{"class":596},[40,126952,1390],{"class":94},[40,126954,1393],{"class":94},[40,126956,1407],{"class":94},[40,126958,126959],{"class":42,"line":78},[40,126960,1413],{"emptyLinePlaceholder":1412},[40,126962,126963],{"class":42,"line":86},[40,126964,1418],{"class":997},[40,126966,126967,126969,126971,126973],{"class":42,"line":100},[40,126968,923],{"class":596},[40,126970,1425],{"class":94},[40,126972,1428],{"class":94},[40,126974,1431],{"class":63},[40,126976,126977,126979,126981],{"class":42,"line":108},[40,126978,923],{"class":596},[40,126980,1425],{"class":94},[40,126982,1440],{"class":94},[19,126984,2007,126985],{},[409,126986,2010],{},[19,126988,1446],{},[19,126990,1449,126991,1753],{},[26,126992,1752],{},[19,126994,126995],{},[438,126996],{"alt":36,"src":2021},[19,126998,1761],{},[19,127000,127001,2028],{},[409,127002,1491],{},[402,127004,2032],{"id":2031},[19,127006,2035,127007,2038,127009,2042,127011,2046,127013,2050,127015,2053],{},[26,127008,1485],{},[26,127010,2041],{},[26,127012,2045],{},[26,127014,2049],{},[26,127016,2045],{},[19,127018,2056,127019,2060,127021,2064,127023,2067,127025,2071,127027,2075,127029,2079,127031,2079,127033,2079,127035,776],{},[26,127020,2059],{},[26,127022,2063],{},[26,127024,2059],{},[26,127026,2070],{},[26,127028,2074],{},[26,127030,2078],{},[26,127032,2082],{},[26,127034,2085],{},[26,127036,2088],{},[14,127038,2092],{"id":2091},[19,127040,2095],{},[19,127042,2098],{},[19,127044,2101],{},[19,127046,2104,127047],{},[2106,127048,2108],{"href":2108,"rel":127049},[2110],[19,127051,2113],{},[31,127053,127054],{"className":587,"code":2116,"language":589,"meta":36,"style":36},[26,127055,127056],{"__ignoreMap":36},[40,127057,127058,127060],{"class":42,"line":43},[40,127059,2123],{"class":596},[40,127061,2126],{"class":94},[19,127063,2129],{},[31,127065,127066],{"className":587,"code":2132,"language":589,"meta":36,"style":36},[26,127067,127068],{"__ignoreMap":36},[40,127069,127070,127072,127074],{"class":42,"line":43},[40,127071,981],{"class":596},[40,127073,2141],{"class":50},[40,127075,2144],{"class":94},[19,127077,2147],{},[31,127079,127080],{"className":587,"code":2150,"language":589,"meta":36,"style":36},[26,127081,127082],{"__ignoreMap":36},[40,127083,127084,127086,127088,127090],{"class":42,"line":43},[40,127085,2157],{"class":596},[40,127087,2160],{"class":94},[40,127089,2163],{"class":94},[40,127091,2166],{"class":94},[1338,127093,127094,127112],{},[495,127095,2171,127096,2174,127098],{},[26,127097,981],{},[1338,127099,127100,127104,127108],{},[495,127101,2179,127102,2183],{},[26,127103,2182],{},[495,127105,2179,127106,2189],{},[26,127107,2188],{},[495,127109,2179,127110,2195],{},[26,127111,2194],{},[495,127113,2171,127114,2174,127116],{},[26,127115,2200],{},[1338,127117,127118,127122],{},[495,127119,2179,127120,2208],{},[26,127121,2207],{},[495,127123,2211,127124,2215],{},[26,127125,2214],{},[19,127127,2218],{},[31,127129,127130],{"className":587,"code":2221,"language":589,"meta":36,"style":36},[26,127131,127132],{"__ignoreMap":36},[40,127133,127134,127136,127138,127140,127142],{"class":42,"line":43},[40,127135,2123],{"class":596},[40,127137,2230],{"class":94},[40,127139,2233],{"class":50},[40,127141,2123],{"class":596},[40,127143,2238],{"class":94},[19,127145,2241],{},[31,127147,127148],{"className":587,"code":2244,"language":589,"meta":36,"style":36},[26,127149,127150],{"__ignoreMap":36},[40,127151,127152,127154,127156],{"class":42,"line":43},[40,127153,2123],{"class":596},[40,127155,929],{"class":94},[40,127157,2255],{"class":94},[19,127159,127160,2261],{},[409,127161,2260],{},[19,127163,2264],{},[31,127165,127166],{"className":587,"code":2267,"language":589,"meta":36,"style":36},[26,127167,127168],{"__ignoreMap":36},[40,127169,127170],{"class":42,"line":43},[40,127171,2267],{"class":596},[492,127173,127174],{},[495,127175,127176,2261,127178],{},[409,127177,2280],{},[492,127179,127180],{},[495,127181,2285,127182,2289],{},[26,127183,2288],{},[31,127185,127186],{"className":587,"code":2292,"language":589,"meta":36,"style":36},[26,127187,127188],{"__ignoreMap":36},[40,127189,127190,127192],{"class":42,"line":43},[40,127191,2288],{"class":63},[40,127193,2301],{"class":94},[492,127195,127196],{"start":54},[495,127197,127198,2261,127200,127204,127218],{},[409,127199,2308],{},[492,127201,127202],{},[495,127203,2313],{},[31,127205,127206],{"className":587,"code":2316,"language":589,"meta":36,"style":36},[26,127207,127208],{"__ignoreMap":36},[40,127209,127210,127212,127214,127216],{"class":42,"line":43},[40,127211,2323],{"class":596},[40,127213,2326],{"class":63},[40,127215,2329],{"class":94},[40,127217,2332],{"class":63},[492,127219,127220],{"start":70},[495,127221,2337,127222,2341],{},[26,127223,2340],{},[1338,127225,127226],{},[495,127227,2346],{},[31,127229,127230],{"className":515,"code":2349,"language":517,"meta":518,"style":36},[26,127231,127232],{"__ignoreMap":36},[40,127233,127234],{"class":42,"line":43},[40,127235,2349],{},[1338,127237,127238],{},[495,127239,2360],{},[19,127241,127242],{},[409,127243,2365],{},[492,127245,127246],{},[495,127247,127248,2261,127250,127254],{},[409,127249,2372],{},[492,127251,127252],{},[495,127253,2377],{},[31,127255,127256],{"className":2380,"code":2381,"language":2382,"meta":36,"style":36},[26,127257,127258],{"__ignoreMap":36},[40,127259,127260,127262],{"class":42,"line":43},[40,127261,2389],{"class":50},[40,127263,2392],{"class":997},[1338,127265,127266],{},[495,127267,2397,127268,2401],{},[26,127269,2400],{},[14,127271,2405],{"id":2404},[402,127273,2409],{"id":2408},[19,127275,127276],{},[438,127277],{"alt":36,"src":2414},[19,127279,2417],{},[402,127281,2421],{"id":2420},[2423,127283,2426],{"id":2425},[19,127285,127286],{},[409,127287,2431],{},[19,127289,2434],{},[19,127291,127292],{},[409,127293,2439],{},[19,127295,2442],{},[19,127297,127298],{},[409,127299,2447],{},[19,127301,2450],{},[19,127303,127304],{},[409,127305,2455],{},[19,127307,2458],{},[2423,127309,2462],{"id":2461},[19,127311,127312],{},[409,127313,2467],{},[19,127315,2470],{},[19,127317,127318],{},[409,127319,2475],{},[19,127321,2478],{},[2423,127323,2482],{"id":2481},[19,127325,127326],{},[409,127327,2487],{},[19,127329,2490],{},[19,127331,127332],{},[409,127333,2495],{},[19,127335,2498],{},[19,127337,127338],{},[409,127339,2503],{},[19,127341,2506],{},[2423,127343,2510],{"id":2509},[19,127345,127346],{},[409,127347,2515],{},[19,127349,2518],{},[19,127351,127352],{},[409,127353,2523],{},[19,127355,2526],{},[19,127357,127358],{},[409,127359,2531],{},[19,127361,2534],{},[2423,127363,2538],{"id":2537},[19,127365,127366],{},[409,127367,2543],{},[19,127369,2546],{},[19,127371,127372,2261],{},[409,127373,2551],{},[19,127375,2554],{},[19,127377,127378,2261],{},[409,127379,2559],{},[19,127381,2562],{},[19,127383,127384],{},[409,127385,2567],{},[19,127387,2570],{},[19,127389,127390],{},[409,127391,2575],{},[19,127393,2578],{},[19,127395,127396],{},[409,127397,2583],{},[19,127399,2586],{},[2423,127401,2590],{"id":2589},[19,127403,127404],{},[409,127405,2595],{},[19,127407,2598],{},[19,127409,127410],{},[409,127411,2603],{},[19,127413,2606,127414,2610],{},[409,127415,2609],{},[2423,127417,2614],{"id":2613},[19,127419,127420],{},[409,127421,2619],{},[19,127423,2622],{},[19,127425,127426],{},[409,127427,2627],{},[19,127429,2630],{},[402,127431,2634],{"id":2633},[19,127433,127434],{},[438,127435],{"alt":36,"src":2639},[19,127437,2642],{},[19,127439,2645],{},[19,127441,2648],{},[19,127443,2651],{},[19,127445,2654],{},[402,127447,2658],{"id":2657},[19,127449,2661],{},[31,127451,127452],{"className":587,"code":2664,"language":589,"meta":36,"style":36},[26,127453,127454],{"__ignoreMap":36},[40,127455,127456,127458],{"class":42,"line":43},[40,127457,2671],{"class":596},[40,127459,2674],{"class":63},[19,127461,127462],{},[438,127463],{"alt":36,"src":2679},[19,127465,127466],{},[438,127467],{"alt":36,"src":2684},[31,127469,127470],{"className":587,"code":2687,"language":589,"meta":36,"style":36},[26,127471,127472,127482],{"__ignoreMap":36},[40,127473,127474,127476,127478,127480],{"class":42,"line":43},[40,127475,2694],{"class":596},[40,127477,2697],{"class":94},[40,127479,2700],{"class":94},[40,127481,67],{"class":50},[40,127483,127484],{"class":42,"line":54},[40,127485,2707],{"class":596},[19,127487,127488],{},[438,127489],{"alt":36,"src":2712},[19,127491,127492],{},[438,127493],{"alt":36,"src":2717},[19,127495,2720,127496,2724],{},[26,127497,2723],{},[402,127499,2728],{"id":2727},[19,127501,127502],{},[438,127503],{"alt":36,"src":2733},[19,127505,2736],{},[19,127507,2739],{},[19,127509,127510],{},[409,127511,2744],{},[19,127513,2747],{},[19,127515,2750],{},[19,127517,2753],{},[19,127519,2756],{},[19,127521,2759],{},[19,127523,2762],{},[19,127525,2765],{},[19,127527,2768],{},[19,127529,2771],{},[19,127531,2774],{},[19,127533,2777],{},[19,127535,2780],{},[19,127537,127538,2786],{},[2784,127539],{},[19,127541,127542,2792],{},[2790,127543],{},[19,127545,127546,2797],{},[2790,127547],{},[19,127549,127550],{},[409,127551,2802],{},[19,127553,127554],{},[438,127555],{"alt":36,"src":2807},[19,127557,127558],{},[409,127559,2812],{},[19,127561,127562],{},[438,127563],{"alt":36,"src":2817},[19,127565,2820],{},[402,127567,2824],{"id":2823},[19,127569,2827],{},[402,127571,2831],{"id":2830},[19,127573,127574],{},[438,127575],{"alt":36,"src":2836},[19,127577,127578],{},[438,127579],{"alt":36,"src":2841},[19,127581,127582],{},[438,127583],{"alt":36,"src":2846},[19,127585,127586],{},[438,127587],{"alt":36,"src":2851},[402,127589,2855],{"id":2854},[19,127591,127592],{},[2106,127593,2860],{"href":2860,"rel":127594},[2110],[492,127596,127597,127599],{},[495,127598,2866],{},[495,127600,2869],{},[19,127602,127603],{},[438,127604],{"alt":36,"src":2874},[19,127606,2877],{},[19,127608,127609],{},[438,127610],{"alt":36,"src":2882},[31,127612,127613],{"className":515,"code":2885,"language":517,"meta":518,"style":36},[26,127614,127615,127619],{"__ignoreMap":36},[40,127616,127617],{"class":42,"line":43},[40,127618,2892],{},[40,127620,127621],{"class":42,"line":54},[40,127622,2897],{},[19,127624,2900],{},[19,127626,127627],{},[409,127628,2905],{},[1338,127630,127631,127637],{},[495,127632,2910,127633,2917],{},[409,127634,127635,2916],{},[26,127636,2915],{},[495,127638,127639,2922,127641],{},[26,127640,2915],{},[1338,127642,127643,127645,127647,127649,127651],{},[495,127644,2927],{},[495,127646,2930],{},[495,127648,2933],{},[495,127650,2936],{},[495,127652,2939],{},[31,127654,127655],{"className":515,"code":2942,"language":517,"meta":518,"style":36},[26,127656,127657,127661],{"__ignoreMap":36},[40,127658,127659],{"class":42,"line":43},[40,127660,2949],{},[40,127662,127663],{"class":42,"line":54},[40,127664,2954],{},[19,127666,2957],{},[31,127668,127669],{"className":515,"code":2960,"language":517,"meta":518,"style":36},[26,127670,127671,127675,127679,127683,127687,127691,127695,127699,127703,127707],{"__ignoreMap":36},[40,127672,127673],{"class":42,"line":43},[40,127674,2967],{},[40,127676,127677],{"class":42,"line":54},[40,127678,2972],{},[40,127680,127681],{"class":42,"line":70},[40,127682,2977],{},[40,127684,127685],{"class":42,"line":78},[40,127686,2982],{},[40,127688,127689],{"class":42,"line":86},[40,127690,2987],{},[40,127692,127693],{"class":42,"line":100},[40,127694,2992],{},[40,127696,127697],{"class":42,"line":108},[40,127698,2997],{},[40,127700,127701],{"class":42,"line":121},[40,127702,3002],{},[40,127704,127705],{"class":42,"line":134},[40,127706,3007],{},[40,127708,127709],{"class":42,"line":146},[40,127710,3012],{},[1338,127712,127713,127717,127721,127725],{},[495,127714,127715,3020],{},[26,127716,3019],{},[495,127718,127719,3026],{},[26,127720,3025],{},[495,127722,127723,3032],{},[26,127724,3031],{},[495,127726,127727,3038],{},[26,127728,3037],{},[3040,127730,127731],{},[19,127732,3044,127733,3047,127735],{},[26,127734,2915],{},[409,127736,3050],{},[19,127738,3053],{},[31,127740,127741],{"className":515,"code":3056,"language":517,"meta":518,"style":36},[26,127742,127743],{"__ignoreMap":36},[40,127744,127745],{"class":42,"line":43},[40,127746,3056],{},[19,127748,3065],{},[31,127750,127751],{"className":515,"code":3068,"language":517,"meta":518,"style":36},[26,127752,127753,127757],{"__ignoreMap":36},[40,127754,127755],{"class":42,"line":43},[40,127756,3075],{},[40,127758,127759],{"class":42,"line":54},[40,127760,3080],{},[492,127762,127763],{"start":70},[495,127764,3085],{},[19,127766,3088],{},[19,127768,127769],{},[2106,127770,3093],{"href":3093,"rel":127771},[2110],[19,127773,127774],{},[438,127775],{"alt":36,"src":3099},[19,127777,3102],{},[19,127779,127780],{},[438,127781],{"alt":36,"src":3107},[19,127783,3110],{},[19,127785,127786],{},[438,127787],{"alt":36,"src":3115},[19,127789,127790],{},[438,127791],{"alt":36,"src":3120},[19,127793,3123,127794,3127],{},[26,127795,3126],{},[19,127797,3130],{},[31,127799,127800],{"className":515,"code":3133,"language":517,"meta":518,"style":36},[26,127801,127802,127806],{"__ignoreMap":36},[40,127803,127804],{"class":42,"line":43},[40,127805,3140],{},[40,127807,127808],{"class":42,"line":54},[40,127809,3145],{},[19,127811,3148],{},[31,127813,127814],{"className":587,"code":3151,"language":589,"meta":36,"style":36},[26,127815,127816,127822,127828,127834],{"__ignoreMap":36},[40,127817,127818,127820],{"class":42,"line":43},[40,127819,2288],{"class":63},[40,127821,3160],{"class":94},[40,127823,127824,127826],{"class":42,"line":54},[40,127825,3165],{"class":596},[40,127827,3168],{"class":94},[40,127829,127830,127832],{"class":42,"line":70},[40,127831,2200],{"class":596},[40,127833,3168],{"class":94},[40,127835,127836,127838,127840,127842],{"class":42,"line":78},[40,127837,923],{"class":596},[40,127839,3181],{"class":94},[40,127841,1042],{"class":94},[40,127843,3168],{"class":94},[19,127845,127846,3190],{},[26,127847,3165],{},[1338,127849,127850,127852],{},[495,127851,3195],{},[495,127853,3198],{},[31,127855,127856],{"className":515,"code":3201,"language":517,"meta":518,"style":36},[26,127857,127858,127862,127866,127870,127874,127878,127882],{"__ignoreMap":36},[40,127859,127860],{"class":42,"line":43},[40,127861,2967],{},[40,127863,127864],{"class":42,"line":54},[40,127865,3212],{},[40,127867,127868],{"class":42,"line":70},[40,127869,3217],{},[40,127871,127872],{"class":42,"line":78},[40,127873,3222],{},[40,127875,127876],{"class":42,"line":86},[40,127877,2977],{},[40,127879,127880],{"class":42,"line":100},[40,127881,3231],{},[40,127883,127884],{"class":42,"line":108},[40,127885,3236],{},[19,127887,3239],{},[19,127889,3242],{},[19,127891,127892],{},[438,127893],{"alt":36,"src":3247},[19,127895,3250],{},[19,127897,127898],{},[438,127899],{"alt":36,"src":3255},[19,127901,3258,127902,3262,127904,3266],{},[26,127903,3261],{},[26,127905,3265],{},[31,127907,127908],{"className":515,"code":3269,"language":517,"meta":518,"style":36},[26,127909,127910,127914,127918,127922,127926,127930,127934],{"__ignoreMap":36},[40,127911,127912],{"class":42,"line":43},[40,127913,2967],{},[40,127915,127916],{"class":42,"line":54},[40,127917,3212],{},[40,127919,127920],{"class":42,"line":70},[40,127921,3284],{},[40,127923,127924],{"class":42,"line":78},[40,127925,3222],{},[40,127927,127928],{"class":42,"line":86},[40,127929,2977],{},[40,127931,127932],{"class":42,"line":100},[40,127933,3231],{},[40,127935,127936],{"class":42,"line":108},[40,127937,3236],{},[19,127939,127940],{},[438,127941],{"alt":36,"src":3305},[19,127943,3308],{},[31,127945,127946],{"className":515,"code":3311,"language":517,"meta":518,"style":36},[26,127947,127948],{"__ignoreMap":36},[40,127949,127950],{"class":42,"line":43},[40,127951,3311],{},[492,127953,127954],{"start":78},[495,127955,3322],{},[19,127957,127958],{},[2106,127959,3327],{"href":3327,"rel":127960},[2110],[19,127962,3331],{},[19,127964,127965],{},[438,127966],{"alt":36,"src":3336},[31,127968,127969],{"className":515,"code":3339,"language":517,"meta":518,"style":36},[26,127970,127971],{"__ignoreMap":36},[40,127972,127973],{"class":42,"line":43},[40,127974,3339],{},[19,127976,127977],{},[438,127978],{"alt":36,"src":3350},[19,127980,3353],{},[19,127982,3356],{},[19,127984,127985],{},[438,127986],{"alt":36,"src":3361},[31,127988,127989],{"className":515,"code":3339,"language":517,"meta":518,"style":36},[26,127990,127991],{"__ignoreMap":36},[40,127992,127993],{"class":42,"line":43},[40,127994,3339],{},[19,127996,3372],{},[19,127998,127999],{},[438,128000],{"alt":36,"src":3377},[19,128002,128003],{},[438,128004],{"alt":36,"src":3382},[3384,128006,3386],{},{"title":36,"searchDepth":54,"depth":54,"links":128008},[128009,128010,128015,128016,128022,128023],{"id":16,"depth":54,"text":17},{"id":399,"depth":54,"text":400,"children":128011},[128012,128013,128014],{"id":404,"depth":70,"text":405},{"id":473,"depth":70,"text":474},{"id":744,"depth":70,"text":745},{"id":898,"depth":54,"text":899},{"id":1143,"depth":54,"text":1144,"children":128017},[128018,128019,128020,128021],{"id":1199,"depth":70,"text":1200},{"id":1497,"depth":70,"text":1498},{"id":1769,"depth":70,"text":1770},{"id":2031,"depth":70,"text":2032},{"id":2091,"depth":54,"text":2092},{"id":2404,"depth":54,"text":2405,"children":128024},[128025,128026,128027,128028,128029,128030,128031,128032],{"id":2408,"depth":70,"text":2409},{"id":2420,"depth":70,"text":2421},{"id":2633,"depth":70,"text":2634},{"id":2657,"depth":70,"text":2658},{"id":2727,"depth":70,"text":2728},{"id":2823,"depth":70,"text":2824},{"id":2830,"depth":70,"text":2831},{"id":2854,"depth":70,"text":2855},{},{"title":5,"description":3413},{"id":128036,"title":128037,"body":128038,"description":3413,"extension":3414,"meta":128042,"navigation":1412,"path":128043,"seo":128044,"stem":128045,"__hash__":128046},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":128039,"toc":128040},[],{"title":36,"searchDepth":54,"depth":54,"links":128041},[],{"category":33564},"\u002Fwiki\u002F2025-01-27-linux",{"title":128037,"description":3413},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":128048,"title":128049,"body":128050,"description":128054,"extension":3414,"meta":128445,"navigation":1412,"path":128446,"seo":128447,"stem":128448,"__hash__":128449},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":128051,"toc":128443},[128052,128055,128059,128076,128079,128132,128136,128138,128178,128187,128191,128194,128435,128440],[19,128053,128054],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,128056,128058],{"id":128057},"_1ubuntu环境配置","1.Ubuntu环境配置",[492,128060,128061,128064,128067,128070,128073],{},[495,128062,128063],{},"ubuntu环境换源",[495,128065,128066],{},"安装cuda",[495,128068,128069],{},"安装miniconda",[495,128071,128072],{},"安装pytorch",[495,128074,128075],{},"安装genesis",[19,128077,128078],{},"参考链接：",[31,128080,128082],{"className":27141,"code":128081,"language":27143,"meta":36,"style":36},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[26,128083,128084],{"__ignoreMap":36},[40,128085,128086,128089,128092,128095,128097,128100,128103,128105,128108,128111,128113,128116,128119,128121,128124,128127,128129],{"class":42,"line":43},[40,128087,128088],{"class":596},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[40,128090,128091],{"class":94},"=blogdetail",[40,128093,128094],{"class":50},"&sharetype",[40,128096,1284],{"class":1283},[40,128098,128099],{"class":94},"blogdetail",[40,128101,128102],{"class":50},"&sharerId",[40,128104,1284],{"class":1283},[40,128106,128107],{"class":94},"144728092",[40,128109,128110],{"class":50},"&sharerefer",[40,128112,1284],{"class":1283},[40,128114,128115],{"class":94},"PC",[40,128117,128118],{"class":50},"&sharesource",[40,128120,1284],{"class":1283},[40,128122,128123],{"class":94},"qq_69379513",[40,128125,128126],{"class":50},"&sharefrom",[40,128128,1284],{"class":1283},[40,128130,128131],{"class":94},"from_link\n",[10,128133,128135],{"id":128134},"_2genesis-报错issue","2.Genesis 报错issue",[19,128137,128078],{},[31,128139,128140],{"className":27141,"code":128081,"language":27143,"meta":36,"style":36},[26,128141,128142],{"__ignoreMap":36},[40,128143,128144,128146,128148,128150,128152,128154,128156,128158,128160,128162,128164,128166,128168,128170,128172,128174,128176],{"class":42,"line":43},[40,128145,128088],{"class":596},[40,128147,128091],{"class":94},[40,128149,128094],{"class":50},[40,128151,1284],{"class":1283},[40,128153,128099],{"class":94},[40,128155,128102],{"class":50},[40,128157,1284],{"class":1283},[40,128159,128107],{"class":94},[40,128161,128110],{"class":50},[40,128163,1284],{"class":1283},[40,128165,128115],{"class":94},[40,128167,128118],{"class":50},[40,128169,1284],{"class":1283},[40,128171,128123],{"class":94},[40,128173,128126],{"class":50},[40,128175,1284],{"class":1283},[40,128177,128131],{"class":94},[31,128179,128181],{"className":27141,"code":128180,"language":27143,"meta":36,"style":36},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[26,128182,128183],{"__ignoreMap":36},[40,128184,128185],{"class":42,"line":43},[40,128186,128180],{"class":596},[10,128188,128190],{"id":128189},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,128192,128193],{},"hello_robot.py",[31,128195,128197],{"className":33679,"code":128196,"language":2323,"meta":36,"style":36},"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",[26,128198,128199,128205,128220,128224,128236,128248,128252,128265,128269,128288,128298,128308,128322,128326,128330,128335,128339,128349,128356,128370,128377,128387,128392,128396,128414,128419,128423,128430],{"__ignoreMap":36},[40,128200,128201,128203],{"class":42,"line":43},[40,128202,33692],{"class":1283},[40,128204,48605],{"class":50},[40,128206,128207,128210,128213,128215,128217],{"class":42,"line":54},[40,128208,128209],{"class":50},"os.environ[",[40,128211,128212],{"class":94},"'PYOPENGL_PLATFORM'",[40,128214,7766],{"class":50},[40,128216,1284],{"class":1283},[40,128218,128219],{"class":94}," 'glx'\n",[40,128221,128222],{"class":42,"line":70},[40,128223,1413],{"emptyLinePlaceholder":1412},[40,128225,128226,128228,128231,128233],{"class":42,"line":78},[40,128227,33692],{"class":1283},[40,128229,128230],{"class":50}," genesis ",[40,128232,34683],{"class":1283},[40,128234,128235],{"class":50}," gs\n",[40,128237,128238,128240,128243,128245],{"class":42,"line":86},[40,128239,34037],{"class":1283},[40,128241,128242],{"class":50}," pynput ",[40,128244,33692],{"class":1283},[40,128246,128247],{"class":50}," keyboard\n",[40,128249,128250],{"class":42,"line":100},[40,128251,1413],{"emptyLinePlaceholder":1412},[40,128253,128254,128257,128260,128262],{"class":42,"line":108},[40,128255,128256],{"class":50},"gs.init(",[40,128258,128259],{"class":8539},"backend",[40,128261,1284],{"class":1283},[40,128263,128264],{"class":50},"gs.gpu)\n",[40,128266,128267],{"class":42,"line":121},[40,128268,1413],{"emptyLinePlaceholder":1412},[40,128270,128271,128274,128276,128279,128282,128284,128286],{"class":42,"line":134},[40,128272,128273],{"class":50},"scene ",[40,128275,1284],{"class":1283},[40,128277,128278],{"class":50}," gs.Scene(",[40,128280,128281],{"class":8539},"show_viewer",[40,128283,1284],{"class":1283},[40,128285,34776],{"class":63},[40,128287,1811],{"class":50},[40,128289,128290,128293,128295],{"class":42,"line":146},[40,128291,128292],{"class":50},"plane ",[40,128294,1284],{"class":1283},[40,128296,128297],{"class":50}," scene.add_entity(gs.morphs.Plane())\n",[40,128299,128300,128303,128305],{"class":42,"line":154},[40,128301,128302],{"class":50},"franka ",[40,128304,1284],{"class":1283},[40,128306,128307],{"class":50}," scene.add_entity(\n",[40,128309,128310,128313,128315,128317,128320],{"class":42,"line":162},[40,128311,128312],{"class":50},"    gs.morphs.MJCF(",[40,128314,48654],{"class":8539},[40,128316,1284],{"class":1283},[40,128318,128319],{"class":94},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[40,128321,41347],{"class":50},[40,128323,128324],{"class":42,"line":170},[40,128325,1811],{"class":50},[40,128327,128328],{"class":42,"line":183},[40,128329,1413],{"emptyLinePlaceholder":1412},[40,128331,128332],{"class":42,"line":196},[40,128333,128334],{"class":50},"scene.build()\n",[40,128336,128337],{"class":42,"line":204},[40,128338,1413],{"emptyLinePlaceholder":1412},[40,128340,128341,128343,128346],{"class":42,"line":217},[40,128342,35247],{"class":1283},[40,128344,128345],{"class":596}," on_press",[40,128347,128348],{"class":50},"(key):\n",[40,128350,128351,128354],{"class":42,"line":230},[40,128352,128353],{"class":1283},"    try",[40,128355,332],{"class":50},[40,128357,128358,128360,128363,128365,128368],{"class":42,"line":238},[40,128359,5822],{"class":1283},[40,128361,128362],{"class":50}," key.char ",[40,128364,6273],{"class":1283},[40,128366,128367],{"class":94}," 'q'",[40,128369,332],{"class":50},[40,128371,128372,128374],{"class":42,"line":251},[40,128373,19054],{"class":1283},[40,128375,128376],{"class":63}," False\n",[40,128378,128379,128382,128385],{"class":42,"line":264},[40,128380,128381],{"class":1283},"    except",[40,128383,128384],{"class":63}," AttributeError",[40,128386,332],{"class":50},[40,128388,128389],{"class":42,"line":277},[40,128390,128391],{"class":1283},"        pass\n",[40,128393,128394],{"class":42,"line":290},[40,128395,1413],{"emptyLinePlaceholder":1412},[40,128397,128398,128401,128403,128406,128409,128411],{"class":42,"line":298},[40,128399,128400],{"class":50},"listener ",[40,128402,1284],{"class":1283},[40,128404,128405],{"class":50}," keyboard.Listener(",[40,128407,128408],{"class":8539},"on_press",[40,128410,1284],{"class":1283},[40,128412,128413],{"class":50},"on_press)\n",[40,128415,128416],{"class":42,"line":310},[40,128417,128418],{"class":50},"listener.start()\n",[40,128420,128421],{"class":42,"line":5086},[40,128422,1413],{"emptyLinePlaceholder":1412},[40,128424,128425,128427],{"class":42,"line":5091},[40,128426,111954],{"class":1283},[40,128428,128429],{"class":50}," listener.running:\n",[40,128431,128432],{"class":42,"line":5105},[40,128433,128434],{"class":50},"    scene.step()\n",[19,128436,128437],{},[438,128438],{"alt":36,"src":128439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[3384,128441,128442],{},"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":36,"searchDepth":54,"depth":54,"links":128444},[],{"category":26698},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":128049,"description":128054},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":128451,"title":128452,"body":128453,"description":3413,"extension":3414,"meta":128468,"navigation":1412,"path":128469,"seo":128470,"stem":128471,"__hash__":128472},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":128454,"toc":128465},[128455,128458,128462],[10,128456,128452],{"id":128457},"_1-基础知识",[14,128459,128461],{"id":128460},"_11-js的组成","1.1 js的组成",[19,128463,128464],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":36,"searchDepth":54,"depth":54,"links":128466},[128467],{"id":128460,"depth":54,"text":128461},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":128452,"description":3413},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":128474,"title":128475,"body":128476,"description":3413,"extension":3414,"meta":128615,"navigation":1412,"path":128616,"seo":128617,"stem":128618,"__hash__":128619},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":128477,"toc":128603},[128478,128481,128485,128488,128492,128502,128506,128509,128512,128515,128519,128526,128532,128536,128542,128553,128557,128560,128564,128567,128571,128574,128578,128581,128585,128588,128591,128594,128597,128600],[10,128479,128475],{"id":128480},"_2-vscode必备内容",[14,128482,128484],{"id":128483},"_21-标签分类","2.1 标签分类",[19,128486,128487],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,128489,128491],{"id":128490},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,128493,128494,128495,128497,128498,128501],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[26,128496,3707],{}," 然后按 ",[26,128499,128500],{},"Tab","，快速自动生成基本结构。",[14,128503,128505],{"id":128504},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,128507,128508],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,128510,128511],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,128513,128514],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,128516,128518],{"id":128517},"_24-视图缩放","2.4 视图缩放",[19,128520,128521,128522,128525],{},"缩放视图 ",[26,128523,128524],{},"ctrl+"," 可实现代码增大。",[19,128527,128528,128531],{},[26,128529,128530],{},"ctrl-"," 可实现代码减小。",[14,128533,128535],{"id":128534},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,128537,128538,128539,776],{},"VSCode 新建文件快捷键为 ",[26,128540,128541],{},"ctrl+N",[19,128543,128544,128545,128548,128549,128552],{},"保存快捷键为 ",[26,128546,128547],{},"ctrl+S","，将文本保存为 ",[26,128550,128551],{},".html"," 文件。",[14,128554,128556],{"id":128555},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,128558,128559],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,128561,128563],{"id":128562},"_27-vscode-icons","2.7 vscode-icons",[19,128565,128566],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,128568,128570],{"id":128569},"_28-easy-less","2.8 Easy LESS",[19,128572,128573],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,128575,128577],{"id":128576},"_29-会了吧插件","2.9 会了吧插件",[19,128579,128580],{},"会了吧插件可以展示代码中英语单词的意思。",[14,128582,128584],{"id":128583},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,128586,128587],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,128589,128590],{},"②选定多个相同的单词:ctrl+D",[19,128592,128593],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,128595,128596],{},"④全局替换某些单词:ctrl+h",[19,128598,128599],{},"⑤快速定位到某一行:ctrl+g",[19,128601,128602],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":36,"searchDepth":54,"depth":54,"links":128604},[128605,128606,128607,128608,128609,128610,128611,128612,128613,128614],{"id":128483,"depth":54,"text":128484},{"id":128490,"depth":54,"text":128491},{"id":128504,"depth":54,"text":128505},{"id":128517,"depth":54,"text":128518},{"id":128534,"depth":54,"text":128535},{"id":128555,"depth":54,"text":128556},{"id":128562,"depth":54,"text":128563},{"id":128569,"depth":54,"text":128570},{"id":128576,"depth":54,"text":128577},{"id":128583,"depth":54,"text":128584},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":128475,"description":3413},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":128621,"title":128622,"body":128623,"description":3413,"extension":3414,"meta":128782,"navigation":1412,"path":128783,"seo":128784,"stem":128785,"__hash__":128786},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":128624,"toc":128774},[128625,128628,128632,128642,128648,128654,128658,128667,128671,128676,128679,128682,128686,128689,128699,128708,128717,128726,128736,128743,128748,128753,128766],[10,128626,128622],{"id":128627},"_3-html文本与容器标签",[14,128629,128631],{"id":128630},"_31-标题标签","3.1 标题标签",[19,128633,128634,128637,128638,128641],{},[26,128635,128636],{},"\u003Ch1>","我是一级标签",[26,128639,128640],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,128643,128644,128637,128646],{},[26,128645,128636],{},[26,128647,128640],{},[19,128649,1248,128650,128653],{},[26,128651,128652],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,128655,128657],{"id":128656},"_32-段落标签","3.2 段落标签",[19,128659,128660,128663,128664],{},[26,128661,128662],{},"\u003Cp>","....",[26,128665,128666],{},"\u003C\u002Fp>",[14,128668,128670],{"id":128669},"_33-换行标签","3.3 换行标签",[19,128672,128673],{},[26,128674,128675],{},"\u003Cbr \u002F>",[19,128677,128678],{},"具有强制换行的作用",[19,128680,128681],{},"单标签",[14,128683,128685],{"id":128684},"_34-文本格式化标签","3.4 文本格式化标签",[19,128687,128688],{},"提供粗体、斜体和下划线等效果",[19,128690,128691,128692,85834,128695,128698],{},"加粗：",[26,128693,128694],{},"\u003Cstrong>...\u003C\u002Fstrong>",[26,128696,128697],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,128700,128701,128702,85834,128705,128698],{},"斜体：",[26,128703,128704],{},"\u003Cem>...\u003C\u002Fem>",[26,128706,128707],{},"\u003Ci>...\u003C\u002Fi>",[19,128709,128710,128711,85834,128714,128698],{},"删除线：",[26,128712,128713],{},"\u003Cdel>...\u003C\u002Fdel>",[26,128715,128716],{},"\u003Cs>...\u003C\u002Fs>",[19,128718,128719,128720,85834,128723,128698],{},"下划线：",[26,128721,128722],{},"\u003Cins>...\u003C\u002Fins>",[26,128724,128725],{},"\u003Cu>...\u003C\u002Fu>",[14,128727,128729,128730,2046,128733,105984],{"id":128728},"_35-div和span标签","3.5 ",[26,128731,128732],{},"\u003Cdiv>",[26,128734,128735],{},"\u003Cspan>",[19,128737,128738,104312,128740,128742],{},[26,128739,128732],{},[26,128741,128735],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,128744,128745],{},[26,128746,128747],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,128749,128750],{},[26,128751,128752],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,128754,128755,128756,128758,128759,128761,128762,128765],{},"两者特点：①",[26,128757,128732],{}," 标签用来布局，但一行通常只放一个 ",[26,128760,128732],{},"。可以理解为一个大盒子，独占一行，在 ",[26,128763,128764],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,128767,80544,128768,128770,128771,128773],{},[26,128769,128735],{}," 标签也可用于布局，一行可以放多个 ",[26,128772,128735],{},"，可理解为小盒子。",{"title":36,"searchDepth":54,"depth":54,"links":128775},[128776,128777,128778,128779,128780],{"id":128630,"depth":54,"text":128631},{"id":128656,"depth":54,"text":128657},{"id":128669,"depth":54,"text":128670},{"id":128684,"depth":54,"text":128685},{"id":128728,"depth":54,"text":128781},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":128622,"description":3413},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":128788,"title":128789,"body":128790,"description":3413,"extension":3414,"meta":128987,"navigation":1412,"path":128988,"seo":128989,"stem":128990,"__hash__":128991},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":128791,"toc":128979},[128792,128795,128799,128802,128808,128815,128821,128827,128830,128833,128836,128839,128842,128845,128848,128852,128855,128858,128861,128867,128873,128879,128886,128890,128896,128902,128905,128908,128914,128920,128926,128929,128932,128936,128939,128949,128955,128959,128968,128972,128975],[10,128793,128789],{"id":128794},"_4-html图像与链接",[14,128796,128798],{"id":128797},"_41-图像标签","4.1 图像标签",[19,128800,128801],{},"（1）标签",[19,128803,128804,128807],{},[26,128805,128806],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,128809,128810,128811,128814],{},"src是",[26,128812,128813],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,128816,128817,128818],{},"alt:文本，替换文本。图像不能显示的文字 ",[26,128819,128820],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,128822,128823,128824],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[26,128825,128826],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,128828,128829],{},"width:像素，设置图像的宽度",[19,128831,128832],{},"height:像素，设置图像的高度",[19,128834,128835],{},"border：像素，设置图像的边框粗细",[19,128837,128838],{},"（2）图像标签属性的注意点：",[19,128840,128841],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,128843,128844],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,128846,128847],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,128849,128851],{"id":128850},"_42-路径注意要点","4.2 路径注意要点：",[19,128853,128854],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,128856,128857],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,128859,128860],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,128862,128863,128864],{},"①同一级路径：图像文件位于HTML文件同一级，如",[26,128865,128866],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,128868,128869,128870],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[26,128871,128872],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,128874,128875,128876],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[26,128877,128878],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,128880,128881,128882,3731],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[2106,128883,128884],{"href":128884,"rel":128885},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[2110],[14,128887,128889],{"id":128888},"_43-超链接标签","4.3 超链接标签",[19,128891,128892,128895],{},[26,128893,128894],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,128897,128898,128899],{},"①语法格式：",[26,128900,128901],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,128903,128904],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,128906,128907],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,128909,128910,128911],{},"③链接分类：外部链接：",[26,128912,128913],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,128915,128916,128917],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[26,128918,128919],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,128921,128922,128923],{},"空链接：如果当时没有确定链接目标时，",[26,128924,128925],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,128927,128928],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,128930,128931],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,128933,128935],{"id":128934},"_44-锚点链接","4.4 锚点链接",[19,128937,128938],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,128940,128941,128942,128945,128946],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[26,128943,128944],{},"\u003Ca href=\"#two\">","第二级",[26,128947,128948],{},"\u003C\u002Fa>",[19,128950,128951,128952],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[26,128953,128954],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,128956,128958],{"id":128957},"_45-注释标签","4.5 注释标签",[19,128960,128961,128964,128965],{},[26,128962,128963],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[26,128966,128967],{},"ctrl+\u002F",[14,128969,128971],{"id":128970},"_46-特殊字符","4.6 特殊字符",[19,128973,128974],{},"可以实现添加多个空格",[438,128976],{"style":128977,"src":128978},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":36,"searchDepth":54,"depth":54,"links":128980},[128981,128982,128983,128984,128985,128986],{"id":128797,"depth":54,"text":128798},{"id":128850,"depth":54,"text":128851},{"id":128888,"depth":54,"text":128889},{"id":128934,"depth":54,"text":128935},{"id":128957,"depth":54,"text":128958},{"id":128970,"depth":54,"text":128971},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":128789,"description":3413},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":128993,"title":128994,"body":128995,"description":3413,"extension":3414,"meta":129288,"navigation":1412,"path":129289,"seo":129290,"stem":129291,"__hash__":129292},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":128996,"toc":129279},[128997,129000,129004,129007,129010,129013,129016,129019,129022,129025,129028,129031,129051,129057,129061,129064,129067,129070,129073,129076,129079,129083,129086,129089,129092,129095,129108,129113,129116,129119,129134,129137,129140,129143,129146,129149,129153,129156,129163,129166,129169,129172,129175,129178,129184,129187,129190,129196,129199,129202,129205,129211,129214,129217,129231,129238,129241,129244,129251,129260,129263,129266,129269,129273,129276],[10,128998,128994],{"id":128999},"_5-html表格列表与表单",[14,129001,129003],{"id":129002},"_51-表格标签","5.1 表格标签",[19,129005,129006],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,129008,129009],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,129011,129012],{},"②表格基本语法：",[438,129014],{"style":128977,"src":129015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,129017,129018],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[438,129020],{"style":128977,"src":129021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,129023,129024],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[438,129026],{"style":128977,"src":129027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,129029,129030],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,129032,129033,129036,129037,129039,129040,129043,129044,129046,129047,129050],{},[26,129034,129035],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[26,129038,129035],{},"内部必须拥有",[26,129041,129042],{},"\u003Ctr>","标签，一般位于第一行，",[26,129045,129035],{},"比",[26,129048,129049],{},"\u003Cth>","范围广",[19,129052,129053,129056],{},[26,129054,129055],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,129058,129060],{"id":129059},"_52-合并单元格","5.2 合并单元格",[19,129062,129063],{},"（1）合并单元格方式：",[19,129065,129066],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,129068,129069],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,129071,129072],{},"（2）目标单元格：",[19,129074,129075],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,129077,129078],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,129080,129082],{"id":129081},"_53-列表标签","5.3 列表标签",[19,129084,129085],{},"（1）分类：无序列表、有序列表、自定义列表",[19,129087,129088],{},"①无序列表：",[438,129090],{"style":128977,"src":129091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,129093,129094],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,129096,129097,129100,129101,129104,129105,129107],{},[26,129098,129099],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[26,129102,129103],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[26,129106,129099],{},"中输入其他标签或文字是不对的",[19,129109,129110,129112],{},[26,129111,129103],{},"之间相当于一个容器，可以容纳所有元素",[19,129114,129115],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,129117,129118],{},"在css中去除前边的小圆点采用如下代码:",[31,129120,129124],{"className":129121,"code":129122,"language":129123,"meta":36,"style":36},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[26,129125,129126],{"__ignoreMap":36},[40,129127,129128,129131],{"class":42,"line":43},[40,129129,129130],{"class":46},"list-style",[40,129132,129133],{"class":50},": none;\n",[19,129135,129136],{},"②有序列表：",[438,129138],{"style":128977,"src":129139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,129141,129142],{},"③自定义列表：",[438,129144],{"style":128977,"src":129145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[438,129147],{"style":128977,"src":129148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,129150,129152],{"id":129151},"_54-表单标签","5.4 表单标签",[19,129154,129155],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,129157,129158,129159,129162],{},"（1）表单域：包含单元素的区域，",[26,129160,129161],{},"\u003Cform>","标签可以实现信息的收集和传递。",[438,129164],{"style":128977,"src":129165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,129167,129168],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,129170,129171],{},"表单元素提交必须有name属性",[19,129173,129174],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,129176,129177],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,129179,80521,129180,129183],{},[26,129181,129182],{},"\u003Cinput>","输入表单元素",[438,129185],{"style":128977,"src":129186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[438,129188],{"style":128977,"src":129189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,129191,129192,129193],{},"单选按钮：",[26,129194,129195],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[438,129197],{"style":128977,"src":129198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,129200,129201],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[438,129203],{"style":128977,"src":129204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,129206,129207,129210],{},[409,129208,129209],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,129212,129213],{},"②select下拉表单元素：可以节约页面控件",[438,129215],{"style":128977,"src":129216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,129218,129219,17117,129221,129224,129225,129227,129228,129230],{},[409,129220,3516],{},[26,129222,129223],{},"\u003Cselect>","中至少包含一对",[26,129226,106005],{},"；在",[26,129229,106005],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,129232,129233,129234,129237],{},"③",[26,129235,129236],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[438,129239],{"style":128977,"src":129240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,129242,129243],{},"3行20列",[14,129245,129247,129248,105984],{"id":129246},"_55-lable标签","5.5 ",[26,129249,129250],{},"\u003Clable>",[19,129252,129253,129254,129256,129257,129259],{},"它不是表单标签，但常常与表单标签搭配使用，",[26,129255,129250],{},"标签用于绑定一个表单标签，当点击",[26,129258,129250],{},"标签内的文本",[19,129261,129262],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[438,129264],{"style":128977,"src":129265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[438,129267],{"style":128977,"src":129268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,129270,129272],{"id":129271},"_56-实例","5.6 实例",[438,129274],{"style":128977,"src":129275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[3384,129277,129278],{},"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":36,"searchDepth":54,"depth":54,"links":129280},[129281,129282,129283,129284,129285,129287],{"id":129002,"depth":54,"text":129003},{"id":129059,"depth":54,"text":129060},{"id":129081,"depth":54,"text":129082},{"id":129151,"depth":54,"text":129152},{"id":129246,"depth":54,"text":129286},"5.5 \u003Clable>标签",{"id":129271,"depth":54,"text":129272},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":128994,"description":3413},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":129294,"title":129295,"body":129296,"description":3413,"extension":3414,"meta":129845,"navigation":1412,"path":129846,"seo":129847,"stem":129848,"__hash__":129849},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":129297,"toc":129820},[129298,129301,129305,129308,129311,129315,129318,129321,129324,129327,129330,129333,129336,129340,129343,129347,129350,129353,129356,129360,129363,129366,129369,129375,129378,129381,129384,129387,129390,129393,129396,129429,129433,129436,129439,129442,129446,129449,129452,129455,129458,129461,129465,129468,129471,129474,129478,129481,129485,129488,129492,129495,129500,129504,129507,129511,129514,129517,129520,129523,129550,129553,129557,129560,129563,129568,129571,129574,129578,129581,129586,129589,129592,129595,129599,129602,129605,129608,129612,129615,129618,129621,129625,129629,129632,129672,129675,129679,129686,129689,129693,129696,129742,129746,129749,129752,129755,129783,129787,129790,129817],[10,129299,129295],{"id":129300},"_6-css语法与文本样式",[14,129302,129304],{"id":129303},"_61-css语法规范","6.1 css语法规范",[19,129306,129307],{},"由两部分组成，选择器及一条或多条声明",[438,129309],{"style":128977,"src":129310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,129312,129313],{},[409,129314,3516],{},[19,129316,129317],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,129319,129320],{},"②属性与属性值以“键值对”的形式出现",[19,129322,129323],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,129325,129326],{},"④属性和属性值之间用英文“;”分开",[438,129328],{"style":128977,"src":129329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[438,129331],{"style":128977,"src":129332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[438,129334],{"style":128977,"src":129335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,129337,129339],{"id":129338},"_62-css选择器","6.2 css选择器",[19,129341,129342],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[402,129344,129346],{"id":129345},"_621-标签选择器","6.2.1 标签选择器",[19,129348,129349],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,129351,129352],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[438,129354],{"style":128977,"src":129355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[402,129357,129359],{"id":129358},"_622-类选择器","6.2.2 类选择器",[19,129361,129362],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,129364,129365],{},"②样例",[438,129367],{"style":128977,"src":129368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,129370,129371,129372,129374],{},"③ ",[409,129373,129209],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,129376,129377],{},"可以理解为给这个标签起了个名字，来表示；",[19,129379,129380],{},"长名称或词组可以使用横线来为选择器命名；",[19,129382,129383],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,129385,129386],{},"命名要有意义；",[438,129388],{"style":128977,"src":129389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,129391,129392],{},"类选择器也可以指定特殊的元素p.center{}",[19,129394,129395],{},"p.center和.center都对",[31,129397,129399],{"className":129121,"code":129398,"language":129123,"meta":36,"style":36},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[26,129400,129401,129406,129415,129425],{"__ignoreMap":36},[40,129402,129403],{"class":42,"line":43},[40,129404,129405],{"class":997},"\u002F* 类选择器指定特殊元素 *\u002F\n",[40,129407,129408,129410,129413],{"class":42,"line":54},[40,129409,19],{"class":46},[40,129411,129412],{"class":596},".center",[40,129414,18894],{"class":50},[40,129416,129417,129419,129421,129423],{"class":42,"line":70},[40,129418,73822],{"class":63},[40,129420,60],{"class":50},[40,129422,54890],{"class":63},[40,129424,4637],{"class":50},[40,129426,129427],{"class":42,"line":78},[40,129428,4907],{"class":50},[402,129430,129432],{"id":129431},"_623-多类名使用","6.2.3 多类名使用",[19,129434,129435],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[438,129437],{"style":128977,"src":129438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,129440,129441],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[402,129443,129445],{"id":129444},"_624-id选择器","6.2.4 id选择器",[19,129447,129448],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,129450,129451],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[438,129453],{"style":128977,"src":129454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,129456,129457],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,129459,129460],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[402,129462,129464],{"id":129463},"_625-通配符选择器","6.2.5 通配符选择器",[19,129466,129467],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,129469,129470],{},"* {",[19,129472,129473],{},"color=\"red\"}",[402,129475,129477],{"id":129476},"_626-总结","6.2.6 总结",[438,129479],{"style":128977,"src":129480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,129482,129484],{"id":129483},"_63-css字体属性","6.3 css字体属性",[19,129486,129487],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[402,129489,129491],{"id":129490},"_631-字体系列","6.3.1 字体系列",[19,129493,129494],{},"font-family: '宋体';",[19,129496,129497,129499],{},[409,129498,3516],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[402,129501,129503],{"id":129502},"_632-字体大小","6.3.2 字体大小",[19,129505,129506],{},"font-size: 20px",[19,129508,129509,2261],{},[409,129510,129209],{},[19,129512,129513],{},"①px（像素）大小是网页的最常用单位",[19,129515,129516],{},"②谷歌浏览器默认为16px",[19,129518,129519],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,129521,129522],{},"④可以给body指定整个页面的大小：会自动引用",[31,129524,129526],{"className":129121,"code":129525,"language":129123,"meta":36,"style":36},"body {\n  font-size: 16px;\n}\n",[26,129527,129528,129534,129546],{"__ignoreMap":36},[40,129529,129530,129532],{"class":42,"line":43},[40,129531,55098],{"class":46},[40,129533,18894],{"class":50},[40,129535,129536,129538,129540,129542,129544],{"class":42,"line":54},[40,129537,73922],{"class":63},[40,129539,60],{"class":50},[40,129541,4080],{"class":63},[40,129543,54790],{"class":1283},[40,129545,4637],{"class":50},[40,129547,129548],{"class":42,"line":70},[40,129549,4907],{"class":50},[19,129551,129552],{},"⑤标题标签比较特殊，需要单独指定大小",[402,129554,129556],{"id":129555},"_633-字体粗细","6.3.3 字体粗细",[19,129558,129559],{},"font-weight: bold;",[19,129561,129562],{},"font-weight: 100；",[19,129564,129565,129567],{},[409,129566,3516],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,129569,129570],{},"font-weight= 400;",[19,129572,129573],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[402,129575,129577],{"id":129576},"_634-文字样式","6.3.4 文字样式",[19,129579,129580],{},"font-style: normal；",[19,129582,129583,2261],{},[409,129584,129585],{},"属性值",[19,129587,129588],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,129590,129591],{},"②italic：浏览器会显示斜体的字体样式",[438,129593],{"style":128977,"src":129594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[402,129596,129598],{"id":129597},"_635-字体符合属性","6.3.5 字体符合属性",[438,129600],{"style":128977,"src":129601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[438,129603],{"style":128977,"src":129604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,129606,129607],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,129609,129610,2261],{},[409,129611,129209],{},[19,129613,129614],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,129616,129617],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,129619,129620],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,129622,129624],{"id":129623},"_64-css-test文本属性","6.4 css test文本属性",[402,129626,129628],{"id":129627},"_641-文本颜色","6.4.1 文本颜色",[19,129630,129631],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[31,129633,129635],{"className":129121,"code":129634,"language":129123,"meta":36,"style":36},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[26,129636,129637,129642,129648,129658,129663,129668],{"__ignoreMap":36},[40,129638,129639],{"class":42,"line":43},[40,129640,129641],{"class":997},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[40,129643,129644,129646],{"class":42,"line":54},[40,129645,19],{"class":46},[40,129647,18894],{"class":50},[40,129649,129650,129652,129654,129656],{"class":42,"line":70},[40,129651,74201],{"class":63},[40,129653,60],{"class":50},[40,129655,60719],{"class":63},[40,129657,4637],{"class":50},[40,129659,129660],{"class":42,"line":78},[40,129661,129662],{"class":997},"  \u002F* color: #ff0000; *\u002F\n",[40,129664,129665],{"class":42,"line":86},[40,129666,129667],{"class":997},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[40,129669,129670],{"class":42,"line":100},[40,129671,4907],{"class":50},[438,129673],{"style":128977,"src":129674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[402,129676,129678],{"id":129677},"_642-对齐文本","6.4.2 对齐文本",[19,129680,129681,129682,129685],{},"text-align属于用于设置元素内文本内容的 ",[409,129683,129684],{},"水平对齐"," 方式",[19,129687,129688],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[402,129690,129692],{"id":129691},"_643-装饰文本","6.4.3 装饰文本",[19,129694,129695],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[31,129697,129699],{"className":129121,"code":129698,"language":129123,"meta":36,"style":36},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[26,129700,129701,129707,129717,129721,129727,129738],{"__ignoreMap":36},[40,129702,129703,129705],{"class":42,"line":43},[40,129704,2106],{"class":46},[40,129706,18894],{"class":50},[40,129708,129709,129711,129713,129715],{"class":42,"line":54},[40,129710,73798],{"class":63},[40,129712,60],{"class":50},[40,129714,58035],{"class":63},[40,129716,4637],{"class":50},[40,129718,129719],{"class":42,"line":70},[40,129720,4907],{"class":50},[40,129722,129723,129725],{"class":42,"line":78},[40,129724,19],{"class":46},[40,129726,18894],{"class":50},[40,129728,129729,129731,129733,129736],{"class":42,"line":86},[40,129730,73798],{"class":63},[40,129732,60],{"class":50},[40,129734,129735],{"class":63},"underline",[40,129737,4637],{"class":50},[40,129739,129740],{"class":42,"line":100},[40,129741,4907],{"class":50},[402,129743,129745],{"id":129744},"_644-文本缩进","6.4.4 文本缩进",[19,129747,129748],{},"实现文本的第一行首行缩进自己指定的距离",[19,129750,129751],{},"20px往右边走；-20px往左边走",[19,129753,129754],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[31,129756,129758],{"className":129121,"code":129757,"language":129123,"meta":36,"style":36},"p {\n  text-indent: 2em;\n}\n",[26,129759,129760,129766,129779],{"__ignoreMap":36},[40,129761,129762,129764],{"class":42,"line":43},[40,129763,19],{"class":46},[40,129765,18894],{"class":50},[40,129767,129768,129771,129773,129775,129777],{"class":42,"line":54},[40,129769,129770],{"class":63},"  text-indent",[40,129772,60],{"class":50},[40,129774,64],{"class":63},[40,129776,1356],{"class":1283},[40,129778,4637],{"class":50},[40,129780,129781],{"class":42,"line":70},[40,129782,4907],{"class":50},[402,129784,129786],{"id":129785},"_645-行间距","6.4.5 行间距",[19,129788,129789],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[31,129791,129793],{"className":129121,"code":129792,"language":129123,"meta":36,"style":36},"p {\n  line-height: 1.6;\n}\n",[26,129794,129795,129801,129813],{"__ignoreMap":36},[40,129796,129797,129799],{"class":42,"line":43},[40,129798,19],{"class":46},[40,129800,18894],{"class":50},[40,129802,129803,129806,129808,129811],{"class":42,"line":54},[40,129804,129805],{"class":63},"  line-height",[40,129807,60],{"class":50},[40,129809,129810],{"class":63},"1.6",[40,129812,4637],{"class":50},[40,129814,129815],{"class":42,"line":70},[40,129816,4907],{"class":50},[3384,129818,129819],{},"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":36,"searchDepth":54,"depth":54,"links":129821},[129822,129823,129831,129838],{"id":129303,"depth":54,"text":129304},{"id":129338,"depth":54,"text":129339,"children":129824},[129825,129826,129827,129828,129829,129830],{"id":129345,"depth":70,"text":129346},{"id":129358,"depth":70,"text":129359},{"id":129431,"depth":70,"text":129432},{"id":129444,"depth":70,"text":129445},{"id":129463,"depth":70,"text":129464},{"id":129476,"depth":70,"text":129477},{"id":129483,"depth":54,"text":129484,"children":129832},[129833,129834,129835,129836,129837],{"id":129490,"depth":70,"text":129491},{"id":129502,"depth":70,"text":129503},{"id":129555,"depth":70,"text":129556},{"id":129576,"depth":70,"text":129577},{"id":129597,"depth":70,"text":129598},{"id":129623,"depth":54,"text":129624,"children":129839},[129840,129841,129842,129843,129844],{"id":129627,"depth":70,"text":129628},{"id":129677,"depth":70,"text":129678},{"id":129691,"depth":70,"text":129692},{"id":129744,"depth":70,"text":129745},{"id":129785,"depth":70,"text":129786},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":129295,"description":3413},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":129851,"title":129852,"body":129853,"description":3413,"extension":3414,"meta":130502,"navigation":1412,"path":130503,"seo":130504,"stem":130505,"__hash__":130506},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":129854,"toc":130483},[129855,129858,129862,129866,129926,129930,129940,129943,129946,129950,129975,129979,129982,129985,129988,129991,129994,129998,130001,130004,130046,130049,130075,130081,130084,130088,130092,130098,130101,130104,130107,130110,130113,130116,130161,130165,130168,130171,130175,130179,130208,130211,130216,130219,130222,130225,130228,130232,130236,130239,130241,130244,130248,130251,130255,130258,130261,130264,130268,130272,130278,130288,130291,130294,130297,130300,130303,130426,130434,130442,130480],[10,129856,129852],{"id":129857},"_7-css引入方式与选择器进阶",[14,129859,129861],{"id":129860},"_71-css引入方式","7.1 css引入方式",[402,129863,129865],{"id":129864},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[31,129867,129871],{"className":129868,"code":129869,"language":129870,"meta":36,"style":36},"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",[26,129872,129873,129881,129888,129900,129913,129918],{"__ignoreMap":36},[40,129874,129875,129877,129879],{"class":42,"line":43},[40,129876,4387],{"class":50},[40,129878,3384],{"class":46},[40,129880,54606],{"class":50},[40,129882,129883,129886],{"class":42,"line":54},[40,129884,129885],{"class":46},"  h1",[40,129887,18894],{"class":50},[40,129889,129890,129893,129895,129898],{"class":42,"line":70},[40,129891,129892],{"class":63},"    color",[40,129894,60],{"class":50},[40,129896,129897],{"class":63},"blue",[40,129899,4637],{"class":50},[40,129901,129902,129905,129907,129909,129911],{"class":42,"line":78},[40,129903,129904],{"class":63},"    font-size",[40,129906,60],{"class":50},[40,129908,4277],{"class":63},[40,129910,54790],{"class":1283},[40,129912,4637],{"class":50},[40,129914,129915],{"class":42,"line":86},[40,129916,129917],{"class":50},"  }\n",[40,129919,129920,129922,129924],{"class":42,"line":100},[40,129921,55083],{"class":50},[40,129923,3384],{"class":46},[40,129925,54606],{"class":50},[19,129927,129928,2261],{},[409,129929,129209],{},[19,129931,80521,129932,129935,129936,129939],{},[26,129933,129934],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[26,129937,129938],{},"\u003Chead>","标签中",[19,129941,129942],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,129944,129945],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[402,129947,129949],{"id":129948},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[31,129951,129953],{"className":129868,"code":129952,"language":129870,"meta":36,"style":36},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[26,129954,129955],{"__ignoreMap":36},[40,129956,129957,129959,129961,129963,129965,129968,129971,129973],{"class":42,"line":43},[40,129958,4387],{"class":50},[40,129960,19],{"class":46},[40,129962,65924],{"class":596},[40,129964,1284],{"class":50},[40,129966,129967],{"class":94},"\"color: red; font-size: 16px;\"",[40,129969,129970],{"class":50},">这是一个段落\u003C\u002F",[40,129972,19],{"class":46},[40,129974,54606],{"class":50},[19,129976,129977,2261],{},[409,129978,129209],{},[19,129980,129981],{},"①style其实就是标签的属性",[19,129983,129984],{},"②在双引号中间，写法要符合css规范",[19,129986,129987],{},"③可以控制当前的标签设置样式",[19,129989,129990],{},"④书写繁琐，简单时才用",[19,129992,129993],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[402,129995,129997],{"id":129996},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,129999,130000],{},"使用最多，单独建一个css文件，然后html引用",[19,130002,130003],{},"①css文件部分： style.css",[31,130005,130007],{"className":129121,"code":130006,"language":129123,"meta":36,"style":36},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[26,130008,130009,130014,130020,130030,130042],{"__ignoreMap":36},[40,130010,130011],{"class":42,"line":43},[40,130012,130013],{"class":997},"\u002F* style.css *\u002F\n",[40,130015,130016,130018],{"class":42,"line":54},[40,130017,10],{"class":46},[40,130019,18894],{"class":50},[40,130021,130022,130024,130026,130028],{"class":42,"line":70},[40,130023,74201],{"class":63},[40,130025,60],{"class":50},[40,130027,129897],{"class":63},[40,130029,4637],{"class":50},[40,130031,130032,130034,130036,130038,130040],{"class":42,"line":78},[40,130033,73922],{"class":63},[40,130035,60],{"class":50},[40,130037,4277],{"class":63},[40,130039,54790],{"class":1283},[40,130041,4637],{"class":50},[40,130043,130044],{"class":42,"line":86},[40,130045,4907],{"class":50},[19,130047,130048],{},"②html部分",[31,130050,130052],{"className":129868,"code":130051,"language":129870,"meta":36,"style":36},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[26,130053,130054],{"__ignoreMap":36},[40,130055,130056,130058,130060,130062,130064,130066,130068,130070,130073],{"class":42,"line":43},[40,130057,4387],{"class":50},[40,130059,72303],{"class":46},[40,130061,72306],{"class":596},[40,130063,1284],{"class":50},[40,130065,72311],{"class":94},[40,130067,64355],{"class":596},[40,130069,1284],{"class":50},[40,130071,130072],{"class":94},"\"style.css\"",[40,130074,54606],{"class":50},[19,130076,130077,130080],{},[26,130078,130079],{},"\u003Chr>","水平线标签（但是不常用！）",[19,130082,130083],{},"ctrl+0回到页面原来大小",[14,130085,130087],{"id":130086},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[402,130089,130091],{"id":130090},"_721-快速生成html","7.2.1 快速生成html",[19,130093,130094,130095],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[26,130096,130097],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,130099,130100],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,130102,130103],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,130105,130106],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,130108,130109],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,130111,130112],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,130114,130115],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[31,130117,130119],{"className":129868,"code":130118,"language":129870,"meta":36,"style":36},"\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",[26,130120,130121,130126,130131,130136,130141,130146,130151,130156],{"__ignoreMap":36},[40,130122,130123],{"class":42,"line":43},[40,130124,130125],{"class":997},"\u003C!-- Emmet 语法示例 -->\n",[40,130127,130128],{"class":42,"line":54},[40,130129,130130],{"class":997},"\u003C!-- div*3        → 生成3个div -->\n",[40,130132,130133],{"class":42,"line":70},[40,130134,130135],{"class":997},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[40,130137,130138],{"class":42,"line":78},[40,130139,130140],{"class":997},"\u003C!-- div+p        → 兄弟div和p -->\n",[40,130142,130143],{"class":42,"line":86},[40,130144,130145],{"class":997},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[40,130147,130148],{"class":42,"line":100},[40,130149,130150],{"class":997},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[40,130152,130153],{"class":42,"line":108},[40,130154,130155],{"class":997},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[40,130157,130158],{"class":42,"line":121},[40,130159,130160],{"class":997},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[402,130162,130164],{"id":130163},"_722-快速生成css","7.2.2 快速生成css",[19,130166,130167],{},"简写开头",[19,130169,130170],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,130172,130174],{"id":130173},"_73-css复合选择器","7.3 css复合选择器",[402,130176,130178],{"id":130177},"_731-后代选择器","7.3.1 后代选择器",[31,130180,130182],{"className":129121,"code":130181,"language":129123,"meta":36,"style":36},".parent .child {\n  color: blue;\n}\n",[26,130183,130184,130194,130204],{"__ignoreMap":36},[40,130185,130186,130189,130192],{"class":42,"line":43},[40,130187,130188],{"class":596},".parent",[40,130190,130191],{"class":596}," .child",[40,130193,18894],{"class":50},[40,130195,130196,130198,130200,130202],{"class":42,"line":54},[40,130197,74201],{"class":63},[40,130199,60],{"class":50},[40,130201,129897],{"class":63},[40,130203,4637],{"class":50},[40,130205,130206],{"class":42,"line":70},[40,130207,4907],{"class":50},[19,130209,130210],{},"元素1 元素2 {样式声明}",[19,130212,130213],{},[409,130214,130215],{},"注意点:",[19,130217,130218],{},"①元素1和元素2中间用空格隔开",[19,130220,130221],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,130223,130224],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,130226,130227],{},"④元素1和元素2可以是任意基础选择器",[402,130229,130231],{"id":130230},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,130233,130234],{},[409,130235,130215],{},[19,130237,130238],{},"①元素1和元素2中间用大于号隔开",[19,130240,130221],{},[19,130242,130243],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[402,130245,130247],{"id":130246},"_733-并集选择器","7.3.3 并集选择器",[19,130249,130250],{},"元素1，元素2 {样式声明}",[19,130252,130253],{},[409,130254,130215],{},[19,130256,130257],{},"①元素1和元素2中间用逗号隔开",[19,130259,130260],{},"②逗号可以理解为和的意思",[19,130262,130263],{},"③并集选择器通常用于集体声明",[402,130265,130267],{"id":130266},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,130269,130270],{},[409,130271,130215],{},[19,130273,130274,130275,130277],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[72303,130276],{},"－:visited－:hover－:active。",[19,130279,130280,130281,130284,130285,29053],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[130282,130283],"hover",{}," 、 ",[130286,130287],"first-child",{},[19,130289,130290],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,130292,130293],{},"link对没访问的进行设置",[19,130295,130296],{},"vistied对已访问的进行改变",[19,130298,130299],{},"hover鼠标经过就会变",[19,130301,130302],{},"active常按(点)就会变",[31,130304,130306],{"className":129121,"code":130305,"language":129123,"meta":36,"style":36},"\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",[26,130307,130308,130313,130322,130332,130342,130346,130355,130366,130370,130378,130388,130398,130402,130411,130422],{"__ignoreMap":36},[40,130309,130310],{"class":42,"line":43},[40,130311,130312],{"class":997},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[40,130314,130315,130317,130320],{"class":42,"line":54},[40,130316,2106],{"class":46},[40,130318,130319],{"class":596},":link",[40,130321,18894],{"class":50},[40,130323,130324,130326,130328,130330],{"class":42,"line":70},[40,130325,74201],{"class":63},[40,130327,60],{"class":50},[40,130329,65667],{"class":63},[40,130331,4637],{"class":50},[40,130333,130334,130336,130338,130340],{"class":42,"line":78},[40,130335,73798],{"class":63},[40,130337,60],{"class":50},[40,130339,58035],{"class":63},[40,130341,4637],{"class":50},[40,130343,130344],{"class":42,"line":86},[40,130345,4907],{"class":50},[40,130347,130348,130350,130353],{"class":42,"line":100},[40,130349,2106],{"class":46},[40,130351,130352],{"class":596},":visited",[40,130354,18894],{"class":50},[40,130356,130357,130359,130361,130364],{"class":42,"line":108},[40,130358,74201],{"class":63},[40,130360,60],{"class":50},[40,130362,130363],{"class":63},"purple",[40,130365,4637],{"class":50},[40,130367,130368],{"class":42,"line":121},[40,130369,4907],{"class":50},[40,130371,130372,130374,130376],{"class":42,"line":134},[40,130373,2106],{"class":46},[40,130375,64238],{"class":596},[40,130377,18894],{"class":50},[40,130379,130380,130382,130384,130386],{"class":42,"line":146},[40,130381,74201],{"class":63},[40,130383,60],{"class":50},[40,130385,58187],{"class":63},[40,130387,4637],{"class":50},[40,130389,130390,130392,130394,130396],{"class":42,"line":154},[40,130391,73798],{"class":63},[40,130393,60],{"class":50},[40,130395,129735],{"class":63},[40,130397,4637],{"class":50},[40,130399,130400],{"class":42,"line":162},[40,130401,4907],{"class":50},[40,130403,130404,130406,130409],{"class":42,"line":170},[40,130405,2106],{"class":46},[40,130407,130408],{"class":596},":active",[40,130410,18894],{"class":50},[40,130412,130413,130415,130417,130420],{"class":42,"line":183},[40,130414,74201],{"class":63},[40,130416,60],{"class":50},[40,130418,130419],{"class":63},"green",[40,130421,4637],{"class":50},[40,130423,130424],{"class":42,"line":196},[40,130425,4907],{"class":50},[402,130427,130429,130430,130433],{"id":130428},"_735-伪类选择器","7.3.5 ",[130431,130432],"focus",{},"伪类选择器",[19,130435,130436,130438,130439,130441],{},[130431,130437],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[26,130440,129182],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[31,130443,130445],{"className":129121,"code":130444,"language":129123,"meta":36,"style":36},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[26,130446,130447,130455,130466,130476],{"__ignoreMap":36},[40,130448,130449,130451,130453],{"class":42,"line":43},[40,130450,57119],{"class":46},[40,130452,65198],{"class":596},[40,130454,18894],{"class":50},[40,130456,130457,130460,130462,130464],{"class":42,"line":54},[40,130458,130459],{"class":63},"  border-color",[40,130461,60],{"class":50},[40,130463,58187],{"class":63},[40,130465,4637],{"class":50},[40,130467,130468,130470,130472,130474],{"class":42,"line":70},[40,130469,74094],{"class":63},[40,130471,60],{"class":50},[40,130473,58035],{"class":63},[40,130475,4637],{"class":50},[40,130477,130478],{"class":42,"line":78},[40,130479,4907],{"class":50},[3384,130481,130482],{},"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":36,"searchDepth":54,"depth":54,"links":130484},[130485,130490,130494],{"id":129860,"depth":54,"text":129861,"children":130486},[130487,130488,130489],{"id":129864,"depth":70,"text":129865},{"id":129948,"depth":70,"text":129949},{"id":129996,"depth":70,"text":129997},{"id":130086,"depth":54,"text":130087,"children":130491},[130492,130493],{"id":130090,"depth":70,"text":130091},{"id":130163,"depth":70,"text":130164},{"id":130173,"depth":54,"text":130174,"children":130495},[130496,130497,130498,130499,130500],{"id":130177,"depth":70,"text":130178},{"id":130230,"depth":70,"text":130231},{"id":130246,"depth":70,"text":130247},{"id":130266,"depth":70,"text":130267},{"id":130428,"depth":70,"text":130501},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":129852,"description":3413},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":130508,"title":130509,"body":130510,"description":3413,"extension":3414,"meta":132433,"navigation":1412,"path":132434,"seo":132435,"stem":132436,"__hash__":132437},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":130511,"toc":132407},[130512,130515,130519,130528,130532,130558,130563,130566,130569,130572,130575,130579,130582,130592,130600,130604,130639,130644,130647,130650,130653,130656,130660,130663,130672,130676,130689,130694,130697,130700,130703,130707,130710,130714,130717,130772,130775,130806,130809,130863,130867,130870,131036,131159,131162,131165,131168,131171,131175,131178,131182,131185,131188,131192,131195,131226,131253,131281,131284,131288,131314,131357,131361,131455,131458,131485,131488,131491,131494,131497,131500,131503,131506,131509,131512,131516,131573,131600,131604,131652,131656,131697,131699,131702,131705,131708,131711,131715,131807,131810,131813,131816,131820,131943,132144,132148,132152,132155,132158,132161,132165,132168,132171,132196,132199,132202,132205,132208,132211,132215,132223,132285,132288,132346,132349,132352,132355,132358,132361,132364,132367,132404],[10,130513,130509],{"id":130514},"_8-css显示模式与背景特性",[14,130516,130518],{"id":130517},"_81-css元素显示模式","8.1 css元素显示模式",[19,130520,130521,130522,130524,130525,130527],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[26,130523,128732],{},"自己占一行，比如一行可以放多个",[26,130526,128735],{},"，HTML 元素一般分为块元素和行内元素两种类型",[402,130529,130531],{"id":130530},"_811-块元素","8.1.1 块元素",[19,130533,130534,130535,130537,130538,3693,130541,3693,130543,3693,130545,3693,130548,3693,130551,130554,130555,130557],{},"常见的块元素有",[26,130536,128636],{},"~",[26,130539,130540],{},"\u003Ch6>",[26,130542,128662],{},[26,130544,128732],{},[26,130546,130547],{},"\u003Cul>",[26,130549,130550],{},"\u003Col>",[26,130552,130553],{},"\u003Cli>","等，其中 ",[26,130556,128732],{}," 标签是最典型的块元素",[19,130559,130560],{},[409,130561,130562],{},"块级元素的特点：",[19,130564,130565],{},"① 比较霸道，自己独占一行。",[19,130567,130568],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,130570,130571],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,130573,130574],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,130576,130577],{},[409,130578,3516],{},[19,130580,130581],{},"①文字类的元素内不能使用块级元素",[19,130583,80544,130584,130586,130587,130589,130590],{},[26,130585,128662],{}," 标签主要用于存放文字，因此 ",[26,130588,128662],{}," 里面不能放块级元素，特别是不能放",[26,130591,128732],{},[19,130593,130594,130595,130537,130597,130599],{},"⑥同理， ",[26,130596,128636],{},[26,130598,130540],{},"等都是文字类块级标签，里面也不能放其他块级元素",[402,130601,130603],{"id":130602},"_812-行内元素","8.1.2 行内元素",[19,130605,130606,130607,3693,130609,3693,130612,3693,130615,3693,130618,3693,130621,3693,130624,3693,130627,3693,130630,3693,130633,130635,130636,130638],{},"常见的行内元素有 ",[26,130608,128894],{},[26,130610,130611],{},"\u003Cstrong>",[26,130613,130614],{},"\u003Cb>",[26,130616,130617],{},"\u003Cem>",[26,130619,130620],{},"\u003Ci>",[26,130622,130623],{},"\u003Cdel>",[26,130625,130626],{},"\u003Cs>",[26,130628,130629],{},"\u003Cins>",[26,130631,130632],{},"\u003Cu>",[26,130634,128735],{}," 等，其中 ",[26,130637,128735],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,130640,130641],{},[409,130642,130643],{},"特点：",[19,130645,130646],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,130648,130649],{},"② 高、宽直接设置是无效的。",[19,130651,130652],{},"③ 默认宽度就是它本身内容的宽度。",[19,130654,130655],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,130657,130658],{},[409,130659,3516],{},[19,130661,130662],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,130664,130665,130666,130668,130669,130671],{},"②特殊情况链接 ",[26,130667,128894],{}," 里面可以放块级元素，但是给 ",[26,130670,128894],{}," 转换一下块级模式最安全",[402,130673,130675],{"id":130674},"_813-行内块元素","8.1.3 行内块元素",[19,130677,130678,130679,3693,130682,3693,130685,130688],{},"在行内元素中有几个特殊的标签 —— ",[26,130680,130681],{},"\u003Cimg \u002F>",[26,130683,130684],{},"\u003Cinput \u002F>",[26,130686,130687],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,130690,130691],{},[409,130692,130693],{},"行内块元素的特点：",[19,130695,130696],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,130698,130699],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,130701,130702],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[402,130704,130706],{"id":130705},"_814-总结","8.1.4 总结",[438,130708],{"style":128977,"src":130709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[402,130711,130713],{"id":130712},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,130715,130716],{},"①转换为块元素：display:block;",[31,130718,130720],{"className":129121,"code":130719,"language":129123,"meta":36,"style":36},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[26,130721,130722,130727,130733,130744,130756,130768],{"__ignoreMap":36},[40,130723,130724],{"class":42,"line":43},[40,130725,130726],{"class":997},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[40,130728,130729,130731],{"class":42,"line":54},[40,130730,2106],{"class":46},[40,130732,18894],{"class":50},[40,130734,130735,130738,130740,130742],{"class":42,"line":70},[40,130736,130737],{"class":63},"  display",[40,130739,60],{"class":50},[40,130741,64167],{"class":63},[40,130743,4637],{"class":50},[40,130745,130746,130748,130750,130752,130754],{"class":42,"line":78},[40,130747,73864],{"class":63},[40,130749,60],{"class":50},[40,130751,3791],{"class":63},[40,130753,54790],{"class":1283},[40,130755,4637],{"class":50},[40,130757,130758,130760,130762,130764,130766],{"class":42,"line":86},[40,130759,74084],{"class":63},[40,130761,60],{"class":50},[40,130763,3880],{"class":63},[40,130765,54790],{"class":1283},[40,130767,4637],{"class":50},[40,130769,130770],{"class":42,"line":100},[40,130771,4907],{"class":50},[19,130773,130774],{},"②转换为行内元素：display:inline;",[31,130776,130778],{"className":129121,"code":130777,"language":129123,"meta":36,"style":36},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[26,130779,130780,130785,130791,130802],{"__ignoreMap":36},[40,130781,130782],{"class":42,"line":43},[40,130783,130784],{"class":997},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[40,130786,130787,130789],{"class":42,"line":54},[40,130788,54909],{"class":46},[40,130790,18894],{"class":50},[40,130792,130793,130795,130797,130800],{"class":42,"line":70},[40,130794,130737],{"class":63},[40,130796,60],{"class":50},[40,130798,130799],{"class":63},"inline",[40,130801,4637],{"class":50},[40,130803,130804],{"class":42,"line":78},[40,130805,4907],{"class":50},[19,130807,130808],{},"③转换为行内块：display:inline-block;",[31,130810,130812],{"className":129121,"code":130811,"language":129123,"meta":36,"style":36},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[26,130813,130814,130819,130825,130835,130847,130859],{"__ignoreMap":36},[40,130815,130816],{"class":42,"line":43},[40,130817,130818],{"class":997},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[40,130820,130821,130823],{"class":42,"line":54},[40,130822,40],{"class":46},[40,130824,18894],{"class":50},[40,130826,130827,130829,130831,130833],{"class":42,"line":70},[40,130828,130737],{"class":63},[40,130830,60],{"class":50},[40,130832,75678],{"class":63},[40,130834,4637],{"class":50},[40,130836,130837,130839,130841,130843,130845],{"class":42,"line":78},[40,130838,73864],{"class":63},[40,130840,60],{"class":50},[40,130842,4091],{"class":63},[40,130844,54790],{"class":1283},[40,130846,4637],{"class":50},[40,130848,130849,130851,130853,130855,130857],{"class":42,"line":86},[40,130850,74084],{"class":63},[40,130852,60],{"class":50},[40,130854,4428],{"class":63},[40,130856,54790],{"class":1283},[40,130858,4637],{"class":50},[40,130860,130861],{"class":42,"line":100},[40,130862,4907],{"class":50},[402,130864,130866],{"id":130865},"_816-小米侧边栏","8.1.6 小米侧边栏",[438,130868],{"style":128977,"src":130869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[31,130871,130873],{"className":129868,"code":130872,"language":129870,"meta":36,"style":36},"\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",[26,130874,130875,130880,130895,130914,130933,130952,130971,130990,131009,131028],{"__ignoreMap":36},[40,130876,130877],{"class":42,"line":43},[40,130878,130879],{"class":997},"\u003C!-- 小米侧边栏案例 -->\n",[40,130881,130882,130884,130886,130888,130890,130893],{"class":42,"line":54},[40,130883,4387],{"class":50},[40,130885,54909],{"class":46},[40,130887,56784],{"class":596},[40,130889,1284],{"class":50},[40,130891,130892],{"class":94},"\"sidebar\"",[40,130894,54606],{"class":50},[40,130896,130897,130899,130901,130903,130905,130907,130910,130912],{"class":42,"line":70},[40,130898,55442],{"class":50},[40,130900,2106],{"class":46},[40,130902,64355],{"class":596},[40,130904,1284],{"class":50},[40,130906,64360],{"class":94},[40,130908,130909],{"class":50},">手机 电话卡\u003C\u002F",[40,130911,2106],{"class":46},[40,130913,54606],{"class":50},[40,130915,130916,130918,130920,130922,130924,130926,130929,130931],{"class":42,"line":78},[40,130917,55442],{"class":50},[40,130919,2106],{"class":46},[40,130921,64355],{"class":596},[40,130923,1284],{"class":50},[40,130925,64360],{"class":94},[40,130927,130928],{"class":50},">电视 盒子\u003C\u002F",[40,130930,2106],{"class":46},[40,130932,54606],{"class":50},[40,130934,130935,130937,130939,130941,130943,130945,130948,130950],{"class":42,"line":86},[40,130936,55442],{"class":50},[40,130938,2106],{"class":46},[40,130940,64355],{"class":596},[40,130942,1284],{"class":50},[40,130944,64360],{"class":94},[40,130946,130947],{"class":50},">笔记本 平板\u003C\u002F",[40,130949,2106],{"class":46},[40,130951,54606],{"class":50},[40,130953,130954,130956,130958,130960,130962,130964,130967,130969],{"class":42,"line":100},[40,130955,55442],{"class":50},[40,130957,2106],{"class":46},[40,130959,64355],{"class":596},[40,130961,1284],{"class":50},[40,130963,64360],{"class":94},[40,130965,130966],{"class":50},">出行 穿戴\u003C\u002F",[40,130968,2106],{"class":46},[40,130970,54606],{"class":50},[40,130972,130973,130975,130977,130979,130981,130983,130986,130988],{"class":42,"line":108},[40,130974,55442],{"class":50},[40,130976,2106],{"class":46},[40,130978,64355],{"class":596},[40,130980,1284],{"class":50},[40,130982,64360],{"class":94},[40,130984,130985],{"class":50},">智能 路由器\u003C\u002F",[40,130987,2106],{"class":46},[40,130989,54606],{"class":50},[40,130991,130992,130994,130996,130998,131000,131002,131005,131007],{"class":42,"line":121},[40,130993,55442],{"class":50},[40,130995,2106],{"class":46},[40,130997,64355],{"class":596},[40,130999,1284],{"class":50},[40,131001,64360],{"class":94},[40,131003,131004],{"class":50},">健康 儿童\u003C\u002F",[40,131006,2106],{"class":46},[40,131008,54606],{"class":50},[40,131010,131011,131013,131015,131017,131019,131021,131024,131026],{"class":42,"line":134},[40,131012,55442],{"class":50},[40,131014,2106],{"class":46},[40,131016,64355],{"class":596},[40,131018,1284],{"class":50},[40,131020,64360],{"class":94},[40,131022,131023],{"class":50},">耳机 音响\u003C\u002F",[40,131025,2106],{"class":46},[40,131027,54606],{"class":50},[40,131029,131030,131032,131034],{"class":42,"line":146},[40,131031,55083],{"class":50},[40,131033,54909],{"class":46},[40,131035,54606],{"class":50},[31,131037,131039],{"className":129121,"code":131038,"language":129123,"meta":36,"style":36},".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",[26,131040,131041,131050,131060,131073,131085,131097,131109,131119,131130,131134,131144,131155],{"__ignoreMap":36},[40,131042,131043,131046,131048],{"class":42,"line":43},[40,131044,131045],{"class":596},".sidebar",[40,131047,4741],{"class":46},[40,131049,18894],{"class":50},[40,131051,131052,131054,131056,131058],{"class":42,"line":54},[40,131053,130737],{"class":63},[40,131055,60],{"class":50},[40,131057,64167],{"class":63},[40,131059,4637],{"class":50},[40,131061,131062,131064,131066,131069,131071],{"class":42,"line":70},[40,131063,73864],{"class":63},[40,131065,60],{"class":50},[40,131067,131068],{"class":63},"234",[40,131070,54790],{"class":1283},[40,131072,4637],{"class":50},[40,131074,131075,131077,131079,131081,131083],{"class":42,"line":78},[40,131076,74084],{"class":63},[40,131078,60],{"class":50},[40,131080,3931],{"class":63},[40,131082,54790],{"class":1283},[40,131084,4637],{"class":50},[40,131086,131087,131089,131091,131093,131095],{"class":42,"line":86},[40,131088,129805],{"class":63},[40,131090,60],{"class":50},[40,131092,3931],{"class":63},[40,131094,54790],{"class":1283},[40,131096,4637],{"class":50},[40,131098,131099,131101,131103,131105,131107],{"class":42,"line":100},[40,131100,74119],{"class":63},[40,131102,60],{"class":50},[40,131104,4428],{"class":63},[40,131106,54790],{"class":1283},[40,131108,4637],{"class":50},[40,131110,131111,131113,131115,131117],{"class":42,"line":108},[40,131112,74201],{"class":63},[40,131114,60],{"class":50},[40,131116,64140],{"class":63},[40,131118,4637],{"class":50},[40,131120,131121,131123,131125,131128],{"class":42,"line":121},[40,131122,74174],{"class":63},[40,131124,60],{"class":50},[40,131126,131127],{"class":63},"#55585a",[40,131129,4637],{"class":50},[40,131131,131132],{"class":42,"line":134},[40,131133,4907],{"class":50},[40,131135,131136,131138,131140,131142],{"class":42,"line":146},[40,131137,131045],{"class":596},[40,131139,4741],{"class":46},[40,131141,64238],{"class":596},[40,131143,18894],{"class":50},[40,131145,131146,131148,131150,131153],{"class":42,"line":154},[40,131147,74174],{"class":63},[40,131149,60],{"class":50},[40,131151,131152],{"class":63},"#ff6700",[40,131154,4637],{"class":50},[40,131156,131157],{"class":42,"line":162},[40,131158,4907],{"class":50},[438,131160],{"style":128977,"src":131161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,131163,131164],{},"行高=盒子高度：实现文字的垂直居中",[19,131166,131167],{},"原理讲解：",[438,131169],{"style":128977,"src":131170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,131172,131174],{"id":131173},"_82-css背景","8.2 css背景",[19,131176,131177],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[402,131179,131181],{"id":131180},"_821-背景颜色","8.2.1 背景颜色",[19,131183,131184],{},"background-color:颜色值;",[19,131186,131187],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[402,131189,131191],{"id":131190},"_822-背景图片","8.2.2 背景图片",[19,131193,131194],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[31,131196,131198],{"className":129121,"code":131197,"language":129123,"meta":36,"style":36},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[26,131199,131200,131206,131222],{"__ignoreMap":36},[40,131201,131202,131204],{"class":42,"line":43},[40,131203,54909],{"class":46},[40,131205,18894],{"class":50},[40,131207,131208,131211,131213,131215,131217,131220],{"class":42,"line":54},[40,131209,131210],{"class":63},"  background-image",[40,131212,60],{"class":50},[40,131214,65024],{"class":63},[40,131216,3488],{"class":50},[40,131218,131219],{"class":8539},"images\u002Fbg.png",[40,131221,6043],{"class":50},[40,131223,131224],{"class":42,"line":70},[40,131225,4907],{"class":50},[3619,131227,131228,131237],{},[3622,131229,131230],{},[3625,131231,131232,131235],{},[3628,131233,131234],{"align":27055},"参数值",[3628,131236,105987],{"align":27055},[3665,131238,131239,131246],{},[3625,131240,131241,131243],{},[3670,131242,58035],{"align":27055},[3670,131244,131245],{"align":27055},"无背景图（默认的）",[3625,131247,131248,131250],{},[3670,131249,65024],{"align":27055},[3670,131251,131252],{"align":27055},"使用绝对或相对地址指定背景图像",[31,131254,131255],{"className":129121,"code":131197,"language":129123,"meta":36,"style":36},[26,131256,131257,131263,131277],{"__ignoreMap":36},[40,131258,131259,131261],{"class":42,"line":43},[40,131260,54909],{"class":46},[40,131262,18894],{"class":50},[40,131264,131265,131267,131269,131271,131273,131275],{"class":42,"line":54},[40,131266,131210],{"class":63},[40,131268,60],{"class":50},[40,131270,65024],{"class":63},[40,131272,3488],{"class":50},[40,131274,131219],{"class":8539},[40,131276,6043],{"class":50},[40,131278,131279],{"class":42,"line":70},[40,131280,4907],{"class":50},[19,131282,131283],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[402,131285,131287],{"id":131286},"_823-背景平铺","8.2.3 背景平铺",[31,131289,131291],{"className":129121,"code":131290,"language":129123,"meta":36,"style":36},"div {\n  background-repeat: no-repeat;\n}\n",[26,131292,131293,131299,131310],{"__ignoreMap":36},[40,131294,131295,131297],{"class":42,"line":43},[40,131296,54909],{"class":46},[40,131298,18894],{"class":50},[40,131300,131301,131304,131306,131308],{"class":42,"line":54},[40,131302,131303],{"class":63},"  background-repeat",[40,131305,60],{"class":50},[40,131307,65034],{"class":63},[40,131309,4637],{"class":50},[40,131311,131312],{"class":42,"line":70},[40,131313,4907],{"class":50},[3619,131315,131316,131324],{},[3622,131317,131318],{},[3625,131319,131320,131322],{},[3628,131321,131234],{"align":27055},[3628,131323,105987],{"align":27055},[3665,131325,131326,131334,131341,131349],{},[3625,131327,131328,131331],{},[3670,131329,131330],{"align":27055},"repeat",[3670,131332,131333],{"align":27055},"背景图像在纵向和横向上平铺（默认的）",[3625,131335,131336,131338],{},[3670,131337,65034],{"align":27055},[3670,131339,131340],{"align":27055},"背景图像不平铺",[3625,131342,131343,131346],{},[3670,131344,131345],{"align":27055},"repeat-x",[3670,131347,131348],{"align":27055},"背景图像在横向上平铺",[3625,131350,131351,131354],{},[3670,131352,131353],{"align":27055},"repeat-y",[3670,131355,131356],{"align":27055},"背景图像在纵向平铺",[402,131358,131360],{"id":131359},"_824-背景图片位置","8.2.4 背景图片位置",[31,131362,131364],{"className":129121,"code":131363,"language":129123,"meta":36,"style":36},"\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",[26,131365,131366,131371,131377,131391,131395,131400,131406,131422,131426,131431,131437,131451],{"__ignoreMap":36},[40,131367,131368],{"class":42,"line":43},[40,131369,131370],{"class":997},"\u002F* 方位名词 *\u002F\n",[40,131372,131373,131375],{"class":42,"line":54},[40,131374,54909],{"class":46},[40,131376,18894],{"class":50},[40,131378,131379,131382,131384,131386,131389],{"class":42,"line":70},[40,131380,131381],{"class":63},"  background-position",[40,131383,60],{"class":50},[40,131385,54890],{"class":63},[40,131387,131388],{"class":63}," top",[40,131390,4637],{"class":50},[40,131392,131393],{"class":42,"line":78},[40,131394,4907],{"class":50},[40,131396,131397],{"class":42,"line":86},[40,131398,131399],{"class":997},"\u002F* 精确单位 *\u002F\n",[40,131401,131402,131404],{"class":42,"line":100},[40,131403,54909],{"class":46},[40,131405,18894],{"class":50},[40,131407,131408,131410,131412,131414,131416,131418,131420],{"class":42,"line":108},[40,131409,131381],{"class":63},[40,131411,60],{"class":50},[40,131413,4178],{"class":63},[40,131415,54790],{"class":1283},[40,131417,60802],{"class":63},[40,131419,54790],{"class":1283},[40,131421,4637],{"class":50},[40,131423,131424],{"class":42,"line":121},[40,131425,4907],{"class":50},[40,131427,131428],{"class":42,"line":134},[40,131429,131430],{"class":997},"\u002F* 混合单位 *\u002F\n",[40,131432,131433,131435],{"class":42,"line":146},[40,131434,54909],{"class":46},[40,131436,18894],{"class":50},[40,131438,131439,131441,131443,131445,131447,131449],{"class":42,"line":154},[40,131440,131381],{"class":63},[40,131442,60],{"class":50},[40,131444,4178],{"class":63},[40,131446,54790],{"class":1283},[40,131448,20466],{"class":63},[40,131450,4637],{"class":50},[40,131452,131453],{"class":42,"line":162},[40,131454,4907],{"class":50},[19,131456,131457],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[3619,131459,131460,131468],{},[3622,131461,131462],{},[3625,131463,131464,131466],{},[3628,131465,131234],{"align":27055},[3628,131467,29181],{"align":27055},[3665,131469,131470,131477],{},[3625,131471,131472,131474],{},[3670,131473,55266],{"align":27055},[3670,131475,131476],{"align":27055},"百分数|由浮点数和单位标识符组成的长度值",[3625,131478,131479,131482],{},[3670,131480,131481],{"align":27055},"position",[3670,131483,131484],{"align":27055},"top|center|bottom|left|center|right 方位名词",[19,131486,131487],{},"其他说明：",[19,131489,131490],{},"①参数是方位名词",[19,131492,131493],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,131495,131496],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,131498,131499],{},"②参数是精确单位",[19,131501,131502],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,131504,131505],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,131507,131508],{},"③参数是混合单位",[19,131510,131511],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[402,131513,131515],{"id":131514},"_825-背景图片固定","8.2.5 背景图片固定",[31,131517,131519],{"className":129121,"code":131518,"language":129123,"meta":36,"style":36},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[26,131520,131521,131526,131532,131544,131548,131553,131559,131569],{"__ignoreMap":36},[40,131522,131523],{"class":42,"line":43},[40,131524,131525],{"class":997},"\u002F* 背景滚动（默认） *\u002F\n",[40,131527,131528,131530],{"class":42,"line":54},[40,131529,54909],{"class":46},[40,131531,18894],{"class":50},[40,131533,131534,131537,131539,131542],{"class":42,"line":70},[40,131535,131536],{"class":63},"  background-attachment",[40,131538,60],{"class":50},[40,131540,131541],{"class":63},"scroll",[40,131543,4637],{"class":50},[40,131545,131546],{"class":42,"line":78},[40,131547,4907],{"class":50},[40,131549,131550],{"class":42,"line":86},[40,131551,131552],{"class":997},"\u002F* 背景固定 *\u002F\n",[40,131554,131555,131557],{"class":42,"line":100},[40,131556,54909],{"class":46},[40,131558,18894],{"class":50},[40,131560,131561,131563,131565,131567],{"class":42,"line":108},[40,131562,131536],{"class":63},[40,131564,60],{"class":50},[40,131566,89528],{"class":63},[40,131568,4637],{"class":50},[40,131570,131571],{"class":42,"line":121},[40,131572,4907],{"class":50},[3619,131574,131575,131584],{},[3622,131576,131577],{},[3625,131578,131579,131582],{},[3628,131580,131581],{"align":27055},"参数",[3628,131583,105987],{"align":27055},[3665,131585,131586,131593],{},[3625,131587,131588,131590],{},[3670,131589,131541],{"align":27055},[3670,131591,131592],{"align":27055},"背景图像是随对象内容滚动",[3625,131594,131595,131597],{},[3670,131596,89528],{"align":27055},[3670,131598,131599],{"align":27055},"背景图像固定",[402,131601,131603],{"id":131602},"_826-背景样式合写","8.2.6 背景样式合写",[31,131605,131607],{"className":129121,"code":131606,"language":129123,"meta":36,"style":36},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[26,131608,131609,131614,131620,131648],{"__ignoreMap":36},[40,131610,131611],{"class":42,"line":43},[40,131612,131613],{"class":997},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[40,131615,131616,131618],{"class":42,"line":54},[40,131617,54909],{"class":46},[40,131619,18894],{"class":50},[40,131621,131622,131624,131626,131628,131631,131633,131635,131637,131639,131642,131644,131646],{"class":42,"line":70},[40,131623,73907],{"class":63},[40,131625,60],{"class":50},[40,131627,64140],{"class":63},[40,131629,131630],{"class":63}," url",[40,131632,3488],{"class":50},[40,131634,131219],{"class":8539},[40,131636,17036],{"class":50},[40,131638,65034],{"class":63},[40,131640,131641],{"class":63}," fixed",[40,131643,20466],{"class":63},[40,131645,131388],{"class":63},[40,131647,4637],{"class":50},[40,131649,131650],{"class":42,"line":78},[40,131651,4907],{"class":50},[402,131653,131655],{"id":131654},"_827-背景色半透明","8.2.7 背景色半透明",[31,131657,131659],{"className":129121,"code":131658,"language":129123,"meta":36,"style":36},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[26,131660,131661,131667,131693],{"__ignoreMap":36},[40,131662,131663,131665],{"class":42,"line":43},[40,131664,54909],{"class":46},[40,131666,18894],{"class":50},[40,131668,131669,131671,131673,131675,131677,131679,131681,131683,131685,131687,131689,131691],{"class":42,"line":54},[40,131670,73907],{"class":63},[40,131672,60],{"class":50},[40,131674,58408],{"class":63},[40,131676,3488],{"class":50},[40,131678,3672],{"class":63},[40,131680,15757],{"class":50},[40,131682,3672],{"class":63},[40,131684,15757],{"class":50},[40,131686,3672],{"class":63},[40,131688,15757],{"class":50},[40,131690,103816],{"class":63},[40,131692,6043],{"class":50},[40,131694,131695],{"class":42,"line":70},[40,131696,4907],{"class":50},[19,131698,102691],{},[19,131700,131701],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,131703,131704],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,131706,131707],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,131709,131710],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[402,131712,131714],{"id":131713},"_828-总结","8.2.8 总结",[3619,131716,131717,131728],{},[3622,131718,131719],{},[3625,131720,131721,131724,131726],{},[3628,131722,131723],{"align":27055},"属性",[3628,131725,105987],{"align":27055},[3628,131727,3633],{"align":27055},[3665,131729,131730,131741,131752,131763,131774,131785,131796],{},[3625,131731,131732,131735,131738],{},[3670,131733,131734],{"align":27055},"background-color",[3670,131736,131737],{"align":27055},"背景颜色",[3670,131739,131740],{"align":27055},"预定义的颜色值\u002F十六进制\u002FRGB代码",[3625,131742,131743,131746,131749],{},[3670,131744,131745],{"align":27055},"background-image",[3670,131747,131748],{"align":27055},"背景图片",[3670,131750,131751],{"align":27055},"url(图片路径)",[3625,131753,131754,131757,131760],{},[3670,131755,131756],{"align":27055},"background-repeat",[3670,131758,131759],{"align":27055},"是否平铺",[3670,131761,131762],{"align":27055},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[3625,131764,131765,131768,131771],{},[3670,131766,131767],{"align":27055},"background-position",[3670,131769,131770],{"align":27055},"背景位置",[3670,131772,131773],{"align":27055},"length\u002Fposition 分别是x和y坐标",[3625,131775,131776,131779,131782],{},[3670,131777,131778],{"align":27055},"background-attachment",[3670,131780,131781],{"align":27055},"背景附着",[3670,131783,131784],{"align":27055},"scroll(背景滚动) \u002Ffixed (背景固定)",[3625,131786,131787,131790,131793],{},[3670,131788,131789],{"align":27055},"背景简写",[3670,131791,131792],{"align":27055},"书写更简单",[3670,131794,131795],{"align":27055},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[3625,131797,131798,131801,131804],{},[3670,131799,131800],{"align":27055},"背景半透明",[3670,131802,131803],{"align":27055},"背景颜色半透明",[3670,131805,131806],{"align":27055},"background: rgba(0,0,0.3); 后面必须是4个值",[19,131808,131809],{},"颜色渐变：",[438,131811],{"style":128977,"src":131812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[438,131814],{"style":128977,"src":131815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[402,131817,131819],{"id":131818},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[31,131821,131823],{"className":129868,"code":131822,"language":129870,"meta":36,"style":36},"\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",[26,131824,131825,131840,131859,131878,131897,131916,131935],{"__ignoreMap":36},[40,131826,131827,131829,131831,131833,131835,131838],{"class":42,"line":43},[40,131828,4387],{"class":50},[40,131830,54909],{"class":46},[40,131832,56784],{"class":596},[40,131834,1284],{"class":50},[40,131836,131837],{"class":94},"\"nav\"",[40,131839,54606],{"class":50},[40,131841,131842,131844,131846,131848,131850,131852,131855,131857],{"class":42,"line":54},[40,131843,55442],{"class":50},[40,131845,2106],{"class":46},[40,131847,64355],{"class":596},[40,131849,1284],{"class":50},[40,131851,64360],{"class":94},[40,131853,131854],{"class":50},">五彩导航1\u003C\u002F",[40,131856,2106],{"class":46},[40,131858,54606],{"class":50},[40,131860,131861,131863,131865,131867,131869,131871,131874,131876],{"class":42,"line":70},[40,131862,55442],{"class":50},[40,131864,2106],{"class":46},[40,131866,64355],{"class":596},[40,131868,1284],{"class":50},[40,131870,64360],{"class":94},[40,131872,131873],{"class":50},">五彩导航2\u003C\u002F",[40,131875,2106],{"class":46},[40,131877,54606],{"class":50},[40,131879,131880,131882,131884,131886,131888,131890,131893,131895],{"class":42,"line":78},[40,131881,55442],{"class":50},[40,131883,2106],{"class":46},[40,131885,64355],{"class":596},[40,131887,1284],{"class":50},[40,131889,64360],{"class":94},[40,131891,131892],{"class":50},">五彩导航3\u003C\u002F",[40,131894,2106],{"class":46},[40,131896,54606],{"class":50},[40,131898,131899,131901,131903,131905,131907,131909,131912,131914],{"class":42,"line":86},[40,131900,55442],{"class":50},[40,131902,2106],{"class":46},[40,131904,64355],{"class":596},[40,131906,1284],{"class":50},[40,131908,64360],{"class":94},[40,131910,131911],{"class":50},">五彩导航4\u003C\u002F",[40,131913,2106],{"class":46},[40,131915,54606],{"class":50},[40,131917,131918,131920,131922,131924,131926,131928,131931,131933],{"class":42,"line":100},[40,131919,55442],{"class":50},[40,131921,2106],{"class":46},[40,131923,64355],{"class":596},[40,131925,1284],{"class":50},[40,131927,64360],{"class":94},[40,131929,131930],{"class":50},">五彩导航5\u003C\u002F",[40,131932,2106],{"class":46},[40,131934,54606],{"class":50},[40,131936,131937,131939,131941],{"class":42,"line":108},[40,131938,55083],{"class":50},[40,131940,54909],{"class":46},[40,131942,54606],{"class":50},[31,131944,131946],{"className":129121,"code":131945,"language":129123,"meta":36,"style":36},".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",[26,131947,131948,131957,131967,131979,131991,132001,132013,132023,132027,132052,132075,132098,132121],{"__ignoreMap":36},[40,131949,131950,131953,131955],{"class":42,"line":43},[40,131951,131952],{"class":596},".nav",[40,131954,4741],{"class":46},[40,131956,18894],{"class":50},[40,131958,131959,131961,131963,131965],{"class":42,"line":54},[40,131960,130737],{"class":63},[40,131962,60],{"class":50},[40,131964,75678],{"class":63},[40,131966,4637],{"class":50},[40,131968,131969,131971,131973,131975,131977],{"class":42,"line":70},[40,131970,73864],{"class":63},[40,131972,60],{"class":50},[40,131974,4294],{"class":63},[40,131976,54790],{"class":1283},[40,131978,4637],{"class":50},[40,131980,131981,131983,131985,131987,131989],{"class":42,"line":78},[40,131982,74084],{"class":63},[40,131984,60],{"class":50},[40,131986,4333],{"class":63},[40,131988,54790],{"class":1283},[40,131990,4637],{"class":50},[40,131992,131993,131995,131997,131999],{"class":42,"line":86},[40,131994,73822],{"class":63},[40,131996,60],{"class":50},[40,131998,54890],{"class":63},[40,132000,4637],{"class":50},[40,132002,132003,132005,132007,132009,132011],{"class":42,"line":100},[40,132004,129805],{"class":63},[40,132006,60],{"class":50},[40,132008,4333],{"class":63},[40,132010,54790],{"class":1283},[40,132012,4637],{"class":50},[40,132014,132015,132017,132019,132021],{"class":42,"line":108},[40,132016,74201],{"class":63},[40,132018,60],{"class":50},[40,132020,64140],{"class":63},[40,132022,4637],{"class":50},[40,132024,132025],{"class":42,"line":121},[40,132026,4907],{"class":50},[40,132028,132029,132031,132033,132036,132038,132040,132043,132045,132047,132049],{"class":42,"line":134},[40,132030,131952],{"class":596},[40,132032,4741],{"class":46},[40,132034,132035],{"class":596},":nth-child",[40,132037,3488],{"class":50},[40,132039,3698],{"class":63},[40,132041,132042],{"class":50},") { ",[40,132044,131734],{"class":63},[40,132046,60],{"class":50},[40,132048,131152],{"class":63},[40,132050,132051],{"class":50},"; }\n",[40,132053,132054,132056,132058,132060,132062,132064,132066,132068,132070,132073],{"class":42,"line":146},[40,132055,131952],{"class":596},[40,132057,4741],{"class":46},[40,132059,132035],{"class":596},[40,132061,3488],{"class":50},[40,132063,64],{"class":63},[40,132065,132042],{"class":50},[40,132067,131734],{"class":63},[40,132069,60],{"class":50},[40,132071,132072],{"class":63},"#ff0000",[40,132074,132051],{"class":50},[40,132076,132077,132079,132081,132083,132085,132087,132089,132091,132093,132096],{"class":42,"line":154},[40,132078,131952],{"class":596},[40,132080,4741],{"class":46},[40,132082,132035],{"class":596},[40,132084,3488],{"class":50},[40,132086,3555],{"class":63},[40,132088,132042],{"class":50},[40,132090,131734],{"class":63},[40,132092,60],{"class":50},[40,132094,132095],{"class":63},"#00a4ff",[40,132097,132051],{"class":50},[40,132099,132100,132102,132104,132106,132108,132110,132112,132114,132116,132119],{"class":42,"line":162},[40,132101,131952],{"class":596},[40,132103,4741],{"class":46},[40,132105,132035],{"class":596},[40,132107,3488],{"class":50},[40,132109,3773],{"class":63},[40,132111,132042],{"class":50},[40,132113,131734],{"class":63},[40,132115,60],{"class":50},[40,132117,132118],{"class":63},"#ff00ff",[40,132120,132051],{"class":50},[40,132122,132123,132125,132127,132129,132131,132133,132135,132137,132139,132142],{"class":42,"line":170},[40,132124,131952],{"class":596},[40,132126,4741],{"class":46},[40,132128,132035],{"class":596},[40,132130,3488],{"class":50},[40,132132,3799],{"class":63},[40,132134,132042],{"class":50},[40,132136,131734],{"class":63},[40,132138,60],{"class":50},[40,132140,132141],{"class":63},"#00ff00",[40,132143,132051],{"class":50},[14,132145,132147],{"id":132146},"_83-css三大特性","8.3 css三大特性",[402,132149,132151],{"id":132150},"_831-层叠性","8.3.1 层叠性",[19,132153,132154],{},"为了解决样式冲突问题",[19,132156,132157],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,132159,132160],{},"   ②样式不冲突，不会层叠",[402,132162,132164],{"id":132163},"_832-继承性","8.3.2 继承性",[19,132166,132167],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,132169,132170],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[31,132172,132174],{"className":129121,"code":132173,"language":129123,"meta":36,"style":36},"p {\n  color: #333;\n}\n",[26,132175,132176,132182,132192],{"__ignoreMap":36},[40,132177,132178,132180],{"class":42,"line":43},[40,132179,19],{"class":46},[40,132181,18894],{"class":50},[40,132183,132184,132186,132188,132190],{"class":42,"line":54},[40,132185,74201],{"class":63},[40,132187,60],{"class":50},[40,132189,65667],{"class":63},[40,132191,4637],{"class":50},[40,132193,132194],{"class":42,"line":70},[40,132195,4907],{"class":50},[438,132197],{"style":128977,"src":132198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,132200,132201],{},"解释：①行高可以跟单位也可以不跟单位",[19,132203,132204],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,132206,132207],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,132209,132210],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[402,132212,132214],{"id":132213},"_833-优先级","8.3.3 优先级",[492,132216,132217,132220],{},[495,132218,132219],{},"选择器相同，则执行层叠性",[495,132221,132222],{},"选择器不同，则根据选择器权重执行",[3619,132224,132225,132235],{},[3622,132226,132227],{},[3625,132228,132229,132232],{},[3628,132230,132231],{"align":27055},"选择器",[3628,132233,132234],{"align":27055},"选择器权重",[3665,132236,132237,132245,132253,132261,132269,132277],{},[3625,132238,132239,132242],{},[3670,132240,132241],{"align":27055},"继承 或者*",[3670,132243,132244],{"align":27055},"0，0，0，0",[3625,132246,132247,132250],{},[3670,132248,132249],{"align":27055},"标签选择器",[3670,132251,132252],{"align":27055},"0，0，0，1",[3625,132254,132255,132258],{},[3670,132256,132257],{"align":27055},"类选择器，伪类选择器",[3670,132259,132260],{"align":27055},"0，0，1，0",[3625,132262,132263,132266],{},[3670,132264,132265],{"align":27055},"ID选择器",[3670,132267,132268],{"align":27055},"0，1，0，0",[3625,132270,132271,132274],{},[3670,132272,132273],{"align":27055},"行内样式",[3670,132275,132276],{"align":27055},"1，0，0，0",[3625,132278,132279,132282],{},[3670,132280,132281],{"align":27055},"！important",[3670,132283,132284],{"align":27055},"无穷大",[19,132286,132287],{},"! important用法：",[31,132289,132291],{"className":129121,"code":132290,"language":129123,"meta":36,"style":36},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[26,132292,132293,132298,132304,132317,132321,132326,132332,132342],{"__ignoreMap":36},[40,132294,132295],{"class":42,"line":43},[40,132296,132297],{"class":997},"\u002F* !important 拥有最高优先级 *\u002F\n",[40,132299,132300,132302],{"class":42,"line":54},[40,132301,54909],{"class":46},[40,132303,18894],{"class":50},[40,132305,132306,132308,132310,132312,132315],{"class":42,"line":70},[40,132307,74201],{"class":63},[40,132309,60],{"class":50},[40,132311,54943],{"class":63},[40,132313,132314],{"class":1283}," !important",[40,132316,4637],{"class":50},[40,132318,132319],{"class":42,"line":78},[40,132320,4907],{"class":50},[40,132322,132323],{"class":42,"line":86},[40,132324,132325],{"class":997},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[40,132327,132328,132330],{"class":42,"line":100},[40,132329,54909],{"class":46},[40,132331,18894],{"class":50},[40,132333,132334,132336,132338,132340],{"class":42,"line":108},[40,132335,74201],{"class":63},[40,132337,60],{"class":50},[40,132339,60719],{"class":63},[40,132341,4637],{"class":50},[40,132343,132344],{"class":42,"line":121},[40,132345,4907],{"class":50},[19,132347,132348],{},"优先级注意点：",[19,132350,132351],{},"①权重是有4组数字组成,但是不会有进位",[19,132353,132354],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,132356,132357],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,132359,132360],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,132362,132363],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,132365,132366],{},"⑥复合选择器",[3619,132368,132369,132379],{},[3622,132370,132371],{},[3625,132372,132373,132376],{},[3628,132374,132375],{"align":27055},"div ul li",[3628,132377,132378],{"align":27055},"0,0,0,3",[3665,132380,132381,132389,132397],{},[3625,132382,132383,132386],{},[3670,132384,132385],{"align":27055},".nav ul li",[3670,132387,132388],{"align":27055},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[3625,132390,132391,132394],{},[3670,132392,132393],{"align":27055},"a:hover",[3670,132395,132396],{"align":27055},"0,0,1,1",[3625,132398,132399,132402],{},[3670,132400,132401],{"align":27055},".nav a",[3670,132403,132396],{"align":27055},[3384,132405,132406],{},"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":36,"searchDepth":54,"depth":54,"links":132408},[132409,132417,132428],{"id":130517,"depth":54,"text":130518,"children":132410},[132411,132412,132413,132414,132415,132416],{"id":130530,"depth":70,"text":130531},{"id":130602,"depth":70,"text":130603},{"id":130674,"depth":70,"text":130675},{"id":130705,"depth":70,"text":130706},{"id":130712,"depth":70,"text":130713},{"id":130865,"depth":70,"text":130866},{"id":131173,"depth":54,"text":131174,"children":132418},[132419,132420,132421,132422,132423,132424,132425,132426,132427],{"id":131180,"depth":70,"text":131181},{"id":131190,"depth":70,"text":131191},{"id":131286,"depth":70,"text":131287},{"id":131359,"depth":70,"text":131360},{"id":131514,"depth":70,"text":131515},{"id":131602,"depth":70,"text":131603},{"id":131654,"depth":70,"text":131655},{"id":131713,"depth":70,"text":131714},{"id":131818,"depth":70,"text":131819},{"id":132146,"depth":54,"text":132147,"children":132429},[132430,132431,132432],{"id":132150,"depth":70,"text":132151},{"id":132163,"depth":70,"text":132164},{"id":132213,"depth":70,"text":132214},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":130509,"description":3413},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":132439,"title":132440,"body":132441,"description":3413,"extension":3414,"meta":134031,"navigation":1412,"path":134032,"seo":134033,"stem":134034,"__hash__":134035},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":132442,"toc":134010},[132443,132446,132450,132453,132456,132459,132462,132465,132468,132471,132475,132483,132520,132556,132559,132573,132578,132612,132615,132708,132713,132716,132746,132749,132754,132762,132766,132773,132819,132863,132868,132871,132874,132877,132880,132883,132886,132888,132891,132895,132900,132944,132949,132952,132955,132992,132997,133000,133003,133006,133009,133041,133044,133047,133050,133082,133085,133088,133091,133095,133098,133130,133133,133137,133157,133160,133168,133171,133175,133180,133183,133215,133220,133223,133261,133265,133270,133273,133276,133307,133310,133327,133332,133384,133444,133449,133503,133541,133545,133549,133552,133556,133564,133567,133569,133580,133585,133633,133667,133670,133673,133676,133679,133723,133726,133729,133732,133735,133738,133741,133785,133788,133791,133794,133797,133800,133803,133809,133812,133856,133859,133862,133865,133868,133871,133915,133918,133920,133923,133927,133931,133969,133973,133976,133979,133983,133991,133995,133998,134001,134004,134007],[10,132444,132440],{"id":132445},"_9-css盒模型浮动与切图",[14,132447,132449],{"id":132448},"_91-盒子模型","9.1 盒子模型",[19,132451,132452],{},"利用盒子来设计网页",[19,132454,132455],{},"盒子包含：边框、外边距、内边距、实际内容",[19,132457,132458],{},"网页布局设置：",[19,132460,132461],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,132463,132464],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,132466,132467],{},"③往盒子里装内容",[438,132469],{"style":128977,"src":132470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[402,132472,132474],{"id":132473},"_911-边框border","9.1.1 边框（border）",[492,132476,132477,132480],{},[495,132478,132479],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[495,132481,132482],{},"语法",[31,132484,132486],{"className":129121,"code":132485,"language":129123,"meta":36,"style":36},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[26,132487,132488,132493,132499,132516],{"__ignoreMap":36},[40,132489,132490],{"class":42,"line":43},[40,132491,132492],{"class":997},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[40,132494,132495,132497],{"class":42,"line":54},[40,132496,54909],{"class":46},[40,132498,18894],{"class":50},[40,132500,132501,132503,132505,132507,132509,132511,132514],{"class":42,"line":70},[40,132502,74192],{"class":63},[40,132504,60],{"class":50},[40,132506,3698],{"class":63},[40,132508,54790],{"class":1283},[40,132510,54819],{"class":63},[40,132512,132513],{"class":63}," #ccc",[40,132515,4637],{"class":50},[40,132517,132518],{"class":42,"line":78},[40,132519,4907],{"class":50},[3619,132521,132522,132530],{},[3622,132523,132524],{},[3625,132525,132526,132528],{},[3628,132527,131723],{"align":27055},[3628,132529,105987],{"align":27055},[3665,132531,132532,132540,132548],{},[3625,132533,132534,132537],{},[3670,132535,132536],{"align":27055},"border-width",[3670,132538,132539],{"align":27055},"定义边框粗细，单位是px",[3625,132541,132542,132545],{},[3670,132543,132544],{"align":27055},"border-style",[3670,132546,132547],{"align":27055},"边框的样式",[3625,132549,132550,132553],{},[3670,132551,132552],{"align":27055},"border-color",[3670,132554,132555],{"align":27055},"边框的颜色",[19,132557,132558],{},"边框样式 border-style 可以设置如下值：",[1338,132560,132561,132564,132567,132570],{},[495,132562,132563],{},"none：没有边框即忽略所有边框的宽度（默认值）",[495,132565,132566],{},"solid：边框为单实线(最为常用的)",[495,132568,132569],{},"dashed：边框为虚线",[495,132571,132572],{},"dotted：边框为点线",[492,132574,132575],{"start":70},[495,132576,132577],{},"边框的合写分写",[31,132579,132580],{"className":129121,"code":132485,"language":129123,"meta":36,"style":36},[26,132581,132582,132586,132592,132608],{"__ignoreMap":36},[40,132583,132584],{"class":42,"line":43},[40,132585,132492],{"class":997},[40,132587,132588,132590],{"class":42,"line":54},[40,132589,54909],{"class":46},[40,132591,18894],{"class":50},[40,132593,132594,132596,132598,132600,132602,132604,132606],{"class":42,"line":70},[40,132595,74192],{"class":63},[40,132597,60],{"class":50},[40,132599,3698],{"class":63},[40,132601,54790],{"class":1283},[40,132603,54819],{"class":63},[40,132605,132513],{"class":63},[40,132607,4637],{"class":50},[40,132609,132610],{"class":42,"line":78},[40,132611,4907],{"class":50},[19,132613,132614],{},"边框分开写法：",[31,132616,132618],{"className":129121,"code":132617,"language":129123,"meta":36,"style":36},"\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",[26,132619,132620,132625,132631,132649,132667,132686,132704],{"__ignoreMap":36},[40,132621,132622],{"class":42,"line":43},[40,132623,132624],{"class":997},"\u002F* 边框分开写法 *\u002F\n",[40,132626,132627,132629],{"class":42,"line":54},[40,132628,54909],{"class":46},[40,132630,18894],{"class":50},[40,132632,132633,132636,132638,132640,132642,132644,132647],{"class":42,"line":70},[40,132634,132635],{"class":63},"  border-top",[40,132637,60],{"class":50},[40,132639,3698],{"class":63},[40,132641,54790],{"class":1283},[40,132643,54819],{"class":63},[40,132645,132646],{"class":63}," #000",[40,132648,4637],{"class":50},[40,132650,132651,132654,132656,132658,132660,132662,132665],{"class":42,"line":78},[40,132652,132653],{"class":63},"  border-right",[40,132655,60],{"class":50},[40,132657,64],{"class":63},[40,132659,54790],{"class":1283},[40,132661,65539],{"class":63},[40,132663,132664],{"class":63}," #333",[40,132666,4637],{"class":50},[40,132668,132669,132672,132674,132676,132678,132681,132684],{"class":42,"line":86},[40,132670,132671],{"class":63},"  border-bottom",[40,132673,60],{"class":50},[40,132675,3555],{"class":63},[40,132677,54790],{"class":1283},[40,132679,132680],{"class":63}," dotted",[40,132682,132683],{"class":63}," #666",[40,132685,4637],{"class":50},[40,132687,132688,132691,132693,132695,132697,132699,132702],{"class":42,"line":100},[40,132689,132690],{"class":63},"  border-left",[40,132692,60],{"class":50},[40,132694,3698],{"class":63},[40,132696,54790],{"class":1283},[40,132698,54819],{"class":63},[40,132700,132701],{"class":63}," #999",[40,132703,4637],{"class":50},[40,132705,132706],{"class":42,"line":108},[40,132707,4907],{"class":50},[492,132709,132710],{"start":78},[495,132711,132712],{},"表格的细线边框",[19,132714,132715],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[31,132717,132719],{"className":129121,"code":132718,"language":129123,"meta":36,"style":36},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[26,132720,132721,132726,132732,132742],{"__ignoreMap":36},[40,132722,132723],{"class":42,"line":43},[40,132724,132725],{"class":997},"\u002F* 表格细线边框合并 *\u002F\n",[40,132727,132728,132730],{"class":42,"line":54},[40,132729,3619],{"class":46},[40,132731,18894],{"class":50},[40,132733,132734,132736,132738,132740],{"class":42,"line":70},[40,132735,73874],{"class":63},[40,132737,60],{"class":50},[40,132739,68333],{"class":63},[40,132741,4637],{"class":50},[40,132743,132744],{"class":42,"line":78},[40,132745,4907],{"class":50},[19,132747,132748],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[492,132750,132751],{"start":86},[495,132752,132753],{},"解决边框额外增加盒子的实际大小的方法：",[1338,132755,132756,132759],{},[495,132757,132758],{},"测量盒子大小的时候,不量边框",[495,132760,132761],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[402,132763,132765],{"id":132764},"_912-内边距","9.1.2 内边距",[492,132767,132768,132771],{},[495,132769,132770],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[495,132772,132482],{},[3619,132774,132775,132785],{},[3622,132776,132777],{},[3625,132778,132779,132782],{},[3628,132780,132781],{"align":27055},"值的个数",[3628,132783,132784],{"align":27055},"表达意思",[3665,132786,132787,132795,132803,132811],{},[3625,132788,132789,132792],{},[3670,132790,132791],{"align":27055},"padding: 5px;",[3670,132793,132794],{"align":27055},"1个值，代表上下左右都有5个元素",[3625,132796,132797,132800],{},[3670,132798,132799],{"align":27055},"padding: 5px 10px;",[3670,132801,132802],{"align":27055},"2个值，代表上下内边距为5像素，左右内边距为10像素",[3625,132804,132805,132808],{},[3670,132806,132807],{"align":27055},"padding: 5px 10px 20px;",[3670,132809,132810],{"align":27055},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[3625,132812,132813,132816],{},[3670,132814,132815],{"align":27055},"padding: 5px 10px 20px 30px;",[3670,132817,132818],{"align":27055},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[3619,132820,132821,132829],{},[3622,132822,132823],{},[3625,132824,132825,132827],{},[3628,132826,131723],{"align":27055},[3628,132828,105987],{"align":27055},[3665,132830,132831,132839,132847,132855],{},[3625,132832,132833,132836],{},[3670,132834,132835],{"align":27055},"padding-left",[3670,132837,132838],{"align":27055},"左内边距",[3625,132840,132841,132844],{},[3670,132842,132843],{"align":27055},"padding-right",[3670,132845,132846],{"align":27055},"右内边距",[3625,132848,132849,132852],{},[3670,132850,132851],{"align":27055},"padding-top",[3670,132853,132854],{"align":27055},"上内边距",[3625,132856,132857,132860],{},[3670,132858,132859],{"align":27055},"padding-bottom",[3670,132861,132862],{"align":27055},"下内边距",[492,132864,132865],{"start":70},[495,132866,132867],{},"内边距会影响盒子的实际大小",[19,132869,132870],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,132872,132873],{},"①内容和边框有了距离，添加了内边距",[19,132875,132876],{},"②padding影响了盒子实际大小",[19,132878,132879],{},"内边距对盒子大小的影响：",[19,132881,132882],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,132884,132885],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,132887,98515],{},[19,132889,132890],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[402,132892,132894],{"id":132893},"_913-外边距","9.1.3 外边距",[492,132896,132897],{},[495,132898,132899],{},"控制盒子与盒子之间的距离",[3619,132901,132902,132910],{},[3622,132903,132904],{},[3625,132905,132906,132908],{},[3628,132907,131723],{"align":27055},[3628,132909,105987],{"align":27055},[3665,132911,132912,132920,132928,132936],{},[3625,132913,132914,132917],{},[3670,132915,132916],{"align":27055},"margin-left",[3670,132918,132919],{"align":27055},"左外边距",[3625,132921,132922,132925],{},[3670,132923,132924],{"align":27055},"margin-right",[3670,132926,132927],{"align":27055},"右外边距",[3625,132929,132930,132933],{},[3670,132931,132932],{"align":27055},"margin-top",[3670,132934,132935],{"align":27055},"上外边距",[3625,132937,132938,132941],{},[3670,132939,132940],{"align":27055},"margin-bottom",[3670,132942,132943],{"align":27055},"下外边距",[492,132945,132946],{"start":54},[495,132947,132948],{},"外边距可以让块级盒子水平居中的两个条件：",[19,132950,132951],{},"①盒子必须指定了宽度（width）",[19,132953,132954],{},"②盒子左右的外边距都设置为 auto",[31,132956,132958],{"className":129121,"code":132957,"language":129123,"meta":36,"style":36},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[26,132959,132960,132965,132972,132988],{"__ignoreMap":36},[40,132961,132962],{"class":42,"line":43},[40,132963,132964],{"class":997},"\u002F* margin 复合写法（同上） *\u002F\n",[40,132966,132967,132970],{"class":42,"line":54},[40,132968,132969],{"class":596},".box",[40,132971,18894],{"class":50},[40,132973,132974,132976,132978,132980,132982,132985],{"class":42,"line":70},[40,132975,73766],{"class":63},[40,132977,60],{"class":50},[40,132979,3672],{"class":63},[40,132981,54854],{"class":63},[40,132983,132984],{"class":50},";  ",[40,132986,132987],{"class":997},"\u002F* 块级盒子水平居中 *\u002F\n",[40,132989,132990],{"class":42,"line":78},[40,132991,4907],{"class":50},[492,132993,132994],{"start":70},[495,132995,132996],{},"外边距塌陷问题",[19,132998,132999],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[438,133001],{"style":128977,"src":133002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,133004,133005],{},"解决方案：",[19,133007,133008],{},"①可以为父亲元素定义上边距",[31,133010,133011],{"className":129121,"code":132957,"language":129123,"meta":36,"style":36},[26,133012,133013,133017,133023,133037],{"__ignoreMap":36},[40,133014,133015],{"class":42,"line":43},[40,133016,132964],{"class":997},[40,133018,133019,133021],{"class":42,"line":54},[40,133020,132969],{"class":596},[40,133022,18894],{"class":50},[40,133024,133025,133027,133029,133031,133033,133035],{"class":42,"line":70},[40,133026,73766],{"class":63},[40,133028,60],{"class":50},[40,133030,3672],{"class":63},[40,133032,54854],{"class":63},[40,133034,132984],{"class":50},[40,133036,132987],{"class":997},[40,133038,133039],{"class":42,"line":78},[40,133040,4907],{"class":50},[19,133042,133043],{},"②可以为父亲元素定义上内边距",[19,133045,133046],{},"③可以为父亲元素添加overflow:hidden",[438,133048],{"style":128977,"src":133049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[31,133051,133052],{"className":129121,"code":132957,"language":129123,"meta":36,"style":36},[26,133053,133054,133058,133064,133078],{"__ignoreMap":36},[40,133055,133056],{"class":42,"line":43},[40,133057,132964],{"class":997},[40,133059,133060,133062],{"class":42,"line":54},[40,133061,132969],{"class":596},[40,133063,18894],{"class":50},[40,133065,133066,133068,133070,133072,133074,133076],{"class":42,"line":70},[40,133067,73766],{"class":63},[40,133069,60],{"class":50},[40,133071,3672],{"class":63},[40,133073,54854],{"class":63},[40,133075,132984],{"class":50},[40,133077,132987],{"class":997},[40,133079,133080],{"class":42,"line":78},[40,133081,4907],{"class":50},[438,133083],{"style":128977,"src":133084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,133086,133087],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,133089,133090],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[402,133092,133094],{"id":133093},"_914-清除内外边距","9.1.4 清除内外边距",[19,133096,133097],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[31,133099,133100],{"className":129121,"code":132957,"language":129123,"meta":36,"style":36},[26,133101,133102,133106,133112,133126],{"__ignoreMap":36},[40,133103,133104],{"class":42,"line":43},[40,133105,132964],{"class":997},[40,133107,133108,133110],{"class":42,"line":54},[40,133109,132969],{"class":596},[40,133111,18894],{"class":50},[40,133113,133114,133116,133118,133120,133122,133124],{"class":42,"line":70},[40,133115,73766],{"class":63},[40,133117,60],{"class":50},[40,133119,3672],{"class":63},[40,133121,54854],{"class":63},[40,133123,132984],{"class":50},[40,133125,132987],{"class":997},[40,133127,133128],{"class":42,"line":78},[40,133129,4907],{"class":50},[19,133131,133132],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[402,133134,133136],{"id":133135},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1338,133138,133139,133142,133145,133148,133151,133154],{},[495,133140,133141],{},"文件→打开 ：可以打开我们要测量的图片",[495,133143,133144],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[495,133146,133147],{},"右击标尺，把里面的单位改为像素",[495,133149,133150],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[495,133152,133153],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[495,133155,133156],{},"用选区拖动 可以测量大小",[438,133158],{"style":128977,"src":133159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1338,133161,133162,133165],{},[495,133163,133164],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[495,133166,133167],{},"吸管取色工具",[438,133169],{"style":128977,"src":133170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[402,133172,133174],{"id":133173},"_916-案例","9.1.6 案例",[492,133176,133177],{},[495,133178,133179],{},"小米商品",[438,133181],{"style":128977,"src":133182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[31,133184,133185],{"className":129121,"code":132957,"language":129123,"meta":36,"style":36},[26,133186,133187,133191,133197,133211],{"__ignoreMap":36},[40,133188,133189],{"class":42,"line":43},[40,133190,132964],{"class":997},[40,133192,133193,133195],{"class":42,"line":54},[40,133194,132969],{"class":596},[40,133196,18894],{"class":50},[40,133198,133199,133201,133203,133205,133207,133209],{"class":42,"line":70},[40,133200,73766],{"class":63},[40,133202,60],{"class":50},[40,133204,3672],{"class":63},[40,133206,54854],{"class":63},[40,133208,132984],{"class":50},[40,133210,132987],{"class":997},[40,133212,133213],{"class":42,"line":78},[40,133214,4907],{"class":50},[492,133216,133217],{"start":54},[495,133218,133219],{},"快报模块",[438,133221],{"style":128977,"src":133222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[31,133224,133226],{"className":129868,"code":133225,"language":129870,"meta":36,"style":36},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[26,133227,133228,133233,133248,133253],{"__ignoreMap":36},[40,133229,133230],{"class":42,"line":43},[40,133231,133232],{"class":997},"\u003C!-- HTML 代码示例 -->\n",[40,133234,133235,133237,133239,133241,133243,133246],{"class":42,"line":54},[40,133236,4387],{"class":50},[40,133238,54909],{"class":46},[40,133240,56784],{"class":596},[40,133242,1284],{"class":50},[40,133244,133245],{"class":94},"\"example\"",[40,133247,54606],{"class":50},[40,133249,133250],{"class":42,"line":70},[40,133251,133252],{"class":50},"  示例内容\n",[40,133254,133255,133257,133259],{"class":42,"line":78},[40,133256,55083],{"class":50},[40,133258,54909],{"class":46},[40,133260,54606],{"class":50},[402,133262,133264],{"id":133263},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[492,133266,133267],{},[495,133268,133269],{},"圆角边框",[19,133271,133272],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[438,133274],{"style":128977,"src":133275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[31,133277,133279],{"className":129121,"code":133278,"language":129123,"meta":36,"style":36},"div {\n  border: 1px solid #ccc;\n}\n",[26,133280,133281,133287,133303],{"__ignoreMap":36},[40,133282,133283,133285],{"class":42,"line":43},[40,133284,54909],{"class":46},[40,133286,18894],{"class":50},[40,133288,133289,133291,133293,133295,133297,133299,133301],{"class":42,"line":54},[40,133290,74192],{"class":63},[40,133292,60],{"class":50},[40,133294,3698],{"class":63},[40,133296,54790],{"class":1283},[40,133298,54819],{"class":63},[40,133300,132513],{"class":63},[40,133302,4637],{"class":50},[40,133304,133305],{"class":42,"line":70},[40,133306,4907],{"class":50},[19,133308,133309],{},"解释:",[1338,133311,133312,133315,133318,133321,133324],{},[495,133313,133314],{},"参数值可以为数值或百分比的形式",[495,133316,133317],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[495,133319,133320],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[495,133322,133323],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[495,133325,133326],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[492,133328,133329],{"start":54},[495,133330,133331],{},"盒子阴影",[31,133333,133335],{"className":129121,"code":133334,"language":129123,"meta":36,"style":36},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[26,133336,133337,133343,133380],{"__ignoreMap":36},[40,133338,133339,133341],{"class":42,"line":43},[40,133340,54909],{"class":46},[40,133342,18894],{"class":50},[40,133344,133345,133348,133350,133352,133354,133356,133358,133360,133362,133364,133366,133368,133370,133372,133374,133376,133378],{"class":42,"line":54},[40,133346,133347],{"class":63},"  box-shadow",[40,133349,60],{"class":50},[40,133351,3672],{"class":63},[40,133353,18077],{"class":63},[40,133355,54790],{"class":1283},[40,133357,5364],{"class":63},[40,133359,54790],{"class":1283},[40,133361,82062],{"class":63},[40,133363,3488],{"class":50},[40,133365,3672],{"class":63},[40,133367,15757],{"class":50},[40,133369,3672],{"class":63},[40,133371,15757],{"class":50},[40,133373,3672],{"class":63},[40,133375,15757],{"class":50},[40,133377,89505],{"class":63},[40,133379,6043],{"class":50},[40,133381,133382],{"class":42,"line":70},[40,133383,4907],{"class":50},[3619,133385,133386,133394],{},[3622,133387,133388],{},[3625,133389,133390,133392],{},[3628,133391,3633],{"align":27055},[3628,133393,30794],{"align":27055},[3665,133395,133396,133404,133412,133420,133428,133436],{},[3625,133397,133398,133401],{},[3670,133399,133400],{"align":27055},"h-shadow",[3670,133402,133403],{"align":27055},"必需,水平阴影的位置,允许负值",[3625,133405,133406,133409],{},[3670,133407,133408],{"align":27055},"v-shadow",[3670,133410,133411],{"align":27055},"必需,垂直阴影的位置,允许负值",[3625,133413,133414,133417],{},[3670,133415,133416],{"align":27055},"blur",[3670,133418,133419],{"align":27055},"可选,模糊距离,就是影子的虚实",[3625,133421,133422,133425],{},[3670,133423,133424],{"align":27055},"spread",[3670,133426,133427],{"align":27055},"可选,阴影尺寸",[3625,133429,133430,133433],{},[3670,133431,133432],{"align":27055},"color",[3670,133434,133435],{"align":27055},"可选,阴影的颜色",[3625,133437,133438,133441],{},[3670,133439,133440],{"align":27055},"inset",[3670,133442,133443],{"align":27055},"可选,将外部阴影(outset)改为内部阴影",[492,133445,133446],{"start":70},[495,133447,133448],{},"文字阴影",[31,133450,133452],{"className":129121,"code":133451,"language":129123,"meta":36,"style":36},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[26,133453,133454,133460,133499],{"__ignoreMap":36},[40,133455,133456,133458],{"class":42,"line":43},[40,133457,19],{"class":46},[40,133459,18894],{"class":50},[40,133461,133462,133465,133467,133469,133471,133473,133475,133477,133479,133481,133483,133485,133487,133489,133491,133493,133495,133497],{"class":42,"line":54},[40,133463,133464],{"class":63},"  text-shadow",[40,133466,60],{"class":50},[40,133468,3698],{"class":63},[40,133470,54790],{"class":1283},[40,133472,28431],{"class":63},[40,133474,54790],{"class":1283},[40,133476,18077],{"class":63},[40,133478,54790],{"class":1283},[40,133480,82062],{"class":63},[40,133482,3488],{"class":50},[40,133484,3672],{"class":63},[40,133486,15757],{"class":50},[40,133488,3672],{"class":63},[40,133490,15757],{"class":50},[40,133492,3672],{"class":63},[40,133494,15757],{"class":50},[40,133496,103816],{"class":63},[40,133498,6043],{"class":50},[40,133500,133501],{"class":42,"line":70},[40,133502,4907],{"class":50},[3619,133504,133505,133513],{},[3622,133506,133507],{},[3625,133508,133509,133511],{},[3628,133510,3633],{"align":27055},[3628,133512,30794],{"align":27055},[3665,133514,133515,133521,133528,133535],{},[3625,133516,133517,133519],{},[3670,133518,133400],{"align":27055},[3670,133520,133403],{"align":27055},[3625,133522,133523,133525],{},[3670,133524,133408],{"align":27055},[3670,133526,133527],{"align":27055},"必需,垂直阴影位置,允许负值",[3625,133529,133530,133532],{},[3670,133531,133416],{"align":27055},[3670,133533,133534],{"align":27055},"可选,模糊的距离",[3625,133536,133537,133539],{},[3670,133538,133432],{"align":27055},[3670,133540,133435],{"align":27055},[14,133542,133544],{"id":133543},"_92-浮动","9.2 浮动",[402,133546,133548],{"id":133547},"_921-浮动介绍","9.2.1 浮动介绍",[19,133550,133551],{},"在16.2中详细介绍",[402,133553,133555],{"id":133554},"_922-清除浮动","9.2.2 清除浮动",[492,133557,133558,133561],{},[495,133559,133560],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[495,133562,133563],{},"清除浮动的本质",[19,133565,133566],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,133568,12347],{},[1338,133570,133571,133574,133577],{},[495,133572,133573],{},"如果父盒子本身有高度，则不需要清除浮动",[495,133575,133576],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[495,133578,133579],{},"父级有了高度，就不会影响下面的标准流了",[492,133581,133582],{"start":70},[495,133583,133584],{},"清除浮动样式",[31,133586,133588],{"className":129121,"code":133587,"language":129123,"meta":36,"style":36},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[26,133589,133590,133597,133608,133612,133619,133629],{"__ignoreMap":36},[40,133591,133592,133595],{"class":42,"line":43},[40,133593,133594],{"class":596},".left",[40,133596,18894],{"class":50},[40,133598,133599,133602,133604,133606],{"class":42,"line":54},[40,133600,133601],{"class":63},"  float",[40,133603,60],{"class":50},[40,133605,27055],{"class":63},[40,133607,4637],{"class":50},[40,133609,133610],{"class":42,"line":70},[40,133611,4907],{"class":50},[40,133613,133614,133617],{"class":42,"line":78},[40,133615,133616],{"class":596},".right",[40,133618,18894],{"class":50},[40,133620,133621,133623,133625,133627],{"class":42,"line":86},[40,133622,133601],{"class":63},[40,133624,60],{"class":50},[40,133626,75817],{"class":63},[40,133628,4637],{"class":50},[40,133630,133631],{"class":42,"line":100},[40,133632,4907],{"class":50},[3619,133634,133635,133643],{},[3622,133636,133637],{},[3625,133638,133639,133641],{},[3628,133640,129585],{"align":27055},[3628,133642,30794],{"align":27055},[3665,133644,133645,133652,133659],{},[3625,133646,133647,133649],{},[3670,133648,27055],{"align":27055},[3670,133650,133651],{"align":27055},"不允许左侧有浮动元素（清除左侧浮动的影响）",[3625,133653,133654,133656],{},[3670,133655,75817],{"align":27055},[3670,133657,133658],{"align":27055},"不允许右侧有浮动元素（清除右侧浮动的影响）",[3625,133660,133661,133664],{},[3670,133662,133663],{"align":27055},"both",[3670,133665,133666],{"align":27055},"同时清除左右侧浮动的影响",[19,133668,133669],{},"法一",[19,133671,133672],{},"额外标签法也称为隔墙法",[19,133674,133675],{},"使用方式：",[19,133677,133678],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[31,133680,133681],{"className":129121,"code":133587,"language":129123,"meta":36,"style":36},[26,133682,133683,133689,133699,133703,133709,133719],{"__ignoreMap":36},[40,133684,133685,133687],{"class":42,"line":43},[40,133686,133594],{"class":596},[40,133688,18894],{"class":50},[40,133690,133691,133693,133695,133697],{"class":42,"line":54},[40,133692,133601],{"class":63},[40,133694,60],{"class":50},[40,133696,27055],{"class":63},[40,133698,4637],{"class":50},[40,133700,133701],{"class":42,"line":70},[40,133702,4907],{"class":50},[40,133704,133705,133707],{"class":42,"line":78},[40,133706,133616],{"class":596},[40,133708,18894],{"class":50},[40,133710,133711,133713,133715,133717],{"class":42,"line":86},[40,133712,133601],{"class":63},[40,133714,60],{"class":50},[40,133716,75817],{"class":63},[40,133718,4637],{"class":50},[40,133720,133721],{"class":42,"line":100},[40,133722,4907],{"class":50},[19,133724,133725],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,133727,133728],{},"优点： 通俗易懂，书写方便",[19,133730,133731],{},"缺点： 添加许多无意义的标签，结构化较差",[19,133733,133734],{},"注意： 要求这个新的空标签必须是块级元素。",[19,133736,133737],{},"法二",[19,133739,133740],{},"父级添加overflow属性",[31,133742,133743],{"className":129121,"code":133587,"language":129123,"meta":36,"style":36},[26,133744,133745,133751,133761,133765,133771,133781],{"__ignoreMap":36},[40,133746,133747,133749],{"class":42,"line":43},[40,133748,133594],{"class":596},[40,133750,18894],{"class":50},[40,133752,133753,133755,133757,133759],{"class":42,"line":54},[40,133754,133601],{"class":63},[40,133756,60],{"class":50},[40,133758,27055],{"class":63},[40,133760,4637],{"class":50},[40,133762,133763],{"class":42,"line":70},[40,133764,4907],{"class":50},[40,133766,133767,133769],{"class":42,"line":78},[40,133768,133616],{"class":596},[40,133770,18894],{"class":50},[40,133772,133773,133775,133777,133779],{"class":42,"line":86},[40,133774,133601],{"class":63},[40,133776,60],{"class":50},[40,133778,75817],{"class":63},[40,133780,4637],{"class":50},[40,133782,133783],{"class":42,"line":100},[40,133784,4907],{"class":50},[19,133786,133787],{},"overflow: hidden;",[19,133789,133790],{},"优点：代码简洁",[19,133792,133793],{},"缺点：无法显示溢出的部分",[19,133795,133796],{},"注意：是给父元素添加代码",[19,133798,133799],{},"法三",[19,133801,133802],{},"父级添加after伪元素",[19,133804,133805,133808],{},[133806,133807],"after",{}," 方式是额外标签法的升级版",[19,133810,133811],{},"使用的时候复制就可以",[31,133813,133814],{"className":129121,"code":133587,"language":129123,"meta":36,"style":36},[26,133815,133816,133822,133832,133836,133842,133852],{"__ignoreMap":36},[40,133817,133818,133820],{"class":42,"line":43},[40,133819,133594],{"class":596},[40,133821,18894],{"class":50},[40,133823,133824,133826,133828,133830],{"class":42,"line":54},[40,133825,133601],{"class":63},[40,133827,60],{"class":50},[40,133829,27055],{"class":63},[40,133831,4637],{"class":50},[40,133833,133834],{"class":42,"line":70},[40,133835,4907],{"class":50},[40,133837,133838,133840],{"class":42,"line":78},[40,133839,133616],{"class":596},[40,133841,18894],{"class":50},[40,133843,133844,133846,133848,133850],{"class":42,"line":86},[40,133845,133601],{"class":63},[40,133847,60],{"class":50},[40,133849,75817],{"class":63},[40,133851,4637],{"class":50},[40,133853,133854],{"class":42,"line":100},[40,133855,4907],{"class":50},[19,133857,133858],{},"优点：没有增加标签，结构更简单",[19,133860,133861],{},"缺点：照顾低版本浏览器",[19,133863,133864],{},"代表网站： 百度、淘宝网、网易等",[19,133866,133867],{},"法四",[19,133869,133870],{},"父级添加双伪元素",[31,133872,133873],{"className":129121,"code":133587,"language":129123,"meta":36,"style":36},[26,133874,133875,133881,133891,133895,133901,133911],{"__ignoreMap":36},[40,133876,133877,133879],{"class":42,"line":43},[40,133878,133594],{"class":596},[40,133880,18894],{"class":50},[40,133882,133883,133885,133887,133889],{"class":42,"line":54},[40,133884,133601],{"class":63},[40,133886,60],{"class":50},[40,133888,27055],{"class":63},[40,133890,4637],{"class":50},[40,133892,133893],{"class":42,"line":70},[40,133894,4907],{"class":50},[40,133896,133897,133899],{"class":42,"line":78},[40,133898,133616],{"class":596},[40,133900,18894],{"class":50},[40,133902,133903,133905,133907,133909],{"class":42,"line":86},[40,133904,133601],{"class":63},[40,133906,60],{"class":50},[40,133908,75817],{"class":63},[40,133910,4637],{"class":50},[40,133912,133913],{"class":42,"line":100},[40,133914,4907],{"class":50},[19,133916,133917],{},"优点：代码更简洁",[19,133919,133861],{},[19,133921,133922],{},"代表网站：小米、腾讯等",[14,133924,133926],{"id":133925},"_93-ps切图","9.3 PS切图",[402,133928,133930],{"id":133929},"_931-常见图片格式","9.3.1 常见图片格式",[3619,133932,133933,133943],{},[3622,133934,133935],{},[3625,133936,133937,133940],{},[3628,133938,133939],{"align":27055},"jpg图像格式",[3628,133941,133942],{"align":27055},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[3665,133944,133945,133953,133961],{},[3625,133946,133947,133950],{},[3670,133948,133949],{"align":27055},"gif图像格式",[3670,133951,133952],{"align":27055},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[3625,133954,133955,133958],{},[3670,133956,133957],{"align":27055},"png图像格式",[3670,133959,133960],{"align":27055},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[3625,133962,133963,133966],{},[3670,133964,133965],{"align":27055},"PSD图像格式",[3670,133967,133968],{"align":27055},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[402,133970,133972],{"id":133971},"_932-图层切图","9.3.2 图层切图",[19,133974,133975],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,133977,133978],{},"按住shift选中两个图层->图层菜单->合并图层",[402,133980,133982],{"id":133981},"_933-切片切图","9.3.3 切片切图",[1338,133984,133985,133988],{},[495,133986,133987],{},"利用切片工具手动划出",[495,133989,133990],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[402,133992,133994],{"id":133993},"_934-切图步骤","9.3.4 切图步骤",[19,133996,133997],{},"用切片工具选中：",[438,133999],{"style":128977,"src":134000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,134002,134003],{},"文件 -> 导出",[438,134005],{"style":128977,"src":134006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[3384,134008,134009],{},"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":36,"searchDepth":54,"depth":54,"links":134011},[134012,134021,134025],{"id":132448,"depth":54,"text":132449,"children":134013},[134014,134015,134016,134017,134018,134019,134020],{"id":132473,"depth":70,"text":132474},{"id":132764,"depth":70,"text":132765},{"id":132893,"depth":70,"text":132894},{"id":133093,"depth":70,"text":133094},{"id":133135,"depth":70,"text":133136},{"id":133173,"depth":70,"text":133174},{"id":133263,"depth":70,"text":133264},{"id":133543,"depth":54,"text":133544,"children":134022},[134023,134024],{"id":133547,"depth":70,"text":133548},{"id":133554,"depth":70,"text":133555},{"id":133925,"depth":54,"text":133926,"children":134026},[134027,134028,134029,134030],{"id":133929,"depth":70,"text":133930},{"id":133971,"depth":70,"text":133972},{"id":133981,"depth":70,"text":133982},{"id":133993,"depth":70,"text":133994},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":132440,"description":3413},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":134037,"title":134038,"body":134039,"description":3413,"extension":3414,"meta":134680,"navigation":1412,"path":134681,"seo":134682,"stem":134683,"__hash__":134684},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":134040,"toc":134668},[134041,134044,134048,134074,134108,134112,134116,134119,134161,134168,134178,134186,134188,134191,134194,134197,134204,134218,134222,134225,134254,134258,134261,134275,134279,134282,134310,134314,134317,134343,134347,134352,134385,134390,134418,134422,134439,134485,134490,134534,134551,134658,134666],[10,134042,134038],{"id":134043},"_10-css规范与学成在线案例",[14,134045,134047],{"id":134046},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[492,134049,134050,134056,134062,134068],{},[495,134051,134052,134055],{},[409,134053,134054],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[495,134057,134058,134061],{},[409,134059,134060],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[495,134063,134064,134067],{},[409,134065,134066],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[495,134069,134070,134073],{},[409,134071,134072],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[31,134075,134076],{"className":129121,"code":132485,"language":129123,"meta":36,"style":36},[26,134077,134078,134082,134088,134104],{"__ignoreMap":36},[40,134079,134080],{"class":42,"line":43},[40,134081,132492],{"class":997},[40,134083,134084,134086],{"class":42,"line":54},[40,134085,54909],{"class":46},[40,134087,18894],{"class":50},[40,134089,134090,134092,134094,134096,134098,134100,134102],{"class":42,"line":70},[40,134091,74192],{"class":63},[40,134093,60],{"class":50},[40,134095,3698],{"class":63},[40,134097,54790],{"class":1283},[40,134099,54819],{"class":63},[40,134101,132513],{"class":63},[40,134103,4637],{"class":50},[40,134105,134106],{"class":42,"line":78},[40,134107,4907],{"class":50},[14,134109,134111],{"id":134110},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[402,134113,134115],{"id":134114},"_1021-header头部制作","10.2.1 header头部制作",[438,134117],{"style":128977,"src":134118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1338,134120,134121,134128,134135,134141,134148,134155],{},[495,134122,134123,134124,134127],{},"1号是版心盒子 ",[409,134125,134126],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[495,134129,134130,134131,134134],{},"版心盒子 里面包含 2号盒子 ",[409,134132,134133],{},"logo"," 图标",[495,134136,134137,134138,134140],{},"版心盒子 里面包含 3号盒子 ",[409,134139,57011],{}," 导航栏",[495,134142,134143,134144,134147],{},"版心盒子 里面包含 4号盒子 ",[409,134145,134146],{},"search"," 搜索框",[495,134149,134150,134151,134154],{},"版心盒子 里面包含 5号盒子 ",[409,134152,134153],{},"user"," 个人信息",[495,134156,134157,134158],{},"注意，要求里面的 ",[409,134159,134160],{},"4个子盒子 必须都浮动",[492,134162,134163],{},[495,134164,134165],{},[409,134166,134167],{},"导航栏注意点:",[19,134169,134170,134171,134174,134175],{},"实际开发中， ",[409,134172,134173],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[409,134176,134177],{},"用 li 包含链接(li+a)的做法",[1338,134179,134180,134183],{},[495,134181,134182],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[495,134184,134185],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,134187,12347],{},[19,134189,134190],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,134192,134193],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,134195,134196],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[492,134198,134199],{"start":54},[495,134200,134201],{},[409,134202,134203],{},"4号盒子search的细节：",[1338,134205,134206,134209,134212],{},[495,134207,134208],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[495,134210,134211],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[495,134213,134214,134217],{},[26,134215,134216],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[402,134219,134221],{"id":134220},"_1022-banner制作","10.2.2 banner制作",[438,134223],{"style":128977,"src":134224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1338,134226,134227,134234,134240,134247],{},[495,134228,134229,134230,134233],{},"1号盒子是通栏的大盒子 ",[409,134231,134232],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[495,134235,134236,134237,134239],{},"2号盒子是版心 ",[409,134238,2784],{}," ， 要水平居中对齐",[495,134241,134242,134243,134246],{},"3号盒子版心内，左对齐 ",[409,134244,134245],{},"subnav"," 侧导航栏",[495,134248,134249,134250,134253],{},"4号盒子版心内，右对齐 ",[409,134251,134252],{},"course"," 课程",[402,134255,134257],{"id":134256},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[438,134259],{"style":128977,"src":134260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1338,134262,134263,134266,134269,134272],{},[495,134264,134265],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[495,134267,134268],{},"1号盒子是标题 H3 左侧浮动",[495,134270,134271],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[495,134273,134274],{},"3号盒子 右浮动 mod 修改",[402,134276,134278],{"id":134277},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[438,134280],{"style":128977,"src":134281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1338,134283,134284,134290,134297,134304,134307],{},[495,134285,134286,134287,134289],{},"1号盒子为最大的盒子 ",[409,134288,57012],{}," 版心水平居中对齐",[495,134291,134292,134293,134296],{},"2号盒子为上面部分 ",[409,134294,134295],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[495,134298,134299,134300,134303],{},"3号盒子为底下部分 ",[409,134301,134302],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[495,134305,134306],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[495,134308,134309],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[402,134311,134313],{"id":134312},"_1025-底部模块制作","10.2.5 底部模块制作",[438,134315],{"style":128977,"src":134316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1338,134318,134319,134326,134329,134336],{},[495,134320,134321,134322,134325],{},"1号盒子通栏大盒子 底部 ",[409,134323,134324],{},"footer"," 给高度 底色是白色",[495,134327,134328],{},"2号盒子版心水平居中",[495,134330,134331,134332,134335],{},"3号盒子版权 ",[409,134333,134334],{},"copyright"," 左对齐",[495,134337,134338,134339,134342],{},"4号盒子 链接组 ",[409,134340,134341],{},"links"," 右对齐",[402,134344,134346],{"id":134345},"_1026-代码模块","10.2.6 代码模块",[492,134348,134349],{},[495,134350,134351],{},"html部分",[31,134353,134355],{"className":129868,"code":134354,"language":129870,"meta":36,"style":36},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[26,134356,134357],{"__ignoreMap":36},[40,134358,134359,134361,134363,134365,134367,134370,134373,134375,134378,134381,134383],{"class":42,"line":43},[40,134360,4387],{"class":50},[40,134362,2106],{"class":46},[40,134364,64355],{"class":596},[40,134366,1284],{"class":50},[40,134368,134369],{"class":94},"\"https:\u002F\u002Fexample.com\"",[40,134371,134372],{"class":596}," target",[40,134374,1284],{"class":50},[40,134376,134377],{"class":94},"\"_blank\"",[40,134379,134380],{"class":50},">链接文字\u003C\u002F",[40,134382,2106],{"class":46},[40,134384,54606],{"class":50},[492,134386,134387],{"start":54},[495,134388,134389],{},"css部分",[31,134391,134392],{"className":129868,"code":134354,"language":129870,"meta":36,"style":36},[26,134393,134394],{"__ignoreMap":36},[40,134395,134396,134398,134400,134402,134404,134406,134408,134410,134412,134414,134416],{"class":42,"line":43},[40,134397,4387],{"class":50},[40,134399,2106],{"class":46},[40,134401,64355],{"class":596},[40,134403,1284],{"class":50},[40,134405,134369],{"class":94},[40,134407,134372],{"class":596},[40,134409,1284],{"class":50},[40,134411,134377],{"class":94},[40,134413,134380],{"class":50},[40,134415,2106],{"class":46},[40,134417,54606],{"class":50},[402,134419,134421],{"id":134420},"_1027-收获","10.2.7 收获",[492,134423,134424,134427,134430,134433,134436],{},[495,134425,134426],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[495,134428,134429],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[495,134431,134432],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[495,134434,134435],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[495,134437,134438],{},"遗忘代码",[31,134440,134442],{"className":129121,"code":134441,"language":129123,"meta":36,"style":36},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[26,134443,134444,134466,134471,134481],{"__ignoreMap":36},[40,134445,134446,134448,134450,134452,134454,134456,134458,134460,134462,134464],{"class":42,"line":43},[40,134447,54909],{"class":46},[40,134449,15757],{"class":50},[40,134451,19],{"class":46},[40,134453,15757],{"class":50},[40,134455,10],{"class":46},[40,134457,15757],{"class":50},[40,134459,1338],{"class":46},[40,134461,15757],{"class":50},[40,134463,495],{"class":46},[40,134465,18894],{"class":50},[40,134467,134468],{"class":42,"line":54},[40,134469,134470],{"class":997},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[40,134472,134473,134475,134477,134479],{"class":42,"line":70},[40,134474,130737],{"class":63},[40,134476,60],{"class":50},[40,134478,64167],{"class":63},[40,134480,4637],{"class":50},[40,134482,134483],{"class":42,"line":78},[40,134484,4907],{"class":50},[492,134486,134487],{"start":100},[495,134488,134489],{},"html引css的程序",[31,134491,134492],{"className":129121,"code":134441,"language":129123,"meta":36,"style":36},[26,134493,134494,134516,134520,134530],{"__ignoreMap":36},[40,134495,134496,134498,134500,134502,134504,134506,134508,134510,134512,134514],{"class":42,"line":43},[40,134497,54909],{"class":46},[40,134499,15757],{"class":50},[40,134501,19],{"class":46},[40,134503,15757],{"class":50},[40,134505,10],{"class":46},[40,134507,15757],{"class":50},[40,134509,1338],{"class":46},[40,134511,15757],{"class":50},[40,134513,495],{"class":46},[40,134515,18894],{"class":50},[40,134517,134518],{"class":42,"line":54},[40,134519,134470],{"class":997},[40,134521,134522,134524,134526,134528],{"class":42,"line":70},[40,134523,130737],{"class":63},[40,134525,60],{"class":50},[40,134527,64167],{"class":63},[40,134529,4637],{"class":50},[40,134531,134532],{"class":42,"line":78},[40,134533,4907],{"class":50},[492,134535,134536,134539,134542,134545,134548],{"start":108},[495,134537,134538],{},"浮动的盒子不会有外边距合并问题",[495,134540,134541],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[495,134543,134544],{},"ctrl+g快速定位行；shift+alt多个光标",[495,134546,134547],{},"学习上方各个模块的选择器起名方法，以后就这样用",[495,134549,134550],{},"在写选择器时尽量写全一些，例如",[31,134552,134554],{"className":129121,"code":134553,"language":129123,"meta":36,"style":36},"\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",[26,134555,134556,134561,134577,134582,134597,134602,134617,134622,134637,134642],{"__ignoreMap":36},[40,134557,134558],{"class":42,"line":43},[40,134559,134560],{"class":997},"\u002F* 静态定位（默认） *\u002F\n",[40,134562,134563,134566,134568,134570,134572,134575],{"class":42,"line":54},[40,134564,134565],{"class":596},".static",[40,134567,83102],{"class":50},[40,134569,131481],{"class":63},[40,134571,60],{"class":50},[40,134573,134574],{"class":63},"static",[40,134576,132051],{"class":50},[40,134578,134579],{"class":42,"line":70},[40,134580,134581],{"class":997},"\u002F* 相对定位 *\u002F\n",[40,134583,134584,134587,134589,134591,134593,134595],{"class":42,"line":78},[40,134585,134586],{"class":596},".relative",[40,134588,83102],{"class":50},[40,134590,131481],{"class":63},[40,134592,60],{"class":50},[40,134594,58062],{"class":63},[40,134596,132051],{"class":50},[40,134598,134599],{"class":42,"line":86},[40,134600,134601],{"class":997},"\u002F* 绝对定位 *\u002F\n",[40,134603,134604,134607,134609,134611,134613,134615],{"class":42,"line":100},[40,134605,134606],{"class":596},".absolute",[40,134608,83102],{"class":50},[40,134610,131481],{"class":63},[40,134612,60],{"class":50},[40,134614,58129],{"class":63},[40,134616,132051],{"class":50},[40,134618,134619],{"class":42,"line":108},[40,134620,134621],{"class":997},"\u002F* 固定定位 *\u002F\n",[40,134623,134624,134627,134629,134631,134633,134635],{"class":42,"line":121},[40,134625,134626],{"class":596},".fixed",[40,134628,83102],{"class":50},[40,134630,131481],{"class":63},[40,134632,60],{"class":50},[40,134634,89528],{"class":63},[40,134636,132051],{"class":50},[40,134638,134639],{"class":42,"line":134},[40,134640,134641],{"class":997},"\u002F* 粘性定位 *\u002F\n",[40,134643,134644,134647,134649,134651,134653,134656],{"class":42,"line":146},[40,134645,134646],{"class":596},".sticky",[40,134648,83102],{"class":50},[40,134650,131481],{"class":63},[40,134652,60],{"class":50},[40,134654,134655],{"class":63},"sticky",[40,134657,132051],{"class":50},[492,134659,134660,134663],{"start":162},[495,134661,134662],{},"一定要用好注释",[495,134664,134665],{},"浮动的盒子不会有外边距合并的问题",[3384,134667,134009],{},{"title":36,"searchDepth":54,"depth":54,"links":134669},[134670,134671],{"id":134046,"depth":54,"text":134047},{"id":134110,"depth":54,"text":134111,"children":134672},[134673,134674,134675,134676,134677,134678,134679],{"id":134114,"depth":70,"text":134115},{"id":134220,"depth":70,"text":134221},{"id":134256,"depth":70,"text":134257},{"id":134277,"depth":70,"text":134278},{"id":134312,"depth":70,"text":134313},{"id":134345,"depth":70,"text":134346},{"id":134420,"depth":70,"text":134421},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":134038,"description":3413},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":134686,"title":134687,"body":134688,"description":3413,"extension":3414,"meta":136174,"navigation":1412,"path":136175,"seo":136176,"stem":136177,"__hash__":136178},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":134689,"toc":136166},[134690,134693,134697,134701,134712,134716,134733,134777,134810,134813,134830,134833,134836,134880,134884,134888,134891,134894,134898,134901,134912,134975,135016,135019,135034,135088,135096,135099,135110,135164,135190,135193,135206,135260,135292,135346,135369,135423,135426,135429,135436,135490,135511,135565,135568,135571,135656,135664,135721,135744,135748,135751,135769,135773,135792,135846,135884,135888,135891,135894,135916,135920,135928,135931,135936,135947,135950,135954,135968,136012,136015,136019,136022,136027,136053,136058,136135,136138,136142,136145,136148,136151,136154,136157,136160,136163],[10,134691,134687],{"id":134692},"_11-传统布局与定位体系",[14,134694,134696],{"id":134695},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[402,134698,134700],{"id":134699},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1338,134702,134703,134706,134709],{},[495,134704,134705],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[495,134707,134708],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[495,134710,134711],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[402,134713,134715],{"id":134714},"_1112-浮动","11.1.2 浮动",[1338,134717,134718,134721,134724,134727,134730],{},[495,134719,134720],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[495,134722,134723],{},"浮动可以改变元素标签默认的排列方式",[495,134725,134726],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[495,134728,134729],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[495,134731,134732],{},"在使用行内块转换时盒子之间是有空隙的",[31,134734,134735],{"className":129121,"code":133587,"language":129123,"meta":36,"style":36},[26,134736,134737,134743,134753,134757,134763,134773],{"__ignoreMap":36},[40,134738,134739,134741],{"class":42,"line":43},[40,134740,133594],{"class":596},[40,134742,18894],{"class":50},[40,134744,134745,134747,134749,134751],{"class":42,"line":54},[40,134746,133601],{"class":63},[40,134748,60],{"class":50},[40,134750,27055],{"class":63},[40,134752,4637],{"class":50},[40,134754,134755],{"class":42,"line":70},[40,134756,4907],{"class":50},[40,134758,134759,134761],{"class":42,"line":78},[40,134760,133616],{"class":596},[40,134762,18894],{"class":50},[40,134764,134765,134767,134769,134771],{"class":42,"line":86},[40,134766,133601],{"class":63},[40,134768,60],{"class":50},[40,134770,75817],{"class":63},[40,134772,4637],{"class":50},[40,134774,134775],{"class":42,"line":100},[40,134776,4907],{"class":50},[3619,134778,134779,134787],{},[3622,134780,134781],{},[3625,134782,134783,134785],{},[3628,134784,129585],{"align":27055},[3628,134786,30794],{"align":27055},[3665,134788,134789,134796,134803],{},[3625,134790,134791,134793],{},[3670,134792,58035],{"align":27055},[3670,134794,134795],{"align":27055},"元素不浮动（默认值）",[3625,134797,134798,134800],{},[3670,134799,27055],{"align":27055},[3670,134801,134802],{"align":27055},"元素向左浮动",[3625,134804,134805,134807],{},[3670,134806,75817],{"align":27055},[3670,134808,134809],{"align":27055},"元素向右浮动",[19,134811,134812],{},"浮动重点：",[1338,134814,134815,134818,134821,134824,134827],{},[495,134816,134817],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[495,134819,134820],{},"浮动的元素会一行内显示并且元素顶部对齐",[495,134822,134823],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[495,134825,134826],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[495,134828,134829],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,134831,134832],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,134834,134835],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[31,134837,134838],{"className":129121,"code":133587,"language":129123,"meta":36,"style":36},[26,134839,134840,134846,134856,134860,134866,134876],{"__ignoreMap":36},[40,134841,134842,134844],{"class":42,"line":43},[40,134843,133594],{"class":596},[40,134845,18894],{"class":50},[40,134847,134848,134850,134852,134854],{"class":42,"line":54},[40,134849,133601],{"class":63},[40,134851,60],{"class":50},[40,134853,27055],{"class":63},[40,134855,4637],{"class":50},[40,134857,134858],{"class":42,"line":70},[40,134859,4907],{"class":50},[40,134861,134862,134864],{"class":42,"line":78},[40,134863,133616],{"class":596},[40,134865,18894],{"class":50},[40,134867,134868,134870,134872,134874],{"class":42,"line":86},[40,134869,133601],{"class":63},[40,134871,60],{"class":50},[40,134873,75817],{"class":63},[40,134875,4637],{"class":50},[40,134877,134878],{"class":42,"line":100},[40,134879,4907],{"class":50},[402,134881,134883],{"id":134882},"_1113-定位","11.1.3 定位",[2423,134885,134887],{"id":134886},"_11131-使用场景","11.1.3.1 使用场景",[19,134889,134890],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,134892,134893],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[2423,134895,134897],{"id":134896},"_11132-定位组成","11.1.3.2 定位组成",[19,134899,134900],{},"定位 = 定位模式 + 边偏移",[492,134902,134903],{},[495,134904,134905,134908,134909],{},[409,134906,134907],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[409,134910,134911],{},"定位模式",[31,134913,134915],{"className":129121,"code":134914,"language":129123,"meta":36,"style":36},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[26,134916,134917,134923,134937,134954,134971],{"__ignoreMap":36},[40,134918,134919,134921],{"class":42,"line":43},[40,134920,132969],{"class":596},[40,134922,18894],{"class":50},[40,134924,134925,134928,134930,134932,134934],{"class":42,"line":54},[40,134926,134927],{"class":63},"  position",[40,134929,60],{"class":50},[40,134931,58062],{"class":63},[40,134933,132984],{"class":50},[40,134935,134936],{"class":997},"\u002F* 定位模式 *\u002F\n",[40,134938,134939,134942,134944,134946,134948,134951],{"class":42,"line":70},[40,134940,134941],{"class":63},"  top",[40,134943,60],{"class":50},[40,134945,3925],{"class":63},[40,134947,54790],{"class":1283},[40,134949,134950],{"class":50},";           ",[40,134952,134953],{"class":997},"\u002F* 边偏移：上 *\u002F\n",[40,134955,134956,134959,134961,134963,134965,134968],{"class":42,"line":78},[40,134957,134958],{"class":63},"  left",[40,134960,60],{"class":50},[40,134962,4178],{"class":63},[40,134964,54790],{"class":1283},[40,134966,134967],{"class":50},";          ",[40,134969,134970],{"class":997},"\u002F* 边偏移：左 *\u002F\n",[40,134972,134973],{"class":42,"line":86},[40,134974,4907],{"class":50},[3619,134976,134977,134986],{},[3622,134978,134979],{},[3625,134980,134981,134983],{},[3628,134982,3633],{"align":27055},[3628,134984,134985],{"align":27055},"语义",[3665,134987,134988,134995,135002,135009],{},[3625,134989,134990,134992],{},[3670,134991,134574],{"align":27055},[3670,134993,134994],{"align":27055},"静态定位",[3625,134996,134997,134999],{},[3670,134998,58062],{"align":27055},[3670,135000,135001],{"align":27055},"相对定位",[3625,135003,135004,135006],{},[3670,135005,58129],{"align":27055},[3670,135007,135008],{"align":27055},"绝对定位",[3625,135010,135011,135013],{},[3670,135012,89528],{"align":27055},[3670,135014,135015],{"align":27055},"固定定位",[19,135017,135018],{},"（1）静态定位：",[1338,135020,135021,135032],{},[495,135022,135023,135024,135027,135028,135031],{},"静态定位是元素的 ",[409,135025,135026],{},"默认定位方式"," ， ",[409,135029,135030],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[495,135033,8504],{},[31,135035,135036],{"className":129121,"code":134914,"language":129123,"meta":36,"style":36},[26,135037,135038,135044,135056,135070,135084],{"__ignoreMap":36},[40,135039,135040,135042],{"class":42,"line":43},[40,135041,132969],{"class":596},[40,135043,18894],{"class":50},[40,135045,135046,135048,135050,135052,135054],{"class":42,"line":54},[40,135047,134927],{"class":63},[40,135049,60],{"class":50},[40,135051,58062],{"class":63},[40,135053,132984],{"class":50},[40,135055,134936],{"class":997},[40,135057,135058,135060,135062,135064,135066,135068],{"class":42,"line":70},[40,135059,134941],{"class":63},[40,135061,60],{"class":50},[40,135063,3925],{"class":63},[40,135065,54790],{"class":1283},[40,135067,134950],{"class":50},[40,135069,134953],{"class":997},[40,135071,135072,135074,135076,135078,135080,135082],{"class":42,"line":78},[40,135073,134958],{"class":63},[40,135075,60],{"class":50},[40,135077,4178],{"class":63},[40,135079,54790],{"class":1283},[40,135081,134967],{"class":50},[40,135083,134970],{"class":997},[40,135085,135086],{"class":42,"line":86},[40,135087,4907],{"class":50},[1338,135089,135090,135093],{},[495,135091,135092],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[495,135094,135095],{},"静态定位在布局时我们几乎不用的",[19,135097,135098],{},"（2）相对定位",[1338,135100,135101,135108],{},[495,135102,135103,135104,135107],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[409,135105,135106],{},"原来的位置"," 来说的（自恋型）",[495,135109,8504],{},[31,135111,135112],{"className":129121,"code":134914,"language":129123,"meta":36,"style":36},[26,135113,135114,135120,135132,135146,135160],{"__ignoreMap":36},[40,135115,135116,135118],{"class":42,"line":43},[40,135117,132969],{"class":596},[40,135119,18894],{"class":50},[40,135121,135122,135124,135126,135128,135130],{"class":42,"line":54},[40,135123,134927],{"class":63},[40,135125,60],{"class":50},[40,135127,58062],{"class":63},[40,135129,132984],{"class":50},[40,135131,134936],{"class":997},[40,135133,135134,135136,135138,135140,135142,135144],{"class":42,"line":70},[40,135135,134941],{"class":63},[40,135137,60],{"class":50},[40,135139,3925],{"class":63},[40,135141,54790],{"class":1283},[40,135143,134950],{"class":50},[40,135145,134953],{"class":997},[40,135147,135148,135150,135152,135154,135156,135158],{"class":42,"line":78},[40,135149,134958],{"class":63},[40,135151,60],{"class":50},[40,135153,4178],{"class":63},[40,135155,54790],{"class":1283},[40,135157,134967],{"class":50},[40,135159,134970],{"class":997},[40,135161,135162],{"class":42,"line":86},[40,135163,4907],{"class":50},[1338,135165,135166],{},[495,135167,135168,135169,135171,135172,135174,135175,135178,135179,135182,135183,135185,135186,135189],{},"相对定位的特点：",[57014,135170],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[57014,135173],{},"  ② ",[409,135176,135177],{},"原来"," 在标准流的 ",[409,135180,135181],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[57014,135184],{},"  ③因此， ",[409,135187,135188],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,135191,135192],{},"（3）绝对定位",[1338,135194,135195,135204],{},[495,135196,135197,135199,135200,135203],{},[409,135198,135008],{}," 是元素在移动位置的时候，是相对于它 ",[409,135201,135202],{},"祖先元素"," 来说的（拼爹型）",[495,135205,8504],{},[31,135207,135208],{"className":129121,"code":134914,"language":129123,"meta":36,"style":36},[26,135209,135210,135216,135228,135242,135256],{"__ignoreMap":36},[40,135211,135212,135214],{"class":42,"line":43},[40,135213,132969],{"class":596},[40,135215,18894],{"class":50},[40,135217,135218,135220,135222,135224,135226],{"class":42,"line":54},[40,135219,134927],{"class":63},[40,135221,60],{"class":50},[40,135223,58062],{"class":63},[40,135225,132984],{"class":50},[40,135227,134936],{"class":997},[40,135229,135230,135232,135234,135236,135238,135240],{"class":42,"line":70},[40,135231,134941],{"class":63},[40,135233,60],{"class":50},[40,135235,3925],{"class":63},[40,135237,54790],{"class":1283},[40,135239,134950],{"class":50},[40,135241,134953],{"class":997},[40,135243,135244,135246,135248,135250,135252,135254],{"class":42,"line":78},[40,135245,134958],{"class":63},[40,135247,60],{"class":50},[40,135249,4178],{"class":63},[40,135251,54790],{"class":1283},[40,135253,134967],{"class":50},[40,135255,134970],{"class":997},[40,135257,135258],{"class":42,"line":86},[40,135259,4907],{"class":50},[1338,135261,135262,135277,135286,135289],{},[495,135263,135264,135265,135267,135268,135270,135271,135273,135274,135276],{},"绝对定位的特点：",[57014,135266],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[57014,135269],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[57014,135272],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[57014,135275],{},"  (4)固定定位",[495,135278,135279,135281,135282,135285],{},[409,135280,135015],{}," 是元素 ",[409,135283,135284],{},"固定于浏览器可视区的位置"," 。（认死理型）",[495,135287,135288],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[495,135290,135291],{},"语法:",[31,135293,135294],{"className":129121,"code":134914,"language":129123,"meta":36,"style":36},[26,135295,135296,135302,135314,135328,135342],{"__ignoreMap":36},[40,135297,135298,135300],{"class":42,"line":43},[40,135299,132969],{"class":596},[40,135301,18894],{"class":50},[40,135303,135304,135306,135308,135310,135312],{"class":42,"line":54},[40,135305,134927],{"class":63},[40,135307,60],{"class":50},[40,135309,58062],{"class":63},[40,135311,132984],{"class":50},[40,135313,134936],{"class":997},[40,135315,135316,135318,135320,135322,135324,135326],{"class":42,"line":70},[40,135317,134941],{"class":63},[40,135319,60],{"class":50},[40,135321,3925],{"class":63},[40,135323,54790],{"class":1283},[40,135325,134950],{"class":50},[40,135327,134953],{"class":997},[40,135329,135330,135332,135334,135336,135338,135340],{"class":42,"line":78},[40,135331,134958],{"class":63},[40,135333,60],{"class":50},[40,135335,4178],{"class":63},[40,135337,54790],{"class":1283},[40,135339,134967],{"class":50},[40,135341,134970],{"class":997},[40,135343,135344],{"class":42,"line":86},[40,135345,4907],{"class":50},[1338,135347,135348,135357],{},[495,135349,135350,135351,135353,135354,135356],{},"特点:",[57014,135352],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[57014,135355],{},"  ②固定定位不再占有原先的位置,完全脱标",[495,135358,135359,135360,135362,135363,135365,135366,135368],{},"固定在版心位置的方法:",[57014,135361],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[57014,135364],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[57014,135367],{},"  实例：",[31,135370,135371],{"className":129121,"code":134914,"language":129123,"meta":36,"style":36},[26,135372,135373,135379,135391,135405,135419],{"__ignoreMap":36},[40,135374,135375,135377],{"class":42,"line":43},[40,135376,132969],{"class":596},[40,135378,18894],{"class":50},[40,135380,135381,135383,135385,135387,135389],{"class":42,"line":54},[40,135382,134927],{"class":63},[40,135384,60],{"class":50},[40,135386,58062],{"class":63},[40,135388,132984],{"class":50},[40,135390,134936],{"class":997},[40,135392,135393,135395,135397,135399,135401,135403],{"class":42,"line":70},[40,135394,134941],{"class":63},[40,135396,60],{"class":50},[40,135398,3925],{"class":63},[40,135400,54790],{"class":1283},[40,135402,134950],{"class":50},[40,135404,134953],{"class":997},[40,135406,135407,135409,135411,135413,135415,135417],{"class":42,"line":78},[40,135408,134958],{"class":63},[40,135410,60],{"class":50},[40,135412,4178],{"class":63},[40,135414,54790],{"class":1283},[40,135416,134967],{"class":50},[40,135418,134970],{"class":997},[40,135420,135421],{"class":42,"line":86},[40,135422,4907],{"class":50},[438,135424],{"style":128977,"src":135425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,135427,135428],{},"(5)粘性定位",[1338,135430,135431,135434],{},[495,135432,135433],{},"粘性定位可以被认为是相对定位和固定定位的混合",[495,135435,8504],{},[31,135437,135438],{"className":129121,"code":134914,"language":129123,"meta":36,"style":36},[26,135439,135440,135446,135458,135472,135486],{"__ignoreMap":36},[40,135441,135442,135444],{"class":42,"line":43},[40,135443,132969],{"class":596},[40,135445,18894],{"class":50},[40,135447,135448,135450,135452,135454,135456],{"class":42,"line":54},[40,135449,134927],{"class":63},[40,135451,60],{"class":50},[40,135453,58062],{"class":63},[40,135455,132984],{"class":50},[40,135457,134936],{"class":997},[40,135459,135460,135462,135464,135466,135468,135470],{"class":42,"line":70},[40,135461,134941],{"class":63},[40,135463,60],{"class":50},[40,135465,3925],{"class":63},[40,135467,54790],{"class":1283},[40,135469,134950],{"class":50},[40,135471,134953],{"class":997},[40,135473,135474,135476,135478,135480,135482,135484],{"class":42,"line":78},[40,135475,134958],{"class":63},[40,135477,60],{"class":50},[40,135479,4178],{"class":63},[40,135481,54790],{"class":1283},[40,135483,134967],{"class":50},[40,135485,134970],{"class":997},[40,135487,135488],{"class":42,"line":86},[40,135489,4907],{"class":50},[1338,135491,135492],{},[495,135493,135494,135495,135497,135498,135500,135501,135503,135504,135507,135508,135510],{},"粘性定位的特点：",[57014,135496],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[57014,135499],{},"  ②粘性定位占有原先的位置（相对定位特点）",[57014,135502],{},"  ③必须添加 top 、left、right、bottom ",[409,135505,135506],{},"其中一个"," 才有效",[57014,135509],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[31,135512,135513],{"className":129121,"code":134914,"language":129123,"meta":36,"style":36},[26,135514,135515,135521,135533,135547,135561],{"__ignoreMap":36},[40,135516,135517,135519],{"class":42,"line":43},[40,135518,132969],{"class":596},[40,135520,18894],{"class":50},[40,135522,135523,135525,135527,135529,135531],{"class":42,"line":54},[40,135524,134927],{"class":63},[40,135526,60],{"class":50},[40,135528,58062],{"class":63},[40,135530,132984],{"class":50},[40,135532,134936],{"class":997},[40,135534,135535,135537,135539,135541,135543,135545],{"class":42,"line":70},[40,135536,134941],{"class":63},[40,135538,60],{"class":50},[40,135540,3925],{"class":63},[40,135542,54790],{"class":1283},[40,135544,134950],{"class":50},[40,135546,134953],{"class":997},[40,135548,135549,135551,135553,135555,135557,135559],{"class":42,"line":78},[40,135550,134958],{"class":63},[40,135552,60],{"class":50},[40,135554,4178],{"class":63},[40,135556,54790],{"class":1283},[40,135558,134967],{"class":50},[40,135560,134970],{"class":997},[40,135562,135563],{"class":42,"line":86},[40,135564,4907],{"class":50},[438,135566],{"style":128977,"src":135567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,135569,135570],{},"(6)总结",[3619,135572,135573,135588],{},[3622,135574,135575],{},[3625,135576,135577,135579,135582,135585],{},[3628,135578,134911],{"align":27055},[3628,135580,135581],{"align":27055},"是否脱标",[3628,135583,135584],{"align":27055},"移动位置",[3628,135586,135587],{"align":27055},"是否常用",[3665,135589,135590,135603,135617,135631,135644],{},[3625,135591,135592,135595,135597,135600],{},[3670,135593,135594],{"align":27055},"Static 静态定位",[3670,135596,107969],{"align":27055},[3670,135598,135599],{"align":27055},"不能使用边偏移",[3670,135601,135602],{"align":27055},"很少",[3625,135604,135605,135608,135611,135614],{},[3670,135606,135607],{"align":27055},"Relative 相对定位",[3670,135609,135610],{"align":27055},"否(占有位置)",[3670,135612,135613],{"align":27055},"相对于自身位置移动",[3670,135615,135616],{"align":27055},"基本单独使用",[3625,135618,135619,135622,135625,135628],{},[3670,135620,135621],{"align":27055},"Absolute 绝对定位",[3670,135623,135624],{"align":27055},"是(不占有位置)",[3670,135626,135627],{"align":27055},"带有定位的父级",[3670,135629,135630],{"align":27055},"要和定位父级元素搭配使用",[3625,135632,135633,135636,135638,135641],{},[3670,135634,135635],{"align":27055},"Fixed 固定定位",[3670,135637,135624],{"align":27055},[3670,135639,135640],{"align":27055},"浏览器可视区",[3670,135642,135643],{"align":27055},"单独使用,不需要父级",[3625,135645,135646,135649,135651,135653],{},[3670,135647,135648],{"align":27055},"Sticky 粘性定位",[3670,135650,135610],{"align":27055},[3670,135652,135640],{"align":27055},[3670,135654,135655],{"align":27055},"当前阶段少",[492,135657,135658],{"start":54},[495,135659,135660,135663],{},[409,135661,135662],{},"边偏移"," 则决定了该元素的最终位置",[3619,135665,135666,135677],{},[3622,135667,135668],{},[3625,135669,135670,135673,135675],{},[3628,135671,135672],{"align":27055},"边偏移属性",[3628,135674,30797],{"align":27055},[3628,135676,30794],{"align":27055},[3665,135678,135679,135690,135701,135711],{},[3625,135680,135681,135684,135687],{},[3670,135682,135683],{"align":27055},"top",[3670,135685,135686],{"align":27055},"top: 80px;",[3670,135688,135689],{"align":27055},"顶端偏移量，定义元素相对于父元素上边线的距离",[3625,135691,135692,135695,135698],{},[3670,135693,135694],{"align":27055},"bottom",[3670,135696,135697],{"align":27055},"bottom: 80px ;",[3670,135699,135700],{"align":27055},"底部偏移量，定义元素相对于其父元素下边线的距离",[3625,135702,135703,135705,135708],{},[3670,135704,27055],{"align":27055},[3670,135706,135707],{"align":27055},"left: 80px ;",[3670,135709,135710],{"align":27055},"左侧偏移量，定义元素相对于其父元素左边线的距离",[3625,135712,135713,135715,135718],{},[3670,135714,75817],{"align":27055},[3670,135716,135717],{"align":27055},"right: 80px ;",[3670,135719,135720],{"align":27055},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1338,135722,135723],{},[495,135724,12347,135725,135727,135728,135730,135731,135733,135734,135737,135738,135740,135741,135743],{},[57014,135726],{},"  ① ",[409,135729,135662],{}," 需要和 ",[409,135732,134911],{}," 联合使用， ",[409,135735,135736],{},"单独使用无效"," ；",[57014,135739],{},"  ②top和bottom不要同时使用",[57014,135742],{},"  ③left和right不要同时使用",[2423,135745,135747],{"id":135746},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,135749,135750],{},"子级是绝对定位的话，父级要用相对定位",[1338,135752,135753,135756,135759,135762],{},[495,135754,135755],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[495,135757,135758],{},"父盒子需要加定位限制子盒子在父盒子内显示",[495,135760,135761],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[495,135763,135764,135765,135768],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[409,135766,135767],{},"子绝父绝"," 也会遇到",[2423,135770,135772],{"id":135771},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1338,135774,135775,135790],{},[495,135776,135777,135778,135781,135782,135785,135786,135789],{},"在使用 ",[409,135779,135780],{},"定位"," 布局时，可能会 ",[409,135783,135784],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[409,135787,135788],{},"z-index"," 来控制盒子的前后次序 (z轴)",[495,135791,8504],{},[31,135793,135794],{"className":129121,"code":134914,"language":129123,"meta":36,"style":36},[26,135795,135796,135802,135814,135828,135842],{"__ignoreMap":36},[40,135797,135798,135800],{"class":42,"line":43},[40,135799,132969],{"class":596},[40,135801,18894],{"class":50},[40,135803,135804,135806,135808,135810,135812],{"class":42,"line":54},[40,135805,134927],{"class":63},[40,135807,60],{"class":50},[40,135809,58062],{"class":63},[40,135811,132984],{"class":50},[40,135813,134936],{"class":997},[40,135815,135816,135818,135820,135822,135824,135826],{"class":42,"line":70},[40,135817,134941],{"class":63},[40,135819,60],{"class":50},[40,135821,3925],{"class":63},[40,135823,54790],{"class":1283},[40,135825,134950],{"class":50},[40,135827,134953],{"class":997},[40,135829,135830,135832,135834,135836,135838,135840],{"class":42,"line":78},[40,135831,134958],{"class":63},[40,135833,60],{"class":50},[40,135835,4178],{"class":63},[40,135837,54790],{"class":1283},[40,135839,134967],{"class":50},[40,135841,134970],{"class":997},[40,135843,135844],{"class":42,"line":86},[40,135845,4907],{"class":50},[1338,135847,135848],{},[495,135849,135850,135851,135727,135853,135855,135856,130284,135859,85834,135862,135864,135865,135867,135868,135871,135872,135737,135875,135877,135878,135881,135883],{},"z-index的特性",[57014,135852],{},[409,135854,129585],{}," ： ",[409,135857,135858],{},"正整数",[409,135860,135861],{},"负整数",[409,135863,3672],{}," ，默认值是 0，数值越大，盒子越靠上；",[57014,135866],{},"  ②如果 ",[409,135869,135870],{},"属性值相同"," ，则按照书写顺序， ",[409,135873,135874],{},"后来居上",[57014,135876],{},"  ③数字后面 ",[409,135879,135880],{},"不能加单位",[57014,135882],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[2423,135885,135887],{"id":135886},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,135889,135890],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,135892,135893],{},"方法:",[1338,135895,135896,135906],{},[495,135897,135898,135899,135902,135903],{},"left: 50%; 让 ",[409,135900,135901],{},"盒子的左侧"," 移动到 ",[409,135904,135905],{},"父级元素的水平中心位置",[495,135907,135908,135909,135912,135913],{},"margin-left: -100px; 让盒子 ",[409,135910,135911],{},"向左"," 移动 ",[409,135914,135915],{},"自身宽度的一半",[2423,135917,135919],{"id":135918},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[492,135921,135922,135925],{},[495,135923,135924],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[495,135926,135927],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,135929,135930],{},"也就是说绝对定位和固定定位和浮动类似",[492,135932,135933],{"start":70},[495,135934,135935],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1338,135937,135938,135941,135944],{},[495,135939,135940],{},"可以用inline-block 转换为行内块",[495,135942,135943],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[495,135945,135946],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,135948,135949],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[2423,135951,135953],{"id":135952},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[492,135955,135956,135959,135962,135965],{},[495,135957,135958],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[495,135960,135961],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[495,135963,135964],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[495,135966,135967],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[31,135969,135970],{"className":129121,"code":133587,"language":129123,"meta":36,"style":36},[26,135971,135972,135978,135988,135992,135998,136008],{"__ignoreMap":36},[40,135973,135974,135976],{"class":42,"line":43},[40,135975,133594],{"class":596},[40,135977,18894],{"class":50},[40,135979,135980,135982,135984,135986],{"class":42,"line":54},[40,135981,133601],{"class":63},[40,135983,60],{"class":50},[40,135985,27055],{"class":63},[40,135987,4637],{"class":50},[40,135989,135990],{"class":42,"line":70},[40,135991,4907],{"class":50},[40,135993,135994,135996],{"class":42,"line":78},[40,135995,133616],{"class":596},[40,135997,18894],{"class":50},[40,135999,136000,136002,136004,136006],{"class":42,"line":86},[40,136001,133601],{"class":63},[40,136003,60],{"class":50},[40,136005,75817],{"class":63},[40,136007,4637],{"class":50},[40,136009,136010],{"class":42,"line":100},[40,136011,4907],{"class":50},[438,136013],{"style":128977,"src":136014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[2423,136016,136018],{"id":136017},"_11138-轮播图","11.1.3.8 轮播图",[438,136020],{"style":128977,"src":136021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[492,136023,136024],{},[495,136025,136026],{},"制作顺序:",[1338,136028,136029,136032,136035,136044],{},[495,136030,136031],{},"大盒子我们类名为： tb-promo 淘宝广告",[495,136033,136034],{},"里面先放一张图片",[495,136036,136037,136038,136040,136041,136043],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[57014,136039],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[57014,136042],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[495,136045,136046,136047,136049,136050,136052],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[57014,136048],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[57014,136051],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[492,136054,136055],{"start":54},[495,136056,136057],{},"代码模块",[31,136059,136061],{"className":129121,"code":136060,"language":129123,"meta":36,"style":36},"\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",[26,136062,136063,136068,136075,136085,136095,136105,136109,136114,136121,136131],{"__ignoreMap":36},[40,136064,136065],{"class":42,"line":43},[40,136066,136067],{"class":997},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[40,136069,136070,136073],{"class":42,"line":54},[40,136071,136072],{"class":596},".son",[40,136074,18894],{"class":50},[40,136076,136077,136079,136081,136083],{"class":42,"line":70},[40,136078,134927],{"class":63},[40,136080,60],{"class":50},[40,136082,58129],{"class":63},[40,136084,4637],{"class":50},[40,136086,136087,136089,136091,136093],{"class":42,"line":78},[40,136088,134941],{"class":63},[40,136090,60],{"class":50},[40,136092,3672],{"class":63},[40,136094,4637],{"class":50},[40,136096,136097,136099,136101,136103],{"class":42,"line":86},[40,136098,134958],{"class":63},[40,136100,60],{"class":50},[40,136102,3672],{"class":63},[40,136104,4637],{"class":50},[40,136106,136107],{"class":42,"line":100},[40,136108,4907],{"class":50},[40,136110,136111],{"class":42,"line":108},[40,136112,136113],{"class":997},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[40,136115,136116,136119],{"class":42,"line":121},[40,136117,136118],{"class":596},".father",[40,136120,18894],{"class":50},[40,136122,136123,136125,136127,136129],{"class":42,"line":134},[40,136124,134927],{"class":63},[40,136126,60],{"class":50},[40,136128,58062],{"class":63},[40,136130,4637],{"class":50},[40,136132,136133],{"class":42,"line":146},[40,136134,4907],{"class":50},[19,136136,136137],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[402,136139,136141],{"id":136140},"_1114-定位数值的移动","11.1.4 定位数值的移动",[438,136143],{"style":128977,"src":136144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,136146,136147],{},"✨ 黄金口诀：",[19,136149,136150],{},"\"TOP正下负上，LEFT正右负左\"",[19,136152,136153],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,136155,136156],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,136158,136159],{},"✨ 简单记：",[19,136161,136162],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[3384,136164,136165],{},"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":36,"searchDepth":54,"depth":54,"links":136167},[136168],{"id":134695,"depth":54,"text":134696,"children":136169},[136170,136171,136172,136173],{"id":134699,"depth":70,"text":134700},{"id":134714,"depth":70,"text":134715},{"id":134882,"depth":70,"text":134883},{"id":136140,"depth":70,"text":136141},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":134687,"description":3413},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":136180,"title":136181,"body":136182,"description":3413,"extension":3414,"meta":137605,"navigation":1412,"path":137606,"seo":137607,"stem":137608,"__hash__":137609},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":136183,"toc":137584},[136184,136187,136191,136199,136203,136208,136216,136228,136232,136237,136245,136256,136260,136265,136306,136314,136318,136321,136324,136327,136421,136424,136518,136521,136615,136618,136621,136656,136659,136662,136692,136695,136698,136701,136704,136707,136710,136713,136783,136786,136790,136794,136835,136839,136845,136848,136851,136855,136858,136861,136864,136945,136948,136951,136955,136959,136962,136965,136968,136971,136974,136980,136989,136993,137012,137016,137026,137029,137032,137035,137038,137041,137044,137047,137050,137059,137063,137072,137075,137080,137133,137138,137304,137307,137310,137315,137318,137321,137324,137327,137332,137480,137483,137486,137491,137494,137499,137533,137536,137539,137543,137546,137553,137556,137559,137562,137565,137568,137571,137574,137578,137581],[10,136185,136181],{"id":136186},"_12-显示隐藏与图形资源",[14,136188,136190],{"id":136189},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1338,136192,136193,136196],{},[495,136194,136195],{},"目的:让一个元素在页面中消失或者显示出来",[495,136197,136198],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[402,136200,136202],{"id":136201},"_1211-display-显示","12.1.1 display 显示",[492,136204,136205],{},[495,136206,136207],{},"display 设置或检索对象是否及如何显示",[1338,136209,136210,136213],{},[495,136211,136212],{},"display: none;隐藏对象",[495,136214,136215],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[492,136217,136218,136225],{"start":54},[495,136219,136220,136221,136224],{},"特点： display 隐藏元素后， ",[409,136222,136223],{},"不再占"," 有原来的位置",[495,136226,136227],{},"在js中使用非常的广泛",[402,136229,136231],{"id":136230},"_1212-visibility可见性","12.1.2 visibility可见性",[492,136233,136234],{},[495,136235,136236],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1338,136238,136239,136242],{},[495,136240,136241],{},"visibility： visible；元素可见",[495,136243,136244],{},"visibility：hidden；元素隐藏",[492,136246,136247,136250,136253],{"start":54},[495,136248,136249],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[495,136251,136252],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[495,136254,136255],{},"隐藏后继续占有原有位置",[402,136257,136259],{"id":136258},"_1213-overflow溢出","12.1.3 overflow溢出",[1338,136261,136262],{},[495,136263,136264],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[3619,136266,136267,136275],{},[3622,136268,136269],{},[3625,136270,136271,136273],{},[3628,136272,129585],{"align":27055},[3628,136274,30794],{"align":27055},[3665,136276,136277,136285,136292,136299],{},[3625,136278,136279,136282],{},[3670,136280,136281],{"align":27055},"visible",[3670,136283,136284],{"align":27055},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[3625,136286,136287,136289],{},[3670,136288,65012],{"align":27055},[3670,136290,136291],{"align":27055},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[3625,136293,136294,136296],{},[3670,136295,131541],{"align":27055},[3670,136297,136298],{"align":27055},"不管超出内容否，总是显示滚动条",[3625,136300,136301,136303],{},[3670,136302,75958],{"align":27055},[3670,136304,136305],{"align":27055},"超出自动显示滚动条，不超出不显示滚动条",[1338,136307,136308,136311],{},[495,136309,136310],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[495,136312,136313],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[402,136315,136317],{"id":136316},"_1214-案例收获","12.1.4 案例收获",[438,136319],{"style":128977,"src":136320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,136322,136323],{},"问题：没做出来动态效果，使用hover没实现",[19,136325,136326],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[31,136328,136329],{"className":129121,"code":134553,"language":129123,"meta":36,"style":36},[26,136330,136331,136335,136349,136353,136367,136371,136385,136389,136403,136407],{"__ignoreMap":36},[40,136332,136333],{"class":42,"line":43},[40,136334,134560],{"class":997},[40,136336,136337,136339,136341,136343,136345,136347],{"class":42,"line":54},[40,136338,134565],{"class":596},[40,136340,83102],{"class":50},[40,136342,131481],{"class":63},[40,136344,60],{"class":50},[40,136346,134574],{"class":63},[40,136348,132051],{"class":50},[40,136350,136351],{"class":42,"line":70},[40,136352,134581],{"class":997},[40,136354,136355,136357,136359,136361,136363,136365],{"class":42,"line":78},[40,136356,134586],{"class":596},[40,136358,83102],{"class":50},[40,136360,131481],{"class":63},[40,136362,60],{"class":50},[40,136364,58062],{"class":63},[40,136366,132051],{"class":50},[40,136368,136369],{"class":42,"line":86},[40,136370,134601],{"class":997},[40,136372,136373,136375,136377,136379,136381,136383],{"class":42,"line":100},[40,136374,134606],{"class":596},[40,136376,83102],{"class":50},[40,136378,131481],{"class":63},[40,136380,60],{"class":50},[40,136382,58129],{"class":63},[40,136384,132051],{"class":50},[40,136386,136387],{"class":42,"line":108},[40,136388,134621],{"class":997},[40,136390,136391,136393,136395,136397,136399,136401],{"class":42,"line":121},[40,136392,134626],{"class":596},[40,136394,83102],{"class":50},[40,136396,131481],{"class":63},[40,136398,60],{"class":50},[40,136400,89528],{"class":63},[40,136402,132051],{"class":50},[40,136404,136405],{"class":42,"line":134},[40,136406,134641],{"class":997},[40,136408,136409,136411,136413,136415,136417,136419],{"class":42,"line":146},[40,136410,134646],{"class":596},[40,136412,83102],{"class":50},[40,136414,131481],{"class":63},[40,136416,60],{"class":50},[40,136418,134655],{"class":63},[40,136420,132051],{"class":50},[19,136422,136423],{},"完整代码：",[31,136425,136426],{"className":129121,"code":134553,"language":129123,"meta":36,"style":36},[26,136427,136428,136432,136446,136450,136464,136468,136482,136486,136500,136504],{"__ignoreMap":36},[40,136429,136430],{"class":42,"line":43},[40,136431,134560],{"class":997},[40,136433,136434,136436,136438,136440,136442,136444],{"class":42,"line":54},[40,136435,134565],{"class":596},[40,136437,83102],{"class":50},[40,136439,131481],{"class":63},[40,136441,60],{"class":50},[40,136443,134574],{"class":63},[40,136445,132051],{"class":50},[40,136447,136448],{"class":42,"line":70},[40,136449,134581],{"class":997},[40,136451,136452,136454,136456,136458,136460,136462],{"class":42,"line":78},[40,136453,134586],{"class":596},[40,136455,83102],{"class":50},[40,136457,131481],{"class":63},[40,136459,60],{"class":50},[40,136461,58062],{"class":63},[40,136463,132051],{"class":50},[40,136465,136466],{"class":42,"line":86},[40,136467,134601],{"class":997},[40,136469,136470,136472,136474,136476,136478,136480],{"class":42,"line":100},[40,136471,134606],{"class":596},[40,136473,83102],{"class":50},[40,136475,131481],{"class":63},[40,136477,60],{"class":50},[40,136479,58129],{"class":63},[40,136481,132051],{"class":50},[40,136483,136484],{"class":42,"line":108},[40,136485,134621],{"class":997},[40,136487,136488,136490,136492,136494,136496,136498],{"class":42,"line":121},[40,136489,134626],{"class":596},[40,136491,83102],{"class":50},[40,136493,131481],{"class":63},[40,136495,60],{"class":50},[40,136497,89528],{"class":63},[40,136499,132051],{"class":50},[40,136501,136502],{"class":42,"line":134},[40,136503,134641],{"class":997},[40,136505,136506,136508,136510,136512,136514,136516],{"class":42,"line":146},[40,136507,134646],{"class":596},[40,136509,83102],{"class":50},[40,136511,131481],{"class":63},[40,136513,60],{"class":50},[40,136515,134655],{"class":63},[40,136517,132051],{"class":50},[19,136519,136520],{},"分布思路重点详解：",[31,136522,136523],{"className":129121,"code":134553,"language":129123,"meta":36,"style":36},[26,136524,136525,136529,136543,136547,136561,136565,136579,136583,136597,136601],{"__ignoreMap":36},[40,136526,136527],{"class":42,"line":43},[40,136528,134560],{"class":997},[40,136530,136531,136533,136535,136537,136539,136541],{"class":42,"line":54},[40,136532,134565],{"class":596},[40,136534,83102],{"class":50},[40,136536,131481],{"class":63},[40,136538,60],{"class":50},[40,136540,134574],{"class":63},[40,136542,132051],{"class":50},[40,136544,136545],{"class":42,"line":70},[40,136546,134581],{"class":997},[40,136548,136549,136551,136553,136555,136557,136559],{"class":42,"line":78},[40,136550,134586],{"class":596},[40,136552,83102],{"class":50},[40,136554,131481],{"class":63},[40,136556,60],{"class":50},[40,136558,58062],{"class":63},[40,136560,132051],{"class":50},[40,136562,136563],{"class":42,"line":86},[40,136564,134601],{"class":997},[40,136566,136567,136569,136571,136573,136575,136577],{"class":42,"line":100},[40,136568,134606],{"class":596},[40,136570,83102],{"class":50},[40,136572,131481],{"class":63},[40,136574,60],{"class":50},[40,136576,58129],{"class":63},[40,136578,132051],{"class":50},[40,136580,136581],{"class":42,"line":108},[40,136582,134621],{"class":997},[40,136584,136585,136587,136589,136591,136593,136595],{"class":42,"line":121},[40,136586,134626],{"class":596},[40,136588,83102],{"class":50},[40,136590,131481],{"class":63},[40,136592,60],{"class":50},[40,136594,89528],{"class":63},[40,136596,132051],{"class":50},[40,136598,136599],{"class":42,"line":134},[40,136600,134641],{"class":997},[40,136602,136603,136605,136607,136609,136611,136613],{"class":42,"line":146},[40,136604,134646],{"class":596},[40,136606,83102],{"class":50},[40,136608,131481],{"class":63},[40,136610,60],{"class":50},[40,136612,134655],{"class":63},[40,136614,132051],{"class":50},[438,136616],{"style":128977,"src":136617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,136619,136620],{},"图片太大，盒子太小，此时需要修改图片的大小",[31,136622,136624],{"className":129868,"code":136623,"language":129870,"meta":36,"style":36},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[26,136625,136626],{"__ignoreMap":36},[40,136627,136628,136630,136632,136634,136636,136639,136641,136643,136646,136649,136651,136654],{"class":42,"line":43},[40,136629,4387],{"class":50},[40,136631,438],{"class":46},[40,136633,58537],{"class":596},[40,136635,1284],{"class":50},[40,136637,136638],{"class":94},"\"images\u002Fpic.jpg\"",[40,136640,58545],{"class":596},[40,136642,1284],{"class":50},[40,136644,136645],{"class":94},"\"描述文字\"",[40,136647,136648],{"class":596}," title",[40,136650,1284],{"class":50},[40,136652,136653],{"class":94},"\"悬停提示\"",[40,136655,54606],{"class":50},[438,136657],{"style":128977,"src":136658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,136660,136661],{},"制造遮罩层",[31,136663,136664],{"className":129868,"code":136623,"language":129870,"meta":36,"style":36},[26,136665,136666],{"__ignoreMap":36},[40,136667,136668,136670,136672,136674,136676,136678,136680,136682,136684,136686,136688,136690],{"class":42,"line":43},[40,136669,4387],{"class":50},[40,136671,438],{"class":46},[40,136673,58537],{"class":596},[40,136675,1284],{"class":50},[40,136677,136638],{"class":94},[40,136679,58545],{"class":596},[40,136681,1284],{"class":50},[40,136683,136645],{"class":94},[40,136685,136648],{"class":596},[40,136687,1284],{"class":50},[40,136689,136653],{"class":94},[40,136691,54606],{"class":50},[19,136693,136694],{},"此时是这样的为标准流",[438,136696],{"style":128977,"src":136697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,136699,136700],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,136702,136703],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,136705,136706],{},"让他在中间，用center(background-position)",[19,136708,136709],{},"将需要变的尽可能放到一个盒子中",[19,136711,136712],{},"放大盒子上内部盒子发生变化",[31,136714,136716],{"className":129121,"code":136715,"language":129123,"meta":36,"style":36},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[26,136717,136718,136724,136734,136738,136745,136755,136767,136779],{"__ignoreMap":36},[40,136719,136720,136722],{"class":42,"line":43},[40,136721,130188],{"class":596},[40,136723,18894],{"class":50},[40,136725,136726,136728,136730,136732],{"class":42,"line":54},[40,136727,134927],{"class":63},[40,136729,60],{"class":50},[40,136731,58062],{"class":63},[40,136733,4637],{"class":50},[40,136735,136736],{"class":42,"line":70},[40,136737,4907],{"class":50},[40,136739,136740,136743],{"class":42,"line":78},[40,136741,136742],{"class":596},".child",[40,136744,18894],{"class":50},[40,136746,136747,136749,136751,136753],{"class":42,"line":86},[40,136748,134927],{"class":63},[40,136750,60],{"class":50},[40,136752,58129],{"class":63},[40,136754,4637],{"class":50},[40,136756,136757,136759,136761,136763,136765],{"class":42,"line":100},[40,136758,134941],{"class":63},[40,136760,60],{"class":50},[40,136762,4134],{"class":63},[40,136764,3808],{"class":1283},[40,136766,4637],{"class":50},[40,136768,136769,136771,136773,136775,136777],{"class":42,"line":108},[40,136770,134958],{"class":63},[40,136772,60],{"class":50},[40,136774,4134],{"class":63},[40,136776,3808],{"class":1283},[40,136778,4637],{"class":50},[40,136780,136781],{"class":42,"line":121},[40,136782,4907],{"class":50},[19,136784,136785],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,136787,136789],{"id":136788},"_122-精灵图","12.2 精灵图",[402,136791,136793],{"id":136792},"_1221-理解","12.2.1 理解",[492,136795,136796,136814],{},[495,136797,136798,136799,135027,136802,136805,136806,136809,136810,136813],{},"目的： ",[409,136800,136801],{},"为了有效地减少服务器接收和发送请求的次数",[409,136803,136804],{},"提高"," 页面的 ",[409,136807,136808],{},"加载速度"," ，出现了 ",[409,136811,136812],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[495,136815,136816,136817,136819,136820,136822,136823,136825,136826,136828,136829,136831,136832,136834],{},"使用精灵图核心：",[57014,136818],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[57014,136821],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[57014,136824],{},"  ③移动背景图片位置， 此时可以使用 background-position",[57014,136827],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[57014,136830],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[57014,136833],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[402,136836,136838],{"id":136837},"_1222-扒图","12.2.2 扒图",[31,136840,136843],{"className":136841,"code":136842,"language":8510},[8508],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[26,136844,136842],{"__ignoreMap":36},[438,136846],{"style":128977,"src":136847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[438,136849],{"style":128977,"src":136850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[402,136852,136854],{"id":136853},"_1223-精灵图的实现","12.2.3 精灵图的实现",[438,136856],{"style":128977,"src":136857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,136859,136860],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[438,136862],{"style":128977,"src":136863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[31,136865,136867],{"className":129121,"code":136866,"language":129123,"meta":36,"style":36},"\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",[26,136868,136869,136874,136881,136893,136905,136924,136941],{"__ignoreMap":36},[40,136870,136871],{"class":42,"line":43},[40,136872,136873],{"class":997},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[40,136875,136876,136879],{"class":42,"line":54},[40,136877,136878],{"class":596},".icon",[40,136880,18894],{"class":50},[40,136882,136883,136885,136887,136889,136891],{"class":42,"line":70},[40,136884,73864],{"class":63},[40,136886,60],{"class":50},[40,136888,4178],{"class":63},[40,136890,54790],{"class":1283},[40,136892,4637],{"class":50},[40,136894,136895,136897,136899,136901,136903],{"class":42,"line":78},[40,136896,74084],{"class":63},[40,136898,60],{"class":50},[40,136900,4178],{"class":63},[40,136902,54790],{"class":1283},[40,136904,4637],{"class":50},[40,136906,136907,136909,136911,136913,136915,136918,136920,136922],{"class":42,"line":86},[40,136908,73907],{"class":63},[40,136910,60],{"class":50},[40,136912,65024],{"class":63},[40,136914,3488],{"class":50},[40,136916,136917],{"class":8539},"sprites.png",[40,136919,17036],{"class":50},[40,136921,65034],{"class":63},[40,136923,4637],{"class":50},[40,136925,136926,136928,136930,136932,136934,136937,136939],{"class":42,"line":100},[40,136927,131381],{"class":63},[40,136929,60],{"class":50},[40,136931,55061],{"class":63},[40,136933,54790],{"class":1283},[40,136935,136936],{"class":63}," -20",[40,136938,54790],{"class":1283},[40,136940,4637],{"class":50},[40,136942,136943],{"class":42,"line":108},[40,136944,4907],{"class":50},[438,136946],{"style":128977,"src":136947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,136949,136950],{},"在前端中坐标轴的正方向是右和下",[14,136952,136954],{"id":136953},"_123-字体图标","12.3 字体图标",[402,136956,136958],{"id":136957},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,136960,136961],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,136963,136964],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,136966,136967],{},"1.图片文件还是比较大的。",[19,136969,136970],{},"2.图片本身放大和缩小会失真。",[19,136972,136973],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,136975,136976,136977,29053],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[409,136978,136979],{},"字体图标 iconfont",[19,136981,136982,136985,136986,776],{},[409,136983,136984],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[409,136987,136988],{},"展示的是图标，本质属于字体",[402,136990,136992],{"id":136991},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1338,136994,136995,137000,137003,137006,137009],{},[495,136996,136997,136999],{},[409,136998,29188],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[495,137001,137002],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[495,137004,137005],{},"兼容性：几乎支持所有的浏览器，请放心使用",[495,137007,137008],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[495,137010,137011],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[402,137013,137015],{"id":137014},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1338,137017,137018],{},[495,137019,137020,137021],{},"icomoon字体库：",[2106,137022,137025],{"href":137023,"rel":137024},"http:\u002F\u002Ficomoon.io\u002F",[2110],"http:\u002F\u002Ficomoon.io",[19,137027,137028],{},"进去之后点icomoon app",[438,137030],{"style":128977,"src":137031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,137033,137034],{},"可以对其编辑：",[438,137036],{"style":128977,"src":137037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,137039,137040],{},"生成字体：",[438,137042],{"style":128977,"src":137043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,137045,137046],{},"下载：",[438,137048],{"style":128977,"src":137049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1338,137051,137052],{},[495,137053,137054,137055],{},"阿里iconfont字体库： ",[2106,137056,137057],{"href":137057,"rel":137058},"http:\u002F\u002Fwww.iconfont.cn\u002F",[2110],[402,137060,137062],{"id":137061},"_1234-字体图标的引入","12.3.4 字体图标的引入",[492,137064,137065],{},[495,137066,137067,137068,137071],{},"把下载包里面的 ",[409,137069,137070],{},"fonts"," 文件夹放入页面根目录下",[438,137073],{"style":128977,"src":137074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[492,137076,137077],{"start":54},[495,137078,137079],{},"字体文件格式",[3619,137081,137082,137091],{},[3622,137083,137084],{},[3625,137085,137086,137089],{},[3628,137087,137088],{"align":27055},"格式",[3628,137090,27059],{"align":27055},[3665,137092,137093,137103,137113,137123],{},[3625,137094,137095,137100],{},[3670,137096,137097],{"align":27055},[409,137098,137099],{},".ttf",[3670,137101,137102],{"align":27055},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[3625,137104,137105,137110],{},[3670,137106,137107],{"align":27055},[409,137108,137109],{},".woff",[3670,137111,137112],{"align":27055},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[3625,137114,137115,137120],{},[3670,137116,137117],{"align":27055},[409,137118,137119],{},".eot",[3670,137121,137122],{"align":27055},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[3625,137124,137125,137130],{},[3670,137126,137127],{"align":27055},[409,137128,137129],{},"svg",[3670,137131,137132],{"align":27055},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[492,137134,137135],{"start":70},[495,137136,137137],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[31,137139,137141],{"className":129121,"code":137140,"language":129123,"meta":36,"style":36},"\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",[26,137142,137143,137148,137155,137167,137183,137208,137229,137249,137269,137273,137279,137289,137300],{"__ignoreMap":36},[40,137144,137145],{"class":42,"line":43},[40,137146,137147],{"class":997},"\u002F* 引入字体图标 *\u002F\n",[40,137149,137150,137153],{"class":42,"line":54},[40,137151,137152],{"class":1283},"@font-face",[40,137154,18894],{"class":50},[40,137156,137157,137160,137162,137165],{"class":42,"line":70},[40,137158,137159],{"class":63},"  font-family",[40,137161,60],{"class":50},[40,137163,137164],{"class":94},"'icomoon'",[40,137166,4637],{"class":50},[40,137168,137169,137172,137174,137176,137178,137181],{"class":42,"line":78},[40,137170,137171],{"class":63},"  src",[40,137173,60],{"class":50},[40,137175,65024],{"class":63},[40,137177,3488],{"class":50},[40,137179,137180],{"class":94},"'fonts\u002Ficomoon.eot'",[40,137182,6043],{"class":50},[40,137184,137185,137187,137189,137191,137193,137196,137198,137201,137203,137206],{"class":42,"line":86},[40,137186,137171],{"class":63},[40,137188,60],{"class":50},[40,137190,65024],{"class":63},[40,137192,3488],{"class":50},[40,137194,137195],{"class":94},"'fonts\u002Ficomoon.eot?#iefix'",[40,137197,17036],{"class":50},[40,137199,137200],{"class":63},"format",[40,137202,3488],{"class":50},[40,137204,137205],{"class":94},"'embedded-opentype'",[40,137207,41347],{"class":50},[40,137209,137210,137213,137215,137218,137220,137222,137224,137227],{"class":42,"line":100},[40,137211,137212],{"class":63},"       url",[40,137214,3488],{"class":50},[40,137216,137217],{"class":94},"'fonts\u002Ficomoon.woff'",[40,137219,17036],{"class":50},[40,137221,137200],{"class":63},[40,137223,3488],{"class":50},[40,137225,137226],{"class":94},"'woff'",[40,137228,41347],{"class":50},[40,137230,137231,137233,137235,137238,137240,137242,137244,137247],{"class":42,"line":108},[40,137232,137212],{"class":63},[40,137234,3488],{"class":50},[40,137236,137237],{"class":94},"'fonts\u002Ficomoon.ttf'",[40,137239,17036],{"class":50},[40,137241,137200],{"class":63},[40,137243,3488],{"class":50},[40,137245,137246],{"class":94},"'truetype'",[40,137248,41347],{"class":50},[40,137250,137251,137253,137255,137258,137260,137262,137264,137267],{"class":42,"line":121},[40,137252,137212],{"class":63},[40,137254,3488],{"class":50},[40,137256,137257],{"class":94},"'fonts\u002Ficomoon.svg#icomoon'",[40,137259,17036],{"class":50},[40,137261,137200],{"class":63},[40,137263,3488],{"class":50},[40,137265,137266],{"class":94},"'svg'",[40,137268,6043],{"class":50},[40,137270,137271],{"class":42,"line":134},[40,137272,4907],{"class":50},[40,137274,137275,137277],{"class":42,"line":146},[40,137276,136878],{"class":596},[40,137278,18894],{"class":50},[40,137280,137281,137283,137285,137287],{"class":42,"line":154},[40,137282,137159],{"class":63},[40,137284,60],{"class":50},[40,137286,137164],{"class":94},[40,137288,4637],{"class":50},[40,137290,137291,137294,137296,137298],{"class":42,"line":162},[40,137292,137293],{"class":63},"  font-style",[40,137295,60],{"class":50},[40,137297,67139],{"class":63},[40,137299,4637],{"class":50},[40,137301,137302],{"class":42,"line":170},[40,137303,4907],{"class":50},[19,137305,137306],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[438,137308],{"style":128977,"src":137309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[492,137311,137312],{"start":78},[495,137313,137314],{},"添加字体",[438,137316],{"style":128977,"src":137317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,137319,137320],{},"复制：",[438,137322],{"style":128977,"src":137323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,137325,137326],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[492,137328,137329],{"start":86},[495,137330,137331],{},"代码展示：",[31,137333,137334],{"className":129121,"code":137140,"language":129123,"meta":36,"style":36},[26,137335,137336,137340,137346,137356,137370,137392,137410,137428,137446,137450,137456,137466,137476],{"__ignoreMap":36},[40,137337,137338],{"class":42,"line":43},[40,137339,137147],{"class":997},[40,137341,137342,137344],{"class":42,"line":54},[40,137343,137152],{"class":1283},[40,137345,18894],{"class":50},[40,137347,137348,137350,137352,137354],{"class":42,"line":70},[40,137349,137159],{"class":63},[40,137351,60],{"class":50},[40,137353,137164],{"class":94},[40,137355,4637],{"class":50},[40,137357,137358,137360,137362,137364,137366,137368],{"class":42,"line":78},[40,137359,137171],{"class":63},[40,137361,60],{"class":50},[40,137363,65024],{"class":63},[40,137365,3488],{"class":50},[40,137367,137180],{"class":94},[40,137369,6043],{"class":50},[40,137371,137372,137374,137376,137378,137380,137382,137384,137386,137388,137390],{"class":42,"line":86},[40,137373,137171],{"class":63},[40,137375,60],{"class":50},[40,137377,65024],{"class":63},[40,137379,3488],{"class":50},[40,137381,137195],{"class":94},[40,137383,17036],{"class":50},[40,137385,137200],{"class":63},[40,137387,3488],{"class":50},[40,137389,137205],{"class":94},[40,137391,41347],{"class":50},[40,137393,137394,137396,137398,137400,137402,137404,137406,137408],{"class":42,"line":100},[40,137395,137212],{"class":63},[40,137397,3488],{"class":50},[40,137399,137217],{"class":94},[40,137401,17036],{"class":50},[40,137403,137200],{"class":63},[40,137405,3488],{"class":50},[40,137407,137226],{"class":94},[40,137409,41347],{"class":50},[40,137411,137412,137414,137416,137418,137420,137422,137424,137426],{"class":42,"line":108},[40,137413,137212],{"class":63},[40,137415,3488],{"class":50},[40,137417,137237],{"class":94},[40,137419,17036],{"class":50},[40,137421,137200],{"class":63},[40,137423,3488],{"class":50},[40,137425,137246],{"class":94},[40,137427,41347],{"class":50},[40,137429,137430,137432,137434,137436,137438,137440,137442,137444],{"class":42,"line":121},[40,137431,137212],{"class":63},[40,137433,3488],{"class":50},[40,137435,137257],{"class":94},[40,137437,17036],{"class":50},[40,137439,137200],{"class":63},[40,137441,3488],{"class":50},[40,137443,137266],{"class":94},[40,137445,6043],{"class":50},[40,137447,137448],{"class":42,"line":134},[40,137449,4907],{"class":50},[40,137451,137452,137454],{"class":42,"line":146},[40,137453,136878],{"class":596},[40,137455,18894],{"class":50},[40,137457,137458,137460,137462,137464],{"class":42,"line":154},[40,137459,137159],{"class":63},[40,137461,60],{"class":50},[40,137463,137164],{"class":94},[40,137465,4637],{"class":50},[40,137467,137468,137470,137472,137474],{"class":42,"line":162},[40,137469,137293],{"class":63},[40,137471,60],{"class":50},[40,137473,67139],{"class":63},[40,137475,4637],{"class":50},[40,137477,137478],{"class":42,"line":170},[40,137479,4907],{"class":50},[438,137481],{"style":128977,"src":137482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,137484,137485],{},"更加细节展示：",[492,137487,137488],{},[495,137489,137490],{},"html 标签内添加小图标",[438,137492],{"style":128977,"src":137493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[492,137495,137496],{"start":54},[495,137497,137498],{},"给标签定义字体",[31,137500,137501],{"className":129868,"code":133225,"language":129870,"meta":36,"style":36},[26,137502,137503,137507,137521,137525],{"__ignoreMap":36},[40,137504,137505],{"class":42,"line":43},[40,137506,133232],{"class":997},[40,137508,137509,137511,137513,137515,137517,137519],{"class":42,"line":54},[40,137510,4387],{"class":50},[40,137512,54909],{"class":46},[40,137514,56784],{"class":596},[40,137516,1284],{"class":50},[40,137518,133245],{"class":94},[40,137520,54606],{"class":50},[40,137522,137523],{"class":42,"line":70},[40,137524,133252],{"class":50},[40,137526,137527,137529,137531],{"class":42,"line":78},[40,137528,55083],{"class":50},[40,137530,54909],{"class":46},[40,137532,54606],{"class":50},[19,137534,137535],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[438,137537],{"style":128977,"src":137538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[402,137540,137542],{"id":137541},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,137544,137545],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,137547,137548,137549,137552],{},"把压缩包里面的 ",[409,137550,137551],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,137554,137555],{},"打开网站，点下方：",[438,137557],{"style":128977,"src":137558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[438,137560],{"style":128977,"src":137561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[438,137563],{"style":128977,"src":137564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,137566,137567],{},"点yes重新加载",[19,137569,137570],{},"然后重复之前的操作就可以实现了",[19,137572,137573],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[402,137575,137577],{"id":137576},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[438,137579],{"style":128977,"src":137580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[3384,137582,137583],{},"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":36,"searchDepth":54,"depth":54,"links":137585},[137586,137592,137597],{"id":136189,"depth":54,"text":136190,"children":137587},[137588,137589,137590,137591],{"id":136201,"depth":70,"text":136202},{"id":136230,"depth":70,"text":136231},{"id":136258,"depth":70,"text":136259},{"id":136316,"depth":70,"text":136317},{"id":136788,"depth":54,"text":136789,"children":137593},[137594,137595,137596],{"id":136792,"depth":70,"text":136793},{"id":136837,"depth":70,"text":136838},{"id":136853,"depth":70,"text":136854},{"id":136953,"depth":54,"text":136954,"children":137598},[137599,137600,137601,137602,137603,137604],{"id":136957,"depth":70,"text":136958},{"id":136991,"depth":70,"text":136992},{"id":137014,"depth":70,"text":137015},{"id":137061,"depth":70,"text":137062},{"id":137541,"depth":70,"text":137542},{"id":137576,"depth":70,"text":137577},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":136181,"description":3413},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":137611,"title":137612,"body":137613,"description":3413,"extension":3414,"meta":138840,"navigation":1412,"path":138841,"seo":138842,"stem":138843,"__hash__":138844},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":137614,"toc":138821},[137615,137618,137622,137625,137639,137707,137737,137740,137744,137748,137850,137897,137901,137904,137907,137941,137944,137947,137950,137953,137956,137959,137962,137964,137967,137970,137973,137976,137979,137982,137985,138013,138016,138020,138023,138030,138033,138036,138062,138065,138069,138072,138075,138082,138086,138089,138091,138123,138126,138129,138141,138147,138150,138153,138156,138158,138162,138165,138168,138171,138216,138220,138222,138225,138232,138274,138277,138281,138286,138300,138304,138307,138310,138313,138316,138319,138353,138356,138359,138413,138416,138419,138422,138425,138477,138480,138483,138532,138536,138538,138541,138544,138547,138550,138553,138611,138614,138620,138623,138626,138658,138661,138665,138669,138672,138704,138708,138711,138755,138759,138762,138765,138768,138771,138774,138777,138780,138782,138785,138787,138790,138793,138796,138799,138804,138807,138809,138812,138815,138818],[10,137616,137612],{"id":137617},"_13-界面样式与布局技巧",[14,137619,137621],{"id":137620},"_131-css三角","13.1 css三角",[19,137623,137624],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1338,137626,137627,137630,137633,137636],{},[495,137628,137629],{},"用css 边框可以模拟三角效果",[495,137631,137632],{},"宽度高度为0",[495,137634,137635],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[495,137637,137638],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[31,137640,137642],{"className":129121,"code":137641,"language":129123,"meta":36,"style":36},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[26,137643,137644,137649,137656,137666,137676,137692,137703],{"__ignoreMap":36},[40,137645,137646],{"class":42,"line":43},[40,137647,137648],{"class":997},"\u002F* CSS 实现三角形 *\u002F\n",[40,137650,137651,137654],{"class":42,"line":54},[40,137652,137653],{"class":596},".triangle",[40,137655,18894],{"class":50},[40,137657,137658,137660,137662,137664],{"class":42,"line":70},[40,137659,73864],{"class":63},[40,137661,60],{"class":50},[40,137663,3672],{"class":63},[40,137665,4637],{"class":50},[40,137667,137668,137670,137672,137674],{"class":42,"line":78},[40,137669,74084],{"class":63},[40,137671,60],{"class":50},[40,137673,3672],{"class":63},[40,137675,4637],{"class":50},[40,137677,137678,137680,137682,137684,137686,137688,137690],{"class":42,"line":86},[40,137679,74192],{"class":63},[40,137681,60],{"class":50},[40,137683,3925],{"class":63},[40,137685,54790],{"class":1283},[40,137687,54819],{"class":63},[40,137689,67289],{"class":63},[40,137691,4637],{"class":50},[40,137693,137694,137697,137699,137701],{"class":42,"line":100},[40,137695,137696],{"class":63},"  border-bottom-color",[40,137698,60],{"class":50},[40,137700,65667],{"class":63},[40,137702,4637],{"class":50},[40,137704,137705],{"class":42,"line":108},[40,137706,4907],{"class":50},[31,137708,137709],{"className":129121,"code":133278,"language":129123,"meta":36,"style":36},[26,137710,137711,137717,137733],{"__ignoreMap":36},[40,137712,137713,137715],{"class":42,"line":43},[40,137714,54909],{"class":46},[40,137716,18894],{"class":50},[40,137718,137719,137721,137723,137725,137727,137729,137731],{"class":42,"line":54},[40,137720,74192],{"class":63},[40,137722,60],{"class":50},[40,137724,3698],{"class":63},[40,137726,54790],{"class":1283},[40,137728,54819],{"class":63},[40,137730,132513],{"class":63},[40,137732,4637],{"class":50},[40,137734,137735],{"class":42,"line":70},[40,137736,4907],{"class":50},[438,137738],{"style":128977,"src":137739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,137741,137743],{"id":137742},"_132-css用户界面样式","13.2 css用户界面样式",[402,137745,137747],{"id":137746},"_1321-鼠标样式","13.2.1 鼠标样式",[31,137749,137751],{"className":129121,"code":137750,"language":129123,"meta":36,"style":36},"\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",[26,137752,137753,137758,137777,137795,137814,137831],{"__ignoreMap":36},[40,137754,137755],{"class":42,"line":43},[40,137756,137757],{"class":997},"\u002F* 鼠标样式 *\u002F\n",[40,137759,137760,137762,137764,137767,137769,137771,137774],{"class":42,"line":54},[40,137761,54909],{"class":46},[40,137763,83102],{"class":50},[40,137765,137766],{"class":63},"cursor",[40,137768,60],{"class":50},[40,137770,65328],{"class":63},[40,137772,137773],{"class":50},"; }   ",[40,137775,137776],{"class":997},"\u002F* 手型 *\u002F\n",[40,137778,137779,137781,137783,137785,137787,137790,137792],{"class":42,"line":70},[40,137780,54909],{"class":46},[40,137782,83102],{"class":50},[40,137784,137766],{"class":63},[40,137786,60],{"class":50},[40,137788,137789],{"class":63},"default",[40,137791,137773],{"class":50},[40,137793,137794],{"class":997},"\u002F* 默认 *\u002F\n",[40,137796,137797,137799,137801,137803,137805,137808,137811],{"class":42,"line":78},[40,137798,54909],{"class":46},[40,137800,83102],{"class":50},[40,137802,137766],{"class":63},[40,137804,60],{"class":50},[40,137806,137807],{"class":63},"move",[40,137809,137810],{"class":50},"; }      ",[40,137812,137813],{"class":997},"\u002F* 移动 *\u002F\n",[40,137815,137816,137818,137820,137822,137824,137826,137828],{"class":42,"line":86},[40,137817,54909],{"class":46},[40,137819,83102],{"class":50},[40,137821,137766],{"class":63},[40,137823,60],{"class":50},[40,137825,8510],{"class":63},[40,137827,137810],{"class":50},[40,137829,137830],{"class":997},"\u002F* 文本 *\u002F\n",[40,137832,137833,137835,137837,137839,137841,137844,137847],{"class":42,"line":100},[40,137834,54909],{"class":46},[40,137836,83102],{"class":50},[40,137838,137766],{"class":63},[40,137840,60],{"class":50},[40,137842,137843],{"class":63},"not-allowed",[40,137845,137846],{"class":50},"; } ",[40,137848,137849],{"class":997},"\u002F* 禁止 *\u002F\n",[3619,137851,137852,137860],{},[3622,137853,137854],{},[3625,137855,137856,137858],{},[3628,137857,129585],{"align":27055},[3628,137859,30794],{"align":27055},[3665,137861,137862,137869,137876,137883,137890],{},[3625,137863,137864,137866],{},[3670,137865,137789],{"align":27055},[3670,137867,137868],{"align":27055},"小白 默认",[3625,137870,137871,137873],{},[3670,137872,65328],{"align":27055},[3670,137874,137875],{"align":27055},"小手",[3625,137877,137878,137880],{},[3670,137879,137807],{"align":27055},[3670,137881,137882],{"align":27055},"移动",[3625,137884,137885,137887],{},[3670,137886,8510],{"align":27055},[3670,137888,137889],{"align":27055},"文本",[3625,137891,137892,137894],{},[3670,137893,137843],{"align":27055},[3670,137895,137896],{"align":27055},"禁止",[402,137898,137900],{"id":137899},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,137902,137903],{},"去除表单轮廓线",[19,137905,137906],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[31,137908,137909],{"className":129121,"code":132485,"language":129123,"meta":36,"style":36},[26,137910,137911,137915,137921,137937],{"__ignoreMap":36},[40,137912,137913],{"class":42,"line":43},[40,137914,132492],{"class":997},[40,137916,137917,137919],{"class":42,"line":54},[40,137918,54909],{"class":46},[40,137920,18894],{"class":50},[40,137922,137923,137925,137927,137929,137931,137933,137935],{"class":42,"line":70},[40,137924,74192],{"class":63},[40,137926,60],{"class":50},[40,137928,3698],{"class":63},[40,137930,54790],{"class":1283},[40,137932,54819],{"class":63},[40,137934,132513],{"class":63},[40,137936,4637],{"class":50},[40,137938,137939],{"class":42,"line":78},[40,137940,4907],{"class":50},[19,137942,137943],{},"文本域：",[438,137945],{"style":128977,"src":137946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,137948,137949],{},"此时会有一个空白区域",[438,137951],{"style":128977,"src":137952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,137954,137955],{},"写在同一行就不会出现这个问题",[438,137957],{"style":128977,"src":137958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,137960,137961],{},"文本域是行内块元素，一定记住！！！",[19,137963,101528],{},[438,137965],{"style":128977,"src":137966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,137968,137969],{},"文本域尽量放在一行",[19,137971,137972],{},"知识回顾：cols是列，rols是行",[438,137974],{"style":128977,"src":137975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,137977,137978],{},"它可以进行拖动，显然这是我们不愿意看到的",[438,137980],{"style":128977,"src":137981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,137983,137984],{},"使用resize进行解决",[31,137986,137988],{"className":129121,"code":137987,"language":129123,"meta":36,"style":36},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[26,137989,137990,137996,138009],{"__ignoreMap":36},[40,137991,137992,137994],{"class":42,"line":43},[40,137993,57119],{"class":46},[40,137995,18894],{"class":50},[40,137997,137998,138000,138002,138004,138006],{"class":42,"line":54},[40,137999,74094],{"class":63},[40,138001,60],{"class":50},[40,138003,58035],{"class":63},[40,138005,132984],{"class":50},[40,138007,138008],{"class":997},"\u002F* 取消表单轮廓线 *\u002F\n",[40,138010,138011],{"class":42,"line":70},[40,138012,4907],{"class":50},[19,138014,138015],{},"此时就无法通过右下方实现拖动了",[402,138017,138019],{"id":138018},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,138021,138022],{},"实现一个盒子中的文字和图片对齐",[19,138024,138025,138026,138029],{},"用于设置一个元素的 ",[409,138027,138028],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,138031,138032],{},"图片和文字默认是基线对齐",[438,138034],{"style":128977,"src":138035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[31,138037,138038],{"className":129121,"code":137987,"language":129123,"meta":36,"style":36},[26,138039,138040,138046,138058],{"__ignoreMap":36},[40,138041,138042,138044],{"class":42,"line":43},[40,138043,57119],{"class":46},[40,138045,18894],{"class":50},[40,138047,138048,138050,138052,138054,138056],{"class":42,"line":54},[40,138049,74094],{"class":63},[40,138051,60],{"class":50},[40,138053,58035],{"class":63},[40,138055,132984],{"class":50},[40,138057,138008],{"class":997},[40,138059,138060],{"class":42,"line":70},[40,138061,4907],{"class":50},[438,138063],{"style":128977,"src":138064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[2423,138066,138068],{"id":138067},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,138070,138071],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[438,138073],{"style":128977,"src":138074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,138076,138077,138078,138081],{},"此时可以给图片、表单这些行内块元素的 ",[409,138079,138080],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[2423,138083,138085],{"id":138084},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,138087,138088],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,138090,17955],{},[31,138092,138094],{"className":129121,"code":138093,"language":129123,"meta":36,"style":36},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[26,138095,138096,138101,138107,138119],{"__ignoreMap":36},[40,138097,138098],{"class":42,"line":43},[40,138099,138100],{"class":997},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[40,138102,138103,138105],{"class":42,"line":54},[40,138104,438],{"class":46},[40,138106,18894],{"class":50},[40,138108,138109,138112,138114,138117],{"class":42,"line":70},[40,138110,138111],{"class":63},"  vertical-align",[40,138113,60],{"class":50},[40,138115,138116],{"class":63},"middle",[40,138118,4637],{"class":50},[40,138120,138121],{"class":42,"line":78},[40,138122,4907],{"class":50},[438,138124],{"style":128977,"src":138125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,138127,138128],{},"主要解决方法有两种：",[492,138130,138131],{},[495,138132,138133,138136,138137,138140],{},[409,138134,138135],{},"给图片"," 添加 ",[409,138138,138139],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,138142,138143,138144],{},"2.把图片转换为块级元素 ",[409,138145,138146],{},"display: block",[19,138148,138149],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,138151,138152],{},"img {",[19,138154,138155],{},"vertical-align:middle;",[19,138157,4423],{},[402,138159,138161],{"id":138160},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,138163,138164],{},"效果：",[438,138166],{"style":128977,"src":138167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,138169,138170],{},"单行文本溢出显示省略号--必须满足三个条件：",[31,138172,138174],{"className":129121,"code":138173,"language":129123,"meta":36,"style":36},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[26,138175,138176,138181,138187,138197,138202,138212],{"__ignoreMap":36},[40,138177,138178],{"class":42,"line":43},[40,138179,138180],{"class":997},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[40,138182,138183,138185],{"class":42,"line":54},[40,138184,438],{"class":46},[40,138186,18894],{"class":50},[40,138188,138189,138191,138193,138195],{"class":42,"line":70},[40,138190,138111],{"class":63},[40,138192,60],{"class":50},[40,138194,138116],{"class":63},[40,138196,4637],{"class":50},[40,138198,138199],{"class":42,"line":78},[40,138200,138201],{"class":997},"  \u002F* 或 *\u002F\n",[40,138203,138204,138206,138208,138210],{"class":42,"line":86},[40,138205,130737],{"class":63},[40,138207,60],{"class":50},[40,138209,64167],{"class":63},[40,138211,4637],{"class":50},[40,138213,138214],{"class":42,"line":100},[40,138215,4907],{"class":50},[402,138217,138219],{"id":138218},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,138221,138164],{},[438,138223],{"style":128977,"src":138224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,138226,138227,138228,138231],{},"多行文本溢出显示省略号， ",[409,138229,138230],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[31,138233,138234],{"className":129121,"code":138173,"language":129123,"meta":36,"style":36},[26,138235,138236,138240,138246,138256,138260,138270],{"__ignoreMap":36},[40,138237,138238],{"class":42,"line":43},[40,138239,138180],{"class":997},[40,138241,138242,138244],{"class":42,"line":54},[40,138243,438],{"class":46},[40,138245,18894],{"class":50},[40,138247,138248,138250,138252,138254],{"class":42,"line":70},[40,138249,138111],{"class":63},[40,138251,60],{"class":50},[40,138253,138116],{"class":63},[40,138255,4637],{"class":50},[40,138257,138258],{"class":42,"line":78},[40,138259,138201],{"class":997},[40,138261,138262,138264,138266,138268],{"class":42,"line":86},[40,138263,130737],{"class":63},[40,138265,60],{"class":50},[40,138267,64167],{"class":63},[40,138269,4637],{"class":50},[40,138271,138272],{"class":42,"line":100},[40,138273,4907],{"class":50},[19,138275,138276],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,138278,138280],{"id":138279},"_133-常见布局技巧","13.3 常见布局技巧",[19,138282,138283],{},[409,138284,138285],{},"巧妙利用一个技术更快更好的布局：",[492,138287,138288,138291,138294,138297],{},[495,138289,138290],{},"margin负值的运用",[495,138292,138293],{},"文字围绕浮动元素",[495,138295,138296],{},"行内块的巧妙运用",[495,138298,138299],{},"CSS三角强化",[402,138301,138303],{"id":138302},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,138305,138306],{},"应用场景：",[438,138308],{"style":128977,"src":138309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[438,138311],{"style":128977,"src":138312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,138314,138315],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,138317,138318],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[31,138320,138321],{"className":129121,"code":132485,"language":129123,"meta":36,"style":36},[26,138322,138323,138327,138333,138349],{"__ignoreMap":36},[40,138324,138325],{"class":42,"line":43},[40,138326,132492],{"class":997},[40,138328,138329,138331],{"class":42,"line":54},[40,138330,54909],{"class":46},[40,138332,18894],{"class":50},[40,138334,138335,138337,138339,138341,138343,138345,138347],{"class":42,"line":70},[40,138336,74192],{"class":63},[40,138338,60],{"class":50},[40,138340,3698],{"class":63},[40,138342,54790],{"class":1283},[40,138344,54819],{"class":63},[40,138346,132513],{"class":63},[40,138348,4637],{"class":50},[40,138350,138351],{"class":42,"line":78},[40,138352,4907],{"class":50},[438,138354],{"style":128977,"src":138355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,138357,138358],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[31,138360,138362],{"className":129121,"code":138361,"language":129123,"meta":36,"style":36},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[26,138363,138364,138369,138375,138385,138397,138409],{"__ignoreMap":36},[40,138365,138366],{"class":42,"line":43},[40,138367,138368],{"class":997},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[40,138370,138371,138373],{"class":42,"line":54},[40,138372,132969],{"class":596},[40,138374,18894],{"class":50},[40,138376,138377,138379,138381,138383],{"class":42,"line":70},[40,138378,134927],{"class":63},[40,138380,60],{"class":50},[40,138382,58062],{"class":63},[40,138384,4637],{"class":50},[40,138386,138387,138389,138391,138393,138395],{"class":42,"line":78},[40,138388,134941],{"class":63},[40,138390,60],{"class":50},[40,138392,3925],{"class":63},[40,138394,54790],{"class":1283},[40,138396,4637],{"class":50},[40,138398,138399,138401,138403,138405,138407],{"class":42,"line":86},[40,138400,134958],{"class":63},[40,138402,60],{"class":50},[40,138404,4178],{"class":63},[40,138406,54790],{"class":1283},[40,138408,4637],{"class":50},[40,138410,138411],{"class":42,"line":100},[40,138412,4907],{"class":50},[19,138414,138415],{},"加上上述代码会发现：",[438,138417],{"style":128977,"src":138418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,138420,138421],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,138423,138424],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[31,138426,138427],{"className":129121,"code":138361,"language":129123,"meta":36,"style":36},[26,138428,138429,138433,138439,138449,138461,138473],{"__ignoreMap":36},[40,138430,138431],{"class":42,"line":43},[40,138432,138368],{"class":997},[40,138434,138435,138437],{"class":42,"line":54},[40,138436,132969],{"class":596},[40,138438,18894],{"class":50},[40,138440,138441,138443,138445,138447],{"class":42,"line":70},[40,138442,134927],{"class":63},[40,138444,60],{"class":50},[40,138446,58062],{"class":63},[40,138448,4637],{"class":50},[40,138450,138451,138453,138455,138457,138459],{"class":42,"line":78},[40,138452,134941],{"class":63},[40,138454,60],{"class":50},[40,138456,3925],{"class":63},[40,138458,54790],{"class":1283},[40,138460,4637],{"class":50},[40,138462,138463,138465,138467,138469,138471],{"class":42,"line":86},[40,138464,134958],{"class":63},[40,138466,60],{"class":50},[40,138468,4178],{"class":63},[40,138470,54790],{"class":1283},[40,138472,4637],{"class":50},[40,138474,138475],{"class":42,"line":100},[40,138476,4907],{"class":50},[19,138478,138479],{},"解决方式2：",[19,138481,138482],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[31,138484,138486],{"className":129121,"code":138485,"language":129123,"meta":36,"style":36},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[26,138487,138488,138494,138504,138516,138528],{"__ignoreMap":36},[40,138489,138490,138492],{"class":42,"line":43},[40,138491,54909],{"class":46},[40,138493,18894],{"class":50},[40,138495,138496,138498,138500,138502],{"class":42,"line":54},[40,138497,134927],{"class":63},[40,138499,60],{"class":50},[40,138501,58062],{"class":63},[40,138503,4637],{"class":50},[40,138505,138506,138508,138510,138512,138514],{"class":42,"line":70},[40,138507,134941],{"class":63},[40,138509,60],{"class":50},[40,138511,3925],{"class":63},[40,138513,54790],{"class":1283},[40,138515,4637],{"class":50},[40,138517,138518,138520,138522,138524,138526],{"class":42,"line":78},[40,138519,134958],{"class":63},[40,138521,60],{"class":50},[40,138523,4178],{"class":63},[40,138525,54790],{"class":1283},[40,138527,4637],{"class":50},[40,138529,138530],{"class":42,"line":86},[40,138531,4907],{"class":50},[402,138533,138535],{"id":138534},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,138537,138306],{},[438,138539],{"style":128977,"src":138540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,138542,138543],{},"实现结构图：",[438,138545],{"style":128977,"src":138546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,138548,138549],{},"巧妙运用浮动元素不会压住文字的特性",[19,138551,138552],{},"代码显示：",[31,138554,138556],{"className":129121,"code":138555,"language":129123,"meta":36,"style":36},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[26,138557,138558,138564,138574,138578,138583,138587,138593,138607],{"__ignoreMap":36},[40,138559,138560,138562],{"class":42,"line":43},[40,138561,132969],{"class":596},[40,138563,18894],{"class":50},[40,138565,138566,138568,138570,138572],{"class":42,"line":54},[40,138567,133601],{"class":63},[40,138569,60],{"class":50},[40,138571,27055],{"class":63},[40,138573,4637],{"class":50},[40,138575,138576],{"class":42,"line":70},[40,138577,4907],{"class":50},[40,138579,138580],{"class":42,"line":78},[40,138581,138582],{"class":50},"```Css\n",[40,138584,138585],{"class":42,"line":86},[40,138586,132964],{"class":997},[40,138588,138589,138591],{"class":42,"line":100},[40,138590,132969],{"class":596},[40,138592,18894],{"class":50},[40,138594,138595,138597,138599,138601,138603,138605],{"class":42,"line":108},[40,138596,73766],{"class":63},[40,138598,60],{"class":50},[40,138600,3672],{"class":63},[40,138602,54854],{"class":63},[40,138604,132984],{"class":50},[40,138606,132987],{"class":997},[40,138608,138609],{"class":42,"line":121},[40,138610,4907],{"class":50},[19,138612,138613],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[31,138615,138618],{"className":138616,"code":138617,"language":8510},[8508],"\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",[26,138619,138617],{"__ignoreMap":36},[438,138621],{"style":128977,"src":138622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,138624,138625],{},"最终展示结果：",[31,138627,138628],{"className":129121,"code":132957,"language":129123,"meta":36,"style":36},[26,138629,138630,138634,138640,138654],{"__ignoreMap":36},[40,138631,138632],{"class":42,"line":43},[40,138633,132964],{"class":997},[40,138635,138636,138638],{"class":42,"line":54},[40,138637,132969],{"class":596},[40,138639,18894],{"class":50},[40,138641,138642,138644,138646,138648,138650,138652],{"class":42,"line":70},[40,138643,73766],{"class":63},[40,138645,60],{"class":50},[40,138647,3672],{"class":63},[40,138649,54854],{"class":63},[40,138651,132984],{"class":50},[40,138653,132987],{"class":997},[40,138655,138656],{"class":42,"line":78},[40,138657,4907],{"class":50},[438,138659],{"style":128977,"src":138660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,138662,138664],{"id":138663},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[402,138666,138668],{"id":138667},"_1341-原理","13.4.1 原理",[438,138670],{"style":128977,"src":138671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[31,138673,138674],{"className":129121,"code":132957,"language":129123,"meta":36,"style":36},[26,138675,138676,138680,138686,138700],{"__ignoreMap":36},[40,138677,138678],{"class":42,"line":43},[40,138679,132964],{"class":997},[40,138681,138682,138684],{"class":42,"line":54},[40,138683,132969],{"class":596},[40,138685,18894],{"class":50},[40,138687,138688,138690,138692,138694,138696,138698],{"class":42,"line":70},[40,138689,73766],{"class":63},[40,138691,60],{"class":50},[40,138693,3672],{"class":63},[40,138695,54854],{"class":63},[40,138697,132984],{"class":50},[40,138699,132987],{"class":997},[40,138701,138702],{"class":42,"line":78},[40,138703,4907],{"class":50},[402,138705,138707],{"id":138706},"_1342-实例","13.4.2 实例",[438,138709],{"style":128977,"src":138710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[31,138712,138713],{"className":129121,"code":133587,"language":129123,"meta":36,"style":36},[26,138714,138715,138721,138731,138735,138741,138751],{"__ignoreMap":36},[40,138716,138717,138719],{"class":42,"line":43},[40,138718,133594],{"class":596},[40,138720,18894],{"class":50},[40,138722,138723,138725,138727,138729],{"class":42,"line":54},[40,138724,133601],{"class":63},[40,138726,60],{"class":50},[40,138728,27055],{"class":63},[40,138730,4637],{"class":50},[40,138732,138733],{"class":42,"line":70},[40,138734,4907],{"class":50},[40,138736,138737,138739],{"class":42,"line":78},[40,138738,133616],{"class":596},[40,138740,18894],{"class":50},[40,138742,138743,138745,138747,138749],{"class":42,"line":86},[40,138744,133601],{"class":63},[40,138746,60],{"class":50},[40,138748,75817],{"class":63},[40,138750,4637],{"class":50},[40,138752,138753],{"class":42,"line":100},[40,138754,4907],{"class":50},[14,138756,138758],{"id":138757},"_135-css的初始化","13.5 css的初始化",[19,138760,138761],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,138763,138764],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,138766,138767],{},"每个网页都必须首先进行 CSS初始化。",[19,138769,138770],{},"这里我们以 京东CSS初始化代码为例。",[19,138772,138773],{},"在网页右键查看网页源代码",[19,138775,138776],{},"找到css的link引入语句",[19,138778,138779],{},"然后ctrl+f 输入body",[19,138781,80521],{},[438,138783],{"style":128977,"src":138784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,138786,80544],{},[438,138788],{"style":128977,"src":138789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,138791,138792],{},"③打开了网页上传压缩的代码",[438,138794],{"style":128977,"src":138795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,138797,138798],{},"④从body前可以查看这个网页的初始化代码",[19,138800,138801],{},[409,138802,138803],{},"Unicode编码字体：",[19,138805,138806],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,138808,86502],{},[19,138810,138811],{},"黑体 \\9ED1\\4F53",[19,138813,138814],{},"宋体 \\5B8B\\4F53",[19,138816,138817],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[3384,138819,138820],{},"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":36,"searchDepth":54,"depth":54,"links":138822},[138823,138824,138831,138835,138839],{"id":137620,"depth":54,"text":137621},{"id":137742,"depth":54,"text":137743,"children":138825},[138826,138827,138828,138829,138830],{"id":137746,"depth":70,"text":137747},{"id":137899,"depth":70,"text":137900},{"id":138018,"depth":70,"text":138019},{"id":138160,"depth":70,"text":138161},{"id":138218,"depth":70,"text":138219},{"id":138279,"depth":54,"text":138280,"children":138832},[138833,138834],{"id":138302,"depth":70,"text":138303},{"id":138534,"depth":70,"text":138535},{"id":138663,"depth":54,"text":138664,"children":138836},[138837,138838],{"id":138667,"depth":70,"text":138668},{"id":138706,"depth":70,"text":138707},{"id":138757,"depth":54,"text":138758},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":137612,"description":3413},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":138846,"title":138847,"body":138848,"description":3413,"extension":3414,"meta":140534,"navigation":1412,"path":140535,"seo":140536,"stem":140537,"__hash__":140538},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":138849,"toc":140523},[138850,138853,138857,138861,138864,138871,138874,138877,138915,138918,138920,138934,138938,138947,138951,138956,138959,138962,138965,139000,139005,139008,139038,139041,139046,139049,139052,139082,139085,139139,139142,139146,139151,139163,139166,139170,139200,139203,139208,139211,139241,139244,139248,139265,139269,139273,139276,139309,139312,139316,139319,139322,139325,139328,139331,139442,139445,139448,139451,139553,139556,139560,139564,139568,139571,139611,139614,139616,139632,139636,139639,139644,139725,139728,139731,139857,139862,139865,139873,139876,139881,139966,139969,139973,139976,139979,139983,140003,140008,140092,140095,140100,140103,140106,140184,140187,140190,140193,140196,140199,140204,140207,140210,140282,140285,140290,140293,140390,140393,140399,140402,140405,140408,140411,140414,140417,140420,140423,140427,140432,140435,140468,140473,140476,140517,140520],[10,138851,138847],{"id":138852},"_14-html5与css3新特性",[14,138854,138856],{"id":138855},"_141-html5的新特性","14.1 HTML5的新特性",[402,138858,138860],{"id":138859},"_1411-基本标签","14.1.1 基本标签",[19,138862,138863],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,138865,138866,138867,138870],{},"这些新特性都有兼容性问题，基本是 ",[409,138868,138869],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,138872,138873],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,138875,138876],{},"现在使用的是新特性：",[1338,138878,138879,138885,138891,138897,138903,138909],{},[495,138880,138881,138884],{},[26,138882,138883],{},"\u003Cheader>"," 头部标签",[495,138886,138887,138890],{},[26,138888,138889],{},"\u003Cnav>"," 导航标签",[495,138892,138893,138896],{},[26,138894,138895],{},"\u003Carticle>"," 内容标签",[495,138898,138899,138902],{},[26,138900,138901],{},"\u003Csection>"," 定义文档某个区域",[495,138904,138905,138908],{},[26,138906,138907],{},"\u003Caside>"," 侧边栏标签",[495,138910,138911,138914],{},[26,138912,138913],{},"\u003Cfooter>"," 尾部标签",[438,138916],{"style":128977,"src":138917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,138919,3516],{},[1338,138921,138922,138925,138928,138931],{},[495,138923,138924],{},"这种语义化标准主要是针对搜索引擎的",[495,138926,138927],{},"这些标签页面中可以经常使用",[495,138929,138930],{},"在IE9中，需要把这些元素转换为块级元素",[495,138932,138933],{},"移动端更喜欢使用这些标签",[402,138935,138937],{"id":138936},"_1412-多媒体标签","14.1.2 多媒体标签",[19,138939,138940,138941,138943,138944,138946],{},"音频 ",[409,138942,31479],{}," 和视频 ",[409,138945,31488],{}," 两个标签",[2423,138948,138950],{"id":138949},"_14121-视频标签-video","14.1.2.1 视频标签- video",[492,138952,138953],{},[495,138954,138955],{},"支持格式：",[438,138957],{"style":128977,"src":138958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,138960,138961],{},"尽量使用MP4，兼容性好",[19,138963,138964],{},"用MP4就可以",[31,138966,138968],{"className":129868,"code":138967,"language":129870,"meta":36,"style":36},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[26,138969,138970],{"__ignoreMap":36},[40,138971,138972,138974,138976,138978,138980,138983,138985,138988,138991,138994,138996,138998],{"class":42,"line":43},[40,138973,4387],{"class":50},[40,138975,31488],{"class":46},[40,138977,58537],{"class":596},[40,138979,1284],{"class":50},[40,138981,138982],{"class":94},"\"movie.mp4\"",[40,138984,95718],{"class":596},[40,138986,138987],{"class":596}," autoplay",[40,138989,138990],{"class":596}," muted",[40,138992,138993],{"class":596}," loop",[40,138995,58612],{"class":50},[40,138997,31488],{"class":46},[40,138999,54606],{"class":50},[492,139001,139002],{"start":54},[495,139003,139004],{},"兼容写法",[19,139006,139007],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[31,139009,139010],{"className":129868,"code":138967,"language":129870,"meta":36,"style":36},[26,139011,139012],{"__ignoreMap":36},[40,139013,139014,139016,139018,139020,139022,139024,139026,139028,139030,139032,139034,139036],{"class":42,"line":43},[40,139015,4387],{"class":50},[40,139017,31488],{"class":46},[40,139019,58537],{"class":596},[40,139021,1284],{"class":50},[40,139023,138982],{"class":94},[40,139025,95718],{"class":596},[40,139027,138987],{"class":596},[40,139029,138990],{"class":596},[40,139031,138993],{"class":596},[40,139033,58612],{"class":50},[40,139035,31488],{"class":46},[40,139037,54606],{"class":50},[19,139039,139040],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[492,139042,139043],{"start":70},[495,139044,139045],{},"video常用属性",[438,139047],{"style":128977,"src":139048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,139050,139051],{},"poster属性后面是跟的等待加载图片的地址",[31,139053,139054],{"className":129868,"code":136623,"language":129870,"meta":36,"style":36},[26,139055,139056],{"__ignoreMap":36},[40,139057,139058,139060,139062,139064,139066,139068,139070,139072,139074,139076,139078,139080],{"class":42,"line":43},[40,139059,4387],{"class":50},[40,139061,438],{"class":46},[40,139063,58537],{"class":596},[40,139065,1284],{"class":50},[40,139067,136638],{"class":94},[40,139069,58545],{"class":596},[40,139071,1284],{"class":50},[40,139073,136645],{"class":94},[40,139075,136648],{"class":596},[40,139077,1284],{"class":50},[40,139079,136653],{"class":94},[40,139081,54606],{"class":50},[19,139083,139084],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[31,139086,139088],{"className":129121,"code":139087,"language":129123,"meta":36,"style":36},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[26,139089,139090,139095,139101,139125,139130,139135],{"__ignoreMap":36},[40,139091,139092],{"class":42,"line":43},[40,139093,139094],{"class":997},"\u002F* 2D 位移 *\u002F\n",[40,139096,139097,139099],{"class":42,"line":54},[40,139098,54909],{"class":46},[40,139100,18894],{"class":50},[40,139102,139103,139106,139108,139111,139113,139115,139117,139119,139121,139123],{"class":42,"line":70},[40,139104,139105],{"class":63},"  transform",[40,139107,60],{"class":50},[40,139109,139110],{"class":63},"translate",[40,139112,3488],{"class":50},[40,139114,3791],{"class":63},[40,139116,54790],{"class":1283},[40,139118,15757],{"class":50},[40,139120,4134],{"class":63},[40,139122,54790],{"class":1283},[40,139124,6043],{"class":50},[40,139126,139127],{"class":42,"line":78},[40,139128,139129],{"class":997},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[40,139131,139132],{"class":42,"line":86},[40,139133,139134],{"class":997},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[40,139136,139137],{"class":42,"line":100},[40,139138,4907],{"class":50},[19,139140,139141],{},"muted:自动静音属性",[2423,139143,139145],{"id":139144},"_14122-音频标签audio","14.1.2.2 音频标签audio",[492,139147,139148],{},[495,139149,139150],{},"基本使用",[19,139152,139153,139154,139159,139160],{},"当前 ",[409,139155,139156],{},[26,139157,139158],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[409,139161,139162],{},"mp3格式",[438,139164],{"style":128977,"src":139165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[492,139167,139168],{"start":54},[495,139169,139004],{},[31,139171,139172],{"className":129868,"code":138967,"language":129870,"meta":36,"style":36},[26,139173,139174],{"__ignoreMap":36},[40,139175,139176,139178,139180,139182,139184,139186,139188,139190,139192,139194,139196,139198],{"class":42,"line":43},[40,139177,4387],{"class":50},[40,139179,31488],{"class":46},[40,139181,58537],{"class":596},[40,139183,1284],{"class":50},[40,139185,138982],{"class":94},[40,139187,95718],{"class":596},[40,139189,138987],{"class":596},[40,139191,138990],{"class":596},[40,139193,138993],{"class":596},[40,139195,58612],{"class":50},[40,139197,31488],{"class":46},[40,139199,54606],{"class":50},[19,139201,139202],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[492,139204,139205],{"start":70},[495,139206,139207],{},"常用属性",[438,139209],{"style":128977,"src":139210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[31,139212,139213],{"className":129868,"code":138967,"language":129870,"meta":36,"style":36},[26,139214,139215],{"__ignoreMap":36},[40,139216,139217,139219,139221,139223,139225,139227,139229,139231,139233,139235,139237,139239],{"class":42,"line":43},[40,139218,4387],{"class":50},[40,139220,31488],{"class":46},[40,139222,58537],{"class":596},[40,139224,1284],{"class":50},[40,139226,138982],{"class":94},[40,139228,95718],{"class":596},[40,139230,138987],{"class":596},[40,139232,138990],{"class":596},[40,139234,138993],{"class":596},[40,139236,58612],{"class":50},[40,139238,31488],{"class":46},[40,139240,54606],{"class":50},[19,139242,139243],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[2423,139245,139247],{"id":139246},"_14123-总结","14.1.2.3 总结",[1338,139249,139250,139253,139256,139259,139262],{},[495,139251,139252],{},"音频标签和视频标签使用方式基本一致",[495,139254,139255],{},"浏览器支持情况不同",[495,139257,139258],{},"谷歌浏览器把音频和视频自动播放禁止了",[495,139260,139261],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[495,139263,139264],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[402,139266,139268],{"id":139267},"_1413-表单元素","14.1.3 表单元素",[2423,139270,139272],{"id":139271},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[438,139274],{"style":128977,"src":139275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[31,139277,139279],{"className":129868,"code":139278,"language":129870,"meta":36,"style":36},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[26,139280,139281],{"__ignoreMap":36},[40,139282,139283,139285,139287,139289,139291,139293,139295,139297,139300,139302,139304,139307],{"class":42,"line":43},[40,139284,4387],{"class":50},[40,139286,57119],{"class":46},[40,139288,57122],{"class":596},[40,139290,1284],{"class":50},[40,139292,65997],{"class":94},[40,139294,18242],{"class":596},[40,139296,1284],{"class":50},[40,139298,139299],{"class":94},"\"username\"",[40,139301,64318],{"class":596},[40,139303,1284],{"class":50},[40,139305,139306],{"class":94},"\"请输入用户名\"",[40,139308,54606],{"class":50},[438,139310],{"style":128977,"src":139311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[2423,139313,139315],{"id":139314},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[438,139317],{"style":128977,"src":139318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,139320,139321],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,139323,139324],{},"快捷操作：",[438,139326],{"style":128977,"src":139327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,139329,139330],{},"例子1：",[31,139332,139334],{"className":129868,"code":139333,"language":129870,"meta":36,"style":36},"\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",[26,139335,139336,139359,139386,139415,139434],{"__ignoreMap":36},[40,139337,139338,139340,139342,139344,139346,139349,139352,139354,139357],{"class":42,"line":43},[40,139339,4387],{"class":50},[40,139341,69923],{"class":46},[40,139343,69926],{"class":596},[40,139345,1284],{"class":50},[40,139347,139348],{"class":94},"\"\u002Fsubmit\"",[40,139350,139351],{"class":596}," method",[40,139353,1284],{"class":50},[40,139355,139356],{"class":94},"\"post\"",[40,139358,54606],{"class":50},[40,139360,139361,139363,139365,139367,139369,139371,139373,139375,139377,139379,139381,139384],{"class":42,"line":54},[40,139362,55442],{"class":50},[40,139364,57119],{"class":46},[40,139366,57122],{"class":596},[40,139368,1284],{"class":50},[40,139370,65997],{"class":94},[40,139372,18242],{"class":596},[40,139374,1284],{"class":50},[40,139376,139299],{"class":94},[40,139378,64318],{"class":596},[40,139380,1284],{"class":50},[40,139382,139383],{"class":94},"\"用户名\"",[40,139385,54606],{"class":50},[40,139387,139388,139390,139392,139394,139396,139399,139401,139403,139406,139408,139410,139413],{"class":42,"line":70},[40,139389,55442],{"class":50},[40,139391,57119],{"class":46},[40,139393,57122],{"class":596},[40,139395,1284],{"class":50},[40,139397,139398],{"class":94},"\"password\"",[40,139400,18242],{"class":596},[40,139402,1284],{"class":50},[40,139404,139405],{"class":94},"\"pwd\"",[40,139407,64318],{"class":596},[40,139409,1284],{"class":50},[40,139411,139412],{"class":94},"\"密码\"",[40,139414,54606],{"class":50},[40,139416,139417,139419,139421,139423,139425,139427,139430,139432],{"class":42,"line":78},[40,139418,55442],{"class":50},[40,139420,57185],{"class":46},[40,139422,57122],{"class":596},[40,139424,1284],{"class":50},[40,139426,69946],{"class":94},[40,139428,139429],{"class":50},">提交\u003C\u002F",[40,139431,57185],{"class":46},[40,139433,54606],{"class":50},[40,139435,139436,139438,139440],{"class":42,"line":86},[40,139437,55083],{"class":50},[40,139439,69923],{"class":46},[40,139441,54606],{"class":50},[438,139443],{"style":128977,"src":139444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,139446,139447],{},"value是表单域的内容",[19,139449,139450],{},"例子2：",[31,139452,139453],{"className":129868,"code":139333,"language":129870,"meta":36,"style":36},[26,139454,139455,139475,139501,139527,139545],{"__ignoreMap":36},[40,139456,139457,139459,139461,139463,139465,139467,139469,139471,139473],{"class":42,"line":43},[40,139458,4387],{"class":50},[40,139460,69923],{"class":46},[40,139462,69926],{"class":596},[40,139464,1284],{"class":50},[40,139466,139348],{"class":94},[40,139468,139351],{"class":596},[40,139470,1284],{"class":50},[40,139472,139356],{"class":94},[40,139474,54606],{"class":50},[40,139476,139477,139479,139481,139483,139485,139487,139489,139491,139493,139495,139497,139499],{"class":42,"line":54},[40,139478,55442],{"class":50},[40,139480,57119],{"class":46},[40,139482,57122],{"class":596},[40,139484,1284],{"class":50},[40,139486,65997],{"class":94},[40,139488,18242],{"class":596},[40,139490,1284],{"class":50},[40,139492,139299],{"class":94},[40,139494,64318],{"class":596},[40,139496,1284],{"class":50},[40,139498,139383],{"class":94},[40,139500,54606],{"class":50},[40,139502,139503,139505,139507,139509,139511,139513,139515,139517,139519,139521,139523,139525],{"class":42,"line":70},[40,139504,55442],{"class":50},[40,139506,57119],{"class":46},[40,139508,57122],{"class":596},[40,139510,1284],{"class":50},[40,139512,139398],{"class":94},[40,139514,18242],{"class":596},[40,139516,1284],{"class":50},[40,139518,139405],{"class":94},[40,139520,64318],{"class":596},[40,139522,1284],{"class":50},[40,139524,139412],{"class":94},[40,139526,54606],{"class":50},[40,139528,139529,139531,139533,139535,139537,139539,139541,139543],{"class":42,"line":78},[40,139530,55442],{"class":50},[40,139532,57185],{"class":46},[40,139534,57122],{"class":596},[40,139536,1284],{"class":50},[40,139538,69946],{"class":94},[40,139540,139429],{"class":50},[40,139542,57185],{"class":46},[40,139544,54606],{"class":50},[40,139546,139547,139549,139551],{"class":42,"line":86},[40,139548,55083],{"class":50},[40,139550,69923],{"class":46},[40,139552,54606],{"class":50},[438,139554],{"style":128977,"src":139555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,139557,139559],{"id":139558},"_142-css新特性","14.2 CSS新特性",[402,139561,139563],{"id":139562},"_1421-新增选择器","14.2.1 新增选择器",[2423,139565,139567],{"id":139566},"_14211-属性选择器","14.2.1.1 属性选择器",[438,139569],{"style":128977,"src":139570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[31,139572,139574],{"className":129121,"code":139573,"language":129123,"meta":36,"style":36},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[26,139575,139576,139591,139607],{"__ignoreMap":36},[40,139577,139578,139580,139582,139584,139586,139588],{"class":42,"line":43},[40,139579,57119],{"class":46},[40,139581,4367],{"class":50},[40,139583,106398],{"class":596},[40,139585,1284],{"class":1283},[40,139587,65997],{"class":94},[40,139589,139590],{"class":50},"] {\n",[40,139592,139593,139595,139597,139599,139601,139603,139605],{"class":42,"line":54},[40,139594,74192],{"class":63},[40,139596,60],{"class":50},[40,139598,3698],{"class":63},[40,139600,54790],{"class":1283},[40,139602,54819],{"class":63},[40,139604,132701],{"class":63},[40,139606,4637],{"class":50},[40,139608,139609],{"class":42,"line":70},[40,139610,4907],{"class":50},[438,139612],{"style":128977,"src":139613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,139615,3516],{},[1338,139617,139618,139621,139624,139627],{},[495,139619,139620],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[495,139622,139623],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[495,139625,139626],{},"属性选择器也可以选择出来自定义的属性",[495,139628,139629,139631],{},[409,139630,12347],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[2423,139633,139635],{"id":139634},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[438,139637],{"style":128977,"src":139638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[492,139640,139641],{},[495,139642,139643],{},"fist-child",[31,139645,139647],{"className":129121,"code":139646,"language":129123,"meta":36,"style":36},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[26,139648,139649,139654,139669,139689,139707],{"__ignoreMap":36},[40,139650,139651],{"class":42,"line":43},[40,139652,139653],{"class":997},"\u002F* 属性选择器 *\u002F\n",[40,139655,139656,139658,139660,139662,139664,139666],{"class":42,"line":54},[40,139657,57119],{"class":46},[40,139659,4367],{"class":50},[40,139661,106398],{"class":596},[40,139663,1284],{"class":1283},[40,139665,65997],{"class":94},[40,139667,139668],{"class":50},"] { }\n",[40,139670,139671,139673,139675,139677,139680,139683,139686],{"class":42,"line":70},[40,139672,57119],{"class":46},[40,139674,4367],{"class":50},[40,139676,18016],{"class":596},[40,139678,139679],{"class":1283},"^=",[40,139681,139682],{"class":94},"\"icon\"",[40,139684,139685],{"class":50},"] { }  ",[40,139687,139688],{"class":997},"\u002F* 以 icon 开头 *\u002F\n",[40,139690,139691,139693,139695,139697,139700,139702,139704],{"class":42,"line":78},[40,139692,57119],{"class":46},[40,139694,4367],{"class":50},[40,139696,18016],{"class":596},[40,139698,139699],{"class":1283},"$=",[40,139701,139682],{"class":94},[40,139703,139685],{"class":50},[40,139705,139706],{"class":997},"\u002F* 以 icon 结尾 *\u002F\n",[40,139708,139709,139711,139713,139715,139718,139720,139722],{"class":42,"line":86},[40,139710,57119],{"class":46},[40,139712,4367],{"class":50},[40,139714,18016],{"class":596},[40,139716,139717],{"class":1283},"*=",[40,139719,139682],{"class":94},[40,139721,139685],{"class":50},[40,139723,139724],{"class":997},"\u002F* 包含 icon *\u002F\n",[19,139726,139727],{},"ul的第一个儿子文本为红色",[19,139729,139730],{},"一定要在冒号前加空格，不然就是选中所有的了",[31,139732,139734],{"className":129121,"code":139733,"language":129123,"meta":36,"style":36},".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",[26,139735,139736,139742,139752,139756,139760,139765,139778,139791,139807,139824,139841],{"__ignoreMap":36},[40,139737,139738,139740],{"class":42,"line":43},[40,139739,129412],{"class":596},[40,139741,18894],{"class":50},[40,139743,139744,139746,139748,139750],{"class":42,"line":54},[40,139745,74201],{"class":63},[40,139747,60],{"class":50},[40,139749,60719],{"class":63},[40,139751,4637],{"class":50},[40,139753,139754],{"class":42,"line":70},[40,139755,4907],{"class":50},[40,139757,139758],{"class":42,"line":78},[40,139759,138582],{"class":50},[40,139761,139762],{"class":42,"line":86},[40,139763,139764],{"class":997},"\u002F* 结构伪类选择器 *\u002F\n",[40,139766,139767,139769,139772,139775],{"class":42,"line":100},[40,139768,495],{"class":46},[40,139770,139771],{"class":596},":first-child",[40,139773,139774],{"class":50}," { }           ",[40,139776,139777],{"class":997},"\u002F* 第一个 *\u002F\n",[40,139779,139780,139782,139785,139788],{"class":42,"line":108},[40,139781,495],{"class":46},[40,139783,139784],{"class":596},":last-child",[40,139786,139787],{"class":50}," { }            ",[40,139789,139790],{"class":997},"\u002F* 最后一个 *\u002F\n",[40,139792,139793,139795,139797,139799,139801,139804],{"class":42,"line":121},[40,139794,495],{"class":46},[40,139796,132035],{"class":596},[40,139798,3488],{"class":50},[40,139800,64],{"class":63},[40,139802,139803],{"class":50},") { }          ",[40,139805,139806],{"class":997},"\u002F* 第2个 *\u002F\n",[40,139808,139809,139811,139813,139815,139818,139821],{"class":42,"line":134},[40,139810,495],{"class":46},[40,139812,132035],{"class":596},[40,139814,3488],{"class":50},[40,139816,139817],{"class":63},"2n",[40,139819,139820],{"class":50},") { }         ",[40,139822,139823],{"class":997},"\u002F* 偶数 *\u002F\n",[40,139825,139826,139828,139830,139832,139835,139838],{"class":42,"line":146},[40,139827,495],{"class":46},[40,139829,132035],{"class":596},[40,139831,3488],{"class":50},[40,139833,139834],{"class":63},"2n+1",[40,139836,139837],{"class":50},") { }       ",[40,139839,139840],{"class":997},"\u002F* 奇数 *\u002F\n",[40,139842,139843,139845,139847,139849,139852,139854],{"class":42,"line":154},[40,139844,495],{"class":46},[40,139846,132035],{"class":596},[40,139848,3488],{"class":50},[40,139850,139851],{"class":63},"-n+3",[40,139853,139837],{"class":50},[40,139855,139856],{"class":997},"\u002F* 前3个 *\u002F\n",[54909,139858,139861],{"className":139859},[139860],"example","\n  示例内容\n",[19,139863,139864],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1338,139866,139867],{},[495,139868,139869,139872],{},[26,139870,139871],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,139874,139875],{},"也就是说它选择的是熊大",[492,139877,139878],{"start":100},[495,139879,139880],{},"权重",[31,139882,139884],{"className":129121,"code":139883,"language":129123,"meta":36,"style":36},"\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",[26,139885,139886,139890,139900,139910,139924,139938,139952],{"__ignoreMap":36},[40,139887,139888],{"class":42,"line":43},[40,139889,139764],{"class":997},[40,139891,139892,139894,139896,139898],{"class":42,"line":54},[40,139893,495],{"class":46},[40,139895,139771],{"class":596},[40,139897,139774],{"class":50},[40,139899,139777],{"class":997},[40,139901,139902,139904,139906,139908],{"class":42,"line":70},[40,139903,495],{"class":46},[40,139905,139784],{"class":596},[40,139907,139787],{"class":50},[40,139909,139790],{"class":997},[40,139911,139912,139914,139916,139918,139920,139922],{"class":42,"line":78},[40,139913,495],{"class":46},[40,139915,132035],{"class":596},[40,139917,3488],{"class":50},[40,139919,64],{"class":63},[40,139921,139803],{"class":50},[40,139923,139806],{"class":997},[40,139925,139926,139928,139930,139932,139934,139936],{"class":42,"line":86},[40,139927,495],{"class":46},[40,139929,132035],{"class":596},[40,139931,3488],{"class":50},[40,139933,139817],{"class":63},[40,139935,139820],{"class":50},[40,139937,139823],{"class":997},[40,139939,139940,139942,139944,139946,139948,139950],{"class":42,"line":100},[40,139941,495],{"class":46},[40,139943,132035],{"class":596},[40,139945,3488],{"class":50},[40,139947,139834],{"class":63},[40,139949,139837],{"class":50},[40,139951,139840],{"class":997},[40,139953,139954,139956,139958,139960,139962,139964],{"class":42,"line":108},[40,139955,495],{"class":46},[40,139957,132035],{"class":596},[40,139959,3488],{"class":50},[40,139961,139851],{"class":63},[40,139963,139837],{"class":50},[40,139965,139856],{"class":997},[19,139967,139968],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[2423,139970,139972],{"id":139971},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,139974,139975],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[438,139977],{"style":128977,"src":139978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[492,139980,139981],{},[495,139982,3516],{},[1338,139984,139985,139988,139991,139994,139997,140000],{},[495,139986,139987],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[495,139989,139990],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[495,139992,139993],{},"语法： element::before {}",[495,139995,139996],{},"before 和 after 必须有 content 属性",[495,139998,139999],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[495,140001,140002],{},"伪元素选择器和标签选择器一样，权重为 1",[492,140004,140005],{"start":54},[495,140006,140007],{},"实例",[31,140009,140010],{"className":129121,"code":139883,"language":129123,"meta":36,"style":36},[26,140011,140012,140016,140026,140036,140050,140064,140078],{"__ignoreMap":36},[40,140013,140014],{"class":42,"line":43},[40,140015,139764],{"class":997},[40,140017,140018,140020,140022,140024],{"class":42,"line":54},[40,140019,495],{"class":46},[40,140021,139771],{"class":596},[40,140023,139774],{"class":50},[40,140025,139777],{"class":997},[40,140027,140028,140030,140032,140034],{"class":42,"line":70},[40,140029,495],{"class":46},[40,140031,139784],{"class":596},[40,140033,139787],{"class":50},[40,140035,139790],{"class":997},[40,140037,140038,140040,140042,140044,140046,140048],{"class":42,"line":78},[40,140039,495],{"class":46},[40,140041,132035],{"class":596},[40,140043,3488],{"class":50},[40,140045,64],{"class":63},[40,140047,139803],{"class":50},[40,140049,139806],{"class":997},[40,140051,140052,140054,140056,140058,140060,140062],{"class":42,"line":86},[40,140053,495],{"class":46},[40,140055,132035],{"class":596},[40,140057,3488],{"class":50},[40,140059,139817],{"class":63},[40,140061,139820],{"class":50},[40,140063,139823],{"class":997},[40,140065,140066,140068,140070,140072,140074,140076],{"class":42,"line":100},[40,140067,495],{"class":46},[40,140069,132035],{"class":596},[40,140071,3488],{"class":50},[40,140073,139834],{"class":63},[40,140075,139837],{"class":50},[40,140077,139840],{"class":997},[40,140079,140080,140082,140084,140086,140088,140090],{"class":42,"line":108},[40,140081,495],{"class":46},[40,140083,132035],{"class":596},[40,140085,3488],{"class":50},[40,140087,139851],{"class":63},[40,140089,139837],{"class":50},[40,140091,139856],{"class":997},[438,140093],{"style":128977,"src":140094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[492,140096,140097],{"start":70},[495,140098,140099],{},"使用场景1",[438,140101],{"style":128977,"src":140102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,140104,140105],{},"不需要再加盒子来整红色那部分了",[31,140107,140109],{"className":129121,"code":140108,"language":129123,"meta":36,"style":36},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[26,140110,140111,140116,140125,140136,140146,140150,140159,140170,140180],{"__ignoreMap":36},[40,140112,140113],{"class":42,"line":43},[40,140114,140115],{"class":997},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[40,140117,140118,140120,140123],{"class":42,"line":54},[40,140119,54909],{"class":46},[40,140121,140122],{"class":596},"::before",[40,140124,18894],{"class":50},[40,140126,140127,140130,140132,140134],{"class":42,"line":70},[40,140128,140129],{"class":63},"  content",[40,140131,60],{"class":50},[40,140133,285],{"class":94},[40,140135,4637],{"class":50},[40,140137,140138,140140,140142,140144],{"class":42,"line":78},[40,140139,130737],{"class":63},[40,140141,60],{"class":50},[40,140143,64167],{"class":63},[40,140145,4637],{"class":50},[40,140147,140148],{"class":42,"line":86},[40,140149,4907],{"class":50},[40,140151,140152,140154,140157],{"class":42,"line":100},[40,140153,54909],{"class":46},[40,140155,140156],{"class":596},"::after",[40,140158,18894],{"class":50},[40,140160,140161,140163,140165,140168],{"class":42,"line":108},[40,140162,140129],{"class":63},[40,140164,60],{"class":50},[40,140166,140167],{"class":94},"\"→\"",[40,140169,4637],{"class":50},[40,140171,140172,140174,140176,140178],{"class":42,"line":121},[40,140173,74201],{"class":63},[40,140175,60],{"class":50},[40,140177,65368],{"class":63},[40,140179,4637],{"class":50},[40,140181,140182],{"class":42,"line":134},[40,140183,4907],{"class":50},[438,140185],{"style":128977,"src":140186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,140188,140189],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[438,140191],{"style":128977,"src":140192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,140194,140195],{},"但是在引用时需要先转义一下",[19,140197,140198],{},"content='\\e930'",[492,140200,140201],{"start":78},[495,140202,140203],{},"使用场景2",[19,140205,140206],{},"仿土豆效果",[19,140208,140209],{},"通过使用伪元素选择器可以减少body中盒子的数量",[31,140211,140212],{"className":129121,"code":140108,"language":129123,"meta":36,"style":36},[26,140213,140214,140218,140226,140236,140246,140250,140258,140268,140278],{"__ignoreMap":36},[40,140215,140216],{"class":42,"line":43},[40,140217,140115],{"class":997},[40,140219,140220,140222,140224],{"class":42,"line":54},[40,140221,54909],{"class":46},[40,140223,140122],{"class":596},[40,140225,18894],{"class":50},[40,140227,140228,140230,140232,140234],{"class":42,"line":70},[40,140229,140129],{"class":63},[40,140231,60],{"class":50},[40,140233,285],{"class":94},[40,140235,4637],{"class":50},[40,140237,140238,140240,140242,140244],{"class":42,"line":78},[40,140239,130737],{"class":63},[40,140241,60],{"class":50},[40,140243,64167],{"class":63},[40,140245,4637],{"class":50},[40,140247,140248],{"class":42,"line":86},[40,140249,4907],{"class":50},[40,140251,140252,140254,140256],{"class":42,"line":100},[40,140253,54909],{"class":46},[40,140255,140156],{"class":596},[40,140257,18894],{"class":50},[40,140259,140260,140262,140264,140266],{"class":42,"line":108},[40,140261,140129],{"class":63},[40,140263,60],{"class":50},[40,140265,140167],{"class":94},[40,140267,4637],{"class":50},[40,140269,140270,140272,140274,140276],{"class":42,"line":121},[40,140271,74201],{"class":63},[40,140273,60],{"class":50},[40,140275,65368],{"class":63},[40,140277,4637],{"class":50},[40,140279,140280],{"class":42,"line":134},[40,140281,4907],{"class":50},[438,140283],{"style":128977,"src":140284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[492,140286,140287],{"start":86},[495,140288,140289],{},"使用场景3",[19,140291,140292],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[31,140294,140296],{"className":129121,"code":140295,"language":129123,"meta":36,"style":36},".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",[26,140297,140298,140304,140314,140318,140322,140326,140334,140344,140354,140358,140366,140376,140386],{"__ignoreMap":36},[40,140299,140300,140302],{"class":42,"line":43},[40,140301,132969],{"class":596},[40,140303,18894],{"class":50},[40,140305,140306,140308,140310,140312],{"class":42,"line":54},[40,140307,133601],{"class":63},[40,140309,60],{"class":50},[40,140311,27055],{"class":63},[40,140313,4637],{"class":50},[40,140315,140316],{"class":42,"line":70},[40,140317,4907],{"class":50},[40,140319,140320],{"class":42,"line":78},[40,140321,138582],{"class":50},[40,140323,140324],{"class":42,"line":86},[40,140325,140115],{"class":997},[40,140327,140328,140330,140332],{"class":42,"line":100},[40,140329,54909],{"class":46},[40,140331,140122],{"class":596},[40,140333,18894],{"class":50},[40,140335,140336,140338,140340,140342],{"class":42,"line":108},[40,140337,140129],{"class":63},[40,140339,60],{"class":50},[40,140341,285],{"class":94},[40,140343,4637],{"class":50},[40,140345,140346,140348,140350,140352],{"class":42,"line":121},[40,140347,130737],{"class":63},[40,140349,60],{"class":50},[40,140351,64167],{"class":63},[40,140353,4637],{"class":50},[40,140355,140356],{"class":42,"line":134},[40,140357,4907],{"class":50},[40,140359,140360,140362,140364],{"class":42,"line":146},[40,140361,54909],{"class":46},[40,140363,140156],{"class":596},[40,140365,18894],{"class":50},[40,140367,140368,140370,140372,140374],{"class":42,"line":154},[40,140369,140129],{"class":63},[40,140371,60],{"class":50},[40,140373,140167],{"class":94},[40,140375,4637],{"class":50},[40,140377,140378,140380,140382,140384],{"class":42,"line":162},[40,140379,74201],{"class":63},[40,140381,60],{"class":50},[40,140383,65368],{"class":63},[40,140385,4637],{"class":50},[40,140387,140388],{"class":42,"line":170},[40,140389,4907],{"class":50},[19,140391,140392],{},"div {\nmargin: 0 auto;\n}",[31,140394,140397],{"className":140395,"code":140396,"language":8510},[8508],"\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",[26,140398,140396],{"__ignoreMap":36},[19,140400,140401],{},"如果想让多个元素都发生变化",[19,140403,140404],{},"不能如下操作：",[19,140406,140407],{},"transition: width 2s ease 0.5s;",[19,140409,140410],{},"transition: height 2s ease 0.5s;不对！！！",[19,140412,140413],{},"上方会样式冲突，导致不显示任何过渡效果",[19,140415,140416],{},"使用如下：加逗号隔开",[19,140418,140419],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,140421,140422],{},"transition all 2s ease;",[402,140424,140426],{"id":140425},"_1426-过渡练习","14.2.6 过渡练习",[492,140428,140429],{},[495,140430,140431],{},"进度条",[438,140433],{"style":128977,"src":140434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[31,140436,140438],{"className":129121,"code":140437,"language":129123,"meta":36,"style":36},"div {\n  transition: all 0.3s ease;\n}\n",[26,140439,140440,140446,140464],{"__ignoreMap":36},[40,140441,140442,140444],{"class":42,"line":43},[40,140443,54909],{"class":46},[40,140445,18894],{"class":50},[40,140447,140448,140451,140453,140455,140458,140460,140462],{"class":42,"line":54},[40,140449,140450],{"class":63},"  transition",[40,140452,60],{"class":50},[40,140454,31426],{"class":63},[40,140456,140457],{"class":63}," 0.3",[40,140459,4173],{"class":1283},[40,140461,81975],{"class":63},[40,140463,4637],{"class":50},[40,140465,140466],{"class":42,"line":70},[40,140467,4907],{"class":50},[492,140469,140470],{"start":54},[495,140471,140472],{},"小米logo",[19,140474,140475],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[31,140477,140479],{"className":129121,"code":140478,"language":129123,"meta":36,"style":36},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[26,140480,140481,140486,140492,140508,140513],{"__ignoreMap":36},[40,140482,140483],{"class":42,"line":43},[40,140484,140485],{"class":997},"\u002F* CSS3 过渡 *\u002F\n",[40,140487,140488,140490],{"class":42,"line":54},[40,140489,54909],{"class":46},[40,140491,18894],{"class":50},[40,140493,140494,140496,140498,140500,140502,140504,140506],{"class":42,"line":70},[40,140495,140450],{"class":63},[40,140497,60],{"class":50},[40,140499,31426],{"class":63},[40,140501,140457],{"class":63},[40,140503,4173],{"class":1283},[40,140505,81975],{"class":63},[40,140507,4637],{"class":50},[40,140509,140510],{"class":42,"line":78},[40,140511,140512],{"class":997},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[40,140514,140515],{"class":42,"line":86},[40,140516,4907],{"class":50},[19,140518,140519],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[3384,140521,140522],{},"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":36,"searchDepth":54,"depth":54,"links":140524},[140525,140530],{"id":138855,"depth":54,"text":138856,"children":140526},[140527,140528,140529],{"id":138859,"depth":70,"text":138860},{"id":138936,"depth":70,"text":138937},{"id":139267,"depth":70,"text":139268},{"id":139558,"depth":54,"text":139559,"children":140531},[140532,140533],{"id":139562,"depth":70,"text":139563},{"id":140425,"depth":70,"text":140426},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":138847,"description":3413},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":140540,"title":140541,"body":140542,"description":3413,"extension":3414,"meta":142286,"navigation":1412,"path":142287,"seo":142288,"stem":142289,"__hash__":142290},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":140543,"toc":142267},[140544,140547,140551,140554,140560,140566,140570,140572,140575,140578,140581,140584,140587,140590,140593,140597,140601,140604,140607,140610,140614,140617,140620,140625,140628,140631,140634,140638,140641,140650,140653,140656,140660,140663,140666,140671,140678,140692,140700,140707,140712,140715,140718,140721,140728,140732,140738,140744,140747,140750,140755,140761,140763,140771,140776,140779,140785,140787,140792,140797,140800,140802,140807,140810,140815,140820,140854,140858,140862,140865,140869,140872,140958,140961,140998,141001,141037,141041,141046,141059,141113,141115,141143,141145,141173,141179,141193,141195,141239,141241,141285,141288,141295,141306,141308,141335,141337,141363,141370,141386,141388,141482,141484,141578,141585,141588,141593,141599,141673,141676,141678,141714,141716,141752,141755,141762,141781,141784,141787,141789,141814,141816,141840,141843,141846,141876,141880,141883,141946,141948,142014,142016,142080,142083,142115,142117,142143,142145,142171,142174,142205,142207,142233,142235,142261,142264],[10,140545,140541],{"id":140546},"_15-品优购项目上篇-搭建与公共模块",[14,140548,140550],{"id":140549},"_151-项目规划","15.1 项目规划",[438,140552],{"style":128977,"src":140553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,140555,140556,140559],{},[409,140557,140558],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,140561,140562,140565],{},[409,140563,140564],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,140567,140569],{"id":140568},"_152-项目介绍","15.2 项目介绍",[19,140571,140558],{},[438,140573],{"style":128977,"src":140574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,140576,140577],{},"主页：",[438,140579],{"style":128977,"src":140580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,140582,140583],{},"列表页：",[438,140585],{"style":128977,"src":140586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,140588,140589],{},"注册页：",[438,140591],{"style":128977,"src":140592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,140594,140596],{"id":140595},"_153-项目搭建工作","15.3 项目搭建工作",[402,140598,140600],{"id":140599},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[438,140602],{"style":128977,"src":140603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,140605,140606],{},"经常更换的图片要放到upload文件夹中",[19,140608,140609],{},"不经常换的放到images文件夹中",[402,140611,140613],{"id":140612},"_1532-创建文件如下","15.3.2 创建文件如下",[438,140615],{"style":128977,"src":140616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[438,140618],{"style":128977,"src":140619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,140621,140622],{},[409,140623,140624],{},"初始化样式：",[19,140626,140627],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,140629,140630],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,140632,140633],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[402,140635,140637],{"id":140636},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,140639,140640],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,140642,140643,140644,140649],{},"这里最典型的应用就是 ",[409,140645,140646],{},[26,140647,140648],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[438,140651],{"style":128977,"src":140652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,140654,140655],{},"通过link方法来引入",[402,140657,140659],{"id":140658},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[438,140661],{"style":128977,"src":140662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,140664,140665],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[492,140667,140668],{},[495,140669,140670],{},"制作favicon图标",[19,140672,140673,140674,140677],{},"①把品优购图标切成 ",[26,140675,140676],{},"png"," 图片",[19,140679,140680,140681,140683,140684,140687,140688],{},"②把 ",[26,140682,140676],{}," 图片转换为 ",[26,140685,140686],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[2106,140689,140690],{"href":140690,"rel":140691},"http:\u002F\u002Fwww.bitbug.net\u002F",[2110],[492,140693,140694,140697],{"start":54},[495,140695,140696],{},"favicon图标放到网站根目录下",[495,140698,140699],{},"HTML页面引入favicon",[19,140701,140702,140703,140706],{},"在html 页面里面的 ",[26,140704,140705],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,140708,140709],{},[26,140710,140711],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,140713,140714],{},"复制这行代码或者在生成这个的网站进行复制",[438,140716],{"style":128977,"src":140717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,140719,140720],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,140722,140723,140724],{},"例如:",[2106,140725,140726],{"href":140726,"rel":140727},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[2110],[402,140729,140731],{"id":140730},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,140733,140734,140737],{},[409,140735,140736],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,140739,140740,140743],{},[409,140741,140742],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,140745,140746],{},"页面必须有三个标签用来符合 SEO 优化",[438,140748],{"style":128977,"src":140749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[492,140751,140752],{},[495,140753,140754],{},"title网站标题",[19,140756,140757,140760],{},[409,140758,140759],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,140762,72088],{},[1338,140764,140765,140768],{},[495,140766,140767],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[495,140769,140770],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[492,140772,140773],{"start":54},[495,140774,140775],{},"description网站描述",[19,140777,140778],{},"简要说明我们网站主要是做什么的",[19,140780,140781,140784],{},[409,140782,140783],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,140786,72088],{},[19,140788,140789],{},[26,140790,140791],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[492,140793,140794],{"start":70},[495,140795,140796],{},"keywords关键词",[19,140798,140799],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,140801,72088],{},[19,140803,140804],{},[26,140805,140806],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,140808,140809],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,140811,140812],{},[409,140813,140814],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[492,140816,140817],{"start":78},[495,140818,140819],{},"代码总结",[31,140821,140822],{"className":129868,"code":133225,"language":129870,"meta":36,"style":36},[26,140823,140824,140828,140842,140846],{"__ignoreMap":36},[40,140825,140826],{"class":42,"line":43},[40,140827,133232],{"class":997},[40,140829,140830,140832,140834,140836,140838,140840],{"class":42,"line":54},[40,140831,4387],{"class":50},[40,140833,54909],{"class":46},[40,140835,56784],{"class":596},[40,140837,1284],{"class":50},[40,140839,133245],{"class":94},[40,140841,54606],{"class":50},[40,140843,140844],{"class":42,"line":70},[40,140845,133252],{"class":50},[40,140847,140848,140850,140852],{"class":42,"line":78},[40,140849,55083],{"class":50},[40,140851,54909],{"class":46},[40,140853,54606],{"class":50},[14,140855,140857],{"id":140856},"_154-项目公共部分制作","15.4 项目公共部分制作",[402,140859,140861],{"id":140860},"_1541-常用模块类命名","15.4.1 常用模块类命名",[438,140863],{"style":128977,"src":140864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[402,140866,140868],{"id":140867},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,140870,140871],{},"布局思路：",[1338,140873,140874,140877,140880,140902,140935],{},[495,140875,140876],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[495,140878,140879],{},"里面包含版心的盒子",[495,140881,140882,140883],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1338,140884,140885,140893,140899],{},[495,140886,140887,140888,24821,140890,140892],{},"1 号盒子 里面包含一个",[26,140889,1338],{},[26,140891,1338],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[495,140894,140895,140896,140898],{},"里面的内容是水平排列，所以需要给",[26,140897,495],{},"设置浮动",[495,140900,140901],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[495,140903,140904,140905],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1338,140906,140907,140921,140926],{},[495,140908,140909,140910,24821,140912,140914,140915,140917,140918,140920],{},"2 号盒子 里面包含一个",[26,140911,1338],{},[26,140913,1338],{},"包裹",[26,140916,495],{},"，中间的",[26,140919,4398],{},"可以用样式去设置，也可以用字符 |",[495,140922,140923,140924,140898],{},"里面内容水平排列，给",[26,140925,495],{},[495,140927,140928,140929,140931,140932,140934],{},"找到里面所有偶数的 ",[26,140930,495],{}," 设置样式（偶数的 ",[26,140933,495],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[495,140936,140937,140938],{},"需要用到字体图标",[1338,140939,140940,140946,140949,140952,140955],{},[495,140941,140942,140943],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[26,140944,140945],{},"arrow-icon",[495,140947,140948],{},"先要引入字体图片的资源",[495,140950,140951],{},"在样式里面利用 font-face 来进行声明",[495,140953,140954],{},"在伪元素的 content属性设置 图标的编码",[495,140956,140957],{},"给伪元素设置font-family属性",[19,140959,140960],{},"结构实例代码：",[31,140962,140964],{"className":129121,"code":140963,"language":129123,"meta":36,"style":36},"div::before {\n  content: \"\";\n  display: block;\n}\n",[26,140965,140966,140974,140984,140994],{"__ignoreMap":36},[40,140967,140968,140970,140972],{"class":42,"line":43},[40,140969,54909],{"class":46},[40,140971,140122],{"class":596},[40,140973,18894],{"class":50},[40,140975,140976,140978,140980,140982],{"class":42,"line":54},[40,140977,140129],{"class":63},[40,140979,60],{"class":50},[40,140981,285],{"class":94},[40,140983,4637],{"class":50},[40,140985,140986,140988,140990,140992],{"class":42,"line":70},[40,140987,130737],{"class":63},[40,140989,60],{"class":50},[40,140991,64167],{"class":63},[40,140993,4637],{"class":50},[40,140995,140996],{"class":42,"line":78},[40,140997,4907],{"class":50},[19,140999,141000],{},"样式实例代码：",[31,141002,141003],{"className":129121,"code":140963,"language":129123,"meta":36,"style":36},[26,141004,141005,141013,141023,141033],{"__ignoreMap":36},[40,141006,141007,141009,141011],{"class":42,"line":43},[40,141008,54909],{"class":46},[40,141010,140122],{"class":596},[40,141012,18894],{"class":50},[40,141014,141015,141017,141019,141021],{"class":42,"line":54},[40,141016,140129],{"class":63},[40,141018,60],{"class":50},[40,141020,285],{"class":94},[40,141022,4637],{"class":50},[40,141024,141025,141027,141029,141031],{"class":42,"line":70},[40,141026,130737],{"class":63},[40,141028,60],{"class":50},[40,141030,64167],{"class":63},[40,141032,4637],{"class":50},[40,141034,141035],{"class":42,"line":78},[40,141036,4907],{"class":50},[402,141038,141040],{"id":141039},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1338,141042,141043],{},[495,141044,141045],{},"header 盒子必须要有高度",[19,141047,141048,141049,141051,141052],{},"1 号盒子是 ",[26,141050,134133],{}," 标志定位，在正常开发过程中， ",[409,141053,141054,141055,141058],{},"logo的布局其实是有讲究的，需要进行 ",[26,141056,141057],{},"logoSEO","的优化 （★★★）",[1338,141060,141061,141069,141077,141104],{},[495,141062,141063,141065,141066,141068],{},[26,141064,134133],{}," 里面首先放一个 ",[26,141067,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[495,141070,141071,141073,141074,141076],{},[26,141072,10],{}," 里面再放一个链接，可以返回首页的，把 ",[26,141075,134133],{}," 的背景图片给链接即可",[495,141078,141079,141080],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1338,141081,141082,141097],{},[495,141083,141084,141085,141088,141089,141092,141093,141096],{},"方法1：",[26,141086,141087],{},"text-indent"," 移到盒子外面（",[26,141090,141091],{},"text-indent: -9999px",") ，然后 ",[26,141094,141095],{},"overflow:hidden"," ，淘宝的做法",[495,141098,141099,141100,141103],{},"方法2：直接给 ",[26,141101,141102],{},"font-size: 0;"," 就看不到文字了，京东的做法",[495,141105,141106,141107,141109,141110,141112],{},"最后给链接一个 ",[26,141108,54706],{}," 属性，这样鼠标放到 ",[26,141111,134133],{}," 上就可以看到提示文字了",[19,141114,140960],{},[31,141116,141117],{"className":129868,"code":134354,"language":129870,"meta":36,"style":36},[26,141118,141119],{"__ignoreMap":36},[40,141120,141121,141123,141125,141127,141129,141131,141133,141135,141137,141139,141141],{"class":42,"line":43},[40,141122,4387],{"class":50},[40,141124,2106],{"class":46},[40,141126,64355],{"class":596},[40,141128,1284],{"class":50},[40,141130,134369],{"class":94},[40,141132,134372],{"class":596},[40,141134,1284],{"class":50},[40,141136,134377],{"class":94},[40,141138,134380],{"class":50},[40,141140,2106],{"class":46},[40,141142,54606],{"class":50},[19,141144,141000],{},[31,141146,141147],{"className":129868,"code":134354,"language":129870,"meta":36,"style":36},[26,141148,141149],{"__ignoreMap":36},[40,141150,141151,141153,141155,141157,141159,141161,141163,141165,141167,141169,141171],{"class":42,"line":43},[40,141152,4387],{"class":50},[40,141154,2106],{"class":46},[40,141156,64355],{"class":596},[40,141158,1284],{"class":50},[40,141160,134369],{"class":94},[40,141162,134372],{"class":596},[40,141164,1284],{"class":50},[40,141166,134377],{"class":94},[40,141168,134380],{"class":50},[40,141170,2106],{"class":46},[40,141172,54606],{"class":50},[19,141174,141175,141176,141178],{},"2 号盒子是 ",[26,141177,134146],{}," 搜索模块定位",[1338,141180,141181,141184,141187,141190],{},[495,141182,141183],{},"search盒子利用定位的方式放在对应的位置",[495,141185,141186],{},"search盒子设置绝对定位，header盒子设置相对定位",[495,141188,141189],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[495,141191,141192],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,141194,140960],{},[31,141196,141197],{"className":129121,"code":134441,"language":129123,"meta":36,"style":36},[26,141198,141199,141221,141225,141235],{"__ignoreMap":36},[40,141200,141201,141203,141205,141207,141209,141211,141213,141215,141217,141219],{"class":42,"line":43},[40,141202,54909],{"class":46},[40,141204,15757],{"class":50},[40,141206,19],{"class":46},[40,141208,15757],{"class":50},[40,141210,10],{"class":46},[40,141212,15757],{"class":50},[40,141214,1338],{"class":46},[40,141216,15757],{"class":50},[40,141218,495],{"class":46},[40,141220,18894],{"class":50},[40,141222,141223],{"class":42,"line":54},[40,141224,134470],{"class":997},[40,141226,141227,141229,141231,141233],{"class":42,"line":70},[40,141228,130737],{"class":63},[40,141230,60],{"class":50},[40,141232,64167],{"class":63},[40,141234,4637],{"class":50},[40,141236,141237],{"class":42,"line":78},[40,141238,4907],{"class":50},[19,141240,141000],{},[31,141242,141243],{"className":129121,"code":134441,"language":129123,"meta":36,"style":36},[26,141244,141245,141267,141271,141281],{"__ignoreMap":36},[40,141246,141247,141249,141251,141253,141255,141257,141259,141261,141263,141265],{"class":42,"line":43},[40,141248,54909],{"class":46},[40,141250,15757],{"class":50},[40,141252,19],{"class":46},[40,141254,15757],{"class":50},[40,141256,10],{"class":46},[40,141258,15757],{"class":50},[40,141260,1338],{"class":46},[40,141262,15757],{"class":50},[40,141264,495],{"class":46},[40,141266,18894],{"class":50},[40,141268,141269],{"class":42,"line":54},[40,141270,134470],{"class":997},[40,141272,141273,141275,141277,141279],{"class":42,"line":70},[40,141274,130737],{"class":63},[40,141276,60],{"class":50},[40,141278,64167],{"class":63},[40,141280,4637],{"class":50},[40,141282,141283],{"class":42,"line":78},[40,141284,4907],{"class":50},[19,141286,141287],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,141289,141290,141291,141294],{},"3 号盒子是 ",[26,141292,141293],{},"hotwords"," 热词模块定位",[1338,141296,141297,141300,141303],{},[495,141298,141299],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[495,141301,141302],{},"给里面所有的a标签设置 左右10px的外边距",[495,141304,141305],{},"给第一个a标签设置文字变红色（#c81623）",[19,141307,140960],{},[31,141309,141311],{"className":129121,"code":141310,"language":129123,"meta":36,"style":36},"div {\n  margin: 0 auto;\n}\n",[26,141312,141313,141319,141331],{"__ignoreMap":36},[40,141314,141315,141317],{"class":42,"line":43},[40,141316,54909],{"class":46},[40,141318,18894],{"class":50},[40,141320,141321,141323,141325,141327,141329],{"class":42,"line":54},[40,141322,73766],{"class":63},[40,141324,60],{"class":50},[40,141326,3672],{"class":63},[40,141328,54854],{"class":63},[40,141330,4637],{"class":50},[40,141332,141333],{"class":42,"line":70},[40,141334,4907],{"class":50},[19,141336,141000],{},[31,141338,141339],{"className":129121,"code":141310,"language":129123,"meta":36,"style":36},[26,141340,141341,141347,141359],{"__ignoreMap":36},[40,141342,141343,141345],{"class":42,"line":43},[40,141344,54909],{"class":46},[40,141346,18894],{"class":50},[40,141348,141349,141351,141353,141355,141357],{"class":42,"line":54},[40,141350,73766],{"class":63},[40,141352,60],{"class":50},[40,141354,3672],{"class":63},[40,141356,54854],{"class":63},[40,141358,4637],{"class":50},[40,141360,141361],{"class":42,"line":70},[40,141362,4907],{"class":50},[19,141364,141365,141366,141369],{},"4 号盒子是 ",[26,141367,141368],{},"shopcar"," 购物车模块",[1338,141371,141372,141377,141380,141383],{},[495,141373,1248,141374,141376],{},[26,141375,141368],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[495,141378,141379],{},"count 统计部分用绝对定位做",[495,141381,141382],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[495,141384,141385],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,141387,140960],{},[31,141389,141390],{"className":129121,"code":134553,"language":129123,"meta":36,"style":36},[26,141391,141392,141396,141410,141414,141428,141432,141446,141450,141464,141468],{"__ignoreMap":36},[40,141393,141394],{"class":42,"line":43},[40,141395,134560],{"class":997},[40,141397,141398,141400,141402,141404,141406,141408],{"class":42,"line":54},[40,141399,134565],{"class":596},[40,141401,83102],{"class":50},[40,141403,131481],{"class":63},[40,141405,60],{"class":50},[40,141407,134574],{"class":63},[40,141409,132051],{"class":50},[40,141411,141412],{"class":42,"line":70},[40,141413,134581],{"class":997},[40,141415,141416,141418,141420,141422,141424,141426],{"class":42,"line":78},[40,141417,134586],{"class":596},[40,141419,83102],{"class":50},[40,141421,131481],{"class":63},[40,141423,60],{"class":50},[40,141425,58062],{"class":63},[40,141427,132051],{"class":50},[40,141429,141430],{"class":42,"line":86},[40,141431,134601],{"class":997},[40,141433,141434,141436,141438,141440,141442,141444],{"class":42,"line":100},[40,141435,134606],{"class":596},[40,141437,83102],{"class":50},[40,141439,131481],{"class":63},[40,141441,60],{"class":50},[40,141443,58129],{"class":63},[40,141445,132051],{"class":50},[40,141447,141448],{"class":42,"line":108},[40,141449,134621],{"class":997},[40,141451,141452,141454,141456,141458,141460,141462],{"class":42,"line":121},[40,141453,134626],{"class":596},[40,141455,83102],{"class":50},[40,141457,131481],{"class":63},[40,141459,60],{"class":50},[40,141461,89528],{"class":63},[40,141463,132051],{"class":50},[40,141465,141466],{"class":42,"line":134},[40,141467,134641],{"class":997},[40,141469,141470,141472,141474,141476,141478,141480],{"class":42,"line":146},[40,141471,134646],{"class":596},[40,141473,83102],{"class":50},[40,141475,131481],{"class":63},[40,141477,60],{"class":50},[40,141479,134655],{"class":63},[40,141481,132051],{"class":50},[19,141483,141000],{},[31,141485,141486],{"className":129121,"code":134553,"language":129123,"meta":36,"style":36},[26,141487,141488,141492,141506,141510,141524,141528,141542,141546,141560,141564],{"__ignoreMap":36},[40,141489,141490],{"class":42,"line":43},[40,141491,134560],{"class":997},[40,141493,141494,141496,141498,141500,141502,141504],{"class":42,"line":54},[40,141495,134565],{"class":596},[40,141497,83102],{"class":50},[40,141499,131481],{"class":63},[40,141501,60],{"class":50},[40,141503,134574],{"class":63},[40,141505,132051],{"class":50},[40,141507,141508],{"class":42,"line":70},[40,141509,134581],{"class":997},[40,141511,141512,141514,141516,141518,141520,141522],{"class":42,"line":78},[40,141513,134586],{"class":596},[40,141515,83102],{"class":50},[40,141517,131481],{"class":63},[40,141519,60],{"class":50},[40,141521,58062],{"class":63},[40,141523,132051],{"class":50},[40,141525,141526],{"class":42,"line":86},[40,141527,134601],{"class":997},[40,141529,141530,141532,141534,141536,141538,141540],{"class":42,"line":100},[40,141531,134606],{"class":596},[40,141533,83102],{"class":50},[40,141535,131481],{"class":63},[40,141537,60],{"class":50},[40,141539,58129],{"class":63},[40,141541,132051],{"class":50},[40,141543,141544],{"class":42,"line":108},[40,141545,134621],{"class":997},[40,141547,141548,141550,141552,141554,141556,141558],{"class":42,"line":121},[40,141549,134626],{"class":596},[40,141551,83102],{"class":50},[40,141553,131481],{"class":63},[40,141555,60],{"class":50},[40,141557,89528],{"class":63},[40,141559,132051],{"class":50},[40,141561,141562],{"class":42,"line":134},[40,141563,134641],{"class":997},[40,141565,141566,141568,141570,141572,141574,141576],{"class":42,"line":146},[40,141567,134646],{"class":596},[40,141569,83102],{"class":50},[40,141571,131481],{"class":63},[40,141573,60],{"class":50},[40,141575,134655],{"class":63},[40,141577,132051],{"class":50},[402,141579,141581,141582,141584],{"id":141580},"_1544-nav导航模块制作","15.4.4 ",[26,141583,57011],{},"导航模块制作",[438,141586],{"style":128977,"src":141587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,141589,141590,141592],{},[26,141591,57011],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,141594,141595,141596],{},"1 号盒子左侧浮动，",[26,141597,141598],{},"dropdown",[1338,141600,141601,141611,141619,141625,141633,141643,141651,141662],{},[495,141602,141603,141604,104312,141607,141610],{},"1号盒子有讲究，根据相关性 里面包含 ",[26,141605,141606],{},".dt",[26,141608,141609],{},".dd"," 两个盒子",[495,141612,141613,141615,141616,141618],{},[26,141614,141606],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[26,141617,141609],{}," 挤到下面去了",[495,141620,141621,141622,141624],{},"给 ",[26,141623,141609],{}," 盒子设置宽度 和 高度，以及背景颜色",[495,141626,141621,141627,141629,141630,123519],{},[26,141628,141609],{}," 盒子里面定义 无序列表 （",[26,141631,141632],{},"ul > li > a",[495,141634,141635,141636,141638,141639,141642],{},"每个 ",[26,141637,495],{}," 都有一个高度（",[26,141640,141641],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[495,141644,141621,141645,141647,141648,123519],{},[26,141646,495],{}," 里面的a设置文字大小（",[26,141649,141650],{},"14px",[495,141652,141621,141653,141655,141656,141658,141659,141661],{},[26,141654,495],{}," 设置 ",[26,141657,130282],{},"，当鼠标移入的时候，让",[26,141660,495],{},"的背景变成白色，让里面的文字变成红色",[495,141663,141664,141666,141667,141669,141670,141672],{},[26,141665,495],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[26,141668,495],{},"的右侧，那么给",[26,141671,495],{},"设置相对定位",[19,141674,141675],{},"一定要注意相关性",[19,141677,140960],{},[31,141679,141680],{"className":129121,"code":140963,"language":129123,"meta":36,"style":36},[26,141681,141682,141690,141700,141710],{"__ignoreMap":36},[40,141683,141684,141686,141688],{"class":42,"line":43},[40,141685,54909],{"class":46},[40,141687,140122],{"class":596},[40,141689,18894],{"class":50},[40,141691,141692,141694,141696,141698],{"class":42,"line":54},[40,141693,140129],{"class":63},[40,141695,60],{"class":50},[40,141697,285],{"class":94},[40,141699,4637],{"class":50},[40,141701,141702,141704,141706,141708],{"class":42,"line":70},[40,141703,130737],{"class":63},[40,141705,60],{"class":50},[40,141707,64167],{"class":63},[40,141709,4637],{"class":50},[40,141711,141712],{"class":42,"line":78},[40,141713,4907],{"class":50},[19,141715,141000],{},[31,141717,141718],{"className":129121,"code":140963,"language":129123,"meta":36,"style":36},[26,141719,141720,141728,141738,141748],{"__ignoreMap":36},[40,141721,141722,141724,141726],{"class":42,"line":43},[40,141723,54909],{"class":46},[40,141725,140122],{"class":596},[40,141727,18894],{"class":50},[40,141729,141730,141732,141734,141736],{"class":42,"line":54},[40,141731,140129],{"class":63},[40,141733,60],{"class":50},[40,141735,285],{"class":94},[40,141737,4637],{"class":50},[40,141739,141740,141742,141744,141746],{"class":42,"line":70},[40,141741,130737],{"class":63},[40,141743,60],{"class":50},[40,141745,64167],{"class":63},[40,141747,4637],{"class":50},[40,141749,141750],{"class":42,"line":78},[40,141751,4907],{"class":50},[19,141753,141754],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,141756,141757,141758,141761],{},"2 号盒子左侧浮动，",[26,141759,141760],{},"navitems"," 导航栏组",[1338,141763,141764,141769,141778],{},[495,141765,141766,141767],{},"里面结构是 ",[26,141768,141632],{},[495,141770,141771,141772,141774,141775,141777],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[26,141773,2106],{},"左右的",[26,141776,34183],{},"把两侧撑开",[495,141779,141780],{},"让文字垂直居中（行高等于高度）",[438,141782],{"style":128977,"src":141783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,141785,141786],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,141788,140960],{},[31,141790,141792],{"className":129121,"code":141791,"language":129123,"meta":36,"style":36},".box {\n  float: left;\n}\n",[26,141793,141794,141800,141810],{"__ignoreMap":36},[40,141795,141796,141798],{"class":42,"line":43},[40,141797,132969],{"class":596},[40,141799,18894],{"class":50},[40,141801,141802,141804,141806,141808],{"class":42,"line":54},[40,141803,133601],{"class":63},[40,141805,60],{"class":50},[40,141807,27055],{"class":63},[40,141809,4637],{"class":50},[40,141811,141812],{"class":42,"line":70},[40,141813,4907],{"class":50},[19,141815,141000],{},[31,141817,141818],{"className":129121,"code":141791,"language":129123,"meta":36,"style":36},[26,141819,141820,141826,141836],{"__ignoreMap":36},[40,141821,141822,141824],{"class":42,"line":43},[40,141823,132969],{"class":596},[40,141825,18894],{"class":50},[40,141827,141828,141830,141832,141834],{"class":42,"line":54},[40,141829,133601],{"class":63},[40,141831,60],{"class":50},[40,141833,27055],{"class":63},[40,141835,4637],{"class":50},[40,141837,141838],{"class":42,"line":70},[40,141839,4907],{"class":50},[19,141841,141842],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[438,141844],{"style":128977,"src":141845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[31,141847,141848],{"className":129121,"code":133278,"language":129123,"meta":36,"style":36},[26,141849,141850,141856,141872],{"__ignoreMap":36},[40,141851,141852,141854],{"class":42,"line":43},[40,141853,54909],{"class":46},[40,141855,18894],{"class":50},[40,141857,141858,141860,141862,141864,141866,141868,141870],{"class":42,"line":54},[40,141859,74192],{"class":63},[40,141861,60],{"class":50},[40,141863,3698],{"class":63},[40,141865,54790],{"class":1283},[40,141867,54819],{"class":63},[40,141869,132513],{"class":63},[40,141871,4637],{"class":50},[40,141873,141874],{"class":42,"line":70},[40,141875,4907],{"class":50},[402,141877,141879],{"id":141878},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[438,141881],{"style":128977,"src":141882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1338,141884,141885,141890,141895],{},[495,141886,141887,141889],{},[26,141888,134324],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[495,141891,141892,141894],{},[26,141893,134324],{}," 里面有一个大的版心",[495,141896,141897,141898,141901,141902],{},"版心里面包含 1 号盒子，",[26,141899,141900],{},"mod_service"," 是服务模块，mod 是模块的意思",[1338,141903,141904,141909,141922,141938,141943],{},[495,141905,141621,141906,141908],{},[26,141907,141900],{}," 设置高度（80px）和下边框",[495,141910,141911,141912,141915,141916,141918,141919,141921],{},"在里面定义 ",[26,141913,141914],{},"ul > li"," ,每个",[26,141917,495],{}," 宽度是300px 高度是 50px，给每个",[26,141920,495],{},"设置35px的左内边距",[495,141923,141924,141925,141927,141928,141930,141931,141933,141934,2046,141936,123519],{},"在每个",[26,141926,495],{},"里面，放一个 ",[26,141929,26230],{},"（里面放图标），一个",[26,141932,54909],{},"（里面放",[26,141935,54909],{},[26,141937,19],{},[495,141939,141621,141940,141942],{},[26,141941,26230],{},"设置浮动，让h5与这个div左右排列",[495,141944,141945],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,141947,140960],{},[31,141949,141951],{"className":129121,"code":141950,"language":129123,"meta":36,"style":36},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[26,141952,141953,141959,141971,141983,142010],{"__ignoreMap":36},[40,141954,141955,141957],{"class":42,"line":43},[40,141956,136878],{"class":596},[40,141958,18894],{"class":50},[40,141960,141961,141963,141965,141967,141969],{"class":42,"line":54},[40,141962,73864],{"class":63},[40,141964,60],{"class":50},[40,141966,4178],{"class":63},[40,141968,54790],{"class":1283},[40,141970,4637],{"class":50},[40,141972,141973,141975,141977,141979,141981],{"class":42,"line":70},[40,141974,74084],{"class":63},[40,141976,60],{"class":50},[40,141978,4178],{"class":63},[40,141980,54790],{"class":1283},[40,141982,4637],{"class":50},[40,141984,141985,141987,141989,141991,141993,141995,141997,141999,142002,142004,142006,142008],{"class":42,"line":78},[40,141986,73907],{"class":63},[40,141988,60],{"class":50},[40,141990,65024],{"class":63},[40,141992,3488],{"class":50},[40,141994,136917],{"class":8539},[40,141996,17036],{"class":50},[40,141998,65034],{"class":63},[40,142000,142001],{"class":63}," -10",[40,142003,54790],{"class":1283},[40,142005,136936],{"class":63},[40,142007,54790],{"class":1283},[40,142009,4637],{"class":50},[40,142011,142012],{"class":42,"line":86},[40,142013,4907],{"class":50},[19,142015,141000],{},[31,142017,142018],{"className":129121,"code":141950,"language":129123,"meta":36,"style":36},[26,142019,142020,142026,142038,142050,142076],{"__ignoreMap":36},[40,142021,142022,142024],{"class":42,"line":43},[40,142023,136878],{"class":596},[40,142025,18894],{"class":50},[40,142027,142028,142030,142032,142034,142036],{"class":42,"line":54},[40,142029,73864],{"class":63},[40,142031,60],{"class":50},[40,142033,4178],{"class":63},[40,142035,54790],{"class":1283},[40,142037,4637],{"class":50},[40,142039,142040,142042,142044,142046,142048],{"class":42,"line":70},[40,142041,74084],{"class":63},[40,142043,60],{"class":50},[40,142045,4178],{"class":63},[40,142047,54790],{"class":1283},[40,142049,4637],{"class":50},[40,142051,142052,142054,142056,142058,142060,142062,142064,142066,142068,142070,142072,142074],{"class":42,"line":78},[40,142053,73907],{"class":63},[40,142055,60],{"class":50},[40,142057,65024],{"class":63},[40,142059,3488],{"class":50},[40,142061,136917],{"class":8539},[40,142063,17036],{"class":50},[40,142065,65034],{"class":63},[40,142067,142001],{"class":63},[40,142069,54790],{"class":1283},[40,142071,136936],{"class":63},[40,142073,54790],{"class":1283},[40,142075,4637],{"class":50},[40,142077,142078],{"class":42,"line":86},[40,142079,4907],{"class":50},[19,142081,142082],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1338,142084,142085,142088,142094,142100,142112],{},[495,142086,142087],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[495,142089,142090,142091,123519],{},"里面的布局利用 自定义列表来实现（",[26,142092,142093],{},"dl > dt + dd",[495,142095,141621,142096,142099],{},[26,142097,142098],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[495,142101,141621,142102,142105,142106,2046,142108,142111],{},[26,142103,142104],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[26,142107,142104],{},[26,142109,142110],{},"dd","之间有些距离",[495,142113,142114],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,142116,140960],{},[31,142118,142119],{"className":129121,"code":141310,"language":129123,"meta":36,"style":36},[26,142120,142121,142127,142139],{"__ignoreMap":36},[40,142122,142123,142125],{"class":42,"line":43},[40,142124,54909],{"class":46},[40,142126,18894],{"class":50},[40,142128,142129,142131,142133,142135,142137],{"class":42,"line":54},[40,142130,73766],{"class":63},[40,142132,60],{"class":50},[40,142134,3672],{"class":63},[40,142136,54854],{"class":63},[40,142138,4637],{"class":50},[40,142140,142141],{"class":42,"line":70},[40,142142,4907],{"class":50},[19,142144,141000],{},[31,142146,142147],{"className":129121,"code":141310,"language":129123,"meta":36,"style":36},[26,142148,142149,142155,142167],{"__ignoreMap":36},[40,142150,142151,142153],{"class":42,"line":43},[40,142152,54909],{"class":46},[40,142154,18894],{"class":50},[40,142156,142157,142159,142161,142163,142165],{"class":42,"line":54},[40,142158,73766],{"class":63},[40,142160,60],{"class":50},[40,142162,3672],{"class":63},[40,142164,54854],{"class":63},[40,142166,4637],{"class":50},[40,142168,142169],{"class":42,"line":70},[40,142170,4907],{"class":50},[19,142172,142173],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1338,142175,142176,142185,142188,142199],{},[495,142177,142178,142179,142181,142182,142184],{},"分为上下两块，上面是 ",[26,142180,134341],{}," 友情链接，下面是 ",[26,142183,134334],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[495,142186,142187],{},"把内容分别复制到相应模块中",[495,142189,141621,142190,142192,142193,142195,142196,142198],{},[26,142191,134341],{}," 设置 15px 的下外边距，给",[26,142194,134341],{}," 里面 的 ",[26,142197,2106],{}," 标签设置 左右 3px 的外边距",[495,142200,142201,142202,142204],{},"给",[26,142203,134334],{}," 设置 20px 的行高",[19,142206,140960],{},[31,142208,142209],{"className":129121,"code":141310,"language":129123,"meta":36,"style":36},[26,142210,142211,142217,142229],{"__ignoreMap":36},[40,142212,142213,142215],{"class":42,"line":43},[40,142214,54909],{"class":46},[40,142216,18894],{"class":50},[40,142218,142219,142221,142223,142225,142227],{"class":42,"line":54},[40,142220,73766],{"class":63},[40,142222,60],{"class":50},[40,142224,3672],{"class":63},[40,142226,54854],{"class":63},[40,142228,4637],{"class":50},[40,142230,142231],{"class":42,"line":70},[40,142232,4907],{"class":50},[19,142234,141000],{},[31,142236,142237],{"className":129121,"code":141310,"language":129123,"meta":36,"style":36},[26,142238,142239,142245,142257],{"__ignoreMap":36},[40,142240,142241,142243],{"class":42,"line":43},[40,142242,54909],{"class":46},[40,142244,18894],{"class":50},[40,142246,142247,142249,142251,142253,142255],{"class":42,"line":54},[40,142248,73766],{"class":63},[40,142250,60],{"class":50},[40,142252,3672],{"class":63},[40,142254,54854],{"class":63},[40,142256,4637],{"class":50},[40,142258,142259],{"class":42,"line":70},[40,142260,4907],{"class":50},[19,142262,142263],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[3384,142265,142266],{},"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":36,"searchDepth":54,"depth":54,"links":142268},[142269,142270,142271,142278],{"id":140549,"depth":54,"text":140550},{"id":140568,"depth":54,"text":140569},{"id":140595,"depth":54,"text":140596,"children":142272},[142273,142274,142275,142276,142277],{"id":140599,"depth":70,"text":140600},{"id":140612,"depth":70,"text":140613},{"id":140636,"depth":70,"text":140637},{"id":140658,"depth":70,"text":140659},{"id":140730,"depth":70,"text":140731},{"id":140856,"depth":54,"text":140857,"children":142279},[142280,142281,142282,142283,142285],{"id":140860,"depth":70,"text":140861},{"id":140867,"depth":70,"text":140868},{"id":141039,"depth":70,"text":141040},{"id":141580,"depth":70,"text":142284},"15.4.4 nav导航模块制作",{"id":141878,"depth":70,"text":141879},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":140541,"description":3413},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":142292,"title":142293,"body":142294,"description":3413,"extension":3414,"meta":144696,"navigation":1412,"path":144697,"seo":144698,"stem":144699,"__hash__":144700},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":142295,"toc":144673},[142296,142299,142303,142307,142319,142322,142325,142328,142339,142341,142365,142367,142391,142396,142399,142401,142437,142439,142475,142478,142483,142486,142489,142492,142522,142529,142532,142542,142544,142578,142581,142615,142621,142638,142640,142676,142678,142714,142719,142744,142746,142772,142774,142798,142805,142808,142872,142874,142916,142918,142958,142965,142970,142972,143002,143004,143034,143038,143041,143048,143060,143062,143088,143090,143114,143117,143119,143143,143149,143159,143161,143191,143193,143223,143230,143271,143273,143309,143311,143347,143351,143354,143357,143360,143366,143371,143374,143397,143400,143424,143427,143451,143456,143459,143462,143465,143468,143471,143545,143547,143577,143579,143609,143612,143615,143647,143651,143655,143669,143678,143681,143686,143688,143782,143784,143878,143901,143903,143927,143929,143953,143960,143963,143973,143975,143999,144004,144012,144014,144044,144049,144089,144091,144117,144119,144145,144149,144152,144157,144160,144164,144172,144179,144187,144189,144219,144221,144251,144259,144262,144265,144267,144297,144299,144329,144332,144337,144339,144363,144365,144389,144392,144477,144479,144503,144505,144529,144533,144535,144559,144561,144595,144599,144613,144616,144621,144624,144629,144632,144662,144670],[10,142297,142293],{"id":142298},"_16-品优购项目下篇-主体与页面开发",[14,142300,142302],{"id":142301},"_161-项目主体模块制作","16.1 项目主体模块制作",[402,142304,142306],{"id":142305},"_1611-首页制作","16.1.1 首页制作",[19,142308,142309,142311,142312,142314,142315,142318],{},[409,142310,105349],{}," 主体模块是 ",[409,142313,77353],{}," 里面专有的，注意需要新的样式文件 ",[409,142316,142317],{},"index.css，"," 就不要写在common.css中了",[438,142320],{"style":128977,"src":142321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[438,142323],{"style":128977,"src":142324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,142326,142327],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1338,142329,142330,142333,142336],{},[495,142331,142332],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[495,142334,142335],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[495,142337,142338],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,142340,140960],{},[31,142342,142343],{"className":129121,"code":141791,"language":129123,"meta":36,"style":36},[26,142344,142345,142351,142361],{"__ignoreMap":36},[40,142346,142347,142349],{"class":42,"line":43},[40,142348,132969],{"class":596},[40,142350,18894],{"class":50},[40,142352,142353,142355,142357,142359],{"class":42,"line":54},[40,142354,133601],{"class":63},[40,142356,60],{"class":50},[40,142358,27055],{"class":63},[40,142360,4637],{"class":50},[40,142362,142363],{"class":42,"line":70},[40,142364,4907],{"class":50},[19,142366,141000],{},[31,142368,142369],{"className":129121,"code":141791,"language":129123,"meta":36,"style":36},[26,142370,142371,142377,142387],{"__ignoreMap":36},[40,142372,142373,142375],{"class":42,"line":43},[40,142374,132969],{"class":596},[40,142376,18894],{"class":50},[40,142378,142379,142381,142383,142385],{"class":42,"line":54},[40,142380,133601],{"class":63},[40,142382,60],{"class":50},[40,142384,27055],{"class":63},[40,142386,4637],{"class":50},[40,142388,142389],{"class":42,"line":70},[40,142390,4907],{"class":50},[492,142392,142393],{},[495,142394,142395],{},"左侧focus模块制作",[438,142397],{"style":128977,"src":142398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,142400,140960],{},[31,142402,142403],{"className":129121,"code":130444,"language":129123,"meta":36,"style":36},[26,142404,142405,142413,142423,142433],{"__ignoreMap":36},[40,142406,142407,142409,142411],{"class":42,"line":43},[40,142408,57119],{"class":46},[40,142410,65198],{"class":596},[40,142412,18894],{"class":50},[40,142414,142415,142417,142419,142421],{"class":42,"line":54},[40,142416,130459],{"class":63},[40,142418,60],{"class":50},[40,142420,58187],{"class":63},[40,142422,4637],{"class":50},[40,142424,142425,142427,142429,142431],{"class":42,"line":70},[40,142426,74094],{"class":63},[40,142428,60],{"class":50},[40,142430,58035],{"class":63},[40,142432,4637],{"class":50},[40,142434,142435],{"class":42,"line":78},[40,142436,4907],{"class":50},[19,142438,141000],{},[31,142440,142441],{"className":129121,"code":130444,"language":129123,"meta":36,"style":36},[26,142442,142443,142451,142461,142471],{"__ignoreMap":36},[40,142444,142445,142447,142449],{"class":42,"line":43},[40,142446,57119],{"class":46},[40,142448,65198],{"class":596},[40,142450,18894],{"class":50},[40,142452,142453,142455,142457,142459],{"class":42,"line":54},[40,142454,130459],{"class":63},[40,142456,60],{"class":50},[40,142458,58187],{"class":63},[40,142460,4637],{"class":50},[40,142462,142463,142465,142467,142469],{"class":42,"line":70},[40,142464,74094],{"class":63},[40,142466,60],{"class":50},[40,142468,58035],{"class":63},[40,142470,4637],{"class":50},[40,142472,142473],{"class":42,"line":78},[40,142474,4907],{"class":50},[19,142476,142477],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[492,142479,142480],{"start":54},[495,142481,142482],{},"右侧newsflash模块制作",[438,142484],{"style":128977,"src":142485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,142487,142488],{},"右侧的模块 分为上中下三个盒子",[19,142490,142491],{},"结构代码：",[31,142493,142494],{"className":129868,"code":136623,"language":129870,"meta":36,"style":36},[26,142495,142496],{"__ignoreMap":36},[40,142497,142498,142500,142502,142504,142506,142508,142510,142512,142514,142516,142518,142520],{"class":42,"line":43},[40,142499,4387],{"class":50},[40,142501,438],{"class":46},[40,142503,58537],{"class":596},[40,142505,1284],{"class":50},[40,142507,136638],{"class":94},[40,142509,58545],{"class":596},[40,142511,1284],{"class":50},[40,142513,136645],{"class":94},[40,142515,136648],{"class":596},[40,142517,1284],{"class":50},[40,142519,136653],{"class":94},[40,142521,54606],{"class":50},[19,142523,142524,142525,142528],{},"1 号盒子为 ",[26,142526,142527],{},"news"," 新闻模块 高度为 165px",[438,142530],{"style":128977,"src":142531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,142533,142534,142535,142538,142539],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[26,142536,142537],{},"news-hd","，下面是 ",[26,142540,142541],{},"news-bd",[19,142543,142491],{},[31,142545,142546],{"className":129868,"code":133225,"language":129870,"meta":36,"style":36},[26,142547,142548,142552,142566,142570],{"__ignoreMap":36},[40,142549,142550],{"class":42,"line":43},[40,142551,133232],{"class":997},[40,142553,142554,142556,142558,142560,142562,142564],{"class":42,"line":54},[40,142555,4387],{"class":50},[40,142557,54909],{"class":46},[40,142559,56784],{"class":596},[40,142561,1284],{"class":50},[40,142563,133245],{"class":94},[40,142565,54606],{"class":50},[40,142567,142568],{"class":42,"line":70},[40,142569,133252],{"class":50},[40,142571,142572,142574,142576],{"class":42,"line":78},[40,142573,55083],{"class":50},[40,142575,54909],{"class":46},[40,142577,54606],{"class":50},[19,142579,142580],{},"样式代码：",[31,142582,142583],{"className":129868,"code":133225,"language":129870,"meta":36,"style":36},[26,142584,142585,142589,142603,142607],{"__ignoreMap":36},[40,142586,142587],{"class":42,"line":43},[40,142588,133232],{"class":997},[40,142590,142591,142593,142595,142597,142599,142601],{"class":42,"line":54},[40,142592,4387],{"class":50},[40,142594,54909],{"class":46},[40,142596,56784],{"class":596},[40,142598,1284],{"class":50},[40,142600,133245],{"class":94},[40,142602,54606],{"class":50},[40,142604,142605],{"class":42,"line":70},[40,142606,133252],{"class":50},[40,142608,142609,142611,142613],{"class":42,"line":78},[40,142610,55083],{"class":50},[40,142612,54909],{"class":46},[40,142614,54606],{"class":50},[19,142616,142617,142618,142620],{},"上面是",[26,142619,142537],{},"，设置高度是 33px，设置下边框",[1338,142622,142623,142629],{},[495,142624,142625,142626,142628],{},"里面放一个",[26,142627,26230],{}," 标题",[495,142630,142631,142632,142634,142635,142637],{},"放一个a",[26,142633,105984],{},"，内容是 更多，然后让 ",[26,142636,2106],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,142639,142491],{},[31,142641,142642],{"className":129121,"code":140963,"language":129123,"meta":36,"style":36},[26,142643,142644,142652,142662,142672],{"__ignoreMap":36},[40,142645,142646,142648,142650],{"class":42,"line":43},[40,142647,54909],{"class":46},[40,142649,140122],{"class":596},[40,142651,18894],{"class":50},[40,142653,142654,142656,142658,142660],{"class":42,"line":54},[40,142655,140129],{"class":63},[40,142657,60],{"class":50},[40,142659,285],{"class":94},[40,142661,4637],{"class":50},[40,142663,142664,142666,142668,142670],{"class":42,"line":70},[40,142665,130737],{"class":63},[40,142667,60],{"class":50},[40,142669,64167],{"class":63},[40,142671,4637],{"class":50},[40,142673,142674],{"class":42,"line":78},[40,142675,4907],{"class":50},[19,142677,142580],{},[31,142679,142680],{"className":129121,"code":140963,"language":129123,"meta":36,"style":36},[26,142681,142682,142690,142700,142710],{"__ignoreMap":36},[40,142683,142684,142686,142688],{"class":42,"line":43},[40,142685,54909],{"class":46},[40,142687,140122],{"class":596},[40,142689,18894],{"class":50},[40,142691,142692,142694,142696,142698],{"class":42,"line":54},[40,142693,140129],{"class":63},[40,142695,60],{"class":50},[40,142697,285],{"class":94},[40,142699,4637],{"class":50},[40,142701,142702,142704,142706,142708],{"class":42,"line":70},[40,142703,130737],{"class":63},[40,142705,60],{"class":50},[40,142707,64167],{"class":63},[40,142709,4637],{"class":50},[40,142711,142712],{"class":42,"line":78},[40,142713,4907],{"class":50},[19,142715,142716,142717],{},"下面是",[26,142718,142541],{},[1338,142720,142721,142729],{},[495,142722,142723,142724,104312,142726,142728],{},"里面包含 ",[26,142725,1338],{},[26,142727,495],{}," 还有链接",[495,142730,142201,142731,142733,142734,142736,142737,142740,142741],{},[26,142732,495],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[26,142735,133787],{}," 2.设置 ",[26,142738,142739],{},"white-space: nowrap;"," 3. 设置 ",[26,142742,142743],{},"text-overflow: ellipsis;",[19,142745,142491],{},[31,142747,142749],{"className":129121,"code":142748,"language":129123,"meta":36,"style":36},"div {\n  overflow: hidden;\n}\n",[26,142750,142751,142757,142768],{"__ignoreMap":36},[40,142752,142753,142755],{"class":42,"line":43},[40,142754,54909],{"class":46},[40,142756,18894],{"class":50},[40,142758,142759,142762,142764,142766],{"class":42,"line":54},[40,142760,142761],{"class":63},"  overflow",[40,142763,60],{"class":50},[40,142765,65012],{"class":63},[40,142767,4637],{"class":50},[40,142769,142770],{"class":42,"line":70},[40,142771,4907],{"class":50},[19,142773,142580],{},[31,142775,142776],{"className":129121,"code":142748,"language":129123,"meta":36,"style":36},[26,142777,142778,142784,142794],{"__ignoreMap":36},[40,142779,142780,142782],{"class":42,"line":43},[40,142781,54909],{"class":46},[40,142783,18894],{"class":50},[40,142785,142786,142788,142790,142792],{"class":42,"line":54},[40,142787,142761],{"class":63},[40,142789,60],{"class":50},[40,142791,65012],{"class":63},[40,142793,4637],{"class":50},[40,142795,142796],{"class":42,"line":70},[40,142797,4907],{"class":50},[19,142799,142800,142801,142804],{},"2 号盒子为 ",[26,142802,142803],{},"lifeservice"," 生活服务模块 高度为 209px",[438,142806],{"style":128977,"src":142807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1338,142809,142810,142813,142823,142847,142858],{},[495,142811,142812],{},"设置边框（左右下边框）",[495,142814,142815,142816,142819,142820,142822],{},"里面的内容 是 ",[26,142817,142818],{},"ul > 12*li","，给",[26,142821,495],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[495,142824,142825,142826],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1338,142827,142828,142833,142842],{},[495,142829,142830,142832],{},[26,142831,142803],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[495,142834,142835,142836,142838,142839,142841],{},"可以让 ",[26,142837,142803],{}," 里面的 ",[26,142840,1338],{}," 宽度为 252，就可以装的下 4 个 小 li",[495,142843,142844,142846],{},[26,142845,142803],{}," 盒子 overflow 隐藏多余的部分就可以了",[495,142848,119758,142849,142851,142852,142854,142855,142857],{},[26,142850,495],{}," 里面放一个 ",[26,142853,3920],{},"（里面放图标），下面的文本用 ",[26,142856,19],{}," 标签包裹",[495,142859,141621,142860,142862,142863,142865,142866,141655,142868,142871],{},[26,142861,3920],{}," 设置 24px宽和28px的高（注意 ",[26,142864,3920],{}," 是行内元素， 转成行内块），给 ",[26,142867,495],{},[26,142869,142870],{},"text-align:center"," 让里面内容居中显示",[19,142873,142491],{},[31,142875,142877],{"className":129121,"code":142876,"language":129123,"meta":36,"style":36},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[26,142878,142879,142897,142902,142912],{"__ignoreMap":36},[40,142880,142881,142883,142885,142887,142889,142891,142893,142895],{"class":42,"line":43},[40,142882,40],{"class":46},[40,142884,15757],{"class":50},[40,142886,2106],{"class":46},[40,142888,15757],{"class":50},[40,142890,1356],{"class":46},[40,142892,15757],{"class":50},[40,142894,409],{"class":46},[40,142896,18894],{"class":50},[40,142898,142899],{"class":42,"line":54},[40,142900,142901],{"class":997},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[40,142903,142904,142906,142908,142910],{"class":42,"line":70},[40,142905,130737],{"class":63},[40,142907,60],{"class":50},[40,142909,130799],{"class":63},[40,142911,4637],{"class":50},[40,142913,142914],{"class":42,"line":78},[40,142915,4907],{"class":50},[19,142917,142580],{},[31,142919,142920],{"className":129121,"code":142876,"language":129123,"meta":36,"style":36},[26,142921,142922,142940,142944,142954],{"__ignoreMap":36},[40,142923,142924,142926,142928,142930,142932,142934,142936,142938],{"class":42,"line":43},[40,142925,40],{"class":46},[40,142927,15757],{"class":50},[40,142929,2106],{"class":46},[40,142931,15757],{"class":50},[40,142933,1356],{"class":46},[40,142935,15757],{"class":50},[40,142937,409],{"class":46},[40,142939,18894],{"class":50},[40,142941,142942],{"class":42,"line":54},[40,142943,142901],{"class":997},[40,142945,142946,142948,142950,142952],{"class":42,"line":70},[40,142947,130737],{"class":63},[40,142949,60],{"class":50},[40,142951,130799],{"class":63},[40,142953,4637],{"class":50},[40,142955,142956],{"class":42,"line":78},[40,142957,4907],{"class":50},[19,142959,142960,142961,142964],{},"3 号盒子为 ",[26,142962,142963],{},"bargain"," 特价商品",[1338,142966,142967],{},[495,142968,142969],{},"这个比较简单，直接插入一张图片即可",[19,142971,142491],{},[31,142973,142974],{"className":129868,"code":136623,"language":129870,"meta":36,"style":36},[26,142975,142976],{"__ignoreMap":36},[40,142977,142978,142980,142982,142984,142986,142988,142990,142992,142994,142996,142998,143000],{"class":42,"line":43},[40,142979,4387],{"class":50},[40,142981,438],{"class":46},[40,142983,58537],{"class":596},[40,142985,1284],{"class":50},[40,142987,136638],{"class":94},[40,142989,58545],{"class":596},[40,142991,1284],{"class":50},[40,142993,136645],{"class":94},[40,142995,136648],{"class":596},[40,142997,1284],{"class":50},[40,142999,136653],{"class":94},[40,143001,54606],{"class":50},[19,143003,142580],{},[31,143005,143006],{"className":129868,"code":136623,"language":129870,"meta":36,"style":36},[26,143007,143008],{"__ignoreMap":36},[40,143009,143010,143012,143014,143016,143018,143020,143022,143024,143026,143028,143030,143032],{"class":42,"line":43},[40,143011,4387],{"class":50},[40,143013,438],{"class":46},[40,143015,58537],{"class":596},[40,143017,1284],{"class":50},[40,143019,136638],{"class":94},[40,143021,58545],{"class":596},[40,143023,1284],{"class":50},[40,143025,136645],{"class":94},[40,143027,136648],{"class":596},[40,143029,1284],{"class":50},[40,143031,136653],{"class":94},[40,143033,54606],{"class":50},[402,143035,143037],{"id":143036},"_1612-推荐模块制作","16.1.2 推荐模块制作",[438,143039],{"style":128977,"src":143040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,143042,143043,143044,143047],{},"大盒子 ",[26,143045,143046],{},"recom"," 推荐模块 recommend",[1338,143049,143050],{},[495,143051,143052,143053,143055,143056,143059],{},"给这个 ",[26,143054,143046],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[26,143057,143058],{},"#ebebeb","），设置距离上边 12px",[19,143061,142491],{},[31,143063,143065],{"className":129121,"code":143064,"language":129123,"meta":36,"style":36},"div {\n  background-color: #f0f0f0;\n}\n",[26,143066,143067,143073,143084],{"__ignoreMap":36},[40,143068,143069,143071],{"class":42,"line":43},[40,143070,54909],{"class":46},[40,143072,18894],{"class":50},[40,143074,143075,143077,143079,143082],{"class":42,"line":54},[40,143076,74174],{"class":63},[40,143078,60],{"class":50},[40,143080,143081],{"class":63},"#f0f0f0",[40,143083,4637],{"class":50},[40,143085,143086],{"class":42,"line":70},[40,143087,4907],{"class":50},[19,143089,142580],{},[31,143091,143092],{"className":129121,"code":143064,"language":129123,"meta":36,"style":36},[26,143093,143094,143100,143110],{"__ignoreMap":36},[40,143095,143096,143098],{"class":42,"line":43},[40,143097,54909],{"class":46},[40,143099,18894],{"class":50},[40,143101,143102,143104,143106,143108],{"class":42,"line":54},[40,143103,74174],{"class":63},[40,143105,60],{"class":50},[40,143107,143081],{"class":63},[40,143109,4637],{"class":50},[40,143111,143112],{"class":42,"line":70},[40,143113,4907],{"class":50},[19,143115,143116],{},"里面包含 2 个盒子， 浮动即可",[19,143118,142491],{},[31,143120,143121],{"className":129121,"code":141791,"language":129123,"meta":36,"style":36},[26,143122,143123,143129,143139],{"__ignoreMap":36},[40,143124,143125,143127],{"class":42,"line":43},[40,143126,132969],{"class":596},[40,143128,18894],{"class":50},[40,143130,143131,143133,143135,143137],{"class":42,"line":54},[40,143132,133601],{"class":63},[40,143134,60],{"class":50},[40,143136,27055],{"class":63},[40,143138,4637],{"class":50},[40,143140,143141],{"class":42,"line":70},[40,143142,4907],{"class":50},[19,143144,143145,143146],{},"1 号盒子 ",[26,143147,143148],{},"recom_hd",[1338,143150,143151,143154],{},[495,143152,143153],{},"设置宽度205px，高度163px",[495,143155,142625,143156,143158],{},[26,143157,438],{},"标签，插入图片即可",[19,143160,142491],{},[31,143162,143163],{"className":129868,"code":136623,"language":129870,"meta":36,"style":36},[26,143164,143165],{"__ignoreMap":36},[40,143166,143167,143169,143171,143173,143175,143177,143179,143181,143183,143185,143187,143189],{"class":42,"line":43},[40,143168,4387],{"class":50},[40,143170,438],{"class":46},[40,143172,58537],{"class":596},[40,143174,1284],{"class":50},[40,143176,136638],{"class":94},[40,143178,58545],{"class":596},[40,143180,1284],{"class":50},[40,143182,136645],{"class":94},[40,143184,136648],{"class":596},[40,143186,1284],{"class":50},[40,143188,136653],{"class":94},[40,143190,54606],{"class":50},[19,143192,142580],{},[31,143194,143195],{"className":129868,"code":136623,"language":129870,"meta":36,"style":36},[26,143196,143197],{"__ignoreMap":36},[40,143198,143199,143201,143203,143205,143207,143209,143211,143213,143215,143217,143219,143221],{"class":42,"line":43},[40,143200,4387],{"class":50},[40,143202,438],{"class":46},[40,143204,58537],{"class":596},[40,143206,1284],{"class":50},[40,143208,136638],{"class":94},[40,143210,58545],{"class":596},[40,143212,1284],{"class":50},[40,143214,136645],{"class":94},[40,143216,136648],{"class":596},[40,143218,1284],{"class":50},[40,143220,136653],{"class":94},[40,143222,54606],{"class":50},[19,143224,143225,143226,143229],{},"2 号盒子 ",[26,143227,143228],{},"recom_bd"," ，注意里面的小竖线",[1338,143231,143232,143243,143246,143251,143256],{},[495,143233,143234,143235,143237,143238,143240,143241],{},"右侧结构里面放 ",[26,143236,1338],{}," 包含 4个 ",[26,143239,495],{},"，每个li里面包含一个",[26,143242,438],{},[495,143244,143245],{},"直接利用切片工具把里面的内容当成一张图片",[495,143247,141621,143248,143250],{},[26,143249,495],{}," 设置浮动",[495,143252,141621,143253,143255],{},[26,143254,438],{}," 设置宽高，宽度 248px，高度 163px",[495,143257,143258,143259,142819,143262,143264,143265,143267,143268],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[26,143260,143261],{},"top 10px",[26,143263,495],{},"设置相对定位（注意，最后一个",[26,143266,495],{},"不用设置伪元素），可以利用 ",[26,143269,143270],{},"nth-child(-n+3){...}",[19,143272,142491],{},[31,143274,143275],{"className":129121,"code":140963,"language":129123,"meta":36,"style":36},[26,143276,143277,143285,143295,143305],{"__ignoreMap":36},[40,143278,143279,143281,143283],{"class":42,"line":43},[40,143280,54909],{"class":46},[40,143282,140122],{"class":596},[40,143284,18894],{"class":50},[40,143286,143287,143289,143291,143293],{"class":42,"line":54},[40,143288,140129],{"class":63},[40,143290,60],{"class":50},[40,143292,285],{"class":94},[40,143294,4637],{"class":50},[40,143296,143297,143299,143301,143303],{"class":42,"line":70},[40,143298,130737],{"class":63},[40,143300,60],{"class":50},[40,143302,64167],{"class":63},[40,143304,4637],{"class":50},[40,143306,143307],{"class":42,"line":78},[40,143308,4907],{"class":50},[19,143310,142580],{},[31,143312,143313],{"className":129121,"code":140963,"language":129123,"meta":36,"style":36},[26,143314,143315,143323,143333,143343],{"__ignoreMap":36},[40,143316,143317,143319,143321],{"class":42,"line":43},[40,143318,54909],{"class":46},[40,143320,140122],{"class":596},[40,143322,18894],{"class":50},[40,143324,143325,143327,143329,143331],{"class":42,"line":54},[40,143326,140129],{"class":63},[40,143328,60],{"class":50},[40,143330,285],{"class":94},[40,143332,4637],{"class":50},[40,143334,143335,143337,143339,143341],{"class":42,"line":70},[40,143336,130737],{"class":63},[40,143338,60],{"class":50},[40,143340,64167],{"class":63},[40,143342,4637],{"class":50},[40,143344,143345],{"class":42,"line":78},[40,143346,4907],{"class":50},[402,143348,143350],{"id":143349},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[438,143352],{"style":128977,"src":143353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,143355,143356],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,143358,143359],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,143361,143362,143365],{},[26,143363,143364],{},"box_hd"," 制作",[19,143367,143145,143368,143370],{},[26,143369,143364],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[438,143372],{"style":128977,"src":143373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1338,143375,143376,143381,143386,143389],{},[495,143377,143378,143380],{},[26,143379,143364],{}," 给 30px 的高度，2个像素的下边框",[495,143382,143383,143384],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[26,143385,141632],{},[495,143387,143388],{},"左侧盒左浮动，右侧盒子右浮动",[495,143390,143391,143393,143394,143396],{},[26,143392,2106],{},"标签之间的距离用左右的",[26,143395,34183],{},"撑开即可",[19,143398,143399],{},"结构代码",[31,143401,143402],{"className":129121,"code":141791,"language":129123,"meta":36,"style":36},[26,143403,143404,143410,143420],{"__ignoreMap":36},[40,143405,143406,143408],{"class":42,"line":43},[40,143407,132969],{"class":596},[40,143409,18894],{"class":50},[40,143411,143412,143414,143416,143418],{"class":42,"line":54},[40,143413,133601],{"class":63},[40,143415,60],{"class":50},[40,143417,27055],{"class":63},[40,143419,4637],{"class":50},[40,143421,143422],{"class":42,"line":70},[40,143423,4907],{"class":50},[19,143425,143426],{},"样式代码",[31,143428,143429],{"className":129121,"code":141791,"language":129123,"meta":36,"style":36},[26,143430,143431,143437,143447],{"__ignoreMap":36},[40,143432,143433,143435],{"class":42,"line":43},[40,143434,132969],{"class":596},[40,143436,18894],{"class":50},[40,143438,143439,143441,143443,143445],{"class":42,"line":54},[40,143440,133601],{"class":63},[40,143442,60],{"class":50},[40,143444,27055],{"class":63},[40,143446,4637],{"class":50},[40,143448,143449],{"class":42,"line":70},[40,143450,4907],{"class":50},[19,143452,143453,143365],{},[26,143454,143455],{},"box_bd",[19,143457,143458],{},"2 号盒子 box_bd，不要给高度",[438,143460],{"style":128977,"src":143461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,143463,143464],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,143466,143467],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,143469,143470],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1338,143472,143473,143485,143501],{},[495,143474,143475,143477,143478,143481,143482,143484],{},[26,143476,143455],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[26,143479,143480],{},"tab_content","，在",[26,143483,143480],{}," 里面包裹tab选项卡对应的内容",[495,143486,143487,143488,143491,143492,143494,143495,143497,143498,143500],{},"内容被一个大盒子包裹（",[26,143489,143490],{},"tab_list_item","），里面是 ",[26,143493,1338],{}," 包裹 5个 ",[26,143496,495],{},"，每个",[26,143499,495],{},"设置对应的宽度，然后设置浮动",[495,143502,143503,143504,143506,143507,143509,143510],{},"而这5个",[26,143505,495],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[26,143508,495],{},"设置",[1338,143511,143512,143530,143533],{},[495,143513,143514,143515,143517,143518,143520,143521,143523,143524,143526,143527,143529],{},"第一个小 ",[26,143516,495],{}," 分为上下结构，上面是 ",[26,143519,1338],{}," 包裹 ",[26,143522,495],{}," ，",[26,143525,495],{},"里面包裹 ",[26,143528,2106],{},"，下面插入一张图片",[495,143531,143532],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[495,143534,143535,143536,143538,143539,143541,143542,143544],{},"后面的小 ",[26,143537,495],{}," 里面先放一个",[26,143540,2106],{},"标签，然后在",[26,143543,2106],{},"标签里面插入图片即可",[19,143546,143399],{},[31,143548,143549],{"className":129868,"code":136623,"language":129870,"meta":36,"style":36},[26,143550,143551],{"__ignoreMap":36},[40,143552,143553,143555,143557,143559,143561,143563,143565,143567,143569,143571,143573,143575],{"class":42,"line":43},[40,143554,4387],{"class":50},[40,143556,438],{"class":46},[40,143558,58537],{"class":596},[40,143560,1284],{"class":50},[40,143562,136638],{"class":94},[40,143564,58545],{"class":596},[40,143566,1284],{"class":50},[40,143568,136645],{"class":94},[40,143570,136648],{"class":596},[40,143572,1284],{"class":50},[40,143574,136653],{"class":94},[40,143576,54606],{"class":50},[19,143578,143426],{},[31,143580,143581],{"className":129868,"code":136623,"language":129870,"meta":36,"style":36},[26,143582,143583],{"__ignoreMap":36},[40,143584,143585,143587,143589,143591,143593,143595,143597,143599,143601,143603,143605,143607],{"class":42,"line":43},[40,143586,4387],{"class":50},[40,143588,438],{"class":46},[40,143590,58537],{"class":596},[40,143592,1284],{"class":50},[40,143594,136638],{"class":94},[40,143596,58545],{"class":596},[40,143598,1284],{"class":50},[40,143600,136645],{"class":94},[40,143602,136648],{"class":596},[40,143604,1284],{"class":50},[40,143606,136653],{"class":94},[40,143608,54606],{"class":50},[19,143610,143611],{},"tab栏切换需求！！！！！！介绍：",[438,143613],{"style":128977,"src":143614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1338,143616,143617,143625,143631,143634],{},[495,143618,143619,143622,143623],{},[26,143620,143621],{},"tab","栏的布局是 ",[26,143624,141632],{},[495,143626,143627,143628,143630],{},"有多少个",[26,143629,143621],{},"选项卡，那么对应就有多少个内容",[495,143632,143633],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[495,143635,143636,143637,143640,143641,143643,143644,143646],{},"等后面我们学习了",[26,143638,143639],{},"js","之后，我们就会配合",[26,143642,143639],{},"来实现，",[26,143645,143621],{},"栏的切换",[14,143648,143650],{"id":143649},"_162-列表制作","16.2 列表制作",[402,143652,143654],{"id":143653},"_1621-准备工作","16.2.1 准备工作",[1338,143656,143657,143660,143663,143666],{},[495,143658,143659],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[495,143661,143662],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[495,143664,143665],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[495,143667,143668],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[402,143670,143672,143673,104312,143675,143677],{"id":143671},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[26,143674,134126],{},[26,143676,57011],{}," 修改",[438,143679],{"style":128977,"src":143680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1338,143682,143683],{},[495,143684,143685],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,143687,142491],{},[31,143689,143690],{"className":129121,"code":134553,"language":129123,"meta":36,"style":36},[26,143691,143692,143696,143710,143714,143728,143732,143746,143750,143764,143768],{"__ignoreMap":36},[40,143693,143694],{"class":42,"line":43},[40,143695,134560],{"class":997},[40,143697,143698,143700,143702,143704,143706,143708],{"class":42,"line":54},[40,143699,134565],{"class":596},[40,143701,83102],{"class":50},[40,143703,131481],{"class":63},[40,143705,60],{"class":50},[40,143707,134574],{"class":63},[40,143709,132051],{"class":50},[40,143711,143712],{"class":42,"line":70},[40,143713,134581],{"class":997},[40,143715,143716,143718,143720,143722,143724,143726],{"class":42,"line":78},[40,143717,134586],{"class":596},[40,143719,83102],{"class":50},[40,143721,131481],{"class":63},[40,143723,60],{"class":50},[40,143725,58062],{"class":63},[40,143727,132051],{"class":50},[40,143729,143730],{"class":42,"line":86},[40,143731,134601],{"class":997},[40,143733,143734,143736,143738,143740,143742,143744],{"class":42,"line":100},[40,143735,134606],{"class":596},[40,143737,83102],{"class":50},[40,143739,131481],{"class":63},[40,143741,60],{"class":50},[40,143743,58129],{"class":63},[40,143745,132051],{"class":50},[40,143747,143748],{"class":42,"line":108},[40,143749,134621],{"class":997},[40,143751,143752,143754,143756,143758,143760,143762],{"class":42,"line":121},[40,143753,134626],{"class":596},[40,143755,83102],{"class":50},[40,143757,131481],{"class":63},[40,143759,60],{"class":50},[40,143761,89528],{"class":63},[40,143763,132051],{"class":50},[40,143765,143766],{"class":42,"line":134},[40,143767,134641],{"class":997},[40,143769,143770,143772,143774,143776,143778,143780],{"class":42,"line":146},[40,143771,134646],{"class":596},[40,143773,83102],{"class":50},[40,143775,131481],{"class":63},[40,143777,60],{"class":50},[40,143779,134655],{"class":63},[40,143781,132051],{"class":50},[19,143783,142580],{},[31,143785,143786],{"className":129121,"code":134553,"language":129123,"meta":36,"style":36},[26,143787,143788,143792,143806,143810,143824,143828,143842,143846,143860,143864],{"__ignoreMap":36},[40,143789,143790],{"class":42,"line":43},[40,143791,134560],{"class":997},[40,143793,143794,143796,143798,143800,143802,143804],{"class":42,"line":54},[40,143795,134565],{"class":596},[40,143797,83102],{"class":50},[40,143799,131481],{"class":63},[40,143801,60],{"class":50},[40,143803,134574],{"class":63},[40,143805,132051],{"class":50},[40,143807,143808],{"class":42,"line":70},[40,143809,134581],{"class":997},[40,143811,143812,143814,143816,143818,143820,143822],{"class":42,"line":78},[40,143813,134586],{"class":596},[40,143815,83102],{"class":50},[40,143817,131481],{"class":63},[40,143819,60],{"class":50},[40,143821,58062],{"class":63},[40,143823,132051],{"class":50},[40,143825,143826],{"class":42,"line":86},[40,143827,134601],{"class":997},[40,143829,143830,143832,143834,143836,143838,143840],{"class":42,"line":100},[40,143831,134606],{"class":596},[40,143833,83102],{"class":50},[40,143835,131481],{"class":63},[40,143837,60],{"class":50},[40,143839,58129],{"class":63},[40,143841,132051],{"class":50},[40,143843,143844],{"class":42,"line":108},[40,143845,134621],{"class":997},[40,143847,143848,143850,143852,143854,143856,143858],{"class":42,"line":121},[40,143849,134626],{"class":596},[40,143851,83102],{"class":50},[40,143853,131481],{"class":63},[40,143855,60],{"class":50},[40,143857,89528],{"class":63},[40,143859,132051],{"class":50},[40,143861,143862],{"class":42,"line":134},[40,143863,134641],{"class":997},[40,143865,143866,143868,143870,143872,143874,143876],{"class":42,"line":146},[40,143867,134646],{"class":596},[40,143869,83102],{"class":50},[40,143871,131481],{"class":63},[40,143873,60],{"class":50},[40,143875,134655],{"class":63},[40,143877,132051],{"class":50},[1338,143879,143880,143891],{},[495,143881,143882,143883,143886,143887,104312,143889],{},"1 号盒子左侧浮动 ",[26,143884,143885],{},"sk_list"," 里面包含 ",[26,143888,1338],{},[26,143890,495],{},[495,143892,143893,143894,143886,143897,104312,143899],{},"2 号盒子左侧浮动 ",[26,143895,143896],{},"sk_con",[26,143898,1338],{},[26,143900,495],{},[19,143902,142491],{},[31,143904,143905],{"className":129121,"code":141791,"language":129123,"meta":36,"style":36},[26,143906,143907,143913,143923],{"__ignoreMap":36},[40,143908,143909,143911],{"class":42,"line":43},[40,143910,132969],{"class":596},[40,143912,18894],{"class":50},[40,143914,143915,143917,143919,143921],{"class":42,"line":54},[40,143916,133601],{"class":63},[40,143918,60],{"class":50},[40,143920,27055],{"class":63},[40,143922,4637],{"class":50},[40,143924,143925],{"class":42,"line":70},[40,143926,4907],{"class":50},[19,143928,142580],{},[31,143930,143931],{"className":129121,"code":141791,"language":129123,"meta":36,"style":36},[26,143932,143933,143939,143949],{"__ignoreMap":36},[40,143934,143935,143937],{"class":42,"line":43},[40,143936,132969],{"class":596},[40,143938,18894],{"class":50},[40,143940,143941,143943,143945,143947],{"class":42,"line":54},[40,143942,133601],{"class":63},[40,143944,60],{"class":50},[40,143946,27055],{"class":63},[40,143948,4637],{"class":50},[40,143950,143951],{"class":42,"line":70},[40,143952,4907],{"class":50},[402,143954,143956,143957],{"id":143955},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[26,143958,143959],{},"sk_container",[438,143961],{"style":128977,"src":143962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1338,143964,143965,143970],{},[495,143966,143145,143967,143969],{},[26,143968,143959],{}," 给宽度 1200，不要给高度",[495,143971,143972],{},"一定不要忘记清除浮动",[19,143974,142491],{},[31,143976,143977],{"className":129121,"code":141791,"language":129123,"meta":36,"style":36},[26,143978,143979,143985,143995],{"__ignoreMap":36},[40,143980,143981,143983],{"class":42,"line":43},[40,143982,132969],{"class":596},[40,143984,18894],{"class":50},[40,143986,143987,143989,143991,143993],{"class":42,"line":54},[40,143988,133601],{"class":63},[40,143990,60],{"class":50},[40,143992,27055],{"class":63},[40,143994,4637],{"class":50},[40,143996,143997],{"class":42,"line":70},[40,143998,4907],{"class":50},[492,144000,144001],{},[495,144002,144003],{},"sk_hd制作",[1338,144005,144006],{},[495,144007,143225,144008,144011],{},[26,144009,144010],{},"sk_hd"," ，插入图片即可",[19,144013,142491],{},[31,144015,144016],{"className":129868,"code":136623,"language":129870,"meta":36,"style":36},[26,144017,144018],{"__ignoreMap":36},[40,144019,144020,144022,144024,144026,144028,144030,144032,144034,144036,144038,144040,144042],{"class":42,"line":43},[40,144021,4387],{"class":50},[40,144023,438],{"class":46},[40,144025,58537],{"class":596},[40,144027,1284],{"class":50},[40,144029,136638],{"class":94},[40,144031,58545],{"class":596},[40,144033,1284],{"class":50},[40,144035,136645],{"class":94},[40,144037,136648],{"class":596},[40,144039,1284],{"class":50},[40,144041,136653],{"class":94},[40,144043,54606],{"class":50},[492,144045,144046],{"start":54},[495,144047,144048],{},"sk_bd制作",[1338,144050,144051],{},[495,144052,144053,144054,144057,144058,104312,144060,144062],{},"3 号盒子 ",[26,144055,144056],{},"sk_bd"," ，里面包含很多的 ",[26,144059,1338],{},[26,144061,495],{},[1338,144063,144064,144073],{},[495,144065,144066,144067,144069,144070,144072],{},"当鼠标移入到 ",[26,144068,495],{}," 上面的时候显示红色的边框，在这里先给 ",[26,144071,495],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[495,144074,144075,144076,144078,144079,144081,144082,144085,144086,144088],{},"由于给每个 ",[26,144077,495],{}," 都设置了外边距，导致一行的最后一个 ",[26,144080,495],{}," 掉了下来，在这里我们利用 ",[26,144083,144084],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[26,144087,495],{},"，去掉外边距就好了",[19,144090,142491],{},[31,144092,144093],{"className":129121,"code":141310,"language":129123,"meta":36,"style":36},[26,144094,144095,144101,144113],{"__ignoreMap":36},[40,144096,144097,144099],{"class":42,"line":43},[40,144098,54909],{"class":46},[40,144100,18894],{"class":50},[40,144102,144103,144105,144107,144109,144111],{"class":42,"line":54},[40,144104,73766],{"class":63},[40,144106,60],{"class":50},[40,144108,3672],{"class":63},[40,144110,54854],{"class":63},[40,144112,4637],{"class":50},[40,144114,144115],{"class":42,"line":70},[40,144116,4907],{"class":50},[19,144118,142580],{},[31,144120,144121],{"className":129121,"code":141310,"language":129123,"meta":36,"style":36},[26,144122,144123,144129,144141],{"__ignoreMap":36},[40,144124,144125,144127],{"class":42,"line":43},[40,144126,54909],{"class":46},[40,144128,18894],{"class":50},[40,144130,144131,144133,144135,144137,144139],{"class":42,"line":54},[40,144132,73766],{"class":63},[40,144134,60],{"class":50},[40,144136,3672],{"class":63},[40,144138,54854],{"class":63},[40,144140,4637],{"class":50},[40,144142,144143],{"class":42,"line":70},[40,144144,4907],{"class":50},[14,144146,144148],{"id":144147},"_163-注册页面制作","16.3 注册页面制作",[438,144150],{"style":128977,"src":144151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,144153,144154,144156],{},[409,144155,12347],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[438,144158],{"style":128977,"src":144159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[402,144161,144163],{"id":144162},"_1631-准备工作","16.3.1 准备工作",[1338,144165,144166,144169],{},[495,144167,144168],{},"创建register.html，引入 base.css，引入favicon图标",[495,144170,144171],{},"创建register.css ，在html页面进行引入",[402,144173,144175,144176,144178],{"id":144174},"_1632-header-头部实现","16.3.2 ",[26,144177,134126],{}," 头部实现",[1338,144180,144181,144184],{},[495,144182,144183],{},"整个内容用 版心 进行包裹",[495,144185,144186],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,144188,142491],{},[31,144190,144191],{"className":129868,"code":136623,"language":129870,"meta":36,"style":36},[26,144192,144193],{"__ignoreMap":36},[40,144194,144195,144197,144199,144201,144203,144205,144207,144209,144211,144213,144215,144217],{"class":42,"line":43},[40,144196,4387],{"class":50},[40,144198,438],{"class":46},[40,144200,58537],{"class":596},[40,144202,1284],{"class":50},[40,144204,136638],{"class":94},[40,144206,58545],{"class":596},[40,144208,1284],{"class":50},[40,144210,136645],{"class":94},[40,144212,136648],{"class":596},[40,144214,1284],{"class":50},[40,144216,136653],{"class":94},[40,144218,54606],{"class":50},[19,144220,142580],{},[31,144222,144223],{"className":129868,"code":136623,"language":129870,"meta":36,"style":36},[26,144224,144225],{"__ignoreMap":36},[40,144226,144227,144229,144231,144233,144235,144237,144239,144241,144243,144245,144247,144249],{"class":42,"line":43},[40,144228,4387],{"class":50},[40,144230,438],{"class":46},[40,144232,58537],{"class":596},[40,144234,1284],{"class":50},[40,144236,136638],{"class":94},[40,144238,58545],{"class":596},[40,144240,1284],{"class":50},[40,144242,136645],{"class":94},[40,144244,136648],{"class":596},[40,144246,1284],{"class":50},[40,144248,136653],{"class":94},[40,144250,54606],{"class":50},[402,144252,144254,144255,144258],{"id":144253},"_1633-registerarea-主体模块实现","16.3.3 ",[26,144256,144257],{},"registerarea"," 主体模块实现",[438,144260],{"style":128977,"src":144261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,144263,144264],{},"整个大盒子 高度为 522px，设置4个边框",[19,144266,142491],{},[31,144268,144269],{"className":129121,"code":133278,"language":129123,"meta":36,"style":36},[26,144270,144271,144277,144293],{"__ignoreMap":36},[40,144272,144273,144275],{"class":42,"line":43},[40,144274,54909],{"class":46},[40,144276,18894],{"class":50},[40,144278,144279,144281,144283,144285,144287,144289,144291],{"class":42,"line":54},[40,144280,74192],{"class":63},[40,144282,60],{"class":50},[40,144284,3698],{"class":63},[40,144286,54790],{"class":1283},[40,144288,54819],{"class":63},[40,144290,132513],{"class":63},[40,144292,4637],{"class":50},[40,144294,144295],{"class":42,"line":70},[40,144296,4907],{"class":50},[19,144298,142580],{},[31,144300,144301],{"className":129121,"code":133278,"language":129123,"meta":36,"style":36},[26,144302,144303,144309,144325],{"__ignoreMap":36},[40,144304,144305,144307],{"class":42,"line":43},[40,144306,54909],{"class":46},[40,144308,18894],{"class":50},[40,144310,144311,144313,144315,144317,144319,144321,144323],{"class":42,"line":54},[40,144312,74192],{"class":63},[40,144314,60],{"class":50},[40,144316,3698],{"class":63},[40,144318,54790],{"class":1283},[40,144320,54819],{"class":63},[40,144322,132513],{"class":63},[40,144324,4637],{"class":50},[40,144326,144327],{"class":42,"line":70},[40,144328,4907],{"class":50},[19,144330,144331],{},"1号盒子 是一个 h3 标签，放标题",[1338,144333,144334],{},[495,144335,144336],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,144338,142491],{},[31,144340,144341],{"className":129121,"code":141791,"language":129123,"meta":36,"style":36},[26,144342,144343,144349,144359],{"__ignoreMap":36},[40,144344,144345,144347],{"class":42,"line":43},[40,144346,132969],{"class":596},[40,144348,18894],{"class":50},[40,144350,144351,144353,144355,144357],{"class":42,"line":54},[40,144352,133601],{"class":63},[40,144354,60],{"class":50},[40,144356,27055],{"class":63},[40,144358,4637],{"class":50},[40,144360,144361],{"class":42,"line":70},[40,144362,4907],{"class":50},[19,144364,142580],{},[31,144366,144367],{"className":129121,"code":141791,"language":129123,"meta":36,"style":36},[26,144368,144369,144375,144385],{"__ignoreMap":36},[40,144370,144371,144373],{"class":42,"line":43},[40,144372,132969],{"class":596},[40,144374,18894],{"class":50},[40,144376,144377,144379,144381,144383],{"class":42,"line":54},[40,144378,133601],{"class":63},[40,144380,60],{"class":50},[40,144382,27055],{"class":63},[40,144384,4637],{"class":50},[40,144386,144387],{"class":42,"line":70},[40,144388,4907],{"class":50},[19,144390,144391],{},"2号盒子 里面放注册的内容",[1338,144393,144394,144397,144406,144420,144433,144436,144439,144457,144471],{},[495,144395,144396],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[495,144398,144399,144400,144402,144403,144405],{},"里面的内容利用 ",[26,144401,1338],{}," 包含 ",[26,144404,495],{}," 来实现的（不需要用表格）",[495,144407,141635,144408,144410,144411,144413,144414,144416,144417,144419],{},[26,144409,495],{}," 里面，左侧放 ",[26,144412,36908],{}," 标签， 中间放",[26,144415,57119],{}," 标签， 右侧放 ",[26,144418,40],{}," 提示信息",[495,144421,144422,144423,144425,144426,144428,144429,144432],{},"左侧 ",[26,144424,36908],{},"里面的文字都是右对齐，我们可以给",[26,144427,36908],{},"设置一个宽度（88px），然后利用",[26,144430,144431],{},"text-align"," 来设置右对齐",[495,144434,144435],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[495,144437,144438],{},"右侧 span修饰一下文字颜色",[495,144440,144441,144442],{},"提示信息的样式优化",[1338,144443,144444,144447,144450],{},[495,144445,144446],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[495,144448,144449],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[495,144451,144452,144453,144456],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[26,144454,144455],{},"vertical-algin"," 来设置 图片与文字对齐方式",[495,144458,144459,144460],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1338,144461,144462,144468],{},[495,144463,144464,144465,144467],{},"设置 ",[26,144466,1356],{}," 的 左右 12px 的内边距，设置一下文字颜色",[495,144469,144470],{},"分别设置 背景颜色",[495,144472,144473,144474,144476],{},"同意协议 和 完成注册 都是用 ",[26,144475,495],{}," 进行包裹",[19,144478,142491],{},[31,144480,144481],{"className":129121,"code":143064,"language":129123,"meta":36,"style":36},[26,144482,144483,144489,144499],{"__ignoreMap":36},[40,144484,144485,144487],{"class":42,"line":43},[40,144486,54909],{"class":46},[40,144488,18894],{"class":50},[40,144490,144491,144493,144495,144497],{"class":42,"line":54},[40,144492,74174],{"class":63},[40,144494,60],{"class":50},[40,144496,143081],{"class":63},[40,144498,4637],{"class":50},[40,144500,144501],{"class":42,"line":70},[40,144502,4907],{"class":50},[19,144504,142580],{},[31,144506,144507],{"className":129121,"code":143064,"language":129123,"meta":36,"style":36},[26,144508,144509,144515,144525],{"__ignoreMap":36},[40,144510,144511,144513],{"class":42,"line":43},[40,144512,54909],{"class":46},[40,144514,18894],{"class":50},[40,144516,144517,144519,144521,144523],{"class":42,"line":54},[40,144518,74174],{"class":63},[40,144520,60],{"class":50},[40,144522,143081],{"class":63},[40,144524,4637],{"class":50},[40,144526,144527],{"class":42,"line":70},[40,144528,4907],{"class":50},[402,144530,144532],{"id":144531},"_1634-底部实现","16.3.4 底部实现",[19,144534,142491],{},[31,144536,144537],{"className":129121,"code":143064,"language":129123,"meta":36,"style":36},[26,144538,144539,144545,144555],{"__ignoreMap":36},[40,144540,144541,144543],{"class":42,"line":43},[40,144542,54909],{"class":46},[40,144544,18894],{"class":50},[40,144546,144547,144549,144551,144553],{"class":42,"line":54},[40,144548,74174],{"class":63},[40,144550,60],{"class":50},[40,144552,143081],{"class":63},[40,144554,4637],{"class":50},[40,144556,144557],{"class":42,"line":70},[40,144558,4907],{"class":50},[19,144560,142580],{},[31,144562,144563],{"className":129868,"code":133225,"language":129870,"meta":36,"style":36},[26,144564,144565,144569,144583,144587],{"__ignoreMap":36},[40,144566,144567],{"class":42,"line":43},[40,144568,133232],{"class":997},[40,144570,144571,144573,144575,144577,144579,144581],{"class":42,"line":54},[40,144572,4387],{"class":50},[40,144574,54909],{"class":46},[40,144576,56784],{"class":596},[40,144578,1284],{"class":50},[40,144580,133245],{"class":94},[40,144582,54606],{"class":50},[40,144584,144585],{"class":42,"line":70},[40,144586,133252],{"class":50},[40,144588,144589,144591,144593],{"class":42,"line":78},[40,144590,55083],{"class":50},[40,144592,54909],{"class":46},[40,144594,54606],{"class":50},[14,144596,144598],{"id":144597},"_164-项目总结","16.4 项目总结",[492,144600,144601,144604,144607,144610],{},[495,144602,144603],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[495,144605,144606],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[495,144608,144609],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[495,144611,144612],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[438,144614],{"style":128977,"src":144615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[492,144617,144618],{"start":86},[495,144619,144620],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[438,144622],{"style":128977,"src":144623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[492,144625,144626],{"start":100},[495,144627,144628],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[438,144630],{"style":128977,"src":144631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[31,144633,144634],{"className":129868,"code":139278,"language":129870,"meta":36,"style":36},[26,144635,144636],{"__ignoreMap":36},[40,144637,144638,144640,144642,144644,144646,144648,144650,144652,144654,144656,144658,144660],{"class":42,"line":43},[40,144639,4387],{"class":50},[40,144641,57119],{"class":46},[40,144643,57122],{"class":596},[40,144645,1284],{"class":50},[40,144647,65997],{"class":94},[40,144649,18242],{"class":596},[40,144651,1284],{"class":50},[40,144653,139299],{"class":94},[40,144655,64318],{"class":596},[40,144657,1284],{"class":50},[40,144659,139306],{"class":94},[40,144661,54606],{"class":50},[492,144663,144664,144667],{"start":108},[495,144665,144666],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[495,144668,144669],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[3384,144671,144672],{},"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":36,"searchDepth":54,"depth":54,"links":144674},[144675,144680,144687,144695],{"id":142301,"depth":54,"text":142302,"children":144676},[144677,144678,144679],{"id":142305,"depth":70,"text":142306},{"id":143036,"depth":70,"text":143037},{"id":143349,"depth":70,"text":143350},{"id":143649,"depth":54,"text":143650,"children":144681},[144682,144683,144685],{"id":143653,"depth":70,"text":143654},{"id":143671,"depth":70,"text":144684},"16.2.2 列表页 header 和 nav 修改",{"id":143955,"depth":70,"text":144686},"16.2.3 列表页主体 sk_container",{"id":144147,"depth":54,"text":144148,"children":144688},[144689,144690,144692,144694],{"id":144162,"depth":70,"text":144163},{"id":144174,"depth":70,"text":144691},"16.3.2 header 头部实现",{"id":144253,"depth":70,"text":144693},"16.3.3 registerarea 主体模块实现",{"id":144531,"depth":70,"text":144532},{"id":144597,"depth":54,"text":144598},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":142293,"description":3413},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":144702,"title":144703,"body":144704,"description":3413,"extension":3414,"meta":144812,"navigation":1412,"path":144813,"seo":144814,"stem":144815,"__hash__":144816},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":144705,"toc":144807},[144706,144709,144713,144716,144719,144728,144737,144741,144746,144753,144771,144774,144777,144780,144783,144786,144789,144792,144795,144798,144801,144804],[10,144707,144703],{"id":144708},"_17-web服务器与网站发布",[14,144710,144712],{"id":144711},"_171-web服务器","17.1 Web服务器",[19,144714,144715],{},"把自己网站上传到服务器上，可以让其他人访问",[438,144717],{"style":128977,"src":144718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,144720,144721,144724,144725],{},[409,144722,144723],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[409,144726,144727],{},"Web 服务器等",[19,144729,144730,144731,104312,144734,29053],{},"根据服务器在网络中所在的位置不同，又可分为 ",[409,144732,144733],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[409,144735,144736],{},"远程服务器",[402,144738,144740],{"id":144739},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,144742,144743],{},[409,144744,144745],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,144747,144748,144749],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[2106,144750,144751],{"href":144751,"rel":144752},"http:\u002F\u002Ffree.3v.do\u002F",[2110],[1338,144754,144755,144758,144761,144768],{},[495,144756,144757],{},"去免费空间网站注册账号。",[495,144759,144760],{},"记录下主机名、用户名、密码、域名。",[495,144762,144763,144764,144767],{},"利用 ",[26,144765,144766],{},"utftp"," 软件 上传网站到远程服务器",[495,144769,144770],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,144772,144773],{},"使用软件上传，对上传软件文件进行解压",[438,144775],{"style":128977,"src":144776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[438,144778],{"style":128977,"src":144779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,144781,144782],{},"输入刚刚申请的服务器账号信息：",[438,144784],{"style":128977,"src":144785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[438,144787],{"style":128977,"src":144788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[438,144790],{"style":128977,"src":144791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[438,144793],{"style":128977,"src":144794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,144796,144797],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[438,144799],{"style":128977,"src":144800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,144802,144803],{},"浏览器输入域名即可访问",[19,144805,144806],{},"首页一定必须是index",{"title":36,"searchDepth":54,"depth":54,"links":144808},[144809],{"id":144711,"depth":54,"text":144712,"children":144810},[144811],{"id":144739,"depth":70,"text":144740},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":144703,"description":3413},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":144818,"title":144819,"body":144820,"description":3413,"extension":3414,"meta":145747,"navigation":1412,"path":145748,"seo":145749,"stem":145750,"__hash__":145751},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":144821,"toc":145730},[144822,144825,144829,144832,144835,144846,144849,144853,144857,144862,144865,144868,144871,144874,144878,144904,144908,144912,144915,144918,144922,144955,144959,144962,144965,145029,145033,145037,145040,145043,145046,145050,145095,145099,145102,145132,145136,145140,145143,145146,145150,145153,145222,145225,145333,145335,145341,145345,145348,145351,145447,145450,145454,145478,145482,145485,145489,145492,145496,145499,145502,145505,145508,145512,145515,145518,145522,145526,145529,145532,145535,145538,145542,145545,145549,145552,145555,145600,145604,145608,145611,145614,145617,145649,145653,145656,145690,145694,145697,145727],[10,144823,144819],{"id":144824},"_18-2d动画与3d转换",[14,144826,144828],{"id":144827},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,144830,144831],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,144833,144834],{},"转换（transform）你可以简单理解为变形",[1338,144836,144837,144840,144843],{},[495,144838,144839],{},"移动：translate",[495,144841,144842],{},"旋转：rotate",[495,144844,144845],{},"缩放：scale",[438,144847],{"style":128977,"src":144848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[402,144850,144852],{"id":144851},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[2423,144854,144856],{"id":144855},"_18111-translate介绍","18.1.1.1 translate介绍",[19,144858,144859,144860],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[409,144861,135780],{},[438,144863],{"style":128977,"src":144864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,144866,144867],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,144869,144870],{},"对于行内元素无效",[19,144872,144873],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[2423,144875,144877],{"id":144876},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[31,144879,144880],{"className":129121,"code":141310,"language":129123,"meta":36,"style":36},[26,144881,144882,144888,144900],{"__ignoreMap":36},[40,144883,144884,144886],{"class":42,"line":43},[40,144885,54909],{"class":46},[40,144887,18894],{"class":50},[40,144889,144890,144892,144894,144896,144898],{"class":42,"line":54},[40,144891,73766],{"class":63},[40,144893,60],{"class":50},[40,144895,3672],{"class":63},[40,144897,54854],{"class":63},[40,144899,4637],{"class":50},[40,144901,144902],{"class":42,"line":70},[40,144903,4907],{"class":50},[402,144905,144907],{"id":144906},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[2423,144909,144911],{"id":144910},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,144913,144914],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[438,144916],{"style":128977,"src":144917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[2423,144919,144921],{"id":144920},"_18122-旋转效果","18.1.2.2 旋转效果",[31,144923,144925],{"className":129121,"code":144924,"language":129123,"meta":36,"style":36},"div {\n  transform: rotate(45deg);\n}\n",[26,144926,144927,144933,144951],{"__ignoreMap":36},[40,144928,144929,144931],{"class":42,"line":43},[40,144930,54909],{"class":46},[40,144932,18894],{"class":50},[40,144934,144935,144937,144939,144942,144944,144946,144949],{"class":42,"line":54},[40,144936,139105],{"class":63},[40,144938,60],{"class":50},[40,144940,144941],{"class":63},"rotate",[40,144943,3488],{"class":50},[40,144945,4008],{"class":63},[40,144947,144948],{"class":1283},"deg",[40,144950,6043],{"class":50},[40,144952,144953],{"class":42,"line":70},[40,144954,4907],{"class":50},[2423,144956,144958],{"id":144957},"_18123-三角做法","18.1.2.3 三角做法",[19,144960,144961],{},"该下标当经过最外层大盒子时会实现向上反转",[438,144963],{"style":128977,"src":144964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[31,144966,144967],{"className":129121,"code":137641,"language":129123,"meta":36,"style":36},[26,144968,144969,144973,144979,144989,144999,145015,145025],{"__ignoreMap":36},[40,144970,144971],{"class":42,"line":43},[40,144972,137648],{"class":997},[40,144974,144975,144977],{"class":42,"line":54},[40,144976,137653],{"class":596},[40,144978,18894],{"class":50},[40,144980,144981,144983,144985,144987],{"class":42,"line":70},[40,144982,73864],{"class":63},[40,144984,60],{"class":50},[40,144986,3672],{"class":63},[40,144988,4637],{"class":50},[40,144990,144991,144993,144995,144997],{"class":42,"line":78},[40,144992,74084],{"class":63},[40,144994,60],{"class":50},[40,144996,3672],{"class":63},[40,144998,4637],{"class":50},[40,145000,145001,145003,145005,145007,145009,145011,145013],{"class":42,"line":86},[40,145002,74192],{"class":63},[40,145004,60],{"class":50},[40,145006,3925],{"class":63},[40,145008,54790],{"class":1283},[40,145010,54819],{"class":63},[40,145012,67289],{"class":63},[40,145014,4637],{"class":50},[40,145016,145017,145019,145021,145023],{"class":42,"line":100},[40,145018,137696],{"class":63},[40,145020,60],{"class":50},[40,145022,65667],{"class":63},[40,145024,4637],{"class":50},[40,145026,145027],{"class":42,"line":108},[40,145028,4907],{"class":50},[402,145030,145032],{"id":145031},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[2423,145034,145036],{"id":145035},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,145038,145039],{},"设置中心点",[438,145041],{"style":128977,"src":145042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,145044,145045],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[2423,145047,145049],{"id":145048},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[31,145051,145053],{"className":129121,"code":145052,"language":129123,"meta":36,"style":36},"\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",[26,145054,145055,145060,145066,145081,145086,145091],{"__ignoreMap":36},[40,145056,145057],{"class":42,"line":43},[40,145058,145059],{"class":997},"\u002F* 转换中心点 *\u002F\n",[40,145061,145062,145064],{"class":42,"line":54},[40,145063,54909],{"class":46},[40,145065,18894],{"class":50},[40,145067,145068,145071,145073,145075,145077,145079],{"class":42,"line":70},[40,145069,145070],{"class":63},"  transform-origin",[40,145072,60],{"class":50},[40,145074,54890],{"class":63},[40,145076,20466],{"class":63},[40,145078,132984],{"class":50},[40,145080,137794],{"class":997},[40,145082,145083],{"class":42,"line":78},[40,145084,145085],{"class":997},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[40,145087,145088],{"class":42,"line":86},[40,145089,145090],{"class":997},"  \u002F* transform-origin: left top; *\u002F\n",[40,145092,145093],{"class":42,"line":100},[40,145094,4907],{"class":50},[2423,145096,145098],{"id":145097},"_18133-旋转案例","18.1.3.3 旋转案例",[438,145100],{"style":128977,"src":145101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[31,145103,145104],{"className":129121,"code":144924,"language":129123,"meta":36,"style":36},[26,145105,145106,145112,145128],{"__ignoreMap":36},[40,145107,145108,145110],{"class":42,"line":43},[40,145109,54909],{"class":46},[40,145111,18894],{"class":50},[40,145113,145114,145116,145118,145120,145122,145124,145126],{"class":42,"line":54},[40,145115,139105],{"class":63},[40,145117,60],{"class":50},[40,145119,144941],{"class":63},[40,145121,3488],{"class":50},[40,145123,4008],{"class":63},[40,145125,144948],{"class":1283},[40,145127,6043],{"class":50},[40,145129,145130],{"class":42,"line":70},[40,145131,4907],{"class":50},[402,145133,145135],{"id":145134},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[2423,145137,145139],{"id":145138},"_18141-scale介绍","18.1.4.1 scale介绍",[19,145141,145142],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[438,145144],{"style":128977,"src":145145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[2423,145147,145149],{"id":145148},"_18142-分页按钮","18.1.4.2 分页按钮",[438,145151],{"style":128977,"src":145152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[31,145154,145156],{"className":129121,"code":145155,"language":129123,"meta":36,"style":36},"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",[26,145157,145158,145164,145180,145184,145188,145193,145199,145213,145218],{"__ignoreMap":36},[40,145159,145160,145162],{"class":42,"line":43},[40,145161,54909],{"class":46},[40,145163,18894],{"class":50},[40,145165,145166,145168,145170,145173,145175,145178],{"class":42,"line":54},[40,145167,139105],{"class":63},[40,145169,60],{"class":50},[40,145171,145172],{"class":63},"scale",[40,145174,3488],{"class":50},[40,145176,145177],{"class":63},"1.2",[40,145179,6043],{"class":50},[40,145181,145182],{"class":42,"line":70},[40,145183,4907],{"class":50},[40,145185,145186],{"class":42,"line":78},[40,145187,138582],{"class":50},[40,145189,145190],{"class":42,"line":86},[40,145191,145192],{"class":997},"\u002F* 2D 缩放 *\u002F\n",[40,145194,145195,145197],{"class":42,"line":100},[40,145196,54909],{"class":46},[40,145198,18894],{"class":50},[40,145200,145201,145203,145205,145207,145209,145211],{"class":42,"line":108},[40,145202,139105],{"class":63},[40,145204,60],{"class":50},[40,145206,145172],{"class":63},[40,145208,3488],{"class":50},[40,145210,145177],{"class":63},[40,145212,6043],{"class":50},[40,145214,145215],{"class":42,"line":121},[40,145216,145217],{"class":997},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[40,145219,145220],{"class":42,"line":134},[40,145221,4907],{"class":50},[19,145223,145224],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[31,145226,145228],{"className":129121,"code":145227,"language":129123,"meta":36,"style":36},"\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",[26,145229,145230,145235,145245,145266,145287,145291,145296,145302,145329],{"__ignoreMap":36},[40,145231,145232],{"class":42,"line":43},[40,145233,145234],{"class":997},"\u002F* 定义动画 *\u002F\n",[40,145236,145237,145240,145243],{"class":42,"line":54},[40,145238,145239],{"class":1283},"@keyframes",[40,145241,145242],{"class":8539}," move",[40,145244,18894],{"class":50},[40,145246,145247,145250,145252,145254,145256,145259,145261,145263],{"class":42,"line":70},[40,145248,145249],{"class":596},"  0%",[40,145251,83102],{"class":50},[40,145253,51434],{"class":63},[40,145255,60],{"class":50},[40,145257,145258],{"class":63},"translateX",[40,145260,3488],{"class":50},[40,145262,3672],{"class":63},[40,145264,145265],{"class":50},"); }\n",[40,145267,145268,145271,145273,145275,145277,145279,145281,145283,145285],{"class":42,"line":78},[40,145269,145270],{"class":596},"  100%",[40,145272,83102],{"class":50},[40,145274,51434],{"class":63},[40,145276,60],{"class":50},[40,145278,145258],{"class":63},[40,145280,3488],{"class":50},[40,145282,3791],{"class":63},[40,145284,54790],{"class":1283},[40,145286,145265],{"class":50},[40,145288,145289],{"class":42,"line":86},[40,145290,4907],{"class":50},[40,145292,145293],{"class":42,"line":100},[40,145294,145295],{"class":997},"\u002F* 调用动画 *\u002F\n",[40,145297,145298,145300],{"class":42,"line":108},[40,145299,54909],{"class":46},[40,145301,18894],{"class":50},[40,145303,145304,145307,145309,145311,145313,145315,145317,145319,145321,145324,145327],{"class":42,"line":121},[40,145305,145306],{"class":63},"  animation",[40,145308,60],{"class":50},[40,145310,137807],{"class":63},[40,145312,28431],{"class":63},[40,145314,4173],{"class":1283},[40,145316,81975],{"class":63},[40,145318,7416],{"class":63},[40,145320,4173],{"class":1283},[40,145322,145323],{"class":63}," infinite",[40,145325,145326],{"class":63}," alternate",[40,145328,4637],{"class":50},[40,145330,145331],{"class":42,"line":134},[40,145332,4907],{"class":50},[19,145334,145224],{},[31,145336,145339],{"className":145337,"code":145338,"language":8510},[8508],"\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",[26,145340,145338],{"__ignoreMap":36},[2423,145342,145344],{"id":145343},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,145346,145347],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[438,145349],{"style":128977,"src":145350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[31,145352,145353],{"className":129121,"code":145227,"language":129123,"meta":36,"style":36},[26,145354,145355,145359,145367,145385,145405,145409,145413,145419,145443],{"__ignoreMap":36},[40,145356,145357],{"class":42,"line":43},[40,145358,145234],{"class":997},[40,145360,145361,145363,145365],{"class":42,"line":54},[40,145362,145239],{"class":1283},[40,145364,145242],{"class":8539},[40,145366,18894],{"class":50},[40,145368,145369,145371,145373,145375,145377,145379,145381,145383],{"class":42,"line":70},[40,145370,145249],{"class":596},[40,145372,83102],{"class":50},[40,145374,51434],{"class":63},[40,145376,60],{"class":50},[40,145378,145258],{"class":63},[40,145380,3488],{"class":50},[40,145382,3672],{"class":63},[40,145384,145265],{"class":50},[40,145386,145387,145389,145391,145393,145395,145397,145399,145401,145403],{"class":42,"line":78},[40,145388,145270],{"class":596},[40,145390,83102],{"class":50},[40,145392,51434],{"class":63},[40,145394,60],{"class":50},[40,145396,145258],{"class":63},[40,145398,3488],{"class":50},[40,145400,3791],{"class":63},[40,145402,54790],{"class":1283},[40,145404,145265],{"class":50},[40,145406,145407],{"class":42,"line":86},[40,145408,4907],{"class":50},[40,145410,145411],{"class":42,"line":100},[40,145412,145295],{"class":997},[40,145414,145415,145417],{"class":42,"line":108},[40,145416,54909],{"class":46},[40,145418,18894],{"class":50},[40,145420,145421,145423,145425,145427,145429,145431,145433,145435,145437,145439,145441],{"class":42,"line":121},[40,145422,145306],{"class":63},[40,145424,60],{"class":50},[40,145426,137807],{"class":63},[40,145428,28431],{"class":63},[40,145430,4173],{"class":1283},[40,145432,81975],{"class":63},[40,145434,7416],{"class":63},[40,145436,4173],{"class":1283},[40,145438,145323],{"class":63},[40,145440,145326],{"class":63},[40,145442,4637],{"class":50},[40,145444,145445],{"class":42,"line":134},[40,145446,4907],{"class":50},[19,145448,145449],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[402,145451,145453],{"id":145452},"_1823-知识点回顾","18.2.3 知识点回顾",[31,145455,145456],{"className":129121,"code":131290,"language":129123,"meta":36,"style":36},[26,145457,145458,145464,145474],{"__ignoreMap":36},[40,145459,145460,145462],{"class":42,"line":43},[40,145461,54909],{"class":46},[40,145463,18894],{"class":50},[40,145465,145466,145468,145470,145472],{"class":42,"line":54},[40,145467,131303],{"class":63},[40,145469,60],{"class":50},[40,145471,65034],{"class":63},[40,145473,4637],{"class":50},[40,145475,145476],{"class":42,"line":70},[40,145477,4907],{"class":50},[14,145479,145481],{"id":145480},"_183-3d-转换","18.3 3D 转换",[19,145483,145484],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[402,145486,145488],{"id":145487},"_1831-坐标轴认识","18.3.1 坐标轴认识",[438,145490],{"style":128977,"src":145491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[402,145493,145495],{"id":145494},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[438,145497],{"style":128977,"src":145498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,145500,145501],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,145503,145504],{},"translate3d的效果需要搭配透视perspective来使用",[438,145506],{"style":128977,"src":145507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[402,145509,145511],{"id":145510},"_1833-透视-perspective","18.3.3 透视 perspective",[438,145513],{"style":128977,"src":145514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,145516,145517],{},"透视写在父盒子上，单位为像素",[402,145519,145521],{"id":145520},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[2423,145523,145525],{"id":145524},"_18341-分开解释","18.3.4.1 分开解释",[438,145527],{"style":128977,"src":145528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[438,145530],{"style":128977,"src":145531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[438,145533],{"style":128977,"src":145534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,145536,145537],{},"总结来说就是左手原则",[2423,145539,145541],{"id":145540},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[438,145543],{"style":128977,"src":145544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[402,145546,145548],{"id":145547},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[438,145550],{"style":128977,"src":145551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[438,145553],{"style":128977,"src":145554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[31,145556,145558],{"className":129121,"code":145557,"language":129123,"meta":36,"style":36},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[26,145559,145560,145566,145579,145596],{"__ignoreMap":36},[40,145561,145562,145564],{"class":42,"line":43},[40,145563,54909],{"class":46},[40,145565,18894],{"class":50},[40,145567,145568,145571,145573,145575,145577],{"class":42,"line":54},[40,145569,145570],{"class":63},"  perspective",[40,145572,60],{"class":50},[40,145574,68372],{"class":63},[40,145576,54790],{"class":1283},[40,145578,4637],{"class":50},[40,145580,145581,145583,145585,145588,145590,145592,145594],{"class":42,"line":70},[40,145582,139105],{"class":63},[40,145584,60],{"class":50},[40,145586,145587],{"class":63},"rotateX",[40,145589,3488],{"class":50},[40,145591,4008],{"class":63},[40,145593,144948],{"class":1283},[40,145595,6043],{"class":50},[40,145597,145598],{"class":42,"line":78},[40,145599,4907],{"class":50},[402,145601,145603],{"id":145602},"_1836-案例","18.3.6 案例",[2423,145605,145607],{"id":145606},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[438,145609],{"style":128977,"src":145610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[438,145612],{"style":128977,"src":145613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[438,145615],{"style":128977,"src":145616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[31,145618,145620],{"className":129121,"code":145619,"language":129123,"meta":36,"style":36},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[26,145621,145622,145627,145633,145645],{"__ignoreMap":36},[40,145623,145624],{"class":42,"line":43},[40,145625,145626],{"class":997},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[40,145628,145629,145631],{"class":42,"line":54},[40,145630,136118],{"class":596},[40,145632,18894],{"class":50},[40,145634,145635,145637,145639,145641,145643],{"class":42,"line":70},[40,145636,145570],{"class":63},[40,145638,60],{"class":50},[40,145640,68372],{"class":63},[40,145642,54790],{"class":1283},[40,145644,4637],{"class":50},[40,145646,145647],{"class":42,"line":78},[40,145648,4907],{"class":50},[2423,145650,145652],{"id":145651},"_18362-3d导航栏","18.3.6.2 3D导航栏",[438,145654],{"style":128977,"src":145655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[31,145657,145658],{"className":129868,"code":133225,"language":129870,"meta":36,"style":36},[26,145659,145660,145664,145678,145682],{"__ignoreMap":36},[40,145661,145662],{"class":42,"line":43},[40,145663,133232],{"class":997},[40,145665,145666,145668,145670,145672,145674,145676],{"class":42,"line":54},[40,145667,4387],{"class":50},[40,145669,54909],{"class":46},[40,145671,56784],{"class":596},[40,145673,1284],{"class":50},[40,145675,133245],{"class":94},[40,145677,54606],{"class":50},[40,145679,145680],{"class":42,"line":70},[40,145681,133252],{"class":50},[40,145683,145684,145686,145688],{"class":42,"line":78},[40,145685,55083],{"class":50},[40,145687,54909],{"class":46},[40,145689,54606],{"class":50},[2423,145691,145693],{"id":145692},"_18363-旋转木马","18.3.6.3 旋转木马",[438,145695],{"style":128977,"src":145696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[31,145698,145699],{"className":129121,"code":144924,"language":129123,"meta":36,"style":36},[26,145700,145701,145707,145723],{"__ignoreMap":36},[40,145702,145703,145705],{"class":42,"line":43},[40,145704,54909],{"class":46},[40,145706,18894],{"class":50},[40,145708,145709,145711,145713,145715,145717,145719,145721],{"class":42,"line":54},[40,145710,139105],{"class":63},[40,145712,60],{"class":50},[40,145714,144941],{"class":63},[40,145716,3488],{"class":50},[40,145718,4008],{"class":63},[40,145720,144948],{"class":1283},[40,145722,6043],{"class":50},[40,145724,145725],{"class":42,"line":70},[40,145726,4907],{"class":50},[3384,145728,145729],{},"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":36,"searchDepth":54,"depth":54,"links":145731},[145732,145739],{"id":144827,"depth":54,"text":144828,"children":145733},[145734,145735,145736,145737,145738],{"id":144851,"depth":70,"text":144852},{"id":144906,"depth":70,"text":144907},{"id":145031,"depth":70,"text":145032},{"id":145134,"depth":70,"text":145135},{"id":145452,"depth":70,"text":145453},{"id":145480,"depth":54,"text":145481,"children":145740},[145741,145742,145743,145744,145745,145746],{"id":145487,"depth":70,"text":145488},{"id":145494,"depth":70,"text":145495},{"id":145510,"depth":70,"text":145511},{"id":145520,"depth":70,"text":145521},{"id":145547,"depth":70,"text":145548},{"id":145602,"depth":70,"text":145603},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":144819,"description":3413},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":145753,"title":145754,"body":145755,"description":3413,"extension":3414,"meta":145958,"navigation":1412,"path":145959,"seo":145960,"stem":145961,"__hash__":145962},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":145756,"toc":145947},[145757,145760,145764,145767,145770,145774,145777,145780,145783,145787,145790,145794,145797,145801,145804,145808,145822,145826,145851,145854,145857,145874,145878,145882,145885,145888,145892,145895,145898,145916,145920,145923,145937,145941,145944],[10,145758,145754],{"id":145759},"_19-移动端基础-前缀现状与视口",[14,145761,145763],{"id":145762},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[438,145765],{"style":128977,"src":145766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,145768,145769],{},"意思就是加个前缀，增加兼容性",[14,145771,145773],{"id":145772},"_192-移动端现状认识","19.2 移动端现状认识",[438,145775],{"style":128977,"src":145776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,145778,145779],{},"调试方法：",[438,145781],{"style":128977,"src":145782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,145784,145786],{"id":145785},"_193-视口","19.3 视口",[19,145788,145789],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[402,145791,145793],{"id":145792},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[438,145795],{"style":128977,"src":145796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[402,145798,145800],{"id":145799},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[438,145802],{"style":128977,"src":145803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[402,145805,145807],{"id":145806},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1338,145809,145810,145813,145816,145819],{},[495,145811,145812],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[495,145814,145815],{},"理想视口，对设备来讲，是最理想的视口尺寸",[495,145817,145818],{},"需要手动添写meta视口标签通知浏览器操作",[495,145820,145821],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[402,145823,145825],{"id":145824},"_1934-meta视口标签","19.3.4 meta视口标签",[31,145827,145829],{"className":129868,"code":145828,"language":129870,"meta":36,"style":36},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[26,145830,145831],{"__ignoreMap":36},[40,145832,145833,145835,145837,145839,145841,145843,145845,145847,145849],{"class":42,"line":43},[40,145834,4387],{"class":50},[40,145836,54643],{"class":46},[40,145838,18242],{"class":596},[40,145840,1284],{"class":50},[40,145842,54690],{"class":94},[40,145844,54670],{"class":596},[40,145846,1284],{"class":50},[40,145848,54697],{"class":94},[40,145850,54606],{"class":50},[438,145852],{"style":128977,"src":145853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,145855,145856],{},"标准视口设置：",[492,145858,145859,145862,145865,145868,145871],{},[495,145860,145861],{},"视口宽度和设备保持一致",[495,145863,145864],{},"视口的默认缩放比例1.0",[495,145866,145867],{},"不允许用户自行缩放",[495,145869,145870],{},"最大允许的缩放比例1.0",[495,145872,145873],{},"最小允许的缩放比例1.0",[402,145875,145877],{"id":145876},"_1935-二倍图","19.3.5 二倍图",[2423,145879,145881],{"id":145880},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[438,145883],{"style":128977,"src":145884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[438,145886],{"style":128977,"src":145887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[2423,145889,145891],{"id":145890},"_19352-多倍图","19.3.5.2 多倍图",[438,145893],{"style":128977,"src":145894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,145896,145897],{},"二倍图法，代码如下：",[31,145899,145901],{"className":129121,"code":145900,"language":129123,"meta":36,"style":36},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[26,145902,145903,145908],{"__ignoreMap":36},[40,145904,145905],{"class":42,"line":43},[40,145906,145907],{"class":997},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[40,145909,145910,145913],{"class":42,"line":54},[40,145911,145912],{"class":46},"background-size",[40,145914,145915],{"class":50},": 50% 50%;\n",[2423,145917,145919],{"id":145918},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[438,145921],{"style":128977,"src":145922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[492,145924,145925,145928,145931,145934],{},[495,145926,145927],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[495,145929,145930],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[495,145932,145933],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[495,145935,145936],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[2423,145938,145940],{"id":145939},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[438,145942],{"style":128977,"src":145943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[3384,145945,145946],{},"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":36,"searchDepth":54,"depth":54,"links":145948},[145949,145950,145951],{"id":145762,"depth":54,"text":145763},{"id":145772,"depth":54,"text":145773},{"id":145785,"depth":54,"text":145786,"children":145952},[145953,145954,145955,145956,145957],{"id":145792,"depth":70,"text":145793},{"id":145799,"depth":70,"text":145800},{"id":145806,"depth":70,"text":145807},{"id":145824,"depth":70,"text":145825},{"id":145876,"depth":70,"text":145877},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":145754,"description":3413},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":145964,"title":145965,"body":145966,"description":3413,"extension":3414,"meta":146843,"navigation":1412,"path":146844,"seo":146845,"stem":146846,"__hash__":146847},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":145967,"toc":146827},[145968,145971,145975,145982,145985,145992,145995,146000,146003,146007,146011,146018,146021,146024,146028,146031,146034,146037,146040,146043,146047,146050,146054,146056,146059,146062,146065,146068,146070,146073,146075,146105,146107,146137,146141,146144,146148,146151,146168,146171,146174,146250,146252,146255,146258,146261,146264,146266,146269,146272,146276,146298,146301,146304,146308,146311,146317,146320,146324,146327,146330,146334,146337,146340,146343,146347,146350,146353,146356,146359,146363,146366,146370,146377,146380,146383,146386,146389,146399,146402,146405,146412,146415,146419,146422,146425,146429,146432,146435,146438,146483,146486,146489,146492,146494,146623,146625,146663,146666,146669,146671,146789,146791,146825],[10,145969,145965],{"id":145970},"_20-移动端布局实战上篇",[14,145972,145974],{"id":145973},"_201-移动端主流方案","20.1 移动端主流方案",[492,145976,145977],{},[495,145978,145979],{},[409,145980,145981],{},"单独移动端页面（主流）",[438,145983],{"style":128977,"src":145984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[492,145986,145987],{"start":54},[495,145988,145989],{},[409,145990,145991],{},"响应式兼容PC移动端",[438,145993],{"style":128977,"src":145994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[492,145996,145997],{"start":70},[495,145998,145999],{},"两种页面选型布局方式",[438,146001],{"style":128977,"src":146002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,146004,146006],{"id":146005},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[402,146008,146010],{"id":146009},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,146012,146013,146014],{},"官网地址： ",[2106,146015,146016],{"href":146016,"rel":146017},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[2110],[438,146019],{"style":128977,"src":146020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[438,146022],{"style":128977,"src":146023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[402,146025,146027],{"id":146026},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[438,146029],{"style":128977,"src":146030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[438,146032],{"style":128977,"src":146033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,146035,146036],{},"去除高亮：",[19,146038,146039],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,146041,146042],{},"-webkit- tap-highlight-color: transparent;",[14,146044,146046],{"id":146045},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[438,146048],{"style":128977,"src":146049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,146051,146053],{"id":146052},"_204-流式布局案例","20.4 流式布局案例",[19,146055,3516],{},[19,146057,146058],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,146060,146061],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,146063,146064],{},"图片格式：",[438,146066],{"style":128977,"src":146067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,146069,138164],{},[438,146071],{"style":128977,"src":146072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,146074,142491],{},[31,146076,146077],{"className":129868,"code":136623,"language":129870,"meta":36,"style":36},[26,146078,146079],{"__ignoreMap":36},[40,146080,146081,146083,146085,146087,146089,146091,146093,146095,146097,146099,146101,146103],{"class":42,"line":43},[40,146082,4387],{"class":50},[40,146084,438],{"class":46},[40,146086,58537],{"class":596},[40,146088,1284],{"class":50},[40,146090,136638],{"class":94},[40,146092,58545],{"class":596},[40,146094,1284],{"class":50},[40,146096,136645],{"class":94},[40,146098,136648],{"class":596},[40,146100,1284],{"class":50},[40,146102,136653],{"class":94},[40,146104,54606],{"class":50},[19,146106,142580],{},[31,146108,146109],{"className":129868,"code":136623,"language":129870,"meta":36,"style":36},[26,146110,146111],{"__ignoreMap":36},[40,146112,146113,146115,146117,146119,146121,146123,146125,146127,146129,146131,146133,146135],{"class":42,"line":43},[40,146114,4387],{"class":50},[40,146116,438],{"class":46},[40,146118,58537],{"class":596},[40,146120,1284],{"class":50},[40,146122,136638],{"class":94},[40,146124,58545],{"class":596},[40,146126,1284],{"class":50},[40,146128,136645],{"class":94},[40,146130,136648],{"class":596},[40,146132,1284],{"class":50},[40,146134,136653],{"class":94},[40,146136,54606],{"class":50},[14,146138,146140],{"id":146139},"_205-flex布局","20.5 flex布局",[438,146142],{"style":128977,"src":146143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[402,146145,146147],{"id":146146},"_2051-布局原理","20.5.1 布局原理",[19,146149,146150],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1338,146152,146153,146156,146159,146162,146165],{},[495,146154,146155],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[495,146157,146158],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[495,146160,146161],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[495,146163,146164],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[495,146166,146167],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,146169,146170],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,146172,146173],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[31,146175,146177],{"className":129121,"code":146176,"language":129123,"meta":36,"style":36},"\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",[26,146178,146179,146184,146191,146201,146213,146224,146235,146246],{"__ignoreMap":36},[40,146180,146181],{"class":42,"line":43},[40,146182,146183],{"class":997},"\u002F* Flex 弹性布局 *\u002F\n",[40,146185,146186,146189],{"class":42,"line":54},[40,146187,146188],{"class":596},".container",[40,146190,18894],{"class":50},[40,146192,146193,146195,146197,146199],{"class":42,"line":70},[40,146194,130737],{"class":63},[40,146196,60],{"class":50},[40,146198,54775],{"class":63},[40,146200,4637],{"class":50},[40,146202,146203,146206,146208,146211],{"class":42,"line":78},[40,146204,146205],{"class":63},"  flex-direction",[40,146207,60],{"class":50},[40,146209,146210],{"class":63},"row",[40,146212,4637],{"class":50},[40,146214,146215,146218,146220,146222],{"class":42,"line":86},[40,146216,146217],{"class":63},"  justify-content",[40,146219,60],{"class":50},[40,146221,54966],{"class":63},[40,146223,4637],{"class":50},[40,146225,146226,146229,146231,146233],{"class":42,"line":100},[40,146227,146228],{"class":63},"  align-items",[40,146230,60],{"class":50},[40,146232,54890],{"class":63},[40,146234,4637],{"class":50},[40,146236,146237,146240,146242,146244],{"class":42,"line":108},[40,146238,146239],{"class":63},"  flex-wrap",[40,146241,60],{"class":50},[40,146243,81905],{"class":63},[40,146245,4637],{"class":50},[40,146247,146248],{"class":42,"line":121},[40,146249,4907],{"class":50},[19,146251,73749],{},[19,146253,146254],{},".form-item .male-label {",[19,146256,146257],{},"   margin-right: 20px;",[19,146259,146260],{},"   display: inline-flex;",[19,146262,146263],{},"   align-items: center;",[19,146265,4423],{},[438,146267],{"style":128977,"src":146268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[438,146270],{"style":128977,"src":146271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[402,146273,146275],{"id":146274},"_2052-常见父项属性","20.5.2 常见父项属性",[492,146277,146278,146281,146284,146287,146290,146293,146296],{},[495,146279,146280],{},"flex-direction：设置主轴的方向",[495,146282,146283],{},"justify-content：设置主轴上的子元素排列方式",[495,146285,146286],{},"flex-wrap：设置子元素是否换行",[495,146288,146289],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[495,146291,146292],{},"align-items：设置侧轴上的子元素排列方式（单行）",[495,146294,146295],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[495,146297,146280],{},[438,146299],{"style":128977,"src":146300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[438,146302],{"style":128977,"src":146303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[492,146305,146306],{"start":54},[495,146307,146283],{},[438,146309],{"style":128977,"src":146310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,146312,146313,146316],{},[26,146314,146315],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,146318,146319],{},"跟着主轴走",[492,146321,146322],{"start":70},[495,146323,146286],{},[438,146325],{"style":128977,"src":146326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,146328,146329],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[492,146331,146332],{"start":78},[495,146333,146289],{},[438,146335],{"style":128977,"src":146336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,146338,146339],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,146341,146342],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[492,146344,146345],{"start":86},[495,146346,146292],{},[438,146348],{"style":128977,"src":146349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,146351,146352],{},"align-items与align-content之间的区别：",[19,146354,146355],{},"单找items，多找content",[438,146357],{"style":128977,"src":146358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[492,146360,146361],{"start":100},[495,146362,146295],{},[438,146364],{"style":128977,"src":146365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[402,146367,146369],{"id":146368},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[492,146371,146372],{},[495,146373,146374],{},[409,146375,146376],{},"flex 属性",[19,146378,146379],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[438,146381],{"style":128977,"src":146382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,146384,146385],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,146387,146388],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[492,146390,146391],{"start":54},[495,146392,146393,17117,146396],{},[409,146394,146395],{},"align-self",[409,146397,146398],{},"控制子项自己在侧轴上的排列方式",[438,146400],{"style":128977,"src":146401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,146403,146404],{},"单个子盒子在父盒子侧轴上的排列方式",[492,146406,146407],{"start":70},[495,146408,146409,146411],{},[409,146410,98592],{}," 属性定义项目的排列顺序",[438,146413],{"style":128977,"src":146414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[402,146416,146418],{"id":146417},"_2054-背景线性渐变","20.5.4 背景线性渐变",[438,146420],{"style":128977,"src":146421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,146423,146424],{},"必须要添加浏览器的私有前缀",[402,146426,146428],{"id":146427},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,146430,146431],{},"学到最重要的知识：",[19,146433,146434],{},"flex处理这样的布局思路",[438,146436],{"style":128977,"src":146437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[31,146439,146441],{"className":129121,"code":146440,"language":129123,"meta":36,"style":36},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[26,146442,146443,146449,146459,146469,146479],{"__ignoreMap":36},[40,146444,146445,146447],{"class":42,"line":43},[40,146446,146188],{"class":596},[40,146448,18894],{"class":50},[40,146450,146451,146453,146455,146457],{"class":42,"line":54},[40,146452,130737],{"class":63},[40,146454,60],{"class":50},[40,146456,54775],{"class":63},[40,146458,4637],{"class":50},[40,146460,146461,146463,146465,146467],{"class":42,"line":70},[40,146462,146217],{"class":63},[40,146464,60],{"class":50},[40,146466,54890],{"class":63},[40,146468,4637],{"class":50},[40,146470,146471,146473,146475,146477],{"class":42,"line":78},[40,146472,146228],{"class":63},[40,146474,60],{"class":50},[40,146476,54890],{"class":63},[40,146478,4637],{"class":50},[40,146480,146481],{"class":42,"line":86},[40,146482,4907],{"class":50},[19,146484,146485],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,146487,146488],{},"使用属性选择器",[438,146490],{"style":128977,"src":146491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,146493,72187],{},[31,146495,146497],{"className":129868,"code":146496,"language":129870,"meta":36,"style":36},"\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",[26,146498,146499,146504,146518,146523,146543,146548,146567,146572,146591,146596,146615],{"__ignoreMap":36},[40,146500,146501],{"class":42,"line":43},[40,146502,146503],{"class":997},"\u003C!-- 携程网移动端案例结构 -->\n",[40,146505,146506,146508,146510,146512,146514,146516],{"class":42,"line":54},[40,146507,4387],{"class":50},[40,146509,54909],{"class":46},[40,146511,56784],{"class":596},[40,146513,1284],{"class":50},[40,146515,95618],{"class":94},[40,146517,54606],{"class":50},[40,146519,146520],{"class":42,"line":70},[40,146521,146522],{"class":997},"  \u003C!-- 搜索栏 -->\n",[40,146524,146525,146527,146529,146531,146533,146536,146539,146541],{"class":42,"line":78},[40,146526,55442],{"class":50},[40,146528,54909],{"class":46},[40,146530,56784],{"class":596},[40,146532,1284],{"class":50},[40,146534,146535],{"class":94},"\"search-index\"",[40,146537,146538],{"class":50},">...\u003C\u002F",[40,146540,54909],{"class":46},[40,146542,54606],{"class":50},[40,146544,146545],{"class":42,"line":86},[40,146546,146547],{"class":997},"  \u003C!-- 焦点图 -->\n",[40,146549,146550,146552,146554,146556,146558,146561,146563,146565],{"class":42,"line":100},[40,146551,55442],{"class":50},[40,146553,54909],{"class":46},[40,146555,56784],{"class":596},[40,146557,1284],{"class":50},[40,146559,146560],{"class":94},"\"focus\"",[40,146562,146538],{"class":50},[40,146564,54909],{"class":46},[40,146566,54606],{"class":50},[40,146568,146569],{"class":42,"line":108},[40,146570,146571],{"class":997},"  \u003C!-- 主导航 -->\n",[40,146573,146574,146576,146578,146580,146582,146585,146587,146589],{"class":42,"line":121},[40,146575,55442],{"class":50},[40,146577,54909],{"class":46},[40,146579,56784],{"class":596},[40,146581,1284],{"class":50},[40,146583,146584],{"class":94},"\"local-nav\"",[40,146586,146538],{"class":50},[40,146588,54909],{"class":46},[40,146590,54606],{"class":50},[40,146592,146593],{"class":42,"line":134},[40,146594,146595],{"class":997},"  \u003C!-- 子导航 -->\n",[40,146597,146598,146600,146602,146604,146606,146609,146611,146613],{"class":42,"line":146},[40,146599,55442],{"class":50},[40,146601,54909],{"class":46},[40,146603,56784],{"class":596},[40,146605,1284],{"class":50},[40,146607,146608],{"class":94},"\"nav-common\"",[40,146610,146538],{"class":50},[40,146612,54909],{"class":46},[40,146614,54606],{"class":50},[40,146616,146617,146619,146621],{"class":42,"line":154},[40,146618,55083],{"class":50},[40,146620,54909],{"class":46},[40,146622,54606],{"class":50},[19,146624,73749],{},[31,146626,146627],{"className":129121,"code":139573,"language":129123,"meta":36,"style":36},[26,146628,146629,146643,146659],{"__ignoreMap":36},[40,146630,146631,146633,146635,146637,146639,146641],{"class":42,"line":43},[40,146632,57119],{"class":46},[40,146634,4367],{"class":50},[40,146636,106398],{"class":596},[40,146638,1284],{"class":1283},[40,146640,65997],{"class":94},[40,146642,139590],{"class":50},[40,146644,146645,146647,146649,146651,146653,146655,146657],{"class":42,"line":54},[40,146646,74192],{"class":63},[40,146648,60],{"class":50},[40,146650,3698],{"class":63},[40,146652,54790],{"class":1283},[40,146654,54819],{"class":63},[40,146656,132701],{"class":63},[40,146658,4637],{"class":50},[40,146660,146661],{"class":42,"line":70},[40,146662,4907],{"class":50},[19,146664,146665],{},"总代码和效果展示：",[438,146667],{"style":128977,"src":146668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,146670,72187],{},[31,146672,146673],{"className":129868,"code":146496,"language":129870,"meta":36,"style":36},[26,146674,146675,146679,146693,146697,146715,146719,146737,146741,146759,146763,146781],{"__ignoreMap":36},[40,146676,146677],{"class":42,"line":43},[40,146678,146503],{"class":997},[40,146680,146681,146683,146685,146687,146689,146691],{"class":42,"line":54},[40,146682,4387],{"class":50},[40,146684,54909],{"class":46},[40,146686,56784],{"class":596},[40,146688,1284],{"class":50},[40,146690,95618],{"class":94},[40,146692,54606],{"class":50},[40,146694,146695],{"class":42,"line":70},[40,146696,146522],{"class":997},[40,146698,146699,146701,146703,146705,146707,146709,146711,146713],{"class":42,"line":78},[40,146700,55442],{"class":50},[40,146702,54909],{"class":46},[40,146704,56784],{"class":596},[40,146706,1284],{"class":50},[40,146708,146535],{"class":94},[40,146710,146538],{"class":50},[40,146712,54909],{"class":46},[40,146714,54606],{"class":50},[40,146716,146717],{"class":42,"line":86},[40,146718,146547],{"class":997},[40,146720,146721,146723,146725,146727,146729,146731,146733,146735],{"class":42,"line":100},[40,146722,55442],{"class":50},[40,146724,54909],{"class":46},[40,146726,56784],{"class":596},[40,146728,1284],{"class":50},[40,146730,146560],{"class":94},[40,146732,146538],{"class":50},[40,146734,54909],{"class":46},[40,146736,54606],{"class":50},[40,146738,146739],{"class":42,"line":108},[40,146740,146571],{"class":997},[40,146742,146743,146745,146747,146749,146751,146753,146755,146757],{"class":42,"line":121},[40,146744,55442],{"class":50},[40,146746,54909],{"class":46},[40,146748,56784],{"class":596},[40,146750,1284],{"class":50},[40,146752,146584],{"class":94},[40,146754,146538],{"class":50},[40,146756,54909],{"class":46},[40,146758,54606],{"class":50},[40,146760,146761],{"class":42,"line":134},[40,146762,146595],{"class":997},[40,146764,146765,146767,146769,146771,146773,146775,146777,146779],{"class":42,"line":146},[40,146766,55442],{"class":50},[40,146768,54909],{"class":46},[40,146770,56784],{"class":596},[40,146772,1284],{"class":50},[40,146774,146608],{"class":94},[40,146776,146538],{"class":50},[40,146778,54909],{"class":46},[40,146780,54606],{"class":50},[40,146782,146783,146785,146787],{"class":42,"line":154},[40,146784,55083],{"class":50},[40,146786,54909],{"class":46},[40,146788,54606],{"class":50},[19,146790,73749],{},[31,146792,146793],{"className":129868,"code":133225,"language":129870,"meta":36,"style":36},[26,146794,146795,146799,146813,146817],{"__ignoreMap":36},[40,146796,146797],{"class":42,"line":43},[40,146798,133232],{"class":997},[40,146800,146801,146803,146805,146807,146809,146811],{"class":42,"line":54},[40,146802,4387],{"class":50},[40,146804,54909],{"class":46},[40,146806,56784],{"class":596},[40,146808,1284],{"class":50},[40,146810,133245],{"class":94},[40,146812,54606],{"class":50},[40,146814,146815],{"class":42,"line":70},[40,146816,133252],{"class":50},[40,146818,146819,146821,146823],{"class":42,"line":78},[40,146820,55083],{"class":50},[40,146822,54909],{"class":46},[40,146824,54606],{"class":50},[3384,146826,140522],{},{"title":36,"searchDepth":54,"depth":54,"links":146828},[146829,146830,146834,146835,146836],{"id":145973,"depth":54,"text":145974},{"id":146005,"depth":54,"text":146006,"children":146831},[146832,146833],{"id":146009,"depth":70,"text":146010},{"id":146026,"depth":70,"text":146027},{"id":146045,"depth":54,"text":146046},{"id":146052,"depth":54,"text":146053},{"id":146139,"depth":54,"text":146140,"children":146837},[146838,146839,146840,146841,146842],{"id":146146,"depth":70,"text":146147},{"id":146274,"depth":70,"text":146275},{"id":146368,"depth":70,"text":146369},{"id":146417,"depth":70,"text":146418},{"id":146427,"depth":70,"text":146428},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":145965,"description":3413},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":146849,"title":146850,"body":146851,"description":3413,"extension":3414,"meta":148078,"navigation":1412,"path":148079,"seo":148080,"stem":148081,"__hash__":148082},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":146852,"toc":148056},[146853,146856,146860,146864,146867,146870,146874,146879,146882,146885,146888,146891,146894,146951,146954,146959,146962,146965,146969,146980,146984,146987,146990,146997,147002,147006,147009,147015,147018,147022,147025,147032,147035,147038,147045,147048,147055,147058,147061,147068,147071,147074,147076,147093,147097,147100,147103,147106,147110,147113,147116,147119,147122,147125,147128,147130,147133,147136,147198,147201,147311,147318,147324,147327,147330,147334,147337,147341,147346,147349,147356,147359,147365,147370,147373,147376,147379,147382,147385,147388,147391,147394,147450,147452,147478,147482,147485,147488,147491,147499,147502,147505,147509,147565,147568,147572,147578,147589,147592,147597,147600,147603,147609,147612,147615,147618,147621,147624,147627,147630,147633,147658,147664,147667,147670,147673,147676,147679,147682,147687,147690,147693,147696,147704,147707,147714,147717,147720,147722,147746,147748,147751,147754,147757,147760,147763,147766,147769,147803,147806,147809,147843,147850,147853,147856,147859,147862,147865,147868,147875,147878,147881,147884,147887,147894,147897,147900,147907,147910,147913,147917,147920,147923,147926,147929,147932,147935,147938,147941,147943,147967,147969,147993,147997,148008,148011,148014,148017,148020,148023,148026,148029,148032,148035,148038,148041,148044,148047,148050,148053],[10,146854,146850],{"id":146855},"_21-移动端布局实战下篇",[14,146857,146859],{"id":146858},"_211-rem适配布局","21.1 rem适配布局",[402,146861,146863],{"id":146862},"_2111-rem单位","21.1.1 rem单位",[438,146865],{"style":128977,"src":146866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,146868,146869],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[402,146871,146873],{"id":146872},"_2112-媒体查询","21.1.2 媒体查询",[492,146875,146876],{},[495,146877,146878],{},"参数介绍",[438,146880],{"style":128977,"src":146881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[438,146883],{"style":128977,"src":146884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[438,146886],{"style":128977,"src":146887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[438,146889],{"style":128977,"src":146890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[438,146892],{"style":128977,"src":146893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[31,146895,146897],{"className":129121,"code":146896,"language":129123,"meta":36,"style":36},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[26,146898,146899,146904,146923,146930,146943,146947],{"__ignoreMap":36},[40,146900,146901],{"class":42,"line":43},[40,146902,146903],{"class":997},"\u002F* 媒体查询 *\u002F\n",[40,146905,146906,146909,146911,146914,146916,146919,146921],{"class":42,"line":54},[40,146907,146908],{"class":1283},"@media",[40,146910,4993],{"class":50},[40,146912,146913],{"class":63},"max-width",[40,146915,60],{"class":50},[40,146917,146918],{"class":63},"768",[40,146920,54790],{"class":1283},[40,146922,15764],{"class":50},[40,146924,146925,146928],{"class":42,"line":70},[40,146926,146927],{"class":596},"  .container",[40,146929,18894],{"class":50},[40,146931,146932,146935,146937,146939,146941],{"class":42,"line":78},[40,146933,146934],{"class":63},"    width",[40,146936,60],{"class":50},[40,146938,3791],{"class":63},[40,146940,3808],{"class":1283},[40,146942,4637],{"class":50},[40,146944,146945],{"class":42,"line":86},[40,146946,129917],{"class":50},[40,146948,146949],{"class":42,"line":100},[40,146950,4907],{"class":50},[19,146952,146953],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[492,146955,146956],{"start":54},[495,146957,146958],{},"引入资源",[438,146960],{"style":128977,"src":146961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,146963,146964],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[402,146966,146968],{"id":146967},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1338,146970,146971,146974,146977],{},[495,146972,146973],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[495,146975,146976],{},"媒体查询可以根据不同设备宽度来修改样式",[495,146978,146979],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,146981,146983],{"id":146982},"_212-less基础","21.2 Less基础",[19,146985,146986],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,146988,146989],{},"Less可以解决该问题，它是css的扩展语言",[19,146991,146992,146993],{},"Less中文网址： ",[2106,146994,146995],{"href":146995,"rel":146996},"http:\u002F\u002Flesscss.cn\u002F",[2110],[19,146998,146999],{},[409,147000,147001],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[402,147003,147005],{"id":147004},"_2121-less安装","21.2.1 less安装",[19,147007,147008],{},"如果使用vscode，则无需进行下方安装步骤",[19,147010,147011],{},[2106,147012,147013],{"href":147013,"rel":147014},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[2110],[438,147016],{"style":128977,"src":147017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[402,147019,147021],{"id":147020},"_2122-less使用","21.2.2 less使用",[19,147023,147024],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[492,147026,147027],{},[495,147028,147029],{},[409,147030,147031],{},"Less 变量",[438,147033],{"style":128977,"src":147034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[438,147036],{"style":128977,"src":147037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[492,147039,147040],{"start":54},[495,147041,147042],{},[409,147043,147044],{},"Less 编译",[438,147046],{"style":128977,"src":147047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[492,147049,147050],{"start":70},[495,147051,147052],{},[409,147053,147054],{},"Less 嵌套",[438,147056],{"style":128977,"src":147057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[438,147059],{"style":128977,"src":147060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[492,147062,147063],{"start":78},[495,147064,147065],{},[409,147066,147067],{},"Less 运算",[438,147069],{"style":128977,"src":147070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,147072,147073],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,147075,3516],{},[1338,147077,147078,147081,147084,147087,147090],{},[495,147079,147080],{},"乘号（*）和除号（\u002F）的写法",[495,147082,147083],{},"运算符中间左右有个空格隔开 1px + 5",[495,147085,147086],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[495,147088,147089],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[495,147091,147092],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,147094,147096],{"id":147095},"_213-rem-适配方案","21.3 rem 适配方案",[19,147098,147099],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,147101,147102],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[438,147104],{"style":128977,"src":147105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[402,147107,147109],{"id":147108},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,147111,147112],{},"rem + 媒体查询 + less 技术",[438,147114],{"style":128977,"src":147115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,147117,147118],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,147120,147121],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[438,147123],{"style":128977,"src":147124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,147126,147127],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,147129,17955],{},[438,147131],{"style":128977,"src":147132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,147134,147135],{},"index.html:",[31,147137,147139],{"className":129121,"code":147138,"language":129123,"meta":36,"style":36},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[26,147140,147141,147146,147152,147168,147172,147178,147194],{"__ignoreMap":36},[40,147142,147143],{"class":42,"line":43},[40,147144,147145],{"class":997},"\u002F* rem 适配方案 *\u002F\n",[40,147147,147148,147150],{"class":42,"line":54},[40,147149,53935],{"class":46},[40,147151,18894],{"class":50},[40,147153,147154,147156,147158,147161,147163,147165],{"class":42,"line":70},[40,147155,73922],{"class":63},[40,147157,60],{"class":50},[40,147159,147160],{"class":63},"62.5",[40,147162,3808],{"class":1283},[40,147164,132984],{"class":50},[40,147166,147167],{"class":997},"\u002F* 1rem = 10px *\u002F\n",[40,147169,147170],{"class":42,"line":78},[40,147171,4907],{"class":50},[40,147173,147174,147176],{"class":42,"line":86},[40,147175,132969],{"class":596},[40,147177,18894],{"class":50},[40,147179,147180,147182,147184,147186,147189,147191],{"class":42,"line":100},[40,147181,73864],{"class":63},[40,147183,60],{"class":50},[40,147185,3925],{"class":63},[40,147187,147188],{"class":1283},"rem",[40,147190,132984],{"class":50},[40,147192,147193],{"class":997},"\u002F* 100px *\u002F\n",[40,147195,147196],{"class":42,"line":108},[40,147197,4907],{"class":50},[19,147199,147200],{},"common.less",[31,147202,147204],{"className":129121,"code":147203,"language":129123,"meta":36,"style":36},"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",[26,147205,147206,147212,147227,147231,147237,147251,147255,147259,147263,147269,147283,147287,147293,147307],{"__ignoreMap":36},[40,147207,147208,147210],{"class":42,"line":43},[40,147209,53935],{"class":46},[40,147211,18894],{"class":50},[40,147213,147214,147216,147218,147220,147222,147224],{"class":42,"line":54},[40,147215,73922],{"class":63},[40,147217,60],{"class":50},[40,147219,147160],{"class":63},[40,147221,3808],{"class":1283},[40,147223,29379],{"class":50},[40,147225,147226],{"class":997},"\u002F* 10px *\u002F\n",[40,147228,147229],{"class":42,"line":70},[40,147230,4907],{"class":50},[40,147232,147233,147235],{"class":42,"line":78},[40,147234,54909],{"class":46},[40,147236,18894],{"class":50},[40,147238,147239,147241,147243,147245,147247,147249],{"class":42,"line":86},[40,147240,73864],{"class":63},[40,147242,60],{"class":50},[40,147244,3925],{"class":63},[40,147246,147188],{"class":1283},[40,147248,29379],{"class":50},[40,147250,147193],{"class":997},[40,147252,147253],{"class":42,"line":100},[40,147254,4907],{"class":50},[40,147256,147257],{"class":42,"line":108},[40,147258,138582],{"class":50},[40,147260,147261],{"class":42,"line":121},[40,147262,147145],{"class":997},[40,147264,147265,147267],{"class":42,"line":134},[40,147266,53935],{"class":46},[40,147268,18894],{"class":50},[40,147270,147271,147273,147275,147277,147279,147281],{"class":42,"line":146},[40,147272,73922],{"class":63},[40,147274,60],{"class":50},[40,147276,147160],{"class":63},[40,147278,3808],{"class":1283},[40,147280,132984],{"class":50},[40,147282,147167],{"class":997},[40,147284,147285],{"class":42,"line":154},[40,147286,4907],{"class":50},[40,147288,147289,147291],{"class":42,"line":162},[40,147290,132969],{"class":596},[40,147292,18894],{"class":50},[40,147294,147295,147297,147299,147301,147303,147305],{"class":42,"line":170},[40,147296,73864],{"class":63},[40,147298,60],{"class":50},[40,147300,3925],{"class":63},[40,147302,147188],{"class":1283},[40,147304,132984],{"class":50},[40,147306,147193],{"class":997},[40,147308,147309],{"class":42,"line":183},[40,147310,4907],{"class":50},[19,147312,147313,147314,147317],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[1356,147315,147316],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[31,147319,147322],{"className":147320,"code":147321,"language":8510},[8508],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[26,147323,147321],{"__ignoreMap":36},[19,147325,147326],{},"less保存时会自动变成.css文件",[19,147328,147329],{},"好好搞懂上述代码写法",[402,147331,147333],{"id":147332},"_2132-样式导入样式","21.3.2 样式导入样式",[438,147335],{"style":128977,"src":147336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[402,147338,147340],{"id":147339},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[492,147342,147343],{},[495,147344,147345],{},"准备工作",[438,147347],{"style":128977,"src":147348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,147350,147351,147352],{},"github地址：",[2106,147353,147354],{"href":147354,"rel":147355},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[2110],[19,147357,147358],{},"下载之后，将index.js文件拖到项目中就可以了",[19,147360,147361,147362],{},"js文件引入到index.html中使用的是",[26,147363,147364],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[492,147366,147367],{"start":54},[495,147368,147369],{},"vscode插件",[438,147371],{"style":128977,"src":147372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,147374,147375],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,147377,147378],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[438,147380],{"style":128977,"src":147381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,147383,147384],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[438,147386],{"style":128977,"src":147387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,147389,147390],{},"修改成75就可以，alt+z为快捷键",[19,147392,147393],{},"index.css：",[31,147395,147396],{"className":129121,"code":147138,"language":129123,"meta":36,"style":36},[26,147397,147398,147402,147408,147422,147426,147432,147446],{"__ignoreMap":36},[40,147399,147400],{"class":42,"line":43},[40,147401,147145],{"class":997},[40,147403,147404,147406],{"class":42,"line":54},[40,147405,53935],{"class":46},[40,147407,18894],{"class":50},[40,147409,147410,147412,147414,147416,147418,147420],{"class":42,"line":70},[40,147411,73922],{"class":63},[40,147413,60],{"class":50},[40,147415,147160],{"class":63},[40,147417,3808],{"class":1283},[40,147419,132984],{"class":50},[40,147421,147167],{"class":997},[40,147423,147424],{"class":42,"line":78},[40,147425,4907],{"class":50},[40,147427,147428,147430],{"class":42,"line":86},[40,147429,132969],{"class":596},[40,147431,18894],{"class":50},[40,147433,147434,147436,147438,147440,147442,147444],{"class":42,"line":100},[40,147435,73864],{"class":63},[40,147437,60],{"class":50},[40,147439,3925],{"class":63},[40,147441,147188],{"class":1283},[40,147443,132984],{"class":50},[40,147445,147193],{"class":997},[40,147447,147448],{"class":42,"line":108},[40,147449,4907],{"class":50},[19,147451,147135],{},[31,147453,147454],{"className":129121,"code":129525,"language":129123,"meta":36,"style":36},[26,147455,147456,147462,147474],{"__ignoreMap":36},[40,147457,147458,147460],{"class":42,"line":43},[40,147459,55098],{"class":46},[40,147461,18894],{"class":50},[40,147463,147464,147466,147468,147470,147472],{"class":42,"line":54},[40,147465,73922],{"class":63},[40,147467,60],{"class":50},[40,147469,4080],{"class":63},[40,147471,54790],{"class":1283},[40,147473,4637],{"class":50},[40,147475,147476],{"class":42,"line":70},[40,147477,4907],{"class":50},[14,147479,147481],{"id":147480},"_214-响应式开发","21.4 响应式开发",[19,147483,147484],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[438,147486],{"style":128977,"src":147487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,147489,147490],{},"做法：",[1338,147492,147493,147496],{},[495,147494,147495],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[495,147497,147498],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[438,147500],{"style":128977,"src":147501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,147503,147504],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[402,147506,147508],{"id":147507},"_2141-简单代码示范","21.4.1 简单代码示范",[31,147510,147511],{"className":129121,"code":147138,"language":129123,"meta":36,"style":36},[26,147512,147513,147517,147523,147537,147541,147547,147561],{"__ignoreMap":36},[40,147514,147515],{"class":42,"line":43},[40,147516,147145],{"class":997},[40,147518,147519,147521],{"class":42,"line":54},[40,147520,53935],{"class":46},[40,147522,18894],{"class":50},[40,147524,147525,147527,147529,147531,147533,147535],{"class":42,"line":70},[40,147526,73922],{"class":63},[40,147528,60],{"class":50},[40,147530,147160],{"class":63},[40,147532,3808],{"class":1283},[40,147534,132984],{"class":50},[40,147536,147167],{"class":997},[40,147538,147539],{"class":42,"line":78},[40,147540,4907],{"class":50},[40,147542,147543,147545],{"class":42,"line":86},[40,147544,132969],{"class":596},[40,147546,18894],{"class":50},[40,147548,147549,147551,147553,147555,147557,147559],{"class":42,"line":100},[40,147550,73864],{"class":63},[40,147552,60],{"class":50},[40,147554,3925],{"class":63},[40,147556,147188],{"class":1283},[40,147558,132984],{"class":50},[40,147560,147193],{"class":997},[40,147562,147563],{"class":42,"line":108},[40,147564,4907],{"class":50},[19,147566,147567],{},"父盒子一般命名为container",[402,147569,147571],{"id":147570},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,147573,147574,147575],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[409,147576,147577],{},"使得 Web 开发更加快捷",[1338,147579,147580],{},[495,147581,147582,147583],{},"官网：",[409,147584,147585],{},[2106,147586,147587],{"href":147587,"rel":147588},"http:\u002F\u002Fgetbootstrap.com\u002F",[2110],[19,147590,147591],{},"可以直接去官网拿现成的东西",[492,147593,147594],{},[495,147595,147596],{},"Bootstrap的使用",[19,147598,147599],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,147601,147602],{},"Bootstrap 使用四步曲：",[19,147604,147605,147608],{},[409,147606,147607],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[438,147610],{"style":128977,"src":147611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,147613,147614],{},"打开Bootstrap官网，然后下载",[438,147616],{"style":128977,"src":147617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[438,147619],{"style":128977,"src":147620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,147622,147623],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,147625,147626],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,147628,147629],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[438,147631],{"style":128977,"src":147632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[31,147634,147636],{"className":129121,"code":147635,"language":129123,"meta":36,"style":36},".center {\n  color: red;\n}\n",[26,147637,147638,147644,147654],{"__ignoreMap":36},[40,147639,147640,147642],{"class":42,"line":43},[40,147641,129412],{"class":596},[40,147643,18894],{"class":50},[40,147645,147646,147648,147650,147652],{"class":42,"line":54},[40,147647,74201],{"class":63},[40,147649,60],{"class":50},[40,147651,60719],{"class":63},[40,147653,4637],{"class":50},[40,147655,147656],{"class":42,"line":70},[40,147657,4907],{"class":50},[19,147659,147660,147663],{},[26,147661,147662],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[438,147665],{"style":128977,"src":147666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[438,147668],{"style":128977,"src":147669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[438,147671],{"style":128977,"src":147672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,147674,147675],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[438,147677],{"style":128977,"src":147678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,147680,147681],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[492,147683,147684],{"start":54},[495,147685,147686],{},"布局容器",[438,147688],{"style":128977,"src":147689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,147691,147692],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,147694,147695],{},"container-fluid用于移动式布局比较方便",[492,147697,147698],{"start":70},[495,147699,147700,147701],{},"bootstrap ",[409,147702,147703],{},"栅格系统原理",[438,147705],{"style":128977,"src":147706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[492,147708,147709],{"start":78},[495,147710,147711],{},[409,147712,147713],{},"栅格选项参数",[438,147715],{"style":128977,"src":147716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,147718,147719],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,147721,17955],{},[31,147723,147724],{"className":129121,"code":147635,"language":129123,"meta":36,"style":36},[26,147725,147726,147732,147742],{"__ignoreMap":36},[40,147727,147728,147730],{"class":42,"line":43},[40,147729,129412],{"class":596},[40,147731,18894],{"class":50},[40,147733,147734,147736,147738,147740],{"class":42,"line":54},[40,147735,74201],{"class":63},[40,147737,60],{"class":50},[40,147739,60719],{"class":63},[40,147741,4637],{"class":50},[40,147743,147744],{"class":42,"line":70},[40,147745,4907],{"class":50},[19,147747,138164],{},[438,147749],{"style":128977,"src":147750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,147752,147753],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,147755,147756],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,147758,147759],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,147761,147762],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,147764,147765],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,147767,147768],{},"汇总展示说明：",[31,147770,147771],{"className":129868,"code":133225,"language":129870,"meta":36,"style":36},[26,147772,147773,147777,147791,147795],{"__ignoreMap":36},[40,147774,147775],{"class":42,"line":43},[40,147776,133232],{"class":997},[40,147778,147779,147781,147783,147785,147787,147789],{"class":42,"line":54},[40,147780,4387],{"class":50},[40,147782,54909],{"class":46},[40,147784,56784],{"class":596},[40,147786,1284],{"class":50},[40,147788,133245],{"class":94},[40,147790,54606],{"class":50},[40,147792,147793],{"class":42,"line":70},[40,147794,133252],{"class":50},[40,147796,147797,147799,147801],{"class":42,"line":78},[40,147798,55083],{"class":50},[40,147800,54909],{"class":46},[40,147802,54606],{"class":50},[438,147804],{"style":128977,"src":147805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,147807,147808],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[31,147810,147811],{"className":129868,"code":133225,"language":129870,"meta":36,"style":36},[26,147812,147813,147817,147831,147835],{"__ignoreMap":36},[40,147814,147815],{"class":42,"line":43},[40,147816,133232],{"class":997},[40,147818,147819,147821,147823,147825,147827,147829],{"class":42,"line":54},[40,147820,4387],{"class":50},[40,147822,54909],{"class":46},[40,147824,56784],{"class":596},[40,147826,1284],{"class":50},[40,147828,133245],{"class":94},[40,147830,54606],{"class":50},[40,147832,147833],{"class":42,"line":70},[40,147834,133252],{"class":50},[40,147836,147837,147839,147841],{"class":42,"line":78},[40,147838,55083],{"class":50},[40,147840,54909],{"class":46},[40,147842,54606],{"class":50},[492,147844,147845],{"start":86},[495,147846,147847],{},[409,147848,147849],{},"列嵌套",[438,147851],{"style":128977,"src":147852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,147854,147855],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,147857,147858],{},"没加row内部这样：",[438,147860],{"style":128977,"src":147861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,147863,147864],{},"加上row之后内部为：",[438,147866],{"style":128977,"src":147867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[492,147869,147870],{"start":100},[495,147871,147872],{},[409,147873,147874],{},"列偏移",[438,147876],{"style":128977,"src":147877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,147879,147880],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,147882,147883],{},"要加偏移量，即偏移份数",[19,147885,147886],{},"偏移的份数=12-两个盒子的份数",[492,147888,147889],{"start":108},[495,147890,147891],{},[409,147892,147893],{},"列排序",[438,147895],{"style":128977,"src":147896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,147898,147899],{},"pull拉左；push推右",[492,147901,147902],{"start":121},[495,147903,147904],{},[409,147905,147906],{},"响应式工具",[438,147908],{"style":128977,"src":147909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,147911,147912],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[402,147914,147916],{"id":147915},"_2143-响应式小项目","21.4.3 响应式小项目",[19,147918,147919],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,147921,147922],{},"ul {",[19,147924,147925],{},"list-style: none;",[19,147927,147928],{},"margin:0;",[19,147930,147931],{},"padding:0; }",[438,147933],{"style":128977,"src":147934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[438,147936],{"style":128977,"src":147937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,147939,147940],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,147942,72187],{},[31,147944,147945],{"className":129121,"code":141791,"language":129123,"meta":36,"style":36},[26,147946,147947,147953,147963],{"__ignoreMap":36},[40,147948,147949,147951],{"class":42,"line":43},[40,147950,132969],{"class":596},[40,147952,18894],{"class":50},[40,147954,147955,147957,147959,147961],{"class":42,"line":54},[40,147956,133601],{"class":63},[40,147958,60],{"class":50},[40,147960,27055],{"class":63},[40,147962,4637],{"class":50},[40,147964,147965],{"class":42,"line":70},[40,147966,4907],{"class":50},[19,147968,73749],{},[31,147970,147971],{"className":129121,"code":141791,"language":129123,"meta":36,"style":36},[26,147972,147973,147979,147989],{"__ignoreMap":36},[40,147974,147975,147977],{"class":42,"line":43},[40,147976,132969],{"class":596},[40,147978,18894],{"class":50},[40,147980,147981,147983,147985,147987],{"class":42,"line":54},[40,147982,133601],{"class":63},[40,147984,60],{"class":50},[40,147986,27055],{"class":63},[40,147988,4637],{"class":50},[40,147990,147991],{"class":42,"line":70},[40,147992,4907],{"class":50},[14,147994,147996],{"id":147995},"_215-swiper-插件使用","21.5 swiper 插件使用",[1338,147998,147999,148002,148005],{},[495,148000,148001],{},"下载需要的css和js文件html页面中 引入相关文件",[495,148003,148004],{},"官网找到类似案例，复制html结构，css样式 js 语法",[495,148006,148007],{},"根据需求定制修改模块",[438,148009],{"style":128977,"src":148010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,148012,148013],{},"解压后将这两部分放到项目中",[438,148015],{"style":128977,"src":148016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,148018,148019],{},"这个插件可以帮助我们实现轮播图效果",[19,148021,148022],{},"用法：",[438,148024],{"style":128977,"src":148025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,148027,148028],{},"找到自己喜欢的",[438,148030],{"style":128977,"src":148031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,148033,148034],{},"右键，查看网页源代码",[438,148036],{"style":128977,"src":148037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,148039,148040],{},"复制人家的结构内容",[19,148042,148043],{},"然后去看API文档：",[438,148045],{"style":128977,"src":148046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,148048,148049],{},"可以看看如何修改样式",[19,148051,148052],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[3384,148054,148055],{},"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":36,"searchDepth":54,"depth":54,"links":148057},[148058,148063,148067,148072,148077],{"id":146858,"depth":54,"text":146859,"children":148059},[148060,148061,148062],{"id":146862,"depth":70,"text":146863},{"id":146872,"depth":70,"text":146873},{"id":146967,"depth":70,"text":146968},{"id":146982,"depth":54,"text":146983,"children":148064},[148065,148066],{"id":147004,"depth":70,"text":147005},{"id":147020,"depth":70,"text":147021},{"id":147095,"depth":54,"text":147096,"children":148068},[148069,148070,148071],{"id":147108,"depth":70,"text":147109},{"id":147332,"depth":70,"text":147333},{"id":147339,"depth":70,"text":147340},{"id":147480,"depth":54,"text":147481,"children":148073},[148074,148075,148076],{"id":147507,"depth":70,"text":147508},{"id":147570,"depth":70,"text":147571},{"id":147915,"depth":70,"text":147916},{"id":147995,"depth":54,"text":147996},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":146850,"description":3413},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":148084,"title":148085,"body":148086,"description":3413,"extension":3414,"meta":148306,"navigation":1412,"path":148307,"seo":148308,"stem":148309,"__hash__":148310},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":148087,"toc":148302},[148088,148091,148095,148098,148113,148118,148121,148126,148161,148166,148178,148183,148196,148201,148218,148223,148243,148248,148266,148269,148272,148275,148278,148282,148285,148288,148291,148294,148297,148300],[10,148089,148085],{"id":148090},"_22-代码提交与新型相对单位",[14,148092,148094],{"id":148093},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,148096,148097],{},"法1：",[492,148099,148100,148107,148110],{},[495,148101,148102,148103],{},"登录网站注册：",[2106,148104,148105],{"href":148105,"rel":148106},"https:\u002F\u002Fgitee.com\u002F",[2110],[495,148108,148109],{},"码云创建新的仓库",[495,148111,148112],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1338,148114,148115],{},[495,148116,148117],{},"在网站根目录右键-- Git Bash Here",[438,148119],{"style":128977,"src":148120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1338,148122,148123],{},[495,148124,148125],{},"如果是第一次利用git提交，请配置好全局选项",[31,148127,148129],{"className":587,"code":148128,"language":589,"meta":36,"style":36},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[26,148130,148131,148147],{"__ignoreMap":36},[40,148132,148133,148136,148138,148141,148144],{"class":42,"line":43},[40,148134,148135],{"class":596},"git",[40,148137,123002],{"class":94},[40,148139,148140],{"class":63}," --global",[40,148142,148143],{"class":94}," user.name",[40,148145,148146],{"class":94}," \"你的名字\"\n",[40,148148,148149,148151,148153,148155,148158],{"class":42,"line":54},[40,148150,148135],{"class":596},[40,148152,123002],{"class":94},[40,148154,148140],{"class":63},[40,148156,148157],{"class":94}," user.email",[40,148159,148160],{"class":94}," \"你的邮箱\"\n",[1338,148162,148163],{},[495,148164,148165],{},"初始化仓库",[31,148167,148169],{"className":587,"code":148168,"language":589,"meta":36,"style":36},"git init\n",[26,148170,148171],{"__ignoreMap":36},[40,148172,148173,148175],{"class":42,"line":43},[40,148174,148135],{"class":596},[40,148176,148177],{"class":94}," init\n",[1338,148179,148180],{},[495,148181,148182],{},"把本地文件放到暂存区",[31,148184,148186],{"className":587,"code":148185,"language":589,"meta":36,"style":36},"git add .\n",[26,148187,148188],{"__ignoreMap":36},[40,148189,148190,148192,148194],{"class":42,"line":43},[40,148191,148135],{"class":596},[40,148193,8532],{"class":94},[40,148195,32044],{"class":94},[1338,148197,148198],{},[495,148199,148200],{},"把本地文件放到本地仓库里面",[31,148202,148204],{"className":587,"code":148203,"language":589,"meta":36,"style":36},"git commit -m \"first commit\"\n",[26,148205,148206],{"__ignoreMap":36},[40,148207,148208,148210,148213,148215],{"class":42,"line":43},[40,148209,148135],{"class":596},[40,148211,148212],{"class":94}," commit",[40,148214,2326],{"class":63},[40,148216,148217],{"class":94}," \"first commit\"\n",[1338,148219,148220],{},[495,148221,148222],{},"链接远程仓库",[31,148224,148226],{"className":587,"code":148225,"language":589,"meta":36,"style":36},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[26,148227,148228],{"__ignoreMap":36},[40,148229,148230,148232,148235,148237,148240],{"class":42,"line":43},[40,148231,148135],{"class":596},[40,148233,148234],{"class":94}," remote",[40,148236,8532],{"class":94},[40,148238,148239],{"class":94}," origin",[40,148241,148242],{"class":94}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1338,148244,148245],{},[495,148246,148247],{},"把本地仓库的文件推送到远程仓库 push",[31,148249,148251],{"className":587,"code":148250,"language":589,"meta":36,"style":36},"git push -u origin master\n",[26,148252,148253],{"__ignoreMap":36},[40,148254,148255,148257,148259,148261,148263],{"class":42,"line":43},[40,148256,148135],{"class":596},[40,148258,32319],{"class":94},[40,148260,31595],{"class":63},[40,148262,148239],{"class":94},[40,148264,148265],{"class":94}," master\n",[438,148267],{"style":128977,"src":148268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,148270,148271],{},"上方方法暂未实现，后边学完git后在整",[19,148273,148274],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[438,148276],{"style":128977,"src":148277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,148279,148281],{"id":148280},"_222-新型相对单位","22.2 新型相对单位",[438,148283],{"style":128977,"src":148284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[438,148286],{"style":128977,"src":148287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,148289,148290],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,148292,148293],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[438,148295],{"style":128977,"src":148296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,148298,148299],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[3384,148301,27275],{},{"title":36,"searchDepth":54,"depth":54,"links":148303},[148304,148305],{"id":148093,"depth":54,"text":148094},{"id":148280,"depth":54,"text":148281},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":148085,"description":3413},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":148312,"title":148313,"body":148314,"description":148318,"extension":3414,"meta":148319,"navigation":1412,"path":148320,"seo":148321,"stem":148322,"__hash__":148323},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":148315,"toc":148316},[],{"title":36,"searchDepth":54,"depth":54,"links":148317},[],"自己正经开始学编程的第一门语言！",{"category":96134},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":148313,"description":148318},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":148325,"title":148326,"body":148327,"description":3413,"extension":3414,"meta":149474,"navigation":1412,"path":149475,"seo":149476,"stem":149477,"__hash__":149478},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":148328,"toc":149450},[148329,148332,148336,148339,148342,148367,148370,148376,148380,148383,148410,148413,148453,148456,148468,148471,148477,148481,148485,148512,148529,148536,148540,148543,148569,148572,148576,148579,148619,148622,148639,148645,148649,148654,148698,148701,148719,148722,148790,148794,148801,148804,148819,148822,148831,148834,148845,148848,148857,148860,148877,148880,148895,148899,148903,148906,148908,148928,148932,148935,148938,148949,148952,148958,148962,148968,148995,148998,149010,149013,149024,149027,149033,149037,149043,149093,149096,149138,149141,149174,149177,149211,149215,149218,149238,149241,149277,149280,149293,149297,149301,149307,149310,149323,149327,149330,149336,149339,149343,149346,149349,149398,149402,149418,149424,149431,149437,149447],[10,148330,148326],{"id":148331},"_1-python环境与第一个程序",[14,148333,148335],{"id":148334},"_11-什么是python","1.1 什么是Python",[19,148337,148338],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,148340,148341],{},"理解 Python 时抓住三个关键词：",[492,148343,148344,148347,148350],{},[495,148345,148346],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[495,148348,148349],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[495,148351,148352,148353,3693,148356,3693,148359,3693,148362,3693,148364,776],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[26,148354,148355],{},"os",[26,148357,148358],{},"sys",[26,148360,148361],{},"json",[26,148363,61158],{},[26,148365,148366],{},"datetime",[19,148368,148369],{},"Python 程序的运行链路：",[31,148371,148374],{"className":148372,"code":148373,"language":8510,"meta":36},[8508],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[26,148375,148373],{"__ignoreMap":36},[14,148377,148379],{"id":148378},"_12-python解释器","1.2 Python解释器",[19,148381,148382],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[31,148384,148386],{"className":27141,"code":148385,"language":27143,"meta":36,"style":36},"python --version\npython3 --version\npython\npython3\n",[26,148387,148388,148394,148400,148405],{"__ignoreMap":36},[40,148389,148390,148392],{"class":42,"line":43},[40,148391,2323],{"class":596},[40,148393,29603],{"class":63},[40,148395,148396,148398],{"class":42,"line":54},[40,148397,104174],{"class":596},[40,148399,29603],{"class":63},[40,148401,148402],{"class":42,"line":70},[40,148403,148404],{"class":596},"python\n",[40,148406,148407],{"class":42,"line":78},[40,148408,148409],{"class":596},"python3\n",[19,148411,148412],{},"进入交互模式后，可以直接输入表达式：",[31,148414,148416],{"className":33679,"code":148415,"language":2323,"meta":36,"style":36},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[26,148417,148418,148429,148434,148448],{"__ignoreMap":36},[40,148419,148420,148423,148425,148427],{"class":42,"line":43},[40,148421,148422],{"class":1283},">>>",[40,148424,28431],{"class":63},[40,148426,48866],{"class":1283},[40,148428,51023],{"class":63},[40,148430,148431],{"class":42,"line":54},[40,148432,148433],{"class":63},"3\n",[40,148435,148436,148438,148441,148443,148446],{"class":42,"line":70},[40,148437,148422],{"class":1283},[40,148439,148440],{"class":63}," print",[40,148442,3488],{"class":50},[40,148444,148445],{"class":94},"\"hello python\"",[40,148447,1811],{"class":50},[40,148449,148450],{"class":42,"line":78},[40,148451,148452],{"class":50},"hello python\n",[19,148454,148455],{},"退出交互模式：",[31,148457,148459],{"className":33679,"code":148458,"language":2323,"meta":36,"style":36},"exit()\n",[26,148460,148461],{"__ignoreMap":36},[40,148462,148463,148466],{"class":42,"line":43},[40,148464,148465],{"class":63},"exit",[40,148467,5302],{"class":50},[19,148469,148470],{},"或使用快捷键：",[31,148472,148475],{"className":148473,"code":148474,"language":8510,"meta":36},[8508],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[26,148476,148474],{"__ignoreMap":36},[14,148478,148480],{"id":148479},"_13-安装python","1.3 安装Python",[402,148482,148484],{"id":148483},"_131-windows安装","1.3.1 Windows安装",[492,148486,148487,148494,148497,148503,148509],{},[495,148488,148489,148490],{},"打开 Python 官网：",[2106,148491,148492],{"href":148492,"rel":148493},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[2110],[495,148495,148496],{},"下载 Windows Installer。",[495,148498,148499,148500,776],{},"安装时勾选 ",[26,148501,148502],{},"Add Python to PATH",[495,148504,148505,148506,776],{},"点击 ",[26,148507,148508],{},"Install Now",[495,148510,148511],{},"安装完成后打开命令提示符验证：",[31,148513,148515],{"className":27141,"code":148514,"language":27143,"meta":36,"style":36},"python --version\npip --version\n",[26,148516,148517,148523],{"__ignoreMap":36},[40,148518,148519,148521],{"class":42,"line":43},[40,148520,2323],{"class":596},[40,148522,29603],{"class":63},[40,148524,148525,148527],{"class":42,"line":54},[40,148526,27150],{"class":596},[40,148528,29603],{"class":63},[19,148530,148531,148532,148535],{},"如果提示 ",[26,148533,148534],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[402,148537,148539],{"id":148538},"_132-macos安装","1.3.2 macOS安装",[19,148541,148542],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[31,148544,148546],{"className":27141,"code":148545,"language":27143,"meta":36,"style":36},"brew install python\npython3 --version\npip3 --version\n",[26,148547,148548,148557,148563],{"__ignoreMap":36},[40,148549,148550,148553,148555],{"class":42,"line":43},[40,148551,148552],{"class":596},"brew",[40,148554,929],{"class":94},[40,148556,2255],{"class":94},[40,148558,148559,148561],{"class":42,"line":54},[40,148560,104174],{"class":596},[40,148562,29603],{"class":63},[40,148564,148565,148567],{"class":42,"line":70},[40,148566,122983],{"class":596},[40,148568,29603],{"class":63},[19,148570,148571],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[402,148573,148575],{"id":148574},"_133-linux安装","1.3.3 Linux安装",[19,148577,148578],{},"Ubuntu\u002FDebian：",[31,148580,148582],{"className":27141,"code":148581,"language":27143,"meta":36,"style":36},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[26,148583,148584,148592,148607,148613],{"__ignoreMap":36},[40,148585,148586,148588,148590],{"class":42,"line":43},[40,148587,923],{"class":596},[40,148589,926],{"class":94},[40,148591,2126],{"class":94},[40,148593,148594,148596,148598,148600,148602,148604],{"class":42,"line":54},[40,148595,923],{"class":596},[40,148597,926],{"class":94},[40,148599,929],{"class":94},[40,148601,107694],{"class":94},[40,148603,104093],{"class":94},[40,148605,148606],{"class":94}," python3-venv\n",[40,148608,148609,148611],{"class":42,"line":70},[40,148610,104174],{"class":596},[40,148612,29603],{"class":63},[40,148614,148615,148617],{"class":42,"line":78},[40,148616,122983],{"class":596},[40,148618,29603],{"class":63},[19,148620,148621],{},"Fedora：",[31,148623,148625],{"className":27141,"code":148624,"language":27143,"meta":36,"style":36},"sudo dnf install python3 python3-pip\n",[26,148626,148627],{"__ignoreMap":36},[40,148628,148629,148631,148633,148635,148637],{"class":42,"line":43},[40,148630,923],{"class":596},[40,148632,29625],{"class":94},[40,148634,929],{"class":94},[40,148636,107694],{"class":94},[40,148638,123048],{"class":94},[19,148640,148641,148642,148644],{},"Linux 上通常使用 ",[26,148643,104174],{}," 命令，避免和系统旧版本 Python 冲突。",[14,148646,148648],{"id":148647},"_14-pip包管理器","1.4 pip包管理器",[19,148650,148651,148653],{},[26,148652,27150],{}," 用来安装第三方库。",[31,148655,148657],{"className":27141,"code":148656,"language":27143,"meta":36,"style":36},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[26,148658,148659,148668,148677,148685,148691],{"__ignoreMap":36},[40,148660,148661,148663,148665],{"class":42,"line":43},[40,148662,27150],{"class":596},[40,148664,929],{"class":94},[40,148666,148667],{"class":94}," requests\n",[40,148669,148670,148672,148675],{"class":42,"line":54},[40,148671,27150],{"class":596},[40,148673,148674],{"class":94}," uninstall",[40,148676,148667],{"class":94},[40,148678,148679,148681,148683],{"class":42,"line":70},[40,148680,27150],{"class":596},[40,148682,120860],{"class":94},[40,148684,148667],{"class":94},[40,148686,148687,148689],{"class":42,"line":78},[40,148688,27150],{"class":596},[40,148690,122239],{"class":94},[40,148692,148693,148695],{"class":42,"line":86},[40,148694,27150],{"class":596},[40,148696,148697],{"class":94}," freeze\n",[19,148699,148700],{},"国内网络较慢时可以临时使用镜像：",[31,148702,148704],{"className":27141,"code":148703,"language":27143,"meta":36,"style":36},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[26,148705,148706],{"__ignoreMap":36},[40,148707,148708,148710,148712,148715,148717],{"class":42,"line":43},[40,148709,27150],{"class":596},[40,148711,929],{"class":94},[40,148713,148714],{"class":94}," requests",[40,148716,29740],{"class":63},[40,148718,123011],{"class":94},[19,148720,148721],{},"常见第三方库：",[3619,148723,148724,148733],{},[3622,148725,148726],{},[3625,148727,148728,148731],{},[3628,148729,148730],{},"库",[3628,148732,105987],{},[3665,148734,148735,148743,148750,148758,148766,148774,148782],{},[3625,148736,148737,148740],{},[3670,148738,148739],{},"requests",[3670,148741,148742],{},"网络请求",[3625,148744,148745,148747],{},[3670,148746,103921],{},[3670,148748,148749],{},"数值计算",[3625,148751,148752,148755],{},[3670,148753,148754],{},"pandas",[3670,148756,148757],{},"表格数据处理",[3625,148759,148760,148763],{},[3670,148761,148762],{},"matplotlib",[3670,148764,148765],{},"绘图",[3625,148767,148768,148771],{},[3670,148769,148770],{},"pyecharts",[3670,148772,148773],{},"ECharts 图表",[3625,148775,148776,148779],{},[3670,148777,148778],{},"flask",[3670,148780,148781],{},"Web 后端",[3625,148783,148784,148787],{},[3670,148785,148786],{},"pytest",[3670,148788,148789],{},"自动化测试",[14,148791,148793],{"id":148792},"_15-虚拟环境","1.5 虚拟环境",[19,148795,148796,148797,148800],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[26,148798,148799],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,148802,148803],{},"创建虚拟环境：",[31,148805,148807],{"className":27141,"code":148806,"language":27143,"meta":36,"style":36},"python -m venv .venv\n",[26,148808,148809],{"__ignoreMap":36},[40,148810,148811,148813,148815,148817],{"class":42,"line":43},[40,148812,2323],{"class":596},[40,148814,2326],{"class":63},[40,148816,104179],{"class":94},[40,148818,104182],{"class":94},[19,148820,148821],{},"Windows 激活：",[31,148823,148825],{"className":27141,"code":148824,"language":27143,"meta":36,"style":36},".venv\\Scripts\\activate\n",[26,148826,148827],{"__ignoreMap":36},[40,148828,148829],{"class":42,"line":43},[40,148830,148824],{"class":596},[19,148832,148833],{},"macOS\u002FLinux 激活：",[31,148835,148837],{"className":27141,"code":148836,"language":27143,"meta":36,"style":36},"source .venv\u002Fbin\u002Factivate\n",[26,148838,148839],{"__ignoreMap":36},[40,148840,148841,148843],{"class":42,"line":43},[40,148842,104187],{"class":63},[40,148844,104190],{"class":94},[19,148846,148847],{},"退出虚拟环境：",[31,148849,148851],{"className":27141,"code":148850,"language":27143,"meta":36,"style":36},"deactivate\n",[26,148852,148853],{"__ignoreMap":36},[40,148854,148855],{"class":42,"line":43},[40,148856,148850],{"class":596},[19,148858,148859],{},"保存依赖：",[31,148861,148863],{"className":27141,"code":148862,"language":27143,"meta":36,"style":36},"pip freeze > requirements.txt\n",[26,148864,148865],{"__ignoreMap":36},[40,148866,148867,148869,148872,148874],{"class":42,"line":43},[40,148868,27150],{"class":596},[40,148870,148871],{"class":94}," freeze",[40,148873,29533],{"class":1283},[40,148875,148876],{"class":94}," requirements.txt\n",[19,148878,148879],{},"安装依赖：",[31,148881,148883],{"className":27141,"code":148882,"language":27143,"meta":36,"style":36},"pip install -r requirements.txt\n",[26,148884,148885],{"__ignoreMap":36},[40,148886,148887,148889,148891,148893],{"class":42,"line":43},[40,148888,27150],{"class":596},[40,148890,929],{"class":94},[40,148892,122922],{"class":63},[40,148894,148876],{"class":94},[14,148896,148898],{"id":148897},"_16-开发工具","1.6 开发工具",[402,148900,148902],{"id":148901},"_161-pycharm","1.6.1 PyCharm",[19,148904,148905],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,148907,125337],{},[492,148909,148910,148913,148916,148922,148925],{},[495,148911,148912],{},"New Project：创建项目。",[495,148914,148915],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[495,148917,148918,148919,128552],{},"New Python File：创建 ",[26,148920,148921],{},".py",[495,148923,148924],{},"Run：运行当前文件。",[495,148926,148927],{},"Debug：断点调试。",[402,148929,148931],{"id":148930},"_162-vs-code","1.6.2 VS Code",[19,148933,148934],{},"VS Code 轻量，适合后续多语言开发。",[19,148936,148937],{},"建议安装插件：",[492,148939,148940,148943,148946],{},[495,148941,148942],{},"Python。",[495,148944,148945],{},"Pylance。",[495,148947,148948],{},"Jupyter。",[19,148950,148951],{},"选择解释器：",[31,148953,148956],{"className":148954,"code":148955,"language":8510,"meta":36},[8508],"Ctrl + Shift + P -> Python: Select Interpreter\n",[26,148957,148955],{"__ignoreMap":36},[14,148959,148961],{"id":148960},"_17-第一个python程序","1.7 第一个Python程序",[19,148963,148964,148965,27933],{},"创建文件 ",[26,148966,148967],{},"hello.py",[31,148969,148971],{"className":33679,"code":148970,"language":2323,"meta":36,"style":36},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[26,148972,148973,148984],{"__ignoreMap":36},[40,148974,148975,148977,148979,148982],{"class":42,"line":43},[40,148976,33715],{"class":63},[40,148978,3488],{"class":50},[40,148980,148981],{"class":94},"\"Hello World\"",[40,148983,1811],{"class":50},[40,148985,148986,148988,148990,148993],{"class":42,"line":54},[40,148987,33715],{"class":63},[40,148989,3488],{"class":50},[40,148991,148992],{"class":94},"\"你好，Python\"",[40,148994,1811],{"class":50},[19,148996,148997],{},"在终端运行：",[31,148999,149001],{"className":27141,"code":149000,"language":27143,"meta":36,"style":36},"python hello.py\n",[26,149002,149003],{"__ignoreMap":36},[40,149004,149005,149007],{"class":42,"line":43},[40,149006,2323],{"class":596},[40,149008,149009],{"class":94}," hello.py\n",[19,149011,149012],{},"或：",[31,149014,149016],{"className":27141,"code":149015,"language":27143,"meta":36,"style":36},"python3 hello.py\n",[26,149017,149018],{"__ignoreMap":36},[40,149019,149020,149022],{"class":42,"line":43},[40,149021,104174],{"class":596},[40,149023,149009],{"class":94},[19,149025,149026],{},"输出：",[31,149028,149031],{"className":149029,"code":149030,"language":8510,"meta":36},[8508],"Hello World\n你好，Python\n",[26,149032,149030],{"__ignoreMap":36},[14,149034,149036],{"id":149035},"_18-print函数","1.8 print函数",[19,149038,149039,149042],{},[26,149040,149041],{},"print()"," 用来输出内容。",[31,149044,149046],{"className":33679,"code":149045,"language":2323,"meta":36,"style":36},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[26,149047,149048,149058,149068,149078],{"__ignoreMap":36},[40,149049,149050,149052,149054,149056],{"class":42,"line":43},[40,149051,33715],{"class":63},[40,149053,3488],{"class":50},[40,149055,9167],{"class":94},[40,149057,1811],{"class":50},[40,149059,149060,149062,149064,149066],{"class":42,"line":54},[40,149061,33715],{"class":63},[40,149063,3488],{"class":50},[40,149065,3791],{"class":63},[40,149067,1811],{"class":50},[40,149069,149070,149072,149074,149076],{"class":42,"line":70},[40,149071,33715],{"class":63},[40,149073,3488],{"class":50},[40,149075,3534],{"class":63},[40,149077,1811],{"class":50},[40,149079,149080,149082,149084,149087,149089,149091],{"class":42,"line":78},[40,149081,33715],{"class":63},[40,149083,3488],{"class":50},[40,149085,149086],{"class":94},"\"年龄:\"",[40,149088,15757],{"class":50},[40,149090,4128],{"class":63},[40,149092,1811],{"class":50},[19,149094,149095],{},"多个内容用逗号隔开，默认中间加空格：",[31,149097,149099],{"className":33679,"code":149098,"language":2323,"meta":36,"style":36},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[26,149100,149101,149111,149121],{"__ignoreMap":36},[40,149102,149103,149106,149108],{"class":42,"line":43},[40,149104,149105],{"class":50},"name ",[40,149107,1284],{"class":1283},[40,149109,149110],{"class":94}," \"张三\"\n",[40,149112,149113,149116,149118],{"class":42,"line":54},[40,149114,149115],{"class":50},"age ",[40,149117,1284],{"class":1283},[40,149119,149120],{"class":63}," 18\n",[40,149122,149123,149125,149127,149130,149133,149135],{"class":42,"line":70},[40,149124,33715],{"class":63},[40,149126,3488],{"class":50},[40,149128,149129],{"class":94},"\"姓名:\"",[40,149131,149132],{"class":50},", name, ",[40,149134,149086],{"class":94},[40,149136,149137],{"class":50},", age)\n",[19,149139,149140],{},"修改分隔符：",[31,149142,149144],{"className":33679,"code":149143,"language":2323,"meta":36,"style":36},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[26,149145,149146],{"__ignoreMap":36},[40,149147,149148,149150,149152,149155,149157,149159,149161,149163,149165,149168,149170,149172],{"class":42,"line":43},[40,149149,33715],{"class":63},[40,149151,3488],{"class":50},[40,149153,149154],{"class":94},"\"2024\"",[40,149156,15757],{"class":50},[40,149158,57614],{"class":94},[40,149160,15757],{"class":50},[40,149162,57614],{"class":94},[40,149164,15757],{"class":50},[40,149166,149167],{"class":8539},"sep",[40,149169,1284],{"class":1283},[40,149171,35783],{"class":94},[40,149173,1811],{"class":50},[19,149175,149176],{},"修改结尾符：",[31,149178,149180],{"className":33679,"code":149179,"language":2323,"meta":36,"style":36},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[26,149181,149182,149200],{"__ignoreMap":36},[40,149183,149184,149186,149188,149190,149192,149194,149196,149198],{"class":42,"line":43},[40,149185,33715],{"class":63},[40,149187,3488],{"class":50},[40,149189,9167],{"class":94},[40,149191,15757],{"class":50},[40,149193,49101],{"class":8539},[40,149195,1284],{"class":1283},[40,149197,7682],{"class":94},[40,149199,1811],{"class":50},[40,149201,149202,149204,149206,149209],{"class":42,"line":54},[40,149203,33715],{"class":63},[40,149205,3488],{"class":50},[40,149207,149208],{"class":94},"\"python\"",[40,149210,1811],{"class":50},[14,149212,149214],{"id":149213},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,149216,149217],{},"交互运行适合临时验证：",[31,149219,149221],{"className":33679,"code":149220,"language":2323,"meta":36,"style":36},">>> 10 * 3\n30\n",[26,149222,149223,149233],{"__ignoreMap":36},[40,149224,149225,149227,149229,149231],{"class":42,"line":43},[40,149226,148422],{"class":1283},[40,149228,5364],{"class":63},[40,149230,9841],{"class":1283},[40,149232,123319],{"class":63},[40,149234,149235],{"class":42,"line":54},[40,149236,149237],{"class":63},"30\n",[19,149239,149240],{},"脚本运行适合保存程序：",[31,149242,149244],{"className":33679,"code":149243,"language":2323,"meta":36,"style":36},"price = 8\ncount = 5\nprint(price * count)\n",[26,149245,149246,149256,149265],{"__ignoreMap":36},[40,149247,149248,149251,149253],{"class":42,"line":43},[40,149249,149250],{"class":50},"price ",[40,149252,1284],{"class":1283},[40,149254,149255],{"class":63}," 8\n",[40,149257,149258,149261,149263],{"class":42,"line":54},[40,149259,149260],{"class":50},"count ",[40,149262,1284],{"class":1283},[40,149264,57725],{"class":63},[40,149266,149267,149269,149272,149274],{"class":42,"line":70},[40,149268,33715],{"class":63},[40,149270,149271],{"class":50},"(price ",[40,149273,3934],{"class":1283},[40,149275,149276],{"class":50}," count)\n",[19,149278,149279],{},"实际学习中推荐：",[492,149281,149282,149285,149290],{},[495,149283,149284],{},"临时试一个语法，用交互模式。",[495,149286,149287,149288,128552],{},"写完整练习，用 ",[26,149289,148921],{},[495,149291,149292],{},"写项目，用独立目录和虚拟环境。",[14,149294,149296],{"id":149295},"_110-常见错误","1.10 常见错误",[402,149298,149300],{"id":149299},"_1101-命令找不到","1.10.1 命令找不到",[31,149302,149305],{"className":149303,"code":149304,"language":8510,"meta":36},[8508],"python: command not found\n",[26,149306,149304],{"__ignoreMap":36},[19,149308,149309],{},"原因：",[492,149311,149312,149315,149318],{},[495,149313,149314],{},"没安装 Python。",[495,149316,149317],{},"PATH 没配置。",[495,149319,149320,149321,776],{},"Linux\u002FmacOS 应该使用 ",[26,149322,104174],{},[402,149324,149326],{"id":149325},"_1102-文件名冲突","1.10.2 文件名冲突",[19,149328,149329],{},"不要把文件命名为：",[31,149331,149334],{"className":149332,"code":149333,"language":8510,"meta":36},[8508],"random.py\njson.py\ntime.py\nrequests.py\n",[26,149335,149333],{"__ignoreMap":36},[19,149337,149338],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[402,149340,149342],{"id":149341},"_1103-中文乱码","1.10.3 中文乱码",[19,149344,149345],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,149347,149348],{},"如果读写文件出现乱码，要明确指定编码：",[31,149350,149352],{"className":33679,"code":149351,"language":2323,"meta":36,"style":36},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[26,149353,149354,149388],{"__ignoreMap":36},[40,149355,149356,149358,149361,149363,149366,149368,149371,149373,149376,149378,149381,149383,149385],{"class":42,"line":43},[40,149357,111124],{"class":1283},[40,149359,149360],{"class":63}," open",[40,149362,3488],{"class":50},[40,149364,149365],{"class":94},"\"data.txt\"",[40,149367,15757],{"class":50},[40,149369,149370],{"class":94},"\"r\"",[40,149372,15757],{"class":50},[40,149374,149375],{"class":8539},"encoding",[40,149377,1284],{"class":1283},[40,149379,149380],{"class":94},"\"utf-8\"",[40,149382,17036],{"class":50},[40,149384,34683],{"class":1283},[40,149386,149387],{"class":50}," f:\n",[40,149389,149390,149393,149395],{"class":42,"line":54},[40,149391,149392],{"class":50},"    content ",[40,149394,1284],{"class":1283},[40,149396,149397],{"class":50}," f.read()\n",[14,149399,149401],{"id":149400},"_111-本章练习","1.11 本章练习",[492,149403,149404,149407,149413],{},[495,149405,149406],{},"安装 Python，并在终端输出版本号。",[495,149408,149409,149410,149412],{},"新建 ",[26,149411,148967],{},"，输出自己的姓名、年龄、学习目标。",[495,149414,107657,149415,149417],{},[26,149416,149041],{}," 输出下面格式：",[31,149419,149422],{"className":149420,"code":149421,"language":8510,"meta":36},[8508],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[26,149423,149421],{"__ignoreMap":36},[492,149425,149426],{"start":78},[495,149427,107657,149428,149430],{},[26,149429,149167],{}," 输出日期：",[31,149432,149435],{"className":149433,"code":149434,"language":8510,"meta":36},[8508],"2024-10-10\n",[26,149436,149434],{"__ignoreMap":36},[492,149438,149439],{"start":86},[495,149440,107657,149441,149443,149444,149446],{},[26,149442,49101],{}," 让两次 ",[26,149445,149041],{}," 输出在同一行。",[3384,149448,149449],{},"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":36,"searchDepth":54,"depth":54,"links":149451},[149452,149453,149454,149459,149460,149461,149465,149466,149467,149468,149473],{"id":148334,"depth":54,"text":148335},{"id":148378,"depth":54,"text":148379},{"id":148479,"depth":54,"text":148480,"children":149455},[149456,149457,149458],{"id":148483,"depth":70,"text":148484},{"id":148538,"depth":70,"text":148539},{"id":148574,"depth":70,"text":148575},{"id":148647,"depth":54,"text":148648},{"id":148792,"depth":54,"text":148793},{"id":148897,"depth":54,"text":148898,"children":149462},[149463,149464],{"id":148901,"depth":70,"text":148902},{"id":148930,"depth":70,"text":148931},{"id":148960,"depth":54,"text":148961},{"id":149035,"depth":54,"text":149036},{"id":149213,"depth":54,"text":149214},{"id":149295,"depth":54,"text":149296,"children":149469},[149470,149471,149472],{"id":149299,"depth":70,"text":149300},{"id":149325,"depth":70,"text":149326},{"id":149341,"depth":70,"text":149342},{"id":149400,"depth":54,"text":149401},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":148326,"description":3413},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":149480,"title":149481,"body":149482,"description":3413,"extension":3414,"meta":151886,"navigation":1412,"path":151887,"seo":151888,"stem":151889,"__hash__":151890},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":149483,"toc":151871},[149484,149487,149491,149494,149497,149514,149517,149559,149562,149566,149569,149572,149609,149612,149646,149649,149741,149745,149759,149762,149789,149792,149796,149899,149906,149909,149926,149930,149937,150126,150129,150202,150206,150209,150293,150296,150328,150332,150536,150539,150543,150549,150651,150654,150910,150914,150917,150920,150934,150936,151122,151126,151488,151494,151498,151501,151625,151628,151807,151810,151814,151847,151851,151868],[10,149485,149481],{"id":149486},"_10-json与pyecharts折线图",[14,149488,149490],{"id":149489},"_101-数据可视化","10.1 数据可视化",[19,149492,149493],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,149495,149496],{},"常见图表：",[492,149498,149499,149502,149505,149508,149511],{},[495,149500,149501],{},"折线图：看趋势。",[495,149503,149504],{},"柱状图：看分类对比。",[495,149506,149507],{},"饼图：看占比。",[495,149509,149510],{},"地图：看地域分布。",[495,149512,149513],{},"散点图：看两个变量之间的关系。",[19,149515,149516],{},"Python 可视化常用库：",[3619,149518,149519,149527],{},[3622,149520,149521],{},[3625,149522,149523,149525],{},[3628,149524,148730],{},[3628,149526,27059],{},[3665,149528,149529,149536,149544,149551],{},[3625,149530,149531,149533],{},[3670,149532,148762],{},[3670,149534,149535],{},"基础、经典、可定制",[3625,149537,149538,149541],{},[3670,149539,149540],{},"seaborn",[3670,149542,149543],{},"统计图表更美观",[3625,149545,149546,149548],{},[3670,149547,148770],{},[3670,149549,149550],{},"生成交互式网页图表",[3625,149552,149553,149556],{},[3670,149554,149555],{},"plotly",[3670,149557,149558],{},"交互图表能力强",[19,149560,149561],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,149563,149565],{"id":149564},"_102-json回顾","10.2 JSON回顾",[19,149567,149568],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,149570,149571],{},"Python 字典：",[31,149573,149575],{"className":33679,"code":149574,"language":2323,"meta":36,"style":36},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[26,149576,149577,149585,149596,149605],{"__ignoreMap":36},[40,149578,149579,149581,149583],{"class":42,"line":43},[40,149580,104949],{"class":50},[40,149582,1284],{"class":1283},[40,149584,18894],{"class":50},[40,149586,149587,149590,149592,149594],{"class":42,"line":54},[40,149588,149589],{"class":94},"    \"name\"",[40,149591,60],{"class":50},[40,149593,72567],{"class":94},[40,149595,34766],{"class":50},[40,149597,149598,149601,149603],{"class":42,"line":70},[40,149599,149600],{"class":94},"    \"value\"",[40,149602,60],{"class":50},[40,149604,100753],{"class":63},[40,149606,149607],{"class":42,"line":78},[40,149608,4907],{"class":50},[19,149610,149611],{},"JSON 字符串：",[31,149613,149616],{"className":149614,"code":149615,"language":148361,"meta":36,"style":36},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[26,149617,149618,149622,149633,149642],{"__ignoreMap":36},[40,149619,149620],{"class":42,"line":43},[40,149621,4888],{"class":50},[40,149623,149624,149627,149629,149631],{"class":42,"line":54},[40,149625,149626],{"class":63},"  \"name\"",[40,149628,60],{"class":50},[40,149630,72567],{"class":94},[40,149632,34766],{"class":50},[40,149634,149635,149638,149640],{"class":42,"line":70},[40,149636,149637],{"class":63},"  \"value\"",[40,149639,60],{"class":50},[40,149641,100753],{"class":63},[40,149643,149644],{"class":42,"line":78},[40,149645,4907],{"class":50},[19,149647,149648],{},"Python 与 JSON 的转换：",[31,149650,149652],{"className":33679,"code":149651,"language":2323,"meta":36,"style":36},"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",[26,149653,149654,149661,149665,149690,149694,149713,149720,149724,149734],{"__ignoreMap":36},[40,149655,149656,149658],{"class":42,"line":43},[40,149657,33692],{"class":1283},[40,149659,149660],{"class":50}," json\n",[40,149662,149663],{"class":42,"line":54},[40,149664,1413],{"emptyLinePlaceholder":1412},[40,149666,149667,149669,149671,149673,149675,149677,149679,149681,149684,149686,149688],{"class":42,"line":70},[40,149668,104949],{"class":50},[40,149670,1284],{"class":1283},[40,149672,7771],{"class":50},[40,149674,65977],{"class":94},[40,149676,60],{"class":50},[40,149678,72567],{"class":94},[40,149680,15757],{"class":50},[40,149682,149683],{"class":94},"\"value\"",[40,149685,60],{"class":50},[40,149687,3791],{"class":63},[40,149689,4907],{"class":50},[40,149691,149692],{"class":42,"line":78},[40,149693,1413],{"emptyLinePlaceholder":1412},[40,149695,149696,149699,149701,149704,149707,149709,149711],{"class":42,"line":86},[40,149697,149698],{"class":50},"json_text ",[40,149700,1284],{"class":1283},[40,149702,149703],{"class":50}," json.dumps(data, ",[40,149705,149706],{"class":8539},"ensure_ascii",[40,149708,1284],{"class":1283},[40,149710,37287],{"class":63},[40,149712,1811],{"class":50},[40,149714,149715,149717],{"class":42,"line":100},[40,149716,33715],{"class":63},[40,149718,149719],{"class":50},"(json_text)\n",[40,149721,149722],{"class":42,"line":108},[40,149723,1413],{"emptyLinePlaceholder":1412},[40,149725,149726,149729,149731],{"class":42,"line":121},[40,149727,149728],{"class":50},"new_data ",[40,149730,1284],{"class":1283},[40,149732,149733],{"class":50}," json.loads(json_text)\n",[40,149735,149736,149738],{"class":42,"line":134},[40,149737,33715],{"class":63},[40,149739,149740],{"class":50},"(new_data)\n",[14,149742,149744],{"id":149743},"_103-安装pyecharts","10.3 安装pyecharts",[31,149746,149748],{"className":27141,"code":149747,"language":27143,"meta":36,"style":36},"pip install pyecharts\n",[26,149749,149750],{"__ignoreMap":36},[40,149751,149752,149754,149756],{"class":42,"line":43},[40,149753,27150],{"class":596},[40,149755,929],{"class":94},[40,149757,149758],{"class":94}," pyecharts\n",[19,149760,149761],{},"验证：",[31,149763,149765],{"className":33679,"code":149764,"language":2323,"meta":36,"style":36},"import pyecharts\n\nprint(pyecharts.__version__)\n",[26,149766,149767,149773,149777],{"__ignoreMap":36},[40,149768,149769,149771],{"class":42,"line":43},[40,149770,33692],{"class":1283},[40,149772,149758],{"class":50},[40,149774,149775],{"class":42,"line":54},[40,149776,1413],{"emptyLinePlaceholder":1412},[40,149778,149779,149781,149784,149787],{"class":42,"line":70},[40,149780,33715],{"class":63},[40,149782,149783],{"class":50},"(pyecharts.",[40,149785,149786],{"class":63},"__version__",[40,149788,1811],{"class":50},[19,149790,149791],{},"如果使用虚拟环境，要先激活环境再安装。",[14,149793,149795],{"id":149794},"_104-第一个折线图","10.4 第一个折线图",[31,149797,149799],{"className":33679,"code":149798,"language":2323,"meta":36,"style":36},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[26,149800,149801,149813,149817,149827,149857,149889],{"__ignoreMap":36},[40,149802,149803,149805,149808,149810],{"class":42,"line":43},[40,149804,34037],{"class":1283},[40,149806,149807],{"class":50}," pyecharts.charts ",[40,149809,33692],{"class":1283},[40,149811,149812],{"class":50}," Line\n",[40,149814,149815],{"class":42,"line":54},[40,149816,1413],{"emptyLinePlaceholder":1412},[40,149818,149819,149822,149824],{"class":42,"line":70},[40,149820,149821],{"class":50},"line ",[40,149823,1284],{"class":1283},[40,149825,149826],{"class":50}," Line()\n",[40,149828,149829,149832,149835,149837,149840,149842,149845,149847,149850,149852,149855],{"class":42,"line":78},[40,149830,149831],{"class":50},"line.add_xaxis([",[40,149833,149834],{"class":94},"\"周一\"",[40,149836,15757],{"class":50},[40,149838,149839],{"class":94},"\"周二\"",[40,149841,15757],{"class":50},[40,149843,149844],{"class":94},"\"周三\"",[40,149846,15757],{"class":50},[40,149848,149849],{"class":94},"\"周四\"",[40,149851,15757],{"class":50},[40,149853,149854],{"class":94},"\"周五\"",[40,149856,7980],{"class":50},[40,149858,149859,149862,149865,149867,149869,149871,149873,149875,149877,149879,149882,149884,149887],{"class":42,"line":86},[40,149860,149861],{"class":50},"line.add_yaxis(",[40,149863,149864],{"class":94},"\"销售额\"",[40,149866,80813],{"class":50},[40,149868,3791],{"class":63},[40,149870,15757],{"class":50},[40,149872,4294],{"class":63},[40,149874,15757],{"class":50},[40,149876,4339],{"class":63},[40,149878,15757],{"class":50},[40,149880,149881],{"class":63},"150",[40,149883,15757],{"class":50},[40,149885,149886],{"class":63},"180",[40,149888,7980],{"class":50},[40,149890,149891,149894,149897],{"class":42,"line":100},[40,149892,149893],{"class":50},"line.render(",[40,149895,149896],{"class":94},"\"line.html\"",[40,149898,1811],{"class":50},[19,149900,149901,149902,149905],{},"运行后会生成 ",[26,149903,149904],{},"line.html","，用浏览器打开即可看到图表。",[19,149907,149908],{},"核心步骤：",[492,149910,149911,149914,149917,149920,149923],{},[495,149912,149913],{},"导入图表类。",[495,149915,149916],{},"创建图表对象。",[495,149918,149919],{},"添加 x 轴数据。",[495,149921,149922],{},"添加 y 轴数据。",[495,149924,149925],{},"渲染为 HTML。",[14,149927,149929],{"id":149928},"_105-全局配置","10.5 全局配置",[19,149931,149932,149933,149936],{},"常用配置在 ",[26,149934,149935],{},"pyecharts.options"," 中。",[31,149938,149940],{"className":33679,"code":149939,"language":2323,"meta":36,"style":36},"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",[26,149941,149942,149959,149969,149973,149981,150005,150033,150038,150057,150076,150094,150114,150118],{"__ignoreMap":36},[40,149943,149944,149946,149949,149951,149954,149956],{"class":42,"line":43},[40,149945,34037],{"class":1283},[40,149947,149948],{"class":50}," pyecharts ",[40,149950,33692],{"class":1283},[40,149952,149953],{"class":50}," options ",[40,149955,34683],{"class":1283},[40,149957,149958],{"class":50}," opts\n",[40,149960,149961,149963,149965,149967],{"class":42,"line":54},[40,149962,34037],{"class":1283},[40,149964,149807],{"class":50},[40,149966,33692],{"class":1283},[40,149968,149812],{"class":50},[40,149970,149971],{"class":42,"line":70},[40,149972,1413],{"emptyLinePlaceholder":1412},[40,149974,149975,149977,149979],{"class":42,"line":78},[40,149976,149821],{"class":50},[40,149978,1284],{"class":1283},[40,149980,149826],{"class":50},[40,149982,149983,149985,149987,149989,149991,149993,149995,149997,149999,150001,150003],{"class":42,"line":86},[40,149984,149831],{"class":50},[40,149986,149834],{"class":94},[40,149988,15757],{"class":50},[40,149990,149839],{"class":94},[40,149992,15757],{"class":50},[40,149994,149844],{"class":94},[40,149996,15757],{"class":50},[40,149998,149849],{"class":94},[40,150000,15757],{"class":50},[40,150002,149854],{"class":94},[40,150004,7980],{"class":50},[40,150006,150007,150009,150011,150013,150015,150017,150019,150021,150023,150025,150027,150029,150031],{"class":42,"line":100},[40,150008,149861],{"class":50},[40,150010,149864],{"class":94},[40,150012,80813],{"class":50},[40,150014,3791],{"class":63},[40,150016,15757],{"class":50},[40,150018,4294],{"class":63},[40,150020,15757],{"class":50},[40,150022,4339],{"class":63},[40,150024,15757],{"class":50},[40,150026,149881],{"class":63},[40,150028,15757],{"class":50},[40,150030,149886],{"class":63},[40,150032,7980],{"class":50},[40,150034,150035],{"class":42,"line":108},[40,150036,150037],{"class":50},"line.set_global_opts(\n",[40,150039,150040,150043,150045,150048,150050,150052,150055],{"class":42,"line":121},[40,150041,150042],{"class":8539},"    title_opts",[40,150044,1284],{"class":1283},[40,150046,150047],{"class":50},"opts.TitleOpts(",[40,150049,54706],{"class":8539},[40,150051,1284],{"class":1283},[40,150053,150054],{"class":94},"\"一周销售额\"",[40,150056,41347],{"class":50},[40,150058,150059,150062,150064,150067,150069,150071,150074],{"class":42,"line":134},[40,150060,150061],{"class":8539},"    xaxis_opts",[40,150063,1284],{"class":1283},[40,150065,150066],{"class":50},"opts.AxisOpts(",[40,150068,83105],{"class":8539},[40,150070,1284],{"class":1283},[40,150072,150073],{"class":94},"\"日期\"",[40,150075,41347],{"class":50},[40,150077,150078,150081,150083,150085,150087,150089,150092],{"class":42,"line":146},[40,150079,150080],{"class":8539},"    yaxis_opts",[40,150082,1284],{"class":1283},[40,150084,150066],{"class":50},[40,150086,83105],{"class":8539},[40,150088,1284],{"class":1283},[40,150090,150091],{"class":94},"\"金额\"",[40,150093,41347],{"class":50},[40,150095,150096,150099,150101,150104,150107,150109,150112],{"class":42,"line":154},[40,150097,150098],{"class":8539},"    tooltip_opts",[40,150100,1284],{"class":1283},[40,150102,150103],{"class":50},"opts.TooltipOpts(",[40,150105,150106],{"class":8539},"trigger",[40,150108,1284],{"class":1283},[40,150110,150111],{"class":94},"\"axis\"",[40,150113,41347],{"class":50},[40,150115,150116],{"class":42,"line":162},[40,150117,1811],{"class":50},[40,150119,150120,150122,150124],{"class":42,"line":170},[40,150121,149893],{"class":50},[40,150123,149896],{"class":94},[40,150125,1811],{"class":50},[19,150127,150128],{},"常见全局配置：",[3619,150130,150131,150140],{},[3622,150132,150133],{},[3625,150134,150135,150138],{},[3628,150136,150137],{},"配置",[3628,150139,105987],{},[3665,150141,150142,150152,150162,150172,150182,150192],{},[3625,150143,150144,150149],{},[3670,150145,150146],{},[26,150147,150148],{},"TitleOpts",[3670,150150,150151],{},"标题",[3625,150153,150154,150159],{},[3670,150155,150156],{},[26,150157,150158],{},"LegendOpts",[3670,150160,150161],{},"图例",[3625,150163,150164,150169],{},[3670,150165,150166],{},[26,150167,150168],{},"TooltipOpts",[3670,150170,150171],{},"提示框",[3625,150173,150174,150179],{},[3670,150175,150176],{},[26,150177,150178],{},"AxisOpts",[3670,150180,150181],{},"坐标轴",[3625,150183,150184,150189],{},[3670,150185,150186],{},[26,150187,150188],{},"VisualMapOpts",[3670,150190,150191],{},"视觉映射",[3625,150193,150194,150199],{},[3670,150195,150196],{},[26,150197,150198],{},"DataZoomOpts",[3670,150200,150201],{},"区域缩放",[14,150203,150205],{"id":150204},"_106-系列配置","10.6 系列配置",[19,150207,150208],{},"系列配置作用于某一组数据。",[31,150210,150212],{"className":33679,"code":150211,"language":2323,"meta":36,"style":36},"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",[26,150213,150214,150219,150230,150259,150270,150289],{"__ignoreMap":36},[40,150215,150216],{"class":42,"line":43},[40,150217,150218],{"class":50},"line.add_yaxis(\n",[40,150220,150221,150224,150226,150228],{"class":42,"line":54},[40,150222,150223],{"class":8539},"    series_name",[40,150225,1284],{"class":1283},[40,150227,149864],{"class":94},[40,150229,34766],{"class":50},[40,150231,150232,150235,150237,150239,150241,150243,150245,150247,150249,150251,150253,150255,150257],{"class":42,"line":70},[40,150233,150234],{"class":8539},"    y_axis",[40,150236,1284],{"class":1283},[40,150238,4367],{"class":50},[40,150240,3791],{"class":63},[40,150242,15757],{"class":50},[40,150244,4294],{"class":63},[40,150246,15757],{"class":50},[40,150248,4339],{"class":63},[40,150250,15757],{"class":50},[40,150252,149881],{"class":63},[40,150254,15757],{"class":50},[40,150256,149886],{"class":63},[40,150258,91131],{"class":50},[40,150260,150261,150264,150266,150268],{"class":42,"line":78},[40,150262,150263],{"class":8539},"    is_smooth",[40,150265,1284],{"class":1283},[40,150267,34776],{"class":63},[40,150269,34766],{"class":50},[40,150271,150272,150275,150277,150280,150283,150285,150287],{"class":42,"line":86},[40,150273,150274],{"class":8539},"    label_opts",[40,150276,1284],{"class":1283},[40,150278,150279],{"class":50},"opts.LabelOpts(",[40,150281,150282],{"class":8539},"is_show",[40,150284,1284],{"class":1283},[40,150286,34776],{"class":63},[40,150288,41347],{"class":50},[40,150290,150291],{"class":42,"line":100},[40,150292,1811],{"class":50},[19,150294,150295],{},"常用参数：",[492,150297,150298,150304,150310,150316,150322],{},[495,150299,150300,150303],{},[26,150301,150302],{},"series_name","：系列名称。",[495,150305,150306,150309],{},[26,150307,150308],{},"y_axis","：y 轴数据。",[495,150311,150312,150315],{},[26,150313,150314],{},"is_smooth","：是否平滑曲线。",[495,150317,150318,150321],{},[26,150319,150320],{},"label_opts","：标签配置。",[495,150323,150324,150327],{},[26,150325,150326],{},"symbol_size","：标记点大小。",[14,150329,150331],{"id":150330},"_107-多条折线","10.7 多条折线",[31,150333,150335],{"className":33679,"code":150334,"language":2323,"meta":36,"style":36},"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",[26,150336,150337,150351,150361,150365,150394,150398,150406,150411,150449,150486,150490,150507,150523,150527],{"__ignoreMap":36},[40,150338,150339,150341,150343,150345,150347,150349],{"class":42,"line":43},[40,150340,34037],{"class":1283},[40,150342,149948],{"class":50},[40,150344,33692],{"class":1283},[40,150346,149953],{"class":50},[40,150348,34683],{"class":1283},[40,150350,149958],{"class":50},[40,150352,150353,150355,150357,150359],{"class":42,"line":54},[40,150354,34037],{"class":1283},[40,150356,149807],{"class":50},[40,150358,33692],{"class":1283},[40,150360,149812],{"class":50},[40,150362,150363],{"class":42,"line":70},[40,150364,1413],{"emptyLinePlaceholder":1412},[40,150366,150367,150370,150372,150374,150376,150378,150380,150382,150384,150386,150388,150390,150392],{"class":42,"line":78},[40,150368,150369],{"class":50},"dates ",[40,150371,1284],{"class":1283},[40,150373,55524],{"class":50},[40,150375,149834],{"class":94},[40,150377,15757],{"class":50},[40,150379,149839],{"class":94},[40,150381,15757],{"class":50},[40,150383,149844],{"class":94},[40,150385,15757],{"class":50},[40,150387,149849],{"class":94},[40,150389,15757],{"class":50},[40,150391,149854],{"class":94},[40,150393,36546],{"class":50},[40,150395,150396],{"class":42,"line":86},[40,150397,1413],{"emptyLinePlaceholder":1412},[40,150399,150400,150402,150404],{"class":42,"line":100},[40,150401,149821],{"class":50},[40,150403,1284],{"class":1283},[40,150405,149826],{"class":50},[40,150407,150408],{"class":42,"line":108},[40,150409,150410],{"class":50},"line.add_xaxis(dates)\n",[40,150412,150413,150415,150418,150420,150422,150424,150427,150429,150431,150433,150435,150437,150439,150441,150443,150445,150447],{"class":42,"line":121},[40,150414,149861],{"class":50},[40,150416,150417],{"class":94},"\"线上销售\"",[40,150419,80813],{"class":50},[40,150421,3791],{"class":63},[40,150423,15757],{"class":50},[40,150425,150426],{"class":63},"130",[40,150428,15757],{"class":50},[40,150430,4294],{"class":63},[40,150432,15757],{"class":50},[40,150434,24369],{"class":63},[40,150436,15757],{"class":50},[40,150438,5053],{"class":63},[40,150440,115493],{"class":50},[40,150442,150314],{"class":8539},[40,150444,1284],{"class":1283},[40,150446,34776],{"class":63},[40,150448,1811],{"class":50},[40,150450,150451,150453,150456,150458,150460,150462,150464,150466,150468,150470,150472,150474,150476,150478,150480,150482,150484],{"class":42,"line":134},[40,150452,149861],{"class":50},[40,150454,150455],{"class":94},"\"线下销售\"",[40,150457,80813],{"class":50},[40,150459,4091],{"class":63},[40,150461,15757],{"class":50},[40,150463,4339],{"class":63},[40,150465,15757],{"class":50},[40,150467,3791],{"class":63},[40,150469,15757],{"class":50},[40,150471,4294],{"class":63},[40,150473,15757],{"class":50},[40,150475,149881],{"class":63},[40,150477,115493],{"class":50},[40,150479,150314],{"class":8539},[40,150481,1284],{"class":1283},[40,150483,34776],{"class":63},[40,150485,1811],{"class":50},[40,150487,150488],{"class":42,"line":146},[40,150489,150037],{"class":50},[40,150491,150492,150494,150496,150498,150500,150502,150505],{"class":42,"line":154},[40,150493,150042],{"class":8539},[40,150495,1284],{"class":1283},[40,150497,150047],{"class":50},[40,150499,54706],{"class":8539},[40,150501,1284],{"class":1283},[40,150503,150504],{"class":94},"\"线上线下销售趋势\"",[40,150506,41347],{"class":50},[40,150508,150509,150511,150513,150515,150517,150519,150521],{"class":42,"line":162},[40,150510,150098],{"class":8539},[40,150512,1284],{"class":1283},[40,150514,150103],{"class":50},[40,150516,150106],{"class":8539},[40,150518,1284],{"class":1283},[40,150520,150111],{"class":94},[40,150522,41347],{"class":50},[40,150524,150525],{"class":42,"line":170},[40,150526,1811],{"class":50},[40,150528,150529,150531,150534],{"class":42,"line":183},[40,150530,149893],{"class":50},[40,150532,150533],{"class":94},"\"sales.html\"",[40,150535,1811],{"class":50},[19,150537,150538],{},"多条折线适合比较不同指标或不同地区。",[14,150540,150542],{"id":150541},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,150544,150545,150546,27933],{},"假设 ",[26,150547,150548],{},"sales.json",[31,150550,150552],{"className":149614,"code":150551,"language":148361,"meta":36,"style":36},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[26,150553,150554,150559,150591,150619,150647],{"__ignoreMap":36},[40,150555,150556],{"class":42,"line":43},[40,150557,150558],{"class":50},"[\n",[40,150560,150561,150564,150567,150569,150571,150573,150576,150578,150580,150582,150585,150587,150589],{"class":42,"line":54},[40,150562,150563],{"class":50},"  {",[40,150565,150566],{"class":63},"\"date\"",[40,150568,60],{"class":50},[40,150570,149834],{"class":94},[40,150572,15757],{"class":50},[40,150574,150575],{"class":63},"\"online\"",[40,150577,60],{"class":50},[40,150579,3791],{"class":63},[40,150581,15757],{"class":50},[40,150583,150584],{"class":63},"\"offline\"",[40,150586,60],{"class":50},[40,150588,4091],{"class":63},[40,150590,8253],{"class":50},[40,150592,150593,150595,150597,150599,150601,150603,150605,150607,150609,150611,150613,150615,150617],{"class":42,"line":70},[40,150594,150563],{"class":50},[40,150596,150566],{"class":63},[40,150598,60],{"class":50},[40,150600,149839],{"class":94},[40,150602,15757],{"class":50},[40,150604,150575],{"class":63},[40,150606,60],{"class":50},[40,150608,150426],{"class":63},[40,150610,15757],{"class":50},[40,150612,150584],{"class":63},[40,150614,60],{"class":50},[40,150616,4339],{"class":63},[40,150618,8253],{"class":50},[40,150620,150621,150623,150625,150627,150629,150631,150633,150635,150637,150639,150641,150643,150645],{"class":42,"line":78},[40,150622,150563],{"class":50},[40,150624,150566],{"class":63},[40,150626,60],{"class":50},[40,150628,149844],{"class":94},[40,150630,15757],{"class":50},[40,150632,150575],{"class":63},[40,150634,60],{"class":50},[40,150636,4294],{"class":63},[40,150638,15757],{"class":50},[40,150640,150584],{"class":63},[40,150642,60],{"class":50},[40,150644,3791],{"class":63},[40,150646,4907],{"class":50},[40,150648,150649],{"class":42,"line":86},[40,150650,36546],{"class":50},[19,150652,150653],{},"读取并绘图：",[31,150655,150657],{"className":33679,"code":150656,"language":2323,"meta":36,"style":36},"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",[26,150658,150659,150665,150679,150689,150693,150725,150738,150742,150750,150759,150768,150772,150784,150793,150802,150811,150815,150823,150827,150844,150861,150865,150882,150898,150902],{"__ignoreMap":36},[40,150660,150661,150663],{"class":42,"line":43},[40,150662,33692],{"class":1283},[40,150664,149660],{"class":50},[40,150666,150667,150669,150671,150673,150675,150677],{"class":42,"line":54},[40,150668,34037],{"class":1283},[40,150670,149948],{"class":50},[40,150672,33692],{"class":1283},[40,150674,149953],{"class":50},[40,150676,34683],{"class":1283},[40,150678,149958],{"class":50},[40,150680,150681,150683,150685,150687],{"class":42,"line":70},[40,150682,34037],{"class":1283},[40,150684,149807],{"class":50},[40,150686,33692],{"class":1283},[40,150688,149812],{"class":50},[40,150690,150691],{"class":42,"line":78},[40,150692,1413],{"emptyLinePlaceholder":1412},[40,150694,150695,150697,150699,150701,150704,150706,150708,150710,150712,150714,150716,150718,150720,150723],{"class":42,"line":86},[40,150696,111124],{"class":1283},[40,150698,149360],{"class":63},[40,150700,3488],{"class":50},[40,150702,150703],{"class":94},"\"sales.json\"",[40,150705,15757],{"class":50},[40,150707,149370],{"class":94},[40,150709,15757],{"class":50},[40,150711,149375],{"class":8539},[40,150713,1284],{"class":1283},[40,150715,149380],{"class":94},[40,150717,17036],{"class":50},[40,150719,34683],{"class":1283},[40,150721,150722],{"class":8539}," file",[40,150724,332],{"class":50},[40,150726,150727,150729,150731,150734,150736],{"class":42,"line":100},[40,150728,104712],{"class":50},[40,150730,1284],{"class":1283},[40,150732,150733],{"class":50}," json.load(",[40,150735,48654],{"class":8539},[40,150737,1811],{"class":50},[40,150739,150740],{"class":42,"line":108},[40,150741,1413],{"emptyLinePlaceholder":1412},[40,150743,150744,150746,150748],{"class":42,"line":121},[40,150745,150369],{"class":50},[40,150747,1284],{"class":1283},[40,150749,55136],{"class":50},[40,150751,150752,150755,150757],{"class":42,"line":134},[40,150753,150754],{"class":50},"online_sales ",[40,150756,1284],{"class":1283},[40,150758,55136],{"class":50},[40,150760,150761,150764,150766],{"class":42,"line":146},[40,150762,150763],{"class":50},"offline_sales ",[40,150765,1284],{"class":1283},[40,150767,55136],{"class":50},[40,150769,150770],{"class":42,"line":154},[40,150771,1413],{"emptyLinePlaceholder":1412},[40,150773,150774,150776,150779,150781],{"class":42,"line":162},[40,150775,6349],{"class":1283},[40,150777,150778],{"class":50}," item ",[40,150780,29355],{"class":1283},[40,150782,150783],{"class":50}," data:\n",[40,150785,150786,150789,150791],{"class":42,"line":170},[40,150787,150788],{"class":50},"    dates.append(item[",[40,150790,150566],{"class":94},[40,150792,7980],{"class":50},[40,150794,150795,150798,150800],{"class":42,"line":183},[40,150796,150797],{"class":50},"    online_sales.append(item[",[40,150799,150575],{"class":94},[40,150801,7980],{"class":50},[40,150803,150804,150807,150809],{"class":42,"line":196},[40,150805,150806],{"class":50},"    offline_sales.append(item[",[40,150808,150584],{"class":94},[40,150810,7980],{"class":50},[40,150812,150813],{"class":42,"line":204},[40,150814,1413],{"emptyLinePlaceholder":1412},[40,150816,150817,150819,150821],{"class":42,"line":217},[40,150818,149821],{"class":50},[40,150820,1284],{"class":1283},[40,150822,149826],{"class":50},[40,150824,150825],{"class":42,"line":230},[40,150826,150410],{"class":50},[40,150828,150829,150831,150833,150836,150838,150840,150842],{"class":42,"line":238},[40,150830,149861],{"class":50},[40,150832,150417],{"class":94},[40,150834,150835],{"class":50},", online_sales, ",[40,150837,150314],{"class":8539},[40,150839,1284],{"class":1283},[40,150841,34776],{"class":63},[40,150843,1811],{"class":50},[40,150845,150846,150848,150850,150853,150855,150857,150859],{"class":42,"line":251},[40,150847,149861],{"class":50},[40,150849,150455],{"class":94},[40,150851,150852],{"class":50},", offline_sales, ",[40,150854,150314],{"class":8539},[40,150856,1284],{"class":1283},[40,150858,34776],{"class":63},[40,150860,1811],{"class":50},[40,150862,150863],{"class":42,"line":264},[40,150864,150037],{"class":50},[40,150866,150867,150869,150871,150873,150875,150877,150880],{"class":42,"line":277},[40,150868,150042],{"class":8539},[40,150870,1284],{"class":1283},[40,150872,150047],{"class":50},[40,150874,54706],{"class":8539},[40,150876,1284],{"class":1283},[40,150878,150879],{"class":94},"\"销售趋势\"",[40,150881,41347],{"class":50},[40,150883,150884,150886,150888,150890,150892,150894,150896],{"class":42,"line":290},[40,150885,150098],{"class":8539},[40,150887,1284],{"class":1283},[40,150889,150103],{"class":50},[40,150891,150106],{"class":8539},[40,150893,1284],{"class":1283},[40,150895,150111],{"class":94},[40,150897,41347],{"class":50},[40,150899,150900],{"class":42,"line":298},[40,150901,1811],{"class":50},[40,150903,150904,150906,150908],{"class":42,"line":310},[40,150905,149893],{"class":50},[40,150907,150533],{"class":94},[40,150909,1811],{"class":50},[14,150911,150913],{"id":150912},"_109-数据清洗","10.9 数据清洗",[19,150915,150916],{},"真实数据经常不整齐，需要清洗。",[19,150918,150919],{},"常见问题：",[492,150921,150922,150925,150928,150931],{},[495,150923,150924],{},"数字是字符串。",[495,150926,150927],{},"字段缺失。",[495,150929,150930],{},"空值。",[495,150932,150933],{},"日期格式不统一。",[19,150935,18457],{},[31,150937,150939],{"className":33679,"code":150938,"language":2323,"meta":36,"style":36},"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",[26,150940,150941,150950,150973,150993,151014,151018,151022,151030,151039,151043,151054,151068,151077,151082,151086,151094,151104,151108,151115],{"__ignoreMap":36},[40,150942,150943,150946,150948],{"class":42,"line":43},[40,150944,150945],{"class":50},"raw_data ",[40,150947,1284],{"class":1283},[40,150949,58745],{"class":50},[40,150951,150952,150955,150957,150959,150961,150963,150966,150968,150971],{"class":42,"line":54},[40,150953,150954],{"class":50},"    {",[40,150956,150566],{"class":94},[40,150958,60],{"class":50},[40,150960,149834],{"class":94},[40,150962,15757],{"class":50},[40,150964,150965],{"class":94},"\"sales\"",[40,150967,60],{"class":50},[40,150969,150970],{"class":94},"\"100\"",[40,150972,8253],{"class":50},[40,150974,150975,150977,150979,150981,150983,150985,150987,150989,150991],{"class":42,"line":70},[40,150976,150954],{"class":50},[40,150978,150566],{"class":94},[40,150980,60],{"class":50},[40,150982,149839],{"class":94},[40,150984,15757],{"class":50},[40,150986,150965],{"class":94},[40,150988,60],{"class":50},[40,150990,285],{"class":94},[40,150992,8253],{"class":50},[40,150994,150995,150997,150999,151001,151003,151005,151007,151009,151012],{"class":42,"line":78},[40,150996,150954],{"class":50},[40,150998,150566],{"class":94},[40,151000,60],{"class":50},[40,151002,149844],{"class":94},[40,151004,15757],{"class":50},[40,151006,150965],{"class":94},[40,151008,60],{"class":50},[40,151010,151011],{"class":94},"\"120\"",[40,151013,8253],{"class":50},[40,151015,151016],{"class":42,"line":86},[40,151017,36546],{"class":50},[40,151019,151020],{"class":42,"line":100},[40,151021,1413],{"emptyLinePlaceholder":1412},[40,151023,151024,151026,151028],{"class":42,"line":108},[40,151025,150369],{"class":50},[40,151027,1284],{"class":1283},[40,151029,55136],{"class":50},[40,151031,151032,151035,151037],{"class":42,"line":121},[40,151033,151034],{"class":50},"sales ",[40,151036,1284],{"class":1283},[40,151038,55136],{"class":50},[40,151040,151041],{"class":42,"line":134},[40,151042,1413],{"emptyLinePlaceholder":1412},[40,151044,151045,151047,151049,151051],{"class":42,"line":146},[40,151046,6349],{"class":1283},[40,151048,150778],{"class":50},[40,151050,29355],{"class":1283},[40,151052,151053],{"class":50}," raw_data:\n",[40,151055,151056,151059,151061,151064,151066],{"class":42,"line":154},[40,151057,151058],{"class":50},"    value ",[40,151060,1284],{"class":1283},[40,151062,151063],{"class":50}," item.get(",[40,151065,150965],{"class":94},[40,151067,1811],{"class":50},[40,151069,151070,151072,151074],{"class":42,"line":162},[40,151071,6425],{"class":1283},[40,151073,42230],{"class":1283},[40,151075,151076],{"class":50}," value:\n",[40,151078,151079],{"class":42,"line":170},[40,151080,151081],{"class":1283},"        continue\n",[40,151083,151084],{"class":42,"line":183},[40,151085,1413],{"emptyLinePlaceholder":1412},[40,151087,151088,151090,151092],{"class":42,"line":196},[40,151089,150788],{"class":50},[40,151091,150566],{"class":94},[40,151093,7980],{"class":50},[40,151095,151096,151099,151101],{"class":42,"line":204},[40,151097,151098],{"class":50},"    sales.append(",[40,151100,3491],{"class":63},[40,151102,151103],{"class":50},"(value))\n",[40,151105,151106],{"class":42,"line":217},[40,151107,1413],{"emptyLinePlaceholder":1412},[40,151109,151110,151112],{"class":42,"line":230},[40,151111,33715],{"class":63},[40,151113,151114],{"class":50},"(dates)\n",[40,151116,151117,151119],{"class":42,"line":238},[40,151118,33715],{"class":63},[40,151120,151121],{"class":50},"(sales)\n",[14,151123,151125],{"id":151124},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[31,151127,151129],{"className":33679,"code":151128,"language":2323,"meta":36,"style":36},"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",[26,151130,151131,151145,151155,151159,151167,151188,151210,151232,151254,151276,151280,151284,151306,151327,151331,151339,151343,151347,151357,151366,151376,151392,151396,151400,151417,151433,151449,151465,151475,151479],{"__ignoreMap":36},[40,151132,151133,151135,151137,151139,151141,151143],{"class":42,"line":43},[40,151134,34037],{"class":1283},[40,151136,149948],{"class":50},[40,151138,33692],{"class":1283},[40,151140,149953],{"class":50},[40,151142,34683],{"class":1283},[40,151144,149958],{"class":50},[40,151146,151147,151149,151151,151153],{"class":42,"line":54},[40,151148,34037],{"class":1283},[40,151150,149807],{"class":50},[40,151152,33692],{"class":1283},[40,151154,149812],{"class":50},[40,151156,151157],{"class":42,"line":70},[40,151158,1413],{"emptyLinePlaceholder":1412},[40,151160,151161,151163,151165],{"class":42,"line":78},[40,151162,151034],{"class":50},[40,151164,1284],{"class":1283},[40,151166,58745],{"class":50},[40,151168,151169,151171,151173,151175,151178,151180,151182,151184,151186],{"class":42,"line":86},[40,151170,150954],{"class":50},[40,151172,150566],{"class":94},[40,151174,60],{"class":50},[40,151176,151177],{"class":94},"\"2024-10-01\"",[40,151179,15757],{"class":50},[40,151181,87379],{"class":94},[40,151183,60],{"class":50},[40,151185,95318],{"class":63},[40,151187,8253],{"class":50},[40,151189,151190,151192,151194,151196,151199,151201,151203,151205,151208],{"class":42,"line":100},[40,151191,150954],{"class":50},[40,151193,150566],{"class":94},[40,151195,60],{"class":50},[40,151197,151198],{"class":94},"\"2024-10-02\"",[40,151200,15757],{"class":50},[40,151202,87379],{"class":94},[40,151204,60],{"class":50},[40,151206,151207],{"class":63},"1800",[40,151209,8253],{"class":50},[40,151211,151212,151214,151216,151218,151221,151223,151225,151227,151230],{"class":42,"line":108},[40,151213,150954],{"class":50},[40,151215,150566],{"class":94},[40,151217,60],{"class":50},[40,151219,151220],{"class":94},"\"2024-10-03\"",[40,151222,15757],{"class":50},[40,151224,87379],{"class":94},[40,151226,60],{"class":50},[40,151228,151229],{"class":63},"1500",[40,151231,8253],{"class":50},[40,151233,151234,151236,151238,151240,151243,151245,151247,151249,151252],{"class":42,"line":121},[40,151235,150954],{"class":50},[40,151237,150566],{"class":94},[40,151239,60],{"class":50},[40,151241,151242],{"class":94},"\"2024-10-04\"",[40,151244,15757],{"class":50},[40,151246,87379],{"class":94},[40,151248,60],{"class":50},[40,151250,151251],{"class":63},"2100",[40,151253,8253],{"class":50},[40,151255,151256,151258,151260,151262,151265,151267,151269,151271,151274],{"class":42,"line":134},[40,151257,150954],{"class":50},[40,151259,150566],{"class":94},[40,151261,60],{"class":50},[40,151263,151264],{"class":94},"\"2024-10-05\"",[40,151266,15757],{"class":50},[40,151268,87379],{"class":94},[40,151270,60],{"class":50},[40,151272,151273],{"class":63},"2600",[40,151275,8253],{"class":50},[40,151277,151278],{"class":42,"line":146},[40,151279,36546],{"class":50},[40,151281,151282],{"class":42,"line":154},[40,151283,1413],{"emptyLinePlaceholder":1412},[40,151285,151286,151288,151290,151293,151295,151297,151299,151301,151303],{"class":42,"line":162},[40,151287,150369],{"class":50},[40,151289,1284],{"class":1283},[40,151291,151292],{"class":50}," [item[",[40,151294,150566],{"class":94},[40,151296,7766],{"class":50},[40,151298,6349],{"class":1283},[40,151300,150778],{"class":50},[40,151302,29355],{"class":1283},[40,151304,151305],{"class":50}," sales]\n",[40,151307,151308,151311,151313,151315,151317,151319,151321,151323,151325],{"class":42,"line":170},[40,151309,151310],{"class":50},"amounts ",[40,151312,1284],{"class":1283},[40,151314,151292],{"class":50},[40,151316,87379],{"class":94},[40,151318,7766],{"class":50},[40,151320,6349],{"class":1283},[40,151322,150778],{"class":50},[40,151324,29355],{"class":1283},[40,151326,151305],{"class":50},[40,151328,151329],{"class":42,"line":183},[40,151330,1413],{"emptyLinePlaceholder":1412},[40,151332,151333,151335,151337],{"class":42,"line":196},[40,151334,149821],{"class":50},[40,151336,1284],{"class":1283},[40,151338,149826],{"class":50},[40,151340,151341],{"class":42,"line":204},[40,151342,150410],{"class":50},[40,151344,151345],{"class":42,"line":217},[40,151346,150218],{"class":50},[40,151348,151349,151351,151353,151355],{"class":42,"line":230},[40,151350,150223],{"class":8539},[40,151352,1284],{"class":1283},[40,151354,149864],{"class":94},[40,151356,34766],{"class":50},[40,151358,151359,151361,151363],{"class":42,"line":238},[40,151360,150234],{"class":8539},[40,151362,1284],{"class":1283},[40,151364,151365],{"class":50},"amounts,\n",[40,151367,151368,151370,151372,151374],{"class":42,"line":251},[40,151369,150263],{"class":8539},[40,151371,1284],{"class":1283},[40,151373,34776],{"class":63},[40,151375,34766],{"class":50},[40,151377,151378,151380,151382,151384,151386,151388,151390],{"class":42,"line":264},[40,151379,150274],{"class":8539},[40,151381,1284],{"class":1283},[40,151383,150279],{"class":50},[40,151385,150282],{"class":8539},[40,151387,1284],{"class":1283},[40,151389,34776],{"class":63},[40,151391,41347],{"class":50},[40,151393,151394],{"class":42,"line":277},[40,151395,1811],{"class":50},[40,151397,151398],{"class":42,"line":290},[40,151399,150037],{"class":50},[40,151401,151402,151404,151406,151408,151410,151412,151415],{"class":42,"line":298},[40,151403,150042],{"class":8539},[40,151405,1284],{"class":1283},[40,151407,150047],{"class":50},[40,151409,54706],{"class":8539},[40,151411,1284],{"class":1283},[40,151413,151414],{"class":94},"\"每日销售额\"",[40,151416,41347],{"class":50},[40,151418,151419,151421,151423,151425,151427,151429,151431],{"class":42,"line":310},[40,151420,150061],{"class":8539},[40,151422,1284],{"class":1283},[40,151424,150066],{"class":50},[40,151426,83105],{"class":8539},[40,151428,1284],{"class":1283},[40,151430,150073],{"class":94},[40,151432,41347],{"class":50},[40,151434,151435,151437,151439,151441,151443,151445,151447],{"class":42,"line":5086},[40,151436,150080],{"class":8539},[40,151438,1284],{"class":1283},[40,151440,150066],{"class":50},[40,151442,83105],{"class":8539},[40,151444,1284],{"class":1283},[40,151446,150091],{"class":94},[40,151448,41347],{"class":50},[40,151450,151451,151453,151455,151457,151459,151461,151463],{"class":42,"line":5091},[40,151452,150098],{"class":8539},[40,151454,1284],{"class":1283},[40,151456,150103],{"class":50},[40,151458,150106],{"class":8539},[40,151460,1284],{"class":1283},[40,151462,150111],{"class":94},[40,151464,41347],{"class":50},[40,151466,151467,151470,151472],{"class":42,"line":5105},[40,151468,151469],{"class":8539},"    datazoom_opts",[40,151471,1284],{"class":1283},[40,151473,151474],{"class":50},"[opts.DataZoomOpts()],\n",[40,151476,151477],{"class":42,"line":5110},[40,151478,1811],{"class":50},[40,151480,151481,151483,151486],{"class":42,"line":5902},[40,151482,149893],{"class":50},[40,151484,151485],{"class":94},"\"daily_sales.html\"",[40,151487,1811],{"class":50},[19,151489,151490,151493],{},[26,151491,151492],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,151495,151497],{"id":151496},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,151499,151500],{},"如果数据结构如下：",[31,151502,151504],{"className":33679,"code":151503,"language":2323,"meta":36,"style":36},"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",[26,151505,151506,151514,151522,151544,151565,151570,151577,151597,151617,151621],{"__ignoreMap":36},[40,151507,151508,151510,151512],{"class":42,"line":43},[40,151509,104949],{"class":50},[40,151511,1284],{"class":1283},[40,151513,18894],{"class":50},[40,151515,151516,151519],{"class":42,"line":54},[40,151517,151518],{"class":94},"    \"北京\"",[40,151520,151521],{"class":50},": [\n",[40,151523,151524,151526,151528,151530,151533,151535,151538,151540,151542],{"class":42,"line":70},[40,151525,8240],{"class":50},[40,151527,150566],{"class":94},[40,151529,60],{"class":50},[40,151531,151532],{"class":94},"\"2024-01-01\"",[40,151534,15757],{"class":50},[40,151536,151537],{"class":94},"\"confirm\"",[40,151539,60],{"class":50},[40,151541,3925],{"class":63},[40,151543,8253],{"class":50},[40,151545,151546,151548,151550,151552,151555,151557,151559,151561,151563],{"class":42,"line":78},[40,151547,8240],{"class":50},[40,151549,150566],{"class":94},[40,151551,60],{"class":50},[40,151553,151554],{"class":94},"\"2024-01-02\"",[40,151556,15757],{"class":50},[40,151558,151537],{"class":94},[40,151560,60],{"class":50},[40,151562,3977],{"class":63},[40,151564,8253],{"class":50},[40,151566,151567],{"class":42,"line":86},[40,151568,151569],{"class":50},"    ],\n",[40,151571,151572,151575],{"class":42,"line":100},[40,151573,151574],{"class":94},"    \"上海\"",[40,151576,151521],{"class":50},[40,151578,151579,151581,151583,151585,151587,151589,151591,151593,151595],{"class":42,"line":108},[40,151580,8240],{"class":50},[40,151582,150566],{"class":94},[40,151584,60],{"class":50},[40,151586,151532],{"class":94},[40,151588,15757],{"class":50},[40,151590,151537],{"class":94},[40,151592,60],{"class":50},[40,151594,3874],{"class":63},[40,151596,8253],{"class":50},[40,151598,151599,151601,151603,151605,151607,151609,151611,151613,151615],{"class":42,"line":121},[40,151600,8240],{"class":50},[40,151602,150566],{"class":94},[40,151604,60],{"class":50},[40,151606,151554],{"class":94},[40,151608,15757],{"class":50},[40,151610,151537],{"class":94},[40,151612,60],{"class":50},[40,151614,4002],{"class":63},[40,151616,8253],{"class":50},[40,151618,151619],{"class":42,"line":134},[40,151620,151569],{"class":50},[40,151622,151623],{"class":42,"line":146},[40,151624,4907],{"class":50},[19,151626,151627],{},"绘制多地区趋势：",[31,151629,151631],{"className":33679,"code":151630,"language":2323,"meta":36,"style":36},"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",[26,151632,151633,151647,151657,151661,151686,151690,151698,151702,151706,151718,151740,151753,151757,151761,151778,151794,151798],{"__ignoreMap":36},[40,151634,151635,151637,151639,151641,151643,151645],{"class":42,"line":43},[40,151636,34037],{"class":1283},[40,151638,149948],{"class":50},[40,151640,33692],{"class":1283},[40,151642,149953],{"class":50},[40,151644,34683],{"class":1283},[40,151646,149958],{"class":50},[40,151648,151649,151651,151653,151655],{"class":42,"line":54},[40,151650,34037],{"class":1283},[40,151652,149807],{"class":50},[40,151654,33692],{"class":1283},[40,151656,149812],{"class":50},[40,151658,151659],{"class":42,"line":70},[40,151660,1413],{"emptyLinePlaceholder":1412},[40,151662,151663,151665,151667,151669,151671,151673,151675,151677,151679,151682,151684],{"class":42,"line":78},[40,151664,150369],{"class":50},[40,151666,1284],{"class":1283},[40,151668,151292],{"class":50},[40,151670,150566],{"class":94},[40,151672,7766],{"class":50},[40,151674,6349],{"class":1283},[40,151676,150778],{"class":50},[40,151678,29355],{"class":1283},[40,151680,151681],{"class":50}," data[",[40,151683,72567],{"class":94},[40,151685,80822],{"class":50},[40,151687,151688],{"class":42,"line":86},[40,151689,1413],{"emptyLinePlaceholder":1412},[40,151691,151692,151694,151696],{"class":42,"line":100},[40,151693,149821],{"class":50},[40,151695,1284],{"class":1283},[40,151697,149826],{"class":50},[40,151699,151700],{"class":42,"line":108},[40,151701,150410],{"class":50},[40,151703,151704],{"class":42,"line":121},[40,151705,1413],{"emptyLinePlaceholder":1412},[40,151707,151708,151710,151713,151715],{"class":42,"line":134},[40,151709,6349],{"class":1283},[40,151711,151712],{"class":50}," city, records ",[40,151714,29355],{"class":1283},[40,151716,151717],{"class":50}," data.items():\n",[40,151719,151720,151723,151725,151727,151729,151731,151733,151735,151737],{"class":42,"line":146},[40,151721,151722],{"class":50},"    values ",[40,151724,1284],{"class":1283},[40,151726,151292],{"class":50},[40,151728,151537],{"class":94},[40,151730,7766],{"class":50},[40,151732,6349],{"class":1283},[40,151734,150778],{"class":50},[40,151736,29355],{"class":1283},[40,151738,151739],{"class":50}," records]\n",[40,151741,151742,151745,151747,151749,151751],{"class":42,"line":154},[40,151743,151744],{"class":50},"    line.add_yaxis(city, values, ",[40,151746,150314],{"class":8539},[40,151748,1284],{"class":1283},[40,151750,34776],{"class":63},[40,151752,1811],{"class":50},[40,151754,151755],{"class":42,"line":162},[40,151756,1413],{"emptyLinePlaceholder":1412},[40,151758,151759],{"class":42,"line":170},[40,151760,150037],{"class":50},[40,151762,151763,151765,151767,151769,151771,151773,151776],{"class":42,"line":183},[40,151764,150042],{"class":8539},[40,151766,1284],{"class":1283},[40,151768,150047],{"class":50},[40,151770,54706],{"class":8539},[40,151772,1284],{"class":1283},[40,151774,151775],{"class":94},"\"多地区趋势图\"",[40,151777,41347],{"class":50},[40,151779,151780,151782,151784,151786,151788,151790,151792],{"class":42,"line":196},[40,151781,150098],{"class":8539},[40,151783,1284],{"class":1283},[40,151785,150103],{"class":50},[40,151787,150106],{"class":8539},[40,151789,1284],{"class":1283},[40,151791,150111],{"class":94},[40,151793,41347],{"class":50},[40,151795,151796],{"class":42,"line":204},[40,151797,1811],{"class":50},[40,151799,151800,151802,151805],{"class":42,"line":217},[40,151801,149893],{"class":50},[40,151803,151804],{"class":94},"\"trend.html\"",[40,151806,1811],{"class":50},[19,151808,151809],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,151811,151813],{"id":151812},"_1012-易错点","10.12 易错点",[492,151815,151816,151822,151828,151838,151844],{},[495,151817,151818,151821],{},[26,151819,151820],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[495,151823,151824,151827],{},[26,151825,151826],{},"render()"," 生成的是 HTML，不是图片。",[495,151829,151830,151831,151834,151835,776],{},"JSON 字符串用 ",[26,151832,151833],{},"json.loads()","，JSON 文件用 ",[26,151836,151837],{},"json.load()",[495,151839,151840,151841,776],{},"中文 JSON 保存时加 ",[26,151842,151843],{},"ensure_ascii=False",[495,151845,151846],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,151848,151850],{"id":151849},"_1013-本章练习","10.13 本章练习",[492,151852,151853,151856,151859,151862,151865],{},[495,151854,151855],{},"安装 pyecharts 并生成第一个折线图。",[495,151857,151858],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[495,151860,151861],{},"绘制两条折线，对比线上和线下销售额。",[495,151863,151864],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[495,151866,151867],{},"对含有空值的销售数据进行清洗后再绘图。",[3384,151869,151870],{},"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":36,"searchDepth":54,"depth":54,"links":151872},[151873,151874,151875,151876,151877,151878,151879,151880,151881,151882,151883,151884,151885],{"id":149489,"depth":54,"text":149490},{"id":149564,"depth":54,"text":149565},{"id":149743,"depth":54,"text":149744},{"id":149794,"depth":54,"text":149795},{"id":149928,"depth":54,"text":149929},{"id":150204,"depth":54,"text":150205},{"id":150330,"depth":54,"text":150331},{"id":150541,"depth":54,"text":150542},{"id":150912,"depth":54,"text":150913},{"id":151124,"depth":54,"text":151125},{"id":151496,"depth":54,"text":151497},{"id":151812,"depth":54,"text":151813},{"id":151849,"depth":54,"text":151850},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":149481,"description":3413},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":151892,"title":151893,"body":151894,"description":3413,"extension":3414,"meta":154254,"navigation":1412,"path":154255,"seo":154256,"stem":154257,"__hash__":154258},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":151895,"toc":154231},[151896,151899,151903,151906,151909,151985,151988,152079,152082,152086,152089,152133,152146,152150,152153,152220,152223,152227,152230,152314,152322,152326,152331,152472,152475,152486,152492,152498,152612,152616,152619,152622,152875,152878,152882,152885,152989,152992,152996,153147,153151,153158,153271,153275,153278,153384,153387,153391,153394,153425,153428,153533,153536,153540,153544,153554,153622,153626,153633,153697,153700,153704,153710,153806,153815,153819,154143,154152,154156,154184,154188,154228],[10,151897,151893],{"id":151898},"_11-面向对象基础",[14,151900,151902],{"id":151901},"_111-什么是面向对象","11.1 什么是面向对象",[19,151904,151905],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,151907,151908],{},"面向过程：",[31,151910,151912],{"className":33679,"code":151911,"language":2323,"meta":36,"style":36},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[26,151913,151914,151923,151931,151935,151945,151976,151980],{"__ignoreMap":36},[40,151915,151916,151918,151920],{"class":42,"line":43},[40,151917,149105],{"class":50},[40,151919,1284],{"class":1283},[40,151921,151922],{"class":94}," \"小明\"\n",[40,151924,151925,151927,151929],{"class":42,"line":54},[40,151926,149115],{"class":50},[40,151928,1284],{"class":1283},[40,151930,149120],{"class":63},[40,151932,151933],{"class":42,"line":70},[40,151934,1413],{"emptyLinePlaceholder":1412},[40,151936,151937,151939,151942],{"class":42,"line":78},[40,151938,35247],{"class":1283},[40,151940,151941],{"class":596}," introduce",[40,151943,151944],{"class":50},"(name, age):\n",[40,151946,151947,151949,151951,151953,151956,151958,151960,151962,151965,151967,151969,151971,151974],{"class":42,"line":86},[40,151948,34599],{"class":63},[40,151950,3488],{"class":50},[40,151952,3537],{"class":1283},[40,151954,151955],{"class":94},"\"我叫",[40,151957,4373],{"class":63},[40,151959,83105],{"class":50},[40,151961,4423],{"class":63},[40,151963,151964],{"class":94},"，今年",[40,151966,4373],{"class":63},[40,151968,73517],{"class":50},[40,151970,4423],{"class":63},[40,151972,151973],{"class":94},"岁\"",[40,151975,1811],{"class":50},[40,151977,151978],{"class":42,"line":100},[40,151979,1413],{"emptyLinePlaceholder":1412},[40,151981,151982],{"class":42,"line":108},[40,151983,151984],{"class":50},"introduce(name, age)\n",[19,151986,151987],{},"面向对象：",[31,151989,151991],{"className":33679,"code":151990,"language":2323,"meta":36,"style":36},"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",[26,151992,151993,152001,152009,152038,152042,152046,152056,152065,152074],{"__ignoreMap":36},[40,151994,151995,151997,151999],{"class":42,"line":43},[40,151996,18016],{"class":1283},[40,151998,11220],{"class":596},[40,152000,332],{"class":50},[40,152002,152003,152005,152007],{"class":42,"line":54},[40,152004,34101],{"class":1283},[40,152006,151941],{"class":596},[40,152008,34107],{"class":50},[40,152010,152011,152013,152015,152017,152019,152022,152024,152026,152028,152030,152032,152034,152036],{"class":42,"line":70},[40,152012,35751],{"class":63},[40,152014,3488],{"class":50},[40,152016,3537],{"class":1283},[40,152018,151955],{"class":94},[40,152020,152021],{"class":63},"{self",[40,152023,83596],{"class":50},[40,152025,4423],{"class":63},[40,152027,151964],{"class":94},[40,152029,152021],{"class":63},[40,152031,83608],{"class":50},[40,152033,4423],{"class":63},[40,152035,151973],{"class":94},[40,152037,1811],{"class":50},[40,152039,152040],{"class":42,"line":78},[40,152041,1413],{"emptyLinePlaceholder":1412},[40,152043,152044],{"class":42,"line":86},[40,152045,1413],{"emptyLinePlaceholder":1412},[40,152047,152048,152051,152053],{"class":42,"line":100},[40,152049,152050],{"class":50},"student ",[40,152052,1284],{"class":1283},[40,152054,152055],{"class":50}," Student()\n",[40,152057,152058,152061,152063],{"class":42,"line":108},[40,152059,152060],{"class":50},"student.name ",[40,152062,1284],{"class":1283},[40,152064,151922],{"class":94},[40,152066,152067,152070,152072],{"class":42,"line":121},[40,152068,152069],{"class":50},"student.age ",[40,152071,1284],{"class":1283},[40,152073,149120],{"class":63},[40,152075,152076],{"class":42,"line":134},[40,152077,152078],{"class":50},"student.introduce()\n",[19,152080,152081],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,152083,152085],{"id":152084},"_112-类和对象","11.2 类和对象",[19,152087,152088],{},"类是模板，对象是根据模板创建出来的具体实例。",[31,152090,152092],{"className":33679,"code":152091,"language":2323,"meta":36,"style":36},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[26,152093,152094,152102,152107,152111,152115,152124],{"__ignoreMap":36},[40,152095,152096,152098,152100],{"class":42,"line":43},[40,152097,18016],{"class":1283},[40,152099,11220],{"class":596},[40,152101,332],{"class":50},[40,152103,152104],{"class":42,"line":54},[40,152105,152106],{"class":1283},"    pass\n",[40,152108,152109],{"class":42,"line":70},[40,152110,1413],{"emptyLinePlaceholder":1412},[40,152112,152113],{"class":42,"line":78},[40,152114,1413],{"emptyLinePlaceholder":1412},[40,152116,152117,152120,152122],{"class":42,"line":86},[40,152118,152119],{"class":50},"student1 ",[40,152121,1284],{"class":1283},[40,152123,152055],{"class":50},[40,152125,152126,152129,152131],{"class":42,"line":100},[40,152127,152128],{"class":50},"student2 ",[40,152130,1284],{"class":1283},[40,152132,152055],{"class":50},[19,152134,152135,152138,152139,104312,152142,152145],{},[26,152136,152137],{},"Student"," 是类，",[26,152140,152141],{},"student1",[26,152143,152144],{},"student2"," 是对象。",[14,152147,152149],{"id":152148},"_113-属性","11.3 属性",[19,152151,152152],{},"属性是对象保存的数据。",[31,152154,152156],{"className":33679,"code":152155,"language":2323,"meta":36,"style":36},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[26,152157,152158,152166,152170,152174,152178,152186,152194,152202,152206,152213],{"__ignoreMap":36},[40,152159,152160,152162,152164],{"class":42,"line":43},[40,152161,18016],{"class":1283},[40,152163,11220],{"class":596},[40,152165,332],{"class":50},[40,152167,152168],{"class":42,"line":54},[40,152169,152106],{"class":1283},[40,152171,152172],{"class":42,"line":70},[40,152173,1413],{"emptyLinePlaceholder":1412},[40,152175,152176],{"class":42,"line":78},[40,152177,1413],{"emptyLinePlaceholder":1412},[40,152179,152180,152182,152184],{"class":42,"line":86},[40,152181,152050],{"class":50},[40,152183,1284],{"class":1283},[40,152185,152055],{"class":50},[40,152187,152188,152190,152192],{"class":42,"line":100},[40,152189,152060],{"class":50},[40,152191,1284],{"class":1283},[40,152193,151922],{"class":94},[40,152195,152196,152198,152200],{"class":42,"line":108},[40,152197,152069],{"class":50},[40,152199,1284],{"class":1283},[40,152201,149120],{"class":63},[40,152203,152204],{"class":42,"line":121},[40,152205,1413],{"emptyLinePlaceholder":1412},[40,152207,152208,152210],{"class":42,"line":134},[40,152209,33715],{"class":63},[40,152211,152212],{"class":50},"(student.name)\n",[40,152214,152215,152217],{"class":42,"line":146},[40,152216,33715],{"class":63},[40,152218,152219],{"class":50},"(student.age)\n",[19,152221,152222],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,152224,152226],{"id":152225},"_114-方法","11.4 方法",[19,152228,152229],{},"类中的函数叫方法。",[31,152231,152232],{"className":33679,"code":151990,"language":2323,"meta":36,"style":36},[26,152233,152234,152242,152250,152278,152282,152286,152294,152302,152310],{"__ignoreMap":36},[40,152235,152236,152238,152240],{"class":42,"line":43},[40,152237,18016],{"class":1283},[40,152239,11220],{"class":596},[40,152241,332],{"class":50},[40,152243,152244,152246,152248],{"class":42,"line":54},[40,152245,34101],{"class":1283},[40,152247,151941],{"class":596},[40,152249,34107],{"class":50},[40,152251,152252,152254,152256,152258,152260,152262,152264,152266,152268,152270,152272,152274,152276],{"class":42,"line":70},[40,152253,35751],{"class":63},[40,152255,3488],{"class":50},[40,152257,3537],{"class":1283},[40,152259,151955],{"class":94},[40,152261,152021],{"class":63},[40,152263,83596],{"class":50},[40,152265,4423],{"class":63},[40,152267,151964],{"class":94},[40,152269,152021],{"class":63},[40,152271,83608],{"class":50},[40,152273,4423],{"class":63},[40,152275,151973],{"class":94},[40,152277,1811],{"class":50},[40,152279,152280],{"class":42,"line":78},[40,152281,1413],{"emptyLinePlaceholder":1412},[40,152283,152284],{"class":42,"line":86},[40,152285,1413],{"emptyLinePlaceholder":1412},[40,152287,152288,152290,152292],{"class":42,"line":100},[40,152289,152050],{"class":50},[40,152291,1284],{"class":1283},[40,152293,152055],{"class":50},[40,152295,152296,152298,152300],{"class":42,"line":108},[40,152297,152060],{"class":50},[40,152299,1284],{"class":1283},[40,152301,151922],{"class":94},[40,152303,152304,152306,152308],{"class":42,"line":121},[40,152305,152069],{"class":50},[40,152307,1284],{"class":1283},[40,152309,149120],{"class":63},[40,152311,152312],{"class":42,"line":134},[40,152313,152078],{"class":50},[19,152315,152316,152318,152319,152321],{},[26,152317,34123],{}," 表示当前对象。调用方法时不需要手动传入 ",[26,152320,34123],{},"，Python 会自动传。",[14,152323,152325],{"id":152324},"_115-构造方法__init__","11.5 构造方法__init__",[19,152327,152328,152330],{},[26,152329,34129],{}," 在对象创建时自动执行，用于初始化属性。",[31,152332,152334],{"className":33679,"code":152333,"language":2323,"meta":36,"style":36},"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",[26,152335,152336,152344,152353,152365,152377,152388,152392,152400,152438,152442,152446,152468],{"__ignoreMap":36},[40,152337,152338,152340,152342],{"class":42,"line":43},[40,152339,18016],{"class":1283},[40,152341,11220],{"class":596},[40,152343,332],{"class":50},[40,152345,152346,152348,152350],{"class":42,"line":54},[40,152347,34101],{"class":1283},[40,152349,34104],{"class":63},[40,152351,152352],{"class":50},"(self, name, age, score):\n",[40,152354,152355,152357,152360,152362],{"class":42,"line":70},[40,152356,34145],{"class":63},[40,152358,152359],{"class":50},".name ",[40,152361,1284],{"class":1283},[40,152363,152364],{"class":50}," name\n",[40,152366,152367,152369,152372,152374],{"class":42,"line":78},[40,152368,34145],{"class":63},[40,152370,152371],{"class":50},".age ",[40,152373,1284],{"class":1283},[40,152375,152376],{"class":50}," age\n",[40,152378,152379,152381,152384,152386],{"class":42,"line":86},[40,152380,34145],{"class":63},[40,152382,152383],{"class":50},".score ",[40,152385,1284],{"class":1283},[40,152387,4921],{"class":50},[40,152389,152390],{"class":42,"line":100},[40,152391,1413],{"emptyLinePlaceholder":1412},[40,152393,152394,152396,152398],{"class":42,"line":108},[40,152395,34101],{"class":1283},[40,152397,151941],{"class":596},[40,152399,34107],{"class":50},[40,152401,152402,152404,152406,152408,152410,152412,152414,152416,152418,152420,152422,152424,152427,152429,152432,152434,152436],{"class":42,"line":121},[40,152403,35751],{"class":63},[40,152405,3488],{"class":50},[40,152407,3537],{"class":1283},[40,152409,151955],{"class":94},[40,152411,152021],{"class":63},[40,152413,83596],{"class":50},[40,152415,4423],{"class":63},[40,152417,151964],{"class":94},[40,152419,152021],{"class":63},[40,152421,83608],{"class":50},[40,152423,4423],{"class":63},[40,152425,152426],{"class":94},"岁，成绩",[40,152428,152021],{"class":63},[40,152430,152431],{"class":50},".score",[40,152433,4423],{"class":63},[40,152435,3731],{"class":94},[40,152437,1811],{"class":50},[40,152439,152440],{"class":42,"line":134},[40,152441,1413],{"emptyLinePlaceholder":1412},[40,152443,152444],{"class":42,"line":146},[40,152445,1413],{"emptyLinePlaceholder":1412},[40,152447,152448,152450,152452,152455,152458,152460,152462,152464,152466],{"class":42,"line":154},[40,152449,152050],{"class":50},[40,152451,1284],{"class":1283},[40,152453,152454],{"class":50}," Student(",[40,152456,152457],{"class":94},"\"小明\"",[40,152459,15757],{"class":50},[40,152461,4128],{"class":63},[40,152463,15757],{"class":50},[40,152465,4466],{"class":63},[40,152467,1811],{"class":50},[40,152469,152470],{"class":42,"line":162},[40,152471,152078],{"class":50},[19,152473,152474],{},"构造方法的好处：",[492,152476,152477,152480,152483],{},[495,152478,152479],{},"创建对象时必须提供必要数据。",[495,152481,152482],{},"属性初始化集中，不容易漏。",[495,152484,152485],{},"对象状态更完整。",[14,152487,152489,152490],{"id":152488},"_116-str","11.6 ",[409,152491,4646],{},[19,152493,152494,152495,776],{},"直接打印对象时，默认输出不直观。可以定义 ",[26,152496,152497],{},"__str__",[31,152499,152501],{"className":33679,"code":152500,"language":2323,"meta":36,"style":36},"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",[26,152502,152503,152511,152520,152530,152540,152544,152553,152581,152585,152589,152605],{"__ignoreMap":36},[40,152504,152505,152507,152509],{"class":42,"line":43},[40,152506,18016],{"class":1283},[40,152508,11220],{"class":596},[40,152510,332],{"class":50},[40,152512,152513,152515,152517],{"class":42,"line":54},[40,152514,34101],{"class":1283},[40,152516,34104],{"class":63},[40,152518,152519],{"class":50},"(self, name, age):\n",[40,152521,152522,152524,152526,152528],{"class":42,"line":70},[40,152523,34145],{"class":63},[40,152525,152359],{"class":50},[40,152527,1284],{"class":1283},[40,152529,152364],{"class":50},[40,152531,152532,152534,152536,152538],{"class":42,"line":78},[40,152533,34145],{"class":63},[40,152535,152371],{"class":50},[40,152537,1284],{"class":1283},[40,152539,152376],{"class":50},[40,152541,152542],{"class":42,"line":86},[40,152543,1413],{"emptyLinePlaceholder":1412},[40,152545,152546,152548,152551],{"class":42,"line":100},[40,152547,34101],{"class":1283},[40,152549,152550],{"class":63}," __str__",[40,152552,34107],{"class":50},[40,152554,152555,152557,152560,152563,152565,152567,152569,152572,152574,152576,152578],{"class":42,"line":108},[40,152556,18074],{"class":1283},[40,152558,152559],{"class":1283}," f",[40,152561,152562],{"class":94},"\"Student(name=",[40,152564,152021],{"class":63},[40,152566,83596],{"class":50},[40,152568,4423],{"class":63},[40,152570,152571],{"class":94},", age=",[40,152573,152021],{"class":63},[40,152575,83608],{"class":50},[40,152577,4423],{"class":63},[40,152579,152580],{"class":94},")\"\n",[40,152582,152583],{"class":42,"line":121},[40,152584,1413],{"emptyLinePlaceholder":1412},[40,152586,152587],{"class":42,"line":134},[40,152588,1413],{"emptyLinePlaceholder":1412},[40,152590,152591,152593,152595,152597,152599,152601,152603],{"class":42,"line":146},[40,152592,152050],{"class":50},[40,152594,1284],{"class":1283},[40,152596,152454],{"class":50},[40,152598,152457],{"class":94},[40,152600,15757],{"class":50},[40,152602,4128],{"class":63},[40,152604,1811],{"class":50},[40,152606,152607,152609],{"class":42,"line":154},[40,152608,33715],{"class":63},[40,152610,152611],{"class":50},"(student)\n",[14,152613,152615],{"id":152614},"_117-封装","11.7 封装",[19,152617,152618],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,152620,152621],{},"Python 中以双下划线开头的属性通常视为私有属性。",[31,152623,152625],{"className":33679,"code":152624,"language":2323,"meta":36,"style":36},"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",[26,152626,152627,152636,152645,152657,152669,152673,152682,152691,152695,152705,152718,152729,152734,152745,152749,152758,152770,152781,152785,152798,152809,152813,152824,152828,152832,152850,152859,152868],{"__ignoreMap":36},[40,152628,152629,152631,152634],{"class":42,"line":43},[40,152630,18016],{"class":1283},[40,152632,152633],{"class":596}," Account",[40,152635,332],{"class":50},[40,152637,152638,152640,152642],{"class":42,"line":54},[40,152639,34101],{"class":1283},[40,152641,34104],{"class":63},[40,152643,152644],{"class":50},"(self, owner, balance):\n",[40,152646,152647,152649,152652,152654],{"class":42,"line":70},[40,152648,34145],{"class":63},[40,152650,152651],{"class":50},".owner ",[40,152653,1284],{"class":1283},[40,152655,152656],{"class":50}," owner\n",[40,152658,152659,152661,152664,152666],{"class":42,"line":78},[40,152660,34145],{"class":63},[40,152662,152663],{"class":50},".__balance ",[40,152665,1284],{"class":1283},[40,152667,152668],{"class":50}," balance\n",[40,152670,152671],{"class":42,"line":86},[40,152672,1413],{"emptyLinePlaceholder":1412},[40,152674,152675,152677,152680],{"class":42,"line":100},[40,152676,34101],{"class":1283},[40,152678,152679],{"class":596}," get_balance",[40,152681,34107],{"class":50},[40,152683,152684,152686,152688],{"class":42,"line":108},[40,152685,18074],{"class":1283},[40,152687,42173],{"class":63},[40,152689,152690],{"class":50},".__balance\n",[40,152692,152693],{"class":42,"line":121},[40,152694,1413],{"emptyLinePlaceholder":1412},[40,152696,152697,152699,152702],{"class":42,"line":134},[40,152698,34101],{"class":1283},[40,152700,152701],{"class":596}," deposit",[40,152703,152704],{"class":50},"(self, money):\n",[40,152706,152707,152709,152712,152714,152716],{"class":42,"line":146},[40,152708,5822],{"class":1283},[40,152710,152711],{"class":50}," money ",[40,152713,4930],{"class":1283},[40,152715,7416],{"class":63},[40,152717,332],{"class":50},[40,152719,152720,152722,152724,152727],{"class":42,"line":154},[40,152721,37950],{"class":63},[40,152723,3488],{"class":50},[40,152725,152726],{"class":94},"\"存款金额必须大于0\"",[40,152728,1811],{"class":50},[40,152730,152731],{"class":42,"line":162},[40,152732,152733],{"class":1283},"            return\n",[40,152735,152736,152738,152740,152742],{"class":42,"line":170},[40,152737,34145],{"class":63},[40,152739,152663],{"class":50},[40,152741,12799],{"class":1283},[40,152743,152744],{"class":50}," money\n",[40,152746,152747],{"class":42,"line":183},[40,152748,1413],{"emptyLinePlaceholder":1412},[40,152750,152751,152753,152756],{"class":42,"line":196},[40,152752,34101],{"class":1283},[40,152754,152755],{"class":596}," withdraw",[40,152757,152704],{"class":50},[40,152759,152760,152762,152764,152766,152768],{"class":42,"line":204},[40,152761,5822],{"class":1283},[40,152763,152711],{"class":50},[40,152765,4930],{"class":1283},[40,152767,7416],{"class":63},[40,152769,332],{"class":50},[40,152771,152772,152774,152776,152779],{"class":42,"line":217},[40,152773,37950],{"class":63},[40,152775,3488],{"class":50},[40,152777,152778],{"class":94},"\"取款金额必须大于0\"",[40,152780,1811],{"class":50},[40,152782,152783],{"class":42,"line":230},[40,152784,152733],{"class":1283},[40,152786,152787,152789,152791,152793,152795],{"class":42,"line":238},[40,152788,5822],{"class":1283},[40,152790,152711],{"class":50},[40,152792,4437],{"class":1283},[40,152794,42173],{"class":63},[40,152796,152797],{"class":50},".__balance:\n",[40,152799,152800,152802,152804,152807],{"class":42,"line":251},[40,152801,37950],{"class":63},[40,152803,3488],{"class":50},[40,152805,152806],{"class":94},"\"余额不足\"",[40,152808,1811],{"class":50},[40,152810,152811],{"class":42,"line":264},[40,152812,152733],{"class":1283},[40,152814,152815,152817,152819,152822],{"class":42,"line":277},[40,152816,34145],{"class":63},[40,152818,152663],{"class":50},[40,152820,152821],{"class":1283},"-=",[40,152823,152744],{"class":50},[40,152825,152826],{"class":42,"line":290},[40,152827,1413],{"emptyLinePlaceholder":1412},[40,152829,152830],{"class":42,"line":298},[40,152831,1413],{"emptyLinePlaceholder":1412},[40,152833,152834,152837,152839,152842,152844,152846,152848],{"class":42,"line":310},[40,152835,152836],{"class":50},"account ",[40,152838,1284],{"class":1283},[40,152840,152841],{"class":50}," Account(",[40,152843,152457],{"class":94},[40,152845,15757],{"class":50},[40,152847,9733],{"class":63},[40,152849,1811],{"class":50},[40,152851,152852,152855,152857],{"class":42,"line":5086},[40,152853,152854],{"class":50},"account.deposit(",[40,152856,5053],{"class":63},[40,152858,1811],{"class":50},[40,152860,152861,152864,152866],{"class":42,"line":5091},[40,152862,152863],{"class":50},"account.withdraw(",[40,152865,3791],{"class":63},[40,152867,1811],{"class":50},[40,152869,152870,152872],{"class":42,"line":5105},[40,152871,33715],{"class":63},[40,152873,152874],{"class":50},"(account.get_balance())\n",[19,152876,152877],{},"封装的意义是避免外部随意修改内部状态。",[14,152879,152881],{"id":152880},"_118-继承","11.8 继承",[19,152883,152884],{},"继承可以让子类复用父类的属性和方法。",[31,152886,152888],{"className":33679,"code":152887,"language":2323,"meta":36,"style":36},"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",[26,152889,152890,152899,152908,152919,152923,152927,152941,152950,152961,152965,152969,152979,152984],{"__ignoreMap":36},[40,152891,152892,152894,152897],{"class":42,"line":43},[40,152893,18016],{"class":1283},[40,152895,152896],{"class":596}," Animal",[40,152898,332],{"class":50},[40,152900,152901,152903,152906],{"class":42,"line":54},[40,152902,34101],{"class":1283},[40,152904,152905],{"class":596}," eat",[40,152907,34107],{"class":50},[40,152909,152910,152912,152914,152917],{"class":42,"line":70},[40,152911,35751],{"class":63},[40,152913,3488],{"class":50},[40,152915,152916],{"class":94},"\"吃东西\"",[40,152918,1811],{"class":50},[40,152920,152921],{"class":42,"line":78},[40,152922,1413],{"emptyLinePlaceholder":1412},[40,152924,152925],{"class":42,"line":86},[40,152926,1413],{"emptyLinePlaceholder":1412},[40,152928,152929,152931,152934,152936,152939],{"class":42,"line":100},[40,152930,18016],{"class":1283},[40,152932,152933],{"class":596}," Dog",[40,152935,3488],{"class":50},[40,152937,152938],{"class":596},"Animal",[40,152940,34086],{"class":50},[40,152942,152943,152945,152948],{"class":42,"line":108},[40,152944,34101],{"class":1283},[40,152946,152947],{"class":596}," bark",[40,152949,34107],{"class":50},[40,152951,152952,152954,152956,152959],{"class":42,"line":121},[40,152953,35751],{"class":63},[40,152955,3488],{"class":50},[40,152957,152958],{"class":94},"\"汪汪\"",[40,152960,1811],{"class":50},[40,152962,152963],{"class":42,"line":134},[40,152964,1413],{"emptyLinePlaceholder":1412},[40,152966,152967],{"class":42,"line":146},[40,152968,1413],{"emptyLinePlaceholder":1412},[40,152970,152971,152974,152976],{"class":42,"line":154},[40,152972,152973],{"class":50},"dog ",[40,152975,1284],{"class":1283},[40,152977,152978],{"class":50}," Dog()\n",[40,152980,152981],{"class":42,"line":162},[40,152982,152983],{"class":50},"dog.eat()\n",[40,152985,152986],{"class":42,"line":170},[40,152987,152988],{"class":50},"dog.bark()\n",[19,152990,152991],{},"子类可以扩展新方法，也可以重写父类方法。",[14,152993,152995],{"id":152994},"_119-方法重写","11.9 方法重写",[31,152997,152999],{"className":33679,"code":152998,"language":2323,"meta":36,"style":36},"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",[26,153000,153001,153009,153018,153029,153033,153037,153049,153057,153067,153071,153075,153088,153096,153107,153111,153115,153123,153133,153137,153142],{"__ignoreMap":36},[40,153002,153003,153005,153007],{"class":42,"line":43},[40,153004,18016],{"class":1283},[40,153006,152896],{"class":596},[40,153008,332],{"class":50},[40,153010,153011,153013,153016],{"class":42,"line":54},[40,153012,34101],{"class":1283},[40,153014,153015],{"class":596}," speak",[40,153017,34107],{"class":50},[40,153019,153020,153022,153024,153027],{"class":42,"line":70},[40,153021,35751],{"class":63},[40,153023,3488],{"class":50},[40,153025,153026],{"class":94},"\"动物叫\"",[40,153028,1811],{"class":50},[40,153030,153031],{"class":42,"line":78},[40,153032,1413],{"emptyLinePlaceholder":1412},[40,153034,153035],{"class":42,"line":86},[40,153036,1413],{"emptyLinePlaceholder":1412},[40,153038,153039,153041,153043,153045,153047],{"class":42,"line":100},[40,153040,18016],{"class":1283},[40,153042,152933],{"class":596},[40,153044,3488],{"class":50},[40,153046,152938],{"class":596},[40,153048,34086],{"class":50},[40,153050,153051,153053,153055],{"class":42,"line":108},[40,153052,34101],{"class":1283},[40,153054,153015],{"class":596},[40,153056,34107],{"class":50},[40,153058,153059,153061,153063,153065],{"class":42,"line":121},[40,153060,35751],{"class":63},[40,153062,3488],{"class":50},[40,153064,152958],{"class":94},[40,153066,1811],{"class":50},[40,153068,153069],{"class":42,"line":134},[40,153070,1413],{"emptyLinePlaceholder":1412},[40,153072,153073],{"class":42,"line":146},[40,153074,1413],{"emptyLinePlaceholder":1412},[40,153076,153077,153079,153082,153084,153086],{"class":42,"line":154},[40,153078,18016],{"class":1283},[40,153080,153081],{"class":596}," Cat",[40,153083,3488],{"class":50},[40,153085,152938],{"class":596},[40,153087,34086],{"class":50},[40,153089,153090,153092,153094],{"class":42,"line":162},[40,153091,34101],{"class":1283},[40,153093,153015],{"class":596},[40,153095,34107],{"class":50},[40,153097,153098,153100,153102,153105],{"class":42,"line":170},[40,153099,35751],{"class":63},[40,153101,3488],{"class":50},[40,153103,153104],{"class":94},"\"喵喵\"",[40,153106,1811],{"class":50},[40,153108,153109],{"class":42,"line":183},[40,153110,1413],{"emptyLinePlaceholder":1412},[40,153112,153113],{"class":42,"line":196},[40,153114,1413],{"emptyLinePlaceholder":1412},[40,153116,153117,153119,153121],{"class":42,"line":204},[40,153118,152973],{"class":50},[40,153120,1284],{"class":1283},[40,153122,152978],{"class":50},[40,153124,153125,153128,153130],{"class":42,"line":217},[40,153126,153127],{"class":50},"cat ",[40,153129,1284],{"class":1283},[40,153131,153132],{"class":50}," Cat()\n",[40,153134,153135],{"class":42,"line":230},[40,153136,1413],{"emptyLinePlaceholder":1412},[40,153138,153139],{"class":42,"line":238},[40,153140,153141],{"class":50},"dog.speak()\n",[40,153143,153144],{"class":42,"line":251},[40,153145,153146],{"class":50},"cat.speak()\n",[14,153148,153150],{"id":153149},"_1110-super","11.10 super",[19,153152,153153,153154,153157],{},"子类可以通过 ",[26,153155,153156],{},"super()"," 调用父类方法。",[31,153159,153161],{"className":33679,"code":153160,"language":2323,"meta":36,"style":36},"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",[26,153162,153163,153171,153180,153190,153194,153198,153210,153219,153230,153240,153244,153248,153264],{"__ignoreMap":36},[40,153164,153165,153167,153169],{"class":42,"line":43},[40,153166,18016],{"class":1283},[40,153168,18891],{"class":596},[40,153170,332],{"class":50},[40,153172,153173,153175,153177],{"class":42,"line":54},[40,153174,34101],{"class":1283},[40,153176,34104],{"class":63},[40,153178,153179],{"class":50},"(self, name):\n",[40,153181,153182,153184,153186,153188],{"class":42,"line":70},[40,153183,34145],{"class":63},[40,153185,152359],{"class":50},[40,153187,1284],{"class":1283},[40,153189,152364],{"class":50},[40,153191,153192],{"class":42,"line":78},[40,153193,1413],{"emptyLinePlaceholder":1412},[40,153195,153196],{"class":42,"line":86},[40,153197,1413],{"emptyLinePlaceholder":1412},[40,153199,153200,153202,153204,153206,153208],{"class":42,"line":100},[40,153201,18016],{"class":1283},[40,153203,11220],{"class":596},[40,153205,3488],{"class":50},[40,153207,22367],{"class":596},[40,153209,34086],{"class":50},[40,153211,153212,153214,153216],{"class":42,"line":108},[40,153213,34101],{"class":1283},[40,153215,34104],{"class":63},[40,153217,153218],{"class":50},"(self, name, score):\n",[40,153220,153221,153223,153225,153227],{"class":42,"line":121},[40,153222,34117],{"class":63},[40,153224,20583],{"class":50},[40,153226,34129],{"class":63},[40,153228,153229],{"class":50},"(name)\n",[40,153231,153232,153234,153236,153238],{"class":42,"line":134},[40,153233,34145],{"class":63},[40,153235,152383],{"class":50},[40,153237,1284],{"class":1283},[40,153239,4921],{"class":50},[40,153241,153242],{"class":42,"line":146},[40,153243,1413],{"emptyLinePlaceholder":1412},[40,153245,153246],{"class":42,"line":154},[40,153247,1413],{"emptyLinePlaceholder":1412},[40,153249,153250,153252,153254,153256,153258,153260,153262],{"class":42,"line":162},[40,153251,152050],{"class":50},[40,153253,1284],{"class":1283},[40,153255,152454],{"class":50},[40,153257,152457],{"class":94},[40,153259,15757],{"class":50},[40,153261,4466],{"class":63},[40,153263,1811],{"class":50},[40,153265,153266,153268],{"class":42,"line":170},[40,153267,33715],{"class":63},[40,153269,153270],{"class":50},"(student.name, student.score)\n",[14,153272,153274],{"id":153273},"_1111-多态","11.11 多态",[19,153276,153277],{},"多态指不同对象响应同一个方法，表现出不同结果。",[31,153279,153281],{"className":33679,"code":153280,"language":2323,"meta":36,"style":36},"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",[26,153282,153283,153291,153299,153309,153313,153317,153325,153333,153343,153347,153351,153361,153366,153370,153374,153379],{"__ignoreMap":36},[40,153284,153285,153287,153289],{"class":42,"line":43},[40,153286,18016],{"class":1283},[40,153288,152933],{"class":596},[40,153290,332],{"class":50},[40,153292,153293,153295,153297],{"class":42,"line":54},[40,153294,34101],{"class":1283},[40,153296,153015],{"class":596},[40,153298,34107],{"class":50},[40,153300,153301,153303,153305,153307],{"class":42,"line":70},[40,153302,35751],{"class":63},[40,153304,3488],{"class":50},[40,153306,152958],{"class":94},[40,153308,1811],{"class":50},[40,153310,153311],{"class":42,"line":78},[40,153312,1413],{"emptyLinePlaceholder":1412},[40,153314,153315],{"class":42,"line":86},[40,153316,1413],{"emptyLinePlaceholder":1412},[40,153318,153319,153321,153323],{"class":42,"line":100},[40,153320,18016],{"class":1283},[40,153322,153081],{"class":596},[40,153324,332],{"class":50},[40,153326,153327,153329,153331],{"class":42,"line":108},[40,153328,34101],{"class":1283},[40,153330,153015],{"class":596},[40,153332,34107],{"class":50},[40,153334,153335,153337,153339,153341],{"class":42,"line":121},[40,153336,35751],{"class":63},[40,153338,3488],{"class":50},[40,153340,153104],{"class":94},[40,153342,1811],{"class":50},[40,153344,153345],{"class":42,"line":134},[40,153346,1413],{"emptyLinePlaceholder":1412},[40,153348,153349],{"class":42,"line":146},[40,153350,1413],{"emptyLinePlaceholder":1412},[40,153352,153353,153355,153358],{"class":42,"line":154},[40,153354,35247],{"class":1283},[40,153356,153357],{"class":596}," make_sound",[40,153359,153360],{"class":50},"(animal):\n",[40,153362,153363],{"class":42,"line":162},[40,153364,153365],{"class":50},"    animal.speak()\n",[40,153367,153368],{"class":42,"line":170},[40,153369,1413],{"emptyLinePlaceholder":1412},[40,153371,153372],{"class":42,"line":183},[40,153373,1413],{"emptyLinePlaceholder":1412},[40,153375,153376],{"class":42,"line":196},[40,153377,153378],{"class":50},"make_sound(Dog())\n",[40,153380,153381],{"class":42,"line":204},[40,153382,153383],{"class":50},"make_sound(Cat())\n",[19,153385,153386],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,153388,153390],{"id":153389},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,153392,153393],{},"实例属性属于对象：",[31,153395,153397],{"className":33679,"code":153396,"language":2323,"meta":36,"style":36},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[26,153398,153399,153407,153415],{"__ignoreMap":36},[40,153400,153401,153403,153405],{"class":42,"line":43},[40,153402,18016],{"class":1283},[40,153404,11220],{"class":596},[40,153406,332],{"class":50},[40,153408,153409,153411,153413],{"class":42,"line":54},[40,153410,34101],{"class":1283},[40,153412,34104],{"class":63},[40,153414,153179],{"class":50},[40,153416,153417,153419,153421,153423],{"class":42,"line":70},[40,153418,34145],{"class":63},[40,153420,152359],{"class":50},[40,153422,1284],{"class":1283},[40,153424,152364],{"class":50},[19,153426,153427],{},"类属性属于类，所有对象共享：",[31,153429,153431],{"className":33679,"code":153430,"language":2323,"meta":36,"style":36},"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",[26,153432,153433,153441,153451,153455,153463,153473,153477,153481,153494,153508,153512,153519,153526],{"__ignoreMap":36},[40,153434,153435,153437,153439],{"class":42,"line":43},[40,153436,18016],{"class":1283},[40,153438,11220],{"class":596},[40,153440,332],{"class":50},[40,153442,153443,153446,153448],{"class":42,"line":54},[40,153444,153445],{"class":50},"    school ",[40,153447,1284],{"class":1283},[40,153449,153450],{"class":94}," \"黑马学校\"\n",[40,153452,153453],{"class":42,"line":70},[40,153454,1413],{"emptyLinePlaceholder":1412},[40,153456,153457,153459,153461],{"class":42,"line":78},[40,153458,34101],{"class":1283},[40,153460,34104],{"class":63},[40,153462,153179],{"class":50},[40,153464,153465,153467,153469,153471],{"class":42,"line":86},[40,153466,34145],{"class":63},[40,153468,152359],{"class":50},[40,153470,1284],{"class":1283},[40,153472,152364],{"class":50},[40,153474,153475],{"class":42,"line":100},[40,153476,1413],{"emptyLinePlaceholder":1412},[40,153478,153479],{"class":42,"line":108},[40,153480,1413],{"emptyLinePlaceholder":1412},[40,153482,153483,153486,153488,153490,153492],{"class":42,"line":121},[40,153484,153485],{"class":50},"s1 ",[40,153487,1284],{"class":1283},[40,153489,152454],{"class":50},[40,153491,152457],{"class":94},[40,153493,1811],{"class":50},[40,153495,153496,153499,153501,153503,153506],{"class":42,"line":134},[40,153497,153498],{"class":50},"s2 ",[40,153500,1284],{"class":1283},[40,153502,152454],{"class":50},[40,153504,153505],{"class":94},"\"小红\"",[40,153507,1811],{"class":50},[40,153509,153510],{"class":42,"line":146},[40,153511,1413],{"emptyLinePlaceholder":1412},[40,153513,153514,153516],{"class":42,"line":154},[40,153515,33715],{"class":63},[40,153517,153518],{"class":50},"(s1.school)\n",[40,153520,153521,153523],{"class":42,"line":162},[40,153522,33715],{"class":63},[40,153524,153525],{"class":50},"(s2.school)\n",[40,153527,153528,153530],{"class":42,"line":170},[40,153529,33715],{"class":63},[40,153531,153532],{"class":50},"(Student.school)\n",[19,153534,153535],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,153537,153539],{"id":153538},"_1113-类方法和静态方法","11.13 类方法和静态方法",[402,153541,153543],{"id":153542},"_11131-类方法","11.13.1 类方法",[19,153545,153546,153547,153550,153551,776],{},"类方法使用 ",[26,153548,153549],{},"@classmethod","，第一个参数通常是 ",[26,153552,153553],{},"cls",[31,153555,153557],{"className":33679,"code":153556,"language":2323,"meta":36,"style":36},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[26,153558,153559,153567,153575,153579,153587,153597,153607,153611,153615],{"__ignoreMap":36},[40,153560,153561,153563,153565],{"class":42,"line":43},[40,153562,18016],{"class":1283},[40,153564,11220],{"class":596},[40,153566,332],{"class":50},[40,153568,153569,153571,153573],{"class":42,"line":54},[40,153570,153445],{"class":50},[40,153572,1284],{"class":1283},[40,153574,153450],{"class":94},[40,153576,153577],{"class":42,"line":70},[40,153578,1413],{"emptyLinePlaceholder":1412},[40,153580,153581,153584],{"class":42,"line":78},[40,153582,153583],{"class":596},"    @",[40,153585,153586],{"class":63},"classmethod\n",[40,153588,153589,153591,153594],{"class":42,"line":86},[40,153590,34101],{"class":1283},[40,153592,153593],{"class":596}," get_school",[40,153595,153596],{"class":50},"(cls):\n",[40,153598,153599,153601,153604],{"class":42,"line":100},[40,153600,18074],{"class":1283},[40,153602,153603],{"class":63}," cls",[40,153605,153606],{"class":50},".school\n",[40,153608,153609],{"class":42,"line":108},[40,153610,1413],{"emptyLinePlaceholder":1412},[40,153612,153613],{"class":42,"line":121},[40,153614,1413],{"emptyLinePlaceholder":1412},[40,153616,153617,153619],{"class":42,"line":134},[40,153618,33715],{"class":63},[40,153620,153621],{"class":50},"(Student.get_school())\n",[402,153623,153625],{"id":153624},"_11132-静态方法","11.13.2 静态方法",[19,153627,153628,153629,153632],{},"静态方法使用 ",[26,153630,153631],{},"@staticmethod","，不需要访问实例和类。",[31,153634,153636],{"className":33679,"code":153635,"language":2323,"meta":36,"style":36},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[26,153637,153638,153647,153654,153663,153674,153678,153682],{"__ignoreMap":36},[40,153639,153640,153642,153645],{"class":42,"line":43},[40,153641,18016],{"class":1283},[40,153643,153644],{"class":596}," MathUtils",[40,153646,332],{"class":50},[40,153648,153649,153651],{"class":42,"line":54},[40,153650,153583],{"class":596},[40,153652,153653],{"class":63},"staticmethod\n",[40,153655,153656,153658,153660],{"class":42,"line":70},[40,153657,34101],{"class":1283},[40,153659,8532],{"class":596},[40,153661,153662],{"class":50},"(a, b):\n",[40,153664,153665,153667,153669,153671],{"class":42,"line":78},[40,153666,18074],{"class":1283},[40,153668,14191],{"class":50},[40,153670,3960],{"class":1283},[40,153672,153673],{"class":50}," b\n",[40,153675,153676],{"class":42,"line":86},[40,153677,1413],{"emptyLinePlaceholder":1412},[40,153679,153680],{"class":42,"line":100},[40,153681,1413],{"emptyLinePlaceholder":1412},[40,153683,153684,153686,153689,153691,153693,153695],{"class":42,"line":108},[40,153685,33715],{"class":63},[40,153687,153688],{"class":50},"(MathUtils.add(",[40,153690,3698],{"class":63},[40,153692,15757],{"class":50},[40,153694,64],{"class":63},[40,153696,33797],{"class":50},[19,153698,153699],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,153701,153703],{"id":153702},"_1114-dataclass","11.14 dataclass",[19,153705,153706,153709],{},[26,153707,153708],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[31,153711,153713],{"className":33679,"code":153712,"language":2323,"meta":36,"style":36},"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",[26,153714,153715,153727,153731,153735,153740,153748,153756,153764,153772,153776,153780,153800],{"__ignoreMap":36},[40,153716,153717,153719,153722,153724],{"class":42,"line":43},[40,153718,34037],{"class":1283},[40,153720,153721],{"class":50}," dataclasses ",[40,153723,33692],{"class":1283},[40,153725,153726],{"class":50}," dataclass\n",[40,153728,153729],{"class":42,"line":54},[40,153730,1413],{"emptyLinePlaceholder":1412},[40,153732,153733],{"class":42,"line":70},[40,153734,1413],{"emptyLinePlaceholder":1412},[40,153736,153737],{"class":42,"line":78},[40,153738,153739],{"class":596},"@dataclass\n",[40,153741,153742,153744,153746],{"class":42,"line":86},[40,153743,18016],{"class":1283},[40,153745,11220],{"class":596},[40,153747,332],{"class":50},[40,153749,153750,153753],{"class":42,"line":100},[40,153751,153752],{"class":50},"    name: ",[40,153754,153755],{"class":63},"str\n",[40,153757,153758,153761],{"class":42,"line":108},[40,153759,153760],{"class":50},"    age: ",[40,153762,153763],{"class":63},"int\n",[40,153765,153766,153769],{"class":42,"line":121},[40,153767,153768],{"class":50},"    score: ",[40,153770,153771],{"class":63},"float\n",[40,153773,153774],{"class":42,"line":134},[40,153775,1413],{"emptyLinePlaceholder":1412},[40,153777,153778],{"class":42,"line":146},[40,153779,1413],{"emptyLinePlaceholder":1412},[40,153781,153782,153784,153786,153788,153790,153792,153794,153796,153798],{"class":42,"line":154},[40,153783,152050],{"class":50},[40,153785,1284],{"class":1283},[40,153787,152454],{"class":50},[40,153789,152457],{"class":94},[40,153791,15757],{"class":50},[40,153793,4128],{"class":63},[40,153795,15757],{"class":50},[40,153797,4466],{"class":63},[40,153799,1811],{"class":50},[40,153801,153802,153804],{"class":42,"line":162},[40,153803,33715],{"class":63},[40,153805,152611],{"class":50},[19,153807,153808,153809,3693,153811,153814],{},"它会自动生成 ",[26,153810,34129],{},[26,153812,153813],{},"__repr__"," 等方法。适合数据模型类。",[14,153816,153818],{"id":153817},"_1115-小案例学生类","11.15 小案例：学生类",[31,153820,153822],{"className":33679,"code":153821,"language":2323,"meta":36,"style":36},"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",[26,153823,153824,153832,153841,153853,153863,153873,153883,153887,153896,153909,153913,153922,153928,153940,153952,153964,153976,153980,153984,153990,154000,154009,154019,154027,154035,154044,154048,154052,154060,154096,154100,154104,154129,154136],{"__ignoreMap":36},[40,153825,153826,153828,153830],{"class":42,"line":43},[40,153827,18016],{"class":1283},[40,153829,11220],{"class":596},[40,153831,332],{"class":50},[40,153833,153834,153836,153838],{"class":42,"line":54},[40,153835,34101],{"class":1283},[40,153837,34104],{"class":63},[40,153839,153840],{"class":50},"(self, student_id, name, age, score):\n",[40,153842,153843,153845,153848,153850],{"class":42,"line":70},[40,153844,34145],{"class":63},[40,153846,153847],{"class":50},".student_id ",[40,153849,1284],{"class":1283},[40,153851,153852],{"class":50}," student_id\n",[40,153854,153855,153857,153859,153861],{"class":42,"line":78},[40,153856,34145],{"class":63},[40,153858,152359],{"class":50},[40,153860,1284],{"class":1283},[40,153862,152364],{"class":50},[40,153864,153865,153867,153869,153871],{"class":42,"line":86},[40,153866,34145],{"class":63},[40,153868,152371],{"class":50},[40,153870,1284],{"class":1283},[40,153872,152376],{"class":50},[40,153874,153875,153877,153879,153881],{"class":42,"line":100},[40,153876,34145],{"class":63},[40,153878,152383],{"class":50},[40,153880,1284],{"class":1283},[40,153882,4921],{"class":50},[40,153884,153885],{"class":42,"line":108},[40,153886,1413],{"emptyLinePlaceholder":1412},[40,153888,153889,153891,153894],{"class":42,"line":121},[40,153890,34101],{"class":1283},[40,153892,153893],{"class":596}," is_passed",[40,153895,34107],{"class":50},[40,153897,153898,153900,153902,153904,153906],{"class":42,"line":134},[40,153899,18074],{"class":1283},[40,153901,42173],{"class":63},[40,153903,152383],{"class":50},[40,153905,5041],{"class":1283},[40,153907,153908],{"class":63}," 60\n",[40,153910,153911],{"class":42,"line":146},[40,153912,1413],{"emptyLinePlaceholder":1412},[40,153914,153915,153917,153920],{"class":42,"line":154},[40,153916,34101],{"class":1283},[40,153918,153919],{"class":596}," to_dict",[40,153921,34107],{"class":50},[40,153923,153924,153926],{"class":42,"line":162},[40,153925,18074],{"class":1283},[40,153927,18894],{"class":50},[40,153929,153930,153933,153935,153937],{"class":42,"line":170},[40,153931,153932],{"class":94},"            \"student_id\"",[40,153934,60],{"class":50},[40,153936,34123],{"class":63},[40,153938,153939],{"class":50},".student_id,\n",[40,153941,153942,153945,153947,153949],{"class":42,"line":183},[40,153943,153944],{"class":94},"            \"name\"",[40,153946,60],{"class":50},[40,153948,34123],{"class":63},[40,153950,153951],{"class":50},".name,\n",[40,153953,153954,153957,153959,153961],{"class":42,"line":196},[40,153955,153956],{"class":94},"            \"age\"",[40,153958,60],{"class":50},[40,153960,34123],{"class":63},[40,153962,153963],{"class":50},".age,\n",[40,153965,153966,153969,153971,153973],{"class":42,"line":204},[40,153967,153968],{"class":94},"            \"score\"",[40,153970,60],{"class":50},[40,153972,34123],{"class":63},[40,153974,153975],{"class":50},".score,\n",[40,153977,153978],{"class":42,"line":217},[40,153979,5854],{"class":50},[40,153981,153982],{"class":42,"line":230},[40,153983,1413],{"emptyLinePlaceholder":1412},[40,153985,153986,153988],{"class":42,"line":238},[40,153987,153583],{"class":596},[40,153989,153586],{"class":63},[40,153991,153992,153994,153997],{"class":42,"line":251},[40,153993,34101],{"class":1283},[40,153995,153996],{"class":596}," from_dict",[40,153998,153999],{"class":50},"(cls, data):\n",[40,154001,154002,154004,154006],{"class":42,"line":264},[40,154003,18074],{"class":1283},[40,154005,153603],{"class":63},[40,154007,154008],{"class":50},"(\n",[40,154010,154011,154014,154017],{"class":42,"line":277},[40,154012,154013],{"class":50},"            data[",[40,154015,154016],{"class":94},"\"student_id\"",[40,154018,91131],{"class":50},[40,154020,154021,154023,154025],{"class":42,"line":290},[40,154022,154013],{"class":50},[40,154024,65977],{"class":94},[40,154026,91131],{"class":50},[40,154028,154029,154031,154033],{"class":42,"line":298},[40,154030,154013],{"class":50},[40,154032,72422],{"class":94},[40,154034,91131],{"class":50},[40,154036,154037,154039,154042],{"class":42,"line":310},[40,154038,154013],{"class":50},[40,154040,154041],{"class":94},"\"score\"",[40,154043,91131],{"class":50},[40,154045,154046],{"class":42,"line":5086},[40,154047,41426],{"class":50},[40,154049,154050],{"class":42,"line":5091},[40,154051,1413],{"emptyLinePlaceholder":1412},[40,154053,154054,154056,154058],{"class":42,"line":5105},[40,154055,34101],{"class":1283},[40,154057,152550],{"class":63},[40,154059,34107],{"class":50},[40,154061,154062,154064,154066,154068,154070,154073,154075,154078,154080,154082,154084,154086,154088,154090,154092,154094],{"class":42,"line":5110},[40,154063,18074],{"class":1283},[40,154065,152559],{"class":1283},[40,154067,3731],{"class":94},[40,154069,152021],{"class":63},[40,154071,154072],{"class":50},".student_id",[40,154074,4423],{"class":63},[40,154076,154077],{"class":63}," {self",[40,154079,83596],{"class":50},[40,154081,4423],{"class":63},[40,154083,154077],{"class":63},[40,154085,83608],{"class":50},[40,154087,4423],{"class":63},[40,154089,154077],{"class":63},[40,154091,152431],{"class":50},[40,154093,4423],{"class":63},[40,154095,28446],{"class":94},[40,154097,154098],{"class":42,"line":5902},[40,154099,1413],{"emptyLinePlaceholder":1412},[40,154101,154102],{"class":42,"line":5916},[40,154103,1413],{"emptyLinePlaceholder":1412},[40,154105,154106,154108,154110,154112,154115,154117,154119,154121,154123,154125,154127],{"class":42,"line":5924},[40,154107,152050],{"class":50},[40,154109,1284],{"class":1283},[40,154111,152454],{"class":50},[40,154113,154114],{"class":94},"\"001\"",[40,154116,15757],{"class":50},[40,154118,152457],{"class":94},[40,154120,15757],{"class":50},[40,154122,4128],{"class":63},[40,154124,15757],{"class":50},[40,154126,4466],{"class":63},[40,154128,1811],{"class":50},[40,154130,154131,154133],{"class":42,"line":5929},[40,154132,33715],{"class":63},[40,154134,154135],{"class":50},"(student.is_passed())\n",[40,154137,154138,154140],{"class":42,"line":5935},[40,154139,33715],{"class":63},[40,154141,154142],{"class":50},"(student.to_dict())\n",[19,154144,154145,104312,154148,154151],{},[26,154146,154147],{},"to_dict()",[26,154149,154150],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,154153,154155],{"id":154154},"_1116-易错点","11.16 易错点",[492,154157,154158,154164,154170,154175,154178,154181],{},[495,154159,154160,154161,776],{},"类名推荐使用大驼峰，如 ",[26,154162,154163],{},"StudentManager",[495,154165,154166,154167,154169],{},"方法第一个参数必须写 ",[26,154168,34123],{},"，调用时不用传。",[495,154171,154172,154174],{},[26,154173,34129],{}," 不是普通方法，它在创建对象时自动执行。",[495,154176,154177],{},"私有属性不是绝对安全，只是约定和名称改写。",[495,154179,154180],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[495,154182,154183],{},"类中方法太多时，说明职责可能过重。",[14,154185,154187],{"id":154186},"_1117-本章练习","11.17 本章练习",[492,154189,154190,154196,154202,154207,154220],{},[495,154191,154192,154193,154195],{},"定义 ",[26,154194,152137],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[495,154197,154192,154198,154201],{},[26,154199,154200],{},"Account"," 类，实现存款、取款、查询余额。",[495,154203,154192,154204,154206],{},[26,154205,20548],{}," 类，计算圆的周长和面积。",[495,154208,154192,154209,3693,154212,154215,154216,154219],{},[26,154210,154211],{},"Dog",[26,154213,154214],{},"Cat"," 类，并用同一个函数调用它们的 ",[26,154217,154218],{},"speak()"," 方法。",[495,154221,107657,154222,154224,154225,776],{},[26,154223,153708],{}," 定义一个商品类 ",[26,154226,154227],{},"Product",[3384,154229,154230],{},"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":36,"searchDepth":54,"depth":54,"links":154232},[154233,154234,154235,154236,154237,154238,154240,154241,154242,154243,154244,154245,154246,154250,154251,154252,154253],{"id":151901,"depth":54,"text":151902},{"id":152084,"depth":54,"text":152085},{"id":152148,"depth":54,"text":152149},{"id":152225,"depth":54,"text":152226},{"id":152324,"depth":54,"text":152325},{"id":152488,"depth":54,"text":154239},"11.6 str",{"id":152614,"depth":54,"text":152615},{"id":152880,"depth":54,"text":152881},{"id":152994,"depth":54,"text":152995},{"id":153149,"depth":54,"text":153150},{"id":153273,"depth":54,"text":153274},{"id":153389,"depth":54,"text":153390},{"id":153538,"depth":54,"text":153539,"children":154247},[154248,154249],{"id":153542,"depth":70,"text":153543},{"id":153624,"depth":70,"text":153625},{"id":153702,"depth":54,"text":153703},{"id":153817,"depth":54,"text":153818},{"id":154154,"depth":54,"text":154155},{"id":154186,"depth":54,"text":154187},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":151893,"description":3413},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":154260,"title":154261,"body":154262,"description":3413,"extension":3414,"meta":157575,"navigation":1412,"path":157576,"seo":157577,"stem":157578,"__hash__":157579},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":154263,"toc":157551},[154264,154267,154271,154274,154277,154306,154309,154317,154321,154325,154328,154351,154354,154360,154364,155810,155813,155834,155838,155841,155853,155856,156040,156043,156169,156172,156176,156180,156316,156320,156406,156410,156492,156496,156533,156537,156726,156730,156733,156963,156967,156970,157151,157154,157158,157161,157167,157170,157196,157200,157203,157217,157220,157245,157248,157262,157265,157282,157285,157302,157305,157322,157326,157352,157356,157379,157383,157386,157388,157394,157396,157417,157420,157426,157432,157436,157439,157515,157518,157522,157548],[10,154265,154261],{"id":154266},"_12-综合案例与复习路线",[14,154268,154270],{"id":154269},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,154272,154273],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,154275,154276],{},"一个合格的入门综合项目最好覆盖：",[492,154278,154279,154282,154285,154288,154291,154294,154297,154300,154303],{},[495,154280,154281],{},"输入输出。",[495,154283,154284],{},"判断和循环。",[495,154286,154287],{},"函数拆分。",[495,154289,154290],{},"列表、字典等容器。",[495,154292,154293],{},"文件持久化。",[495,154295,154296],{},"异常处理。",[495,154298,154299],{},"模块拆分。",[495,154301,154302],{},"可选：面向对象。",[495,154304,154305],{},"可选：数据可视化。",[19,154307,154308],{},"本章整理两个方向：",[492,154310,154311,154314],{},[495,154312,154313],{},"学生管理系统。",[495,154315,154316],{},"销售数据统计和可视化。",[14,154318,154320],{"id":154319},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[402,154322,154324],{"id":154323},"_1221-需求","12.2.1 需求",[19,154326,154327],{},"实现一个命令行学生管理系统：",[492,154329,154330,154333,154336,154339,154342,154345,154348],{},[495,154331,154332],{},"添加学生。",[495,154334,154335],{},"删除学生。",[495,154337,154338],{},"修改学生。",[495,154340,154341],{},"查询学生。",[495,154343,154344],{},"显示所有学生。",[495,154346,154347],{},"保存到 JSON 文件。",[495,154349,154350],{},"程序启动时自动读取 JSON 文件。",[19,154352,154353],{},"学生字段：",[31,154355,154358],{"className":154356,"code":154357,"language":8510,"meta":36},[8508],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[26,154359,154357],{"__ignoreMap":36},[14,154361,154363],{"id":154362},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[31,154365,154367],{"className":33679,"code":154366,"language":2323,"meta":36,"style":36},"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",[26,154368,154369,154375,154385,154389,154403,154407,154411,154420,154432,154438,154442,154448,154479,154489,154496,154507,154513,154517,154521,154531,154562,154588,154592,154596,154605,154616,154627,154638,154649,154660,154671,154682,154686,154690,154700,154712,154728,154735,154742,154746,154750,154760,154768,154775,154788,154798,154809,154813,154817,154826,154834,154840,154852,154860,154871,154875,154879,154888,154904,154908,154915,154926,154931,154935,154951,154966,154981,154985,154990,154998,155006,155014,155022,155026,155031,155042,155046,155050,155059,155074,155084,155088,155100,155111,155115,155119,155124,155128,155139,155143,155147,155156,155171,155179,155183,155195,155205,155209,155213,155228,155241,155254,155258,155271,155283,155295,155299,155303,155314,155318,155322,155331,155346,155354,155358,155370,155380,155384,155388,155393,155397,155401,155411,155417,155439,155458,155477,155496,155501,155505,155509,155518,155526,155537,155541,155545,155571,155581,155586,155590,155594,155602,155612,155616,155624,155629,155645,155649,155663,155668,155682,155687,155700,155705,155718,155723,155736,155741,155754,155765,155769,155775,155786,155790,155794,155806],{"__ignoreMap":36},[40,154370,154371,154373],{"class":42,"line":43},[40,154372,33692],{"class":1283},[40,154374,149660],{"class":50},[40,154376,154377,154379,154381,154383],{"class":42,"line":54},[40,154378,34037],{"class":1283},[40,154380,111602],{"class":50},[40,154382,33692],{"class":1283},[40,154384,111607],{"class":50},[40,154386,154387],{"class":42,"line":70},[40,154388,1413],{"emptyLinePlaceholder":1412},[40,154390,154391,154394,154396,154398,154401],{"class":42,"line":78},[40,154392,154393],{"class":63},"DATA_FILE",[40,154395,16886],{"class":1283},[40,154397,111836],{"class":50},[40,154399,154400],{"class":94},"\"students.json\"",[40,154402,1811],{"class":50},[40,154404,154405],{"class":42,"line":86},[40,154406,1413],{"emptyLinePlaceholder":1412},[40,154408,154409],{"class":42,"line":100},[40,154410,1413],{"emptyLinePlaceholder":1412},[40,154412,154413,154415,154418],{"class":42,"line":108},[40,154414,35247],{"class":1283},[40,154416,154417],{"class":596}," load_students",[40,154419,35253],{"class":50},[40,154421,154422,154424,154426,154429],{"class":42,"line":121},[40,154423,6425],{"class":1283},[40,154425,42230],{"class":1283},[40,154427,154428],{"class":63}," DATA_FILE",[40,154430,154431],{"class":50},".exists():\n",[40,154433,154434,154436],{"class":42,"line":134},[40,154435,18074],{"class":1283},[40,154437,55136],{"class":50},[40,154439,154440],{"class":42,"line":146},[40,154441,1413],{"emptyLinePlaceholder":1412},[40,154443,154444,154446],{"class":42,"line":154},[40,154445,128353],{"class":1283},[40,154447,332],{"class":50},[40,154449,154450,154453,154455,154457,154459,154461,154463,154465,154467,154469,154471,154473,154475,154477],{"class":42,"line":162},[40,154451,154452],{"class":1283},"        with",[40,154454,149360],{"class":63},[40,154456,3488],{"class":50},[40,154458,154393],{"class":63},[40,154460,15757],{"class":50},[40,154462,149370],{"class":94},[40,154464,15757],{"class":50},[40,154466,149375],{"class":8539},[40,154468,1284],{"class":1283},[40,154470,149380],{"class":94},[40,154472,17036],{"class":50},[40,154474,34683],{"class":1283},[40,154476,150722],{"class":8539},[40,154478,332],{"class":50},[40,154480,154481,154483,154485,154487],{"class":42,"line":170},[40,154482,19054],{"class":1283},[40,154484,150733],{"class":50},[40,154486,48654],{"class":8539},[40,154488,1811],{"class":50},[40,154490,154491,154493],{"class":42,"line":183},[40,154492,128381],{"class":1283},[40,154494,154495],{"class":50}," json.JSONDecodeError:\n",[40,154497,154498,154500,154502,154505],{"class":42,"line":196},[40,154499,35751],{"class":63},[40,154501,3488],{"class":50},[40,154503,154504],{"class":94},"\"数据文件格式错误，已使用空数据启动\"",[40,154506,1811],{"class":50},[40,154508,154509,154511],{"class":42,"line":204},[40,154510,18074],{"class":1283},[40,154512,55136],{"class":50},[40,154514,154515],{"class":42,"line":217},[40,154516,1413],{"emptyLinePlaceholder":1412},[40,154518,154519],{"class":42,"line":230},[40,154520,1413],{"emptyLinePlaceholder":1412},[40,154522,154523,154525,154528],{"class":42,"line":238},[40,154524,35247],{"class":1283},[40,154526,154527],{"class":596}," save_students",[40,154529,154530],{"class":50},"(students):\n",[40,154532,154533,154535,154537,154539,154541,154543,154546,154548,154550,154552,154554,154556,154558,154560],{"class":42,"line":251},[40,154534,37478],{"class":1283},[40,154536,149360],{"class":63},[40,154538,3488],{"class":50},[40,154540,154393],{"class":63},[40,154542,15757],{"class":50},[40,154544,154545],{"class":94},"\"w\"",[40,154547,15757],{"class":50},[40,154549,149375],{"class":8539},[40,154551,1284],{"class":1283},[40,154553,149380],{"class":94},[40,154555,17036],{"class":50},[40,154557,34683],{"class":1283},[40,154559,150722],{"class":8539},[40,154561,332],{"class":50},[40,154563,154564,154567,154569,154571,154573,154575,154577,154579,154582,154584,154586],{"class":42,"line":264},[40,154565,154566],{"class":50},"        json.dump(students, ",[40,154568,48654],{"class":8539},[40,154570,15757],{"class":50},[40,154572,149706],{"class":8539},[40,154574,1284],{"class":1283},[40,154576,37287],{"class":63},[40,154578,15757],{"class":50},[40,154580,154581],{"class":8539},"indent",[40,154583,1284],{"class":1283},[40,154585,64],{"class":63},[40,154587,1811],{"class":50},[40,154589,154590],{"class":42,"line":277},[40,154591,1413],{"emptyLinePlaceholder":1412},[40,154593,154594],{"class":42,"line":290},[40,154595,1413],{"emptyLinePlaceholder":1412},[40,154597,154598,154600,154603],{"class":42,"line":298},[40,154599,35247],{"class":1283},[40,154601,154602],{"class":596}," show_menu",[40,154604,35253],{"class":50},[40,154606,154607,154609,154611,154614],{"class":42,"line":310},[40,154608,34599],{"class":63},[40,154610,3488],{"class":50},[40,154612,154613],{"class":94},"\"====== 学生管理系统 ======\"",[40,154615,1811],{"class":50},[40,154617,154618,154620,154622,154625],{"class":42,"line":5086},[40,154619,34599],{"class":63},[40,154621,3488],{"class":50},[40,154623,154624],{"class":94},"\"1. 添加学生\"",[40,154626,1811],{"class":50},[40,154628,154629,154631,154633,154636],{"class":42,"line":5091},[40,154630,34599],{"class":63},[40,154632,3488],{"class":50},[40,154634,154635],{"class":94},"\"2. 删除学生\"",[40,154637,1811],{"class":50},[40,154639,154640,154642,154644,154647],{"class":42,"line":5105},[40,154641,34599],{"class":63},[40,154643,3488],{"class":50},[40,154645,154646],{"class":94},"\"3. 修改学生\"",[40,154648,1811],{"class":50},[40,154650,154651,154653,154655,154658],{"class":42,"line":5110},[40,154652,34599],{"class":63},[40,154654,3488],{"class":50},[40,154656,154657],{"class":94},"\"4. 查询学生\"",[40,154659,1811],{"class":50},[40,154661,154662,154664,154666,154669],{"class":42,"line":5902},[40,154663,34599],{"class":63},[40,154665,3488],{"class":50},[40,154667,154668],{"class":94},"\"5. 显示所有学生\"",[40,154670,1811],{"class":50},[40,154672,154673,154675,154677,154680],{"class":42,"line":5916},[40,154674,34599],{"class":63},[40,154676,3488],{"class":50},[40,154678,154679],{"class":94},"\"0. 退出系统\"",[40,154681,1811],{"class":50},[40,154683,154684],{"class":42,"line":5924},[40,154685,1413],{"emptyLinePlaceholder":1412},[40,154687,154688],{"class":42,"line":5929},[40,154689,1413],{"emptyLinePlaceholder":1412},[40,154691,154692,154694,154697],{"class":42,"line":5935},[40,154693,35247],{"class":1283},[40,154695,154696],{"class":596}," find_student",[40,154698,154699],{"class":50},"(students, student_id):\n",[40,154701,154702,154704,154707,154709],{"class":42,"line":5941},[40,154703,6525],{"class":1283},[40,154705,154706],{"class":50}," student ",[40,154708,29355],{"class":1283},[40,154710,154711],{"class":50}," students:\n",[40,154713,154714,154716,154719,154721,154723,154725],{"class":42,"line":5946},[40,154715,5822],{"class":1283},[40,154717,154718],{"class":50}," student[",[40,154720,154016],{"class":94},[40,154722,7766],{"class":50},[40,154724,6273],{"class":1283},[40,154726,154727],{"class":50}," student_id:\n",[40,154729,154730,154732],{"class":42,"line":11270},[40,154731,19054],{"class":1283},[40,154733,154734],{"class":50}," student\n",[40,154736,154737,154739],{"class":42,"line":11294},[40,154738,7413],{"class":1283},[40,154740,154741],{"class":63}," None\n",[40,154743,154744],{"class":42,"line":11299},[40,154745,1413],{"emptyLinePlaceholder":1412},[40,154747,154748],{"class":42,"line":11305},[40,154749,1413],{"emptyLinePlaceholder":1412},[40,154751,154752,154754,154757],{"class":42,"line":11332},[40,154753,35247],{"class":1283},[40,154755,154756],{"class":596}," input_int",[40,154758,154759],{"class":50},"(prompt):\n",[40,154761,154762,154764,154766],{"class":42,"line":11337},[40,154763,5577],{"class":1283},[40,154765,98587],{"class":63},[40,154767,332],{"class":50},[40,154769,154770,154773],{"class":42,"line":11343},[40,154771,154772],{"class":1283},"        try",[40,154774,332],{"class":50},[40,154776,154777,154779,154781,154783,154785],{"class":42,"line":11355},[40,154778,19054],{"class":1283},[40,154780,5708],{"class":63},[40,154782,3488],{"class":50},[40,154784,57119],{"class":63},[40,154786,154787],{"class":50},"(prompt))\n",[40,154789,154790,154793,154796],{"class":42,"line":11367},[40,154791,154792],{"class":1283},"        except",[40,154794,154795],{"class":63}," ValueError",[40,154797,332],{"class":50},[40,154799,154800,154802,154804,154807],{"class":42,"line":11379},[40,154801,37950],{"class":63},[40,154803,3488],{"class":50},[40,154805,154806],{"class":94},"\"请输入整数\"",[40,154808,1811],{"class":50},[40,154810,154811],{"class":42,"line":13038},[40,154812,1413],{"emptyLinePlaceholder":1412},[40,154814,154815],{"class":42,"line":13063},[40,154816,1413],{"emptyLinePlaceholder":1412},[40,154818,154819,154821,154824],{"class":42,"line":13086},[40,154820,35247],{"class":1283},[40,154822,154823],{"class":596}," input_float",[40,154825,154759],{"class":50},[40,154827,154828,154830,154832],{"class":42,"line":13110},[40,154829,5577],{"class":1283},[40,154831,98587],{"class":63},[40,154833,332],{"class":50},[40,154835,154836,154838],{"class":42,"line":13115},[40,154837,154772],{"class":1283},[40,154839,332],{"class":50},[40,154841,154842,154844,154846,154848,154850],{"class":42,"line":13120},[40,154843,19054],{"class":1283},[40,154845,113088],{"class":63},[40,154847,3488],{"class":50},[40,154849,57119],{"class":63},[40,154851,154787],{"class":50},[40,154853,154854,154856,154858],{"class":42,"line":13125},[40,154855,154792],{"class":1283},[40,154857,154795],{"class":63},[40,154859,332],{"class":50},[40,154861,154862,154864,154866,154869],{"class":42,"line":13134},[40,154863,37950],{"class":63},[40,154865,3488],{"class":50},[40,154867,154868],{"class":94},"\"请输入数字\"",[40,154870,1811],{"class":50},[40,154872,154873],{"class":42,"line":13139},[40,154874,1413],{"emptyLinePlaceholder":1412},[40,154876,154877],{"class":42,"line":13145},[40,154878,1413],{"emptyLinePlaceholder":1412},[40,154880,154881,154883,154886],{"class":42,"line":13166},[40,154882,35247],{"class":1283},[40,154884,154885],{"class":596}," add_student",[40,154887,154530],{"class":50},[40,154889,154890,154893,154895,154897,154899,154902],{"class":42,"line":13172},[40,154891,154892],{"class":50},"    student_id ",[40,154894,1284],{"class":1283},[40,154896,63903],{"class":63},[40,154898,3488],{"class":50},[40,154900,154901],{"class":94},"\"请输入学号:\"",[40,154903,1811],{"class":50},[40,154905,154906],{"class":42,"line":13186},[40,154907,1413],{"emptyLinePlaceholder":1412},[40,154909,154910,154912],{"class":42,"line":13192},[40,154911,6425],{"class":1283},[40,154913,154914],{"class":50}," find_student(students, student_id):\n",[40,154916,154917,154919,154921,154924],{"class":42,"line":13219},[40,154918,35751],{"class":63},[40,154920,3488],{"class":50},[40,154922,154923],{"class":94},"\"学号已存在\"",[40,154925,1811],{"class":50},[40,154927,154928],{"class":42,"line":13228},[40,154929,154930],{"class":1283},"        return\n",[40,154932,154933],{"class":42,"line":13234},[40,154934,1413],{"emptyLinePlaceholder":1412},[40,154936,154937,154940,154942,154944,154946,154949],{"class":42,"line":13242},[40,154938,154939],{"class":50},"    name ",[40,154941,1284],{"class":1283},[40,154943,63903],{"class":63},[40,154945,3488],{"class":50},[40,154947,154948],{"class":94},"\"请输入姓名:\"",[40,154950,1811],{"class":50},[40,154952,154953,154956,154958,154961,154964],{"class":42,"line":13247},[40,154954,154955],{"class":50},"    age ",[40,154957,1284],{"class":1283},[40,154959,154960],{"class":50}," input_int(",[40,154962,154963],{"class":94},"\"请输入年龄:\"",[40,154965,1811],{"class":50},[40,154967,154968,154971,154973,154976,154979],{"class":42,"line":19926},[40,154969,154970],{"class":50},"    score ",[40,154972,1284],{"class":1283},[40,154974,154975],{"class":50}," input_float(",[40,154977,154978],{"class":94},"\"请输入成绩:\"",[40,154980,1811],{"class":50},[40,154982,154983],{"class":42,"line":19932},[40,154984,1413],{"emptyLinePlaceholder":1412},[40,154986,154987],{"class":42,"line":19955},[40,154988,154989],{"class":50},"    students.append({\n",[40,154991,154992,154995],{"class":42,"line":19961},[40,154993,154994],{"class":94},"        \"student_id\"",[40,154996,154997],{"class":50},": student_id,\n",[40,154999,155000,155003],{"class":42,"line":19984},[40,155001,155002],{"class":94},"        \"name\"",[40,155004,155005],{"class":50},": name,\n",[40,155007,155008,155011],{"class":42,"line":19998},[40,155009,155010],{"class":94},"        \"age\"",[40,155012,155013],{"class":50},": age,\n",[40,155015,155016,155019],{"class":42,"line":20018},[40,155017,155018],{"class":94},"        \"score\"",[40,155020,155021],{"class":50},": score,\n",[40,155023,155024],{"class":42,"line":20024},[40,155025,36761],{"class":50},[40,155027,155028],{"class":42,"line":20035},[40,155029,155030],{"class":50},"    save_students(students)\n",[40,155032,155033,155035,155037,155040],{"class":42,"line":20058},[40,155034,34599],{"class":63},[40,155036,3488],{"class":50},[40,155038,155039],{"class":94},"\"添加成功\"",[40,155041,1811],{"class":50},[40,155043,155044],{"class":42,"line":20080},[40,155045,1413],{"emptyLinePlaceholder":1412},[40,155047,155048],{"class":42,"line":20085},[40,155049,1413],{"emptyLinePlaceholder":1412},[40,155051,155052,155054,155057],{"class":42,"line":20091},[40,155053,35247],{"class":1283},[40,155055,155056],{"class":596}," delete_student",[40,155058,154530],{"class":50},[40,155060,155061,155063,155065,155067,155069,155072],{"class":42,"line":20105},[40,155062,154892],{"class":50},[40,155064,1284],{"class":1283},[40,155066,63903],{"class":63},[40,155068,3488],{"class":50},[40,155070,155071],{"class":94},"\"请输入要删除的学号:\"",[40,155073,1811],{"class":50},[40,155075,155076,155079,155081],{"class":42,"line":20118},[40,155077,155078],{"class":50},"    student ",[40,155080,1284],{"class":1283},[40,155082,155083],{"class":50}," find_student(students, student_id)\n",[40,155085,155086],{"class":42,"line":20123},[40,155087,1413],{"emptyLinePlaceholder":1412},[40,155089,155090,155092,155094,155096,155098],{"class":42,"line":20137},[40,155091,6425],{"class":1283},[40,155093,154706],{"class":50},[40,155095,42227],{"class":1283},[40,155097,42233],{"class":63},[40,155099,332],{"class":50},[40,155101,155102,155104,155106,155109],{"class":42,"line":20142},[40,155103,35751],{"class":63},[40,155105,3488],{"class":50},[40,155107,155108],{"class":94},"\"学生不存在\"",[40,155110,1811],{"class":50},[40,155112,155113],{"class":42,"line":20148},[40,155114,154930],{"class":1283},[40,155116,155117],{"class":42,"line":20153},[40,155118,1413],{"emptyLinePlaceholder":1412},[40,155120,155121],{"class":42,"line":20167},[40,155122,155123],{"class":50},"    students.remove(student)\n",[40,155125,155126],{"class":42,"line":20172},[40,155127,155030],{"class":50},[40,155129,155130,155132,155134,155137],{"class":42,"line":20177},[40,155131,34599],{"class":63},[40,155133,3488],{"class":50},[40,155135,155136],{"class":94},"\"删除成功\"",[40,155138,1811],{"class":50},[40,155140,155141],{"class":42,"line":20191},[40,155142,1413],{"emptyLinePlaceholder":1412},[40,155144,155145],{"class":42,"line":20203},[40,155146,1413],{"emptyLinePlaceholder":1412},[40,155148,155149,155151,155154],{"class":42,"line":20208},[40,155150,35247],{"class":1283},[40,155152,155153],{"class":596}," update_student",[40,155155,154530],{"class":50},[40,155157,155158,155160,155162,155164,155166,155169],{"class":42,"line":20221},[40,155159,154892],{"class":50},[40,155161,1284],{"class":1283},[40,155163,63903],{"class":63},[40,155165,3488],{"class":50},[40,155167,155168],{"class":94},"\"请输入要修改的学号:\"",[40,155170,1811],{"class":50},[40,155172,155173,155175,155177],{"class":42,"line":20226},[40,155174,155078],{"class":50},[40,155176,1284],{"class":1283},[40,155178,155083],{"class":50},[40,155180,155181],{"class":42,"line":20231},[40,155182,1413],{"emptyLinePlaceholder":1412},[40,155184,155185,155187,155189,155191,155193],{"class":42,"line":20236},[40,155186,6425],{"class":1283},[40,155188,154706],{"class":50},[40,155190,42227],{"class":1283},[40,155192,42233],{"class":63},[40,155194,332],{"class":50},[40,155196,155197,155199,155201,155203],{"class":42,"line":20249},[40,155198,35751],{"class":63},[40,155200,3488],{"class":50},[40,155202,155108],{"class":94},[40,155204,1811],{"class":50},[40,155206,155207],{"class":42,"line":20254},[40,155208,154930],{"class":1283},[40,155210,155211],{"class":42,"line":35933},[40,155212,1413],{"emptyLinePlaceholder":1412},[40,155214,155215,155217,155219,155221,155223,155226],{"class":42,"line":35939},[40,155216,154939],{"class":50},[40,155218,1284],{"class":1283},[40,155220,63903],{"class":63},[40,155222,3488],{"class":50},[40,155224,155225],{"class":94},"\"请输入新姓名:\"",[40,155227,1811],{"class":50},[40,155229,155230,155232,155234,155236,155239],{"class":42,"line":35945},[40,155231,154955],{"class":50},[40,155233,1284],{"class":1283},[40,155235,154960],{"class":50},[40,155237,155238],{"class":94},"\"请输入新年龄:\"",[40,155240,1811],{"class":50},[40,155242,155243,155245,155247,155249,155252],{"class":42,"line":35951},[40,155244,154970],{"class":50},[40,155246,1284],{"class":1283},[40,155248,154975],{"class":50},[40,155250,155251],{"class":94},"\"请输入新成绩:\"",[40,155253,1811],{"class":50},[40,155255,155256],{"class":42,"line":35957},[40,155257,1413],{"emptyLinePlaceholder":1412},[40,155259,155260,155263,155265,155267,155269],{"class":42,"line":35968},[40,155261,155262],{"class":50},"    student[",[40,155264,65977],{"class":94},[40,155266,7766],{"class":50},[40,155268,1284],{"class":1283},[40,155270,152364],{"class":50},[40,155272,155273,155275,155277,155279,155281],{"class":42,"line":35974},[40,155274,155262],{"class":50},[40,155276,72422],{"class":94},[40,155278,7766],{"class":50},[40,155280,1284],{"class":1283},[40,155282,152376],{"class":50},[40,155284,155285,155287,155289,155291,155293],{"class":42,"line":35994},[40,155286,155262],{"class":50},[40,155288,154041],{"class":94},[40,155290,7766],{"class":50},[40,155292,1284],{"class":1283},[40,155294,4921],{"class":50},[40,155296,155297],{"class":42,"line":36000},[40,155298,1413],{"emptyLinePlaceholder":1412},[40,155300,155301],{"class":42,"line":36011},[40,155302,155030],{"class":50},[40,155304,155305,155307,155309,155312],{"class":42,"line":36017},[40,155306,34599],{"class":63},[40,155308,3488],{"class":50},[40,155310,155311],{"class":94},"\"修改成功\"",[40,155313,1811],{"class":50},[40,155315,155316],{"class":42,"line":36023},[40,155317,1413],{"emptyLinePlaceholder":1412},[40,155319,155320],{"class":42,"line":36029},[40,155321,1413],{"emptyLinePlaceholder":1412},[40,155323,155324,155326,155329],{"class":42,"line":36035},[40,155325,35247],{"class":1283},[40,155327,155328],{"class":596}," query_student",[40,155330,154530],{"class":50},[40,155332,155333,155335,155337,155339,155341,155344],{"class":42,"line":36041},[40,155334,154892],{"class":50},[40,155336,1284],{"class":1283},[40,155338,63903],{"class":63},[40,155340,3488],{"class":50},[40,155342,155343],{"class":94},"\"请输入要查询的学号:\"",[40,155345,1811],{"class":50},[40,155347,155348,155350,155352],{"class":42,"line":36047},[40,155349,155078],{"class":50},[40,155351,1284],{"class":1283},[40,155353,155083],{"class":50},[40,155355,155356],{"class":42,"line":36053},[40,155357,1413],{"emptyLinePlaceholder":1412},[40,155359,155360,155362,155364,155366,155368],{"class":42,"line":36073},[40,155361,6425],{"class":1283},[40,155363,154706],{"class":50},[40,155365,42227],{"class":1283},[40,155367,42233],{"class":63},[40,155369,332],{"class":50},[40,155371,155372,155374,155376,155378],{"class":42,"line":36079},[40,155373,35751],{"class":63},[40,155375,3488],{"class":50},[40,155377,155108],{"class":94},[40,155379,1811],{"class":50},[40,155381,155382],{"class":42,"line":36095},[40,155383,154930],{"class":1283},[40,155385,155386],{"class":42,"line":36101},[40,155387,1413],{"emptyLinePlaceholder":1412},[40,155389,155390],{"class":42,"line":36115},[40,155391,155392],{"class":50},"    print_student(student)\n",[40,155394,155395],{"class":42,"line":36121},[40,155396,1413],{"emptyLinePlaceholder":1412},[40,155398,155399],{"class":42,"line":36136},[40,155400,1413],{"emptyLinePlaceholder":1412},[40,155402,155403,155405,155408],{"class":42,"line":36142},[40,155404,35247],{"class":1283},[40,155406,155407],{"class":596}," print_student",[40,155409,155410],{"class":50},"(student):\n",[40,155412,155413,155415],{"class":42,"line":36151},[40,155414,34599],{"class":63},[40,155416,154008],{"class":50},[40,155418,155419,155422,155424,155426,155429,155432,155434,155437],{"class":42,"line":36157},[40,155420,155421],{"class":1283},"        f",[40,155423,3731],{"class":94},[40,155425,4373],{"class":63},[40,155427,155428],{"class":50},"student[",[40,155430,155431],{"class":94},"'student_id'",[40,155433,4417],{"class":50},[40,155435,155436],{"class":63},"}\\t",[40,155438,28446],{"class":94},[40,155440,155441,155443,155445,155447,155449,155452,155454,155456],{"class":42,"line":36166},[40,155442,155421],{"class":1283},[40,155444,3731],{"class":94},[40,155446,4373],{"class":63},[40,155448,155428],{"class":50},[40,155450,155451],{"class":94},"'name'",[40,155453,4417],{"class":50},[40,155455,155436],{"class":63},[40,155457,28446],{"class":94},[40,155459,155460,155462,155464,155466,155468,155471,155473,155475],{"class":42,"line":36172},[40,155461,155421],{"class":1283},[40,155463,3731],{"class":94},[40,155465,4373],{"class":63},[40,155467,155428],{"class":50},[40,155469,155470],{"class":94},"'age'",[40,155472,4417],{"class":50},[40,155474,155436],{"class":63},[40,155476,28446],{"class":94},[40,155478,155479,155481,155483,155485,155487,155490,155492,155494],{"class":42,"line":36178},[40,155480,155421],{"class":1283},[40,155482,3731],{"class":94},[40,155484,4373],{"class":63},[40,155486,155428],{"class":50},[40,155488,155489],{"class":94},"'score'",[40,155491,4417],{"class":50},[40,155493,4423],{"class":63},[40,155495,28446],{"class":94},[40,155497,155498],{"class":42,"line":36187},[40,155499,155500],{"class":50},"    )\n",[40,155502,155503],{"class":42,"line":36193},[40,155504,1413],{"emptyLinePlaceholder":1412},[40,155506,155507],{"class":42,"line":36204},[40,155508,1413],{"emptyLinePlaceholder":1412},[40,155510,155511,155513,155516],{"class":42,"line":36210},[40,155512,35247],{"class":1283},[40,155514,155515],{"class":596}," show_all_students",[40,155517,154530],{"class":50},[40,155519,155520,155522,155524],{"class":42,"line":36229},[40,155521,6425],{"class":1283},[40,155523,42230],{"class":1283},[40,155525,154711],{"class":50},[40,155527,155528,155530,155532,155535],{"class":42,"line":36235},[40,155529,35751],{"class":63},[40,155531,3488],{"class":50},[40,155533,155534],{"class":94},"\"暂无学生\"",[40,155536,1811],{"class":50},[40,155538,155539],{"class":42,"line":36246},[40,155540,154930],{"class":1283},[40,155542,155543],{"class":42,"line":36252},[40,155544,1413],{"emptyLinePlaceholder":1412},[40,155546,155547,155549,155551,155554,155556,155559,155561,155564,155566,155569],{"class":42,"line":36272},[40,155548,34599],{"class":63},[40,155550,3488],{"class":50},[40,155552,155553],{"class":94},"\"学号",[40,155555,4577],{"class":63},[40,155557,155558],{"class":94},"姓名",[40,155560,4577],{"class":63},[40,155562,155563],{"class":94},"年龄",[40,155565,4577],{"class":63},[40,155567,155568],{"class":94},"成绩\"",[40,155570,1811],{"class":50},[40,155572,155573,155575,155577,155579],{"class":42,"line":36288},[40,155574,6525],{"class":1283},[40,155576,154706],{"class":50},[40,155578,29355],{"class":1283},[40,155580,154711],{"class":50},[40,155582,155583],{"class":42,"line":36294},[40,155584,155585],{"class":50},"        print_student(student)\n",[40,155587,155588],{"class":42,"line":36308},[40,155589,1413],{"emptyLinePlaceholder":1412},[40,155591,155592],{"class":42,"line":36314},[40,155593,1413],{"emptyLinePlaceholder":1412},[40,155595,155596,155598,155600],{"class":42,"line":36320},[40,155597,35247],{"class":1283},[40,155599,5299],{"class":596},[40,155601,35253],{"class":50},[40,155603,155604,155607,155609],{"class":42,"line":36331},[40,155605,155606],{"class":50},"    students ",[40,155608,1284],{"class":1283},[40,155610,155611],{"class":50}," load_students()\n",[40,155613,155614],{"class":42,"line":36337},[40,155615,1413],{"emptyLinePlaceholder":1412},[40,155617,155618,155620,155622],{"class":42,"line":36343},[40,155619,5577],{"class":1283},[40,155621,98587],{"class":63},[40,155623,332],{"class":50},[40,155625,155626],{"class":42,"line":36353},[40,155627,155628],{"class":50},"        show_menu()\n",[40,155630,155631,155634,155636,155638,155640,155643],{"class":42,"line":36359},[40,155632,155633],{"class":50},"        choice ",[40,155635,1284],{"class":1283},[40,155637,63903],{"class":63},[40,155639,3488],{"class":50},[40,155641,155642],{"class":94},"\"请输入操作:\"",[40,155644,1811],{"class":50},[40,155646,155647],{"class":42,"line":36370},[40,155648,1413],{"emptyLinePlaceholder":1412},[40,155650,155651,155653,155656,155658,155661],{"class":42,"line":36376},[40,155652,5822],{"class":1283},[40,155654,155655],{"class":50}," choice ",[40,155657,6273],{"class":1283},[40,155659,155660],{"class":94}," \"1\"",[40,155662,332],{"class":50},[40,155664,155665],{"class":42,"line":36386},[40,155666,155667],{"class":50},"            add_student(students)\n",[40,155669,155670,155673,155675,155677,155680],{"class":42,"line":36391},[40,155671,155672],{"class":1283},"        elif",[40,155674,155655],{"class":50},[40,155676,6273],{"class":1283},[40,155678,155679],{"class":94}," \"2\"",[40,155681,332],{"class":50},[40,155683,155684],{"class":42,"line":36397},[40,155685,155686],{"class":50},"            delete_student(students)\n",[40,155688,155689,155691,155693,155695,155698],{"class":42,"line":36446},[40,155690,155672],{"class":1283},[40,155692,155655],{"class":50},[40,155694,6273],{"class":1283},[40,155696,155697],{"class":94}," \"3\"",[40,155699,332],{"class":50},[40,155701,155702],{"class":42,"line":36493},[40,155703,155704],{"class":50},"            update_student(students)\n",[40,155706,155707,155709,155711,155713,155716],{"class":42,"line":36498},[40,155708,155672],{"class":1283},[40,155710,155655],{"class":50},[40,155712,6273],{"class":1283},[40,155714,155715],{"class":94}," \"4\"",[40,155717,332],{"class":50},[40,155719,155720],{"class":42,"line":36504},[40,155721,155722],{"class":50},"            query_student(students)\n",[40,155724,155725,155727,155729,155731,155734],{"class":42,"line":36523},[40,155726,155672],{"class":1283},[40,155728,155655],{"class":50},[40,155730,6273],{"class":1283},[40,155732,155733],{"class":94}," \"5\"",[40,155735,332],{"class":50},[40,155737,155738],{"class":42,"line":36529},[40,155739,155740],{"class":50},"            show_all_students(students)\n",[40,155742,155743,155745,155747,155749,155752],{"class":42,"line":36549},[40,155744,155672],{"class":1283},[40,155746,155655],{"class":50},[40,155748,6273],{"class":1283},[40,155750,155751],{"class":94}," \"0\"",[40,155753,332],{"class":50},[40,155755,155756,155758,155760,155763],{"class":42,"line":36555},[40,155757,37950],{"class":63},[40,155759,3488],{"class":50},[40,155761,155762],{"class":94},"\"退出系统\"",[40,155764,1811],{"class":50},[40,155766,155767],{"class":42,"line":36561},[40,155768,118389],{"class":1283},[40,155770,155771,155773],{"class":42,"line":36571},[40,155772,5859],{"class":1283},[40,155774,332],{"class":50},[40,155776,155777,155779,155781,155784],{"class":42,"line":36576},[40,155778,37950],{"class":63},[40,155780,3488],{"class":50},[40,155782,155783],{"class":94},"\"输入错误\"",[40,155785,1811],{"class":50},[40,155787,155788],{"class":42,"line":36582},[40,155789,1413],{"emptyLinePlaceholder":1412},[40,155791,155792],{"class":42,"line":36598},[40,155793,1413],{"emptyLinePlaceholder":1412},[40,155795,155796,155798,155800,155802,155804],{"class":42,"line":36643},[40,155797,4873],{"class":1283},[40,155799,34520],{"class":63},[40,155801,104850],{"class":1283},[40,155803,104853],{"class":94},[40,155805,332],{"class":50},[40,155807,155808],{"class":42,"line":36649},[40,155809,104860],{"class":50},[19,155811,155812],{},"这个项目串联了：",[492,155814,155815,155818,155821,155824,155827,155829],{},[495,155816,155817],{},"菜单循环。",[495,155819,155820],{},"函数封装。",[495,155822,155823],{},"列表字典。",[495,155825,155826],{},"JSON 读写。",[495,155828,154296],{},[495,155830,155831,776],{},[26,155832,155833],{},"if __name__ == \"__main__\"",[14,155835,155837],{"id":155836},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,155839,155840],{},"可以进一步拆成两个类：",[492,155842,155843,155848],{},[495,155844,155845,155847],{},[26,155846,152137],{},"：表示单个学生。",[495,155849,155850,155852],{},[26,155851,154163],{},"：负责学生增删改查和文件保存。",[19,155854,155855],{},"示意代码：",[31,155857,155859],{"className":33679,"code":155858,"language":2323,"meta":36,"style":36},"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",[26,155860,155861,155871,155875,155879,155883,155891,155898,155904,155910,155916,155920,155928,155934,155944,155954,155964,155974,155978,155982,155988,155996,156004,156012,156020,156028,156036],{"__ignoreMap":36},[40,155862,155863,155865,155867,155869],{"class":42,"line":43},[40,155864,34037],{"class":1283},[40,155866,153721],{"class":50},[40,155868,33692],{"class":1283},[40,155870,153726],{"class":50},[40,155872,155873],{"class":42,"line":54},[40,155874,1413],{"emptyLinePlaceholder":1412},[40,155876,155877],{"class":42,"line":70},[40,155878,1413],{"emptyLinePlaceholder":1412},[40,155880,155881],{"class":42,"line":78},[40,155882,153739],{"class":596},[40,155884,155885,155887,155889],{"class":42,"line":86},[40,155886,18016],{"class":1283},[40,155888,11220],{"class":596},[40,155890,332],{"class":50},[40,155892,155893,155896],{"class":42,"line":100},[40,155894,155895],{"class":50},"    student_id: ",[40,155897,153755],{"class":63},[40,155899,155900,155902],{"class":42,"line":108},[40,155901,153752],{"class":50},[40,155903,153755],{"class":63},[40,155905,155906,155908],{"class":42,"line":121},[40,155907,153760],{"class":50},[40,155909,153763],{"class":63},[40,155911,155912,155914],{"class":42,"line":134},[40,155913,153768],{"class":50},[40,155915,153771],{"class":63},[40,155917,155918],{"class":42,"line":146},[40,155919,1413],{"emptyLinePlaceholder":1412},[40,155921,155922,155924,155926],{"class":42,"line":154},[40,155923,34101],{"class":1283},[40,155925,153919],{"class":596},[40,155927,34107],{"class":50},[40,155929,155930,155932],{"class":42,"line":162},[40,155931,18074],{"class":1283},[40,155933,18894],{"class":50},[40,155935,155936,155938,155940,155942],{"class":42,"line":170},[40,155937,153932],{"class":94},[40,155939,60],{"class":50},[40,155941,34123],{"class":63},[40,155943,153939],{"class":50},[40,155945,155946,155948,155950,155952],{"class":42,"line":183},[40,155947,153944],{"class":94},[40,155949,60],{"class":50},[40,155951,34123],{"class":63},[40,155953,153951],{"class":50},[40,155955,155956,155958,155960,155962],{"class":42,"line":196},[40,155957,153956],{"class":94},[40,155959,60],{"class":50},[40,155961,34123],{"class":63},[40,155963,153963],{"class":50},[40,155965,155966,155968,155970,155972],{"class":42,"line":204},[40,155967,153968],{"class":94},[40,155969,60],{"class":50},[40,155971,34123],{"class":63},[40,155973,153975],{"class":50},[40,155975,155976],{"class":42,"line":217},[40,155977,5854],{"class":50},[40,155979,155980],{"class":42,"line":230},[40,155981,1413],{"emptyLinePlaceholder":1412},[40,155983,155984,155986],{"class":42,"line":238},[40,155985,153583],{"class":596},[40,155987,153586],{"class":63},[40,155989,155990,155992,155994],{"class":42,"line":251},[40,155991,34101],{"class":1283},[40,155993,153996],{"class":596},[40,155995,153999],{"class":50},[40,155997,155998,156000,156002],{"class":42,"line":264},[40,155999,18074],{"class":1283},[40,156001,153603],{"class":63},[40,156003,154008],{"class":50},[40,156005,156006,156008,156010],{"class":42,"line":277},[40,156007,154013],{"class":50},[40,156009,154016],{"class":94},[40,156011,91131],{"class":50},[40,156013,156014,156016,156018],{"class":42,"line":290},[40,156015,154013],{"class":50},[40,156017,65977],{"class":94},[40,156019,91131],{"class":50},[40,156021,156022,156024,156026],{"class":42,"line":298},[40,156023,154013],{"class":50},[40,156025,72422],{"class":94},[40,156027,91131],{"class":50},[40,156029,156030,156032,156034],{"class":42,"line":310},[40,156031,154013],{"class":50},[40,156033,154041],{"class":94},[40,156035,91131],{"class":50},[40,156037,156038],{"class":42,"line":5086},[40,156039,41426],{"class":50},[19,156041,156042],{},"管理器示意：",[31,156044,156046],{"className":33679,"code":156045,"language":2323,"meta":36,"style":36},"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",[26,156047,156048,156057,156065,156076,156080,156090,156103,156114,156121,156127,156131,156140,156149,156155,156162],{"__ignoreMap":36},[40,156049,156050,156052,156055],{"class":42,"line":43},[40,156051,18016],{"class":1283},[40,156053,156054],{"class":596}," StudentManager",[40,156056,332],{"class":50},[40,156058,156059,156061,156063],{"class":42,"line":54},[40,156060,34101],{"class":1283},[40,156062,34104],{"class":63},[40,156064,34107],{"class":50},[40,156066,156067,156069,156072,156074],{"class":42,"line":70},[40,156068,34145],{"class":63},[40,156070,156071],{"class":50},".students ",[40,156073,1284],{"class":1283},[40,156075,55136],{"class":50},[40,156077,156078],{"class":42,"line":78},[40,156079,1413],{"emptyLinePlaceholder":1412},[40,156081,156082,156084,156087],{"class":42,"line":86},[40,156083,34101],{"class":1283},[40,156085,156086],{"class":596}," find_by_id",[40,156088,156089],{"class":50},"(self, student_id):\n",[40,156091,156092,156094,156096,156098,156100],{"class":42,"line":100},[40,156093,6727],{"class":1283},[40,156095,154706],{"class":50},[40,156097,29355],{"class":1283},[40,156099,42173],{"class":63},[40,156101,156102],{"class":50},".students:\n",[40,156104,156105,156107,156110,156112],{"class":42,"line":108},[40,156106,7965],{"class":1283},[40,156108,156109],{"class":50}," student.student_id ",[40,156111,6273],{"class":1283},[40,156113,154727],{"class":50},[40,156115,156116,156119],{"class":42,"line":121},[40,156117,156118],{"class":1283},"                return",[40,156120,154734],{"class":50},[40,156122,156123,156125],{"class":42,"line":134},[40,156124,18074],{"class":1283},[40,156126,154741],{"class":63},[40,156128,156129],{"class":42,"line":146},[40,156130,1413],{"emptyLinePlaceholder":1412},[40,156132,156133,156135,156137],{"class":42,"line":154},[40,156134,34101],{"class":1283},[40,156136,8532],{"class":596},[40,156138,156139],{"class":50},"(self, student):\n",[40,156141,156142,156144,156146],{"class":42,"line":162},[40,156143,5822],{"class":1283},[40,156145,42173],{"class":63},[40,156147,156148],{"class":50},".find_by_id(student.student_id):\n",[40,156150,156151,156153],{"class":42,"line":170},[40,156152,19054],{"class":1283},[40,156154,128376],{"class":63},[40,156156,156157,156159],{"class":42,"line":183},[40,156158,34145],{"class":63},[40,156160,156161],{"class":50},".students.append(student)\n",[40,156163,156164,156166],{"class":42,"line":196},[40,156165,18074],{"class":1283},[40,156167,156168],{"class":63}," True\n",[19,156170,156171],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,156173,156175],{"id":156174},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[402,156177,156179],{"id":156178},"_1251-数据结构","12.5.1 数据结构",[31,156181,156183],{"className":33679,"code":156182,"language":2323,"meta":36,"style":36},"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",[26,156184,156185,156193,156224,156254,156283,156312],{"__ignoreMap":36},[40,156186,156187,156189,156191],{"class":42,"line":43},[40,156188,151034],{"class":50},[40,156190,1284],{"class":1283},[40,156192,58745],{"class":50},[40,156194,156195,156197,156199,156201,156203,156205,156208,156210,156213,156215,156217,156219,156222],{"class":42,"line":54},[40,156196,150954],{"class":50},[40,156198,150566],{"class":94},[40,156200,60],{"class":50},[40,156202,151177],{"class":94},[40,156204,15757],{"class":50},[40,156206,156207],{"class":94},"\"category\"",[40,156209,60],{"class":50},[40,156211,156212],{"class":94},"\"手机\"",[40,156214,15757],{"class":50},[40,156216,87379],{"class":94},[40,156218,60],{"class":50},[40,156220,156221],{"class":63},"12000",[40,156223,8253],{"class":50},[40,156225,156226,156228,156230,156232,156234,156236,156238,156240,156243,156245,156247,156249,156252],{"class":42,"line":70},[40,156227,150954],{"class":50},[40,156229,150566],{"class":94},[40,156231,60],{"class":50},[40,156233,151177],{"class":94},[40,156235,15757],{"class":50},[40,156237,156207],{"class":94},[40,156239,60],{"class":50},[40,156241,156242],{"class":94},"\"电脑\"",[40,156244,15757],{"class":50},[40,156246,87379],{"class":94},[40,156248,60],{"class":50},[40,156250,156251],{"class":63},"18000",[40,156253,8253],{"class":50},[40,156255,156256,156258,156260,156262,156264,156266,156268,156270,156272,156274,156276,156278,156281],{"class":42,"line":78},[40,156257,150954],{"class":50},[40,156259,150566],{"class":94},[40,156261,60],{"class":50},[40,156263,151198],{"class":94},[40,156265,15757],{"class":50},[40,156267,156207],{"class":94},[40,156269,60],{"class":50},[40,156271,156212],{"class":94},[40,156273,15757],{"class":50},[40,156275,87379],{"class":94},[40,156277,60],{"class":50},[40,156279,156280],{"class":63},"15000",[40,156282,8253],{"class":50},[40,156284,156285,156287,156289,156291,156293,156295,156297,156299,156301,156303,156305,156307,156310],{"class":42,"line":86},[40,156286,150954],{"class":50},[40,156288,150566],{"class":94},[40,156290,60],{"class":50},[40,156292,151198],{"class":94},[40,156294,15757],{"class":50},[40,156296,156207],{"class":94},[40,156298,60],{"class":50},[40,156300,156242],{"class":94},[40,156302,15757],{"class":50},[40,156304,87379],{"class":94},[40,156306,60],{"class":50},[40,156308,156309],{"class":63},"16000",[40,156311,8253],{"class":50},[40,156313,156314],{"class":42,"line":100},[40,156315,36546],{"class":50},[402,156317,156319],{"id":156318},"_1252-按日期统计","12.5.2 按日期统计",[31,156321,156323],{"className":33679,"code":156322,"language":2323,"meta":36,"style":36},"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",[26,156324,156325,156334,156338,156349,156363,156376,156395,156399],{"__ignoreMap":36},[40,156326,156327,156330,156332],{"class":42,"line":43},[40,156328,156329],{"class":50},"daily_total ",[40,156331,1284],{"class":1283},[40,156333,91163],{"class":50},[40,156335,156336],{"class":42,"line":54},[40,156337,1413],{"emptyLinePlaceholder":1412},[40,156339,156340,156342,156344,156346],{"class":42,"line":70},[40,156341,6349],{"class":1283},[40,156343,150778],{"class":50},[40,156345,29355],{"class":1283},[40,156347,156348],{"class":50}," sales:\n",[40,156350,156351,156354,156356,156359,156361],{"class":42,"line":78},[40,156352,156353],{"class":50},"    date ",[40,156355,1284],{"class":1283},[40,156357,156358],{"class":50}," item[",[40,156360,150566],{"class":94},[40,156362,36546],{"class":50},[40,156364,156365,156368,156370,156372,156374],{"class":42,"line":86},[40,156366,156367],{"class":50},"    amount ",[40,156369,1284],{"class":1283},[40,156371,156358],{"class":50},[40,156373,87379],{"class":94},[40,156375,36546],{"class":50},[40,156377,156378,156381,156383,156386,156388,156390,156392],{"class":42,"line":100},[40,156379,156380],{"class":50},"    daily_total[date] ",[40,156382,1284],{"class":1283},[40,156384,156385],{"class":50}," daily_total.get(date, ",[40,156387,3672],{"class":63},[40,156389,17036],{"class":50},[40,156391,3960],{"class":1283},[40,156393,156394],{"class":50}," amount\n",[40,156396,156397],{"class":42,"line":108},[40,156398,1413],{"emptyLinePlaceholder":1412},[40,156400,156401,156403],{"class":42,"line":121},[40,156402,33715],{"class":63},[40,156404,156405],{"class":50},"(daily_total)\n",[402,156407,156409],{"id":156408},"_1253-按类别统计","12.5.3 按类别统计",[31,156411,156413],{"className":33679,"code":156412,"language":2323,"meta":36,"style":36},"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",[26,156414,156415,156424,156428,156438,156451,156463,156481,156485],{"__ignoreMap":36},[40,156416,156417,156420,156422],{"class":42,"line":43},[40,156418,156419],{"class":50},"category_total ",[40,156421,1284],{"class":1283},[40,156423,91163],{"class":50},[40,156425,156426],{"class":42,"line":54},[40,156427,1413],{"emptyLinePlaceholder":1412},[40,156429,156430,156432,156434,156436],{"class":42,"line":70},[40,156431,6349],{"class":1283},[40,156433,150778],{"class":50},[40,156435,29355],{"class":1283},[40,156437,156348],{"class":50},[40,156439,156440,156443,156445,156447,156449],{"class":42,"line":78},[40,156441,156442],{"class":50},"    category ",[40,156444,1284],{"class":1283},[40,156446,156358],{"class":50},[40,156448,156207],{"class":94},[40,156450,36546],{"class":50},[40,156452,156453,156455,156457,156459,156461],{"class":42,"line":86},[40,156454,156367],{"class":50},[40,156456,1284],{"class":1283},[40,156458,156358],{"class":50},[40,156460,87379],{"class":94},[40,156462,36546],{"class":50},[40,156464,156465,156468,156470,156473,156475,156477,156479],{"class":42,"line":100},[40,156466,156467],{"class":50},"    category_total[category] ",[40,156469,1284],{"class":1283},[40,156471,156472],{"class":50}," category_total.get(category, ",[40,156474,3672],{"class":63},[40,156476,17036],{"class":50},[40,156478,3960],{"class":1283},[40,156480,156394],{"class":50},[40,156482,156483],{"class":42,"line":108},[40,156484,1413],{"emptyLinePlaceholder":1412},[40,156486,156487,156489],{"class":42,"line":121},[40,156488,33715],{"class":63},[40,156490,156491],{"class":50},"(category_total)\n",[402,156493,156495],{"id":156494},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[31,156497,156499],{"className":33679,"code":156498,"language":2323,"meta":36,"style":36},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[26,156500,156501,156526],{"__ignoreMap":36},[40,156502,156503,156506,156508,156510,156513,156516,156519,156522,156524],{"class":42,"line":43},[40,156504,156505],{"class":50},"top_date, top_amount ",[40,156507,1284],{"class":1283},[40,156509,9274],{"class":63},[40,156511,156512],{"class":50},"(daily_total.items(), ",[40,156514,156515],{"class":8539},"key",[40,156517,156518],{"class":1283},"=lambda",[40,156520,156521],{"class":50}," item: item[",[40,156523,3698],{"class":63},[40,156525,7980],{"class":50},[40,156527,156528,156530],{"class":42,"line":54},[40,156529,33715],{"class":63},[40,156531,156532],{"class":50},"(top_date, top_amount)\n",[14,156534,156536],{"id":156535},"_126-绘制柱状图","12.6 绘制柱状图",[31,156538,156540],{"className":33679,"code":156539,"language":2323,"meta":36,"style":36},"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",[26,156541,156542,156556,156567,156571,156579,156591,156603,156614,156618,156622,156632,156643,156657,156662,156679,156696,156712,156716],{"__ignoreMap":36},[40,156543,156544,156546,156548,156550,156552,156554],{"class":42,"line":43},[40,156545,34037],{"class":1283},[40,156547,149948],{"class":50},[40,156549,33692],{"class":1283},[40,156551,149953],{"class":50},[40,156553,34683],{"class":1283},[40,156555,149958],{"class":50},[40,156557,156558,156560,156562,156564],{"class":42,"line":54},[40,156559,34037],{"class":1283},[40,156561,149807],{"class":50},[40,156563,33692],{"class":1283},[40,156565,156566],{"class":50}," Bar\n",[40,156568,156569],{"class":42,"line":70},[40,156570,1413],{"emptyLinePlaceholder":1412},[40,156572,156573,156575,156577],{"class":42,"line":78},[40,156574,156419],{"class":50},[40,156576,1284],{"class":1283},[40,156578,18894],{"class":50},[40,156580,156581,156584,156586,156589],{"class":42,"line":86},[40,156582,156583],{"class":94},"    \"手机\"",[40,156585,60],{"class":50},[40,156587,156588],{"class":63},"27000",[40,156590,34766],{"class":50},[40,156592,156593,156596,156598,156601],{"class":42,"line":100},[40,156594,156595],{"class":94},"    \"电脑\"",[40,156597,60],{"class":50},[40,156599,156600],{"class":63},"34000",[40,156602,34766],{"class":50},[40,156604,156605,156608,156610,156612],{"class":42,"line":108},[40,156606,156607],{"class":94},"    \"耳机\"",[40,156609,60],{"class":50},[40,156611,2340],{"class":63},[40,156613,34766],{"class":50},[40,156615,156616],{"class":42,"line":121},[40,156617,4907],{"class":50},[40,156619,156620],{"class":42,"line":134},[40,156621,1413],{"emptyLinePlaceholder":1412},[40,156623,156624,156627,156629],{"class":42,"line":146},[40,156625,156626],{"class":50},"bar ",[40,156628,1284],{"class":1283},[40,156630,156631],{"class":50}," Bar()\n",[40,156633,156634,156637,156640],{"class":42,"line":154},[40,156635,156636],{"class":50},"bar.add_xaxis(",[40,156638,156639],{"class":63},"list",[40,156641,156642],{"class":50},"(category_total.keys()))\n",[40,156644,156645,156648,156650,156652,156654],{"class":42,"line":162},[40,156646,156647],{"class":50},"bar.add_yaxis(",[40,156649,149864],{"class":94},[40,156651,15757],{"class":50},[40,156653,156639],{"class":63},[40,156655,156656],{"class":50},"(category_total.values()))\n",[40,156658,156659],{"class":42,"line":170},[40,156660,156661],{"class":50},"bar.set_global_opts(\n",[40,156663,156664,156666,156668,156670,156672,156674,156677],{"class":42,"line":183},[40,156665,150042],{"class":8539},[40,156667,1284],{"class":1283},[40,156669,150047],{"class":50},[40,156671,54706],{"class":8539},[40,156673,1284],{"class":1283},[40,156675,156676],{"class":94},"\"品类销售额\"",[40,156678,41347],{"class":50},[40,156680,156681,156683,156685,156687,156689,156691,156694],{"class":42,"line":196},[40,156682,150061],{"class":8539},[40,156684,1284],{"class":1283},[40,156686,150066],{"class":50},[40,156688,83105],{"class":8539},[40,156690,1284],{"class":1283},[40,156692,156693],{"class":94},"\"品类\"",[40,156695,41347],{"class":50},[40,156697,156698,156700,156702,156704,156706,156708,156710],{"class":42,"line":204},[40,156699,150080],{"class":8539},[40,156701,1284],{"class":1283},[40,156703,150066],{"class":50},[40,156705,83105],{"class":8539},[40,156707,1284],{"class":1283},[40,156709,149864],{"class":94},[40,156711,41347],{"class":50},[40,156713,156714],{"class":42,"line":217},[40,156715,1811],{"class":50},[40,156717,156718,156721,156724],{"class":42,"line":230},[40,156719,156720],{"class":50},"bar.render(",[40,156722,156723],{"class":94},"\"category_sales.html\"",[40,156725,1811],{"class":50},[14,156727,156729],{"id":156728},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,156731,156732],{},"时间线适合展示不同日期、月份、年份的数据变化。",[31,156734,156736],{"className":33679,"code":156735,"language":2323,"meta":36,"style":36},"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",[26,156737,156738,156752,156763,156767,156775,156799,156822,156847,156851,156855,156865,156869,156880,156889,156899,156913,156944,156949,156953],{"__ignoreMap":36},[40,156739,156740,156742,156744,156746,156748,156750],{"class":42,"line":43},[40,156741,34037],{"class":1283},[40,156743,149948],{"class":50},[40,156745,33692],{"class":1283},[40,156747,149953],{"class":50},[40,156749,34683],{"class":1283},[40,156751,149958],{"class":50},[40,156753,156754,156756,156758,156760],{"class":42,"line":54},[40,156755,34037],{"class":1283},[40,156757,149807],{"class":50},[40,156759,33692],{"class":1283},[40,156761,156762],{"class":50}," Bar, Timeline\n",[40,156764,156765],{"class":42,"line":70},[40,156766,1413],{"emptyLinePlaceholder":1412},[40,156768,156769,156771,156773],{"class":42,"line":78},[40,156770,104949],{"class":50},[40,156772,1284],{"class":1283},[40,156774,18894],{"class":50},[40,156776,156777,156780,156783,156785,156787,156789,156791,156793,156795,156797],{"class":42,"line":86},[40,156778,156779],{"class":94},"    \"2024-10-01\"",[40,156781,156782],{"class":50},": {",[40,156784,156212],{"class":94},[40,156786,60],{"class":50},[40,156788,156221],{"class":63},[40,156790,15757],{"class":50},[40,156792,156242],{"class":94},[40,156794,60],{"class":50},[40,156796,156251],{"class":63},[40,156798,8253],{"class":50},[40,156800,156801,156804,156806,156808,156810,156812,156814,156816,156818,156820],{"class":42,"line":100},[40,156802,156803],{"class":94},"    \"2024-10-02\"",[40,156805,156782],{"class":50},[40,156807,156212],{"class":94},[40,156809,60],{"class":50},[40,156811,156280],{"class":63},[40,156813,15757],{"class":50},[40,156815,156242],{"class":94},[40,156817,60],{"class":50},[40,156819,156309],{"class":63},[40,156821,8253],{"class":50},[40,156823,156824,156827,156829,156831,156833,156836,156838,156840,156842,156845],{"class":42,"line":108},[40,156825,156826],{"class":94},"    \"2024-10-03\"",[40,156828,156782],{"class":50},[40,156830,156212],{"class":94},[40,156832,60],{"class":50},[40,156834,156835],{"class":63},"17000",[40,156837,15757],{"class":50},[40,156839,156242],{"class":94},[40,156841,60],{"class":50},[40,156843,156844],{"class":63},"19000",[40,156846,8253],{"class":50},[40,156848,156849],{"class":42,"line":121},[40,156850,4907],{"class":50},[40,156852,156853],{"class":42,"line":134},[40,156854,1413],{"emptyLinePlaceholder":1412},[40,156856,156857,156860,156862],{"class":42,"line":146},[40,156858,156859],{"class":50},"timeline ",[40,156861,1284],{"class":1283},[40,156863,156864],{"class":50}," Timeline()\n",[40,156866,156867],{"class":42,"line":154},[40,156868,1413],{"emptyLinePlaceholder":1412},[40,156870,156871,156873,156876,156878],{"class":42,"line":162},[40,156872,6349],{"class":1283},[40,156874,156875],{"class":50}," date, category_data ",[40,156877,29355],{"class":1283},[40,156879,151717],{"class":50},[40,156881,156882,156885,156887],{"class":42,"line":170},[40,156883,156884],{"class":50},"    bar ",[40,156886,1284],{"class":1283},[40,156888,156631],{"class":50},[40,156890,156891,156894,156896],{"class":42,"line":183},[40,156892,156893],{"class":50},"    bar.add_xaxis(",[40,156895,156639],{"class":63},[40,156897,156898],{"class":50},"(category_data.keys()))\n",[40,156900,156901,156904,156906,156908,156910],{"class":42,"line":196},[40,156902,156903],{"class":50},"    bar.add_yaxis(",[40,156905,149864],{"class":94},[40,156907,15757],{"class":50},[40,156909,156639],{"class":63},[40,156911,156912],{"class":50},"(category_data.values()))\n",[40,156914,156915,156918,156921,156923,156925,156927,156929,156931,156933,156935,156937,156939,156942],{"class":42,"line":204},[40,156916,156917],{"class":50},"    bar.set_global_opts(",[40,156919,156920],{"class":8539},"title_opts",[40,156922,1284],{"class":1283},[40,156924,150047],{"class":50},[40,156926,54706],{"class":8539},[40,156928,1284],{"class":1283},[40,156930,3537],{"class":1283},[40,156932,3731],{"class":94},[40,156934,4373],{"class":63},[40,156936,77221],{"class":50},[40,156938,4423],{"class":63},[40,156940,156941],{"class":94},"销售额\"",[40,156943,33797],{"class":50},[40,156945,156946],{"class":42,"line":217},[40,156947,156948],{"class":50},"    timeline.add(bar, date)\n",[40,156950,156951],{"class":42,"line":230},[40,156952,1413],{"emptyLinePlaceholder":1412},[40,156954,156955,156958,156961],{"class":42,"line":238},[40,156956,156957],{"class":50},"timeline.render(",[40,156959,156960],{"class":94},"\"timeline_sales.html\"",[40,156962,1811],{"class":50},[14,156964,156966],{"id":156965},"_128-绘制地图","12.8 绘制地图",[19,156968,156969],{},"地图适合展示地区数据。",[31,156971,156973],{"className":33679,"code":156972,"language":2323,"meta":36,"style":36},"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",[26,156974,156975,156989,157000,157004,157012,157025,157037,157050,157063,157067,157071,157081,157096,157101,157118,157137,157141],{"__ignoreMap":36},[40,156976,156977,156979,156981,156983,156985,156987],{"class":42,"line":43},[40,156978,34037],{"class":1283},[40,156980,149948],{"class":50},[40,156982,33692],{"class":1283},[40,156984,149953],{"class":50},[40,156986,34683],{"class":1283},[40,156988,149958],{"class":50},[40,156990,156991,156993,156995,156997],{"class":42,"line":54},[40,156992,34037],{"class":1283},[40,156994,149807],{"class":50},[40,156996,33692],{"class":1283},[40,156998,156999],{"class":50}," Map\n",[40,157001,157002],{"class":42,"line":70},[40,157003,1413],{"emptyLinePlaceholder":1412},[40,157005,157006,157008,157010],{"class":42,"line":78},[40,157007,104949],{"class":50},[40,157009,1284],{"class":1283},[40,157011,58745],{"class":50},[40,157013,157014,157017,157019,157021,157023],{"class":42,"line":86},[40,157015,157016],{"class":50},"    (",[40,157018,72567],{"class":94},[40,157020,15757],{"class":50},[40,157022,4294],{"class":63},[40,157024,41347],{"class":50},[40,157026,157027,157029,157031,157033,157035],{"class":42,"line":100},[40,157028,157016],{"class":50},[40,157030,72587],{"class":94},[40,157032,15757],{"class":50},[40,157034,149881],{"class":63},[40,157036,41347],{"class":50},[40,157038,157039,157041,157044,157046,157048],{"class":42,"line":108},[40,157040,157016],{"class":50},[40,157042,157043],{"class":94},"\"广东\"",[40,157045,15757],{"class":50},[40,157047,5053],{"class":63},[40,157049,41347],{"class":50},[40,157051,157052,157054,157057,157059,157061],{"class":42,"line":121},[40,157053,157016],{"class":50},[40,157055,157056],{"class":94},"\"浙江\"",[40,157058,15757],{"class":50},[40,157060,149886],{"class":63},[40,157062,41347],{"class":50},[40,157064,157065],{"class":42,"line":134},[40,157066,36546],{"class":50},[40,157068,157069],{"class":42,"line":146},[40,157070,1413],{"emptyLinePlaceholder":1412},[40,157072,157073,157076,157078],{"class":42,"line":154},[40,157074,157075],{"class":50},"map_chart ",[40,157077,1284],{"class":1283},[40,157079,157080],{"class":50}," Map()\n",[40,157082,157083,157086,157088,157091,157094],{"class":42,"line":162},[40,157084,157085],{"class":50},"map_chart.add(",[40,157087,149864],{"class":94},[40,157089,157090],{"class":50},", data, ",[40,157092,157093],{"class":94},"\"china\"",[40,157095,1811],{"class":50},[40,157097,157098],{"class":42,"line":170},[40,157099,157100],{"class":50},"map_chart.set_global_opts(\n",[40,157102,157103,157105,157107,157109,157111,157113,157116],{"class":42,"line":183},[40,157104,150042],{"class":8539},[40,157106,1284],{"class":1283},[40,157108,150047],{"class":50},[40,157110,54706],{"class":8539},[40,157112,1284],{"class":1283},[40,157114,157115],{"class":94},"\"地区销售额\"",[40,157117,41347],{"class":50},[40,157119,157120,157123,157125,157128,157131,157133,157135],{"class":42,"line":196},[40,157121,157122],{"class":8539},"    visualmap_opts",[40,157124,1284],{"class":1283},[40,157126,157127],{"class":50},"opts.VisualMapOpts(",[40,157129,157130],{"class":8539},"max_",[40,157132,1284],{"class":1283},[40,157134,5053],{"class":63},[40,157136,41347],{"class":50},[40,157138,157139],{"class":42,"line":204},[40,157140,1811],{"class":50},[40,157142,157143,157146,157149],{"class":42,"line":217},[40,157144,157145],{"class":50},"map_chart.render(",[40,157147,157148],{"class":94},"\"map_sales.html\"",[40,157150,1811],{"class":50},[19,157152,157153],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,157155,157157],{"id":157156},"_129-项目拆分建议","12.9 项目拆分建议",[19,157159,157160],{},"当代码超过一个文件时，可以这样组织：",[31,157162,157165],{"className":157163,"code":157164,"language":8510,"meta":36},[8508],"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",[26,157166,157164],{"__ignoreMap":36},[19,157168,157169],{},"职责：",[492,157171,157172,157178,157184,157190],{},[495,157173,157174,157177],{},[26,157175,157176],{},"main.py","：程序入口。",[495,157179,157180,157183],{},[26,157181,157182],{},"file_utils.py","：读写 JSON。",[495,157185,157186,157189],{},[26,157187,157188],{},"sales_service.py","：统计销售数据。",[495,157191,157192,157195],{},[26,157193,157194],{},"chart_builder.py","：生成图表。",[14,157197,157199],{"id":157198},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,157201,157202],{},"语法基础：",[492,157204,157205,157208,157211,157214],{},[495,157206,157207],{},"会写变量、注释、输入输出。",[495,157209,157210],{},"会使用 int、float、str、bool。",[495,157212,157213],{},"会做类型转换。",[495,157215,157216],{},"会使用 f-string 格式化输出。",[19,157218,157219],{},"流程控制：",[492,157221,157222,157228,157234,157242],{},[495,157223,157224,157225,776],{},"会写 ",[26,157226,157227],{},"if elif else",[495,157229,157224,157230,104312,157232,776],{},[26,157231,111954],{},[26,157233,6349],{},[495,157235,157236,157237,104312,157239,776],{},"理解 ",[26,157238,5379],{},[26,157240,157241],{},"continue",[495,157243,157244],{},"能写嵌套循环。",[19,157246,157247],{},"函数：",[492,157249,157250,157253,157256,157259],{},[495,157251,157252],{},"会定义和调用函数。",[495,157254,157255],{},"理解参数和返回值。",[495,157257,157258],{},"知道局部变量和全局变量。",[495,157260,157261],{},"会使用默认参数、关键字参数、不定长参数。",[19,157263,157264],{},"容器：",[492,157266,157267,157270,157273,157276,157279],{},[495,157268,157269],{},"会使用列表增删改查。",[495,157271,157272],{},"会遍历列表、字典。",[495,157274,157275],{},"会使用切片。",[495,157277,157278],{},"会用集合去重。",[495,157280,157281],{},"会处理列表嵌套字典。",[19,157283,157284],{},"文件和模块：",[492,157286,157287,157290,157293,157296,157299],{},[495,157288,157289],{},"会读写文本文件。",[495,157291,157292],{},"会读写 JSON。",[495,157294,157295],{},"会捕获常见异常。",[495,157297,157298],{},"会导入模块和第三方包。",[495,157300,157301],{},"会创建简单包结构。",[19,157303,157304],{},"项目能力：",[492,157306,157307,157310,157313,157316,157319],{},[495,157308,157309],{},"能把代码拆成函数。",[495,157311,157312],{},"能把数据保存到文件。",[495,157314,157315],{},"能处理用户输入错误。",[495,157317,157318],{},"能写一个完整菜单程序。",[495,157320,157321],{},"能用 pyecharts 生成图表。",[14,157323,157325],{"id":157324},"_1211-推荐练习顺序","12.11 推荐练习顺序",[492,157327,157328,157331,157334,157337,157340,157343,157346,157349],{},[495,157329,157330],{},"猜数字游戏。",[495,157332,157333],{},"ATM 菜单程序。",[495,157335,157336],{},"学生成绩统计。",[495,157338,157339],{},"学生管理系统函数版。",[495,157341,157342],{},"学生管理系统文件持久化版。",[495,157344,157345],{},"学生管理系统面向对象版。",[495,157347,157348],{},"销售数据统计。",[495,157350,157351],{},"销售数据可视化。",[14,157353,157355],{"id":157354},"_1212-常见学习误区","12.12 常见学习误区",[492,157357,157358,157361,157364,157367,157370,157373,157376],{},[495,157359,157360],{},"只看视频不敲代码。",[495,157362,157363],{},"一报错就复制错误去搜，不先读报错位置。",[495,157365,157366],{},"变量名随便写，后续自己看不懂。",[495,157368,157369],{},"所有代码都写在一个文件一个函数里。",[495,157371,157372],{},"不保存练习代码，复习时没有材料。",[495,157374,157375],{},"还没掌握列表字典就急着学框架。",[495,157377,157378],{},"不会读官方文档，只依赖教程。",[14,157380,157382],{"id":157381},"_1213-如何读报错","12.13 如何读报错",[19,157384,157385],{},"报错通常从下往上看最后几行。",[19,157387,18457],{},[31,157389,157392],{"className":157390,"code":157391,"language":8510,"meta":36},[8508],"ValueError: invalid literal for int() with base 10: 'abc'\n",[26,157393,157391],{"__ignoreMap":36},[19,157395,27915],{},[492,157397,157398,157404,157414],{},[495,157399,157400,157401,776],{},"异常类型是 ",[26,157402,157403],{},"ValueError",[495,157405,110636,157406,157409,157410,157413],{},[26,157407,157408],{},"int()"," 无法把 ",[26,157411,157412],{},"'abc'"," 转成整数。",[495,157415,157416],{},"应该检查输入内容或增加异常处理。",[19,157418,157419],{},"再看文件名和行号：",[31,157421,157424],{"className":157422,"code":157423,"language":8510,"meta":36},[8508],"File \"main.py\", line 10, in \u003Cmodule>\n",[26,157425,157423],{"__ignoreMap":36},[19,157427,157428,157429,157431],{},"表示错误发生在 ",[26,157430,157176],{}," 第 10 行。",[14,157433,157435],{"id":157434},"_1214-后续学习方向","12.14 后续学习方向",[19,157437,157438],{},"Python 基础完成后，可以按兴趣选择方向：",[492,157440,157441,157453,157462,157474,157485,157494,157504],{},[495,157442,157443,157444,3693,157447,3693,157450,776],{},"自动化办公：",[26,157445,157446],{},"openpyxl",[26,157448,157449],{},"python-docx",[26,157451,157452],{},"pdfplumber",[495,157454,157455,157456,3693,157458,3693,157460,776],{},"数据分析：",[26,157457,103921],{},[26,157459,148754],{},[26,157461,148762],{},[495,157463,157464,157465,3693,157468,3693,157471,776],{},"Web 后端：",[26,157466,157467],{},"Flask",[26,157469,157470],{},"FastAPI",[26,157472,157473],{},"Django",[495,157475,157476,157477,3693,157479,3693,157482,776],{},"爬虫：",[26,157478,148739],{},[26,157480,157481],{},"BeautifulSoup",[26,157483,157484],{},"Scrapy",[495,157486,157487,157488,3693,157490,157493],{},"测试开发：",[26,157489,148786],{},[26,157491,157492],{},"selenium","、接口测试。",[495,157495,157496,157497,3693,157499,3693,157501,776],{},"人工智能：",[26,157498,103921],{},[26,157500,148754],{},[26,157502,157503],{},"pytorch",[495,157505,157506,157507,3693,157509,3693,157512,776],{},"运维脚本：",[26,157508,148355],{},[26,157510,157511],{},"subprocess",[26,157513,157514],{},"paramiko",[19,157516,157517],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,157519,157521],{"id":157520},"_1215-结课练习","12.15 结课练习",[492,157523,157524,157527,157530,157533,157536,157539,157542,157545],{},[495,157525,157526],{},"完成函数版学生管理系统。",[495,157528,157529],{},"给学生管理系统增加 JSON 持久化。",[495,157531,157532],{},"给学生管理系统增加异常处理。",[495,157534,157535],{},"把学生管理系统改成面向对象版。",[495,157537,157538],{},"使用 pyecharts 绘制学生成绩柱状图。",[495,157540,157541],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[495,157543,157544],{},"按品类统计销售额并绘制柱状图。",[495,157546,157547],{},"写一份自己的 Python 学习路线图。",[3384,157549,157550],{},"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":36,"searchDepth":54,"depth":54,"links":157552},[157553,157554,157557,157558,157559,157565,157566,157567,157568,157569,157570,157571,157572,157573,157574],{"id":154269,"depth":54,"text":154270},{"id":154319,"depth":54,"text":154320,"children":157555},[157556],{"id":154323,"depth":70,"text":154324},{"id":154362,"depth":54,"text":154363},{"id":155836,"depth":54,"text":155837},{"id":156174,"depth":54,"text":156175,"children":157560},[157561,157562,157563,157564],{"id":156178,"depth":70,"text":156179},{"id":156318,"depth":70,"text":156319},{"id":156408,"depth":70,"text":156409},{"id":156494,"depth":70,"text":156495},{"id":156535,"depth":54,"text":156536},{"id":156728,"depth":54,"text":156729},{"id":156965,"depth":54,"text":156966},{"id":157156,"depth":54,"text":157157},{"id":157198,"depth":54,"text":157199},{"id":157324,"depth":54,"text":157325},{"id":157354,"depth":54,"text":157355},{"id":157381,"depth":54,"text":157382},{"id":157434,"depth":54,"text":157435},{"id":157520,"depth":54,"text":157521},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":154261,"description":3413},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":157581,"title":157582,"body":157583,"description":3413,"extension":3414,"meta":160052,"navigation":1412,"path":160053,"seo":160054,"stem":160055,"__hash__":160056},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":157584,"toc":160027},[157585,157588,157592,157595,157598,157618,157621,157644,157647,157650,157672,157675,157697,157701,157704,157744,157747,157868,157872,157875,157915,157918,157942,157945,157949,157952,157966,157999,158002,158037,158040,158063,158066,158099,158102,158104,158110,158185,158188,158194,158211,158251,158255,158258,158304,158306,158344,158347,158382,158385,158420,158423,158455,158458,158477,158481,158485,158598,158600,158675,158679,158725,158728,158754,158763,158767,158770,158833,158841,158869,158873,158913,158978,158982,158985,159024,159027,159072,159075,159136,159140,159167,159170,159198,159201,159205,159209,159274,159277,159315,159318,159350,159354,159453,159457,159460,159533,159536,159584,159588,159594,159634,159637,159684,159687,159736,159740,159742,159756,159758,159939,159943,159970,159990,159997,160001,160018,160024],[10,157586,157582],{"id":157587},"_2-基础语法变量与字符串",[14,157589,157591],{"id":157590},"_21-注释","2.1 注释",[19,157593,157594],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,157596,157597],{},"单行注释：",[31,157599,157601],{"className":33679,"code":157600,"language":2323,"meta":36,"style":36},"# 这是单行注释\nprint(\"hello\")\n",[26,157602,157603,157608],{"__ignoreMap":36},[40,157604,157605],{"class":42,"line":43},[40,157606,157607],{"class":997},"# 这是单行注释\n",[40,157609,157610,157612,157614,157616],{"class":42,"line":54},[40,157611,33715],{"class":63},[40,157613,3488],{"class":50},[40,157615,9167],{"class":94},[40,157617,1811],{"class":50},[19,157619,157620],{},"多行说明常用三引号：",[31,157622,157624],{"className":33679,"code":157623,"language":2323,"meta":36,"style":36},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[26,157625,157626,157630,157635,157640],{"__ignoreMap":36},[40,157627,157628],{"class":42,"line":43},[40,157629,98993],{"class":94},[40,157631,157632],{"class":42,"line":54},[40,157633,157634],{"class":94},"这是多行说明。\n",[40,157636,157637],{"class":42,"line":70},[40,157638,157639],{"class":94},"常用于文件顶部说明、函数说明等。\n",[40,157641,157642],{"class":42,"line":78},[40,157643,98993],{"class":94},[19,157645,157646],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,157648,157649],{},"不好：",[31,157651,157653],{"className":33679,"code":157652,"language":2323,"meta":36,"style":36},"# age 加 1\nage = age + 1\n",[26,157654,157655,157660],{"__ignoreMap":36},[40,157656,157657],{"class":42,"line":43},[40,157658,157659],{"class":997},"# age 加 1\n",[40,157661,157662,157664,157666,157668,157670],{"class":42,"line":54},[40,157663,149115],{"class":50},[40,157665,1284],{"class":1283},[40,157667,19029],{"class":50},[40,157669,3960],{"class":1283},[40,157671,58997],{"class":63},[19,157673,157674],{},"较好：",[31,157676,157678],{"className":33679,"code":157677,"language":2323,"meta":36,"style":36},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[26,157679,157680,157685],{"__ignoreMap":36},[40,157681,157682],{"class":42,"line":43},[40,157683,157684],{"class":997},"# 用户过完生日后，年龄增加一岁\n",[40,157686,157687,157689,157691,157693,157695],{"class":42,"line":54},[40,157688,149115],{"class":50},[40,157690,1284],{"class":1283},[40,157692,19029],{"class":50},[40,157694,3960],{"class":1283},[40,157696,58997],{"class":63},[14,157698,157700],{"id":157699},"_22-字面量","2.2 字面量",[19,157702,157703],{},"字面量就是代码中直接写出来的数据。",[31,157705,157707],{"className":33679,"code":157706,"language":2323,"meta":36,"style":36},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[26,157708,157709,157716,157723,157730,157737],{"__ignoreMap":36},[40,157710,157711,157713],{"class":42,"line":43},[40,157712,3791],{"class":63},[40,157714,157715],{"class":997},"          # 整数\n",[40,157717,157718,157720],{"class":42,"line":54},[40,157719,3534],{"class":63},[40,157721,157722],{"class":997},"         # 小数\n",[40,157724,157725,157727],{"class":42,"line":70},[40,157726,9167],{"class":94},[40,157728,157729],{"class":997},"      # 字符串\n",[40,157731,157732,157734],{"class":42,"line":78},[40,157733,34776],{"class":63},[40,157735,157736],{"class":997},"         # 布尔值\n",[40,157738,157739,157741],{"class":42,"line":86},[40,157740,98981],{"class":63},[40,157742,157743],{"class":997},"         # 空值\n",[19,157745,157746],{},"常见字面量类型：",[3619,157748,157749,157759],{},[3622,157750,157751],{},[3625,157752,157753,157755,157757],{},[3628,157754,27056],{},[3628,157756,30797],{},[3628,157758,29181],{},[3665,157760,157761,157772,157783,157794,157806,157818,157830,157843,157855],{},[3625,157762,157763,157765,157769],{},[3670,157764,3491],{},[3670,157766,157767],{},[26,157768,3791],{},[3670,157770,157771],{},"整数",[3625,157773,157774,157776,157780],{},[3670,157775,3526],{},[3670,157777,157778],{},[26,157779,3534],{},[3670,157781,157782],{},"浮点数",[3625,157784,157785,157787,157791],{},[3670,157786,4646],{},[3670,157788,157789],{},[26,157790,9167],{},[3670,157792,157793],{},"字符串",[3625,157795,157796,157798,157804],{},[3670,157797,4698],{},[3670,157799,157800,3693,157802],{},[26,157801,34776],{},[26,157803,37287],{},[3670,157805,69313],{},[3625,157807,157808,157811,157815],{},[3670,157809,157810],{},"NoneType",[3670,157812,157813],{},[26,157814,98981],{},[3670,157816,157817],{},"空值",[3625,157819,157820,157822,157827],{},[3670,157821,156639],{},[3670,157823,157824],{},[26,157825,157826],{},"[1, 2, 3]",[3670,157828,157829],{},"列表",[3625,157831,157832,157835,157840],{},[3670,157833,157834],{},"tuple",[3670,157836,157837],{},[26,157838,157839],{},"(1, 2, 3)",[3670,157841,157842],{},"元组",[3625,157844,157845,157847,157852],{},[3670,157846,117837],{},[3670,157848,157849],{},[26,157850,157851],{},"{\"name\": \"张三\"}",[3670,157853,157854],{},"字典",[3625,157856,157857,157860,157865],{},[3670,157858,157859],{},"set",[3670,157861,157862],{},[26,157863,157864],{},"{1, 2, 3}",[3670,157866,157867],{},"集合",[14,157869,157871],{"id":157870},"_23-变量","2.3 变量",[19,157873,157874],{},"变量是保存数据的名字。",[31,157876,157878],{"className":33679,"code":157877,"language":2323,"meta":36,"style":36},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[26,157879,157880,157888,157896,157906],{"__ignoreMap":36},[40,157881,157882,157884,157886],{"class":42,"line":43},[40,157883,149105],{"class":50},[40,157885,1284],{"class":1283},[40,157887,151922],{"class":94},[40,157889,157890,157892,157894],{"class":42,"line":54},[40,157891,149115],{"class":50},[40,157893,1284],{"class":1283},[40,157895,149120],{"class":63},[40,157897,157898,157901,157903],{"class":42,"line":70},[40,157899,157900],{"class":50},"height ",[40,157902,1284],{"class":1283},[40,157904,157905],{"class":63}," 1.75\n",[40,157907,157908,157911,157913],{"class":42,"line":78},[40,157909,157910],{"class":50},"is_student ",[40,157912,1284],{"class":1283},[40,157914,156168],{"class":63},[19,157916,157917],{},"Python 的变量不需要提前声明类型：",[31,157919,157921],{"className":33679,"code":157920,"language":2323,"meta":36,"style":36},"score = 100\nscore = \"满分\"\n",[26,157922,157923,157933],{"__ignoreMap":36},[40,157924,157925,157928,157930],{"class":42,"line":43},[40,157926,157927],{"class":50},"score ",[40,157929,1284],{"class":1283},[40,157931,157932],{"class":63}," 100\n",[40,157934,157935,157937,157939],{"class":42,"line":54},[40,157936,157927],{"class":50},[40,157938,1284],{"class":1283},[40,157940,157941],{"class":94}," \"满分\"\n",[19,157943,157944],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,157946,157948],{"id":157947},"_24-变量命名规则","2.4 变量命名规则",[19,157950,157951],{},"硬性规则：",[492,157953,157954,157957,157960,157963],{},[495,157955,157956],{},"只能由字母、数字、下划线组成。",[495,157958,157959],{},"不能以数字开头。",[495,157961,157962],{},"不能使用 Python 关键字。",[495,157964,157965],{},"区分大小写。",[31,157967,157969],{"className":33679,"code":157968,"language":2323,"meta":36,"style":36},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[26,157970,157971,157980,157989],{"__ignoreMap":36},[40,157972,157973,157976,157978],{"class":42,"line":43},[40,157974,157975],{"class":50},"user_name ",[40,157977,1284],{"class":1283},[40,157979,149110],{"class":94},[40,157981,157982,157985,157987],{"class":42,"line":54},[40,157983,157984],{"class":50},"age2 ",[40,157986,1284],{"class":1283},[40,157988,149120],{"class":63},[40,157990,157991,157994,157996],{"class":42,"line":70},[40,157992,157993],{"class":50},"_token ",[40,157995,1284],{"class":1283},[40,157997,157998],{"class":94}," \"abc\"\n",[19,158000,158001],{},"错误写法：",[31,158003,158005],{"className":33679,"code":158004,"language":2323,"meta":36,"style":36},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[26,158006,158007,158016,158028],{"__ignoreMap":36},[40,158008,158009,158012,158014],{"class":42,"line":43},[40,158010,158011],{"class":80698},"2age",[40,158013,16886],{"class":1283},[40,158015,149120],{"class":63},[40,158017,158018,158020,158022,158024,158026],{"class":42,"line":54},[40,158019,134153],{"class":50},[40,158021,4011],{"class":1283},[40,158023,149105],{"class":50},[40,158025,1284],{"class":1283},[40,158027,149110],{"class":94},[40,158029,158030,158032,158034],{"class":42,"line":70},[40,158031,18016],{"class":1283},[40,158033,16886],{"class":1283},[40,158035,158036],{"class":94}," \"一班\"\n",[19,158038,158039],{},"查看关键字：",[31,158041,158043],{"className":33679,"code":158042,"language":2323,"meta":36,"style":36},"import keyword\n\nprint(keyword.kwlist)\n",[26,158044,158045,158052,158056],{"__ignoreMap":36},[40,158046,158047,158049],{"class":42,"line":43},[40,158048,33692],{"class":1283},[40,158050,158051],{"class":50}," keyword\n",[40,158053,158054],{"class":42,"line":54},[40,158055,1413],{"emptyLinePlaceholder":1412},[40,158057,158058,158060],{"class":42,"line":70},[40,158059,33715],{"class":63},[40,158061,158062],{"class":50},"(keyword.kwlist)\n",[19,158064,158065],{},"推荐命名风格：",[31,158067,158069],{"className":33679,"code":158068,"language":2323,"meta":36,"style":36},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[26,158070,158071,158080,158090],{"__ignoreMap":36},[40,158072,158073,158076,158078],{"class":42,"line":43},[40,158074,158075],{"class":50},"student_name ",[40,158077,1284],{"class":1283},[40,158079,151922],{"class":94},[40,158081,158082,158085,158087],{"class":42,"line":54},[40,158083,158084],{"class":50},"total_price ",[40,158086,1284],{"class":1283},[40,158088,158089],{"class":63}," 99.8\n",[40,158091,158092,158095,158097],{"class":42,"line":70},[40,158093,158094],{"class":50},"is_finished ",[40,158096,1284],{"class":1283},[40,158098,128376],{"class":63},[19,158100,158101],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,158103,54032],{"id":54031},[19,158105,107657,158106,158109],{},[26,158107,158108],{},"type()"," 查看数据类型：",[31,158111,158113],{"className":33679,"code":158112,"language":2323,"meta":36,"style":36},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[26,158114,158115,158129,158143,158157,158171],{"__ignoreMap":36},[40,158116,158117,158119,158121,158123,158125,158127],{"class":42,"line":43},[40,158118,33715],{"class":63},[40,158120,3488],{"class":50},[40,158122,106398],{"class":63},[40,158124,3488],{"class":50},[40,158126,3791],{"class":63},[40,158128,33797],{"class":50},[40,158130,158131,158133,158135,158137,158139,158141],{"class":42,"line":54},[40,158132,33715],{"class":63},[40,158134,3488],{"class":50},[40,158136,106398],{"class":63},[40,158138,3488],{"class":50},[40,158140,3534],{"class":63},[40,158142,33797],{"class":50},[40,158144,158145,158147,158149,158151,158153,158155],{"class":42,"line":70},[40,158146,33715],{"class":63},[40,158148,3488],{"class":50},[40,158150,106398],{"class":63},[40,158152,3488],{"class":50},[40,158154,9167],{"class":94},[40,158156,33797],{"class":50},[40,158158,158159,158161,158163,158165,158167,158169],{"class":42,"line":78},[40,158160,33715],{"class":63},[40,158162,3488],{"class":50},[40,158164,106398],{"class":63},[40,158166,3488],{"class":50},[40,158168,34776],{"class":63},[40,158170,33797],{"class":50},[40,158172,158173,158175,158177,158179,158181,158183],{"class":42,"line":86},[40,158174,33715],{"class":63},[40,158176,3488],{"class":50},[40,158178,106398],{"class":63},[40,158180,3488],{"class":50},[40,158182,98981],{"class":63},[40,158184,33797],{"class":50},[19,158186,158187],{},"输出类似：",[31,158189,158192],{"className":158190,"code":158191,"language":8510,"meta":36},[8508],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[26,158193,158191],{"__ignoreMap":36},[19,158195,12347,158196,110574,158198,158200,158201,158203,158204,24821,158206,158203,158208,158210],{},[26,158197,4698],{},[26,158199,3491],{}," 的子类，",[26,158202,34776],{}," 可以当作 ",[26,158205,3698],{},[26,158207,37287],{},[26,158209,3672],{},"，但业务代码中不要滥用。",[31,158212,158214],{"className":33679,"code":158213,"language":2323,"meta":36,"style":36},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[26,158215,158216,158234],{"__ignoreMap":36},[40,158217,158218,158220,158222,158224,158226,158228,158231],{"class":42,"line":43},[40,158219,33715],{"class":63},[40,158221,3488],{"class":50},[40,158223,34776],{"class":63},[40,158225,48866],{"class":1283},[40,158227,28431],{"class":63},[40,158229,158230],{"class":50},")   ",[40,158232,158233],{"class":997},"# 2\n",[40,158235,158236,158238,158240,158242,158244,158246,158248],{"class":42,"line":54},[40,158237,33715],{"class":63},[40,158239,3488],{"class":50},[40,158241,37287],{"class":63},[40,158243,48866],{"class":1283},[40,158245,28431],{"class":63},[40,158247,49108],{"class":50},[40,158249,158250],{"class":997},"# 1\n",[14,158252,158254],{"id":158253},"_26-类型转换","2.6 类型转换",[19,158256,158257],{},"常用转换函数：",[31,158259,158261],{"className":33679,"code":158260,"language":2323,"meta":36,"style":36},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[26,158262,158263,158273,158284,158294],{"__ignoreMap":36},[40,158264,158265,158267,158269,158271],{"class":42,"line":43},[40,158266,3491],{"class":63},[40,158268,3488],{"class":50},[40,158270,57614],{"class":94},[40,158272,1811],{"class":50},[40,158274,158275,158277,158279,158282],{"class":42,"line":54},[40,158276,3526],{"class":63},[40,158278,3488],{"class":50},[40,158280,158281],{"class":94},"\"3.14\"",[40,158283,1811],{"class":50},[40,158285,158286,158288,158290,158292],{"class":42,"line":70},[40,158287,4646],{"class":63},[40,158289,3488],{"class":50},[40,158291,3791],{"class":63},[40,158293,1811],{"class":50},[40,158295,158296,158298,158300,158302],{"class":42,"line":78},[40,158297,4698],{"class":63},[40,158299,3488],{"class":50},[40,158301,3698],{"class":63},[40,158303,1811],{"class":50},[19,158305,18457],{},[31,158307,158309],{"className":33679,"code":158308,"language":2323,"meta":36,"style":36},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[26,158310,158311,158320,158331],{"__ignoreMap":36},[40,158312,158313,158315,158317],{"class":42,"line":43},[40,158314,149115],{"class":50},[40,158316,1284],{"class":1283},[40,158318,158319],{"class":94}," \"18\"\n",[40,158321,158322,158324,158326,158328],{"class":42,"line":54},[40,158323,149115],{"class":50},[40,158325,1284],{"class":1283},[40,158327,5708],{"class":63},[40,158329,158330],{"class":50},"(age)\n",[40,158332,158333,158335,158338,158340,158342],{"class":42,"line":70},[40,158334,33715],{"class":63},[40,158336,158337],{"class":50},"(age ",[40,158339,3960],{"class":1283},[40,158341,28431],{"class":63},[40,158343,1811],{"class":50},[19,158345,158346],{},"输入得到的内容永远是字符串：",[31,158348,158350],{"className":33679,"code":158349,"language":2323,"meta":36,"style":36},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[26,158351,158352,158368],{"__ignoreMap":36},[40,158353,158354,158357,158359,158361,158363,158366],{"class":42,"line":43},[40,158355,158356],{"class":50},"num ",[40,158358,1284],{"class":1283},[40,158360,63903],{"class":63},[40,158362,3488],{"class":50},[40,158364,158365],{"class":94},"\"请输入数字:\"",[40,158367,1811],{"class":50},[40,158369,158370,158372,158374,158376,158379],{"class":42,"line":54},[40,158371,33715],{"class":63},[40,158373,3488],{"class":50},[40,158375,106398],{"class":63},[40,158377,158378],{"class":50},"(num))  ",[40,158380,158381],{"class":997},"# str\n",[19,158383,158384],{},"如果要做数学运算，必须转换：",[31,158386,158388],{"className":33679,"code":158387,"language":2323,"meta":36,"style":36},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[26,158389,158390,158408],{"__ignoreMap":36},[40,158391,158392,158394,158396,158398,158400,158402,158404,158406],{"class":42,"line":43},[40,158393,158356],{"class":50},[40,158395,1284],{"class":1283},[40,158397,5708],{"class":63},[40,158399,3488],{"class":50},[40,158401,57119],{"class":63},[40,158403,3488],{"class":50},[40,158405,158365],{"class":94},[40,158407,33797],{"class":50},[40,158409,158410,158412,158414,158416,158418],{"class":42,"line":54},[40,158411,33715],{"class":63},[40,158413,48919],{"class":50},[40,158415,3960],{"class":1283},[40,158417,5364],{"class":63},[40,158419,1811],{"class":50},[19,158421,158422],{},"常见错误：",[31,158424,158426],{"className":33679,"code":158425,"language":2323,"meta":36,"style":36},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[26,158427,158428,158441],{"__ignoreMap":36},[40,158429,158430,158432,158434,158436,158438],{"class":42,"line":43},[40,158431,3491],{"class":63},[40,158433,3488],{"class":50},[40,158435,158281],{"class":94},[40,158437,158230],{"class":50},[40,158439,158440],{"class":997},"# 错误\n",[40,158442,158443,158445,158447,158450,158453],{"class":42,"line":54},[40,158444,3491],{"class":63},[40,158446,3488],{"class":50},[40,158448,158449],{"class":94},"\"abc\"",[40,158451,158452],{"class":50},")    ",[40,158454,158440],{"class":997},[19,158456,158457],{},"正确写法：",[31,158459,158461],{"className":33679,"code":158460,"language":2323,"meta":36,"style":36},"num = float(\"3.14\")\n",[26,158462,158463],{"__ignoreMap":36},[40,158464,158465,158467,158469,158471,158473,158475],{"class":42,"line":43},[40,158466,158356],{"class":50},[40,158468,1284],{"class":1283},[40,158470,113088],{"class":63},[40,158472,3488],{"class":50},[40,158474,158281],{"class":94},[40,158476,1811],{"class":50},[14,158478,158480],{"id":158479},"_27-运算符","2.7 运算符",[402,158482,158484],{"id":158483},"_271-算术运算符","2.7.1 算术运算符",[3619,158486,158487,158498],{},[3622,158488,158489],{},[3625,158490,158491,158494,158496],{},[3628,158492,158493],{},"运算符",[3628,158495,29181],{},[3628,158497,30797],{},[3665,158499,158500,158514,158528,158542,158556,158570,158584],{},[3625,158501,158502,158506,158509],{},[3670,158503,158504],{},[26,158505,3960],{},[3670,158507,158508],{},"加法",[3670,158510,158511],{},[26,158512,158513],{},"1 + 2",[3625,158515,158516,158520,158523],{},[3670,158517,158518],{},[26,158519,4011],{},[3670,158521,158522],{},"减法",[3670,158524,158525],{},[26,158526,158527],{},"5 - 3",[3625,158529,158530,158534,158537],{},[3670,158531,158532],{},[26,158533,3934],{},[3670,158535,158536],{},"乘法",[3670,158538,158539],{},[26,158540,158541],{},"2 * 3",[3625,158543,158544,158548,158551],{},[3670,158545,158546],{},[26,158547,4063],{},[3670,158549,158550],{},"除法，结果是浮点数",[3670,158552,158553],{},[26,158554,158555],{},"5 \u002F 2",[3625,158557,158558,158562,158565],{},[3670,158559,158560],{},[26,158561,36629],{},[3670,158563,158564],{},"整除",[3670,158566,158567],{},[26,158568,158569],{},"5 \u002F\u002F 2",[3625,158571,158572,158576,158579],{},[3670,158573,158574],{},[26,158575,3808],{},[3670,158577,158578],{},"取余",[3670,158580,158581],{},[26,158582,158583],{},"5 % 2",[3625,158585,158586,158590,158593],{},[3670,158587,158588],{},[26,158589,13983],{},[3670,158591,158592],{},"幂运算",[3670,158594,158595],{},[26,158596,158597],{},"2 ** 3",[19,158599,18457],{},[31,158601,158603],{"className":33679,"code":158602,"language":2323,"meta":36,"style":36},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[26,158604,158605,158623,158640,158657],{"__ignoreMap":36},[40,158606,158607,158609,158611,158613,158616,158618,158620],{"class":42,"line":43},[40,158608,33715],{"class":63},[40,158610,3488],{"class":50},[40,158612,3799],{"class":63},[40,158614,158615],{"class":1283}," \u002F",[40,158617,18077],{"class":63},[40,158619,158230],{"class":50},[40,158621,158622],{"class":997},"# 2.5\n",[40,158624,158625,158627,158629,158631,158634,158636,158638],{"class":42,"line":54},[40,158626,33715],{"class":63},[40,158628,3488],{"class":50},[40,158630,3799],{"class":63},[40,158632,158633],{"class":1283}," \u002F\u002F",[40,158635,18077],{"class":63},[40,158637,49108],{"class":50},[40,158639,158233],{"class":997},[40,158641,158642,158644,158646,158648,158651,158653,158655],{"class":42,"line":70},[40,158643,33715],{"class":63},[40,158645,3488],{"class":50},[40,158647,3799],{"class":63},[40,158649,158650],{"class":1283}," %",[40,158652,18077],{"class":63},[40,158654,158230],{"class":50},[40,158656,158250],{"class":997},[40,158658,158659,158661,158663,158665,158668,158670,158672],{"class":42,"line":78},[40,158660,33715],{"class":63},[40,158662,3488],{"class":50},[40,158664,64],{"class":63},[40,158666,158667],{"class":1283}," **",[40,158669,81365],{"class":63},[40,158671,49108],{"class":50},[40,158673,158674],{"class":997},"# 8\n",[402,158676,158678],{"id":158677},"_272-赋值运算符","2.7.2 赋值运算符",[31,158680,158682],{"className":33679,"code":158681,"language":2323,"meta":36,"style":36},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[26,158683,158684,158692,158700,158708,158716],{"__ignoreMap":36},[40,158685,158686,158688,158690],{"class":42,"line":43},[40,158687,158356],{"class":50},[40,158689,1284],{"class":1283},[40,158691,61726],{"class":63},[40,158693,158694,158696,158698],{"class":42,"line":54},[40,158695,158356],{"class":50},[40,158697,12799],{"class":1283},[40,158699,57725],{"class":63},[40,158701,158702,158704,158706],{"class":42,"line":70},[40,158703,158356],{"class":50},[40,158705,152821],{"class":1283},[40,158707,51023],{"class":63},[40,158709,158710,158712,158714],{"class":42,"line":78},[40,158711,158356],{"class":50},[40,158713,139717],{"class":1283},[40,158715,123319],{"class":63},[40,158717,158718,158720,158723],{"class":42,"line":86},[40,158719,158356],{"class":50},[40,158721,158722],{"class":1283},"\u002F=",[40,158724,51023],{"class":63},[19,158726,158727],{},"等价关系：",[31,158729,158731],{"className":33679,"code":158730,"language":2323,"meta":36,"style":36},"num += 1\nnum = num + 1\n",[26,158732,158733,158741],{"__ignoreMap":36},[40,158734,158735,158737,158739],{"class":42,"line":43},[40,158736,158356],{"class":50},[40,158738,12799],{"class":1283},[40,158740,58997],{"class":63},[40,158742,158743,158745,158747,158750,158752],{"class":42,"line":54},[40,158744,158356],{"class":50},[40,158746,1284],{"class":1283},[40,158748,158749],{"class":50}," num ",[40,158751,3960],{"class":1283},[40,158753,58997],{"class":63},[19,158755,158756,158757,104312,158760,776],{},"Python 没有 ",[26,158758,158759],{},"num++",[26,158761,158762],{},"num--",[402,158764,158766],{"id":158765},"_273-比较运算符","2.7.3 比较运算符",[19,158768,158769],{},"比较运算结果是布尔值。",[31,158771,158773],{"className":33679,"code":158772,"language":2323,"meta":36,"style":36},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[26,158774,158775,158789,158804,158818],{"__ignoreMap":36},[40,158776,158777,158779,158781,158783,158785,158787],{"class":42,"line":43},[40,158778,33715],{"class":63},[40,158780,3488],{"class":50},[40,158782,3925],{"class":63},[40,158784,29533],{"class":1283},[40,158786,5474],{"class":63},[40,158788,1811],{"class":50},[40,158790,158791,158793,158795,158797,158800,158802],{"class":42,"line":54},[40,158792,33715],{"class":63},[40,158794,3488],{"class":50},[40,158796,3925],{"class":63},[40,158798,158799],{"class":1283}," >=",[40,158801,5364],{"class":63},[40,158803,1811],{"class":50},[40,158805,158806,158808,158810,158812,158814,158816],{"class":42,"line":70},[40,158807,33715],{"class":63},[40,158809,3488],{"class":50},[40,158811,3925],{"class":63},[40,158813,104850],{"class":1283},[40,158815,5409],{"class":63},[40,158817,1811],{"class":50},[40,158819,158820,158822,158824,158826,158829,158831],{"class":42,"line":78},[40,158821,33715],{"class":63},[40,158823,3488],{"class":50},[40,158825,3925],{"class":63},[40,158827,158828],{"class":1283}," !=",[40,158830,5409],{"class":63},[40,158832,1811],{"class":50},[19,158834,158835,158836,158838,158839,776],{},"注意：判断相等用 ",[26,158837,6273],{},"，赋值用 ",[26,158840,1284],{},[31,158842,158844],{"className":33679,"code":158843,"language":2323,"meta":36,"style":36},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[26,158845,158846,158858],{"__ignoreMap":36},[40,158847,158848,158850,158852,158855],{"class":42,"line":43},[40,158849,149115],{"class":50},[40,158851,1284],{"class":1283},[40,158853,158854],{"class":63}," 18",[40,158856,158857],{"class":997},"       # 赋值\n",[40,158859,158860,158862,158864,158866],{"class":42,"line":54},[40,158861,149115],{"class":50},[40,158863,6273],{"class":1283},[40,158865,158854],{"class":63},[40,158867,158868],{"class":997},"      # 判断是否相等\n",[402,158870,158872],{"id":158871},"_274-逻辑运算符","2.7.4 逻辑运算符",[3619,158874,158875,158883],{},[3622,158876,158877],{},[3625,158878,158879,158881],{},[3628,158880,158493],{},[3628,158882,29181],{},[3665,158884,158885,158894,158903],{},[3625,158886,158887,158891],{},[3670,158888,158889],{},[26,158890,33762],{},[3670,158892,158893],{},"并且",[3625,158895,158896,158900],{},[3670,158897,158898],{},[26,158899,118381],{},[3670,158901,158902],{},"或者",[3625,158904,158905,158910],{},[3670,158906,158907],{},[26,158908,158909],{},"not",[3670,158911,158912],{},"取反",[31,158914,158916],{"className":33679,"code":158915,"language":2323,"meta":36,"style":36},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[26,158917,158918,158926,158935,158939,158954,158968],{"__ignoreMap":36},[40,158919,158920,158922,158924],{"class":42,"line":43},[40,158921,149115],{"class":50},[40,158923,1284],{"class":1283},[40,158925,91360],{"class":63},[40,158927,158928,158931,158933],{"class":42,"line":54},[40,158929,158930],{"class":50},"has_ticket ",[40,158932,1284],{"class":1283},[40,158934,156168],{"class":63},[40,158936,158937],{"class":42,"line":70},[40,158938,1413],{"emptyLinePlaceholder":1412},[40,158940,158941,158943,158945,158947,158949,158951],{"class":42,"line":78},[40,158942,33715],{"class":63},[40,158944,158337],{"class":50},[40,158946,5041],{"class":1283},[40,158948,158854],{"class":63},[40,158950,123711],{"class":1283},[40,158952,158953],{"class":50}," has_ticket)\n",[40,158955,158956,158958,158960,158962,158964,158966],{"class":42,"line":86},[40,158957,33715],{"class":63},[40,158959,158337],{"class":50},[40,158961,4387],{"class":1283},[40,158963,158854],{"class":63},[40,158965,117492],{"class":1283},[40,158967,158953],{"class":50},[40,158969,158970,158972,158974,158976],{"class":42,"line":100},[40,158971,33715],{"class":63},[40,158973,3488],{"class":50},[40,158975,158909],{"class":1283},[40,158977,158953],{"class":50},[14,158979,158981],{"id":158980},"_28-字符串定义","2.8 字符串定义",[19,158983,158984],{},"三种常见写法：",[31,158986,158988],{"className":33679,"code":158987,"language":2323,"meta":36,"style":36},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[26,158989,158990,159000,159009,159019],{"__ignoreMap":36},[40,158991,158992,158995,158997],{"class":42,"line":43},[40,158993,158994],{"class":50},"name1 ",[40,158996,1284],{"class":1283},[40,158998,158999],{"class":94}," '小明'\n",[40,159001,159002,159005,159007],{"class":42,"line":54},[40,159003,159004],{"class":50},"name2 ",[40,159006,1284],{"class":1283},[40,159008,151922],{"class":94},[40,159010,159011,159014,159016],{"class":42,"line":70},[40,159012,159013],{"class":50},"text ",[40,159015,1284],{"class":1283},[40,159017,159018],{"class":94}," \"\"\"这是多行字符串\n",[40,159020,159021],{"class":42,"line":78},[40,159022,159023],{"class":94},"可以换行\"\"\"\n",[19,159025,159026],{},"字符串中包含引号：",[31,159028,159030],{"className":33679,"code":159029,"language":2323,"meta":36,"style":36},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[26,159031,159032,159042,159052],{"__ignoreMap":36},[40,159033,159034,159037,159039],{"class":42,"line":43},[40,159035,159036],{"class":50},"msg ",[40,159038,1284],{"class":1283},[40,159040,159041],{"class":94}," \"他说:'你好'\"\n",[40,159043,159044,159047,159049],{"class":42,"line":54},[40,159045,159046],{"class":50},"msg2 ",[40,159048,1284],{"class":1283},[40,159050,159051],{"class":94}," '他说:\"你好\"'\n",[40,159053,159054,159057,159059,159062,159065,159068,159070],{"class":42,"line":70},[40,159055,159056],{"class":50},"msg3 ",[40,159058,1284],{"class":1283},[40,159060,159061],{"class":94}," \"他说:",[40,159063,159064],{"class":63},"\\\"",[40,159066,159067],{"class":94},"你好",[40,159069,159064],{"class":63},[40,159071,28446],{"class":94},[19,159073,159074],{},"常见转义字符：",[3619,159076,159077,159086],{},[3622,159078,159079],{},[3625,159080,159081,159084],{},[3628,159082,159083],{},"写法",[3628,159085,103995],{},[3665,159087,159088,159098,159107,159117,159126],{},[3625,159089,159090,159095],{},[3670,159091,159092],{},[26,159093,159094],{},"\\n",[3670,159096,159097],{},"换行",[3625,159099,159100,159104],{},[3670,159101,159102],{},[26,159103,4577],{},[3670,159105,159106],{},"制表符",[3625,159108,159109,159114],{},[3670,159110,159111],{},[26,159112,159113],{},"\\\\",[3670,159115,159116],{},"反斜杠",[3625,159118,159119,159123],{},[3670,159120,159121],{},[26,159122,159064],{},[3670,159124,159125],{},"双引号",[3625,159127,159128,159133],{},[3670,159129,159130],{},[26,159131,159132],{},"\\'",[3670,159134,159135],{},"单引号",[14,159137,159139],{"id":159138},"_29-字符串拼接","2.9 字符串拼接",[31,159141,159143],{"className":33679,"code":159142,"language":2323,"meta":36,"style":36},"name = \"小明\"\nprint(\"你好，\" + name)\n",[26,159144,159145,159153],{"__ignoreMap":36},[40,159146,159147,159149,159151],{"class":42,"line":43},[40,159148,149105],{"class":50},[40,159150,1284],{"class":1283},[40,159152,151922],{"class":94},[40,159154,159155,159157,159159,159162,159164],{"class":42,"line":54},[40,159156,33715],{"class":63},[40,159158,3488],{"class":50},[40,159160,159161],{"class":94},"\"你好，\"",[40,159163,48866],{"class":1283},[40,159165,159166],{"class":50}," name)\n",[19,159168,159169],{},"字符串只能和字符串拼接：",[31,159171,159173],{"className":33679,"code":159172,"language":2323,"meta":36,"style":36},"age = 18\nprint(\"年龄:\" + str(age))\n",[26,159174,159175,159183],{"__ignoreMap":36},[40,159176,159177,159179,159181],{"class":42,"line":43},[40,159178,149115],{"class":50},[40,159180,1284],{"class":1283},[40,159182,149120],{"class":63},[40,159184,159185,159187,159189,159191,159193,159195],{"class":42,"line":54},[40,159186,33715],{"class":63},[40,159188,3488],{"class":50},[40,159190,149086],{"class":94},[40,159192,48866],{"class":1283},[40,159194,77214],{"class":63},[40,159196,159197],{"class":50},"(age))\n",[19,159199,159200],{},"更推荐使用格式化字符串。",[14,159202,159204],{"id":159203},"_210-字符串格式化","2.10 字符串格式化",[402,159206,159208],{"id":159207},"_2101-百分号格式化","2.10.1 百分号格式化",[31,159210,159212],{"className":33679,"code":159211,"language":2323,"meta":36,"style":36},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[26,159213,159214,159222,159230,159239,159243],{"__ignoreMap":36},[40,159215,159216,159218,159220],{"class":42,"line":43},[40,159217,149105],{"class":50},[40,159219,1284],{"class":1283},[40,159221,151922],{"class":94},[40,159223,159224,159226,159228],{"class":42,"line":54},[40,159225,149115],{"class":50},[40,159227,1284],{"class":1283},[40,159229,149120],{"class":63},[40,159231,159232,159234,159236],{"class":42,"line":70},[40,159233,157927],{"class":50},[40,159235,1284],{"class":1283},[40,159237,159238],{"class":63}," 95.5\n",[40,159240,159241],{"class":42,"line":78},[40,159242,1413],{"emptyLinePlaceholder":1412},[40,159244,159245,159247,159249,159252,159255,159258,159261,159264,159267,159269,159271],{"class":42,"line":86},[40,159246,33715],{"class":63},[40,159248,3488],{"class":50},[40,159250,159251],{"class":94},"\"姓名:",[40,159253,159254],{"class":63},"%s",[40,159256,159257],{"class":94}," 年龄:",[40,159259,159260],{"class":63},"%d",[40,159262,159263],{"class":94}," 分数:",[40,159265,159266],{"class":63},"%.1f",[40,159268,3731],{"class":94},[40,159270,158650],{"class":1283},[40,159272,159273],{"class":50}," (name, age, score))\n",[19,159275,159276],{},"常用占位符：",[3619,159278,159279,159288],{},[3622,159280,159281],{},[3625,159282,159283,159286],{},[3628,159284,159285],{},"占位符",[3628,159287,29181],{},[3665,159289,159290,159298,159306],{},[3625,159291,159292,159296],{},[3670,159293,159294],{},[26,159295,159254],{},[3670,159297,157793],{},[3625,159299,159300,159304],{},[3670,159301,159302],{},[26,159303,159260],{},[3670,159305,157771],{},[3625,159307,159308,159313],{},[3670,159309,159310],{},[26,159311,159312],{},"%f",[3670,159314,157782],{},[19,159316,159317],{},"精度控制：",[31,159319,159321],{"className":33679,"code":159320,"language":2323,"meta":36,"style":36},"price = 12.3456\nprint(\"%.2f\" % price)\n",[26,159322,159323,159332],{"__ignoreMap":36},[40,159324,159325,159327,159329],{"class":42,"line":43},[40,159326,149250],{"class":50},[40,159328,1284],{"class":1283},[40,159330,159331],{"class":63}," 12.3456\n",[40,159333,159334,159336,159338,159340,159343,159345,159347],{"class":42,"line":54},[40,159335,33715],{"class":63},[40,159337,3488],{"class":50},[40,159339,3731],{"class":94},[40,159341,159342],{"class":63},"%.2f",[40,159344,3731],{"class":94},[40,159346,158650],{"class":1283},[40,159348,159349],{"class":50}," price)\n",[402,159351,159353],{"id":159352},"_2102-format方法","2.10.2 format方法",[31,159355,159357],{"className":33679,"code":159356,"language":2323,"meta":36,"style":36},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[26,159358,159359,159367,159375,159379,159398,159418],{"__ignoreMap":36},[40,159360,159361,159363,159365],{"class":42,"line":43},[40,159362,149105],{"class":50},[40,159364,1284],{"class":1283},[40,159366,151922],{"class":94},[40,159368,159369,159371,159373],{"class":42,"line":54},[40,159370,149115],{"class":50},[40,159372,1284],{"class":1283},[40,159374,149120],{"class":63},[40,159376,159377],{"class":42,"line":70},[40,159378,1413],{"emptyLinePlaceholder":1412},[40,159380,159381,159383,159385,159387,159389,159391,159393,159395],{"class":42,"line":78},[40,159382,33715],{"class":63},[40,159384,3488],{"class":50},[40,159386,159251],{"class":94},[40,159388,35759],{"class":63},[40,159390,159257],{"class":94},[40,159392,35759],{"class":63},[40,159394,3731],{"class":94},[40,159396,159397],{"class":50},".format(name, age))\n",[40,159399,159400,159402,159404,159406,159409,159411,159414,159416],{"class":42,"line":86},[40,159401,33715],{"class":63},[40,159403,3488],{"class":50},[40,159405,159251],{"class":94},[40,159407,159408],{"class":63},"{0}",[40,159410,159257],{"class":94},[40,159412,159413],{"class":63},"{1}",[40,159415,3731],{"class":94},[40,159417,159397],{"class":50},[40,159419,159420,159422,159424,159426,159429,159431,159434,159436,159439,159441,159443,159446,159448,159450],{"class":42,"line":100},[40,159421,33715],{"class":63},[40,159423,3488],{"class":50},[40,159425,159251],{"class":94},[40,159427,159428],{"class":63},"{name}",[40,159430,159257],{"class":94},[40,159432,159433],{"class":63},"{age}",[40,159435,3731],{"class":94},[40,159437,159438],{"class":50},".format(",[40,159440,83105],{"class":8539},[40,159442,1284],{"class":1283},[40,159444,159445],{"class":50},"name, ",[40,159447,73517],{"class":8539},[40,159449,1284],{"class":1283},[40,159451,159452],{"class":50},"age))\n",[402,159454,159456],{"id":159455},"_2103-f-string","2.10.3 f-string",[19,159458,159459],{},"推荐写法：",[31,159461,159463],{"className":33679,"code":159462,"language":2323,"meta":36,"style":36},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[26,159464,159465,159473,159481,159489,159493],{"__ignoreMap":36},[40,159466,159467,159469,159471],{"class":42,"line":43},[40,159468,149105],{"class":50},[40,159470,1284],{"class":1283},[40,159472,151922],{"class":94},[40,159474,159475,159477,159479],{"class":42,"line":54},[40,159476,149115],{"class":50},[40,159478,1284],{"class":1283},[40,159480,149120],{"class":63},[40,159482,159483,159485,159487],{"class":42,"line":70},[40,159484,157927],{"class":50},[40,159486,1284],{"class":1283},[40,159488,159238],{"class":63},[40,159490,159491],{"class":42,"line":78},[40,159492,1413],{"emptyLinePlaceholder":1412},[40,159494,159495,159497,159499,159501,159503,159505,159507,159509,159511,159513,159515,159517,159519,159521,159524,159527,159529,159531],{"class":42,"line":86},[40,159496,33715],{"class":63},[40,159498,3488],{"class":50},[40,159500,3537],{"class":1283},[40,159502,159251],{"class":94},[40,159504,4373],{"class":63},[40,159506,83105],{"class":50},[40,159508,4423],{"class":63},[40,159510,159257],{"class":94},[40,159512,4373],{"class":63},[40,159514,73517],{"class":50},[40,159516,4423],{"class":63},[40,159518,159263],{"class":94},[40,159520,4373],{"class":63},[40,159522,159523],{"class":50},"score",[40,159525,159526],{"class":1283},":.1f",[40,159528,4423],{"class":63},[40,159530,3731],{"class":94},[40,159532,1811],{"class":50},[19,159534,159535],{},"表达式也可以放进去：",[31,159537,159539],{"className":33679,"code":159538,"language":2323,"meta":36,"style":36},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[26,159540,159541,159549,159557],{"__ignoreMap":36},[40,159542,159543,159545,159547],{"class":42,"line":43},[40,159544,149250],{"class":50},[40,159546,1284],{"class":1283},[40,159548,149255],{"class":63},[40,159550,159551,159553,159555],{"class":42,"line":54},[40,159552,149260],{"class":50},[40,159554,1284],{"class":1283},[40,159556,57725],{"class":63},[40,159558,159559,159561,159563,159565,159568,159570,159572,159574,159577,159579,159582],{"class":42,"line":70},[40,159560,33715],{"class":63},[40,159562,3488],{"class":50},[40,159564,3537],{"class":1283},[40,159566,159567],{"class":94},"\"总价:",[40,159569,4373],{"class":63},[40,159571,149250],{"class":50},[40,159573,3934],{"class":1283},[40,159575,159576],{"class":50}," count",[40,159578,4423],{"class":63},[40,159580,159581],{"class":94},"元\"",[40,159583,1811],{"class":50},[14,159585,159587],{"id":159586},"_211-input输入","2.11 input输入",[19,159589,159590,159593],{},[26,159591,159592],{},"input()"," 会暂停程序，等待用户输入。",[31,159595,159597],{"className":33679,"code":159596,"language":2323,"meta":36,"style":36},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[26,159598,159599,159613],{"__ignoreMap":36},[40,159600,159601,159603,159605,159607,159609,159611],{"class":42,"line":43},[40,159602,149105],{"class":50},[40,159604,1284],{"class":1283},[40,159606,63903],{"class":63},[40,159608,3488],{"class":50},[40,159610,154948],{"class":94},[40,159612,1811],{"class":50},[40,159614,159615,159617,159619,159621,159624,159626,159628,159630,159632],{"class":42,"line":54},[40,159616,33715],{"class":63},[40,159618,3488],{"class":50},[40,159620,3537],{"class":1283},[40,159622,159623],{"class":94},"\"你好，",[40,159625,4373],{"class":63},[40,159627,83105],{"class":50},[40,159629,4423],{"class":63},[40,159631,3731],{"class":94},[40,159633,1811],{"class":50},[19,159635,159636],{},"输入整数：",[31,159638,159640],{"className":33679,"code":159639,"language":2323,"meta":36,"style":36},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[26,159641,159642,159660],{"__ignoreMap":36},[40,159643,159644,159646,159648,159650,159652,159654,159656,159658],{"class":42,"line":43},[40,159645,149115],{"class":50},[40,159647,1284],{"class":1283},[40,159649,5708],{"class":63},[40,159651,3488],{"class":50},[40,159653,57119],{"class":63},[40,159655,3488],{"class":50},[40,159657,154963],{"class":94},[40,159659,33797],{"class":50},[40,159661,159662,159664,159666,159668,159671,159673,159675,159677,159680,159682],{"class":42,"line":54},[40,159663,33715],{"class":63},[40,159665,3488],{"class":50},[40,159667,3537],{"class":1283},[40,159669,159670],{"class":94},"\"明年你",[40,159672,4373],{"class":63},[40,159674,149115],{"class":50},[40,159676,3960],{"class":1283},[40,159678,159679],{"class":63}," 1}",[40,159681,151973],{"class":94},[40,159683,1811],{"class":50},[19,159685,159686],{},"输入小数：",[31,159688,159690],{"className":33679,"code":159689,"language":2323,"meta":36,"style":36},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[26,159691,159692,159711],{"__ignoreMap":36},[40,159693,159694,159696,159698,159700,159702,159704,159706,159709],{"class":42,"line":43},[40,159695,157900],{"class":50},[40,159697,1284],{"class":1283},[40,159699,113088],{"class":63},[40,159701,3488],{"class":50},[40,159703,57119],{"class":63},[40,159705,3488],{"class":50},[40,159707,159708],{"class":94},"\"请输入身高:\"",[40,159710,33797],{"class":50},[40,159712,159713,159715,159717,159719,159722,159724,159726,159729,159731,159734],{"class":42,"line":54},[40,159714,33715],{"class":63},[40,159716,3488],{"class":50},[40,159718,3537],{"class":1283},[40,159720,159721],{"class":94},"\"身高:",[40,159723,4373],{"class":63},[40,159725,28296],{"class":50},[40,159727,159728],{"class":1283},":.2f",[40,159730,4423],{"class":63},[40,159732,159733],{"class":94},"米\"",[40,159735,1811],{"class":50},[14,159737,159739],{"id":159738},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,159741,1205],{},[492,159743,159744,159747,159750,159753],{},[495,159745,159746],{},"输入商品单价。",[495,159748,159749],{},"输入购买数量。",[495,159751,159752],{},"输入折扣，例如 0.8 表示八折。",[495,159754,159755],{},"输出最终金额，保留两位小数。",[19,159757,13357],{},[31,159759,159761],{"className":33679,"code":159760,"language":2323,"meta":36,"style":36},"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",[26,159762,159763,159782,159801,159821,159825,159845,159849,159872,159893,159915],{"__ignoreMap":36},[40,159764,159765,159767,159769,159771,159773,159775,159777,159780],{"class":42,"line":43},[40,159766,149250],{"class":50},[40,159768,1284],{"class":1283},[40,159770,113088],{"class":63},[40,159772,3488],{"class":50},[40,159774,57119],{"class":63},[40,159776,3488],{"class":50},[40,159778,159779],{"class":94},"\"请输入商品单价:\"",[40,159781,33797],{"class":50},[40,159783,159784,159786,159788,159790,159792,159794,159796,159799],{"class":42,"line":54},[40,159785,149260],{"class":50},[40,159787,1284],{"class":1283},[40,159789,5708],{"class":63},[40,159791,3488],{"class":50},[40,159793,57119],{"class":63},[40,159795,3488],{"class":50},[40,159797,159798],{"class":94},"\"请输入购买数量:\"",[40,159800,33797],{"class":50},[40,159802,159803,159806,159808,159810,159812,159814,159816,159819],{"class":42,"line":70},[40,159804,159805],{"class":50},"discount ",[40,159807,1284],{"class":1283},[40,159809,113088],{"class":63},[40,159811,3488],{"class":50},[40,159813,57119],{"class":63},[40,159815,3488],{"class":50},[40,159817,159818],{"class":94},"\"请输入折扣:\"",[40,159820,33797],{"class":50},[40,159822,159823],{"class":42,"line":78},[40,159824,1413],{"emptyLinePlaceholder":1412},[40,159826,159827,159830,159832,159835,159837,159840,159842],{"class":42,"line":86},[40,159828,159829],{"class":50},"total ",[40,159831,1284],{"class":1283},[40,159833,159834],{"class":50}," price ",[40,159836,3934],{"class":1283},[40,159838,159839],{"class":50}," count ",[40,159841,3934],{"class":1283},[40,159843,159844],{"class":50}," discount\n",[40,159846,159847],{"class":42,"line":100},[40,159848,1413],{"emptyLinePlaceholder":1412},[40,159850,159851,159853,159855,159857,159860,159862,159864,159866,159868,159870],{"class":42,"line":108},[40,159852,33715],{"class":63},[40,159854,3488],{"class":50},[40,159856,3537],{"class":1283},[40,159858,159859],{"class":94},"\"商品单价:",[40,159861,4373],{"class":63},[40,159863,83110],{"class":50},[40,159865,159728],{"class":1283},[40,159867,4423],{"class":63},[40,159869,3731],{"class":94},[40,159871,1811],{"class":50},[40,159873,159874,159876,159878,159880,159883,159885,159887,159889,159891],{"class":42,"line":121},[40,159875,33715],{"class":63},[40,159877,3488],{"class":50},[40,159879,3537],{"class":1283},[40,159881,159882],{"class":94},"\"购买数量:",[40,159884,4373],{"class":63},[40,159886,87729],{"class":50},[40,159888,4423],{"class":63},[40,159890,3731],{"class":94},[40,159892,1811],{"class":50},[40,159894,159895,159897,159899,159901,159904,159906,159909,159911,159913],{"class":42,"line":134},[40,159896,33715],{"class":63},[40,159898,3488],{"class":50},[40,159900,3537],{"class":1283},[40,159902,159903],{"class":94},"\"折扣:",[40,159905,4373],{"class":63},[40,159907,159908],{"class":50},"discount",[40,159910,4423],{"class":63},[40,159912,3731],{"class":94},[40,159914,1811],{"class":50},[40,159916,159917,159919,159921,159923,159926,159928,159931,159933,159935,159937],{"class":42,"line":146},[40,159918,33715],{"class":63},[40,159920,3488],{"class":50},[40,159922,3537],{"class":1283},[40,159924,159925],{"class":94},"\"应付金额:",[40,159927,4373],{"class":63},[40,159929,159930],{"class":50},"total",[40,159932,159728],{"class":1283},[40,159934,4423],{"class":63},[40,159936,159581],{"class":94},[40,159938,1811],{"class":50},[14,159940,159942],{"id":159941},"_213-易错点","2.13 易错点",[492,159944,159945,159950,159956,159964,159967],{},[495,159946,159947,159949],{},[26,159948,159592],{}," 的结果是字符串，做运算前要转换。",[495,159951,159952,159953,776],{},"字符串拼接时，数字要先 ",[26,159954,159955],{},"str()",[495,159957,159958,159960,159961,159963],{},[26,159959,1284],{}," 是赋值，",[26,159962,6273],{}," 是比较。",[495,159965,159966],{},"Python 没有自增自减运算符。",[495,159968,159969],{},"浮点数计算可能有精度误差：",[31,159971,159973],{"className":33679,"code":159972,"language":2323,"meta":36,"style":36},"print(0.1 + 0.2)\n",[26,159974,159975],{"__ignoreMap":36},[40,159976,159977,159979,159981,159983,159985,159988],{"class":42,"line":43},[40,159978,33715],{"class":63},[40,159980,3488],{"class":50},[40,159982,89505],{"class":63},[40,159984,48866],{"class":1283},[40,159986,159987],{"class":63}," 0.2",[40,159989,1811],{"class":50},[19,159991,159992,159993,159996],{},"金额计算如果要求严格，可以后续学习 ",[26,159994,159995],{},"decimal"," 模块。",[14,159998,160000],{"id":159999},"_214-本章练习","2.14 本章练习",[492,160002,160003,160006,160009,160012,160015],{},[495,160004,160005],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[495,160007,160008],{},"输入圆的半径，计算面积，保留两位小数。",[495,160010,160011],{},"输入工资和奖金，计算总收入。",[495,160013,160014],{},"输入摄氏温度，转换为华氏温度。",[495,160016,160017],{},"写一个 BMI 计算程序：",[31,160019,160022],{"className":160020,"code":160021,"language":8510,"meta":36},[8508],"BMI = 体重kg \u002F 身高m ** 2\n",[26,160023,160021],{"__ignoreMap":36},[3384,160025,160026],{},"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":36,"searchDepth":54,"depth":54,"links":160028},[160029,160030,160031,160032,160033,160034,160035,160041,160042,160043,160048,160049,160050,160051],{"id":157590,"depth":54,"text":157591},{"id":157699,"depth":54,"text":157700},{"id":157870,"depth":54,"text":157871},{"id":157947,"depth":54,"text":157948},{"id":54031,"depth":54,"text":54032},{"id":158253,"depth":54,"text":158254},{"id":158479,"depth":54,"text":158480,"children":160036},[160037,160038,160039,160040],{"id":158483,"depth":70,"text":158484},{"id":158677,"depth":70,"text":158678},{"id":158765,"depth":70,"text":158766},{"id":158871,"depth":70,"text":158872},{"id":158980,"depth":54,"text":158981},{"id":159138,"depth":54,"text":159139},{"id":159203,"depth":54,"text":159204,"children":160044},[160045,160046,160047],{"id":159207,"depth":70,"text":159208},{"id":159352,"depth":70,"text":159353},{"id":159455,"depth":70,"text":159456},{"id":159586,"depth":54,"text":159587},{"id":159738,"depth":54,"text":159739},{"id":159941,"depth":54,"text":159942},{"id":159999,"depth":54,"text":160000},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":157582,"description":3413},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":160058,"title":160059,"body":160060,"description":3413,"extension":3414,"meta":161696,"navigation":1412,"path":161697,"seo":161698,"stem":161699,"__hash__":161700},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":160061,"toc":161677},[160062,160065,160069,160072,160087,160090,160118,160122,160172,160174,160190,160193,160219,160222,160226,160293,160296,160312,160316,160319,160437,160440,160447,160496,160502,160506,160509,160622,160625,160629,160633,160636,160686,160690,160693,160743,160747,160750,160788,160792,160795,160841,160844,160879,160883,160888,160891,160937,160939,161006,161010,161016,161127,161136,161140,161142,161153,161155,161321,161325,161327,161341,161343,161557,161561,161580,161597,161600,161646,161650,161674],[10,160063,160059],{"id":160064},"_3-判断语句",[14,160066,160068],{"id":160067},"_31-布尔值","3.1 布尔值",[19,160070,160071],{},"判断语句依赖布尔值：",[31,160073,160075],{"className":33679,"code":160074,"language":2323,"meta":36,"style":36},"True\nFalse\n",[26,160076,160077,160082],{"__ignoreMap":36},[40,160078,160079],{"class":42,"line":43},[40,160080,160081],{"class":63},"True\n",[40,160083,160084],{"class":42,"line":54},[40,160085,160086],{"class":63},"False\n",[19,160088,160089],{},"比较表达式会产生布尔值：",[31,160091,160093],{"className":33679,"code":160092,"language":2323,"meta":36,"style":36},"age = 18\nprint(age >= 18)  # True\n",[26,160094,160095,160103],{"__ignoreMap":36},[40,160096,160097,160099,160101],{"class":42,"line":43},[40,160098,149115],{"class":50},[40,160100,1284],{"class":1283},[40,160102,149120],{"class":63},[40,160104,160105,160107,160109,160111,160113,160115],{"class":42,"line":54},[40,160106,33715],{"class":63},[40,160108,158337],{"class":50},[40,160110,5041],{"class":1283},[40,160112,158854],{"class":63},[40,160114,49108],{"class":50},[40,160116,160117],{"class":997},"# True\n",[14,160119,160121],{"id":160120},"_32-if基础语法","3.2 if基础语法",[31,160123,160125],{"className":33679,"code":160124,"language":2323,"meta":36,"style":36},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[26,160126,160127,160145,160149,160161],{"__ignoreMap":36},[40,160128,160129,160131,160133,160135,160137,160139,160141,160143],{"class":42,"line":43},[40,160130,149115],{"class":50},[40,160132,1284],{"class":1283},[40,160134,5708],{"class":63},[40,160136,3488],{"class":50},[40,160138,57119],{"class":63},[40,160140,3488],{"class":50},[40,160142,154963],{"class":94},[40,160144,33797],{"class":50},[40,160146,160147],{"class":42,"line":54},[40,160148,1413],{"emptyLinePlaceholder":1412},[40,160150,160151,160153,160155,160157,160159],{"class":42,"line":70},[40,160152,4873],{"class":1283},[40,160154,19029],{"class":50},[40,160156,5041],{"class":1283},[40,160158,158854],{"class":63},[40,160160,332],{"class":50},[40,160162,160163,160165,160167,160170],{"class":42,"line":78},[40,160164,34599],{"class":63},[40,160166,3488],{"class":50},[40,160168,160169],{"class":94},"\"可以进入网吧\"",[40,160171,1811],{"class":50},[19,160173,12347],{},[492,160175,160176,160181,160184,160187],{},[495,160177,160178,160180],{},[26,160179,4873],{}," 后面是条件表达式。",[495,160182,160183],{},"条件后面必须写冒号。",[495,160185,160186],{},"条件成立时执行缩进代码块。",[495,160188,160189],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,160191,160192],{},"错误示例：",[31,160194,160196],{"className":33679,"code":160195,"language":2323,"meta":36,"style":36},"if age >= 18\n    print(\"可以进入\")\n",[26,160197,160198,160208],{"__ignoreMap":36},[40,160199,160200,160202,160204,160206],{"class":42,"line":43},[40,160201,4873],{"class":1283},[40,160203,19029],{"class":50},[40,160205,5041],{"class":1283},[40,160207,149120],{"class":63},[40,160209,160210,160212,160214,160217],{"class":42,"line":54},[40,160211,34599],{"class":63},[40,160213,3488],{"class":50},[40,160215,160216],{"class":94},"\"可以进入\"",[40,160218,1811],{"class":50},[19,160220,160221],{},"缺少冒号。",[14,160223,160225],{"id":160224},"_33-if-else","3.3 if else",[31,160227,160229],{"className":33679,"code":160228,"language":2323,"meta":36,"style":36},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[26,160230,160231,160249,160253,160265,160276,160282],{"__ignoreMap":36},[40,160232,160233,160235,160237,160239,160241,160243,160245,160247],{"class":42,"line":43},[40,160234,149115],{"class":50},[40,160236,1284],{"class":1283},[40,160238,5708],{"class":63},[40,160240,3488],{"class":50},[40,160242,57119],{"class":63},[40,160244,3488],{"class":50},[40,160246,154963],{"class":94},[40,160248,33797],{"class":50},[40,160250,160251],{"class":42,"line":54},[40,160252,1413],{"emptyLinePlaceholder":1412},[40,160254,160255,160257,160259,160261,160263],{"class":42,"line":70},[40,160256,4873],{"class":1283},[40,160258,19029],{"class":50},[40,160260,5041],{"class":1283},[40,160262,158854],{"class":63},[40,160264,332],{"class":50},[40,160266,160267,160269,160271,160274],{"class":42,"line":78},[40,160268,34599],{"class":63},[40,160270,3488],{"class":50},[40,160272,160273],{"class":94},"\"成年人\"",[40,160275,1811],{"class":50},[40,160277,160278,160280],{"class":42,"line":86},[40,160279,5032],{"class":1283},[40,160281,332],{"class":50},[40,160283,160284,160286,160288,160291],{"class":42,"line":100},[40,160285,34599],{"class":63},[40,160287,3488],{"class":50},[40,160289,160290],{"class":94},"\"未成年人\"",[40,160292,1811],{"class":50},[19,160294,160295],{},"执行逻辑：",[492,160297,160298,160304,160309],{},[495,160299,160300,160301,160303],{},"条件成立，执行 ",[26,160302,4873],{}," 代码块。",[495,160305,160306,160307,160303],{},"条件不成立，执行 ",[26,160308,5032],{},[495,160310,160311],{},"两个代码块只会执行其中一个。",[14,160313,160315],{"id":160314},"_34-if-elif-else","3.4 if elif else",[19,160317,160318],{},"多条件判断：",[31,160320,160322],{"className":33679,"code":160321,"language":2323,"meta":36,"style":36},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[26,160323,160324,160342,160346,160360,160371,160385,160396,160409,160420,160426],{"__ignoreMap":36},[40,160325,160326,160328,160330,160332,160334,160336,160338,160340],{"class":42,"line":43},[40,160327,157927],{"class":50},[40,160329,1284],{"class":1283},[40,160331,5708],{"class":63},[40,160333,3488],{"class":50},[40,160335,57119],{"class":63},[40,160337,3488],{"class":50},[40,160339,154978],{"class":94},[40,160341,33797],{"class":50},[40,160343,160344],{"class":42,"line":54},[40,160345,1413],{"emptyLinePlaceholder":1412},[40,160347,160348,160350,160353,160355,160358],{"class":42,"line":70},[40,160349,4873],{"class":1283},[40,160351,160352],{"class":50}," score ",[40,160354,5041],{"class":1283},[40,160356,160357],{"class":63}," 90",[40,160359,332],{"class":50},[40,160361,160362,160364,160366,160369],{"class":42,"line":78},[40,160363,34599],{"class":63},[40,160365,3488],{"class":50},[40,160367,160368],{"class":94},"\"优秀\"",[40,160370,1811],{"class":50},[40,160372,160373,160376,160378,160380,160383],{"class":42,"line":86},[40,160374,160375],{"class":1283},"elif",[40,160377,160352],{"class":50},[40,160379,5041],{"class":1283},[40,160381,160382],{"class":63}," 80",[40,160384,332],{"class":50},[40,160386,160387,160389,160391,160394],{"class":42,"line":100},[40,160388,34599],{"class":63},[40,160390,3488],{"class":50},[40,160392,160393],{"class":94},"\"良好\"",[40,160395,1811],{"class":50},[40,160397,160398,160400,160402,160404,160407],{"class":42,"line":108},[40,160399,160375],{"class":1283},[40,160401,160352],{"class":50},[40,160403,5041],{"class":1283},[40,160405,160406],{"class":63}," 60",[40,160408,332],{"class":50},[40,160410,160411,160413,160415,160418],{"class":42,"line":121},[40,160412,34599],{"class":63},[40,160414,3488],{"class":50},[40,160416,160417],{"class":94},"\"及格\"",[40,160419,1811],{"class":50},[40,160421,160422,160424],{"class":42,"line":134},[40,160423,5032],{"class":1283},[40,160425,332],{"class":50},[40,160427,160428,160430,160432,160435],{"class":42,"line":146},[40,160429,34599],{"class":63},[40,160431,3488],{"class":50},[40,160433,160434],{"class":94},"\"不及格\"",[40,160436,1811],{"class":50},[19,160438,160439],{},"注意判断顺序很重要。",[19,160441,160442,160443,160446],{},"如果把 ",[26,160444,160445],{},"score >= 60"," 放在最前面：",[31,160448,160450],{"className":33679,"code":160449,"language":2323,"meta":36,"style":36},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[26,160451,160452,160464,160474,160486],{"__ignoreMap":36},[40,160453,160454,160456,160458,160460,160462],{"class":42,"line":43},[40,160455,4873],{"class":1283},[40,160457,160352],{"class":50},[40,160459,5041],{"class":1283},[40,160461,160406],{"class":63},[40,160463,332],{"class":50},[40,160465,160466,160468,160470,160472],{"class":42,"line":54},[40,160467,34599],{"class":63},[40,160469,3488],{"class":50},[40,160471,160417],{"class":94},[40,160473,1811],{"class":50},[40,160475,160476,160478,160480,160482,160484],{"class":42,"line":70},[40,160477,160375],{"class":1283},[40,160479,160352],{"class":50},[40,160481,5041],{"class":1283},[40,160483,160357],{"class":63},[40,160485,332],{"class":50},[40,160487,160488,160490,160492,160494],{"class":42,"line":78},[40,160489,34599],{"class":63},[40,160491,3488],{"class":50},[40,160493,160368],{"class":94},[40,160495,1811],{"class":50},[19,160497,160498,160499,160501],{},"成绩 95 会先满足 ",[26,160500,160445],{},"，后面的优秀分支就不会执行。",[14,160503,160505],{"id":160504},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,160507,160508],{},"嵌套判断就是在一个判断内部再写判断。",[31,160510,160512],{"className":33679,"code":160511,"language":2323,"meta":36,"style":36},"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",[26,160513,160514,160532,160547,160551,160563,160577,160587,160594,160605,160611],{"__ignoreMap":36},[40,160515,160516,160518,160520,160522,160524,160526,160528,160530],{"class":42,"line":43},[40,160517,149115],{"class":50},[40,160519,1284],{"class":1283},[40,160521,5708],{"class":63},[40,160523,3488],{"class":50},[40,160525,57119],{"class":63},[40,160527,3488],{"class":50},[40,160529,154963],{"class":94},[40,160531,33797],{"class":50},[40,160533,160534,160536,160538,160540,160542,160545],{"class":42,"line":54},[40,160535,158930],{"class":50},[40,160537,1284],{"class":1283},[40,160539,63903],{"class":63},[40,160541,3488],{"class":50},[40,160543,160544],{"class":94},"\"是否有票(y\u002Fn):\"",[40,160546,1811],{"class":50},[40,160548,160549],{"class":42,"line":70},[40,160550,1413],{"emptyLinePlaceholder":1412},[40,160552,160553,160555,160557,160559,160561],{"class":42,"line":78},[40,160554,4873],{"class":1283},[40,160556,19029],{"class":50},[40,160558,5041],{"class":1283},[40,160560,158854],{"class":63},[40,160562,332],{"class":50},[40,160564,160565,160567,160570,160572,160575],{"class":42,"line":86},[40,160566,6425],{"class":1283},[40,160568,160569],{"class":50}," has_ticket ",[40,160571,6273],{"class":1283},[40,160573,160574],{"class":94}," \"y\"",[40,160576,332],{"class":50},[40,160578,160579,160581,160583,160585],{"class":42,"line":100},[40,160580,35751],{"class":63},[40,160582,3488],{"class":50},[40,160584,160216],{"class":94},[40,160586,1811],{"class":50},[40,160588,160589,160592],{"class":42,"line":108},[40,160590,160591],{"class":1283},"    else",[40,160593,332],{"class":50},[40,160595,160596,160598,160600,160603],{"class":42,"line":121},[40,160597,35751],{"class":63},[40,160599,3488],{"class":50},[40,160601,160602],{"class":94},"\"请先买票\"",[40,160604,1811],{"class":50},[40,160606,160607,160609],{"class":42,"line":134},[40,160608,5032],{"class":1283},[40,160610,332],{"class":50},[40,160612,160613,160615,160617,160620],{"class":42,"line":146},[40,160614,34599],{"class":63},[40,160616,3488],{"class":50},[40,160618,160619],{"class":94},"\"未成年人禁止进入\"",[40,160621,1811],{"class":50},[19,160623,160624],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,160626,160628],{"id":160627},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[402,160630,160632],{"id":160631},"_361-and","3.6.1 and",[19,160634,160635],{},"两个条件都成立才成立。",[31,160637,160639],{"className":33679,"code":160638,"language":2323,"meta":36,"style":36},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[26,160640,160641,160649,160657,160661,160676],{"__ignoreMap":36},[40,160642,160643,160645,160647],{"class":42,"line":43},[40,160644,149115],{"class":50},[40,160646,1284],{"class":1283},[40,160648,91360],{"class":63},[40,160650,160651,160653,160655],{"class":42,"line":54},[40,160652,158930],{"class":50},[40,160654,1284],{"class":1283},[40,160656,156168],{"class":63},[40,160658,160659],{"class":42,"line":70},[40,160660,1413],{"emptyLinePlaceholder":1412},[40,160662,160663,160665,160667,160669,160671,160673],{"class":42,"line":78},[40,160664,4873],{"class":1283},[40,160666,19029],{"class":50},[40,160668,5041],{"class":1283},[40,160670,158854],{"class":63},[40,160672,123711],{"class":1283},[40,160674,160675],{"class":50}," has_ticket:\n",[40,160677,160678,160680,160682,160684],{"class":42,"line":86},[40,160679,34599],{"class":63},[40,160681,3488],{"class":50},[40,160683,160216],{"class":94},[40,160685,1811],{"class":50},[402,160687,160689],{"id":160688},"_362-or","3.6.2 or",[19,160691,160692],{},"只要一个条件成立就成立。",[31,160694,160696],{"className":33679,"code":160695,"language":2323,"meta":36,"style":36},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[26,160697,160698,160707,160716,160720,160732],{"__ignoreMap":36},[40,160699,160700,160703,160705],{"class":42,"line":43},[40,160701,160702],{"class":50},"is_vip ",[40,160704,1284],{"class":1283},[40,160706,128376],{"class":63},[40,160708,160709,160712,160714],{"class":42,"line":54},[40,160710,160711],{"class":50},"coupon ",[40,160713,1284],{"class":1283},[40,160715,156168],{"class":63},[40,160717,160718],{"class":42,"line":70},[40,160719,1413],{"emptyLinePlaceholder":1412},[40,160721,160722,160724,160727,160729],{"class":42,"line":78},[40,160723,4873],{"class":1283},[40,160725,160726],{"class":50}," is_vip ",[40,160728,118381],{"class":1283},[40,160730,160731],{"class":50}," coupon:\n",[40,160733,160734,160736,160738,160741],{"class":42,"line":86},[40,160735,34599],{"class":63},[40,160737,3488],{"class":50},[40,160739,160740],{"class":94},"\"可以享受优惠\"",[40,160742,1811],{"class":50},[402,160744,160746],{"id":160745},"_363-not","3.6.3 not",[19,160748,160749],{},"取反。",[31,160751,160753],{"className":33679,"code":160752,"language":2323,"meta":36,"style":36},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[26,160754,160755,160764,160768,160777],{"__ignoreMap":36},[40,160756,160757,160760,160762],{"class":42,"line":43},[40,160758,160759],{"class":50},"is_closed ",[40,160761,1284],{"class":1283},[40,160763,128376],{"class":63},[40,160765,160766],{"class":42,"line":54},[40,160767,1413],{"emptyLinePlaceholder":1412},[40,160769,160770,160772,160774],{"class":42,"line":70},[40,160771,4873],{"class":1283},[40,160773,42230],{"class":1283},[40,160775,160776],{"class":50}," is_closed:\n",[40,160778,160779,160781,160783,160786],{"class":42,"line":78},[40,160780,34599],{"class":63},[40,160782,3488],{"class":50},[40,160784,160785],{"class":94},"\"店铺营业中\"",[40,160787,1811],{"class":50},[14,160789,160791],{"id":160790},"_37-链式比较","3.7 链式比较",[19,160793,160794],{},"Python 支持链式比较：",[31,160796,160798],{"className":33679,"code":160797,"language":2323,"meta":36,"style":36},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[26,160799,160800,160809,160813,160830],{"__ignoreMap":36},[40,160801,160802,160804,160806],{"class":42,"line":43},[40,160803,157927],{"class":50},[40,160805,1284],{"class":1283},[40,160807,160808],{"class":63}," 85\n",[40,160810,160811],{"class":42,"line":54},[40,160812,1413],{"emptyLinePlaceholder":1412},[40,160814,160815,160817,160819,160822,160824,160826,160828],{"class":42,"line":70},[40,160816,4873],{"class":1283},[40,160818,7416],{"class":63},[40,160820,160821],{"class":1283}," \u003C=",[40,160823,160352],{"class":50},[40,160825,4930],{"class":1283},[40,160827,9077],{"class":63},[40,160829,332],{"class":50},[40,160831,160832,160834,160836,160839],{"class":42,"line":78},[40,160833,34599],{"class":63},[40,160835,3488],{"class":50},[40,160837,160838],{"class":94},"\"成绩合法\"",[40,160840,1811],{"class":50},[19,160842,160843],{},"等价于：",[31,160845,160847],{"className":33679,"code":160846,"language":2323,"meta":36,"style":36},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[26,160848,160849,160869],{"__ignoreMap":36},[40,160850,160851,160853,160855,160857,160859,160861,160863,160865,160867],{"class":42,"line":43},[40,160852,4873],{"class":1283},[40,160854,160352],{"class":50},[40,160856,5041],{"class":1283},[40,160858,7416],{"class":63},[40,160860,123711],{"class":1283},[40,160862,160352],{"class":50},[40,160864,4930],{"class":1283},[40,160866,9077],{"class":63},[40,160868,332],{"class":50},[40,160870,160871,160873,160875,160877],{"class":42,"line":54},[40,160872,34599],{"class":63},[40,160874,3488],{"class":50},[40,160876,160838],{"class":94},[40,160878,1811],{"class":50},[14,160880,160882],{"id":160881},"_38-真值和假值","3.8 真值和假值",[19,160884,119758,160885,160887],{},[26,160886,4873],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,160889,160890],{},"假值：",[31,160892,160894],{"className":33679,"code":160893,"language":2323,"meta":36,"style":36},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[26,160895,160896,160900,160905,160909,160913,160918,160922,160926,160931],{"__ignoreMap":36},[40,160897,160898],{"class":42,"line":43},[40,160899,160086],{"class":63},[40,160901,160902],{"class":42,"line":54},[40,160903,160904],{"class":63},"None\n",[40,160906,160907],{"class":42,"line":70},[40,160908,6409],{"class":63},[40,160910,160911],{"class":42,"line":78},[40,160912,35642],{"class":63},[40,160914,160915],{"class":42,"line":86},[40,160916,160917],{"class":94},"\"\"\n",[40,160919,160920],{"class":42,"line":100},[40,160921,35657],{"class":50},[40,160923,160924],{"class":42,"line":108},[40,160925,5302],{"class":50},[40,160927,160928],{"class":42,"line":121},[40,160929,160930],{"class":50},"{}\n",[40,160932,160933,160935],{"class":42,"line":134},[40,160934,157859],{"class":63},[40,160936,5302],{"class":50},[19,160938,18457],{},[31,160940,160942],{"className":33679,"code":160941,"language":2323,"meta":36,"style":36},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[26,160943,160944,160958,160962,160969,160989,160995],{"__ignoreMap":36},[40,160945,160946,160948,160950,160952,160954,160956],{"class":42,"line":43},[40,160947,149105],{"class":50},[40,160949,1284],{"class":1283},[40,160951,63903],{"class":63},[40,160953,3488],{"class":50},[40,160955,154948],{"class":94},[40,160957,1811],{"class":50},[40,160959,160960],{"class":42,"line":54},[40,160961,1413],{"emptyLinePlaceholder":1412},[40,160963,160964,160966],{"class":42,"line":70},[40,160965,4873],{"class":1283},[40,160967,160968],{"class":50}," name:\n",[40,160970,160971,160973,160975,160977,160979,160981,160983,160985,160987],{"class":42,"line":78},[40,160972,34599],{"class":63},[40,160974,3488],{"class":50},[40,160976,3537],{"class":1283},[40,160978,159623],{"class":94},[40,160980,4373],{"class":63},[40,160982,83105],{"class":50},[40,160984,4423],{"class":63},[40,160986,3731],{"class":94},[40,160988,1811],{"class":50},[40,160990,160991,160993],{"class":42,"line":86},[40,160992,5032],{"class":1283},[40,160994,332],{"class":50},[40,160996,160997,160999,161001,161004],{"class":42,"line":100},[40,160998,34599],{"class":63},[40,161000,3488],{"class":50},[40,161002,161003],{"class":94},"\"姓名不能为空\"",[40,161005,1811],{"class":50},[14,161007,161009],{"id":161008},"_39-match语句","3.9 match语句",[19,161011,161012,161013,161015],{},"Python 3.10 开始支持 ",[26,161014,74561],{},"。它适合处理固定选项。",[31,161017,161019],{"className":33679,"code":161018,"language":2323,"meta":36,"style":36},"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",[26,161020,161021,161037,161041,161048,161058,161069,161078,161089,161098,161109,161116],{"__ignoreMap":36},[40,161022,161023,161026,161028,161030,161032,161035],{"class":42,"line":43},[40,161024,161025],{"class":50},"command ",[40,161027,1284],{"class":1283},[40,161029,63903],{"class":63},[40,161031,3488],{"class":50},[40,161033,161034],{"class":94},"\"请输入命令:\"",[40,161036,1811],{"class":50},[40,161038,161039],{"class":42,"line":54},[40,161040,1413],{"emptyLinePlaceholder":1412},[40,161042,161043,161045],{"class":42,"line":70},[40,161044,74561],{"class":1283},[40,161046,161047],{"class":50}," command:\n",[40,161049,161050,161053,161056],{"class":42,"line":78},[40,161051,161052],{"class":1283},"    case",[40,161054,161055],{"class":94}," \"start\"",[40,161057,332],{"class":50},[40,161059,161060,161062,161064,161067],{"class":42,"line":86},[40,161061,35751],{"class":63},[40,161063,3488],{"class":50},[40,161065,161066],{"class":94},"\"启动\"",[40,161068,1811],{"class":50},[40,161070,161071,161073,161076],{"class":42,"line":100},[40,161072,161052],{"class":1283},[40,161074,161075],{"class":94}," \"stop\"",[40,161077,332],{"class":50},[40,161079,161080,161082,161084,161087],{"class":42,"line":108},[40,161081,35751],{"class":63},[40,161083,3488],{"class":50},[40,161085,161086],{"class":94},"\"停止\"",[40,161088,1811],{"class":50},[40,161090,161091,161093,161096],{"class":42,"line":121},[40,161092,161052],{"class":1283},[40,161094,161095],{"class":94}," \"restart\"",[40,161097,332],{"class":50},[40,161099,161100,161102,161104,161107],{"class":42,"line":134},[40,161101,35751],{"class":63},[40,161103,3488],{"class":50},[40,161105,161106],{"class":94},"\"重启\"",[40,161108,1811],{"class":50},[40,161110,161111,161113],{"class":42,"line":146},[40,161112,161052],{"class":1283},[40,161114,161115],{"class":50}," _:\n",[40,161117,161118,161120,161122,161125],{"class":42,"line":154},[40,161119,35751],{"class":63},[40,161121,3488],{"class":50},[40,161123,161124],{"class":94},"\"未知命令\"",[40,161126,1811],{"class":50},[19,161128,161129,161130,161132,161133,161135],{},"入门阶段掌握 ",[26,161131,157227],{}," 更重要，",[26,161134,74561],{}," 可以作为补充。",[14,161137,161139],{"id":161138},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,161141,1205],{},[492,161143,161144,161147,161150],{},[495,161145,161146],{},"输入成绩。",[495,161148,161149],{},"判断成绩是否合法。",[495,161151,161152],{},"输出等级。",[19,161154,13357],{},[31,161156,161158],{"className":33679,"code":161157,"language":2323,"meta":36,"style":36},"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",[26,161159,161160,161178,161182,161200,161211,161223,161234,161246,161257,161270,161281,161293,161304,161310],{"__ignoreMap":36},[40,161161,161162,161164,161166,161168,161170,161172,161174,161176],{"class":42,"line":43},[40,161163,157927],{"class":50},[40,161165,1284],{"class":1283},[40,161167,113088],{"class":63},[40,161169,3488],{"class":50},[40,161171,57119],{"class":63},[40,161173,3488],{"class":50},[40,161175,154978],{"class":94},[40,161177,33797],{"class":50},[40,161179,161180],{"class":42,"line":54},[40,161181,1413],{"emptyLinePlaceholder":1412},[40,161183,161184,161186,161188,161190,161192,161194,161196,161198],{"class":42,"line":70},[40,161185,4873],{"class":1283},[40,161187,42230],{"class":1283},[40,161189,7416],{"class":63},[40,161191,160821],{"class":1283},[40,161193,160352],{"class":50},[40,161195,4930],{"class":1283},[40,161197,9077],{"class":63},[40,161199,332],{"class":50},[40,161201,161202,161204,161206,161209],{"class":42,"line":78},[40,161203,34599],{"class":63},[40,161205,3488],{"class":50},[40,161207,161208],{"class":94},"\"成绩不合法\"",[40,161210,1811],{"class":50},[40,161212,161213,161215,161217,161219,161221],{"class":42,"line":86},[40,161214,160375],{"class":1283},[40,161216,160352],{"class":50},[40,161218,5041],{"class":1283},[40,161220,160357],{"class":63},[40,161222,332],{"class":50},[40,161224,161225,161227,161229,161232],{"class":42,"line":100},[40,161226,34599],{"class":63},[40,161228,3488],{"class":50},[40,161230,161231],{"class":94},"\"等级:A\"",[40,161233,1811],{"class":50},[40,161235,161236,161238,161240,161242,161244],{"class":42,"line":108},[40,161237,160375],{"class":1283},[40,161239,160352],{"class":50},[40,161241,5041],{"class":1283},[40,161243,160382],{"class":63},[40,161245,332],{"class":50},[40,161247,161248,161250,161252,161255],{"class":42,"line":121},[40,161249,34599],{"class":63},[40,161251,3488],{"class":50},[40,161253,161254],{"class":94},"\"等级:B\"",[40,161256,1811],{"class":50},[40,161258,161259,161261,161263,161265,161268],{"class":42,"line":134},[40,161260,160375],{"class":1283},[40,161262,160352],{"class":50},[40,161264,5041],{"class":1283},[40,161266,161267],{"class":63}," 70",[40,161269,332],{"class":50},[40,161271,161272,161274,161276,161279],{"class":42,"line":146},[40,161273,34599],{"class":63},[40,161275,3488],{"class":50},[40,161277,161278],{"class":94},"\"等级:C\"",[40,161280,1811],{"class":50},[40,161282,161283,161285,161287,161289,161291],{"class":42,"line":154},[40,161284,160375],{"class":1283},[40,161286,160352],{"class":50},[40,161288,5041],{"class":1283},[40,161290,160406],{"class":63},[40,161292,332],{"class":50},[40,161294,161295,161297,161299,161302],{"class":42,"line":162},[40,161296,34599],{"class":63},[40,161298,3488],{"class":50},[40,161300,161301],{"class":94},"\"等级:D\"",[40,161303,1811],{"class":50},[40,161305,161306,161308],{"class":42,"line":170},[40,161307,5032],{"class":1283},[40,161309,332],{"class":50},[40,161311,161312,161314,161316,161319],{"class":42,"line":183},[40,161313,34599],{"class":63},[40,161315,3488],{"class":50},[40,161317,161318],{"class":94},"\"等级:E\"",[40,161320,1811],{"class":50},[14,161322,161324],{"id":161323},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,161326,1205],{},[492,161328,161329,161332,161335,161338],{},[495,161330,161331],{},"输入消费金额。",[495,161333,161334],{},"输入会员等级，普通、银卡、金卡。",[495,161336,161337],{},"普通不打折，银卡 9 折，金卡 8 折。",[495,161339,161340],{},"满 500 再减 50。",[19,161342,13357],{},[31,161344,161346],{"className":33679,"code":161345,"language":2323,"meta":36,"style":36},"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",[26,161347,161348,161368,161384,161388,161396,161400,161414,161424,161437,161446,161459,161467,161473,161484,161488,161502,161506,161520,161530,161534],{"__ignoreMap":36},[40,161349,161350,161353,161355,161357,161359,161361,161363,161366],{"class":42,"line":43},[40,161351,161352],{"class":50},"amount ",[40,161354,1284],{"class":1283},[40,161356,113088],{"class":63},[40,161358,3488],{"class":50},[40,161360,57119],{"class":63},[40,161362,3488],{"class":50},[40,161364,161365],{"class":94},"\"请输入消费金额:\"",[40,161367,33797],{"class":50},[40,161369,161370,161373,161375,161377,161379,161382],{"class":42,"line":54},[40,161371,161372],{"class":50},"level ",[40,161374,1284],{"class":1283},[40,161376,63903],{"class":63},[40,161378,3488],{"class":50},[40,161380,161381],{"class":94},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[40,161383,1811],{"class":50},[40,161385,161386],{"class":42,"line":70},[40,161387,1413],{"emptyLinePlaceholder":1412},[40,161389,161390,161392,161394],{"class":42,"line":78},[40,161391,159805],{"class":50},[40,161393,1284],{"class":1283},[40,161395,58997],{"class":63},[40,161397,161398],{"class":42,"line":86},[40,161399,1413],{"emptyLinePlaceholder":1412},[40,161401,161402,161404,161407,161409,161412],{"class":42,"line":100},[40,161403,4873],{"class":1283},[40,161405,161406],{"class":50}," level ",[40,161408,6273],{"class":1283},[40,161410,161411],{"class":94}," \"银卡\"",[40,161413,332],{"class":50},[40,161415,161416,161419,161421],{"class":42,"line":108},[40,161417,161418],{"class":50},"    discount ",[40,161420,1284],{"class":1283},[40,161422,161423],{"class":63}," 0.9\n",[40,161425,161426,161428,161430,161432,161435],{"class":42,"line":121},[40,161427,160375],{"class":1283},[40,161429,161406],{"class":50},[40,161431,6273],{"class":1283},[40,161433,161434],{"class":94}," \"金卡\"",[40,161436,332],{"class":50},[40,161438,161439,161441,161443],{"class":42,"line":134},[40,161440,161418],{"class":50},[40,161442,1284],{"class":1283},[40,161444,161445],{"class":63}," 0.8\n",[40,161447,161448,161450,161452,161454,161457],{"class":42,"line":146},[40,161449,160375],{"class":1283},[40,161451,161406],{"class":50},[40,161453,6273],{"class":1283},[40,161455,161456],{"class":94}," \"普通\"",[40,161458,332],{"class":50},[40,161460,161461,161463,161465],{"class":42,"line":154},[40,161462,161418],{"class":50},[40,161464,1284],{"class":1283},[40,161466,58997],{"class":63},[40,161468,161469,161471],{"class":42,"line":162},[40,161470,5032],{"class":1283},[40,161472,332],{"class":50},[40,161474,161475,161477,161479,161482],{"class":42,"line":170},[40,161476,34599],{"class":63},[40,161478,3488],{"class":50},[40,161480,161481],{"class":94},"\"会员等级输入错误，按普通会员计算\"",[40,161483,1811],{"class":50},[40,161485,161486],{"class":42,"line":183},[40,161487,1413],{"emptyLinePlaceholder":1412},[40,161489,161490,161493,161495,161498,161500],{"class":42,"line":196},[40,161491,161492],{"class":50},"pay ",[40,161494,1284],{"class":1283},[40,161496,161497],{"class":50}," amount ",[40,161499,3934],{"class":1283},[40,161501,159844],{"class":50},[40,161503,161504],{"class":42,"line":204},[40,161505,1413],{"emptyLinePlaceholder":1412},[40,161507,161508,161510,161513,161515,161518],{"class":42,"line":217},[40,161509,4873],{"class":1283},[40,161511,161512],{"class":50}," pay ",[40,161514,5041],{"class":1283},[40,161516,161517],{"class":63}," 500",[40,161519,332],{"class":50},[40,161521,161522,161525,161527],{"class":42,"line":230},[40,161523,161524],{"class":50},"    pay ",[40,161526,152821],{"class":1283},[40,161528,161529],{"class":63}," 50\n",[40,161531,161532],{"class":42,"line":238},[40,161533,1413],{"emptyLinePlaceholder":1412},[40,161535,161536,161538,161540,161542,161544,161546,161549,161551,161553,161555],{"class":42,"line":251},[40,161537,33715],{"class":63},[40,161539,3488],{"class":50},[40,161541,3537],{"class":1283},[40,161543,159925],{"class":94},[40,161545,4373],{"class":63},[40,161547,161548],{"class":50},"pay",[40,161550,159728],{"class":1283},[40,161552,4423],{"class":63},[40,161554,159581],{"class":94},[40,161556,1811],{"class":50},[14,161558,161560],{"id":161559},"_312-易错点","3.12 易错点",[492,161562,161563,161566,161569,161572,161577],{},[495,161564,161565],{},"冒号不能漏。",[495,161567,161568],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[495,161570,161571],{},"多分支判断要注意顺序。",[495,161573,161574,161575,776],{},"判断相等用 ",[26,161576,6273],{},[495,161578,161579],{},"字符串比较区分大小写：",[31,161581,161583],{"className":33679,"code":161582,"language":2323,"meta":36,"style":36},"\"Y\" == \"y\"  # False\n",[26,161584,161585],{"__ignoreMap":36},[40,161586,161587,161590,161592,161594],{"class":42,"line":43},[40,161588,161589],{"class":94},"\"Y\"",[40,161591,104850],{"class":1283},[40,161593,160574],{"class":94},[40,161595,161596],{"class":997},"  # False\n",[19,161598,161599],{},"可转换后再判断：",[31,161601,161603],{"className":33679,"code":161602,"language":2323,"meta":36,"style":36},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[26,161604,161605,161622,161635],{"__ignoreMap":36},[40,161606,161607,161610,161612,161614,161616,161619],{"class":42,"line":43},[40,161608,161609],{"class":50},"answer ",[40,161611,1284],{"class":1283},[40,161613,63903],{"class":63},[40,161615,3488],{"class":50},[40,161617,161618],{"class":94},"\"是否继续(y\u002Fn):\"",[40,161620,161621],{"class":50},").lower()\n",[40,161623,161624,161626,161629,161631,161633],{"class":42,"line":54},[40,161625,4873],{"class":1283},[40,161627,161628],{"class":50}," answer ",[40,161630,6273],{"class":1283},[40,161632,160574],{"class":94},[40,161634,332],{"class":50},[40,161636,161637,161639,161641,161644],{"class":42,"line":70},[40,161638,34599],{"class":63},[40,161640,3488],{"class":50},[40,161642,161643],{"class":94},"\"继续\"",[40,161645,1811],{"class":50},[14,161647,161649],{"id":161648},"_313-本章练习","3.13 本章练习",[492,161651,161652,161655,161658,161661,161671],{},[495,161653,161654],{},"输入年龄，判断是否成年。",[495,161656,161657],{},"输入年份，判断是否为闰年。",[495,161659,161660],{},"输入三个数字，输出最大值。",[495,161662,161663,161664,161667,161668,161670],{},"写登录判断：用户名是 ",[26,161665,161666],{},"admin"," 且密码是 ",[26,161669,18406],{}," 才登录成功。",[495,161672,161673],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[3384,161675,161676],{},"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":36,"searchDepth":54,"depth":54,"links":161678},[161679,161680,161681,161682,161683,161684,161689,161690,161691,161692,161693,161694,161695],{"id":160067,"depth":54,"text":160068},{"id":160120,"depth":54,"text":160121},{"id":160224,"depth":54,"text":160225},{"id":160314,"depth":54,"text":160315},{"id":160504,"depth":54,"text":160505},{"id":160627,"depth":54,"text":160628,"children":161685},[161686,161687,161688],{"id":160631,"depth":70,"text":160632},{"id":160688,"depth":70,"text":160689},{"id":160745,"depth":70,"text":160746},{"id":160790,"depth":54,"text":160791},{"id":160881,"depth":54,"text":160882},{"id":161008,"depth":54,"text":161009},{"id":161138,"depth":54,"text":161139},{"id":161323,"depth":54,"text":161324},{"id":161559,"depth":54,"text":161560},{"id":161648,"depth":54,"text":161649},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":160059,"description":3413},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":161702,"title":161703,"body":161704,"description":3413,"extension":3414,"meta":163473,"navigation":1412,"path":163474,"seo":163475,"stem":163476,"__hash__":163477},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":161705,"toc":163453},[161706,161709,161713,161719,161722,161739,161743,161745,161762,161764,161809,161811,161828,161832,161835,161901,161904,161922,161926,162087,162096,162100,162104,162109,162156,162158,162164,162168,162173,162220,162222,162228,162232,162237,162273,162276,162323,162327,162333,162391,162396,162427,162432,162436,162491,162494,162566,162569,162628,162632,162635,162710,162713,162717,162823,162826,162852,162856,162868,162937,162940,163032,163036,163038,163049,163051,163181,163185,163387,163395,163399,163429,163433,163450],[10,161707,161703],{"id":161708},"_4-循环语句",[14,161710,161712],{"id":161711},"_41-为什么需要循环","4.1 为什么需要循环",[19,161714,161715,161716,161718],{},"如果要输出 1 到 100，不应该写 100 行 ",[26,161717,149041],{},"，而应该用循环。",[19,161720,161721],{},"循环适合处理重复任务：",[492,161723,161724,161727,161730,161733,161736],{},[495,161725,161726],{},"重复输出。",[495,161728,161729],{},"重复输入。",[495,161731,161732],{},"遍历数据。",[495,161734,161735],{},"持续执行菜单。",[495,161737,161738],{},"批量处理文件或数据。",[14,161740,161742],{"id":161741},"_42-while循环","4.2 while循环",[19,161744,8504],{},[31,161746,161748],{"className":33679,"code":161747,"language":2323,"meta":36,"style":36},"while 条件:\n    循环体\n",[26,161749,161750,161757],{"__ignoreMap":36},[40,161751,161752,161754],{"class":42,"line":43},[40,161753,111954],{"class":1283},[40,161755,161756],{"class":50}," 条件:\n",[40,161758,161759],{"class":42,"line":54},[40,161760,161761],{"class":50},"    循环体\n",[19,161763,18457],{},[31,161765,161767],{"className":33679,"code":161766,"language":2323,"meta":36,"style":36},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[26,161768,161769,161777,161781,161793,161800],{"__ignoreMap":36},[40,161770,161771,161773,161775],{"class":42,"line":43},[40,161772,103443],{"class":50},[40,161774,1284],{"class":1283},[40,161776,58997],{"class":63},[40,161778,161779],{"class":42,"line":54},[40,161780,1413],{"emptyLinePlaceholder":1412},[40,161782,161783,161785,161787,161789,161791],{"class":42,"line":70},[40,161784,111954],{"class":1283},[40,161786,12760],{"class":50},[40,161788,4930],{"class":1283},[40,161790,5474],{"class":63},[40,161792,332],{"class":50},[40,161794,161795,161797],{"class":42,"line":78},[40,161796,34599],{"class":63},[40,161798,161799],{"class":50},"(i)\n",[40,161801,161802,161805,161807],{"class":42,"line":86},[40,161803,161804],{"class":50},"    i ",[40,161806,12799],{"class":1283},[40,161808,58997],{"class":63},[19,161810,84224],{},[492,161812,161813,161819,161822,161825],{},[495,161814,161815,161816,776],{},"判断条件 ",[26,161817,161818],{},"i \u003C= 5",[495,161820,161821],{},"条件成立，执行循环体。",[495,161823,161824],{},"执行完后回到条件判断。",[495,161826,161827],{},"条件不成立，退出循环。",[14,161829,161831],{"id":161830},"_43-while累加","4.3 while累加",[19,161833,161834],{},"计算 1 到 100 的和：",[31,161836,161838],{"className":33679,"code":161837,"language":2323,"meta":36,"style":36},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[26,161839,161840,161848,161856,161860,161872,161882,161890,161894],{"__ignoreMap":36},[40,161841,161842,161844,161846],{"class":42,"line":43},[40,161843,103443],{"class":50},[40,161845,1284],{"class":1283},[40,161847,58997],{"class":63},[40,161849,161850,161852,161854],{"class":42,"line":54},[40,161851,159829],{"class":50},[40,161853,1284],{"class":1283},[40,161855,50633],{"class":63},[40,161857,161858],{"class":42,"line":70},[40,161859,1413],{"emptyLinePlaceholder":1412},[40,161861,161862,161864,161866,161868,161870],{"class":42,"line":78},[40,161863,111954],{"class":1283},[40,161865,12760],{"class":50},[40,161867,4930],{"class":1283},[40,161869,9077],{"class":63},[40,161871,332],{"class":50},[40,161873,161874,161877,161879],{"class":42,"line":86},[40,161875,161876],{"class":50},"    total ",[40,161878,12799],{"class":1283},[40,161880,161881],{"class":50}," i\n",[40,161883,161884,161886,161888],{"class":42,"line":100},[40,161885,161804],{"class":50},[40,161887,12799],{"class":1283},[40,161889,58997],{"class":63},[40,161891,161892],{"class":42,"line":108},[40,161893,1413],{"emptyLinePlaceholder":1412},[40,161895,161896,161898],{"class":42,"line":121},[40,161897,33715],{"class":63},[40,161899,161900],{"class":50},"(total)\n",[19,161902,161903],{},"核心思想：",[492,161905,161906,161911,161916],{},[495,161907,161908,161910],{},[26,161909,3920],{}," 控制循环次数。",[495,161912,161913,161915],{},[26,161914,159930],{}," 保存累加结果。",[495,161917,161918,161919,161921],{},"每轮循环都要更新 ",[26,161920,3920],{},"，否则可能死循环。",[14,161923,161925],{"id":161924},"_44-while猜数字","4.4 while猜数字",[31,161927,161929],{"className":33679,"code":161928,"language":2323,"meta":36,"style":36},"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",[26,161930,161931,161937,161941,161958,161966,161970,161978,161998,162007,162011,162023,162034,162044,162055,162061,162083],{"__ignoreMap":36},[40,161932,161933,161935],{"class":42,"line":43},[40,161934,33692],{"class":1283},[40,161936,48628],{"class":50},[40,161938,161939],{"class":42,"line":54},[40,161940,1413],{"emptyLinePlaceholder":1412},[40,161942,161943,161945,161947,161950,161952,161954,161956],{"class":42,"line":70},[40,161944,161609],{"class":50},[40,161946,1284],{"class":1283},[40,161948,161949],{"class":50}," random.randint(",[40,161951,3698],{"class":63},[40,161953,15757],{"class":50},[40,161955,3791],{"class":63},[40,161957,1811],{"class":50},[40,161959,161960,161962,161964],{"class":42,"line":78},[40,161961,149260],{"class":50},[40,161963,1284],{"class":1283},[40,161965,50633],{"class":63},[40,161967,161968],{"class":42,"line":86},[40,161969,1413],{"emptyLinePlaceholder":1412},[40,161971,161972,161974,161976],{"class":42,"line":100},[40,161973,111954],{"class":1283},[40,161975,98587],{"class":63},[40,161977,332],{"class":50},[40,161979,161980,161983,161985,161987,161989,161991,161993,161996],{"class":42,"line":108},[40,161981,161982],{"class":50},"    guess ",[40,161984,1284],{"class":1283},[40,161986,5708],{"class":63},[40,161988,3488],{"class":50},[40,161990,57119],{"class":63},[40,161992,3488],{"class":50},[40,161994,161995],{"class":94},"\"请输入1到100之间的数字:\"",[40,161997,33797],{"class":50},[40,161999,162000,162003,162005],{"class":42,"line":121},[40,162001,162002],{"class":50},"    count ",[40,162004,12799],{"class":1283},[40,162006,58997],{"class":63},[40,162008,162009],{"class":42,"line":134},[40,162010,1413],{"emptyLinePlaceholder":1412},[40,162012,162013,162015,162018,162020],{"class":42,"line":146},[40,162014,6425],{"class":1283},[40,162016,162017],{"class":50}," guess ",[40,162019,4437],{"class":1283},[40,162021,162022],{"class":50}," answer:\n",[40,162024,162025,162027,162029,162032],{"class":42,"line":154},[40,162026,35751],{"class":63},[40,162028,3488],{"class":50},[40,162030,162031],{"class":94},"\"猜大了\"",[40,162033,1811],{"class":50},[40,162035,162036,162038,162040,162042],{"class":42,"line":162},[40,162037,42593],{"class":1283},[40,162039,162017],{"class":50},[40,162041,4387],{"class":1283},[40,162043,162022],{"class":50},[40,162045,162046,162048,162050,162053],{"class":42,"line":170},[40,162047,35751],{"class":63},[40,162049,3488],{"class":50},[40,162051,162052],{"class":94},"\"猜小了\"",[40,162054,1811],{"class":50},[40,162056,162057,162059],{"class":42,"line":183},[40,162058,160591],{"class":1283},[40,162060,332],{"class":50},[40,162062,162063,162065,162067,162069,162072,162074,162076,162078,162081],{"class":42,"line":196},[40,162064,35751],{"class":63},[40,162066,3488],{"class":50},[40,162068,3537],{"class":1283},[40,162070,162071],{"class":94},"\"猜对了，一共猜了",[40,162073,4373],{"class":63},[40,162075,87729],{"class":50},[40,162077,4423],{"class":63},[40,162079,162080],{"class":94},"次\"",[40,162082,1811],{"class":50},[40,162084,162085],{"class":42,"line":204},[40,162086,34927],{"class":1283},[19,162088,162089,162092,162093,162095],{},[26,162090,162091],{},"while True"," 表示无限循环，通常配合 ",[26,162094,5379],{}," 使用。",[14,162097,162099],{"id":162098},"_45-break和continue","4.5 break和continue",[402,162101,162103],{"id":162102},"_451-break","4.5.1 break",[19,162105,162106,162108],{},[26,162107,5379],{}," 直接结束整个循环。",[31,162110,162112],{"className":33679,"code":162111,"language":2323,"meta":36,"style":36},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[26,162113,162114,162134,162146,162150],{"__ignoreMap":36},[40,162115,162116,162118,162120,162122,162124,162126,162128,162130,162132],{"class":42,"line":43},[40,162117,6349],{"class":1283},[40,162119,12760],{"class":50},[40,162121,29355],{"class":1283},[40,162123,35743],{"class":63},[40,162125,3488],{"class":50},[40,162127,3698],{"class":63},[40,162129,15757],{"class":50},[40,162131,3824],{"class":63},[40,162133,34086],{"class":50},[40,162135,162136,162138,162140,162142,162144],{"class":42,"line":54},[40,162137,6425],{"class":1283},[40,162139,12760],{"class":50},[40,162141,6273],{"class":1283},[40,162143,81365],{"class":63},[40,162145,332],{"class":50},[40,162147,162148],{"class":42,"line":70},[40,162149,34927],{"class":1283},[40,162151,162152,162154],{"class":42,"line":78},[40,162153,34599],{"class":63},[40,162155,161799],{"class":50},[19,162157,149026],{},[31,162159,162162],{"className":162160,"code":162161,"language":8510,"meta":36},[8508],"1\n2\n",[26,162163,162161],{"__ignoreMap":36},[402,162165,162167],{"id":162166},"_452-continue","4.5.2 continue",[19,162169,162170,162172],{},[26,162171,157241],{}," 跳过本轮剩余代码，进入下一轮循环。",[31,162174,162176],{"className":33679,"code":162175,"language":2323,"meta":36,"style":36},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[26,162177,162178,162198,162210,162214],{"__ignoreMap":36},[40,162179,162180,162182,162184,162186,162188,162190,162192,162194,162196],{"class":42,"line":43},[40,162181,6349],{"class":1283},[40,162183,12760],{"class":50},[40,162185,29355],{"class":1283},[40,162187,35743],{"class":63},[40,162189,3488],{"class":50},[40,162191,3698],{"class":63},[40,162193,15757],{"class":50},[40,162195,3824],{"class":63},[40,162197,34086],{"class":50},[40,162199,162200,162202,162204,162206,162208],{"class":42,"line":54},[40,162201,6425],{"class":1283},[40,162203,12760],{"class":50},[40,162205,6273],{"class":1283},[40,162207,81365],{"class":63},[40,162209,332],{"class":50},[40,162211,162212],{"class":42,"line":70},[40,162213,151081],{"class":1283},[40,162215,162216,162218],{"class":42,"line":78},[40,162217,34599],{"class":63},[40,162219,161799],{"class":50},[19,162221,149026],{},[31,162223,162226],{"className":162224,"code":162225,"language":8510,"meta":36},[8508],"1\n2\n4\n5\n",[26,162227,162225],{"__ignoreMap":36},[14,162229,162231],{"id":162230},"_46-for循环","4.6 for循环",[19,162233,162234,162236],{},[26,162235,6349],{}," 常用于遍历序列。",[31,162238,162240],{"className":33679,"code":162239,"language":2323,"meta":36,"style":36},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[26,162241,162242,162251,162255,162266],{"__ignoreMap":36},[40,162243,162244,162246,162248],{"class":42,"line":43},[40,162245,149105],{"class":50},[40,162247,1284],{"class":1283},[40,162249,162250],{"class":94}," \"python\"\n",[40,162252,162253],{"class":42,"line":54},[40,162254,1413],{"emptyLinePlaceholder":1412},[40,162256,162257,162259,162262,162264],{"class":42,"line":70},[40,162258,6349],{"class":1283},[40,162260,162261],{"class":50}," ch ",[40,162263,29355],{"class":1283},[40,162265,160968],{"class":50},[40,162267,162268,162270],{"class":42,"line":78},[40,162269,34599],{"class":63},[40,162271,162272],{"class":50},"(ch)\n",[19,162274,162275],{},"遍历列表：",[31,162277,162279],{"className":33679,"code":162278,"language":2323,"meta":36,"style":36},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[26,162280,162281,162303,162307,162317],{"__ignoreMap":36},[40,162282,162283,162286,162288,162290,162292,162294,162296,162298,162301],{"class":42,"line":43},[40,162284,162285],{"class":50},"students ",[40,162287,1284],{"class":1283},[40,162289,55524],{"class":50},[40,162291,152457],{"class":94},[40,162293,15757],{"class":50},[40,162295,153505],{"class":94},[40,162297,15757],{"class":50},[40,162299,162300],{"class":94},"\"小刚\"",[40,162302,36546],{"class":50},[40,162304,162305],{"class":42,"line":54},[40,162306,1413],{"emptyLinePlaceholder":1412},[40,162308,162309,162311,162313,162315],{"class":42,"line":70},[40,162310,6349],{"class":1283},[40,162312,154706],{"class":50},[40,162314,29355],{"class":1283},[40,162316,154711],{"class":50},[40,162318,162319,162321],{"class":42,"line":78},[40,162320,34599],{"class":63},[40,162322,152611],{"class":50},[14,162324,162326],{"id":162325},"_47-range函数","4.7 range函数",[19,162328,162329,162332],{},[26,162330,162331],{},"range()"," 用于生成整数序列。",[31,162334,162336],{"className":33679,"code":162335,"language":2323,"meta":36,"style":36},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[26,162337,162338,162352,162370],{"__ignoreMap":36},[40,162339,162340,162342,162344,162346,162349],{"class":42,"line":43},[40,162341,36716],{"class":63},[40,162343,3488],{"class":50},[40,162345,3799],{"class":63},[40,162347,162348],{"class":50},")          ",[40,162350,162351],{"class":997},"# 0,1,2,3,4\n",[40,162353,162354,162356,162358,162360,162362,162364,162367],{"class":42,"line":54},[40,162355,36716],{"class":63},[40,162357,3488],{"class":50},[40,162359,3698],{"class":63},[40,162361,15757],{"class":50},[40,162363,3799],{"class":63},[40,162365,162366],{"class":50},")       ",[40,162368,162369],{"class":997},"# 1,2,3,4\n",[40,162371,162372,162374,162376,162378,162380,162382,162384,162386,162388],{"class":42,"line":70},[40,162373,36716],{"class":63},[40,162375,3488],{"class":50},[40,162377,3698],{"class":63},[40,162379,15757],{"class":50},[40,162381,3925],{"class":63},[40,162383,15757],{"class":50},[40,162385,64],{"class":63},[40,162387,158230],{"class":50},[40,162389,162390],{"class":997},"# 1,3,5,7,9\n",[19,162392,162393,162394,27933],{},"配合 ",[26,162395,6349],{},[31,162397,162399],{"className":33679,"code":162398,"language":2323,"meta":36,"style":36},"for i in range(1, 6):\n    print(i)\n",[26,162400,162401,162421],{"__ignoreMap":36},[40,162402,162403,162405,162407,162409,162411,162413,162415,162417,162419],{"class":42,"line":43},[40,162404,6349],{"class":1283},[40,162406,12760],{"class":50},[40,162408,29355],{"class":1283},[40,162410,35743],{"class":63},[40,162412,3488],{"class":50},[40,162414,3698],{"class":63},[40,162416,15757],{"class":50},[40,162418,3824],{"class":63},[40,162420,34086],{"class":50},[40,162422,162423,162425],{"class":42,"line":54},[40,162424,34599],{"class":63},[40,162426,161799],{"class":50},[19,162428,12347,162429,162431],{},[26,162430,36716],{}," 的结束值不包含在内。",[14,162433,162435],{"id":162434},"_48-for循环求和","4.8 for循环求和",[31,162437,162439],{"className":33679,"code":162438,"language":2323,"meta":36,"style":36},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[26,162440,162441,162449,162453,162473,162481,162485],{"__ignoreMap":36},[40,162442,162443,162445,162447],{"class":42,"line":43},[40,162444,159829],{"class":50},[40,162446,1284],{"class":1283},[40,162448,50633],{"class":63},[40,162450,162451],{"class":42,"line":54},[40,162452,1413],{"emptyLinePlaceholder":1412},[40,162454,162455,162457,162459,162461,162463,162465,162467,162469,162471],{"class":42,"line":70},[40,162456,6349],{"class":1283},[40,162458,12760],{"class":50},[40,162460,29355],{"class":1283},[40,162462,35743],{"class":63},[40,162464,3488],{"class":50},[40,162466,3698],{"class":63},[40,162468,15757],{"class":50},[40,162470,3817],{"class":63},[40,162472,34086],{"class":50},[40,162474,162475,162477,162479],{"class":42,"line":78},[40,162476,161876],{"class":50},[40,162478,12799],{"class":1283},[40,162480,161881],{"class":50},[40,162482,162483],{"class":42,"line":86},[40,162484,1413],{"emptyLinePlaceholder":1412},[40,162486,162487,162489],{"class":42,"line":100},[40,162488,33715],{"class":63},[40,162490,161900],{"class":50},[19,162492,162493],{},"求偶数和：",[31,162495,162497],{"className":33679,"code":162496,"language":2323,"meta":36,"style":36},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[26,162498,162499,162507,162511,162531,162547,162556,162560],{"__ignoreMap":36},[40,162500,162501,162503,162505],{"class":42,"line":43},[40,162502,159829],{"class":50},[40,162504,1284],{"class":1283},[40,162506,50633],{"class":63},[40,162508,162509],{"class":42,"line":54},[40,162510,1413],{"emptyLinePlaceholder":1412},[40,162512,162513,162515,162517,162519,162521,162523,162525,162527,162529],{"class":42,"line":70},[40,162514,6349],{"class":1283},[40,162516,12760],{"class":50},[40,162518,29355],{"class":1283},[40,162520,35743],{"class":63},[40,162522,3488],{"class":50},[40,162524,3698],{"class":63},[40,162526,15757],{"class":50},[40,162528,3817],{"class":63},[40,162530,34086],{"class":50},[40,162532,162533,162535,162537,162539,162541,162543,162545],{"class":42,"line":78},[40,162534,6425],{"class":1283},[40,162536,12760],{"class":50},[40,162538,3808],{"class":1283},[40,162540,18077],{"class":63},[40,162542,104850],{"class":1283},[40,162544,7416],{"class":63},[40,162546,332],{"class":50},[40,162548,162549,162552,162554],{"class":42,"line":86},[40,162550,162551],{"class":50},"        total ",[40,162553,12799],{"class":1283},[40,162555,161881],{"class":50},[40,162557,162558],{"class":42,"line":100},[40,162559,1413],{"emptyLinePlaceholder":1412},[40,162561,162562,162564],{"class":42,"line":108},[40,162563,33715],{"class":63},[40,162565,161900],{"class":50},[19,162567,162568],{},"也可以：",[31,162570,162572],{"className":33679,"code":162571,"language":2323,"meta":36,"style":36},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[26,162573,162574,162582,162586,162610,162618,162622],{"__ignoreMap":36},[40,162575,162576,162578,162580],{"class":42,"line":43},[40,162577,159829],{"class":50},[40,162579,1284],{"class":1283},[40,162581,50633],{"class":63},[40,162583,162584],{"class":42,"line":54},[40,162585,1413],{"emptyLinePlaceholder":1412},[40,162587,162588,162590,162592,162594,162596,162598,162600,162602,162604,162606,162608],{"class":42,"line":70},[40,162589,6349],{"class":1283},[40,162591,12760],{"class":50},[40,162593,29355],{"class":1283},[40,162595,35743],{"class":63},[40,162597,3488],{"class":50},[40,162599,64],{"class":63},[40,162601,15757],{"class":50},[40,162603,3817],{"class":63},[40,162605,15757],{"class":50},[40,162607,64],{"class":63},[40,162609,34086],{"class":50},[40,162611,162612,162614,162616],{"class":42,"line":78},[40,162613,161876],{"class":50},[40,162615,12799],{"class":1283},[40,162617,161881],{"class":50},[40,162619,162620],{"class":42,"line":86},[40,162621,1413],{"emptyLinePlaceholder":1412},[40,162623,162624,162626],{"class":42,"line":100},[40,162625,33715],{"class":63},[40,162627,161900],{"class":50},[14,162629,162631],{"id":162630},"_49-循环嵌套","4.9 循环嵌套",[19,162633,162634],{},"嵌套循环就是循环里面再写循环。",[31,162636,162638],{"className":33679,"code":162637,"language":2323,"meta":36,"style":36},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[26,162639,162640,162660,162680],{"__ignoreMap":36},[40,162641,162642,162644,162646,162648,162650,162652,162654,162656,162658],{"class":42,"line":43},[40,162643,6349],{"class":1283},[40,162645,12760],{"class":50},[40,162647,29355],{"class":1283},[40,162649,35743],{"class":63},[40,162651,3488],{"class":50},[40,162653,3698],{"class":63},[40,162655,15757],{"class":50},[40,162657,3773],{"class":63},[40,162659,34086],{"class":50},[40,162661,162662,162664,162666,162668,162670,162672,162674,162676,162678],{"class":42,"line":54},[40,162663,6525],{"class":1283},[40,162665,12822],{"class":50},[40,162667,29355],{"class":1283},[40,162669,35743],{"class":63},[40,162671,3488],{"class":50},[40,162673,3698],{"class":63},[40,162675,15757],{"class":50},[40,162677,3773],{"class":63},[40,162679,34086],{"class":50},[40,162681,162682,162684,162686,162688,162691,162693,162695,162697,162700,162702,162704,162706,162708],{"class":42,"line":70},[40,162683,35751],{"class":63},[40,162685,3488],{"class":50},[40,162687,3537],{"class":1283},[40,162689,162690],{"class":94},"\"i=",[40,162692,4373],{"class":63},[40,162694,3920],{"class":50},[40,162696,4423],{"class":63},[40,162698,162699],{"class":94},", j=",[40,162701,4373],{"class":63},[40,162703,3946],{"class":50},[40,162705,4423],{"class":63},[40,162707,3731],{"class":94},[40,162709,1811],{"class":50},[19,162711,162712],{},"外层循环执行一次，内层循环执行完整一轮。",[14,162714,162716],{"id":162715},"_410-九九乘法表","4.10 九九乘法表",[31,162718,162720],{"className":33679,"code":162719,"language":2323,"meta":36,"style":36},"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",[26,162721,162722,162742,162765,162817],{"__ignoreMap":36},[40,162723,162724,162726,162728,162730,162732,162734,162736,162738,162740],{"class":42,"line":43},[40,162725,6349],{"class":1283},[40,162727,12760],{"class":50},[40,162729,29355],{"class":1283},[40,162731,35743],{"class":63},[40,162733,3488],{"class":50},[40,162735,3698],{"class":63},[40,162737,15757],{"class":50},[40,162739,3925],{"class":63},[40,162741,34086],{"class":50},[40,162743,162744,162746,162748,162750,162752,162754,162756,162759,162761,162763],{"class":42,"line":54},[40,162745,6525],{"class":1283},[40,162747,12822],{"class":50},[40,162749,29355],{"class":1283},[40,162751,35743],{"class":63},[40,162753,3488],{"class":50},[40,162755,3698],{"class":63},[40,162757,162758],{"class":50},", i ",[40,162760,3960],{"class":1283},[40,162762,28431],{"class":63},[40,162764,34086],{"class":50},[40,162766,162767,162769,162771,162773,162775,162777,162779,162781,162783,162785,162787,162789,162791,162793,162795,162797,162799,162801,162803,162805,162807,162809,162811,162813,162815],{"class":42,"line":70},[40,162768,35751],{"class":63},[40,162770,3488],{"class":50},[40,162772,3537],{"class":1283},[40,162774,3731],{"class":94},[40,162776,4373],{"class":63},[40,162778,3946],{"class":50},[40,162780,4423],{"class":63},[40,162782,3934],{"class":94},[40,162784,4373],{"class":63},[40,162786,3920],{"class":50},[40,162788,4423],{"class":63},[40,162790,1284],{"class":94},[40,162792,4373],{"class":63},[40,162794,103443],{"class":50},[40,162796,3934],{"class":1283},[40,162798,6734],{"class":50},[40,162800,4423],{"class":63},[40,162802,3731],{"class":94},[40,162804,15757],{"class":50},[40,162806,49101],{"class":8539},[40,162808,1284],{"class":1283},[40,162810,3731],{"class":94},[40,162812,4577],{"class":63},[40,162814,3731],{"class":94},[40,162816,1811],{"class":50},[40,162818,162819,162821],{"class":42,"line":78},[40,162820,34599],{"class":63},[40,162822,5302],{"class":50},[19,162824,162825],{},"关键点：",[492,162827,162828,162834,162840,162846],{},[495,162829,162830,162831,162833],{},"外层 ",[26,162832,3920],{}," 控制行。",[495,162835,162836,162837,162839],{},"内层 ",[26,162838,3946],{}," 控制列。",[495,162841,162842,162843,162845],{},"每行结束后用 ",[26,162844,149041],{}," 换行。",[495,162847,162848,162851],{},[26,162849,162850],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,162853,162855],{"id":162854},"_411-循环else","4.11 循环else",[19,162857,162858,162859,162861,162862,162864,162865,162867],{},"Python 的循环可以带 ",[26,162860,5032],{},"。当循环正常结束时执行 ",[26,162863,5032],{},"，如果被 ",[26,162866,5379],{}," 打断，则不执行。",[31,162869,162871],{"className":33679,"code":162870,"language":2323,"meta":36,"style":36},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[26,162872,162873,162893,162905,162916,162920,162926],{"__ignoreMap":36},[40,162874,162875,162877,162879,162881,162883,162885,162887,162889,162891],{"class":42,"line":43},[40,162876,6349],{"class":1283},[40,162878,12760],{"class":50},[40,162880,29355],{"class":1283},[40,162882,35743],{"class":63},[40,162884,3488],{"class":50},[40,162886,3698],{"class":63},[40,162888,15757],{"class":50},[40,162890,3824],{"class":63},[40,162892,34086],{"class":50},[40,162894,162895,162897,162899,162901,162903],{"class":42,"line":54},[40,162896,6425],{"class":1283},[40,162898,12760],{"class":50},[40,162900,6273],{"class":1283},[40,162902,5364],{"class":63},[40,162904,332],{"class":50},[40,162906,162907,162909,162911,162914],{"class":42,"line":70},[40,162908,35751],{"class":63},[40,162910,3488],{"class":50},[40,162912,162913],{"class":94},"\"找到了\"",[40,162915,1811],{"class":50},[40,162917,162918],{"class":42,"line":78},[40,162919,34927],{"class":1283},[40,162921,162922,162924],{"class":42,"line":86},[40,162923,5032],{"class":1283},[40,162925,332],{"class":50},[40,162927,162928,162930,162932,162935],{"class":42,"line":100},[40,162929,34599],{"class":63},[40,162931,3488],{"class":50},[40,162933,162934],{"class":94},"\"没找到\"",[40,162936,1811],{"class":50},[19,162938,162939],{},"常用于搜索。",[31,162941,162943],{"className":33679,"code":162942,"language":2323,"meta":36,"style":36},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[26,162944,162945,162966,162975,162979,162991,163002,163012,163016,163022],{"__ignoreMap":36},[40,162946,162947,162950,162952,162954,162956,162958,162960,162962,162964],{"class":42,"line":43},[40,162948,162949],{"class":50},"names ",[40,162951,1284],{"class":1283},[40,162953,55524],{"class":50},[40,162955,152457],{"class":94},[40,162957,15757],{"class":50},[40,162959,153505],{"class":94},[40,162961,15757],{"class":50},[40,162963,162300],{"class":94},[40,162965,36546],{"class":50},[40,162967,162968,162970,162972],{"class":42,"line":54},[40,162969,114869],{"class":50},[40,162971,1284],{"class":1283},[40,162973,162974],{"class":94}," \"小李\"\n",[40,162976,162977],{"class":42,"line":70},[40,162978,1413],{"emptyLinePlaceholder":1412},[40,162980,162981,162983,162986,162988],{"class":42,"line":78},[40,162982,6349],{"class":1283},[40,162984,162985],{"class":50}," name ",[40,162987,29355],{"class":1283},[40,162989,162990],{"class":50}," names:\n",[40,162992,162993,162995,162997,162999],{"class":42,"line":86},[40,162994,6425],{"class":1283},[40,162996,162985],{"class":50},[40,162998,6273],{"class":1283},[40,163000,163001],{"class":50}," target:\n",[40,163003,163004,163006,163008,163010],{"class":42,"line":100},[40,163005,35751],{"class":63},[40,163007,3488],{"class":50},[40,163009,162913],{"class":94},[40,163011,1811],{"class":50},[40,163013,163014],{"class":42,"line":108},[40,163015,34927],{"class":1283},[40,163017,163018,163020],{"class":42,"line":121},[40,163019,5032],{"class":1283},[40,163021,332],{"class":50},[40,163023,163024,163026,163028,163030],{"class":42,"line":134},[40,163025,34599],{"class":63},[40,163027,3488],{"class":50},[40,163029,162934],{"class":94},[40,163031,1811],{"class":50},[14,163033,163035],{"id":163034},"_412-小案例登录重试","4.12 小案例：登录重试",[19,163037,1205],{},[492,163039,163040,163043,163046],{},[495,163041,163042],{},"用户最多输入 3 次密码。",[495,163044,163045],{},"密码正确则登录成功。",[495,163047,163048],{},"3 次都错误则锁定账号。",[19,163050,13357],{},[31,163052,163054],{"className":33679,"code":163053,"language":2323,"meta":36,"style":36},"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",[26,163055,163056,163066,163070,163086,163102,163106,163118,163129,163133,163139,163164,163170],{"__ignoreMap":36},[40,163057,163058,163061,163063],{"class":42,"line":43},[40,163059,163060],{"class":50},"password ",[40,163062,1284],{"class":1283},[40,163064,163065],{"class":94}," \"123456\"\n",[40,163067,163068],{"class":42,"line":54},[40,163069,1413],{"emptyLinePlaceholder":1412},[40,163071,163072,163074,163076,163078,163080,163082,163084],{"class":42,"line":70},[40,163073,6349],{"class":1283},[40,163075,12760],{"class":50},[40,163077,29355],{"class":1283},[40,163079,35743],{"class":63},[40,163081,3488],{"class":50},[40,163083,3555],{"class":63},[40,163085,34086],{"class":50},[40,163087,163088,163091,163093,163095,163097,163100],{"class":42,"line":78},[40,163089,163090],{"class":50},"    user_password ",[40,163092,1284],{"class":1283},[40,163094,63903],{"class":63},[40,163096,3488],{"class":50},[40,163098,163099],{"class":94},"\"请输入密码:\"",[40,163101,1811],{"class":50},[40,163103,163104],{"class":42,"line":86},[40,163105,1413],{"emptyLinePlaceholder":1412},[40,163107,163108,163110,163113,163115],{"class":42,"line":100},[40,163109,6425],{"class":1283},[40,163111,163112],{"class":50}," user_password ",[40,163114,6273],{"class":1283},[40,163116,163117],{"class":50}," password:\n",[40,163119,163120,163122,163124,163127],{"class":42,"line":108},[40,163121,35751],{"class":63},[40,163123,3488],{"class":50},[40,163125,163126],{"class":94},"\"登录成功\"",[40,163128,1811],{"class":50},[40,163130,163131],{"class":42,"line":121},[40,163132,34927],{"class":1283},[40,163134,163135,163137],{"class":42,"line":134},[40,163136,160591],{"class":1283},[40,163138,332],{"class":50},[40,163140,163141,163143,163145,163147,163150,163153,163155,163157,163159,163162],{"class":42,"line":146},[40,163142,35751],{"class":63},[40,163144,3488],{"class":50},[40,163146,3537],{"class":1283},[40,163148,163149],{"class":94},"\"密码错误，还剩",[40,163151,163152],{"class":63},"{2",[40,163154,55569],{"class":1283},[40,163156,6356],{"class":50},[40,163158,4423],{"class":63},[40,163160,163161],{"class":94},"次机会\"",[40,163163,1811],{"class":50},[40,163165,163166,163168],{"class":42,"line":154},[40,163167,5032],{"class":1283},[40,163169,332],{"class":50},[40,163171,163172,163174,163176,163179],{"class":42,"line":162},[40,163173,34599],{"class":63},[40,163175,3488],{"class":50},[40,163177,163178],{"class":94},"\"账号已锁定\"",[40,163180,1811],{"class":50},[14,163182,163184],{"id":163183},"_413-小案例菜单程序","4.13 小案例：菜单程序",[31,163186,163188],{"className":33679,"code":163187,"language":2323,"meta":36,"style":36},"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",[26,163189,163190,163198,163209,163220,163231,163242,163253,163257,163272,163276,163288,163299,163311,163322,163334,163345,163357,163367,163371,163377],{"__ignoreMap":36},[40,163191,163192,163194,163196],{"class":42,"line":43},[40,163193,111954],{"class":1283},[40,163195,98587],{"class":63},[40,163197,332],{"class":50},[40,163199,163200,163202,163204,163207],{"class":42,"line":54},[40,163201,34599],{"class":63},[40,163203,3488],{"class":50},[40,163205,163206],{"class":94},"\"====== 菜单 ======\"",[40,163208,1811],{"class":50},[40,163210,163211,163213,163215,163218],{"class":42,"line":70},[40,163212,34599],{"class":63},[40,163214,3488],{"class":50},[40,163216,163217],{"class":94},"\"1. 查询余额\"",[40,163219,1811],{"class":50},[40,163221,163222,163224,163226,163229],{"class":42,"line":78},[40,163223,34599],{"class":63},[40,163225,3488],{"class":50},[40,163227,163228],{"class":94},"\"2. 存款\"",[40,163230,1811],{"class":50},[40,163232,163233,163235,163237,163240],{"class":42,"line":86},[40,163234,34599],{"class":63},[40,163236,3488],{"class":50},[40,163238,163239],{"class":94},"\"3. 取款\"",[40,163241,1811],{"class":50},[40,163243,163244,163246,163248,163251],{"class":42,"line":100},[40,163245,34599],{"class":63},[40,163247,3488],{"class":50},[40,163249,163250],{"class":94},"\"0. 退出\"",[40,163252,1811],{"class":50},[40,163254,163255],{"class":42,"line":108},[40,163256,1413],{"emptyLinePlaceholder":1412},[40,163258,163259,163262,163264,163266,163268,163270],{"class":42,"line":121},[40,163260,163261],{"class":50},"    choice ",[40,163263,1284],{"class":1283},[40,163265,63903],{"class":63},[40,163267,3488],{"class":50},[40,163269,155642],{"class":94},[40,163271,1811],{"class":50},[40,163273,163274],{"class":42,"line":134},[40,163275,1413],{"emptyLinePlaceholder":1412},[40,163277,163278,163280,163282,163284,163286],{"class":42,"line":146},[40,163279,6425],{"class":1283},[40,163281,155655],{"class":50},[40,163283,6273],{"class":1283},[40,163285,155660],{"class":94},[40,163287,332],{"class":50},[40,163289,163290,163292,163294,163297],{"class":42,"line":154},[40,163291,35751],{"class":63},[40,163293,3488],{"class":50},[40,163295,163296],{"class":94},"\"余额为1000元\"",[40,163298,1811],{"class":50},[40,163300,163301,163303,163305,163307,163309],{"class":42,"line":162},[40,163302,42593],{"class":1283},[40,163304,155655],{"class":50},[40,163306,6273],{"class":1283},[40,163308,155679],{"class":94},[40,163310,332],{"class":50},[40,163312,163313,163315,163317,163320],{"class":42,"line":170},[40,163314,35751],{"class":63},[40,163316,3488],{"class":50},[40,163318,163319],{"class":94},"\"存款功能\"",[40,163321,1811],{"class":50},[40,163323,163324,163326,163328,163330,163332],{"class":42,"line":183},[40,163325,42593],{"class":1283},[40,163327,155655],{"class":50},[40,163329,6273],{"class":1283},[40,163331,155697],{"class":94},[40,163333,332],{"class":50},[40,163335,163336,163338,163340,163343],{"class":42,"line":196},[40,163337,35751],{"class":63},[40,163339,3488],{"class":50},[40,163341,163342],{"class":94},"\"取款功能\"",[40,163344,1811],{"class":50},[40,163346,163347,163349,163351,163353,163355],{"class":42,"line":204},[40,163348,42593],{"class":1283},[40,163350,155655],{"class":50},[40,163352,6273],{"class":1283},[40,163354,155751],{"class":94},[40,163356,332],{"class":50},[40,163358,163359,163361,163363,163365],{"class":42,"line":217},[40,163360,35751],{"class":63},[40,163362,3488],{"class":50},[40,163364,155762],{"class":94},[40,163366,1811],{"class":50},[40,163368,163369],{"class":42,"line":230},[40,163370,34927],{"class":1283},[40,163372,163373,163375],{"class":42,"line":238},[40,163374,160591],{"class":1283},[40,163376,332],{"class":50},[40,163378,163379,163381,163383,163385],{"class":42,"line":251},[40,163380,35751],{"class":63},[40,163382,3488],{"class":50},[40,163384,155783],{"class":94},[40,163386,1811],{"class":50},[19,163388,163389,163390,163392,163393,776],{},"菜单类程序通常使用 ",[26,163391,162091],{},"，用户选择退出时 ",[26,163394,5379],{},[14,163396,163398],{"id":163397},"_414-易错点","4.14 易错点",[492,163400,163401,163406,163412,163420,163426],{},[495,163402,163403,163405],{},[26,163404,111954],{}," 循环必须更新控制变量。",[495,163407,163408,163411],{},[26,163409,163410],{},"range(1, 10)"," 不包含 10。",[495,163413,163414,163416,163417,163419],{},[26,163415,5379],{}," 结束整个循环，",[26,163418,157241],{}," 只跳过本轮。",[495,163421,163422,163423,163425],{},"嵌套循环中，",[26,163424,5379],{}," 只跳出当前所在的一层循环。",[495,163427,163428],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,163430,163432],{"id":163431},"_415-本章练习","4.15 本章练习",[492,163434,163435,163438,163441,163444,163447],{},[495,163436,163437],{},"输出 1 到 100。",[495,163439,163440],{},"计算 1 到 100 的偶数和。",[495,163442,163443],{},"输出 100 以内能被 3 和 5 同时整除的数。",[495,163445,163446],{},"编写猜数字游戏，限制最多猜 7 次。",[495,163448,163449],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[3384,163451,163452],{},"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":36,"searchDepth":54,"depth":54,"links":163454},[163455,163456,163457,163458,163459,163463,163464,163465,163466,163467,163468,163469,163470,163471,163472],{"id":161711,"depth":54,"text":161712},{"id":161741,"depth":54,"text":161742},{"id":161830,"depth":54,"text":161831},{"id":161924,"depth":54,"text":161925},{"id":162098,"depth":54,"text":162099,"children":163460},[163461,163462],{"id":162102,"depth":70,"text":162103},{"id":162166,"depth":70,"text":162167},{"id":162230,"depth":54,"text":162231},{"id":162325,"depth":54,"text":162326},{"id":162434,"depth":54,"text":162435},{"id":162630,"depth":54,"text":162631},{"id":162715,"depth":54,"text":162716},{"id":162854,"depth":54,"text":162855},{"id":163034,"depth":54,"text":163035},{"id":163183,"depth":54,"text":163184},{"id":163397,"depth":54,"text":163398},{"id":163431,"depth":54,"text":163432},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":161703,"description":3413},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":163479,"title":163480,"body":163481,"description":3413,"extension":3414,"meta":165486,"navigation":1412,"path":165487,"seo":165488,"stem":165489,"__hash__":165490},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":163482,"toc":165466},[163483,163486,163490,163493,163496,163510,163513,163527,163531,163533,163552,163554,163601,163603,163617,163621,163695,163698,163702,163705,163764,163772,163775,163828,163831,163835,163840,163895,163903,163953,163957,163962,163970,164069,164075,164079,164084,164087,164098,164139,164152,164156,164159,164195,164198,164211,164214,164274,164278,164282,164285,164336,164340,164343,164390,164396,164462,164465,164469,164472,164588,164591,164595,164598,164704,164708,164711,164749,164752,164794,164797,164857,164860,164864,165328,165331,165335,165362,165368,165429,165433,165463],[10,163484,163480],{"id":163485},"_5-函数基础",[14,163487,163489],{"id":163488},"_51-为什么需要函数","5.1 为什么需要函数",[19,163491,163492],{},"函数用于封装一段可以重复使用的代码。",[19,163494,163495],{},"不使用函数的问题：",[492,163497,163498,163501,163504,163507],{},[495,163499,163500],{},"重复代码多。",[495,163502,163503],{},"修改逻辑时容易漏改。",[495,163505,163506],{},"主流程不清晰。",[495,163508,163509],{},"程序越写越长，难以维护。",[19,163511,163512],{},"使用函数后的好处：",[492,163514,163515,163518,163521,163524],{},[495,163516,163517],{},"提高复用性。",[495,163519,163520],{},"提高可读性。",[495,163522,163523],{},"便于调试。",[495,163525,163526],{},"便于分工。",[14,163528,163530],{"id":163529},"_52-函数定义","5.2 函数定义",[19,163532,8504],{},[31,163534,163536],{"className":33679,"code":163535,"language":2323,"meta":36,"style":36},"def 函数名():\n    函数体\n",[26,163537,163538,163547],{"__ignoreMap":36},[40,163539,163540,163542,163545],{"class":42,"line":43},[40,163541,35247],{"class":1283},[40,163543,163544],{"class":596}," 函数名",[40,163546,35253],{"class":50},[40,163548,163549],{"class":42,"line":54},[40,163550,163551],{"class":50},"    函数体\n",[19,163553,18457],{},[31,163555,163557],{"className":33679,"code":163556,"language":2323,"meta":36,"style":36},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[26,163558,163559,163568,163578,163588,163592,163596],{"__ignoreMap":36},[40,163560,163561,163563,163566],{"class":42,"line":43},[40,163562,35247],{"class":1283},[40,163564,163565],{"class":596}," say_hello",[40,163567,35253],{"class":50},[40,163569,163570,163572,163574,163576],{"class":42,"line":54},[40,163571,34599],{"class":63},[40,163573,3488],{"class":50},[40,163575,9167],{"class":94},[40,163577,1811],{"class":50},[40,163579,163580,163582,163584,163586],{"class":42,"line":70},[40,163581,34599],{"class":63},[40,163583,3488],{"class":50},[40,163585,149208],{"class":94},[40,163587,1811],{"class":50},[40,163589,163590],{"class":42,"line":78},[40,163591,1413],{"emptyLinePlaceholder":1412},[40,163593,163594],{"class":42,"line":86},[40,163595,1413],{"emptyLinePlaceholder":1412},[40,163597,163598],{"class":42,"line":100},[40,163599,163600],{"class":50},"say_hello()\n",[19,163602,12347],{},[492,163604,163605,163608,163611,163614],{},[495,163606,163607],{},"函数必须先定义，再调用。",[495,163609,163610],{},"函数名遵循变量命名规则。",[495,163612,163613],{},"函数体需要缩进。",[495,163615,163616],{},"函数不调用就不会执行。",[14,163618,163620],{"id":163619},"_53-函数调用","5.3 函数调用",[31,163622,163624],{"className":33679,"code":163623,"language":2323,"meta":36,"style":36},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[26,163625,163626,163635,163646,163657,163668,163678,163682,163686,163691],{"__ignoreMap":36},[40,163627,163628,163630,163633],{"class":42,"line":43},[40,163629,35247],{"class":1283},[40,163631,163632],{"class":596}," print_menu",[40,163634,35253],{"class":50},[40,163636,163637,163639,163641,163644],{"class":42,"line":54},[40,163638,34599],{"class":63},[40,163640,3488],{"class":50},[40,163642,163643],{"class":94},"\"1. 查询\"",[40,163645,1811],{"class":50},[40,163647,163648,163650,163652,163655],{"class":42,"line":70},[40,163649,34599],{"class":63},[40,163651,3488],{"class":50},[40,163653,163654],{"class":94},"\"2. 添加\"",[40,163656,1811],{"class":50},[40,163658,163659,163661,163663,163666],{"class":42,"line":78},[40,163660,34599],{"class":63},[40,163662,3488],{"class":50},[40,163664,163665],{"class":94},"\"3. 删除\"",[40,163667,1811],{"class":50},[40,163669,163670,163672,163674,163676],{"class":42,"line":86},[40,163671,34599],{"class":63},[40,163673,3488],{"class":50},[40,163675,163250],{"class":94},[40,163677,1811],{"class":50},[40,163679,163680],{"class":42,"line":100},[40,163681,1413],{"emptyLinePlaceholder":1412},[40,163683,163684],{"class":42,"line":108},[40,163685,1413],{"emptyLinePlaceholder":1412},[40,163687,163688],{"class":42,"line":121},[40,163689,163690],{"class":50},"print_menu()\n",[40,163692,163693],{"class":42,"line":134},[40,163694,163690],{"class":50},[19,163696,163697],{},"函数可以多次调用，每次调用都会执行函数体。",[14,163699,163701],{"id":163700},"_54-参数","5.4 参数",[19,163703,163704],{},"参数用于向函数传递数据。",[31,163706,163708],{"className":33679,"code":163707,"language":2323,"meta":36,"style":36},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[26,163709,163710,163719,163739,163743,163747,163756],{"__ignoreMap":36},[40,163711,163712,163714,163716],{"class":42,"line":43},[40,163713,35247],{"class":1283},[40,163715,163565],{"class":596},[40,163717,163718],{"class":50},"(name):\n",[40,163720,163721,163723,163725,163727,163729,163731,163733,163735,163737],{"class":42,"line":54},[40,163722,34599],{"class":63},[40,163724,3488],{"class":50},[40,163726,3537],{"class":1283},[40,163728,159623],{"class":94},[40,163730,4373],{"class":63},[40,163732,83105],{"class":50},[40,163734,4423],{"class":63},[40,163736,3731],{"class":94},[40,163738,1811],{"class":50},[40,163740,163741],{"class":42,"line":70},[40,163742,1413],{"emptyLinePlaceholder":1412},[40,163744,163745],{"class":42,"line":78},[40,163746,1413],{"emptyLinePlaceholder":1412},[40,163748,163749,163752,163754],{"class":42,"line":86},[40,163750,163751],{"class":50},"say_hello(",[40,163753,152457],{"class":94},[40,163755,1811],{"class":50},[40,163757,163758,163760,163762],{"class":42,"line":100},[40,163759,163751],{"class":50},[40,163761,153505],{"class":94},[40,163763,1811],{"class":50},[19,163765,163766,163768,163769,163771],{},[26,163767,83105],{}," 是形参，",[26,163770,152457],{}," 是实参。",[19,163773,163774],{},"多个参数：",[31,163776,163778],{"className":33679,"code":163777,"language":2323,"meta":36,"style":36},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[26,163779,163780,163788,163801,163807,163811,163815],{"__ignoreMap":36},[40,163781,163782,163784,163786],{"class":42,"line":43},[40,163783,35247],{"class":1283},[40,163785,8532],{"class":596},[40,163787,153662],{"class":50},[40,163789,163790,163793,163795,163797,163799],{"class":42,"line":54},[40,163791,163792],{"class":50},"    result ",[40,163794,1284],{"class":1283},[40,163796,14191],{"class":50},[40,163798,3960],{"class":1283},[40,163800,153673],{"class":50},[40,163802,163803,163805],{"class":42,"line":70},[40,163804,34599],{"class":63},[40,163806,79880],{"class":50},[40,163808,163809],{"class":42,"line":78},[40,163810,1413],{"emptyLinePlaceholder":1412},[40,163812,163813],{"class":42,"line":86},[40,163814,1413],{"emptyLinePlaceholder":1412},[40,163816,163817,163820,163822,163824,163826],{"class":42,"line":100},[40,163818,163819],{"class":50},"add(",[40,163821,3925],{"class":63},[40,163823,15757],{"class":50},[40,163825,4178],{"class":63},[40,163827,1811],{"class":50},[19,163829,163830],{},"调用时参数数量必须匹配。",[14,163832,163834],{"id":163833},"_55-返回值","5.5 返回值",[19,163836,163837,163839],{},[26,163838,20368],{}," 用于把函数内部的结果返回给调用者。",[31,163841,163843],{"className":33679,"code":163842,"language":2323,"meta":36,"style":36},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[26,163844,163845,163853,163863,163867,163871,163889],{"__ignoreMap":36},[40,163846,163847,163849,163851],{"class":42,"line":43},[40,163848,35247],{"class":1283},[40,163850,8532],{"class":596},[40,163852,153662],{"class":50},[40,163854,163855,163857,163859,163861],{"class":42,"line":54},[40,163856,7413],{"class":1283},[40,163858,14191],{"class":50},[40,163860,3960],{"class":1283},[40,163862,153673],{"class":50},[40,163864,163865],{"class":42,"line":70},[40,163866,1413],{"emptyLinePlaceholder":1412},[40,163868,163869],{"class":42,"line":78},[40,163870,1413],{"emptyLinePlaceholder":1412},[40,163872,163873,163876,163878,163881,163883,163885,163887],{"class":42,"line":86},[40,163874,163875],{"class":50},"result ",[40,163877,1284],{"class":1283},[40,163879,163880],{"class":50}," add(",[40,163882,3925],{"class":63},[40,163884,15757],{"class":50},[40,163886,4178],{"class":63},[40,163888,1811],{"class":50},[40,163890,163891,163893],{"class":42,"line":100},[40,163892,33715],{"class":63},[40,163894,79880],{"class":50},[19,163896,163897,163898,163900,163901,776],{},"如果函数没有写 ",[26,163899,20368],{},"，默认返回 ",[26,163902,98981],{},[31,163904,163906],{"className":33679,"code":163905,"language":2323,"meta":36,"style":36},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[26,163907,163908,163916,163926,163930,163934,163943],{"__ignoreMap":36},[40,163909,163910,163912,163914],{"class":42,"line":43},[40,163911,35247],{"class":1283},[40,163913,163565],{"class":596},[40,163915,35253],{"class":50},[40,163917,163918,163920,163922,163924],{"class":42,"line":54},[40,163919,34599],{"class":63},[40,163921,3488],{"class":50},[40,163923,9167],{"class":94},[40,163925,1811],{"class":50},[40,163927,163928],{"class":42,"line":70},[40,163929,1413],{"emptyLinePlaceholder":1412},[40,163931,163932],{"class":42,"line":78},[40,163933,1413],{"emptyLinePlaceholder":1412},[40,163935,163936,163938,163940],{"class":42,"line":86},[40,163937,163875],{"class":50},[40,163939,1284],{"class":1283},[40,163941,163942],{"class":50}," say_hello()\n",[40,163944,163945,163947,163950],{"class":42,"line":100},[40,163946,33715],{"class":63},[40,163948,163949],{"class":50},"(result)  ",[40,163951,163952],{"class":997},"# None\n",[14,163954,163956],{"id":163955},"_56-return的作用","5.6 return的作用",[19,163958,163959,163961],{},[26,163960,20368],{}," 有两个作用：",[492,163963,163964,163967],{},[495,163965,163966],{},"返回结果。",[495,163968,163969],{},"结束函数。",[31,163971,163973],{"className":33679,"code":163972,"language":2323,"meta":36,"style":36},"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",[26,163974,163975,163985,163997,164004,164008,164020,164027,164031,164038,164042,164046,164057],{"__ignoreMap":36},[40,163976,163977,163979,163982],{"class":42,"line":43},[40,163978,35247],{"class":1283},[40,163980,163981],{"class":596}," check_age",[40,163983,163984],{"class":50},"(age):\n",[40,163986,163987,163989,163991,163993,163995],{"class":42,"line":54},[40,163988,6425],{"class":1283},[40,163990,19029],{"class":50},[40,163992,4387],{"class":1283},[40,163994,7416],{"class":63},[40,163996,332],{"class":50},[40,163998,163999,164001],{"class":42,"line":70},[40,164000,18074],{"class":1283},[40,164002,164003],{"class":94}," \"年龄不合法\"\n",[40,164005,164006],{"class":42,"line":78},[40,164007,1413],{"emptyLinePlaceholder":1412},[40,164009,164010,164012,164014,164016,164018],{"class":42,"line":86},[40,164011,6425],{"class":1283},[40,164013,19029],{"class":50},[40,164015,5041],{"class":1283},[40,164017,158854],{"class":63},[40,164019,332],{"class":50},[40,164021,164022,164024],{"class":42,"line":100},[40,164023,18074],{"class":1283},[40,164025,164026],{"class":94}," \"成年人\"\n",[40,164028,164029],{"class":42,"line":108},[40,164030,1413],{"emptyLinePlaceholder":1412},[40,164032,164033,164035],{"class":42,"line":121},[40,164034,7413],{"class":1283},[40,164036,164037],{"class":94}," \"未成年人\"\n",[40,164039,164040],{"class":42,"line":134},[40,164041,1413],{"emptyLinePlaceholder":1412},[40,164043,164044],{"class":42,"line":146},[40,164045,1413],{"emptyLinePlaceholder":1412},[40,164047,164048,164050,164053,164055],{"class":42,"line":154},[40,164049,33715],{"class":63},[40,164051,164052],{"class":50},"(check_age(",[40,164054,4178],{"class":63},[40,164056,33797],{"class":50},[40,164058,164059,164061,164063,164065,164067],{"class":42,"line":162},[40,164060,33715],{"class":63},[40,164062,164052],{"class":50},[40,164064,4011],{"class":1283},[40,164066,3698],{"class":63},[40,164068,33797],{"class":50},[19,164070,164071,164072,164074],{},"函数执行到 ",[26,164073,20368],{}," 后，后面的代码不会继续执行。",[14,164076,164078],{"id":164077},"_57-none","5.7 None",[19,164080,164081,164083],{},[26,164082,98981],{}," 表示空值或没有结果。",[19,164085,164086],{},"常见使用场景：",[492,164088,164089,164092,164095],{},[495,164090,164091],{},"函数没有返回值。",[495,164093,164094],{},"变量暂时没有具体值。",[495,164096,164097],{},"表示查询不到结果。",[31,164099,164101],{"className":33679,"code":164100,"language":2323,"meta":36,"style":36},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[26,164102,164103,164111,164115,164128],{"__ignoreMap":36},[40,164104,164105,164107,164109],{"class":42,"line":43},[40,164106,163875],{"class":50},[40,164108,1284],{"class":1283},[40,164110,154741],{"class":63},[40,164112,164113],{"class":42,"line":54},[40,164114,1413],{"emptyLinePlaceholder":1412},[40,164116,164117,164119,164122,164124,164126],{"class":42,"line":70},[40,164118,4873],{"class":1283},[40,164120,164121],{"class":50}," result ",[40,164123,42227],{"class":1283},[40,164125,42233],{"class":63},[40,164127,332],{"class":50},[40,164129,164130,164132,164134,164137],{"class":42,"line":78},[40,164131,34599],{"class":63},[40,164133,3488],{"class":50},[40,164135,164136],{"class":94},"\"没有数据\"",[40,164138,1811],{"class":50},[19,164140,164141,164142,164144,164145,164148,164149,776],{},"判断 ",[26,164143,98981],{}," 推荐使用 ",[26,164146,164147],{},"is None","，不要写成 ",[26,164150,164151],{},"== None",[14,164153,164155],{"id":164154},"_58-函数文档字符串","5.8 函数文档字符串",[19,164157,164158],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[31,164160,164162],{"className":33679,"code":164161,"language":2323,"meta":36,"style":36},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[26,164163,164164,164174,164179],{"__ignoreMap":36},[40,164165,164166,164168,164171],{"class":42,"line":43},[40,164167,35247],{"class":1283},[40,164169,164170],{"class":596}," calculate_bmi",[40,164172,164173],{"class":50},"(weight, height):\n",[40,164175,164176],{"class":42,"line":54},[40,164177,164178],{"class":94},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[40,164180,164181,164183,164186,164188,164191,164193],{"class":42,"line":70},[40,164182,7413],{"class":1283},[40,164184,164185],{"class":50}," weight ",[40,164187,4063],{"class":1283},[40,164189,164190],{"class":50}," height ",[40,164192,13983],{"class":1283},[40,164194,51023],{"class":63},[19,164196,164197],{},"查看说明：",[31,164199,164201],{"className":33679,"code":164200,"language":2323,"meta":36,"style":36},"help(calculate_bmi)\n",[26,164202,164203],{"__ignoreMap":36},[40,164204,164205,164208],{"class":42,"line":43},[40,164206,164207],{"class":63},"help",[40,164209,164210],{"class":50},"(calculate_bmi)\n",[19,164212,164213],{},"较完整的写法：",[31,164215,164217],{"className":33679,"code":164216,"language":2323,"meta":36,"style":36},"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",[26,164218,164219,164227,164232,164237,164241,164246,164251,164256,164260],{"__ignoreMap":36},[40,164220,164221,164223,164225],{"class":42,"line":43},[40,164222,35247],{"class":1283},[40,164224,164170],{"class":596},[40,164226,164173],{"class":50},[40,164228,164229],{"class":42,"line":54},[40,164230,164231],{"class":94},"    \"\"\"\n",[40,164233,164234],{"class":42,"line":70},[40,164235,164236],{"class":94},"    计算BMI。\n",[40,164238,164239],{"class":42,"line":78},[40,164240,1413],{"emptyLinePlaceholder":1412},[40,164242,164243],{"class":42,"line":86},[40,164244,164245],{"class":94},"    :param weight: 体重，单位kg\n",[40,164247,164248],{"class":42,"line":100},[40,164249,164250],{"class":94},"    :param height: 身高，单位m\n",[40,164252,164253],{"class":42,"line":108},[40,164254,164255],{"class":94},"    :return: BMI数值\n",[40,164257,164258],{"class":42,"line":121},[40,164259,164231],{"class":94},[40,164261,164262,164264,164266,164268,164270,164272],{"class":42,"line":134},[40,164263,7413],{"class":1283},[40,164265,164185],{"class":50},[40,164267,4063],{"class":1283},[40,164269,164190],{"class":50},[40,164271,13983],{"class":1283},[40,164273,51023],{"class":63},[14,164275,164277],{"id":164276},"_59-变量作用域","5.9 变量作用域",[402,164279,164281],{"id":164280},"_591-局部变量","5.9.1 局部变量",[19,164283,164284],{},"在函数内部定义的变量，只能在函数内部使用。",[31,164286,164288],{"className":33679,"code":164287,"language":2323,"meta":36,"style":36},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[26,164289,164290,164299,164307,164313,164317,164321,164326],{"__ignoreMap":36},[40,164291,164292,164294,164297],{"class":42,"line":43},[40,164293,35247],{"class":1283},[40,164295,164296],{"class":596}," test",[40,164298,35253],{"class":50},[40,164300,164301,164303,164305],{"class":42,"line":54},[40,164302,48893],{"class":50},[40,164304,1284],{"class":1283},[40,164306,61726],{"class":63},[40,164308,164309,164311],{"class":42,"line":70},[40,164310,34599],{"class":63},[40,164312,3500],{"class":50},[40,164314,164315],{"class":42,"line":78},[40,164316,1413],{"emptyLinePlaceholder":1412},[40,164318,164319],{"class":42,"line":86},[40,164320,1413],{"emptyLinePlaceholder":1412},[40,164322,164323],{"class":42,"line":100},[40,164324,164325],{"class":50},"test()\n",[40,164327,164328,164330,164333],{"class":42,"line":108},[40,164329,33715],{"class":63},[40,164331,164332],{"class":50},"(num)  ",[40,164334,164335],{"class":997},"# 报错\n",[402,164337,164339],{"id":164338},"_592-全局变量","5.9.2 全局变量",[19,164341,164342],{},"在函数外部定义的变量，可以在函数内部读取。",[31,164344,164346],{"className":33679,"code":164345,"language":2323,"meta":36,"style":36},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[26,164347,164348,164356,164360,164364,164372,164378,164382,164386],{"__ignoreMap":36},[40,164349,164350,164352,164354],{"class":42,"line":43},[40,164351,149105],{"class":50},[40,164353,1284],{"class":1283},[40,164355,151922],{"class":94},[40,164357,164358],{"class":42,"line":54},[40,164359,1413],{"emptyLinePlaceholder":1412},[40,164361,164362],{"class":42,"line":70},[40,164363,1413],{"emptyLinePlaceholder":1412},[40,164365,164366,164368,164370],{"class":42,"line":78},[40,164367,35247],{"class":1283},[40,164369,163565],{"class":596},[40,164371,35253],{"class":50},[40,164373,164374,164376],{"class":42,"line":86},[40,164375,34599],{"class":63},[40,164377,153229],{"class":50},[40,164379,164380],{"class":42,"line":100},[40,164381,1413],{"emptyLinePlaceholder":1412},[40,164383,164384],{"class":42,"line":108},[40,164385,1413],{"emptyLinePlaceholder":1412},[40,164387,164388],{"class":42,"line":121},[40,164389,163600],{"class":50},[19,164391,164392,164393,776],{},"如果要在函数内部修改全局变量，需要 ",[26,164394,164395],{},"global",[31,164397,164399],{"className":33679,"code":164398,"language":2323,"meta":36,"style":36},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[26,164400,164401,164409,164413,164417,164426,164434,164442,164446,164450,164455],{"__ignoreMap":36},[40,164402,164403,164405,164407],{"class":42,"line":43},[40,164404,149260],{"class":50},[40,164406,1284],{"class":1283},[40,164408,50633],{"class":63},[40,164410,164411],{"class":42,"line":54},[40,164412,1413],{"emptyLinePlaceholder":1412},[40,164414,164415],{"class":42,"line":70},[40,164416,1413],{"emptyLinePlaceholder":1412},[40,164418,164419,164421,164424],{"class":42,"line":78},[40,164420,35247],{"class":1283},[40,164422,164423],{"class":596}," add_count",[40,164425,35253],{"class":50},[40,164427,164428,164431],{"class":42,"line":86},[40,164429,164430],{"class":1283},"    global",[40,164432,164433],{"class":50}," count\n",[40,164435,164436,164438,164440],{"class":42,"line":100},[40,164437,162002],{"class":50},[40,164439,12799],{"class":1283},[40,164441,58997],{"class":63},[40,164443,164444],{"class":42,"line":108},[40,164445,1413],{"emptyLinePlaceholder":1412},[40,164447,164448],{"class":42,"line":121},[40,164449,1413],{"emptyLinePlaceholder":1412},[40,164451,164452],{"class":42,"line":134},[40,164453,164454],{"class":50},"add_count()\n",[40,164456,164457,164459],{"class":42,"line":146},[40,164458,33715],{"class":63},[40,164460,164461],{"class":50},"(count)\n",[19,164463,164464],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,164466,164468],{"id":164467},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,164470,164471],{},"一个函数中可以调用另一个函数。",[31,164473,164475],{"className":33679,"code":164474,"language":2323,"meta":36,"style":36},"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",[26,164476,164477,164486,164500,164504,164508,164517,164522,164542,164563,164567,164571,164575],{"__ignoreMap":36},[40,164478,164479,164481,164484],{"class":42,"line":43},[40,164480,35247],{"class":1283},[40,164482,164483],{"class":596}," print_line",[40,164485,35253],{"class":50},[40,164487,164488,164490,164492,164494,164496,164498],{"class":42,"line":54},[40,164489,34599],{"class":63},[40,164491,3488],{"class":50},[40,164493,35783],{"class":94},[40,164495,9841],{"class":1283},[40,164497,81960],{"class":63},[40,164499,1811],{"class":50},[40,164501,164502],{"class":42,"line":70},[40,164503,1413],{"emptyLinePlaceholder":1412},[40,164505,164506],{"class":42,"line":78},[40,164507,1413],{"emptyLinePlaceholder":1412},[40,164509,164510,164512,164515],{"class":42,"line":86},[40,164511,35247],{"class":1283},[40,164513,164514],{"class":596}," print_info",[40,164516,151944],{"class":50},[40,164518,164519],{"class":42,"line":100},[40,164520,164521],{"class":50},"    print_line()\n",[40,164523,164524,164526,164528,164530,164532,164534,164536,164538,164540],{"class":42,"line":108},[40,164525,34599],{"class":63},[40,164527,3488],{"class":50},[40,164529,3537],{"class":1283},[40,164531,159251],{"class":94},[40,164533,4373],{"class":63},[40,164535,83105],{"class":50},[40,164537,4423],{"class":63},[40,164539,3731],{"class":94},[40,164541,1811],{"class":50},[40,164543,164544,164546,164548,164550,164553,164555,164557,164559,164561],{"class":42,"line":121},[40,164545,34599],{"class":63},[40,164547,3488],{"class":50},[40,164549,3537],{"class":1283},[40,164551,164552],{"class":94},"\"年龄:",[40,164554,4373],{"class":63},[40,164556,73517],{"class":50},[40,164558,4423],{"class":63},[40,164560,3731],{"class":94},[40,164562,1811],{"class":50},[40,164564,164565],{"class":42,"line":134},[40,164566,164521],{"class":50},[40,164568,164569],{"class":42,"line":146},[40,164570,1413],{"emptyLinePlaceholder":1412},[40,164572,164573],{"class":42,"line":154},[40,164574,1413],{"emptyLinePlaceholder":1412},[40,164576,164577,164580,164582,164584,164586],{"class":42,"line":162},[40,164578,164579],{"class":50},"print_info(",[40,164581,152457],{"class":94},[40,164583,15757],{"class":50},[40,164585,4128],{"class":63},[40,164587,1811],{"class":50},[19,164589,164590],{},"这种方式可以把小功能组合成大功能。",[14,164592,164594],{"id":164593},"_511-参数检查","5.11 参数检查",[19,164596,164597],{},"函数内部可以检查参数是否合法。",[31,164599,164601],{"className":33679,"code":164600,"language":2323,"meta":36,"style":36},"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",[26,164602,164603,164612,164624,164630,164640,164644,164648,164665,164669,164681,164692,164698],{"__ignoreMap":36},[40,164604,164605,164607,164610],{"class":42,"line":43},[40,164606,35247],{"class":1283},[40,164608,164609],{"class":596}," divide",[40,164611,153662],{"class":50},[40,164613,164614,164616,164618,164620,164622],{"class":42,"line":54},[40,164615,6425],{"class":1283},[40,164617,14204],{"class":50},[40,164619,6273],{"class":1283},[40,164621,7416],{"class":63},[40,164623,332],{"class":50},[40,164625,164626,164628],{"class":42,"line":70},[40,164627,18074],{"class":1283},[40,164629,154741],{"class":63},[40,164631,164632,164634,164636,164638],{"class":42,"line":78},[40,164633,7413],{"class":1283},[40,164635,14191],{"class":50},[40,164637,4063],{"class":1283},[40,164639,153673],{"class":50},[40,164641,164642],{"class":42,"line":86},[40,164643,1413],{"emptyLinePlaceholder":1412},[40,164645,164646],{"class":42,"line":100},[40,164647,1413],{"emptyLinePlaceholder":1412},[40,164649,164650,164652,164654,164657,164659,164661,164663],{"class":42,"line":108},[40,164651,163875],{"class":50},[40,164653,1284],{"class":1283},[40,164655,164656],{"class":50}," divide(",[40,164658,3925],{"class":63},[40,164660,15757],{"class":50},[40,164662,3672],{"class":63},[40,164664,1811],{"class":50},[40,164666,164667],{"class":42,"line":121},[40,164668,1413],{"emptyLinePlaceholder":1412},[40,164670,164671,164673,164675,164677,164679],{"class":42,"line":134},[40,164672,4873],{"class":1283},[40,164674,164121],{"class":50},[40,164676,42227],{"class":1283},[40,164678,42233],{"class":63},[40,164680,332],{"class":50},[40,164682,164683,164685,164687,164690],{"class":42,"line":146},[40,164684,34599],{"class":63},[40,164686,3488],{"class":50},[40,164688,164689],{"class":94},"\"除数不能为0\"",[40,164691,1811],{"class":50},[40,164693,164694,164696],{"class":42,"line":154},[40,164695,5032],{"class":1283},[40,164697,332],{"class":50},[40,164699,164700,164702],{"class":42,"line":162},[40,164701,34599],{"class":63},[40,164703,79880],{"class":50},[14,164705,164707],{"id":164706},"_512-类型提示","5.12 类型提示",[19,164709,164710],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[31,164712,164714],{"className":33679,"code":164713,"language":2323,"meta":36,"style":36},"def add(a: int, b: int) -> int:\n    return a + b\n",[26,164715,164716,164739],{"__ignoreMap":36},[40,164717,164718,164720,164722,164725,164727,164730,164732,164735,164737],{"class":42,"line":43},[40,164719,35247],{"class":1283},[40,164721,8532],{"class":596},[40,164723,164724],{"class":50},"(a: ",[40,164726,3491],{"class":63},[40,164728,164729],{"class":50},", b: ",[40,164731,3491],{"class":63},[40,164733,164734],{"class":50},") -> ",[40,164736,3491],{"class":63},[40,164738,332],{"class":50},[40,164740,164741,164743,164745,164747],{"class":42,"line":54},[40,164742,7413],{"class":1283},[40,164744,14191],{"class":50},[40,164746,3960],{"class":1283},[40,164748,153673],{"class":50},[19,164750,164751],{},"字符串参数：",[31,164753,164755],{"className":33679,"code":164754,"language":2323,"meta":36,"style":36},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[26,164756,164757,164774],{"__ignoreMap":36},[40,164758,164759,164761,164763,164766,164768,164770,164772],{"class":42,"line":43},[40,164760,35247],{"class":1283},[40,164762,163565],{"class":596},[40,164764,164765],{"class":50},"(name: ",[40,164767,4646],{"class":63},[40,164769,164734],{"class":50},[40,164771,98981],{"class":63},[40,164773,332],{"class":50},[40,164775,164776,164778,164780,164782,164784,164786,164788,164790,164792],{"class":42,"line":54},[40,164777,34599],{"class":63},[40,164779,3488],{"class":50},[40,164781,3537],{"class":1283},[40,164783,159623],{"class":94},[40,164785,4373],{"class":63},[40,164787,83105],{"class":50},[40,164789,4423],{"class":63},[40,164791,3731],{"class":94},[40,164793,1811],{"class":50},[19,164795,164796],{},"列表参数：",[31,164798,164800],{"className":33679,"code":164799,"language":2323,"meta":36,"style":36},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[26,164801,164802,164821,164829,164841,164850],{"__ignoreMap":36},[40,164803,164804,164806,164809,164812,164814,164817,164819],{"class":42,"line":43},[40,164805,35247],{"class":1283},[40,164807,164808],{"class":596}," get_total",[40,164810,164811],{"class":50},"(numbers: list[",[40,164813,3491],{"class":63},[40,164815,164816],{"class":50},"]) -> ",[40,164818,3491],{"class":63},[40,164820,332],{"class":50},[40,164822,164823,164825,164827],{"class":42,"line":54},[40,164824,161876],{"class":50},[40,164826,1284],{"class":1283},[40,164828,50633],{"class":63},[40,164830,164831,164833,164836,164838],{"class":42,"line":70},[40,164832,6525],{"class":1283},[40,164834,164835],{"class":50}," number ",[40,164837,29355],{"class":1283},[40,164839,164840],{"class":50}," numbers:\n",[40,164842,164843,164845,164847],{"class":42,"line":78},[40,164844,162551],{"class":50},[40,164846,12799],{"class":1283},[40,164848,164849],{"class":50}," number\n",[40,164851,164852,164854],{"class":42,"line":86},[40,164853,7413],{"class":1283},[40,164855,164856],{"class":50}," total\n",[19,164858,164859],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,164861,164863],{"id":164862},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[31,164865,164867],{"className":33679,"code":164866,"language":2323,"meta":36,"style":36},"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",[26,164868,164869,164879,164883,164887,164895,164906,164916,164926,164936,164946,164950,164954,164963,164985,164989,164993,165002,165008,165028,165040,165051,165055,165064,165075,165080,165084,165088,165097,165103,165122,165134,165144,165148,165159,165169,165173,165181,165192,165196,165200,165204,165212,165217,165231,165235,165247,165252,165264,165269,165281,165286,165298,165308,165312,165318],{"__ignoreMap":36},[40,164870,164871,164874,164876],{"class":42,"line":43},[40,164872,164873],{"class":50},"balance ",[40,164875,1284],{"class":1283},[40,164877,164878],{"class":63}," 1000\n",[40,164880,164881],{"class":42,"line":54},[40,164882,1413],{"emptyLinePlaceholder":1412},[40,164884,164885],{"class":42,"line":70},[40,164886,1413],{"emptyLinePlaceholder":1412},[40,164888,164889,164891,164893],{"class":42,"line":78},[40,164890,35247],{"class":1283},[40,164892,154602],{"class":596},[40,164894,35253],{"class":50},[40,164896,164897,164899,164901,164904],{"class":42,"line":86},[40,164898,34599],{"class":63},[40,164900,3488],{"class":50},[40,164902,164903],{"class":94},"\"====== ATM ======\"",[40,164905,1811],{"class":50},[40,164907,164908,164910,164912,164914],{"class":42,"line":100},[40,164909,34599],{"class":63},[40,164911,3488],{"class":50},[40,164913,163217],{"class":94},[40,164915,1811],{"class":50},[40,164917,164918,164920,164922,164924],{"class":42,"line":108},[40,164919,34599],{"class":63},[40,164921,3488],{"class":50},[40,164923,163228],{"class":94},[40,164925,1811],{"class":50},[40,164927,164928,164930,164932,164934],{"class":42,"line":121},[40,164929,34599],{"class":63},[40,164931,3488],{"class":50},[40,164933,163239],{"class":94},[40,164935,1811],{"class":50},[40,164937,164938,164940,164942,164944],{"class":42,"line":134},[40,164939,34599],{"class":63},[40,164941,3488],{"class":50},[40,164943,163250],{"class":94},[40,164945,1811],{"class":50},[40,164947,164948],{"class":42,"line":146},[40,164949,1413],{"emptyLinePlaceholder":1412},[40,164951,164952],{"class":42,"line":154},[40,164953,1413],{"emptyLinePlaceholder":1412},[40,164955,164956,164958,164961],{"class":42,"line":162},[40,164957,35247],{"class":1283},[40,164959,164960],{"class":596}," show_balance",[40,164962,35253],{"class":50},[40,164964,164965,164967,164969,164971,164974,164976,164979,164981,164983],{"class":42,"line":170},[40,164966,34599],{"class":63},[40,164968,3488],{"class":50},[40,164970,3537],{"class":1283},[40,164972,164973],{"class":94},"\"当前余额:",[40,164975,4373],{"class":63},[40,164977,164978],{"class":50},"balance",[40,164980,4423],{"class":63},[40,164982,159581],{"class":94},[40,164984,1811],{"class":50},[40,164986,164987],{"class":42,"line":183},[40,164988,1413],{"emptyLinePlaceholder":1412},[40,164990,164991],{"class":42,"line":196},[40,164992,1413],{"emptyLinePlaceholder":1412},[40,164994,164995,164997,165000],{"class":42,"line":204},[40,164996,35247],{"class":1283},[40,164998,164999],{"class":596}," save_money",[40,165001,35253],{"class":50},[40,165003,165004,165006],{"class":42,"line":217},[40,165005,164430],{"class":1283},[40,165007,152668],{"class":50},[40,165009,165010,165013,165015,165017,165019,165021,165023,165026],{"class":42,"line":230},[40,165011,165012],{"class":50},"    money ",[40,165014,1284],{"class":1283},[40,165016,113088],{"class":63},[40,165018,3488],{"class":50},[40,165020,57119],{"class":63},[40,165022,3488],{"class":50},[40,165024,165025],{"class":94},"\"请输入存款金额:\"",[40,165027,33797],{"class":50},[40,165029,165030,165032,165034,165036,165038],{"class":42,"line":238},[40,165031,6425],{"class":1283},[40,165033,152711],{"class":50},[40,165035,4930],{"class":1283},[40,165037,7416],{"class":63},[40,165039,332],{"class":50},[40,165041,165042,165044,165046,165049],{"class":42,"line":251},[40,165043,35751],{"class":63},[40,165045,3488],{"class":50},[40,165047,165048],{"class":94},"\"金额必须大于0\"",[40,165050,1811],{"class":50},[40,165052,165053],{"class":42,"line":264},[40,165054,154930],{"class":1283},[40,165056,165057,165060,165062],{"class":42,"line":277},[40,165058,165059],{"class":50},"    balance ",[40,165061,12799],{"class":1283},[40,165063,152744],{"class":50},[40,165065,165066,165068,165070,165073],{"class":42,"line":290},[40,165067,34599],{"class":63},[40,165069,3488],{"class":50},[40,165071,165072],{"class":94},"\"存款成功\"",[40,165074,1811],{"class":50},[40,165076,165077],{"class":42,"line":298},[40,165078,165079],{"class":50},"    show_balance()\n",[40,165081,165082],{"class":42,"line":310},[40,165083,1413],{"emptyLinePlaceholder":1412},[40,165085,165086],{"class":42,"line":5086},[40,165087,1413],{"emptyLinePlaceholder":1412},[40,165089,165090,165092,165095],{"class":42,"line":5091},[40,165091,35247],{"class":1283},[40,165093,165094],{"class":596}," withdraw_money",[40,165096,35253],{"class":50},[40,165098,165099,165101],{"class":42,"line":5105},[40,165100,164430],{"class":1283},[40,165102,152668],{"class":50},[40,165104,165105,165107,165109,165111,165113,165115,165117,165120],{"class":42,"line":5110},[40,165106,165012],{"class":50},[40,165108,1284],{"class":1283},[40,165110,113088],{"class":63},[40,165112,3488],{"class":50},[40,165114,57119],{"class":63},[40,165116,3488],{"class":50},[40,165118,165119],{"class":94},"\"请输入取款金额:\"",[40,165121,33797],{"class":50},[40,165123,165124,165126,165128,165130,165132],{"class":42,"line":5902},[40,165125,6425],{"class":1283},[40,165127,152711],{"class":50},[40,165129,4930],{"class":1283},[40,165131,7416],{"class":63},[40,165133,332],{"class":50},[40,165135,165136,165138,165140,165142],{"class":42,"line":5916},[40,165137,35751],{"class":63},[40,165139,3488],{"class":50},[40,165141,165048],{"class":94},[40,165143,1811],{"class":50},[40,165145,165146],{"class":42,"line":5924},[40,165147,154930],{"class":1283},[40,165149,165150,165152,165154,165156],{"class":42,"line":5929},[40,165151,6425],{"class":1283},[40,165153,152711],{"class":50},[40,165155,4437],{"class":1283},[40,165157,165158],{"class":50}," balance:\n",[40,165160,165161,165163,165165,165167],{"class":42,"line":5935},[40,165162,35751],{"class":63},[40,165164,3488],{"class":50},[40,165166,152806],{"class":94},[40,165168,1811],{"class":50},[40,165170,165171],{"class":42,"line":5941},[40,165172,154930],{"class":1283},[40,165174,165175,165177,165179],{"class":42,"line":5946},[40,165176,165059],{"class":50},[40,165178,152821],{"class":1283},[40,165180,152744],{"class":50},[40,165182,165183,165185,165187,165190],{"class":42,"line":11270},[40,165184,34599],{"class":63},[40,165186,3488],{"class":50},[40,165188,165189],{"class":94},"\"取款成功\"",[40,165191,1811],{"class":50},[40,165193,165194],{"class":42,"line":11294},[40,165195,165079],{"class":50},[40,165197,165198],{"class":42,"line":11299},[40,165199,1413],{"emptyLinePlaceholder":1412},[40,165201,165202],{"class":42,"line":11305},[40,165203,1413],{"emptyLinePlaceholder":1412},[40,165205,165206,165208,165210],{"class":42,"line":11332},[40,165207,111954],{"class":1283},[40,165209,98587],{"class":63},[40,165211,332],{"class":50},[40,165213,165214],{"class":42,"line":11337},[40,165215,165216],{"class":50},"    show_menu()\n",[40,165218,165219,165221,165223,165225,165227,165229],{"class":42,"line":11343},[40,165220,163261],{"class":50},[40,165222,1284],{"class":1283},[40,165224,63903],{"class":63},[40,165226,3488],{"class":50},[40,165228,155642],{"class":94},[40,165230,1811],{"class":50},[40,165232,165233],{"class":42,"line":11355},[40,165234,1413],{"emptyLinePlaceholder":1412},[40,165236,165237,165239,165241,165243,165245],{"class":42,"line":11367},[40,165238,6425],{"class":1283},[40,165240,155655],{"class":50},[40,165242,6273],{"class":1283},[40,165244,155660],{"class":94},[40,165246,332],{"class":50},[40,165248,165249],{"class":42,"line":11379},[40,165250,165251],{"class":50},"        show_balance()\n",[40,165253,165254,165256,165258,165260,165262],{"class":42,"line":13038},[40,165255,42593],{"class":1283},[40,165257,155655],{"class":50},[40,165259,6273],{"class":1283},[40,165261,155679],{"class":94},[40,165263,332],{"class":50},[40,165265,165266],{"class":42,"line":13063},[40,165267,165268],{"class":50},"        save_money()\n",[40,165270,165271,165273,165275,165277,165279],{"class":42,"line":13086},[40,165272,42593],{"class":1283},[40,165274,155655],{"class":50},[40,165276,6273],{"class":1283},[40,165278,155697],{"class":94},[40,165280,332],{"class":50},[40,165282,165283],{"class":42,"line":13110},[40,165284,165285],{"class":50},"        withdraw_money()\n",[40,165287,165288,165290,165292,165294,165296],{"class":42,"line":13115},[40,165289,42593],{"class":1283},[40,165291,155655],{"class":50},[40,165293,6273],{"class":1283},[40,165295,155751],{"class":94},[40,165297,332],{"class":50},[40,165299,165300,165302,165304,165306],{"class":42,"line":13120},[40,165301,35751],{"class":63},[40,165303,3488],{"class":50},[40,165305,155762],{"class":94},[40,165307,1811],{"class":50},[40,165309,165310],{"class":42,"line":13125},[40,165311,34927],{"class":1283},[40,165313,165314,165316],{"class":42,"line":13134},[40,165315,160591],{"class":1283},[40,165317,332],{"class":50},[40,165319,165320,165322,165324,165326],{"class":42,"line":13139},[40,165321,35751],{"class":63},[40,165323,3488],{"class":50},[40,165325,155783],{"class":94},[40,165327,1811],{"class":50},[19,165329,165330],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,165332,165334],{"id":165333},"_514-易错点","5.14 易错点",[492,165336,165337,165340,165343,165348,165353,165356],{},[495,165338,165339],{},"函数定义后必须调用才会执行。",[495,165341,165342],{},"函数名后面有括号才是调用。",[495,165344,165345,165347],{},[26,165346,20368],{}," 后面的代码不会执行。",[495,165349,165350,165351,776],{},"没有返回值的函数默认返回 ",[26,165352,98981],{},[495,165354,165355],{},"局部变量不能在函数外部访问。",[495,165357,165358,165359,165361],{},"不要滥用 ",[26,165360,164395],{},"，更好的方式是让函数返回新值。",[19,165363,165364,165365,165367],{},"例如不用 ",[26,165366,164395],{}," 改写存款：",[31,165369,165371],{"className":33679,"code":165370,"language":2323,"meta":36,"style":36},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[26,165372,165373,165382,165393,165397,165401,165409,165422],{"__ignoreMap":36},[40,165374,165375,165377,165379],{"class":42,"line":43},[40,165376,35247],{"class":1283},[40,165378,164999],{"class":596},[40,165380,165381],{"class":50},"(balance, money):\n",[40,165383,165384,165386,165389,165391],{"class":42,"line":54},[40,165385,7413],{"class":1283},[40,165387,165388],{"class":50}," balance ",[40,165390,3960],{"class":1283},[40,165392,152744],{"class":50},[40,165394,165395],{"class":42,"line":70},[40,165396,1413],{"emptyLinePlaceholder":1412},[40,165398,165399],{"class":42,"line":78},[40,165400,1413],{"emptyLinePlaceholder":1412},[40,165402,165403,165405,165407],{"class":42,"line":86},[40,165404,164873],{"class":50},[40,165406,1284],{"class":1283},[40,165408,164878],{"class":63},[40,165410,165411,165413,165415,165418,165420],{"class":42,"line":100},[40,165412,164873],{"class":50},[40,165414,1284],{"class":1283},[40,165416,165417],{"class":50}," save_money(balance, ",[40,165419,5053],{"class":63},[40,165421,1811],{"class":50},[40,165423,165424,165426],{"class":42,"line":108},[40,165425,33715],{"class":63},[40,165427,165428],{"class":50},"(balance)\n",[14,165430,165432],{"id":165431},"_515-本章练习","5.15 本章练习",[492,165434,165435,165442,165448,165454,165460],{},[495,165436,165437,165438,165441],{},"定义函数 ",[26,165439,165440],{},"print_student(name, age)","，输出学生信息。",[495,165443,165437,165444,165447],{},[26,165445,165446],{},"get_max(a, b, c)","，返回三个数中的最大值。",[495,165449,165437,165450,165453],{},[26,165451,165452],{},"is_even(num)","，判断一个数是否为偶数。",[495,165455,165437,165456,165459],{},[26,165457,165458],{},"calculate_bmi(weight, height)","，返回 BMI。",[495,165461,165462],{},"把第 4 章的菜单程序拆分成多个函数。",[3384,165464,165465],{},"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":36,"searchDepth":54,"depth":54,"links":165467},[165468,165469,165470,165471,165472,165473,165474,165475,165476,165480,165481,165482,165483,165484,165485],{"id":163488,"depth":54,"text":163489},{"id":163529,"depth":54,"text":163530},{"id":163619,"depth":54,"text":163620},{"id":163700,"depth":54,"text":163701},{"id":163833,"depth":54,"text":163834},{"id":163955,"depth":54,"text":163956},{"id":164077,"depth":54,"text":164078},{"id":164154,"depth":54,"text":164155},{"id":164276,"depth":54,"text":164277,"children":165477},[165478,165479],{"id":164280,"depth":70,"text":164281},{"id":164338,"depth":70,"text":164339},{"id":164467,"depth":54,"text":164468},{"id":164593,"depth":54,"text":164594},{"id":164706,"depth":54,"text":164707},{"id":164862,"depth":54,"text":164863},{"id":165333,"depth":54,"text":165334},{"id":165431,"depth":54,"text":165432},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":163480,"description":3413},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":165492,"title":165493,"body":165494,"description":3413,"extension":3414,"meta":168538,"navigation":1412,"path":168539,"seo":168540,"stem":168541,"__hash__":168542},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":165495,"toc":168519},[165496,165499,165503,165506,165509,165613,165616,165620,165623,165703,165706,165710,165713,165773,165776,165812,165815,165830,165834,165907,165910,165965,165968,166038,166041,166125,166135,166193,166197,166242,166245,166271,166274,166380,166384,166387,166429,166432,166496,166499,166503,166506,166567,166570,166600,166603,166641,166645,166648,166657,166660,166784,166787,166828,166832,166835,166846,166886,166889,166904,166909,166912,166979,166982,167072,167076,167079,167127,167130,167157,167159,167189,167192,167212,167215,167246,167249,167282,167286,167289,167313,167316,167340,167343,167367,167371,167374,167504,167507,167587,167590,167665,167669,167672,167722,167725,167767,167770,167794,167796,167820,167823,167878,167881,167947,167951,167954,167957,167995,167998,168051,168054,168100,168103,168136,168139,168143,168462,168466,168495,168499,168516],[10,165497,165493],{"id":165498},"_6-数据容器",[14,165500,165502],{"id":165501},"_61-什么是数据容器","6.1 什么是数据容器",[19,165504,165505],{},"数据容器用于一次保存多个数据。",[19,165507,165508],{},"常见容器：",[3619,165510,165511,165528],{},[3622,165512,165513],{},[3625,165514,165515,165517,165520,165523,165526],{},[3628,165516,29083],{},[3628,165518,165519],{},"是否有序",[3628,165521,165522],{},"是否可变",[3628,165524,165525],{},"是否允许重复",[3628,165527,30797],{},[3665,165529,165530,165548,165564,165579,165596],{},[3625,165531,165532,165535,165538,165541,165544],{},[3670,165533,165534],{},"list列表",[3670,165536,165537],{},"有序",[3670,165539,165540],{},"可变",[3670,165542,165543],{},"允许",[3670,165545,165546],{},[26,165547,157826],{},[3625,165549,165550,165553,165555,165558,165560],{},[3670,165551,165552],{},"tuple元组",[3670,165554,165537],{},[3670,165556,165557],{},"不可变",[3670,165559,165543],{},[3670,165561,165562],{},[26,165563,157839],{},[3625,165565,165566,165569,165571,165573,165575],{},[3670,165567,165568],{},"str字符串",[3670,165570,165537],{},[3670,165572,165557],{},[3670,165574,165543],{},[3670,165576,165577],{},[26,165578,158449],{},[3625,165580,165581,165584,165587,165589,165592],{},[3670,165582,165583],{},"set集合",[3670,165585,165586],{},"无序",[3670,165588,165540],{},[3670,165590,165591],{},"不允许",[3670,165593,165594],{},[26,165595,157864],{},[3625,165597,165598,165601,165603,165605,165608],{},[3670,165599,165600],{},"dict字典",[3670,165602,165537],{},[3670,165604,165540],{},[3670,165606,165607],{},"key不允许重复",[3670,165609,165610],{},[26,165611,165612],{},"{\"name\": \"小明\"}",[19,165614,165615],{},"Python 3.7 之后，字典保持插入顺序。",[14,165617,165619],{"id":165618},"_62-列表list","6.2 列表list",[19,165621,165622],{},"列表用于保存一组有顺序的数据。",[31,165624,165626],{"className":33679,"code":165625,"language":2323,"meta":36,"style":36},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[26,165627,165628,165648,165673,165694],{"__ignoreMap":36},[40,165629,165630,165632,165634,165636,165638,165640,165642,165644,165646],{"class":42,"line":43},[40,165631,162949],{"class":50},[40,165633,1284],{"class":1283},[40,165635,55524],{"class":50},[40,165637,152457],{"class":94},[40,165639,15757],{"class":50},[40,165641,153505],{"class":94},[40,165643,15757],{"class":50},[40,165645,162300],{"class":94},[40,165647,36546],{"class":50},[40,165649,165650,165653,165655,165657,165659,165661,165663,165665,165667,165669,165671],{"class":42,"line":54},[40,165651,165652],{"class":50},"numbers ",[40,165654,1284],{"class":1283},[40,165656,55524],{"class":50},[40,165658,3698],{"class":63},[40,165660,15757],{"class":50},[40,165662,64],{"class":63},[40,165664,15757],{"class":50},[40,165666,3555],{"class":63},[40,165668,15757],{"class":50},[40,165670,3773],{"class":63},[40,165672,36546],{"class":50},[40,165674,165675,165678,165680,165682,165684,165686,165688,165690,165692],{"class":42,"line":70},[40,165676,165677],{"class":50},"mixed ",[40,165679,1284],{"class":1283},[40,165681,55524],{"class":50},[40,165683,152457],{"class":94},[40,165685,15757],{"class":50},[40,165687,4128],{"class":63},[40,165689,15757],{"class":50},[40,165691,34776],{"class":63},[40,165693,36546],{"class":50},[40,165695,165696,165699,165701],{"class":42,"line":78},[40,165697,165698],{"class":50},"empty ",[40,165700,1284],{"class":1283},[40,165702,55136],{"class":50},[19,165704,165705],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,165707,165709],{"id":165708},"_63-列表索引","6.3 列表索引",[19,165711,165712],{},"正向索引从 0 开始：",[31,165714,165716],{"className":33679,"code":165715,"language":2323,"meta":36,"style":36},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[26,165717,165718,165738,165742,165753,165763],{"__ignoreMap":36},[40,165719,165720,165722,165724,165726,165728,165730,165732,165734,165736],{"class":42,"line":43},[40,165721,162949],{"class":50},[40,165723,1284],{"class":1283},[40,165725,55524],{"class":50},[40,165727,152457],{"class":94},[40,165729,15757],{"class":50},[40,165731,153505],{"class":94},[40,165733,15757],{"class":50},[40,165735,162300],{"class":94},[40,165737,36546],{"class":50},[40,165739,165740],{"class":42,"line":54},[40,165741,1413],{"emptyLinePlaceholder":1412},[40,165743,165744,165746,165749,165751],{"class":42,"line":70},[40,165745,33715],{"class":63},[40,165747,165748],{"class":50},"(names[",[40,165750,3672],{"class":63},[40,165752,7980],{"class":50},[40,165754,165755,165757,165759,165761],{"class":42,"line":78},[40,165756,33715],{"class":63},[40,165758,165748],{"class":50},[40,165760,3698],{"class":63},[40,165762,7980],{"class":50},[40,165764,165765,165767,165769,165771],{"class":42,"line":86},[40,165766,33715],{"class":63},[40,165768,165748],{"class":50},[40,165770,64],{"class":63},[40,165772,7980],{"class":50},[19,165774,165775],{},"反向索引从 -1 开始：",[31,165777,165779],{"className":33679,"code":165778,"language":2323,"meta":36,"style":36},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[26,165780,165781,165797],{"__ignoreMap":36},[40,165782,165783,165785,165787,165789,165791,165794],{"class":42,"line":43},[40,165784,33715],{"class":63},[40,165786,165748],{"class":50},[40,165788,4011],{"class":1283},[40,165790,3698],{"class":63},[40,165792,165793],{"class":50},"])  ",[40,165795,165796],{"class":997},"# 小刚\n",[40,165798,165799,165801,165803,165805,165807,165809],{"class":42,"line":54},[40,165800,33715],{"class":63},[40,165802,165748],{"class":50},[40,165804,4011],{"class":1283},[40,165806,64],{"class":63},[40,165808,165793],{"class":50},[40,165810,165811],{"class":997},"# 小红\n",[19,165813,165814],{},"索引越界会报错：",[31,165816,165818],{"className":33679,"code":165817,"language":2323,"meta":36,"style":36},"print(names[3])\n",[26,165819,165820],{"__ignoreMap":36},[40,165821,165822,165824,165826,165828],{"class":42,"line":43},[40,165823,33715],{"class":63},[40,165825,165748],{"class":50},[40,165827,3555],{"class":63},[40,165829,7980],{"class":50},[14,165831,165833],{"id":165832},"_64-列表常用方法","6.4 列表常用方法",[31,165835,165837],{"className":33679,"code":165836,"language":2323,"meta":36,"style":36},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[26,165838,165839,165855,165859,165868,165882,165896,165900],{"__ignoreMap":36},[40,165840,165841,165843,165845,165847,165849,165851,165853],{"class":42,"line":43},[40,165842,162949],{"class":50},[40,165844,1284],{"class":1283},[40,165846,55524],{"class":50},[40,165848,152457],{"class":94},[40,165850,15757],{"class":50},[40,165852,153505],{"class":94},[40,165854,36546],{"class":50},[40,165856,165857],{"class":42,"line":54},[40,165858,1413],{"emptyLinePlaceholder":1412},[40,165860,165861,165864,165866],{"class":42,"line":70},[40,165862,165863],{"class":50},"names.append(",[40,165865,162300],{"class":94},[40,165867,1811],{"class":50},[40,165869,165870,165873,165875,165877,165880],{"class":42,"line":78},[40,165871,165872],{"class":50},"names.insert(",[40,165874,3698],{"class":63},[40,165876,15757],{"class":50},[40,165878,165879],{"class":94},"\"小李\"",[40,165881,1811],{"class":50},[40,165883,165884,165887,165889,165891,165894],{"class":42,"line":86},[40,165885,165886],{"class":50},"names.extend([",[40,165888,12005],{"class":94},[40,165890,15757],{"class":50},[40,165892,165893],{"class":94},"\"小赵\"",[40,165895,7980],{"class":50},[40,165897,165898],{"class":42,"line":100},[40,165899,1413],{"emptyLinePlaceholder":1412},[40,165901,165902,165904],{"class":42,"line":108},[40,165903,33715],{"class":63},[40,165905,165906],{"class":50},"(names)\n",[19,165908,165909],{},"删除元素：",[31,165911,165913],{"className":33679,"code":165912,"language":2323,"meta":36,"style":36},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[26,165914,165915,165924,165934,165948,165960],{"__ignoreMap":36},[40,165916,165917,165920,165922],{"class":42,"line":43},[40,165918,165919],{"class":50},"names.remove(",[40,165921,153505],{"class":94},[40,165923,1811],{"class":50},[40,165925,165926,165929,165931],{"class":42,"line":54},[40,165927,165928],{"class":50},"last ",[40,165930,1284],{"class":1283},[40,165932,165933],{"class":50}," names.pop()\n",[40,165935,165936,165939,165941,165944,165946],{"class":42,"line":70},[40,165937,165938],{"class":50},"first ",[40,165940,1284],{"class":1283},[40,165942,165943],{"class":50}," names.pop(",[40,165945,3672],{"class":63},[40,165947,1811],{"class":50},[40,165949,165950,165953,165956,165958],{"class":42,"line":78},[40,165951,165952],{"class":1283},"del",[40,165954,165955],{"class":50}," names[",[40,165957,3672],{"class":63},[40,165959,36546],{"class":50},[40,165961,165962],{"class":42,"line":86},[40,165963,165964],{"class":50},"names.clear()\n",[19,165966,165967],{},"查询和统计：",[31,165969,165971],{"className":33679,"code":165970,"language":2323,"meta":36,"style":36},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[26,165972,165973,166001,166005,166016,166027],{"__ignoreMap":36},[40,165974,165975,165977,165979,165981,165983,165985,165987,165989,165991,165993,165995,165997,165999],{"class":42,"line":43},[40,165976,165652],{"class":50},[40,165978,1284],{"class":1283},[40,165980,55524],{"class":50},[40,165982,3698],{"class":63},[40,165984,15757],{"class":50},[40,165986,64],{"class":63},[40,165988,15757],{"class":50},[40,165990,3555],{"class":63},[40,165992,15757],{"class":50},[40,165994,64],{"class":63},[40,165996,15757],{"class":50},[40,165998,3773],{"class":63},[40,166000,36546],{"class":50},[40,166002,166003],{"class":42,"line":54},[40,166004,1413],{"emptyLinePlaceholder":1412},[40,166006,166007,166009,166012,166014],{"class":42,"line":70},[40,166008,33715],{"class":63},[40,166010,166011],{"class":50},"(numbers.index(",[40,166013,3555],{"class":63},[40,166015,33797],{"class":50},[40,166017,166018,166020,166023,166025],{"class":42,"line":78},[40,166019,33715],{"class":63},[40,166021,166022],{"class":50},"(numbers.count(",[40,166024,64],{"class":63},[40,166026,33797],{"class":50},[40,166028,166029,166031,166033,166035],{"class":42,"line":86},[40,166030,33715],{"class":63},[40,166032,3488],{"class":50},[40,166034,10681],{"class":63},[40,166036,166037],{"class":50},"(numbers))\n",[19,166039,166040],{},"排序：",[31,166042,166044],{"className":33679,"code":166043,"language":2323,"meta":36,"style":36},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[26,166045,166046,166070,166074,166079,166086,166090,166104,166110,166114,166119],{"__ignoreMap":36},[40,166047,166048,166050,166052,166054,166056,166058,166060,166062,166064,166066,166068],{"class":42,"line":43},[40,166049,165652],{"class":50},[40,166051,1284],{"class":1283},[40,166053,55524],{"class":50},[40,166055,3555],{"class":63},[40,166057,15757],{"class":50},[40,166059,3698],{"class":63},[40,166061,15757],{"class":50},[40,166063,3799],{"class":63},[40,166065,15757],{"class":50},[40,166067,64],{"class":63},[40,166069,36546],{"class":50},[40,166071,166072],{"class":42,"line":54},[40,166073,1413],{"emptyLinePlaceholder":1412},[40,166075,166076],{"class":42,"line":70},[40,166077,166078],{"class":50},"numbers.sort()\n",[40,166080,166081,166083],{"class":42,"line":78},[40,166082,33715],{"class":63},[40,166084,166085],{"class":50},"(numbers)\n",[40,166087,166088],{"class":42,"line":86},[40,166089,1413],{"emptyLinePlaceholder":1412},[40,166091,166092,166095,166098,166100,166102],{"class":42,"line":100},[40,166093,166094],{"class":50},"numbers.sort(",[40,166096,166097],{"class":8539},"reverse",[40,166099,1284],{"class":1283},[40,166101,34776],{"class":63},[40,166103,1811],{"class":50},[40,166105,166106,166108],{"class":42,"line":108},[40,166107,33715],{"class":63},[40,166109,166085],{"class":50},[40,166111,166112],{"class":42,"line":121},[40,166113,1413],{"emptyLinePlaceholder":1412},[40,166115,166116],{"class":42,"line":134},[40,166117,166118],{"class":50},"numbers.reverse()\n",[40,166120,166121,166123],{"class":42,"line":146},[40,166122,33715],{"class":63},[40,166124,166085],{"class":50},[19,166126,166127,166130,166131,166134],{},[26,166128,166129],{},"sort()"," 会修改原列表，",[26,166132,166133],{},"sorted()"," 返回新列表。",[31,166136,166138],{"className":33679,"code":166137,"language":2323,"meta":36,"style":36},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[26,166139,166140,166164,166176,166180,166186],{"__ignoreMap":36},[40,166141,166142,166144,166146,166148,166150,166152,166154,166156,166158,166160,166162],{"class":42,"line":43},[40,166143,165652],{"class":50},[40,166145,1284],{"class":1283},[40,166147,55524],{"class":50},[40,166149,3555],{"class":63},[40,166151,15757],{"class":50},[40,166153,3698],{"class":63},[40,166155,15757],{"class":50},[40,166157,3799],{"class":63},[40,166159,15757],{"class":50},[40,166161,64],{"class":63},[40,166163,36546],{"class":50},[40,166165,166166,166169,166171,166174],{"class":42,"line":54},[40,166167,166168],{"class":50},"new_numbers ",[40,166170,1284],{"class":1283},[40,166172,166173],{"class":63}," sorted",[40,166175,166085],{"class":50},[40,166177,166178],{"class":42,"line":70},[40,166179,1413],{"emptyLinePlaceholder":1412},[40,166181,166182,166184],{"class":42,"line":78},[40,166183,33715],{"class":63},[40,166185,166085],{"class":50},[40,166187,166188,166190],{"class":42,"line":86},[40,166189,33715],{"class":63},[40,166191,166192],{"class":50},"(new_numbers)\n",[14,166194,166196],{"id":166195},"_65-列表遍历","6.5 列表遍历",[31,166198,166200],{"className":33679,"code":166199,"language":2323,"meta":36,"style":36},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[26,166201,166202,166222,166226,166236],{"__ignoreMap":36},[40,166203,166204,166206,166208,166210,166212,166214,166216,166218,166220],{"class":42,"line":43},[40,166205,162949],{"class":50},[40,166207,1284],{"class":1283},[40,166209,55524],{"class":50},[40,166211,152457],{"class":94},[40,166213,15757],{"class":50},[40,166215,153505],{"class":94},[40,166217,15757],{"class":50},[40,166219,162300],{"class":94},[40,166221,36546],{"class":50},[40,166223,166224],{"class":42,"line":54},[40,166225,1413],{"emptyLinePlaceholder":1412},[40,166227,166228,166230,166232,166234],{"class":42,"line":70},[40,166229,6349],{"class":1283},[40,166231,162985],{"class":50},[40,166233,29355],{"class":1283},[40,166235,162990],{"class":50},[40,166237,166238,166240],{"class":42,"line":78},[40,166239,34599],{"class":63},[40,166241,153229],{"class":50},[19,166243,166244],{},"需要索引时：",[31,166246,166248],{"className":33679,"code":166247,"language":2323,"meta":36,"style":36},"for index, name in enumerate(names):\n    print(index, name)\n",[26,166249,166250,166264],{"__ignoreMap":36},[40,166251,166252,166254,166257,166259,166261],{"class":42,"line":43},[40,166253,6349],{"class":1283},[40,166255,166256],{"class":50}," index, name ",[40,166258,29355],{"class":1283},[40,166260,34906],{"class":63},[40,166262,166263],{"class":50},"(names):\n",[40,166265,166266,166268],{"class":42,"line":54},[40,166267,34599],{"class":63},[40,166269,166270],{"class":50},"(index, name)\n",[19,166272,166273],{},"统计总分：",[31,166275,166277],{"className":33679,"code":166276,"language":2323,"meta":36,"style":36},"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",[26,166278,166279,166304,166312,166316,166327,166335,166339,166356],{"__ignoreMap":36},[40,166280,166281,166284,166286,166288,166290,166292,166294,166296,166298,166300,166302],{"class":42,"line":43},[40,166282,166283],{"class":50},"scores ",[40,166285,1284],{"class":1283},[40,166287,55524],{"class":50},[40,166289,4339],{"class":63},[40,166291,15757],{"class":50},[40,166293,4214],{"class":63},[40,166295,15757],{"class":50},[40,166297,3734],{"class":63},[40,166299,15757],{"class":50},[40,166301,4040],{"class":63},[40,166303,36546],{"class":50},[40,166305,166306,166308,166310],{"class":42,"line":54},[40,166307,159829],{"class":50},[40,166309,1284],{"class":1283},[40,166311,50633],{"class":63},[40,166313,166314],{"class":42,"line":70},[40,166315,1413],{"emptyLinePlaceholder":1412},[40,166317,166318,166320,166322,166324],{"class":42,"line":78},[40,166319,6349],{"class":1283},[40,166321,160352],{"class":50},[40,166323,29355],{"class":1283},[40,166325,166326],{"class":50}," scores:\n",[40,166328,166329,166331,166333],{"class":42,"line":86},[40,166330,161876],{"class":50},[40,166332,12799],{"class":1283},[40,166334,4921],{"class":50},[40,166336,166337],{"class":42,"line":100},[40,166338,1413],{"emptyLinePlaceholder":1412},[40,166340,166341,166344,166346,166349,166351,166353],{"class":42,"line":108},[40,166342,166343],{"class":50},"avg ",[40,166345,1284],{"class":1283},[40,166347,166348],{"class":50}," total ",[40,166350,4063],{"class":1283},[40,166352,10654],{"class":63},[40,166354,166355],{"class":50},"(scores)\n",[40,166357,166358,166360,166362,166364,166367,166369,166372,166374,166376,166378],{"class":42,"line":121},[40,166359,33715],{"class":63},[40,166361,3488],{"class":50},[40,166363,3537],{"class":1283},[40,166365,166366],{"class":94},"\"平均分:",[40,166368,4373],{"class":63},[40,166370,166371],{"class":50},"avg",[40,166373,159728],{"class":1283},[40,166375,4423],{"class":63},[40,166377,3731],{"class":94},[40,166379,1811],{"class":50},[14,166381,166383],{"id":166382},"_66-元组tuple","6.6 元组tuple",[19,166385,166386],{},"元组和列表类似，但不可修改。",[31,166388,166390],{"className":33679,"code":166389,"language":2323,"meta":36,"style":36},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[26,166391,166392,166409],{"__ignoreMap":36},[40,166393,166394,166397,166399,166401,166403,166405,166407],{"class":42,"line":43},[40,166395,166396],{"class":50},"point ",[40,166398,1284],{"class":1283},[40,166400,4993],{"class":50},[40,166402,3925],{"class":63},[40,166404,15757],{"class":50},[40,166406,4178],{"class":63},[40,166408,1811],{"class":50},[40,166410,166411,166413,166415,166417,166419,166421,166423,166425,166427],{"class":42,"line":54},[40,166412,119605],{"class":50},[40,166414,1284],{"class":1283},[40,166416,4993],{"class":50},[40,166418,152457],{"class":94},[40,166420,15757],{"class":50},[40,166422,4128],{"class":63},[40,166424,15757],{"class":50},[40,166426,72567],{"class":94},[40,166428,1811],{"class":50},[19,166430,166431],{},"单元素元组必须加逗号：",[31,166433,166435],{"className":33679,"code":166434,"language":2323,"meta":36,"style":36},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[26,166436,166437,166451,166464,166468,166482],{"__ignoreMap":36},[40,166438,166439,166442,166444,166446,166448],{"class":42,"line":43},[40,166440,166441],{"class":50},"t1 ",[40,166443,1284],{"class":1283},[40,166445,4993],{"class":50},[40,166447,3925],{"class":63},[40,166449,166450],{"class":50},",)\n",[40,166452,166453,166456,166458,166460,166462],{"class":42,"line":54},[40,166454,166455],{"class":50},"t2 ",[40,166457,1284],{"class":1283},[40,166459,4993],{"class":50},[40,166461,3925],{"class":63},[40,166463,1811],{"class":50},[40,166465,166466],{"class":42,"line":70},[40,166467,1413],{"emptyLinePlaceholder":1412},[40,166469,166470,166472,166474,166476,166479],{"class":42,"line":78},[40,166471,33715],{"class":63},[40,166473,3488],{"class":50},[40,166475,106398],{"class":63},[40,166477,166478],{"class":50},"(t1))  ",[40,166480,166481],{"class":997},"# tuple\n",[40,166483,166484,166486,166488,166490,166493],{"class":42,"line":86},[40,166485,33715],{"class":63},[40,166487,3488],{"class":50},[40,166489,106398],{"class":63},[40,166491,166492],{"class":50},"(t2))  ",[40,166494,166495],{"class":997},"# int\n",[19,166497,166498],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,166500,166502],{"id":166501},"_67-字符串str","6.7 字符串str",[19,166504,166505],{},"字符串也是序列，可以索引、切片和遍历。",[31,166507,166509],{"className":33679,"code":166508,"language":2323,"meta":36,"style":36},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[26,166510,166511,166519,166523,166534,166546,166550,166561],{"__ignoreMap":36},[40,166512,166513,166515,166517],{"class":42,"line":43},[40,166514,159013],{"class":50},[40,166516,1284],{"class":1283},[40,166518,162250],{"class":94},[40,166520,166521],{"class":42,"line":54},[40,166522,1413],{"emptyLinePlaceholder":1412},[40,166524,166525,166527,166530,166532],{"class":42,"line":70},[40,166526,33715],{"class":63},[40,166528,166529],{"class":50},"(text[",[40,166531,3672],{"class":63},[40,166533,7980],{"class":50},[40,166535,166536,166538,166540,166542,166544],{"class":42,"line":78},[40,166537,33715],{"class":63},[40,166539,166529],{"class":50},[40,166541,4011],{"class":1283},[40,166543,3698],{"class":63},[40,166545,7980],{"class":50},[40,166547,166548],{"class":42,"line":86},[40,166549,1413],{"emptyLinePlaceholder":1412},[40,166551,166552,166554,166556,166558],{"class":42,"line":100},[40,166553,6349],{"class":1283},[40,166555,162261],{"class":50},[40,166557,29355],{"class":1283},[40,166559,166560],{"class":50}," text:\n",[40,166562,166563,166565],{"class":42,"line":108},[40,166564,34599],{"class":63},[40,166566,162272],{"class":50},[19,166568,166569],{},"字符串不可变：",[31,166571,166573],{"className":33679,"code":166572,"language":2323,"meta":36,"style":36},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[26,166574,166575,166583],{"__ignoreMap":36},[40,166576,166577,166579,166581],{"class":42,"line":43},[40,166578,159013],{"class":50},[40,166580,1284],{"class":1283},[40,166582,162250],{"class":94},[40,166584,166585,166588,166590,166592,166594,166597],{"class":42,"line":54},[40,166586,166587],{"class":50},"text[",[40,166589,3672],{"class":63},[40,166591,7766],{"class":50},[40,166593,1284],{"class":1283},[40,166595,166596],{"class":94}," \"P\"",[40,166598,166599],{"class":997},"  # 报错\n",[19,166601,166602],{},"如果要得到新字符串：",[31,166604,166606],{"className":33679,"code":166605,"language":2323,"meta":36,"style":36},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[26,166607,166608,166616,166634],{"__ignoreMap":36},[40,166609,166610,166612,166614],{"class":42,"line":43},[40,166611,159013],{"class":50},[40,166613,1284],{"class":1283},[40,166615,162250],{"class":94},[40,166617,166618,166620,166622,166624,166626,166629,166631],{"class":42,"line":54},[40,166619,159013],{"class":50},[40,166621,1284],{"class":1283},[40,166623,166596],{"class":94},[40,166625,48866],{"class":1283},[40,166627,166628],{"class":50}," text[",[40,166630,3698],{"class":63},[40,166632,166633],{"class":50},":]\n",[40,166635,166636,166638],{"class":42,"line":70},[40,166637,33715],{"class":63},[40,166639,166640],{"class":50},"(text)\n",[14,166642,166644],{"id":166643},"_68-切片","6.8 切片",[19,166646,166647],{},"切片用于从序列中取一部分。",[31,166649,166651],{"className":33679,"code":166650,"language":2323,"meta":36,"style":36},"序列[开始:结束:步长]\n",[26,166652,166653],{"__ignoreMap":36},[40,166654,166655],{"class":42,"line":43},[40,166656,166650],{"class":50},[19,166658,166659],{},"结束位置不包含。",[31,166661,166663],{"className":33679,"code":166662,"language":2323,"meta":36,"style":36},"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",[26,166664,166665,166702,166706,166725,166740,166754,166768],{"__ignoreMap":36},[40,166666,166667,166670,166672,166674,166676,166678,166680,166682,166684,166686,166688,166690,166692,166694,166696,166698,166700],{"class":42,"line":43},[40,166668,166669],{"class":50},"nums ",[40,166671,1284],{"class":1283},[40,166673,55524],{"class":50},[40,166675,3672],{"class":63},[40,166677,15757],{"class":50},[40,166679,3698],{"class":63},[40,166681,15757],{"class":50},[40,166683,64],{"class":63},[40,166685,15757],{"class":50},[40,166687,3555],{"class":63},[40,166689,15757],{"class":50},[40,166691,3773],{"class":63},[40,166693,15757],{"class":50},[40,166695,3799],{"class":63},[40,166697,15757],{"class":50},[40,166699,3824],{"class":63},[40,166701,36546],{"class":50},[40,166703,166704],{"class":42,"line":54},[40,166705,1413],{"emptyLinePlaceholder":1412},[40,166707,166708,166710,166713,166715,166717,166719,166722],{"class":42,"line":70},[40,166709,33715],{"class":63},[40,166711,166712],{"class":50},"(nums[",[40,166714,3698],{"class":63},[40,166716,4336],{"class":50},[40,166718,3773],{"class":63},[40,166720,166721],{"class":50},"])    ",[40,166723,166724],{"class":997},"# [1, 2, 3]\n",[40,166726,166727,166729,166732,166734,166737],{"class":42,"line":78},[40,166728,33715],{"class":63},[40,166730,166731],{"class":50},"(nums[:",[40,166733,3555],{"class":63},[40,166735,166736],{"class":50},"])     ",[40,166738,166739],{"class":997},"# [0, 1, 2]\n",[40,166741,166742,166744,166746,166748,166751],{"class":42,"line":86},[40,166743,33715],{"class":63},[40,166745,166712],{"class":50},[40,166747,3555],{"class":63},[40,166749,166750],{"class":50},":])     ",[40,166752,166753],{"class":997},"# [3, 4, 5, 6]\n",[40,166755,166756,166758,166761,166763,166765],{"class":42,"line":100},[40,166757,33715],{"class":63},[40,166759,166760],{"class":50},"(nums[::",[40,166762,64],{"class":63},[40,166764,166721],{"class":50},[40,166766,166767],{"class":997},"# [0, 2, 4, 6]\n",[40,166769,166770,166772,166774,166776,166778,166781],{"class":42,"line":108},[40,166771,33715],{"class":63},[40,166773,166760],{"class":50},[40,166775,4011],{"class":1283},[40,166777,3698],{"class":63},[40,166779,166780],{"class":50},"])   ",[40,166782,166783],{"class":997},"# 反转\n",[19,166785,166786],{},"字符串切片：",[31,166788,166790],{"className":33679,"code":166789,"language":2323,"meta":36,"style":36},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[26,166791,166792,166801,166815],{"__ignoreMap":36},[40,166793,166794,166796,166798],{"class":42,"line":43},[40,166795,159013],{"class":50},[40,166797,1284],{"class":1283},[40,166799,166800],{"class":94}," \"abcdef\"\n",[40,166802,166803,166805,166807,166809,166811,166813],{"class":42,"line":54},[40,166804,33715],{"class":63},[40,166806,166529],{"class":50},[40,166808,3698],{"class":63},[40,166810,4336],{"class":50},[40,166812,3773],{"class":63},[40,166814,7980],{"class":50},[40,166816,166817,166819,166822,166824,166826],{"class":42,"line":70},[40,166818,33715],{"class":63},[40,166820,166821],{"class":50},"(text[::",[40,166823,4011],{"class":1283},[40,166825,3698],{"class":63},[40,166827,7980],{"class":50},[14,166829,166831],{"id":166830},"_69-集合set","6.9 集合set",[19,166833,166834],{},"集合特点：",[492,166836,166837,166840,166843],{},[495,166838,166839],{},"无序。",[495,166841,166842],{},"元素不重复。",[495,166844,166845],{},"可以做交集、并集、差集。",[31,166847,166849],{"className":33679,"code":166848,"language":2323,"meta":36,"style":36},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[26,166850,166851,166879],{"__ignoreMap":36},[40,166852,166853,166855,166857,166859,166861,166863,166865,166867,166869,166871,166873,166875,166877],{"class":42,"line":43},[40,166854,166669],{"class":50},[40,166856,1284],{"class":1283},[40,166858,7771],{"class":50},[40,166860,3698],{"class":63},[40,166862,15757],{"class":50},[40,166864,64],{"class":63},[40,166866,15757],{"class":50},[40,166868,3555],{"class":63},[40,166870,15757],{"class":50},[40,166872,3555],{"class":63},[40,166874,15757],{"class":50},[40,166876,3773],{"class":63},[40,166878,4907],{"class":50},[40,166880,166881,166883],{"class":42,"line":54},[40,166882,33715],{"class":63},[40,166884,166885],{"class":50},"(nums)\n",[19,166887,166888],{},"创建空集合：",[31,166890,166892],{"className":33679,"code":166891,"language":2323,"meta":36,"style":36},"s = set()\n",[26,166893,166894],{"__ignoreMap":36},[40,166895,166896,166898,166900,166902],{"class":42,"line":43},[40,166897,13901],{"class":50},[40,166899,1284],{"class":1283},[40,166901,123005],{"class":63},[40,166903,5302],{"class":50},[19,166905,12347,166906,166908],{},[26,166907,35759],{}," 是空字典，不是空集合。",[19,166910,166911],{},"集合常用操作：",[31,166913,166915],{"className":33679,"code":166914,"language":2323,"meta":36,"style":36},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[26,166916,166917,166937,166941,166950,166959,166968],{"__ignoreMap":36},[40,166918,166919,166921,166923,166925,166927,166929,166931,166933,166935],{"class":42,"line":43},[40,166920,13901],{"class":50},[40,166922,1284],{"class":1283},[40,166924,7771],{"class":50},[40,166926,3698],{"class":63},[40,166928,15757],{"class":50},[40,166930,64],{"class":63},[40,166932,15757],{"class":50},[40,166934,3555],{"class":63},[40,166936,4907],{"class":50},[40,166938,166939],{"class":42,"line":54},[40,166940,1413],{"emptyLinePlaceholder":1412},[40,166942,166943,166946,166948],{"class":42,"line":70},[40,166944,166945],{"class":50},"s.add(",[40,166947,3773],{"class":63},[40,166949,1811],{"class":50},[40,166951,166952,166955,166957],{"class":42,"line":78},[40,166953,166954],{"class":50},"s.remove(",[40,166956,64],{"class":63},[40,166958,1811],{"class":50},[40,166960,166961,166964,166966],{"class":42,"line":86},[40,166962,166963],{"class":50},"s.discard(",[40,166965,3925],{"class":63},[40,166967,1811],{"class":50},[40,166969,166970,166972,166974,166976],{"class":42,"line":100},[40,166971,33715],{"class":63},[40,166973,3488],{"class":50},[40,166975,10681],{"class":63},[40,166977,166978],{"class":50},"(s))\n",[19,166980,166981],{},"交并差：",[31,166983,166985],{"className":33679,"code":166984,"language":2323,"meta":36,"style":36},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[26,166986,166987,167007,167027,167031,167046,167059],{"__ignoreMap":36},[40,166988,166989,166991,166993,166995,166997,166999,167001,167003,167005],{"class":42,"line":43},[40,166990,14241],{"class":50},[40,166992,1284],{"class":1283},[40,166994,7771],{"class":50},[40,166996,3698],{"class":63},[40,166998,15757],{"class":50},[40,167000,64],{"class":63},[40,167002,15757],{"class":50},[40,167004,3555],{"class":63},[40,167006,4907],{"class":50},[40,167008,167009,167011,167013,167015,167017,167019,167021,167023,167025],{"class":42,"line":54},[40,167010,14267],{"class":50},[40,167012,1284],{"class":1283},[40,167014,7771],{"class":50},[40,167016,3555],{"class":63},[40,167018,15757],{"class":50},[40,167020,3773],{"class":63},[40,167022,15757],{"class":50},[40,167024,3799],{"class":63},[40,167026,4907],{"class":50},[40,167028,167029],{"class":42,"line":70},[40,167030,1413],{"emptyLinePlaceholder":1412},[40,167032,167033,167035,167038,167040,167043],{"class":42,"line":78},[40,167034,33715],{"class":63},[40,167036,167037],{"class":50},"(a ",[40,167039,3833],{"class":1283},[40,167041,167042],{"class":50}," b)  ",[40,167044,167045],{"class":997},"# 交集\n",[40,167047,167048,167050,167052,167054,167056],{"class":42,"line":86},[40,167049,33715],{"class":63},[40,167051,167037],{"class":50},[40,167053,4398],{"class":1283},[40,167055,167042],{"class":50},[40,167057,167058],{"class":997},"# 并集\n",[40,167060,167061,167063,167065,167067,167069],{"class":42,"line":100},[40,167062,33715],{"class":63},[40,167064,167037],{"class":50},[40,167066,4011],{"class":1283},[40,167068,167042],{"class":50},[40,167070,167071],{"class":997},"# 差集\n",[14,167073,167075],{"id":167074},"_610-字典dict","6.10 字典dict",[19,167077,167078],{},"字典通过 key-value 保存数据。",[31,167080,167082],{"className":33679,"code":167081,"language":2323,"meta":36,"style":36},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[26,167083,167084,167092,167102,167113,167123],{"__ignoreMap":36},[40,167085,167086,167088,167090],{"class":42,"line":43},[40,167087,152050],{"class":50},[40,167089,1284],{"class":1283},[40,167091,18894],{"class":50},[40,167093,167094,167096,167098,167100],{"class":42,"line":54},[40,167095,149589],{"class":94},[40,167097,60],{"class":50},[40,167099,152457],{"class":94},[40,167101,34766],{"class":50},[40,167103,167104,167107,167109,167111],{"class":42,"line":70},[40,167105,167106],{"class":94},"    \"age\"",[40,167108,60],{"class":50},[40,167110,4128],{"class":63},[40,167112,34766],{"class":50},[40,167114,167115,167118,167120],{"class":42,"line":78},[40,167116,167117],{"class":94},"    \"score\"",[40,167119,60],{"class":50},[40,167121,167122],{"class":63},"95\n",[40,167124,167125],{"class":42,"line":86},[40,167126,4907],{"class":50},[19,167128,167129],{},"获取值：",[31,167131,167133],{"className":33679,"code":167132,"language":2323,"meta":36,"style":36},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[26,167134,167135,167146],{"__ignoreMap":36},[40,167136,167137,167139,167142,167144],{"class":42,"line":43},[40,167138,33715],{"class":63},[40,167140,167141],{"class":50},"(student[",[40,167143,65977],{"class":94},[40,167145,7980],{"class":50},[40,167147,167148,167150,167153,167155],{"class":42,"line":54},[40,167149,33715],{"class":63},[40,167151,167152],{"class":50},"(student.get(",[40,167154,65977],{"class":94},[40,167156,33797],{"class":50},[19,167158,18710],{},[31,167160,167162],{"className":33679,"code":167161,"language":2323,"meta":36,"style":36},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[26,167163,167164,167177],{"__ignoreMap":36},[40,167165,167166,167168,167171,167174],{"class":42,"line":43},[40,167167,155428],{"class":50},[40,167169,167170],{"class":94},"\"address\"",[40,167172,167173],{"class":50},"]     ",[40,167175,167176],{"class":997},"# key不存在会报错\n",[40,167178,167179,167182,167184,167186],{"class":42,"line":54},[40,167180,167181],{"class":50},"student.get(",[40,167183,167170],{"class":94},[40,167185,17036],{"class":50},[40,167187,167188],{"class":997},"# key不存在返回None\n",[19,167190,167191],{},"设置默认值：",[31,167193,167195],{"className":33679,"code":167194,"language":2323,"meta":36,"style":36},"print(student.get(\"address\", \"未知\"))\n",[26,167196,167197],{"__ignoreMap":36},[40,167198,167199,167201,167203,167205,167207,167210],{"class":42,"line":43},[40,167200,33715],{"class":63},[40,167202,167152],{"class":50},[40,167204,167170],{"class":94},[40,167206,15757],{"class":50},[40,167208,167209],{"class":94},"\"未知\"",[40,167211,33797],{"class":50},[19,167213,167214],{},"新增和修改：",[31,167216,167218],{"className":33679,"code":167217,"language":2323,"meta":36,"style":36},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[26,167219,167220,167233],{"__ignoreMap":36},[40,167221,167222,167224,167226,167228,167230],{"class":42,"line":43},[40,167223,155428],{"class":50},[40,167225,72422],{"class":94},[40,167227,7766],{"class":50},[40,167229,1284],{"class":1283},[40,167231,167232],{"class":63}," 19\n",[40,167234,167235,167237,167239,167241,167243],{"class":42,"line":54},[40,167236,155428],{"class":50},[40,167238,167170],{"class":94},[40,167240,7766],{"class":50},[40,167242,1284],{"class":1283},[40,167244,167245],{"class":94}," \"北京\"\n",[19,167247,167248],{},"删除：",[31,167250,167252],{"className":33679,"code":167251,"language":2323,"meta":36,"style":36},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[26,167253,167254,167267,167277],{"__ignoreMap":36},[40,167255,167256,167258,167260,167263,167265],{"class":42,"line":43},[40,167257,157927],{"class":50},[40,167259,1284],{"class":1283},[40,167261,167262],{"class":50}," student.pop(",[40,167264,154041],{"class":94},[40,167266,1811],{"class":50},[40,167268,167269,167271,167273,167275],{"class":42,"line":54},[40,167270,165952],{"class":1283},[40,167272,154718],{"class":50},[40,167274,72422],{"class":94},[40,167276,36546],{"class":50},[40,167278,167279],{"class":42,"line":70},[40,167280,167281],{"class":50},"student.clear()\n",[14,167283,167285],{"id":167284},"_611-字典遍历","6.11 字典遍历",[19,167287,167288],{},"遍历 key：",[31,167290,167292],{"className":33679,"code":167291,"language":2323,"meta":36,"style":36},"for key in student:\n    print(key, student[key])\n",[26,167293,167294,167306],{"__ignoreMap":36},[40,167295,167296,167298,167301,167303],{"class":42,"line":43},[40,167297,6349],{"class":1283},[40,167299,167300],{"class":50}," key ",[40,167302,29355],{"class":1283},[40,167304,167305],{"class":50}," student:\n",[40,167307,167308,167310],{"class":42,"line":54},[40,167309,34599],{"class":63},[40,167311,167312],{"class":50},"(key, student[key])\n",[19,167314,167315],{},"遍历 value：",[31,167317,167319],{"className":33679,"code":167318,"language":2323,"meta":36,"style":36},"for value in student.values():\n    print(value)\n",[26,167320,167321,167333],{"__ignoreMap":36},[40,167322,167323,167325,167328,167330],{"class":42,"line":43},[40,167324,6349],{"class":1283},[40,167326,167327],{"class":50}," value ",[40,167329,29355],{"class":1283},[40,167331,167332],{"class":50}," student.values():\n",[40,167334,167335,167337],{"class":42,"line":54},[40,167336,34599],{"class":63},[40,167338,167339],{"class":50},"(value)\n",[19,167341,167342],{},"遍历 key 和 value：",[31,167344,167346],{"className":33679,"code":167345,"language":2323,"meta":36,"style":36},"for key, value in student.items():\n    print(key, value)\n",[26,167347,167348,167360],{"__ignoreMap":36},[40,167349,167350,167352,167355,167357],{"class":42,"line":43},[40,167351,6349],{"class":1283},[40,167353,167354],{"class":50}," key, value ",[40,167356,29355],{"class":1283},[40,167358,167359],{"class":50}," student.items():\n",[40,167361,167362,167364],{"class":42,"line":54},[40,167363,34599],{"class":63},[40,167365,167366],{"class":50},"(key, value)\n",[14,167368,167370],{"id":167369},"_612-嵌套容器","6.12 嵌套容器",[19,167372,167373],{},"列表中保存字典，是项目中最常见的结构之一。",[31,167375,167377],{"className":33679,"code":167376,"language":2323,"meta":36,"style":36},"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",[26,167378,167379,167387,167415,167443,167471,167475,167479,167489],{"__ignoreMap":36},[40,167380,167381,167383,167385],{"class":42,"line":43},[40,167382,162285],{"class":50},[40,167384,1284],{"class":1283},[40,167386,58745],{"class":50},[40,167388,167389,167391,167393,167395,167397,167399,167401,167403,167405,167407,167409,167411,167413],{"class":42,"line":54},[40,167390,150954],{"class":50},[40,167392,65977],{"class":94},[40,167394,60],{"class":50},[40,167396,152457],{"class":94},[40,167398,15757],{"class":50},[40,167400,72422],{"class":94},[40,167402,60],{"class":50},[40,167404,4128],{"class":63},[40,167406,15757],{"class":50},[40,167408,154041],{"class":94},[40,167410,60],{"class":50},[40,167412,4466],{"class":63},[40,167414,8253],{"class":50},[40,167416,167417,167419,167421,167423,167425,167427,167429,167431,167433,167435,167437,167439,167441],{"class":42,"line":70},[40,167418,150954],{"class":50},[40,167420,65977],{"class":94},[40,167422,60],{"class":50},[40,167424,153505],{"class":94},[40,167426,15757],{"class":50},[40,167428,72422],{"class":94},[40,167430,60],{"class":50},[40,167432,4104],{"class":63},[40,167434,15757],{"class":50},[40,167436,154041],{"class":94},[40,167438,60],{"class":50},[40,167440,4288],{"class":63},[40,167442,8253],{"class":50},[40,167444,167445,167447,167449,167451,167453,167455,167457,167459,167461,167463,167465,167467,167469],{"class":42,"line":78},[40,167446,150954],{"class":50},[40,167448,65977],{"class":94},[40,167450,60],{"class":50},[40,167452,162300],{"class":94},[40,167454,15757],{"class":50},[40,167456,72422],{"class":94},[40,167458,60],{"class":50},[40,167460,4153],{"class":63},[40,167462,15757],{"class":50},[40,167464,154041],{"class":94},[40,167466,60],{"class":50},[40,167468,3885],{"class":63},[40,167470,8253],{"class":50},[40,167472,167473],{"class":42,"line":86},[40,167474,36546],{"class":50},[40,167476,167477],{"class":42,"line":100},[40,167478,1413],{"emptyLinePlaceholder":1412},[40,167480,167481,167483,167485,167487],{"class":42,"line":108},[40,167482,6349],{"class":1283},[40,167484,154706],{"class":50},[40,167486,29355],{"class":1283},[40,167488,154711],{"class":50},[40,167490,167491,167493,167495,167497,167500,167502],{"class":42,"line":121},[40,167492,34599],{"class":63},[40,167494,167141],{"class":50},[40,167496,65977],{"class":94},[40,167498,167499],{"class":50},"], student[",[40,167501,154041],{"class":94},[40,167503,7980],{"class":50},[19,167505,167506],{},"统计平均分：",[31,167508,167510],{"className":33679,"code":167509,"language":2323,"meta":36,"style":36},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[26,167511,167512,167520,167524,167534,167546,167550,167565],{"__ignoreMap":36},[40,167513,167514,167516,167518],{"class":42,"line":43},[40,167515,159829],{"class":50},[40,167517,1284],{"class":1283},[40,167519,50633],{"class":63},[40,167521,167522],{"class":42,"line":54},[40,167523,1413],{"emptyLinePlaceholder":1412},[40,167525,167526,167528,167530,167532],{"class":42,"line":70},[40,167527,6349],{"class":1283},[40,167529,154706],{"class":50},[40,167531,29355],{"class":1283},[40,167533,154711],{"class":50},[40,167535,167536,167538,167540,167542,167544],{"class":42,"line":78},[40,167537,161876],{"class":50},[40,167539,12799],{"class":1283},[40,167541,154718],{"class":50},[40,167543,154041],{"class":94},[40,167545,36546],{"class":50},[40,167547,167548],{"class":42,"line":86},[40,167549,1413],{"emptyLinePlaceholder":1412},[40,167551,167552,167554,167556,167558,167560,167562],{"class":42,"line":100},[40,167553,166343],{"class":50},[40,167555,1284],{"class":1283},[40,167557,166348],{"class":50},[40,167559,4063],{"class":1283},[40,167561,10654],{"class":63},[40,167563,167564],{"class":50},"(students)\n",[40,167566,167567,167569,167571,167573,167575,167577,167579,167581,167583,167585],{"class":42,"line":108},[40,167568,33715],{"class":63},[40,167570,3488],{"class":50},[40,167572,3537],{"class":1283},[40,167574,166366],{"class":94},[40,167576,4373],{"class":63},[40,167578,166371],{"class":50},[40,167580,159728],{"class":1283},[40,167582,4423],{"class":63},[40,167584,3731],{"class":94},[40,167586,1811],{"class":50},[19,167588,167589],{},"查找学生：",[31,167591,167593],{"className":33679,"code":167592,"language":2323,"meta":36,"style":36},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[26,167594,167595,167610,167614,167624,167638,167644,167648,167654],{"__ignoreMap":36},[40,167596,167597,167599,167601,167603,167605,167608],{"class":42,"line":43},[40,167598,114869],{"class":50},[40,167600,1284],{"class":1283},[40,167602,63903],{"class":63},[40,167604,3488],{"class":50},[40,167606,167607],{"class":94},"\"请输入学生姓名:\"",[40,167609,1811],{"class":50},[40,167611,167612],{"class":42,"line":54},[40,167613,1413],{"emptyLinePlaceholder":1412},[40,167615,167616,167618,167620,167622],{"class":42,"line":70},[40,167617,6349],{"class":1283},[40,167619,154706],{"class":50},[40,167621,29355],{"class":1283},[40,167623,154711],{"class":50},[40,167625,167626,167628,167630,167632,167634,167636],{"class":42,"line":78},[40,167627,6425],{"class":1283},[40,167629,154718],{"class":50},[40,167631,65977],{"class":94},[40,167633,7766],{"class":50},[40,167635,6273],{"class":1283},[40,167637,163001],{"class":50},[40,167639,167640,167642],{"class":42,"line":86},[40,167641,35751],{"class":63},[40,167643,152611],{"class":50},[40,167645,167646],{"class":42,"line":100},[40,167647,34927],{"class":1283},[40,167649,167650,167652],{"class":42,"line":108},[40,167651,5032],{"class":1283},[40,167653,332],{"class":50},[40,167655,167656,167658,167660,167663],{"class":42,"line":121},[40,167657,34599],{"class":63},[40,167659,3488],{"class":50},[40,167661,167662],{"class":94},"\"没有找到\"",[40,167664,1811],{"class":50},[14,167666,167668],{"id":167667},"_613-容器通用操作","6.13 容器通用操作",[19,167670,167671],{},"长度：",[31,167673,167675],{"className":33679,"code":167674,"language":2323,"meta":36,"style":36},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[26,167676,167677,167696,167706],{"__ignoreMap":36},[40,167678,167679,167681,167684,167686,167688,167690,167692,167694],{"class":42,"line":43},[40,167680,10681],{"class":63},[40,167682,167683],{"class":50},"([",[40,167685,3698],{"class":63},[40,167687,15757],{"class":50},[40,167689,64],{"class":63},[40,167691,15757],{"class":50},[40,167693,3555],{"class":63},[40,167695,7980],{"class":50},[40,167697,167698,167700,167702,167704],{"class":42,"line":54},[40,167699,10681],{"class":63},[40,167701,3488],{"class":50},[40,167703,158449],{"class":94},[40,167705,1811],{"class":50},[40,167707,167708,167710,167713,167715,167717,167719],{"class":42,"line":70},[40,167709,10681],{"class":63},[40,167711,167712],{"class":50},"({",[40,167714,65977],{"class":94},[40,167716,60],{"class":50},[40,167718,152457],{"class":94},[40,167720,167721],{"class":50},"})\n",[19,167723,167724],{},"最大最小：",[31,167726,167728],{"className":33679,"code":167727,"language":2323,"meta":36,"style":36},"max([1, 2, 3])\nmin([1, 2, 3])\n",[26,167729,167730,167748],{"__ignoreMap":36},[40,167731,167732,167734,167736,167738,167740,167742,167744,167746],{"class":42,"line":43},[40,167733,9338],{"class":63},[40,167735,167683],{"class":50},[40,167737,3698],{"class":63},[40,167739,15757],{"class":50},[40,167741,64],{"class":63},[40,167743,15757],{"class":50},[40,167745,3555],{"class":63},[40,167747,7980],{"class":50},[40,167749,167750,167753,167755,167757,167759,167761,167763,167765],{"class":42,"line":54},[40,167751,167752],{"class":63},"min",[40,167754,167683],{"class":50},[40,167756,3698],{"class":63},[40,167758,15757],{"class":50},[40,167760,64],{"class":63},[40,167762,15757],{"class":50},[40,167764,3555],{"class":63},[40,167766,7980],{"class":50},[19,167768,167769],{},"求和：",[31,167771,167773],{"className":33679,"code":167772,"language":2323,"meta":36,"style":36},"sum([1, 2, 3])\n",[26,167774,167775],{"__ignoreMap":36},[40,167776,167777,167780,167782,167784,167786,167788,167790,167792],{"class":42,"line":43},[40,167778,167779],{"class":63},"sum",[40,167781,167683],{"class":50},[40,167783,3698],{"class":63},[40,167785,15757],{"class":50},[40,167787,64],{"class":63},[40,167789,15757],{"class":50},[40,167791,3555],{"class":63},[40,167793,7980],{"class":50},[19,167795,166040],{},[31,167797,167799],{"className":33679,"code":167798,"language":2323,"meta":36,"style":36},"sorted([3, 1, 2])\n",[26,167800,167801],{"__ignoreMap":36},[40,167802,167803,167806,167808,167810,167812,167814,167816,167818],{"class":42,"line":43},[40,167804,167805],{"class":63},"sorted",[40,167807,167683],{"class":50},[40,167809,3555],{"class":63},[40,167811,15757],{"class":50},[40,167813,3698],{"class":63},[40,167815,15757],{"class":50},[40,167817,64],{"class":63},[40,167819,7980],{"class":50},[19,167821,167822],{},"类型转换：",[31,167824,167826],{"className":33679,"code":167825,"language":2323,"meta":36,"style":36},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[26,167827,167828,167838,167856],{"__ignoreMap":36},[40,167829,167830,167832,167834,167836],{"class":42,"line":43},[40,167831,156639],{"class":63},[40,167833,3488],{"class":50},[40,167835,158449],{"class":94},[40,167837,1811],{"class":50},[40,167839,167840,167842,167844,167846,167848,167850,167852,167854],{"class":42,"line":54},[40,167841,157834],{"class":63},[40,167843,167683],{"class":50},[40,167845,3698],{"class":63},[40,167847,15757],{"class":50},[40,167849,64],{"class":63},[40,167851,15757],{"class":50},[40,167853,3555],{"class":63},[40,167855,7980],{"class":50},[40,167857,167858,167860,167862,167864,167866,167868,167870,167872,167874,167876],{"class":42,"line":70},[40,167859,157859],{"class":63},[40,167861,167683],{"class":50},[40,167863,3698],{"class":63},[40,167865,15757],{"class":50},[40,167867,3698],{"class":63},[40,167869,15757],{"class":50},[40,167871,64],{"class":63},[40,167873,15757],{"class":50},[40,167875,3555],{"class":63},[40,167877,7980],{"class":50},[19,167879,167880],{},"成员判断：",[31,167882,167884],{"className":33679,"code":167883,"language":2323,"meta":36,"style":36},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[26,167885,167886,167903,167927],{"__ignoreMap":36},[40,167887,167888,167890,167892,167895,167898,167901],{"class":42,"line":43},[40,167889,33715],{"class":63},[40,167891,3488],{"class":50},[40,167893,167894],{"class":94},"\"a\"",[40,167896,167897],{"class":1283}," in",[40,167899,167900],{"class":94}," \"abc\"",[40,167902,1811],{"class":50},[40,167904,167905,167907,167909,167911,167913,167915,167917,167919,167921,167923,167925],{"class":42,"line":54},[40,167906,33715],{"class":63},[40,167908,3488],{"class":50},[40,167910,3698],{"class":63},[40,167912,167897],{"class":1283},[40,167914,55524],{"class":50},[40,167916,3698],{"class":63},[40,167918,15757],{"class":50},[40,167920,64],{"class":63},[40,167922,15757],{"class":50},[40,167924,3555],{"class":63},[40,167926,7980],{"class":50},[40,167928,167929,167931,167933,167935,167937,167939,167941,167943,167945],{"class":42,"line":70},[40,167930,33715],{"class":63},[40,167932,3488],{"class":50},[40,167934,65977],{"class":94},[40,167936,167897],{"class":1283},[40,167938,7771],{"class":50},[40,167940,65977],{"class":94},[40,167942,60],{"class":50},[40,167944,152457],{"class":94},[40,167946,167721],{"class":50},[14,167948,167950],{"id":167949},"_614-推导式","6.14 推导式",[19,167952,167953],{},"推导式用于快速生成容器。",[19,167955,167956],{},"列表推导式：",[31,167958,167960],{"className":33679,"code":167959,"language":2323,"meta":36,"style":36},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[26,167961,167962,167989],{"__ignoreMap":36},[40,167963,167964,167966,167968,167971,167973,167975,167977,167979,167981,167983,167985,167987],{"class":42,"line":43},[40,167965,166669],{"class":50},[40,167967,1284],{"class":1283},[40,167969,167970],{"class":50}," [i ",[40,167972,6349],{"class":1283},[40,167974,12760],{"class":50},[40,167976,29355],{"class":1283},[40,167978,35743],{"class":63},[40,167980,3488],{"class":50},[40,167982,3698],{"class":63},[40,167984,15757],{"class":50},[40,167986,3824],{"class":63},[40,167988,100595],{"class":50},[40,167990,167991,167993],{"class":42,"line":54},[40,167992,33715],{"class":63},[40,167994,166885],{"class":50},[19,167996,167997],{},"带条件：",[31,167999,168001],{"className":33679,"code":168000,"language":2323,"meta":36,"style":36},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[26,168002,168003,168044],{"__ignoreMap":36},[40,168004,168005,168008,168010,168012,168014,168016,168018,168020,168022,168024,168026,168028,168030,168032,168034,168036,168038,168040,168042],{"class":42,"line":43},[40,168006,168007],{"class":50},"even_nums ",[40,168009,1284],{"class":1283},[40,168011,167970],{"class":50},[40,168013,6349],{"class":1283},[40,168015,12760],{"class":50},[40,168017,29355],{"class":1283},[40,168019,35743],{"class":63},[40,168021,3488],{"class":50},[40,168023,3698],{"class":63},[40,168025,15757],{"class":50},[40,168027,3817],{"class":63},[40,168029,17036],{"class":50},[40,168031,4873],{"class":1283},[40,168033,12760],{"class":50},[40,168035,3808],{"class":1283},[40,168037,18077],{"class":63},[40,168039,104850],{"class":1283},[40,168041,7416],{"class":63},[40,168043,36546],{"class":50},[40,168045,168046,168048],{"class":42,"line":54},[40,168047,33715],{"class":63},[40,168049,168050],{"class":50},"(even_nums)\n",[19,168052,168053],{},"字典推导式：",[31,168055,168057],{"className":33679,"code":168056,"language":2323,"meta":36,"style":36},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[26,168058,168059,168093],{"__ignoreMap":36},[40,168060,168061,168064,168066,168069,168071,168073,168076,168078,168080,168082,168084,168086,168088,168090],{"class":42,"line":43},[40,168062,168063],{"class":50},"squares ",[40,168065,1284],{"class":1283},[40,168067,168068],{"class":50}," {i: i ",[40,168070,13983],{"class":1283},[40,168072,18077],{"class":63},[40,168074,168075],{"class":1283}," for",[40,168077,12760],{"class":50},[40,168079,29355],{"class":1283},[40,168081,35743],{"class":63},[40,168083,3488],{"class":50},[40,168085,3698],{"class":63},[40,168087,15757],{"class":50},[40,168089,3824],{"class":63},[40,168091,168092],{"class":50},")}\n",[40,168094,168095,168097],{"class":42,"line":54},[40,168096,33715],{"class":63},[40,168098,168099],{"class":50},"(squares)\n",[19,168101,168102],{},"集合推导式：",[31,168104,168106],{"className":33679,"code":168105,"language":2323,"meta":36,"style":36},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[26,168107,168108,168129],{"__ignoreMap":36},[40,168109,168110,168113,168115,168118,168120,168122,168124,168127],{"class":42,"line":43},[40,168111,168112],{"class":50},"chars ",[40,168114,1284],{"class":1283},[40,168116,168117],{"class":50}," {ch ",[40,168119,6349],{"class":1283},[40,168121,162261],{"class":50},[40,168123,29355],{"class":1283},[40,168125,168126],{"class":94}," \"hello\"",[40,168128,4907],{"class":50},[40,168130,168131,168133],{"class":42,"line":54},[40,168132,33715],{"class":63},[40,168134,168135],{"class":50},"(chars)\n",[19,168137,168138],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,168140,168142],{"id":168141},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[31,168144,168146],{"className":33679,"code":168145,"language":2323,"meta":36,"style":36},"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",[26,168147,168148,168156,168176,168196,168216,168236,168240,168244,168252,168266,168275,168279,168289,168301,168305,168325,168334,168338,168354,168359,168363,168377,168381,168403,168439],{"__ignoreMap":36},[40,168149,168150,168152,168154],{"class":42,"line":43},[40,168151,162285],{"class":50},[40,168153,1284],{"class":1283},[40,168155,58745],{"class":50},[40,168157,168158,168160,168162,168164,168166,168168,168170,168172,168174],{"class":42,"line":54},[40,168159,150954],{"class":50},[40,168161,65977],{"class":94},[40,168163,60],{"class":50},[40,168165,152457],{"class":94},[40,168167,15757],{"class":50},[40,168169,154041],{"class":94},[40,168171,60],{"class":50},[40,168173,4466],{"class":63},[40,168175,8253],{"class":50},[40,168177,168178,168180,168182,168184,168186,168188,168190,168192,168194],{"class":42,"line":70},[40,168179,150954],{"class":50},[40,168181,65977],{"class":94},[40,168183,60],{"class":50},[40,168185,153505],{"class":94},[40,168187,15757],{"class":50},[40,168189,154041],{"class":94},[40,168191,60],{"class":50},[40,168193,4288],{"class":63},[40,168195,8253],{"class":50},[40,168197,168198,168200,168202,168204,168206,168208,168210,168212,168214],{"class":42,"line":78},[40,168199,150954],{"class":50},[40,168201,65977],{"class":94},[40,168203,60],{"class":50},[40,168205,162300],{"class":94},[40,168207,15757],{"class":50},[40,168209,154041],{"class":94},[40,168211,60],{"class":50},[40,168213,3885],{"class":63},[40,168215,8253],{"class":50},[40,168217,168218,168220,168222,168224,168226,168228,168230,168232,168234],{"class":42,"line":86},[40,168219,150954],{"class":50},[40,168221,65977],{"class":94},[40,168223,60],{"class":50},[40,168225,165879],{"class":94},[40,168227,15757],{"class":50},[40,168229,154041],{"class":94},[40,168231,60],{"class":50},[40,168233,4359],{"class":63},[40,168235,8253],{"class":50},[40,168237,168238],{"class":42,"line":100},[40,168239,36546],{"class":50},[40,168241,168242],{"class":42,"line":108},[40,168243,1413],{"emptyLinePlaceholder":1412},[40,168245,168246,168248,168250],{"class":42,"line":121},[40,168247,159829],{"class":50},[40,168249,1284],{"class":1283},[40,168251,50633],{"class":63},[40,168253,168254,168257,168259,168262,168264],{"class":42,"line":134},[40,168255,168256],{"class":50},"max_student ",[40,168258,1284],{"class":1283},[40,168260,168261],{"class":50}," students[",[40,168263,3672],{"class":63},[40,168265,36546],{"class":50},[40,168267,168268,168271,168273],{"class":42,"line":146},[40,168269,168270],{"class":50},"passed ",[40,168272,1284],{"class":1283},[40,168274,55136],{"class":50},[40,168276,168277],{"class":42,"line":154},[40,168278,1413],{"emptyLinePlaceholder":1412},[40,168280,168281,168283,168285,168287],{"class":42,"line":162},[40,168282,6349],{"class":1283},[40,168284,154706],{"class":50},[40,168286,29355],{"class":1283},[40,168288,154711],{"class":50},[40,168290,168291,168293,168295,168297,168299],{"class":42,"line":170},[40,168292,161876],{"class":50},[40,168294,12799],{"class":1283},[40,168296,154718],{"class":50},[40,168298,154041],{"class":94},[40,168300,36546],{"class":50},[40,168302,168303],{"class":42,"line":183},[40,168304,1413],{"emptyLinePlaceholder":1412},[40,168306,168307,168309,168311,168313,168315,168317,168320,168322],{"class":42,"line":196},[40,168308,6425],{"class":1283},[40,168310,154718],{"class":50},[40,168312,154041],{"class":94},[40,168314,7766],{"class":50},[40,168316,4437],{"class":1283},[40,168318,168319],{"class":50}," max_student[",[40,168321,154041],{"class":94},[40,168323,168324],{"class":50},"]:\n",[40,168326,168327,168330,168332],{"class":42,"line":204},[40,168328,168329],{"class":50},"        max_student ",[40,168331,1284],{"class":1283},[40,168333,154734],{"class":50},[40,168335,168336],{"class":42,"line":217},[40,168337,1413],{"emptyLinePlaceholder":1412},[40,168339,168340,168342,168344,168346,168348,168350,168352],{"class":42,"line":230},[40,168341,6425],{"class":1283},[40,168343,154718],{"class":50},[40,168345,154041],{"class":94},[40,168347,7766],{"class":50},[40,168349,5041],{"class":1283},[40,168351,160406],{"class":63},[40,168353,332],{"class":50},[40,168355,168356],{"class":42,"line":238},[40,168357,168358],{"class":50},"        passed.append(student)\n",[40,168360,168361],{"class":42,"line":251},[40,168362,1413],{"emptyLinePlaceholder":1412},[40,168364,168365,168367,168369,168371,168373,168375],{"class":42,"line":264},[40,168366,166343],{"class":50},[40,168368,1284],{"class":1283},[40,168370,166348],{"class":50},[40,168372,4063],{"class":1283},[40,168374,10654],{"class":63},[40,168376,167564],{"class":50},[40,168378,168379],{"class":42,"line":277},[40,168380,1413],{"emptyLinePlaceholder":1412},[40,168382,168383,168385,168387,168389,168391,168393,168395,168397,168399,168401],{"class":42,"line":290},[40,168384,33715],{"class":63},[40,168386,3488],{"class":50},[40,168388,3537],{"class":1283},[40,168390,166366],{"class":94},[40,168392,4373],{"class":63},[40,168394,166371],{"class":50},[40,168396,159728],{"class":1283},[40,168398,4423],{"class":63},[40,168400,3731],{"class":94},[40,168402,1811],{"class":50},[40,168404,168405,168407,168409,168411,168414,168416,168419,168421,168423,168425,168427,168429,168431,168433,168435,168437],{"class":42,"line":298},[40,168406,33715],{"class":63},[40,168408,3488],{"class":50},[40,168410,3537],{"class":1283},[40,168412,168413],{"class":94},"\"最高分学生:",[40,168415,4373],{"class":63},[40,168417,168418],{"class":50},"max_student[",[40,168420,155451],{"class":94},[40,168422,4417],{"class":50},[40,168424,4423],{"class":63},[40,168426,7771],{"class":63},[40,168428,168418],{"class":50},[40,168430,155489],{"class":94},[40,168432,4417],{"class":50},[40,168434,4423],{"class":63},[40,168436,3731],{"class":94},[40,168438,1811],{"class":50},[40,168440,168441,168443,168445,168447,168450,168453,168456,168458,168460],{"class":42,"line":310},[40,168442,33715],{"class":63},[40,168444,3488],{"class":50},[40,168446,3537],{"class":1283},[40,168448,168449],{"class":94},"\"及格人数:",[40,168451,168452],{"class":63},"{len",[40,168454,168455],{"class":50},"(passed)",[40,168457,4423],{"class":63},[40,168459,3731],{"class":94},[40,168461,1811],{"class":50},[14,168463,168465],{"id":168464},"_616-易错点","6.16 易错点",[492,168467,168468,168471,168474,168477,168483,168492],{},[495,168469,168470],{},"列表可变，元组和字符串不可变。",[495,168472,168473],{},"切片结束位置不包含。",[495,168475,168476],{},"字典通过 key 取值，不是通过索引。",[495,168478,168479,168480,776],{},"空集合要用 ",[26,168481,168482],{},"set()",[495,168484,107657,168485,168488,168489,776],{},[26,168486,168487],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[26,168490,168491],{},"get()",[495,168493,168494],{},"嵌套容器要先看清楚每一层是什么类型。",[14,168496,168498],{"id":168497},"_617-本章练习","6.17 本章练习",[492,168500,168501,168504,168507,168510,168513],{},[495,168502,168503],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[495,168505,168506],{},"输入一句话，统计每个字符出现次数。",[495,168508,168509],{},"使用集合去除列表中的重复元素。",[495,168511,168512],{},"使用字典保存一个学生的信息，并实现修改成绩。",[495,168514,168515],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[3384,168517,168518],{},"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":36,"searchDepth":54,"depth":54,"links":168520},[168521,168522,168523,168524,168525,168526,168527,168528,168529,168530,168531,168532,168533,168534,168535,168536,168537],{"id":165501,"depth":54,"text":165502},{"id":165618,"depth":54,"text":165619},{"id":165708,"depth":54,"text":165709},{"id":165832,"depth":54,"text":165833},{"id":166195,"depth":54,"text":166196},{"id":166382,"depth":54,"text":166383},{"id":166501,"depth":54,"text":166502},{"id":166643,"depth":54,"text":166644},{"id":166830,"depth":54,"text":166831},{"id":167074,"depth":54,"text":167075},{"id":167284,"depth":54,"text":167285},{"id":167369,"depth":54,"text":167370},{"id":167667,"depth":54,"text":167668},{"id":167949,"depth":54,"text":167950},{"id":168141,"depth":54,"text":168142},{"id":168464,"depth":54,"text":168465},{"id":168497,"depth":54,"text":168498},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":165493,"description":3413},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":168544,"title":168545,"body":168546,"description":3413,"extension":3414,"meta":170718,"navigation":1412,"path":170719,"seo":170720,"stem":170721,"__hash__":170722},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":168547,"toc":170693},[168548,168551,168555,168558,168638,168641,168662,168665,168669,168672,168734,168737,168754,168758,168761,168806,168808,168816,168820,168823,168905,168908,168911,168936,168939,168962,168966,168969,168971,169033,169036,169038,169089,169093,169097,169103,169208,169212,169218,169289,169293,169296,169364,169367,169447,169451,169457,169493,169496,169499,169609,169615,169619,169622,169694,169697,169701,169705,169710,169772,169776,169781,169849,169853,169858,169974,169978,169981,170061,170064,170068,170071,170175,170177,170192,170195,170199,170337,170345,170349,170351,170362,170364,170622,170626,170658,170662,170690],[10,168549,168545],{"id":168550},"_7-函数进阶",[14,168552,168554],{"id":168553},"_71-多返回值","7.1 多返回值",[19,168556,168557],{},"Python 函数可以返回多个值，本质上返回的是元组。",[31,168559,168561],{"className":33679,"code":168560,"language":2323,"meta":36,"style":36},"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",[26,168562,168563,168572,168580,168588,168597,168604,168608,168612,168621,168627],{"__ignoreMap":36},[40,168564,168565,168567,168570],{"class":42,"line":43},[40,168566,35247],{"class":1283},[40,168568,168569],{"class":596}," get_info",[40,168571,35253],{"class":50},[40,168573,168574,168576,168578],{"class":42,"line":54},[40,168575,154939],{"class":50},[40,168577,1284],{"class":1283},[40,168579,151922],{"class":94},[40,168581,168582,168584,168586],{"class":42,"line":70},[40,168583,154955],{"class":50},[40,168585,1284],{"class":1283},[40,168587,149120],{"class":63},[40,168589,168590,168592,168594],{"class":42,"line":78},[40,168591,154970],{"class":50},[40,168593,1284],{"class":1283},[40,168595,168596],{"class":63}," 95\n",[40,168598,168599,168601],{"class":42,"line":86},[40,168600,7413],{"class":1283},[40,168602,168603],{"class":50}," name, age, score\n",[40,168605,168606],{"class":42,"line":100},[40,168607,1413],{"emptyLinePlaceholder":1412},[40,168609,168610],{"class":42,"line":108},[40,168611,1413],{"emptyLinePlaceholder":1412},[40,168613,168614,168616,168618],{"class":42,"line":121},[40,168615,163875],{"class":50},[40,168617,1284],{"class":1283},[40,168619,168620],{"class":50}," get_info()\n",[40,168622,168623,168625],{"class":42,"line":134},[40,168624,33715],{"class":63},[40,168626,79880],{"class":50},[40,168628,168629,168631,168633,168635],{"class":42,"line":146},[40,168630,33715],{"class":63},[40,168632,3488],{"class":50},[40,168634,106398],{"class":63},[40,168636,168637],{"class":50},"(result))\n",[19,168639,168640],{},"可以直接解包：",[31,168642,168644],{"className":33679,"code":168643,"language":2323,"meta":36,"style":36},"name, age, score = get_info()\nprint(name, age, score)\n",[26,168645,168646,168655],{"__ignoreMap":36},[40,168647,168648,168651,168653],{"class":42,"line":43},[40,168649,168650],{"class":50},"name, age, score ",[40,168652,1284],{"class":1283},[40,168654,168620],{"class":50},[40,168656,168657,168659],{"class":42,"line":54},[40,168658,33715],{"class":63},[40,168660,168661],{"class":50},"(name, age, score)\n",[19,168663,168664],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,168666,168668],{"id":168667},"_72-位置参数","7.2 位置参数",[19,168670,168671],{},"位置参数按顺序传递。",[31,168673,168675],{"className":33679,"code":168674,"language":2323,"meta":36,"style":36},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[26,168676,168677,168685,168713,168717,168721],{"__ignoreMap":36},[40,168678,168679,168681,168683],{"class":42,"line":43},[40,168680,35247],{"class":1283},[40,168682,151941],{"class":596},[40,168684,151944],{"class":50},[40,168686,168687,168689,168691,168693,168695,168697,168699,168701,168703,168705,168707,168709,168711],{"class":42,"line":54},[40,168688,34599],{"class":63},[40,168690,3488],{"class":50},[40,168692,3537],{"class":1283},[40,168694,151955],{"class":94},[40,168696,4373],{"class":63},[40,168698,83105],{"class":50},[40,168700,4423],{"class":63},[40,168702,151964],{"class":94},[40,168704,4373],{"class":63},[40,168706,73517],{"class":50},[40,168708,4423],{"class":63},[40,168710,151973],{"class":94},[40,168712,1811],{"class":50},[40,168714,168715],{"class":42,"line":70},[40,168716,1413],{"emptyLinePlaceholder":1412},[40,168718,168719],{"class":42,"line":78},[40,168720,1413],{"emptyLinePlaceholder":1412},[40,168722,168723,168726,168728,168730,168732],{"class":42,"line":86},[40,168724,168725],{"class":50},"introduce(",[40,168727,152457],{"class":94},[40,168729,15757],{"class":50},[40,168731,4128],{"class":63},[40,168733,1811],{"class":50},[19,168735,168736],{},"顺序错了就会得到错误含义：",[31,168738,168740],{"className":33679,"code":168739,"language":2323,"meta":36,"style":36},"introduce(18, \"小明\")\n",[26,168741,168742],{"__ignoreMap":36},[40,168743,168744,168746,168748,168750,168752],{"class":42,"line":43},[40,168745,168725],{"class":50},[40,168747,4128],{"class":63},[40,168749,15757],{"class":50},[40,168751,152457],{"class":94},[40,168753,1811],{"class":50},[14,168755,168757],{"id":168756},"_73-关键字参数","7.3 关键字参数",[19,168759,168760],{},"关键字参数按参数名传递。",[31,168762,168764],{"className":33679,"code":168763,"language":2323,"meta":36,"style":36},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[26,168765,168766,168786],{"__ignoreMap":36},[40,168767,168768,168770,168772,168774,168776,168778,168780,168782,168784],{"class":42,"line":43},[40,168769,168725],{"class":50},[40,168771,83105],{"class":8539},[40,168773,1284],{"class":1283},[40,168775,152457],{"class":94},[40,168777,15757],{"class":50},[40,168779,73517],{"class":8539},[40,168781,1284],{"class":1283},[40,168783,4128],{"class":63},[40,168785,1811],{"class":50},[40,168787,168788,168790,168792,168794,168796,168798,168800,168802,168804],{"class":42,"line":54},[40,168789,168725],{"class":50},[40,168791,73517],{"class":8539},[40,168793,1284],{"class":1283},[40,168795,4128],{"class":63},[40,168797,15757],{"class":50},[40,168799,83105],{"class":8539},[40,168801,1284],{"class":1283},[40,168803,152457],{"class":94},[40,168805,1811],{"class":50},[19,168807,121220],{},[492,168809,168810,168813],{},[495,168811,168812],{},"顺序不容易错。",[495,168814,168815],{},"调用时可读性更强。",[14,168817,168819],{"id":168818},"_74-默认参数","7.4 默认参数",[19,168821,168822],{},"默认参数给参数设置默认值。",[31,168824,168826],{"className":33679,"code":168825,"language":2323,"meta":36,"style":36},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[26,168827,168828,168844,168874,168878,168882,168892],{"__ignoreMap":36},[40,168829,168830,168832,168834,168837,168839,168842],{"class":42,"line":43},[40,168831,35247],{"class":1283},[40,168833,125368],{"class":596},[40,168835,168836],{"class":50},"(host, port",[40,168838,1284],{"class":1283},[40,168840,168841],{"class":63},"3306",[40,168843,34086],{"class":50},[40,168845,168846,168848,168850,168852,168855,168857,168859,168861,168863,168865,168868,168870,168872],{"class":42,"line":54},[40,168847,34599],{"class":63},[40,168849,3488],{"class":50},[40,168851,3537],{"class":1283},[40,168853,168854],{"class":94},"\"连接",[40,168856,4373],{"class":63},[40,168858,30700],{"class":50},[40,168860,4423],{"class":63},[40,168862,4336],{"class":94},[40,168864,4373],{"class":63},[40,168866,168867],{"class":50},"port",[40,168869,4423],{"class":63},[40,168871,3731],{"class":94},[40,168873,1811],{"class":50},[40,168875,168876],{"class":42,"line":70},[40,168877,1413],{"emptyLinePlaceholder":1412},[40,168879,168880],{"class":42,"line":78},[40,168881,1413],{"emptyLinePlaceholder":1412},[40,168883,168884,168887,168890],{"class":42,"line":86},[40,168885,168886],{"class":50},"connect(",[40,168888,168889],{"class":94},"\"localhost\"",[40,168891,1811],{"class":50},[40,168893,168894,168896,168898,168900,168903],{"class":42,"line":100},[40,168895,168886],{"class":50},[40,168897,168889],{"class":94},[40,168899,15757],{"class":50},[40,168901,168902],{"class":63},"6379",[40,168904,1811],{"class":50},[19,168906,168907],{},"注意：默认参数必须放在非默认参数后面。",[19,168909,168910],{},"错误：",[31,168912,168914],{"className":33679,"code":168913,"language":2323,"meta":36,"style":36},"def connect(port=3306, host):\n    pass\n",[26,168915,168916,168932],{"__ignoreMap":36},[40,168917,168918,168920,168922,168925,168927,168929],{"class":42,"line":43},[40,168919,35247],{"class":1283},[40,168921,125368],{"class":596},[40,168923,168924],{"class":50},"(port",[40,168926,1284],{"class":1283},[40,168928,168841],{"class":63},[40,168930,168931],{"class":50},", host):\n",[40,168933,168934],{"class":42,"line":54},[40,168935,152106],{"class":1283},[19,168937,168938],{},"正确：",[31,168940,168942],{"className":33679,"code":168941,"language":2323,"meta":36,"style":36},"def connect(host, port=3306):\n    pass\n",[26,168943,168944,168958],{"__ignoreMap":36},[40,168945,168946,168948,168950,168952,168954,168956],{"class":42,"line":43},[40,168947,35247],{"class":1283},[40,168949,125368],{"class":596},[40,168951,168836],{"class":50},[40,168953,1284],{"class":1283},[40,168955,168841],{"class":63},[40,168957,34086],{"class":50},[40,168959,168960],{"class":42,"line":54},[40,168961,152106],{"class":1283},[14,168963,168965],{"id":168964},"_75-默认参数的坑","7.5 默认参数的坑",[19,168967,168968],{},"不要使用可变对象作为默认参数。",[19,168970,160192],{},[31,168972,168974],{"className":33679,"code":168973,"language":2323,"meta":36,"style":36},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[26,168975,168976,168991,168996,169003,169007,169011,169022],{"__ignoreMap":36},[40,168977,168978,168980,168983,168986,168988],{"class":42,"line":43},[40,168979,35247],{"class":1283},[40,168981,168982],{"class":596}," add_item",[40,168984,168985],{"class":50},"(item, items",[40,168987,1284],{"class":1283},[40,168989,168990],{"class":50},"[]):\n",[40,168992,168993],{"class":42,"line":54},[40,168994,168995],{"class":50},"    items.append(item)\n",[40,168997,168998,169000],{"class":42,"line":70},[40,168999,7413],{"class":1283},[40,169001,169002],{"class":50}," items\n",[40,169004,169005],{"class":42,"line":78},[40,169006,1413],{"emptyLinePlaceholder":1412},[40,169008,169009],{"class":42,"line":86},[40,169010,1413],{"emptyLinePlaceholder":1412},[40,169012,169013,169015,169018,169020],{"class":42,"line":100},[40,169014,33715],{"class":63},[40,169016,169017],{"class":50},"(add_item(",[40,169019,167894],{"class":94},[40,169021,33797],{"class":50},[40,169023,169024,169026,169028,169031],{"class":42,"line":108},[40,169025,33715],{"class":63},[40,169027,169017],{"class":50},[40,169029,169030],{"class":94},"\"b\"",[40,169032,33797],{"class":50},[19,169034,169035],{},"第二次调用会复用第一次的列表。",[19,169037,158457],{},[31,169039,169041],{"className":33679,"code":169040,"language":2323,"meta":36,"style":36},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[26,169042,169043,169057,169070,169079,169083],{"__ignoreMap":36},[40,169044,169045,169047,169049,169051,169053,169055],{"class":42,"line":43},[40,169046,35247],{"class":1283},[40,169048,168982],{"class":596},[40,169050,168985],{"class":50},[40,169052,1284],{"class":1283},[40,169054,98981],{"class":63},[40,169056,34086],{"class":50},[40,169058,169059,169061,169064,169066,169068],{"class":42,"line":54},[40,169060,6425],{"class":1283},[40,169062,169063],{"class":50}," items ",[40,169065,42227],{"class":1283},[40,169067,42233],{"class":63},[40,169069,332],{"class":50},[40,169071,169072,169075,169077],{"class":42,"line":70},[40,169073,169074],{"class":50},"        items ",[40,169076,1284],{"class":1283},[40,169078,55136],{"class":50},[40,169080,169081],{"class":42,"line":78},[40,169082,168995],{"class":50},[40,169084,169085,169087],{"class":42,"line":86},[40,169086,7413],{"class":1283},[40,169088,169002],{"class":50},[14,169090,169092],{"id":169091},"_76-不定长参数","7.6 不定长参数",[402,169094,169096],{"id":169095},"_761-args","7.6.1 *args",[19,169098,169099,169102],{},[26,169100,169101],{},"*args"," 接收任意数量的位置参数，得到元组。",[31,169104,169106],{"className":33679,"code":169105,"language":2323,"meta":36,"style":36},"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",[26,169107,169108,169121,169129,169140,169149,169155,169159,169163,169182],{"__ignoreMap":36},[40,169109,169110,169112,169114,169116,169118],{"class":42,"line":43},[40,169111,35247],{"class":1283},[40,169113,8532],{"class":596},[40,169115,3488],{"class":50},[40,169117,3934],{"class":1283},[40,169119,169120],{"class":50},"args):\n",[40,169122,169123,169125,169127],{"class":42,"line":54},[40,169124,161876],{"class":50},[40,169126,1284],{"class":1283},[40,169128,50633],{"class":63},[40,169130,169131,169133,169135,169137],{"class":42,"line":70},[40,169132,6525],{"class":1283},[40,169134,158749],{"class":50},[40,169136,29355],{"class":1283},[40,169138,169139],{"class":50}," args:\n",[40,169141,169142,169144,169146],{"class":42,"line":78},[40,169143,162551],{"class":50},[40,169145,12799],{"class":1283},[40,169147,169148],{"class":50}," num\n",[40,169150,169151,169153],{"class":42,"line":86},[40,169152,7413],{"class":1283},[40,169154,164856],{"class":50},[40,169156,169157],{"class":42,"line":100},[40,169158,1413],{"emptyLinePlaceholder":1412},[40,169160,169161],{"class":42,"line":108},[40,169162,1413],{"emptyLinePlaceholder":1412},[40,169164,169165,169167,169170,169172,169174,169176,169178,169180],{"class":42,"line":121},[40,169166,33715],{"class":63},[40,169168,169169],{"class":50},"(add(",[40,169171,3698],{"class":63},[40,169173,15757],{"class":50},[40,169175,64],{"class":63},[40,169177,15757],{"class":50},[40,169179,3555],{"class":63},[40,169181,33797],{"class":50},[40,169183,169184,169186,169188,169190,169192,169194,169196,169198,169200,169202,169204,169206],{"class":42,"line":134},[40,169185,33715],{"class":63},[40,169187,169169],{"class":50},[40,169189,3698],{"class":63},[40,169191,15757],{"class":50},[40,169193,64],{"class":63},[40,169195,15757],{"class":50},[40,169197,3555],{"class":63},[40,169199,15757],{"class":50},[40,169201,3773],{"class":63},[40,169203,15757],{"class":50},[40,169205,3799],{"class":63},[40,169207,33797],{"class":50},[402,169209,169211],{"id":169210},"_762-kwargs","7.6.2 **kwargs",[19,169213,169214,169217],{},[26,169215,169216],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[31,169219,169221],{"className":33679,"code":169220,"language":2323,"meta":36,"style":36},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[26,169222,169223,169236,169247,169253,169257,169261],{"__ignoreMap":36},[40,169224,169225,169227,169229,169231,169233],{"class":42,"line":43},[40,169226,35247],{"class":1283},[40,169228,164514],{"class":596},[40,169230,3488],{"class":50},[40,169232,13983],{"class":1283},[40,169234,169235],{"class":50},"kwargs):\n",[40,169237,169238,169240,169242,169244],{"class":42,"line":54},[40,169239,6525],{"class":1283},[40,169241,167354],{"class":50},[40,169243,29355],{"class":1283},[40,169245,169246],{"class":50}," kwargs.items():\n",[40,169248,169249,169251],{"class":42,"line":70},[40,169250,35751],{"class":63},[40,169252,167366],{"class":50},[40,169254,169255],{"class":42,"line":78},[40,169256,1413],{"emptyLinePlaceholder":1412},[40,169258,169259],{"class":42,"line":86},[40,169260,1413],{"emptyLinePlaceholder":1412},[40,169262,169263,169265,169267,169269,169271,169273,169275,169277,169279,169281,169283,169285,169287],{"class":42,"line":100},[40,169264,164579],{"class":50},[40,169266,83105],{"class":8539},[40,169268,1284],{"class":1283},[40,169270,152457],{"class":94},[40,169272,15757],{"class":50},[40,169274,73517],{"class":8539},[40,169276,1284],{"class":1283},[40,169278,4128],{"class":63},[40,169280,15757],{"class":50},[40,169282,73568],{"class":8539},[40,169284,1284],{"class":1283},[40,169286,72567],{"class":94},[40,169288,1811],{"class":50},[14,169290,169292],{"id":169291},"_77-参数解包","7.7 参数解包",[19,169294,169295],{},"列表或元组解包为位置参数：",[31,169297,169299],{"className":33679,"code":169298,"language":2323,"meta":36,"style":36},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[26,169300,169301,169310,169325,169329,169333,169353],{"__ignoreMap":36},[40,169302,169303,169305,169307],{"class":42,"line":43},[40,169304,35247],{"class":1283},[40,169306,8532],{"class":596},[40,169308,169309],{"class":50},"(a, b, c):\n",[40,169311,169312,169314,169316,169318,169320,169322],{"class":42,"line":54},[40,169313,7413],{"class":1283},[40,169315,14191],{"class":50},[40,169317,3960],{"class":1283},[40,169319,14204],{"class":50},[40,169321,3960],{"class":1283},[40,169323,169324],{"class":50}," c\n",[40,169326,169327],{"class":42,"line":70},[40,169328,1413],{"emptyLinePlaceholder":1412},[40,169330,169331],{"class":42,"line":78},[40,169332,1413],{"emptyLinePlaceholder":1412},[40,169334,169335,169337,169339,169341,169343,169345,169347,169349,169351],{"class":42,"line":86},[40,169336,166669],{"class":50},[40,169338,1284],{"class":1283},[40,169340,55524],{"class":50},[40,169342,3698],{"class":63},[40,169344,15757],{"class":50},[40,169346,64],{"class":63},[40,169348,15757],{"class":50},[40,169350,3555],{"class":63},[40,169352,36546],{"class":50},[40,169354,169355,169357,169359,169361],{"class":42,"line":100},[40,169356,33715],{"class":63},[40,169358,169169],{"class":50},[40,169360,3934],{"class":1283},[40,169362,169363],{"class":50},"nums))\n",[19,169365,169366],{},"字典解包为关键字参数：",[31,169368,169370],{"className":33679,"code":169369,"language":2323,"meta":36,"style":36},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[26,169371,169372,169380,169406,169410,169414,169438],{"__ignoreMap":36},[40,169373,169374,169376,169378],{"class":42,"line":43},[40,169375,35247],{"class":1283},[40,169377,151941],{"class":596},[40,169379,151944],{"class":50},[40,169381,169382,169384,169386,169388,169390,169392,169394,169396,169398,169400,169402,169404],{"class":42,"line":54},[40,169383,34599],{"class":63},[40,169385,3488],{"class":50},[40,169387,3537],{"class":1283},[40,169389,3731],{"class":94},[40,169391,4373],{"class":63},[40,169393,83105],{"class":50},[40,169395,4423],{"class":63},[40,169397,7771],{"class":63},[40,169399,73517],{"class":50},[40,169401,4423],{"class":63},[40,169403,3731],{"class":94},[40,169405,1811],{"class":50},[40,169407,169408],{"class":42,"line":70},[40,169409,1413],{"emptyLinePlaceholder":1412},[40,169411,169412],{"class":42,"line":78},[40,169413,1413],{"emptyLinePlaceholder":1412},[40,169415,169416,169418,169420,169422,169424,169426,169428,169430,169432,169434,169436],{"class":42,"line":86},[40,169417,119605],{"class":50},[40,169419,1284],{"class":1283},[40,169421,7771],{"class":50},[40,169423,65977],{"class":94},[40,169425,60],{"class":50},[40,169427,152457],{"class":94},[40,169429,15757],{"class":50},[40,169431,72422],{"class":94},[40,169433,60],{"class":50},[40,169435,4128],{"class":63},[40,169437,4907],{"class":50},[40,169439,169440,169442,169444],{"class":42,"line":100},[40,169441,168725],{"class":50},[40,169443,13983],{"class":1283},[40,169445,169446],{"class":50},"info)\n",[14,169448,169450],{"id":169449},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,169452,169453,169456],{},[26,169454,169455],{},"lambda"," 用于定义简单匿名函数。",[31,169458,169460],{"className":33679,"code":169459,"language":2323,"meta":36,"style":36},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[26,169461,169462,169479],{"__ignoreMap":36},[40,169463,169464,169467,169469,169472,169475,169477],{"class":42,"line":43},[40,169465,169466],{"class":50},"add ",[40,169468,1284],{"class":1283},[40,169470,169471],{"class":1283}," lambda",[40,169473,169474],{"class":50}," a, b: a ",[40,169476,3960],{"class":1283},[40,169478,153673],{"class":50},[40,169480,169481,169483,169485,169487,169489,169491],{"class":42,"line":54},[40,169482,33715],{"class":63},[40,169484,169169],{"class":50},[40,169486,3698],{"class":63},[40,169488,15757],{"class":50},[40,169490,64],{"class":63},[40,169492,33797],{"class":50},[19,169494,169495],{},"常和排序、过滤等函数一起使用。",[19,169497,169498],{},"按分数排序：",[31,169500,169502],{"className":33679,"code":169501,"language":2323,"meta":36,"style":36},"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",[26,169503,169504,169512,169532,169552,169572,169576,169580,169603],{"__ignoreMap":36},[40,169505,169506,169508,169510],{"class":42,"line":43},[40,169507,162285],{"class":50},[40,169509,1284],{"class":1283},[40,169511,58745],{"class":50},[40,169513,169514,169516,169518,169520,169522,169524,169526,169528,169530],{"class":42,"line":54},[40,169515,150954],{"class":50},[40,169517,65977],{"class":94},[40,169519,60],{"class":50},[40,169521,152457],{"class":94},[40,169523,15757],{"class":50},[40,169525,154041],{"class":94},[40,169527,60],{"class":50},[40,169529,4466],{"class":63},[40,169531,8253],{"class":50},[40,169533,169534,169536,169538,169540,169542,169544,169546,169548,169550],{"class":42,"line":70},[40,169535,150954],{"class":50},[40,169537,65977],{"class":94},[40,169539,60],{"class":50},[40,169541,153505],{"class":94},[40,169543,15757],{"class":50},[40,169545,154041],{"class":94},[40,169547,60],{"class":50},[40,169549,4288],{"class":63},[40,169551,8253],{"class":50},[40,169553,169554,169556,169558,169560,169562,169564,169566,169568,169570],{"class":42,"line":78},[40,169555,150954],{"class":50},[40,169557,65977],{"class":94},[40,169559,60],{"class":50},[40,169561,162300],{"class":94},[40,169563,15757],{"class":50},[40,169565,154041],{"class":94},[40,169567,60],{"class":50},[40,169569,3885],{"class":63},[40,169571,8253],{"class":50},[40,169573,169574],{"class":42,"line":86},[40,169575,36546],{"class":50},[40,169577,169578],{"class":42,"line":100},[40,169579,1413],{"emptyLinePlaceholder":1412},[40,169581,169582,169585,169587,169589,169591,169593,169595,169597,169599,169601],{"class":42,"line":108},[40,169583,169584],{"class":50},"students.sort(",[40,169586,156515],{"class":8539},[40,169588,156518],{"class":1283},[40,169590,156521],{"class":50},[40,169592,154041],{"class":94},[40,169594,115493],{"class":50},[40,169596,166097],{"class":8539},[40,169598,1284],{"class":1283},[40,169600,34776],{"class":63},[40,169602,1811],{"class":50},[40,169604,169605,169607],{"class":42,"line":121},[40,169606,33715],{"class":63},[40,169608,167564],{"class":50},[19,169610,169611,169612,169614],{},"如果逻辑复杂，不要硬写 ",[26,169613,169455],{},"，定义普通函数更清晰。",[14,169616,169618],{"id":169617},"_79-函数作为参数","7.9 函数作为参数",[19,169620,169621],{},"函数可以作为参数传给另一个函数。",[31,169623,169625],{"className":33679,"code":169624,"language":2323,"meta":36,"style":36},"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",[26,169626,169627,169635,169645,169649,169653,169663,169670,169674,169678],{"__ignoreMap":36},[40,169628,169629,169631,169633],{"class":42,"line":43},[40,169630,35247],{"class":1283},[40,169632,8532],{"class":596},[40,169634,153662],{"class":50},[40,169636,169637,169639,169641,169643],{"class":42,"line":54},[40,169638,7413],{"class":1283},[40,169640,14191],{"class":50},[40,169642,3960],{"class":1283},[40,169644,153673],{"class":50},[40,169646,169647],{"class":42,"line":70},[40,169648,1413],{"emptyLinePlaceholder":1412},[40,169650,169651],{"class":42,"line":78},[40,169652,1413],{"emptyLinePlaceholder":1412},[40,169654,169655,169657,169660],{"class":42,"line":86},[40,169656,35247],{"class":1283},[40,169658,169659],{"class":596}," calculate",[40,169661,169662],{"class":50},"(a, b, func):\n",[40,169664,169665,169667],{"class":42,"line":100},[40,169666,7413],{"class":1283},[40,169668,169669],{"class":50}," func(a, b)\n",[40,169671,169672],{"class":42,"line":108},[40,169673,1413],{"emptyLinePlaceholder":1412},[40,169675,169676],{"class":42,"line":121},[40,169677,1413],{"emptyLinePlaceholder":1412},[40,169679,169680,169682,169685,169687,169689,169691],{"class":42,"line":134},[40,169681,33715],{"class":63},[40,169683,169684],{"class":50},"(calculate(",[40,169686,3925],{"class":63},[40,169688,15757],{"class":50},[40,169690,4178],{"class":63},[40,169692,169693],{"class":50},", add))\n",[19,169695,169696],{},"这种思想在排序、回调、框架中经常出现。",[14,169698,169700],{"id":169699},"_710-mapfiltersorted","7.10 map、filter、sorted",[402,169702,169704],{"id":169703},"_7101-map","7.10.1 map",[19,169706,169707,169709],{},[26,169708,77339],{}," 对每个元素执行函数。",[31,169711,169713],{"className":33679,"code":169712,"language":2323,"meta":36,"style":36},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[26,169714,169715,169739,169762],{"__ignoreMap":36},[40,169716,169717,169719,169721,169723,169725,169727,169729,169731,169733,169735,169737],{"class":42,"line":43},[40,169718,166669],{"class":50},[40,169720,1284],{"class":1283},[40,169722,55524],{"class":50},[40,169724,3698],{"class":63},[40,169726,15757],{"class":50},[40,169728,64],{"class":63},[40,169730,15757],{"class":50},[40,169732,3555],{"class":63},[40,169734,15757],{"class":50},[40,169736,3773],{"class":63},[40,169738,36546],{"class":50},[40,169740,169741,169743,169745,169748,169750,169752,169755,169757,169759],{"class":42,"line":54},[40,169742,163875],{"class":50},[40,169744,1284],{"class":1283},[40,169746,169747],{"class":63}," map",[40,169749,3488],{"class":50},[40,169751,169455],{"class":1283},[40,169753,169754],{"class":50}," x: x ",[40,169756,3934],{"class":1283},[40,169758,18077],{"class":63},[40,169760,169761],{"class":50},", nums)\n",[40,169763,169764,169766,169768,169770],{"class":42,"line":70},[40,169765,33715],{"class":63},[40,169767,3488],{"class":50},[40,169769,156639],{"class":63},[40,169771,168637],{"class":50},[402,169773,169775],{"id":169774},"_7102-filter","7.10.2 filter",[19,169777,169778,169780],{},[26,169779,83346],{}," 保留满足条件的元素。",[31,169782,169784],{"className":33679,"code":169783,"language":2323,"meta":36,"style":36},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[26,169785,169786,169814,169839],{"__ignoreMap":36},[40,169787,169788,169790,169792,169794,169796,169798,169800,169802,169804,169806,169808,169810,169812],{"class":42,"line":43},[40,169789,166669],{"class":50},[40,169791,1284],{"class":1283},[40,169793,55524],{"class":50},[40,169795,3698],{"class":63},[40,169797,15757],{"class":50},[40,169799,64],{"class":63},[40,169801,15757],{"class":50},[40,169803,3555],{"class":63},[40,169805,15757],{"class":50},[40,169807,3773],{"class":63},[40,169809,15757],{"class":50},[40,169811,3799],{"class":63},[40,169813,36546],{"class":50},[40,169815,169816,169818,169820,169823,169825,169827,169829,169831,169833,169835,169837],{"class":42,"line":54},[40,169817,163875],{"class":50},[40,169819,1284],{"class":1283},[40,169821,169822],{"class":63}," filter",[40,169824,3488],{"class":50},[40,169826,169455],{"class":1283},[40,169828,169754],{"class":50},[40,169830,3808],{"class":1283},[40,169832,18077],{"class":63},[40,169834,104850],{"class":1283},[40,169836,7416],{"class":63},[40,169838,169761],{"class":50},[40,169840,169841,169843,169845,169847],{"class":42,"line":70},[40,169842,33715],{"class":63},[40,169844,3488],{"class":50},[40,169846,156639],{"class":63},[40,169848,168637],{"class":50},[402,169850,169852],{"id":169851},"_7103-sorted","7.10.3 sorted",[19,169854,169855,169857],{},[26,169856,167805],{}," 返回排序后的新列表。",[31,169859,169861],{"className":33679,"code":169860,"language":2323,"meta":36,"style":36},"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",[26,169862,169863,169871,169891,169911,169931,169935,169939,169968],{"__ignoreMap":36},[40,169864,169865,169867,169869],{"class":42,"line":43},[40,169866,162285],{"class":50},[40,169868,1284],{"class":1283},[40,169870,58745],{"class":50},[40,169872,169873,169875,169877,169879,169881,169883,169885,169887,169889],{"class":42,"line":54},[40,169874,150954],{"class":50},[40,169876,65977],{"class":94},[40,169878,60],{"class":50},[40,169880,152457],{"class":94},[40,169882,15757],{"class":50},[40,169884,154041],{"class":94},[40,169886,60],{"class":50},[40,169888,4466],{"class":63},[40,169890,8253],{"class":50},[40,169892,169893,169895,169897,169899,169901,169903,169905,169907,169909],{"class":42,"line":70},[40,169894,150954],{"class":50},[40,169896,65977],{"class":94},[40,169898,60],{"class":50},[40,169900,153505],{"class":94},[40,169902,15757],{"class":50},[40,169904,154041],{"class":94},[40,169906,60],{"class":50},[40,169908,4288],{"class":63},[40,169910,8253],{"class":50},[40,169912,169913,169915,169917,169919,169921,169923,169925,169927,169929],{"class":42,"line":78},[40,169914,150954],{"class":50},[40,169916,65977],{"class":94},[40,169918,60],{"class":50},[40,169920,162300],{"class":94},[40,169922,15757],{"class":50},[40,169924,154041],{"class":94},[40,169926,60],{"class":50},[40,169928,3885],{"class":63},[40,169930,8253],{"class":50},[40,169932,169933],{"class":42,"line":86},[40,169934,36546],{"class":50},[40,169936,169937],{"class":42,"line":100},[40,169938,1413],{"emptyLinePlaceholder":1412},[40,169940,169941,169943,169945,169947,169950,169952,169954,169956,169958,169960,169962,169964,169966],{"class":42,"line":108},[40,169942,163875],{"class":50},[40,169944,1284],{"class":1283},[40,169946,166173],{"class":63},[40,169948,169949],{"class":50},"(students, ",[40,169951,156515],{"class":8539},[40,169953,156518],{"class":1283},[40,169955,156521],{"class":50},[40,169957,154041],{"class":94},[40,169959,115493],{"class":50},[40,169961,166097],{"class":8539},[40,169963,1284],{"class":1283},[40,169965,34776],{"class":63},[40,169967,1811],{"class":50},[40,169969,169970,169972],{"class":42,"line":121},[40,169971,33715],{"class":63},[40,169973,79880],{"class":50},[14,169975,169977],{"id":169976},"_711-闭包入门","7.11 闭包入门",[19,169979,169980],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[31,169982,169984],{"className":33679,"code":169983,"language":2323,"meta":36,"style":36},"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",[26,169985,169986,169996,170006,170017,170021,170028,170032,170036,170050],{"__ignoreMap":36},[40,169987,169988,169990,169993],{"class":42,"line":43},[40,169989,35247],{"class":1283},[40,169991,169992],{"class":596}," outer",[40,169994,169995],{"class":50},"(base):\n",[40,169997,169998,170000,170003],{"class":42,"line":54},[40,169999,34101],{"class":1283},[40,170001,170002],{"class":596}," inner",[40,170004,170005],{"class":50},"(num):\n",[40,170007,170008,170010,170013,170015],{"class":42,"line":70},[40,170009,18074],{"class":1283},[40,170011,170012],{"class":50}," base ",[40,170014,3960],{"class":1283},[40,170016,169148],{"class":50},[40,170018,170019],{"class":42,"line":78},[40,170020,1413],{"emptyLinePlaceholder":1412},[40,170022,170023,170025],{"class":42,"line":86},[40,170024,7413],{"class":1283},[40,170026,170027],{"class":50}," inner\n",[40,170029,170030],{"class":42,"line":100},[40,170031,1413],{"emptyLinePlaceholder":1412},[40,170033,170034],{"class":42,"line":108},[40,170035,1413],{"emptyLinePlaceholder":1412},[40,170037,170038,170041,170043,170046,170048],{"class":42,"line":121},[40,170039,170040],{"class":50},"add_10 ",[40,170042,1284],{"class":1283},[40,170044,170045],{"class":50}," outer(",[40,170047,3925],{"class":63},[40,170049,1811],{"class":50},[40,170051,170052,170054,170057,170059],{"class":42,"line":134},[40,170053,33715],{"class":63},[40,170055,170056],{"class":50},"(add_10(",[40,170058,3799],{"class":63},[40,170060,33797],{"class":50},[19,170062,170063],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,170065,170067],{"id":170066},"_712-装饰器入门","7.12 装饰器入门",[19,170069,170070],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[31,170072,170074],{"className":33679,"code":170073,"language":2323,"meta":36,"style":36},"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",[26,170075,170076,170085,170094,170105,170110,170121,170125,170132,170136,170140,170145,170153,170163,170167,170171],{"__ignoreMap":36},[40,170077,170078,170080,170082],{"class":42,"line":43},[40,170079,35247],{"class":1283},[40,170081,90486],{"class":596},[40,170083,170084],{"class":50},"(func):\n",[40,170086,170087,170089,170092],{"class":42,"line":54},[40,170088,34101],{"class":1283},[40,170090,170091],{"class":596}," wrapper",[40,170093,35253],{"class":50},[40,170095,170096,170098,170100,170103],{"class":42,"line":70},[40,170097,35751],{"class":63},[40,170099,3488],{"class":50},[40,170101,170102],{"class":94},"\"函数开始执行\"",[40,170104,1811],{"class":50},[40,170106,170107],{"class":42,"line":78},[40,170108,170109],{"class":50},"        func()\n",[40,170111,170112,170114,170116,170119],{"class":42,"line":86},[40,170113,35751],{"class":63},[40,170115,3488],{"class":50},[40,170117,170118],{"class":94},"\"函数执行结束\"",[40,170120,1811],{"class":50},[40,170122,170123],{"class":42,"line":100},[40,170124,1413],{"emptyLinePlaceholder":1412},[40,170126,170127,170129],{"class":42,"line":108},[40,170128,7413],{"class":1283},[40,170130,170131],{"class":50}," wrapper\n",[40,170133,170134],{"class":42,"line":121},[40,170135,1413],{"emptyLinePlaceholder":1412},[40,170137,170138],{"class":42,"line":134},[40,170139,1413],{"emptyLinePlaceholder":1412},[40,170141,170142],{"class":42,"line":146},[40,170143,170144],{"class":596},"@log\n",[40,170146,170147,170149,170151],{"class":42,"line":154},[40,170148,35247],{"class":1283},[40,170150,163565],{"class":596},[40,170152,35253],{"class":50},[40,170154,170155,170157,170159,170161],{"class":42,"line":162},[40,170156,34599],{"class":63},[40,170158,3488],{"class":50},[40,170160,9167],{"class":94},[40,170162,1811],{"class":50},[40,170164,170165],{"class":42,"line":170},[40,170166,1413],{"emptyLinePlaceholder":1412},[40,170168,170169],{"class":42,"line":183},[40,170170,1413],{"emptyLinePlaceholder":1412},[40,170172,170173],{"class":42,"line":196},[40,170174,163600],{"class":50},[19,170176,160843],{},[31,170178,170180],{"className":33679,"code":170179,"language":2323,"meta":36,"style":36},"say_hello = log(say_hello)\n",[26,170181,170182],{"__ignoreMap":36},[40,170183,170184,170187,170189],{"class":42,"line":43},[40,170185,170186],{"class":50},"say_hello ",[40,170188,1284],{"class":1283},[40,170190,170191],{"class":50}," log(say_hello)\n",[19,170193,170194],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,170196,170198],{"id":170197},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[31,170200,170202],{"className":33679,"code":170201,"language":2323,"meta":36,"style":36},"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",[26,170203,170204,170212,170229,170239,170258,170268,170275,170279,170285,170289,170293,170297,170305,170315,170319,170323],{"__ignoreMap":36},[40,170205,170206,170208,170210],{"class":42,"line":43},[40,170207,35247],{"class":1283},[40,170209,90486],{"class":596},[40,170211,170084],{"class":50},[40,170213,170214,170216,170218,170220,170222,170225,170227],{"class":42,"line":54},[40,170215,34101],{"class":1283},[40,170217,170091],{"class":596},[40,170219,3488],{"class":50},[40,170221,3934],{"class":1283},[40,170223,170224],{"class":50},"args, ",[40,170226,13983],{"class":1283},[40,170228,169235],{"class":50},[40,170230,170231,170233,170235,170237],{"class":42,"line":70},[40,170232,35751],{"class":63},[40,170234,3488],{"class":50},[40,170236,170102],{"class":94},[40,170238,1811],{"class":50},[40,170240,170241,170244,170246,170249,170251,170253,170255],{"class":42,"line":78},[40,170242,170243],{"class":50},"        result ",[40,170245,1284],{"class":1283},[40,170247,170248],{"class":50}," func(",[40,170250,3934],{"class":1283},[40,170252,170224],{"class":50},[40,170254,13983],{"class":1283},[40,170256,170257],{"class":50},"kwargs)\n",[40,170259,170260,170262,170264,170266],{"class":42,"line":86},[40,170261,35751],{"class":63},[40,170263,3488],{"class":50},[40,170265,170118],{"class":94},[40,170267,1811],{"class":50},[40,170269,170270,170272],{"class":42,"line":100},[40,170271,18074],{"class":1283},[40,170273,170274],{"class":50}," result\n",[40,170276,170277],{"class":42,"line":108},[40,170278,1413],{"emptyLinePlaceholder":1412},[40,170280,170281,170283],{"class":42,"line":121},[40,170282,7413],{"class":1283},[40,170284,170131],{"class":50},[40,170286,170287],{"class":42,"line":134},[40,170288,1413],{"emptyLinePlaceholder":1412},[40,170290,170291],{"class":42,"line":146},[40,170292,1413],{"emptyLinePlaceholder":1412},[40,170294,170295],{"class":42,"line":154},[40,170296,170144],{"class":596},[40,170298,170299,170301,170303],{"class":42,"line":162},[40,170300,35247],{"class":1283},[40,170302,8532],{"class":596},[40,170304,153662],{"class":50},[40,170306,170307,170309,170311,170313],{"class":42,"line":170},[40,170308,7413],{"class":1283},[40,170310,14191],{"class":50},[40,170312,3960],{"class":1283},[40,170314,153673],{"class":50},[40,170316,170317],{"class":42,"line":183},[40,170318,1413],{"emptyLinePlaceholder":1412},[40,170320,170321],{"class":42,"line":196},[40,170322,1413],{"emptyLinePlaceholder":1412},[40,170324,170325,170327,170329,170331,170333,170335],{"class":42,"line":204},[40,170326,33715],{"class":63},[40,170328,169169],{"class":50},[40,170330,3925],{"class":63},[40,170332,15757],{"class":50},[40,170334,4178],{"class":63},[40,170336,33797],{"class":50},[19,170338,170339,170340,104312,170342,170344],{},"这个写法使用 ",[26,170341,169101],{},[26,170343,169216],{}," 接收原函数的所有参数。",[14,170346,170348],{"id":170347},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,170350,1205],{},[492,170352,170353,170356,170359],{},[495,170354,170355],{},"给定一组学生数据。",[495,170357,170358],{},"封装函数，根据传入规则筛选学生。",[495,170360,170361],{},"筛选及格、优秀、未成年学生。",[19,170363,13357],{},[31,170365,170367],{"className":33679,"code":170366,"language":2323,"meta":36,"style":36},"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",[26,170368,170369,170377,170405,170433,170461,170465,170469,170473,170483,170491,170501,170508,170513,170519,170523,170527,170551,170574,170597,170601,170608,170615],{"__ignoreMap":36},[40,170370,170371,170373,170375],{"class":42,"line":43},[40,170372,162285],{"class":50},[40,170374,1284],{"class":1283},[40,170376,58745],{"class":50},[40,170378,170379,170381,170383,170385,170387,170389,170391,170393,170395,170397,170399,170401,170403],{"class":42,"line":54},[40,170380,150954],{"class":50},[40,170382,65977],{"class":94},[40,170384,60],{"class":50},[40,170386,152457],{"class":94},[40,170388,15757],{"class":50},[40,170390,72422],{"class":94},[40,170392,60],{"class":50},[40,170394,4128],{"class":63},[40,170396,15757],{"class":50},[40,170398,154041],{"class":94},[40,170400,60],{"class":50},[40,170402,4466],{"class":63},[40,170404,8253],{"class":50},[40,170406,170407,170409,170411,170413,170415,170417,170419,170421,170423,170425,170427,170429,170431],{"class":42,"line":70},[40,170408,150954],{"class":50},[40,170410,65977],{"class":94},[40,170412,60],{"class":50},[40,170414,153505],{"class":94},[40,170416,15757],{"class":50},[40,170418,72422],{"class":94},[40,170420,60],{"class":50},[40,170422,4104],{"class":63},[40,170424,15757],{"class":50},[40,170426,154041],{"class":94},[40,170428,60],{"class":50},[40,170430,4288],{"class":63},[40,170432,8253],{"class":50},[40,170434,170435,170437,170439,170441,170443,170445,170447,170449,170451,170453,170455,170457,170459],{"class":42,"line":78},[40,170436,150954],{"class":50},[40,170438,65977],{"class":94},[40,170440,60],{"class":50},[40,170442,162300],{"class":94},[40,170444,15757],{"class":50},[40,170446,72422],{"class":94},[40,170448,60],{"class":50},[40,170450,4153],{"class":63},[40,170452,15757],{"class":50},[40,170454,154041],{"class":94},[40,170456,60],{"class":50},[40,170458,4359],{"class":63},[40,170460,8253],{"class":50},[40,170462,170463],{"class":42,"line":86},[40,170464,36546],{"class":50},[40,170466,170467],{"class":42,"line":100},[40,170468,1413],{"emptyLinePlaceholder":1412},[40,170470,170471],{"class":42,"line":108},[40,170472,1413],{"emptyLinePlaceholder":1412},[40,170474,170475,170477,170480],{"class":42,"line":121},[40,170476,35247],{"class":1283},[40,170478,170479],{"class":596}," filter_students",[40,170481,170482],{"class":50},"(students, condition):\n",[40,170484,170485,170487,170489],{"class":42,"line":134},[40,170486,163792],{"class":50},[40,170488,1284],{"class":1283},[40,170490,55136],{"class":50},[40,170492,170493,170495,170497,170499],{"class":42,"line":146},[40,170494,6525],{"class":1283},[40,170496,154706],{"class":50},[40,170498,29355],{"class":1283},[40,170500,154711],{"class":50},[40,170502,170503,170505],{"class":42,"line":154},[40,170504,5822],{"class":1283},[40,170506,170507],{"class":50}," condition(student):\n",[40,170509,170510],{"class":42,"line":162},[40,170511,170512],{"class":50},"            result.append(student)\n",[40,170514,170515,170517],{"class":42,"line":170},[40,170516,7413],{"class":1283},[40,170518,170274],{"class":50},[40,170520,170521],{"class":42,"line":183},[40,170522,1413],{"emptyLinePlaceholder":1412},[40,170524,170525],{"class":42,"line":196},[40,170526,1413],{"emptyLinePlaceholder":1412},[40,170528,170529,170531,170533,170536,170538,170541,170543,170545,170547,170549],{"class":42,"line":204},[40,170530,168270],{"class":50},[40,170532,1284],{"class":1283},[40,170534,170535],{"class":50}," filter_students(students, ",[40,170537,169455],{"class":1283},[40,170539,170540],{"class":50}," s: s[",[40,170542,154041],{"class":94},[40,170544,7766],{"class":50},[40,170546,5041],{"class":1283},[40,170548,160406],{"class":63},[40,170550,1811],{"class":50},[40,170552,170553,170556,170558,170560,170562,170564,170566,170568,170570,170572],{"class":42,"line":217},[40,170554,170555],{"class":50},"excellent ",[40,170557,1284],{"class":1283},[40,170559,170535],{"class":50},[40,170561,169455],{"class":1283},[40,170563,170540],{"class":50},[40,170565,154041],{"class":94},[40,170567,7766],{"class":50},[40,170569,5041],{"class":1283},[40,170571,160357],{"class":63},[40,170573,1811],{"class":50},[40,170575,170576,170579,170581,170583,170585,170587,170589,170591,170593,170595],{"class":42,"line":230},[40,170577,170578],{"class":50},"under_age ",[40,170580,1284],{"class":1283},[40,170582,170535],{"class":50},[40,170584,169455],{"class":1283},[40,170586,170540],{"class":50},[40,170588,72422],{"class":94},[40,170590,7766],{"class":50},[40,170592,4387],{"class":1283},[40,170594,158854],{"class":63},[40,170596,1811],{"class":50},[40,170598,170599],{"class":42,"line":238},[40,170600,1413],{"emptyLinePlaceholder":1412},[40,170602,170603,170605],{"class":42,"line":251},[40,170604,33715],{"class":63},[40,170606,170607],{"class":50},"(passed)\n",[40,170609,170610,170612],{"class":42,"line":264},[40,170611,33715],{"class":63},[40,170613,170614],{"class":50},"(excellent)\n",[40,170616,170617,170619],{"class":42,"line":277},[40,170618,33715],{"class":63},[40,170620,170621],{"class":50},"(under_age)\n",[14,170623,170625],{"id":170624},"_715-易错点","7.15 易错点",[492,170627,170628,170631,170639,170644,170655],{},[495,170629,170630],{},"默认参数不要写可变对象。",[495,170632,170633,170635,170636,170638],{},[26,170634,169101],{}," 是元组，",[26,170637,169216],{}," 是字典。",[495,170640,170641,170643],{},[26,170642,169455],{}," 只适合简单表达式。",[495,170645,170646,104312,170648,170650,170651,170654],{},[26,170647,77339],{},[26,170649,83346],{}," 的结果是迭代器，常用 ",[26,170652,170653],{},"list()"," 转换查看。",[495,170656,170657],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,170659,170661],{"id":170660},"_716-本章练习","7.16 本章练习",[492,170663,170664,170671,170677,170682,170687],{},[495,170665,170666,170667,170670],{},"写函数 ",[26,170668,170669],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[495,170672,170666,170673,170676],{},[26,170674,170675],{},"print_user(**kwargs)","，输出用户所有字段。",[495,170678,107657,170679,170681],{},[26,170680,169455],{}," 对学生列表按年龄排序。",[495,170683,107657,170684,170686],{},[26,170685,83346],{}," 找出成绩不及格的学生。",[495,170688,170689],{},"写一个装饰器，统计函数执行前后的提示信息。",[3384,170691,170692],{},"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":36,"searchDepth":54,"depth":54,"links":170694},[170695,170696,170697,170698,170699,170700,170704,170705,170706,170707,170712,170713,170714,170715,170716,170717],{"id":168553,"depth":54,"text":168554},{"id":168667,"depth":54,"text":168668},{"id":168756,"depth":54,"text":168757},{"id":168818,"depth":54,"text":168819},{"id":168964,"depth":54,"text":168965},{"id":169091,"depth":54,"text":169092,"children":170701},[170702,170703],{"id":169095,"depth":70,"text":169096},{"id":169210,"depth":70,"text":169211},{"id":169291,"depth":54,"text":169292},{"id":169449,"depth":54,"text":169450},{"id":169617,"depth":54,"text":169618},{"id":169699,"depth":54,"text":169700,"children":170708},[170709,170710,170711],{"id":169703,"depth":70,"text":169704},{"id":169774,"depth":70,"text":169775},{"id":169851,"depth":70,"text":169852},{"id":169976,"depth":54,"text":169977},{"id":170066,"depth":54,"text":170067},{"id":170197,"depth":54,"text":170198},{"id":170347,"depth":54,"text":170348},{"id":170624,"depth":54,"text":170625},{"id":170660,"depth":54,"text":170661},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":168545,"description":3413},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":170724,"title":170725,"body":170726,"description":3413,"extension":3414,"meta":173245,"navigation":1412,"path":173246,"seo":173247,"stem":173248,"__hash__":173249},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":170727,"toc":173220},[170728,170731,170735,170738,170741,170772,170776,170780,170783,170810,170814,170817,170868,170871,170886,170889,170924,170928,170930,170954,170957,171017,171021,171025,171028,171085,171088,171108,171112,171115,171178,171182,171185,171241,171248,171272,171276,171279,171342,171346,171351,171402,171405,171409,171414,171481,171484,171566,171570,171575,171626,171629,171633,171636,171639,171647,171650,171696,171699,171745,171749,171755,171799,171802,171848,171851,171891,171894,171955,171959,171962,172052,172055,172197,172200,172267,172271,172274,172277,172418,172421,172499,172502,172678,172682,172684,172695,172697,172896,172900,173144,173148,173182,173186,173217],[10,170729,170725],{"id":170730},"_8-文件操作",[14,170732,170734],{"id":170733},"_81-文件操作的意义","8.1 文件操作的意义",[19,170736,170737],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,170739,170740],{},"常见文件类型：",[492,170742,170743,170749,170755,170761,170767],{},[495,170744,170745,170748],{},[26,170746,170747],{},".txt","：普通文本。",[495,170750,170751,170754],{},[26,170752,170753],{},".csv","：表格文本。",[495,170756,170757,170760],{},[26,170758,170759],{},".json","：结构化数据。",[495,170762,170763,170766],{},[26,170764,170765],{},".log","：日志文件。",[495,170768,170769,170771],{},[26,170770,148921],{},"：Python 源代码。",[14,170773,170775],{"id":170774},"_82-路径","8.2 路径",[402,170777,170779],{"id":170778},"_821-相对路径","8.2.1 相对路径",[19,170781,170782],{},"相对当前运行目录：",[31,170784,170786],{"className":33679,"code":170785,"language":2323,"meta":36,"style":36},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[26,170787,170788],{"__ignoreMap":36},[40,170789,170790,170792,170794,170796,170798,170800,170802,170804,170806,170808],{"class":42,"line":43},[40,170791,90210],{"class":63},[40,170793,3488],{"class":50},[40,170795,149365],{"class":94},[40,170797,15757],{"class":50},[40,170799,149370],{"class":94},[40,170801,15757],{"class":50},[40,170803,149375],{"class":8539},[40,170805,1284],{"class":1283},[40,170807,149380],{"class":94},[40,170809,1811],{"class":50},[402,170811,170813],{"id":170812},"_822-绝对路径","8.2.2 绝对路径",[19,170815,170816],{},"从根目录或盘符开始：",[31,170818,170820],{"className":33679,"code":170819,"language":2323,"meta":36,"style":36},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[26,170821,170822,170845],{"__ignoreMap":36},[40,170823,170824,170826,170828,170831,170833,170835,170837,170839,170841,170843],{"class":42,"line":43},[40,170825,90210],{"class":63},[40,170827,3488],{"class":50},[40,170829,170830],{"class":94},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[40,170832,15757],{"class":50},[40,170834,149370],{"class":94},[40,170836,15757],{"class":50},[40,170838,149375],{"class":8539},[40,170840,1284],{"class":1283},[40,170842,149380],{"class":94},[40,170844,1811],{"class":50},[40,170846,170847,170849,170851,170854,170856,170858,170860,170862,170864,170866],{"class":42,"line":54},[40,170848,90210],{"class":63},[40,170850,3488],{"class":50},[40,170852,170853],{"class":94},"\"D:\u002Fdata\u002Fdata.txt\"",[40,170855,15757],{"class":50},[40,170857,149370],{"class":94},[40,170859,15757],{"class":50},[40,170861,149375],{"class":8539},[40,170863,1284],{"class":1283},[40,170865,149380],{"class":94},[40,170867,1811],{"class":50},[19,170869,170870],{},"Windows 路径建议写成：",[31,170872,170874],{"className":33679,"code":170873,"language":2323,"meta":36,"style":36},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[26,170875,170876],{"__ignoreMap":36},[40,170877,170878,170881,170883],{"class":42,"line":43},[40,170879,170880],{"class":50},"path ",[40,170882,1284],{"class":1283},[40,170884,170885],{"class":94}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,170887,170888],{},"或原始字符串：",[31,170890,170892],{"className":33679,"code":170891,"language":2323,"meta":36,"style":36},"path = r\"D:\\data\\data.txt\"\n",[26,170893,170894],{"__ignoreMap":36},[40,170895,170896,170898,170900,170902,170904,170907,170910,170913,170915,170917,170919,170922],{"class":42,"line":43},[40,170897,170880],{"class":50},[40,170899,1284],{"class":1283},[40,170901,20443],{"class":1283},[40,170903,3731],{"class":94},[40,170905,170906],{"class":51277},"D:",[40,170908,170909],{"class":63},"\\d",[40,170911,170912],{"class":51277},"ata",[40,170914,170909],{"class":63},[40,170916,170912],{"class":51277},[40,170918,4037],{"class":63},[40,170920,170921],{"class":51277},"txt",[40,170923,28446],{"class":94},[14,170925,170927],{"id":170926},"_83-open函数","8.3 open函数",[19,170929,8504],{},[31,170931,170933],{"className":33679,"code":170932,"language":2323,"meta":36,"style":36},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[26,170934,170935],{"__ignoreMap":36},[40,170936,170937,170939,170941,170943,170946,170948,170950,170952],{"class":42,"line":43},[40,170938,48654],{"class":8539},[40,170940,16886],{"class":1283},[40,170942,149360],{"class":63},[40,170944,170945],{"class":50},"(文件路径, 打开模式, ",[40,170947,149375],{"class":8539},[40,170949,1284],{"class":1283},[40,170951,149380],{"class":94},[40,170953,1811],{"class":50},[19,170955,170956],{},"常见模式：",[3619,170958,170959,170968],{},[3622,170960,170961],{},[3625,170962,170963,170966],{},[3628,170964,170965],{},"模式",[3628,170967,29181],{},[3665,170969,170970,170979,170988,170997,171007],{},[3625,170971,170972,170976],{},[3670,170973,170974],{},[26,170975,4148],{},[3670,170977,170978],{},"只读，文件不存在会报错",[3625,170980,170981,170985],{},[3670,170982,170983],{},[26,170984,2784],{},[3670,170986,170987],{},"只写，文件不存在会创建，存在会清空",[3625,170989,170990,170994],{},[3670,170991,170992],{},[26,170993,2106],{},[3670,170995,170996],{},"追加，文件不存在会创建",[3625,170998,170999,171004],{},[3670,171000,171001],{},[26,171002,171003],{},"rb",[3670,171005,171006],{},"二进制只读",[3625,171008,171009,171014],{},[3670,171010,171011],{},[26,171012,171013],{},"wb",[3670,171015,171016],{},"二进制只写",[14,171018,171020],{"id":171019},"_84-读取文件","8.4 读取文件",[402,171022,171024],{"id":171023},"_841-read","8.4.1 read",[19,171026,171027],{},"一次读取全部内容：",[31,171029,171031],{"className":33679,"code":171030,"language":2323,"meta":36,"style":36},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[26,171032,171033,171059,171071,171078],{"__ignoreMap":36},[40,171034,171035,171037,171039,171041,171043,171045,171047,171049,171051,171053,171055,171057],{"class":42,"line":43},[40,171036,48654],{"class":8539},[40,171038,16886],{"class":1283},[40,171040,149360],{"class":63},[40,171042,3488],{"class":50},[40,171044,149365],{"class":94},[40,171046,15757],{"class":50},[40,171048,149370],{"class":94},[40,171050,15757],{"class":50},[40,171052,149375],{"class":8539},[40,171054,1284],{"class":1283},[40,171056,149380],{"class":94},[40,171058,1811],{"class":50},[40,171060,171061,171064,171066,171068],{"class":42,"line":54},[40,171062,171063],{"class":50},"content ",[40,171065,1284],{"class":1283},[40,171067,150722],{"class":8539},[40,171069,171070],{"class":50},".read()\n",[40,171072,171073,171075],{"class":42,"line":70},[40,171074,33715],{"class":63},[40,171076,171077],{"class":50},"(content)\n",[40,171079,171080,171082],{"class":42,"line":78},[40,171081,48654],{"class":8539},[40,171083,171084],{"class":50},".close()\n",[19,171086,171087],{},"可以指定读取字符数：",[31,171089,171091],{"className":33679,"code":171090,"language":2323,"meta":36,"style":36},"content = file.read(10)\n",[26,171092,171093],{"__ignoreMap":36},[40,171094,171095,171097,171099,171101,171104,171106],{"class":42,"line":43},[40,171096,171063],{"class":50},[40,171098,1284],{"class":1283},[40,171100,150722],{"class":8539},[40,171102,171103],{"class":50},".read(",[40,171105,3925],{"class":63},[40,171107,1811],{"class":50},[402,171109,171111],{"id":171110},"_842-readline","8.4.2 readline",[19,171113,171114],{},"一次读取一行：",[31,171116,171118],{"className":33679,"code":171117,"language":2323,"meta":36,"style":36},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[26,171119,171120,171146,171150,171161,171168,171172],{"__ignoreMap":36},[40,171121,171122,171124,171126,171128,171130,171132,171134,171136,171138,171140,171142,171144],{"class":42,"line":43},[40,171123,48654],{"class":8539},[40,171125,16886],{"class":1283},[40,171127,149360],{"class":63},[40,171129,3488],{"class":50},[40,171131,149365],{"class":94},[40,171133,15757],{"class":50},[40,171135,149370],{"class":94},[40,171137,15757],{"class":50},[40,171139,149375],{"class":8539},[40,171141,1284],{"class":1283},[40,171143,149380],{"class":94},[40,171145,1811],{"class":50},[40,171147,171148],{"class":42,"line":54},[40,171149,1413],{"emptyLinePlaceholder":1412},[40,171151,171152,171154,171156,171158],{"class":42,"line":70},[40,171153,149821],{"class":50},[40,171155,1284],{"class":1283},[40,171157,150722],{"class":8539},[40,171159,171160],{"class":50},".readline()\n",[40,171162,171163,171165],{"class":42,"line":78},[40,171164,33715],{"class":63},[40,171166,171167],{"class":50},"(line)\n",[40,171169,171170],{"class":42,"line":86},[40,171171,1413],{"emptyLinePlaceholder":1412},[40,171173,171174,171176],{"class":42,"line":100},[40,171175,48654],{"class":8539},[40,171177,171084],{"class":50},[402,171179,171181],{"id":171180},"_843-readlines","8.4.3 readlines",[19,171183,171184],{},"读取所有行，返回列表：",[31,171186,171188],{"className":33679,"code":171187,"language":2323,"meta":36,"style":36},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[26,171189,171190,171216,171228,171235],{"__ignoreMap":36},[40,171191,171192,171194,171196,171198,171200,171202,171204,171206,171208,171210,171212,171214],{"class":42,"line":43},[40,171193,48654],{"class":8539},[40,171195,16886],{"class":1283},[40,171197,149360],{"class":63},[40,171199,3488],{"class":50},[40,171201,149365],{"class":94},[40,171203,15757],{"class":50},[40,171205,149370],{"class":94},[40,171207,15757],{"class":50},[40,171209,149375],{"class":8539},[40,171211,1284],{"class":1283},[40,171213,149380],{"class":94},[40,171215,1811],{"class":50},[40,171217,171218,171221,171223,171225],{"class":42,"line":54},[40,171219,171220],{"class":50},"lines ",[40,171222,1284],{"class":1283},[40,171224,150722],{"class":8539},[40,171226,171227],{"class":50},".readlines()\n",[40,171229,171230,171232],{"class":42,"line":70},[40,171231,33715],{"class":63},[40,171233,171234],{"class":50},"(lines)\n",[40,171236,171237,171239],{"class":42,"line":78},[40,171238,48654],{"class":8539},[40,171240,171084],{"class":50},[19,171242,171243,171244,171247],{},"每一行通常带有换行符，可以用 ",[26,171245,171246],{},"strip()"," 去掉：",[31,171249,171251],{"className":33679,"code":171250,"language":2323,"meta":36,"style":36},"for line in lines:\n    print(line.strip())\n",[26,171252,171253,171265],{"__ignoreMap":36},[40,171254,171255,171257,171260,171262],{"class":42,"line":43},[40,171256,6349],{"class":1283},[40,171258,171259],{"class":50}," line ",[40,171261,29355],{"class":1283},[40,171263,171264],{"class":50}," lines:\n",[40,171266,171267,171269],{"class":42,"line":54},[40,171268,34599],{"class":63},[40,171270,171271],{"class":50},"(line.strip())\n",[402,171273,171275],{"id":171274},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,171277,171278],{},"推荐读取大文件时使用：",[31,171280,171282],{"className":33679,"code":171281,"language":2323,"meta":36,"style":36},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[26,171283,171284,171310,171314,171326,171332,171336],{"__ignoreMap":36},[40,171285,171286,171288,171290,171292,171294,171296,171298,171300,171302,171304,171306,171308],{"class":42,"line":43},[40,171287,48654],{"class":8539},[40,171289,16886],{"class":1283},[40,171291,149360],{"class":63},[40,171293,3488],{"class":50},[40,171295,149365],{"class":94},[40,171297,15757],{"class":50},[40,171299,149370],{"class":94},[40,171301,15757],{"class":50},[40,171303,149375],{"class":8539},[40,171305,1284],{"class":1283},[40,171307,149380],{"class":94},[40,171309,1811],{"class":50},[40,171311,171312],{"class":42,"line":54},[40,171313,1413],{"emptyLinePlaceholder":1412},[40,171315,171316,171318,171320,171322,171324],{"class":42,"line":70},[40,171317,6349],{"class":1283},[40,171319,171259],{"class":50},[40,171321,29355],{"class":1283},[40,171323,150722],{"class":8539},[40,171325,332],{"class":50},[40,171327,171328,171330],{"class":42,"line":78},[40,171329,34599],{"class":63},[40,171331,171271],{"class":50},[40,171333,171334],{"class":42,"line":86},[40,171335,1413],{"emptyLinePlaceholder":1412},[40,171337,171338,171340],{"class":42,"line":100},[40,171339,48654],{"class":8539},[40,171341,171084],{"class":50},[14,171343,171345],{"id":171344},"_85-with语句","8.5 with语句",[19,171347,171348,171350],{},[26,171349,111124],{}," 会自动关闭文件，推荐使用。",[31,171352,171354],{"className":33679,"code":171353,"language":2323,"meta":36,"style":36},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[26,171355,171356,171386,171396],{"__ignoreMap":36},[40,171357,171358,171360,171362,171364,171366,171368,171370,171372,171374,171376,171378,171380,171382,171384],{"class":42,"line":43},[40,171359,111124],{"class":1283},[40,171361,149360],{"class":63},[40,171363,3488],{"class":50},[40,171365,149365],{"class":94},[40,171367,15757],{"class":50},[40,171369,149370],{"class":94},[40,171371,15757],{"class":50},[40,171373,149375],{"class":8539},[40,171375,1284],{"class":1283},[40,171377,149380],{"class":94},[40,171379,17036],{"class":50},[40,171381,34683],{"class":1283},[40,171383,150722],{"class":8539},[40,171385,332],{"class":50},[40,171387,171388,171390,171392,171394],{"class":42,"line":54},[40,171389,149392],{"class":50},[40,171391,1284],{"class":1283},[40,171393,150722],{"class":8539},[40,171395,171070],{"class":50},[40,171397,171398,171400],{"class":42,"line":70},[40,171399,34599],{"class":63},[40,171401,171077],{"class":50},[19,171403,171404],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,171406,171408],{"id":171407},"_86-写入文件","8.6 写入文件",[19,171410,171411,171413],{},[26,171412,2784],{}," 模式会清空原文件。",[31,171415,171417],{"className":33679,"code":171416,"language":2323,"meta":36,"style":36},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[26,171418,171419,171449,171466],{"__ignoreMap":36},[40,171420,171421,171423,171425,171427,171429,171431,171433,171435,171437,171439,171441,171443,171445,171447],{"class":42,"line":43},[40,171422,111124],{"class":1283},[40,171424,149360],{"class":63},[40,171426,3488],{"class":50},[40,171428,149365],{"class":94},[40,171430,15757],{"class":50},[40,171432,154545],{"class":94},[40,171434,15757],{"class":50},[40,171436,149375],{"class":8539},[40,171438,1284],{"class":1283},[40,171440,149380],{"class":94},[40,171442,17036],{"class":50},[40,171444,34683],{"class":1283},[40,171446,150722],{"class":8539},[40,171448,332],{"class":50},[40,171450,171451,171454,171457,171460,171462,171464],{"class":42,"line":54},[40,171452,171453],{"class":8539},"    file",[40,171455,171456],{"class":50},".write(",[40,171458,171459],{"class":94},"\"hello",[40,171461,159094],{"class":63},[40,171463,3731],{"class":94},[40,171465,1811],{"class":50},[40,171467,171468,171470,171472,171475,171477,171479],{"class":42,"line":70},[40,171469,171453],{"class":8539},[40,171471,171456],{"class":50},[40,171473,171474],{"class":94},"\"python",[40,171476,159094],{"class":63},[40,171478,3731],{"class":94},[40,171480,1811],{"class":50},[19,171482,171483],{},"写入多行：",[31,171485,171487],{"className":33679,"code":171486,"language":2323,"meta":36,"style":36},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[26,171488,171489,171524,171528,171559],{"__ignoreMap":36},[40,171490,171491,171493,171495,171497,171500,171502,171504,171506,171509,171511,171513,171515,171518,171520,171522],{"class":42,"line":43},[40,171492,171220],{"class":50},[40,171494,1284],{"class":1283},[40,171496,55524],{"class":50},[40,171498,171499],{"class":94},"\"小明,18",[40,171501,159094],{"class":63},[40,171503,3731],{"class":94},[40,171505,15757],{"class":50},[40,171507,171508],{"class":94},"\"小红,17",[40,171510,159094],{"class":63},[40,171512,3731],{"class":94},[40,171514,15757],{"class":50},[40,171516,171517],{"class":94},"\"小刚,19",[40,171519,159094],{"class":63},[40,171521,3731],{"class":94},[40,171523,36546],{"class":50},[40,171525,171526],{"class":42,"line":54},[40,171527,1413],{"emptyLinePlaceholder":1412},[40,171529,171530,171532,171534,171536,171539,171541,171543,171545,171547,171549,171551,171553,171555,171557],{"class":42,"line":70},[40,171531,111124],{"class":1283},[40,171533,149360],{"class":63},[40,171535,3488],{"class":50},[40,171537,171538],{"class":94},"\"students.txt\"",[40,171540,15757],{"class":50},[40,171542,154545],{"class":94},[40,171544,15757],{"class":50},[40,171546,149375],{"class":8539},[40,171548,1284],{"class":1283},[40,171550,149380],{"class":94},[40,171552,17036],{"class":50},[40,171554,34683],{"class":1283},[40,171556,150722],{"class":8539},[40,171558,332],{"class":50},[40,171560,171561,171563],{"class":42,"line":78},[40,171562,171453],{"class":8539},[40,171564,171565],{"class":50},".writelines(lines)\n",[14,171567,171569],{"id":171568},"_87-追加文件","8.7 追加文件",[19,171571,171572,171574],{},[26,171573,2106],{}," 模式不会清空原内容，而是在末尾追加。",[31,171576,171578],{"className":33679,"code":171577,"language":2323,"meta":36,"style":36},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[26,171579,171580,171611],{"__ignoreMap":36},[40,171581,171582,171584,171586,171588,171591,171593,171595,171597,171599,171601,171603,171605,171607,171609],{"class":42,"line":43},[40,171583,111124],{"class":1283},[40,171585,149360],{"class":63},[40,171587,3488],{"class":50},[40,171589,171590],{"class":94},"\"log.txt\"",[40,171592,15757],{"class":50},[40,171594,167894],{"class":94},[40,171596,15757],{"class":50},[40,171598,149375],{"class":8539},[40,171600,1284],{"class":1283},[40,171602,149380],{"class":94},[40,171604,17036],{"class":50},[40,171606,34683],{"class":1283},[40,171608,150722],{"class":8539},[40,171610,332],{"class":50},[40,171612,171613,171615,171617,171620,171622,171624],{"class":42,"line":54},[40,171614,171453],{"class":8539},[40,171616,171456],{"class":50},[40,171618,171619],{"class":94},"\"程序启动",[40,171621,159094],{"class":63},[40,171623,3731],{"class":94},[40,171625,1811],{"class":50},[19,171627,171628],{},"日志类文件常用追加模式。",[14,171630,171632],{"id":171631},"_88-文件编码","8.8 文件编码",[19,171634,171635],{},"编码决定文字如何保存为字节。",[19,171637,171638],{},"常见编码：",[492,171640,171641,171644],{},[495,171642,171643],{},"UTF-8：推荐。",[495,171645,171646],{},"GBK：部分 Windows 中文文件常见。",[19,171648,171649],{},"读取文件乱码时，可以尝试：",[31,171651,171653],{"className":33679,"code":171652,"language":2323,"meta":36,"style":36},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[26,171654,171655,171686],{"__ignoreMap":36},[40,171656,171657,171659,171661,171663,171665,171667,171669,171671,171673,171675,171678,171680,171682,171684],{"class":42,"line":43},[40,171658,111124],{"class":1283},[40,171660,149360],{"class":63},[40,171662,3488],{"class":50},[40,171664,149365],{"class":94},[40,171666,15757],{"class":50},[40,171668,149370],{"class":94},[40,171670,15757],{"class":50},[40,171672,149375],{"class":8539},[40,171674,1284],{"class":1283},[40,171676,171677],{"class":94},"\"gbk\"",[40,171679,17036],{"class":50},[40,171681,34683],{"class":1283},[40,171683,150722],{"class":8539},[40,171685,332],{"class":50},[40,171687,171688,171690,171692,171694],{"class":42,"line":54},[40,171689,149392],{"class":50},[40,171691,1284],{"class":1283},[40,171693,150722],{"class":8539},[40,171695,171070],{"class":50},[19,171697,171698],{},"写文件时建议统一 UTF-8：",[31,171700,171702],{"className":33679,"code":171701,"language":2323,"meta":36,"style":36},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[26,171703,171704,171734],{"__ignoreMap":36},[40,171705,171706,171708,171710,171712,171714,171716,171718,171720,171722,171724,171726,171728,171730,171732],{"class":42,"line":43},[40,171707,111124],{"class":1283},[40,171709,149360],{"class":63},[40,171711,3488],{"class":50},[40,171713,149365],{"class":94},[40,171715,15757],{"class":50},[40,171717,154545],{"class":94},[40,171719,15757],{"class":50},[40,171721,149375],{"class":8539},[40,171723,1284],{"class":1283},[40,171725,149380],{"class":94},[40,171727,17036],{"class":50},[40,171729,34683],{"class":1283},[40,171731,150722],{"class":8539},[40,171733,332],{"class":50},[40,171735,171736,171738,171740,171743],{"class":42,"line":54},[40,171737,171453],{"class":8539},[40,171739,171456],{"class":50},[40,171741,171742],{"class":94},"\"中文内容\"",[40,171744,1811],{"class":50},[14,171746,171748],{"id":171747},"_89-pathlib","8.9 pathlib",[19,171750,171751,171754],{},[26,171752,171753],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[31,171756,171758],{"className":33679,"code":171757,"language":2323,"meta":36,"style":36},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[26,171759,171760,171770,171774,171792],{"__ignoreMap":36},[40,171761,171762,171764,171766,171768],{"class":42,"line":43},[40,171763,34037],{"class":1283},[40,171765,111602],{"class":50},[40,171767,33692],{"class":1283},[40,171769,111607],{"class":50},[40,171771,171772],{"class":42,"line":54},[40,171773,1413],{"emptyLinePlaceholder":1412},[40,171775,171776,171778,171780,171782,171785,171787,171789],{"class":42,"line":70},[40,171777,170880],{"class":50},[40,171779,1284],{"class":1283},[40,171781,111836],{"class":50},[40,171783,171784],{"class":94},"\"data\"",[40,171786,17036],{"class":50},[40,171788,4063],{"class":1283},[40,171790,171791],{"class":94}," \"students.txt\"\n",[40,171793,171794,171796],{"class":42,"line":78},[40,171795,33715],{"class":63},[40,171797,171798],{"class":50},"(path)\n",[19,171800,171801],{},"创建目录：",[31,171803,171805],{"className":33679,"code":171804,"language":2323,"meta":36,"style":36},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[26,171806,171807,171817,171821,171834],{"__ignoreMap":36},[40,171808,171809,171811,171813,171815],{"class":42,"line":43},[40,171810,34037],{"class":1283},[40,171812,111602],{"class":50},[40,171814,33692],{"class":1283},[40,171816,111607],{"class":50},[40,171818,171819],{"class":42,"line":54},[40,171820,1413],{"emptyLinePlaceholder":1412},[40,171822,171823,171826,171828,171830,171832],{"class":42,"line":70},[40,171824,171825],{"class":50},"data_dir ",[40,171827,1284],{"class":1283},[40,171829,111836],{"class":50},[40,171831,171784],{"class":94},[40,171833,1811],{"class":50},[40,171835,171836,171839,171842,171844,171846],{"class":42,"line":78},[40,171837,171838],{"class":50},"data_dir.mkdir(",[40,171840,171841],{"class":8539},"exist_ok",[40,171843,1284],{"class":1283},[40,171845,34776],{"class":63},[40,171847,1811],{"class":50},[19,171849,171850],{},"判断文件是否存在：",[31,171852,171854],{"className":33679,"code":171853,"language":2323,"meta":36,"style":36},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[26,171855,171856,171869,171873,171880],{"__ignoreMap":36},[40,171857,171858,171860,171862,171864,171867],{"class":42,"line":43},[40,171859,170880],{"class":50},[40,171861,1284],{"class":1283},[40,171863,111836],{"class":50},[40,171865,171866],{"class":94},"\"data\u002Fstudents.txt\"",[40,171868,1811],{"class":50},[40,171870,171871],{"class":42,"line":54},[40,171872,1413],{"emptyLinePlaceholder":1412},[40,171874,171875,171877],{"class":42,"line":70},[40,171876,4873],{"class":1283},[40,171878,171879],{"class":50}," path.exists():\n",[40,171881,171882,171884,171886,171889],{"class":42,"line":78},[40,171883,34599],{"class":63},[40,171885,3488],{"class":50},[40,171887,171888],{"class":94},"\"文件存在\"",[40,171890,1811],{"class":50},[19,171892,171893],{},"读写文本：",[31,171895,171897],{"className":33679,"code":171896,"language":2323,"meta":36,"style":36},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[26,171898,171899,171911,171915,171932,171949],{"__ignoreMap":36},[40,171900,171901,171903,171905,171907,171909],{"class":42,"line":43},[40,171902,170880],{"class":50},[40,171904,1284],{"class":1283},[40,171906,111836],{"class":50},[40,171908,149365],{"class":94},[40,171910,1811],{"class":50},[40,171912,171913],{"class":42,"line":54},[40,171914,1413],{"emptyLinePlaceholder":1412},[40,171916,171917,171920,171922,171924,171926,171928,171930],{"class":42,"line":70},[40,171918,171919],{"class":50},"path.write_text(",[40,171921,148445],{"class":94},[40,171923,15757],{"class":50},[40,171925,149375],{"class":8539},[40,171927,1284],{"class":1283},[40,171929,149380],{"class":94},[40,171931,1811],{"class":50},[40,171933,171934,171936,171938,171941,171943,171945,171947],{"class":42,"line":78},[40,171935,171063],{"class":50},[40,171937,1284],{"class":1283},[40,171939,171940],{"class":50}," path.read_text(",[40,171942,149375],{"class":8539},[40,171944,1284],{"class":1283},[40,171946,149380],{"class":94},[40,171948,1811],{"class":50},[40,171950,171951,171953],{"class":42,"line":86},[40,171952,33715],{"class":63},[40,171954,171077],{"class":50},[14,171956,171958],{"id":171957},"_810-json文件","8.10 JSON文件",[19,171960,171961],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[31,171963,171965],{"className":33679,"code":171964,"language":2323,"meta":36,"style":36},"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",[26,171966,171967,171973,171977,171985,171995,172005,172013,172017,172021,172046],{"__ignoreMap":36},[40,171968,171969,171971],{"class":42,"line":43},[40,171970,33692],{"class":1283},[40,171972,149660],{"class":50},[40,171974,171975],{"class":42,"line":54},[40,171976,1413],{"emptyLinePlaceholder":1412},[40,171978,171979,171981,171983],{"class":42,"line":70},[40,171980,152050],{"class":50},[40,171982,1284],{"class":1283},[40,171984,18894],{"class":50},[40,171986,171987,171989,171991,171993],{"class":42,"line":78},[40,171988,149589],{"class":94},[40,171990,60],{"class":50},[40,171992,152457],{"class":94},[40,171994,34766],{"class":50},[40,171996,171997,171999,172001,172003],{"class":42,"line":86},[40,171998,167106],{"class":94},[40,172000,60],{"class":50},[40,172002,4128],{"class":63},[40,172004,34766],{"class":50},[40,172006,172007,172009,172011],{"class":42,"line":100},[40,172008,167117],{"class":94},[40,172010,60],{"class":50},[40,172012,167122],{"class":63},[40,172014,172015],{"class":42,"line":108},[40,172016,4907],{"class":50},[40,172018,172019],{"class":42,"line":121},[40,172020,1413],{"emptyLinePlaceholder":1412},[40,172022,172023,172025,172027,172030,172032,172034,172036,172038,172040,172042,172044],{"class":42,"line":134},[40,172024,159013],{"class":50},[40,172026,1284],{"class":1283},[40,172028,172029],{"class":50}," json.dumps(student, ",[40,172031,149706],{"class":8539},[40,172033,1284],{"class":1283},[40,172035,37287],{"class":63},[40,172037,15757],{"class":50},[40,172039,154581],{"class":8539},[40,172041,1284],{"class":1283},[40,172043,64],{"class":63},[40,172045,1811],{"class":50},[40,172047,172048,172050],{"class":42,"line":146},[40,172049,33715],{"class":63},[40,172051,166640],{"class":50},[19,172053,172054],{},"写入 JSON 文件：",[31,172056,172058],{"className":33679,"code":172057,"language":2323,"meta":36,"style":36},"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",[26,172059,172060,172066,172070,172078,172106,172134,172138,172142,172172],{"__ignoreMap":36},[40,172061,172062,172064],{"class":42,"line":43},[40,172063,33692],{"class":1283},[40,172065,149660],{"class":50},[40,172067,172068],{"class":42,"line":54},[40,172069,1413],{"emptyLinePlaceholder":1412},[40,172071,172072,172074,172076],{"class":42,"line":70},[40,172073,162285],{"class":50},[40,172075,1284],{"class":1283},[40,172077,58745],{"class":50},[40,172079,172080,172082,172084,172086,172088,172090,172092,172094,172096,172098,172100,172102,172104],{"class":42,"line":78},[40,172081,150954],{"class":50},[40,172083,65977],{"class":94},[40,172085,60],{"class":50},[40,172087,152457],{"class":94},[40,172089,15757],{"class":50},[40,172091,72422],{"class":94},[40,172093,60],{"class":50},[40,172095,4128],{"class":63},[40,172097,15757],{"class":50},[40,172099,154041],{"class":94},[40,172101,60],{"class":50},[40,172103,4466],{"class":63},[40,172105,8253],{"class":50},[40,172107,172108,172110,172112,172114,172116,172118,172120,172122,172124,172126,172128,172130,172132],{"class":42,"line":86},[40,172109,150954],{"class":50},[40,172111,65977],{"class":94},[40,172113,60],{"class":50},[40,172115,153505],{"class":94},[40,172117,15757],{"class":50},[40,172119,72422],{"class":94},[40,172121,60],{"class":50},[40,172123,4104],{"class":63},[40,172125,15757],{"class":50},[40,172127,154041],{"class":94},[40,172129,60],{"class":50},[40,172131,4288],{"class":63},[40,172133,8253],{"class":50},[40,172135,172136],{"class":42,"line":100},[40,172137,36546],{"class":50},[40,172139,172140],{"class":42,"line":108},[40,172141,1413],{"emptyLinePlaceholder":1412},[40,172143,172144,172146,172148,172150,172152,172154,172156,172158,172160,172162,172164,172166,172168,172170],{"class":42,"line":121},[40,172145,111124],{"class":1283},[40,172147,149360],{"class":63},[40,172149,3488],{"class":50},[40,172151,154400],{"class":94},[40,172153,15757],{"class":50},[40,172155,154545],{"class":94},[40,172157,15757],{"class":50},[40,172159,149375],{"class":8539},[40,172161,1284],{"class":1283},[40,172163,149380],{"class":94},[40,172165,17036],{"class":50},[40,172167,34683],{"class":1283},[40,172169,150722],{"class":8539},[40,172171,332],{"class":50},[40,172173,172174,172177,172179,172181,172183,172185,172187,172189,172191,172193,172195],{"class":42,"line":134},[40,172175,172176],{"class":50},"    json.dump(students, ",[40,172178,48654],{"class":8539},[40,172180,15757],{"class":50},[40,172182,149706],{"class":8539},[40,172184,1284],{"class":1283},[40,172186,37287],{"class":63},[40,172188,15757],{"class":50},[40,172190,154581],{"class":8539},[40,172192,1284],{"class":1283},[40,172194,64],{"class":63},[40,172196,1811],{"class":50},[19,172198,172199],{},"读取 JSON 文件：",[31,172201,172203],{"className":33679,"code":172202,"language":2323,"meta":36,"style":36},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[26,172204,172205,172211,172215,172245,172257,172261],{"__ignoreMap":36},[40,172206,172207,172209],{"class":42,"line":43},[40,172208,33692],{"class":1283},[40,172210,149660],{"class":50},[40,172212,172213],{"class":42,"line":54},[40,172214,1413],{"emptyLinePlaceholder":1412},[40,172216,172217,172219,172221,172223,172225,172227,172229,172231,172233,172235,172237,172239,172241,172243],{"class":42,"line":70},[40,172218,111124],{"class":1283},[40,172220,149360],{"class":63},[40,172222,3488],{"class":50},[40,172224,154400],{"class":94},[40,172226,15757],{"class":50},[40,172228,149370],{"class":94},[40,172230,15757],{"class":50},[40,172232,149375],{"class":8539},[40,172234,1284],{"class":1283},[40,172236,149380],{"class":94},[40,172238,17036],{"class":50},[40,172240,34683],{"class":1283},[40,172242,150722],{"class":8539},[40,172244,332],{"class":50},[40,172246,172247,172249,172251,172253,172255],{"class":42,"line":78},[40,172248,155606],{"class":50},[40,172250,1284],{"class":1283},[40,172252,150733],{"class":50},[40,172254,48654],{"class":8539},[40,172256,1811],{"class":50},[40,172258,172259],{"class":42,"line":86},[40,172260,1413],{"emptyLinePlaceholder":1412},[40,172262,172263,172265],{"class":42,"line":100},[40,172264,33715],{"class":63},[40,172266,167564],{"class":50},[14,172268,172270],{"id":172269},"_811-csv文件","8.11 CSV文件",[19,172272,172273],{},"CSV 是逗号分隔值，常用于表格数据。",[19,172275,172276],{},"写入 CSV：",[31,172278,172280],{"className":33679,"code":172279,"language":2323,"meta":36,"style":36},"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",[26,172281,172282,172289,172293,172301,172319,172335,172351,172355,172359,172399,172413],{"__ignoreMap":36},[40,172283,172284,172286],{"class":42,"line":43},[40,172285,33692],{"class":1283},[40,172287,172288],{"class":50}," csv\n",[40,172290,172291],{"class":42,"line":54},[40,172292,1413],{"emptyLinePlaceholder":1412},[40,172294,172295,172297,172299],{"class":42,"line":70},[40,172296,162285],{"class":50},[40,172298,1284],{"class":1283},[40,172300,58745],{"class":50},[40,172302,172303,172306,172308,172310,172312,172314,172317],{"class":42,"line":78},[40,172304,172305],{"class":50},"    [",[40,172307,76394],{"class":94},[40,172309,15757],{"class":50},[40,172311,76427],{"class":94},[40,172313,15757],{"class":50},[40,172315,172316],{"class":94},"\"成绩\"",[40,172318,91131],{"class":50},[40,172320,172321,172323,172325,172327,172329,172331,172333],{"class":42,"line":86},[40,172322,172305],{"class":50},[40,172324,152457],{"class":94},[40,172326,15757],{"class":50},[40,172328,4128],{"class":63},[40,172330,15757],{"class":50},[40,172332,4466],{"class":63},[40,172334,91131],{"class":50},[40,172336,172337,172339,172341,172343,172345,172347,172349],{"class":42,"line":100},[40,172338,172305],{"class":50},[40,172340,153505],{"class":94},[40,172342,15757],{"class":50},[40,172344,4104],{"class":63},[40,172346,15757],{"class":50},[40,172348,4288],{"class":63},[40,172350,91131],{"class":50},[40,172352,172353],{"class":42,"line":108},[40,172354,36546],{"class":50},[40,172356,172357],{"class":42,"line":121},[40,172358,1413],{"emptyLinePlaceholder":1412},[40,172360,172361,172363,172365,172367,172370,172372,172374,172376,172378,172380,172382,172384,172387,172389,172391,172393,172395,172397],{"class":42,"line":134},[40,172362,111124],{"class":1283},[40,172364,149360],{"class":63},[40,172366,3488],{"class":50},[40,172368,172369],{"class":94},"\"students.csv\"",[40,172371,15757],{"class":50},[40,172373,154545],{"class":94},[40,172375,15757],{"class":50},[40,172377,149375],{"class":8539},[40,172379,1284],{"class":1283},[40,172381,149380],{"class":94},[40,172383,15757],{"class":50},[40,172385,172386],{"class":8539},"newline",[40,172388,1284],{"class":1283},[40,172390,285],{"class":94},[40,172392,17036],{"class":50},[40,172394,34683],{"class":1283},[40,172396,150722],{"class":8539},[40,172398,332],{"class":50},[40,172400,172401,172404,172406,172409,172411],{"class":42,"line":146},[40,172402,172403],{"class":50},"    writer ",[40,172405,1284],{"class":1283},[40,172407,172408],{"class":50}," csv.writer(",[40,172410,48654],{"class":8539},[40,172412,1811],{"class":50},[40,172414,172415],{"class":42,"line":154},[40,172416,172417],{"class":50},"    writer.writerows(students)\n",[19,172419,172420],{},"读取 CSV：",[31,172422,172424],{"className":33679,"code":172423,"language":2323,"meta":36,"style":36},"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",[26,172425,172426,172432,172436,172466,172480,172492],{"__ignoreMap":36},[40,172427,172428,172430],{"class":42,"line":43},[40,172429,33692],{"class":1283},[40,172431,172288],{"class":50},[40,172433,172434],{"class":42,"line":54},[40,172435,1413],{"emptyLinePlaceholder":1412},[40,172437,172438,172440,172442,172444,172446,172448,172450,172452,172454,172456,172458,172460,172462,172464],{"class":42,"line":70},[40,172439,111124],{"class":1283},[40,172441,149360],{"class":63},[40,172443,3488],{"class":50},[40,172445,172369],{"class":94},[40,172447,15757],{"class":50},[40,172449,149370],{"class":94},[40,172451,15757],{"class":50},[40,172453,149375],{"class":8539},[40,172455,1284],{"class":1283},[40,172457,149380],{"class":94},[40,172459,17036],{"class":50},[40,172461,34683],{"class":1283},[40,172463,150722],{"class":8539},[40,172465,332],{"class":50},[40,172467,172468,172471,172473,172476,172478],{"class":42,"line":78},[40,172469,172470],{"class":50},"    reader ",[40,172472,1284],{"class":1283},[40,172474,172475],{"class":50}," csv.reader(",[40,172477,48654],{"class":8539},[40,172479,1811],{"class":50},[40,172481,172482,172484,172487,172489],{"class":42,"line":86},[40,172483,6525],{"class":1283},[40,172485,172486],{"class":50}," row ",[40,172488,29355],{"class":1283},[40,172490,172491],{"class":50}," reader:\n",[40,172493,172494,172496],{"class":42,"line":100},[40,172495,35751],{"class":63},[40,172497,172498],{"class":50},"(row)\n",[19,172500,172501],{},"使用字典写入：",[31,172503,172505],{"className":33679,"code":172504,"language":2323,"meta":36,"style":36},"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",[26,172506,172507,172513,172517,172525,172553,172581,172585,172589,172627,172648,172669,172674],{"__ignoreMap":36},[40,172508,172509,172511],{"class":42,"line":43},[40,172510,33692],{"class":1283},[40,172512,172288],{"class":50},[40,172514,172515],{"class":42,"line":54},[40,172516,1413],{"emptyLinePlaceholder":1412},[40,172518,172519,172521,172523],{"class":42,"line":70},[40,172520,162285],{"class":50},[40,172522,1284],{"class":1283},[40,172524,58745],{"class":50},[40,172526,172527,172529,172531,172533,172535,172537,172539,172541,172543,172545,172547,172549,172551],{"class":42,"line":78},[40,172528,150954],{"class":50},[40,172530,65977],{"class":94},[40,172532,60],{"class":50},[40,172534,152457],{"class":94},[40,172536,15757],{"class":50},[40,172538,72422],{"class":94},[40,172540,60],{"class":50},[40,172542,4128],{"class":63},[40,172544,15757],{"class":50},[40,172546,154041],{"class":94},[40,172548,60],{"class":50},[40,172550,4466],{"class":63},[40,172552,8253],{"class":50},[40,172554,172555,172557,172559,172561,172563,172565,172567,172569,172571,172573,172575,172577,172579],{"class":42,"line":86},[40,172556,150954],{"class":50},[40,172558,65977],{"class":94},[40,172560,60],{"class":50},[40,172562,153505],{"class":94},[40,172564,15757],{"class":50},[40,172566,72422],{"class":94},[40,172568,60],{"class":50},[40,172570,4104],{"class":63},[40,172572,15757],{"class":50},[40,172574,154041],{"class":94},[40,172576,60],{"class":50},[40,172578,4288],{"class":63},[40,172580,8253],{"class":50},[40,172582,172583],{"class":42,"line":100},[40,172584,36546],{"class":50},[40,172586,172587],{"class":42,"line":108},[40,172588,1413],{"emptyLinePlaceholder":1412},[40,172590,172591,172593,172595,172597,172599,172601,172603,172605,172607,172609,172611,172613,172615,172617,172619,172621,172623,172625],{"class":42,"line":121},[40,172592,111124],{"class":1283},[40,172594,149360],{"class":63},[40,172596,3488],{"class":50},[40,172598,172369],{"class":94},[40,172600,15757],{"class":50},[40,172602,154545],{"class":94},[40,172604,15757],{"class":50},[40,172606,149375],{"class":8539},[40,172608,1284],{"class":1283},[40,172610,149380],{"class":94},[40,172612,15757],{"class":50},[40,172614,172386],{"class":8539},[40,172616,1284],{"class":1283},[40,172618,285],{"class":94},[40,172620,17036],{"class":50},[40,172622,34683],{"class":1283},[40,172624,150722],{"class":8539},[40,172626,332],{"class":50},[40,172628,172629,172632,172634,172636,172638,172640,172642,172644,172646],{"class":42,"line":134},[40,172630,172631],{"class":50},"    fieldnames ",[40,172633,1284],{"class":1283},[40,172635,55524],{"class":50},[40,172637,65977],{"class":94},[40,172639,15757],{"class":50},[40,172641,72422],{"class":94},[40,172643,15757],{"class":50},[40,172645,154041],{"class":94},[40,172647,36546],{"class":50},[40,172649,172650,172652,172654,172657,172659,172661,172664,172666],{"class":42,"line":146},[40,172651,172403],{"class":50},[40,172653,1284],{"class":1283},[40,172655,172656],{"class":50}," csv.DictWriter(",[40,172658,48654],{"class":8539},[40,172660,15757],{"class":50},[40,172662,172663],{"class":8539},"fieldnames",[40,172665,1284],{"class":1283},[40,172667,172668],{"class":50},"fieldnames)\n",[40,172670,172671],{"class":42,"line":154},[40,172672,172673],{"class":50},"    writer.writeheader()\n",[40,172675,172676],{"class":42,"line":162},[40,172677,172417],{"class":50},[14,172679,172681],{"id":172680},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,172683,1205],{},[492,172685,172686,172689,172692],{},[495,172687,172688],{},"读取文本文件。",[495,172690,172691],{},"统计每个单词出现次数。",[495,172693,172694],{},"输出出现次数最多的前 10 个单词。",[19,172696,13357],{},[31,172698,172700],{"className":33679,"code":172699,"language":2323,"meta":36,"style":36},"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",[26,172701,172702,172712,172716,172729,172745,172749,172759,172768,172772,172784,172804,172813,172817,172835,172839,172869,172873,172889],{"__ignoreMap":36},[40,172703,172704,172706,172708,172710],{"class":42,"line":43},[40,172705,34037],{"class":1283},[40,172707,111602],{"class":50},[40,172709,33692],{"class":1283},[40,172711,111607],{"class":50},[40,172713,172714],{"class":42,"line":54},[40,172715,1413],{"emptyLinePlaceholder":1412},[40,172717,172718,172720,172722,172724,172727],{"class":42,"line":70},[40,172719,170880],{"class":50},[40,172721,1284],{"class":1283},[40,172723,111836],{"class":50},[40,172725,172726],{"class":94},"\"article.txt\"",[40,172728,1811],{"class":50},[40,172730,172731,172733,172735,172737,172739,172741,172743],{"class":42,"line":78},[40,172732,171063],{"class":50},[40,172734,1284],{"class":1283},[40,172736,171940],{"class":50},[40,172738,149375],{"class":8539},[40,172740,1284],{"class":1283},[40,172742,149380],{"class":94},[40,172744,1811],{"class":50},[40,172746,172747],{"class":42,"line":86},[40,172748,1413],{"emptyLinePlaceholder":1412},[40,172750,172751,172754,172756],{"class":42,"line":100},[40,172752,172753],{"class":50},"words ",[40,172755,1284],{"class":1283},[40,172757,172758],{"class":50}," content.lower().split()\n",[40,172760,172761,172764,172766],{"class":42,"line":108},[40,172762,172763],{"class":50},"counter ",[40,172765,1284],{"class":1283},[40,172767,91163],{"class":50},[40,172769,172770],{"class":42,"line":121},[40,172771,1413],{"emptyLinePlaceholder":1412},[40,172773,172774,172776,172779,172781],{"class":42,"line":134},[40,172775,6349],{"class":1283},[40,172777,172778],{"class":50}," word ",[40,172780,29355],{"class":1283},[40,172782,172783],{"class":50}," words:\n",[40,172785,172786,172789,172791,172794,172797,172799,172802],{"class":42,"line":146},[40,172787,172788],{"class":50},"    word ",[40,172790,1284],{"class":1283},[40,172792,172793],{"class":50}," word.strip(",[40,172795,172796],{"class":94},"\".,!?;:",[40,172798,159064],{"class":63},[40,172800,172801],{"class":94},"'()[]\"",[40,172803,1811],{"class":50},[40,172805,172806,172808,172810],{"class":42,"line":154},[40,172807,6425],{"class":1283},[40,172809,42230],{"class":1283},[40,172811,172812],{"class":50}," word:\n",[40,172814,172815],{"class":42,"line":162},[40,172816,151081],{"class":1283},[40,172818,172819,172822,172824,172827,172829,172831,172833],{"class":42,"line":170},[40,172820,172821],{"class":50},"    counter[word] ",[40,172823,1284],{"class":1283},[40,172825,172826],{"class":50}," counter.get(word, ",[40,172828,3672],{"class":63},[40,172830,17036],{"class":50},[40,172832,3960],{"class":1283},[40,172834,58997],{"class":63},[40,172836,172837],{"class":42,"line":183},[40,172838,1413],{"emptyLinePlaceholder":1412},[40,172840,172841,172844,172846,172848,172851,172853,172855,172857,172859,172861,172863,172865,172867],{"class":42,"line":196},[40,172842,172843],{"class":50},"items ",[40,172845,1284],{"class":1283},[40,172847,166173],{"class":63},[40,172849,172850],{"class":50},"(counter.items(), ",[40,172852,156515],{"class":8539},[40,172854,156518],{"class":1283},[40,172856,156521],{"class":50},[40,172858,3698],{"class":63},[40,172860,115493],{"class":50},[40,172862,166097],{"class":8539},[40,172864,1284],{"class":1283},[40,172866,34776],{"class":63},[40,172868,1811],{"class":50},[40,172870,172871],{"class":42,"line":204},[40,172872,1413],{"emptyLinePlaceholder":1412},[40,172874,172875,172877,172880,172882,172885,172887],{"class":42,"line":217},[40,172876,6349],{"class":1283},[40,172878,172879],{"class":50}," word, count ",[40,172881,29355],{"class":1283},[40,172883,172884],{"class":50}," items[:",[40,172886,3925],{"class":63},[40,172888,168324],{"class":50},[40,172890,172891,172893],{"class":42,"line":230},[40,172892,34599],{"class":63},[40,172894,172895],{"class":50},"(word, count)\n",[14,172897,172899],{"id":172898},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[31,172901,172903],{"className":33679,"code":172902,"language":2323,"meta":36,"style":36},"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",[26,172904,172905,172911,172921,172925,172937,172941,172945,172953,172963,172969,172973,173003,173013,173017,173021,173029,173059,173083,173087,173091,173099,173128,173133],{"__ignoreMap":36},[40,172906,172907,172909],{"class":42,"line":43},[40,172908,33692],{"class":1283},[40,172910,149660],{"class":50},[40,172912,172913,172915,172917,172919],{"class":42,"line":54},[40,172914,34037],{"class":1283},[40,172916,111602],{"class":50},[40,172918,33692],{"class":1283},[40,172920,111607],{"class":50},[40,172922,172923],{"class":42,"line":70},[40,172924,1413],{"emptyLinePlaceholder":1412},[40,172926,172927,172929,172931,172933,172935],{"class":42,"line":78},[40,172928,154393],{"class":63},[40,172930,16886],{"class":1283},[40,172932,111836],{"class":50},[40,172934,154400],{"class":94},[40,172936,1811],{"class":50},[40,172938,172939],{"class":42,"line":86},[40,172940,1413],{"emptyLinePlaceholder":1412},[40,172942,172943],{"class":42,"line":100},[40,172944,1413],{"emptyLinePlaceholder":1412},[40,172946,172947,172949,172951],{"class":42,"line":108},[40,172948,35247],{"class":1283},[40,172950,154417],{"class":596},[40,172952,35253],{"class":50},[40,172954,172955,172957,172959,172961],{"class":42,"line":121},[40,172956,6425],{"class":1283},[40,172958,42230],{"class":1283},[40,172960,154428],{"class":63},[40,172962,154431],{"class":50},[40,172964,172965,172967],{"class":42,"line":134},[40,172966,18074],{"class":1283},[40,172968,55136],{"class":50},[40,172970,172971],{"class":42,"line":146},[40,172972,1413],{"emptyLinePlaceholder":1412},[40,172974,172975,172977,172979,172981,172983,172985,172987,172989,172991,172993,172995,172997,172999,173001],{"class":42,"line":154},[40,172976,37478],{"class":1283},[40,172978,149360],{"class":63},[40,172980,3488],{"class":50},[40,172982,154393],{"class":63},[40,172984,15757],{"class":50},[40,172986,149370],{"class":94},[40,172988,15757],{"class":50},[40,172990,149375],{"class":8539},[40,172992,1284],{"class":1283},[40,172994,149380],{"class":94},[40,172996,17036],{"class":50},[40,172998,34683],{"class":1283},[40,173000,150722],{"class":8539},[40,173002,332],{"class":50},[40,173004,173005,173007,173009,173011],{"class":42,"line":162},[40,173006,18074],{"class":1283},[40,173008,150733],{"class":50},[40,173010,48654],{"class":8539},[40,173012,1811],{"class":50},[40,173014,173015],{"class":42,"line":170},[40,173016,1413],{"emptyLinePlaceholder":1412},[40,173018,173019],{"class":42,"line":183},[40,173020,1413],{"emptyLinePlaceholder":1412},[40,173022,173023,173025,173027],{"class":42,"line":196},[40,173024,35247],{"class":1283},[40,173026,154527],{"class":596},[40,173028,154530],{"class":50},[40,173030,173031,173033,173035,173037,173039,173041,173043,173045,173047,173049,173051,173053,173055,173057],{"class":42,"line":204},[40,173032,37478],{"class":1283},[40,173034,149360],{"class":63},[40,173036,3488],{"class":50},[40,173038,154393],{"class":63},[40,173040,15757],{"class":50},[40,173042,154545],{"class":94},[40,173044,15757],{"class":50},[40,173046,149375],{"class":8539},[40,173048,1284],{"class":1283},[40,173050,149380],{"class":94},[40,173052,17036],{"class":50},[40,173054,34683],{"class":1283},[40,173056,150722],{"class":8539},[40,173058,332],{"class":50},[40,173060,173061,173063,173065,173067,173069,173071,173073,173075,173077,173079,173081],{"class":42,"line":217},[40,173062,154566],{"class":50},[40,173064,48654],{"class":8539},[40,173066,15757],{"class":50},[40,173068,149706],{"class":8539},[40,173070,1284],{"class":1283},[40,173072,37287],{"class":63},[40,173074,15757],{"class":50},[40,173076,154581],{"class":8539},[40,173078,1284],{"class":1283},[40,173080,64],{"class":63},[40,173082,1811],{"class":50},[40,173084,173085],{"class":42,"line":230},[40,173086,1413],{"emptyLinePlaceholder":1412},[40,173088,173089],{"class":42,"line":238},[40,173090,1413],{"emptyLinePlaceholder":1412},[40,173092,173093,173095,173097],{"class":42,"line":251},[40,173094,162285],{"class":50},[40,173096,1284],{"class":1283},[40,173098,155611],{"class":50},[40,173100,173101,173104,173106,173108,173110,173112,173114,173116,173118,173120,173122,173124,173126],{"class":42,"line":264},[40,173102,173103],{"class":50},"students.append({",[40,173105,65977],{"class":94},[40,173107,60],{"class":50},[40,173109,152457],{"class":94},[40,173111,15757],{"class":50},[40,173113,72422],{"class":94},[40,173115,60],{"class":50},[40,173117,4128],{"class":63},[40,173119,15757],{"class":50},[40,173121,154041],{"class":94},[40,173123,60],{"class":50},[40,173125,4466],{"class":63},[40,173127,167721],{"class":50},[40,173129,173130],{"class":42,"line":277},[40,173131,173132],{"class":50},"save_students(students)\n",[40,173134,173135,173137,173139,173142],{"class":42,"line":290},[40,173136,33715],{"class":63},[40,173138,3488],{"class":50},[40,173140,173141],{"class":94},"\"保存成功\"",[40,173143,1811],{"class":50},[14,173145,173147],{"id":173146},"_814-易错点","8.14 易错点",[492,173149,173150,173154,173160,173165,173172,173179],{},[495,173151,173152,171413],{},[26,173153,2784],{},[495,173155,173156,173157,776],{},"读写中文要指定 ",[26,173158,173159],{},"encoding=\"utf-8\"",[495,173161,173162,173163,776],{},"打开文件后要关闭，推荐使用 ",[26,173164,111124],{},[495,173166,173167,173168,173171],{},"读取大文件不要直接 ",[26,173169,173170],{},"read()"," 全部内容。",[495,173173,173174,173175,173178],{},"Windows 写 CSV 时建议加 ",[26,173176,173177],{},"newline=\"\"","，避免空行。",[495,173180,173181],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,173183,173185],{"id":173184},"_815-本章练习","8.15 本章练习",[492,173187,173188,173195,173200,173203,173206],{},[495,173189,173190,173191,173194],{},"写入一个 ",[26,173192,173193],{},"students.txt","，每行保存一个学生姓名。",[495,173196,107646,173197,173199],{},[26,173198,173193],{}," 并输出所有学生。",[495,173201,173202],{},"把学生列表保存为 JSON 文件。",[495,173204,173205],{},"从 JSON 文件读取学生数据，计算平均分。",[495,173207,173208,173209,173212,173213,173216],{},"写一个日志函数 ",[26,173210,173211],{},"write_log(message)","，每次调用向 ",[26,173214,173215],{},"app.log"," 追加一行。",[3384,173218,173219],{},"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":36,"searchDepth":54,"depth":54,"links":173221},[173222,173223,173227,173228,173234,173235,173236,173237,173238,173239,173240,173241,173242,173243,173244],{"id":170733,"depth":54,"text":170734},{"id":170774,"depth":54,"text":170775,"children":173224},[173225,173226],{"id":170778,"depth":70,"text":170779},{"id":170812,"depth":70,"text":170813},{"id":170926,"depth":54,"text":170927},{"id":171019,"depth":54,"text":171020,"children":173229},[173230,173231,173232,173233],{"id":171023,"depth":70,"text":171024},{"id":171110,"depth":70,"text":171111},{"id":171180,"depth":70,"text":171181},{"id":171274,"depth":70,"text":171275},{"id":171344,"depth":54,"text":171345},{"id":171407,"depth":54,"text":171408},{"id":171568,"depth":54,"text":171569},{"id":171631,"depth":54,"text":171632},{"id":171747,"depth":54,"text":171748},{"id":171957,"depth":54,"text":171958},{"id":172269,"depth":54,"text":172270},{"id":172680,"depth":54,"text":172681},{"id":172898,"depth":54,"text":172899},{"id":173146,"depth":54,"text":173147},{"id":173184,"depth":54,"text":173185},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":170725,"description":3413},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":173251,"title":173252,"body":173253,"description":3413,"extension":3414,"meta":175439,"navigation":1412,"path":175440,"seo":175441,"stem":175442,"__hash__":175443},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":173254,"toc":175406},[173255,173258,173262,173265,173268,173360,173362,173381,173386,173390,173393,173396,173425,173432,173435,173439,173442,173471,173473,173525,173531,173584,173588,173686,173689,173756,173760,173817,173819,173825,173829,173834,173840,173931,173936,173940,173943,174021,174024,174062,174066,174184,174187,174191,174194,174239,174242,174246,174251,174257,174307,174310,174341,174345,174349,174379,174383,174418,174422,174457,174497,174501,174517,174520,174524,174528,174607,174611,174652,174656,174711,174715,174749,174753,174783,174792,174799,174805,174862,174865,174873,174876,174880,174887,174890,174896,174899,174916,174921,174925,174931,174944,174947,174984,174987,174998,175001,175015,175018,175032,175036,175043,175076,175079,175081,175087,175090,175094,175096,175102,175107,175280,175284,175347,175351,175375,175379,175403],[10,173256,173252],{"id":173257},"_9-异常模块与包",[14,173259,173261],{"id":173260},"_91-什么是异常","9.1 什么是异常",[19,173263,173264],{},"异常是程序运行过程中出现的错误。",[19,173266,173267],{},"常见异常：",[3619,173269,173270,173279],{},[3622,173271,173272],{},[3625,173273,173274,173277],{},[3628,173275,173276],{},"异常",[3628,173278,29181],{},[3665,173280,173281,173291,173301,173310,173320,173330,173340,173350],{},[3625,173282,173283,173288],{},[3670,173284,173285],{},[26,173286,173287],{},"NameError",[3670,173289,173290],{},"使用了未定义变量",[3625,173292,173293,173298],{},[3670,173294,173295],{},[26,173296,173297],{},"TypeError",[3670,173299,173300],{},"类型不匹配",[3625,173302,173303,173307],{},[3670,173304,173305],{},[26,173306,157403],{},[3670,173308,173309],{},"值不合法",[3625,173311,173312,173317],{},[3670,173313,173314],{},[26,173315,173316],{},"IndexError",[3670,173318,173319],{},"列表索引越界",[3625,173321,173322,173327],{},[3670,173323,173324],{},[26,173325,173326],{},"KeyError",[3670,173328,173329],{},"字典 key 不存在",[3625,173331,173332,173337],{},[3670,173333,173334],{},[26,173335,173336],{},"FileNotFoundError",[3670,173338,173339],{},"文件不存在",[3625,173341,173342,173347],{},[3670,173343,173344],{},[26,173345,173346],{},"ZeroDivisionError",[3670,173348,173349],{},"除数为 0",[3625,173351,173352,173357],{},[3670,173353,173354],{},[26,173355,173356],{},"ImportError",[3670,173358,173359],{},"导入失败",[19,173361,18457],{},[31,173363,173365],{"className":33679,"code":173364,"language":2323,"meta":36,"style":36},"num = int(\"abc\")\n",[26,173366,173367],{"__ignoreMap":36},[40,173368,173369,173371,173373,173375,173377,173379],{"class":42,"line":43},[40,173370,158356],{"class":50},[40,173372,1284],{"class":1283},[40,173374,5708],{"class":63},[40,173376,3488],{"class":50},[40,173378,158449],{"class":94},[40,173380,1811],{"class":50},[19,173382,173383,173384,776],{},"会触发 ",[26,173385,157403],{},[14,173387,173389],{"id":173388},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,173391,173392],{},"如果不处理异常，程序会直接终止。",[19,173394,173395],{},"例如用户输入年龄：",[31,173397,173399],{"className":33679,"code":173398,"language":2323,"meta":36,"style":36},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[26,173400,173401,173419],{"__ignoreMap":36},[40,173402,173403,173405,173407,173409,173411,173413,173415,173417],{"class":42,"line":43},[40,173404,149115],{"class":50},[40,173406,1284],{"class":1283},[40,173408,5708],{"class":63},[40,173410,3488],{"class":50},[40,173412,57119],{"class":63},[40,173414,3488],{"class":50},[40,173416,154963],{"class":94},[40,173418,33797],{"class":50},[40,173420,173421,173423],{"class":42,"line":54},[40,173422,33715],{"class":63},[40,173424,158330],{"class":50},[19,173426,173427,173428,173431],{},"用户输入 ",[26,173429,173430],{},"abc","，程序就会报错退出。",[19,173433,173434],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,173436,173438],{"id":173437},"_93-try-except","9.3 try except",[19,173440,173441],{},"基础语法：",[31,173443,173445],{"className":33679,"code":173444,"language":2323,"meta":36,"style":36},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[26,173446,173447,173454,173459,173466],{"__ignoreMap":36},[40,173448,173449,173452],{"class":42,"line":43},[40,173450,173451],{"class":1283},"try",[40,173453,332],{"class":50},[40,173455,173456],{"class":42,"line":54},[40,173457,173458],{"class":50},"    可能出错的代码\n",[40,173460,173461,173464],{"class":42,"line":70},[40,173462,173463],{"class":1283},"except",[40,173465,332],{"class":50},[40,173467,173468],{"class":42,"line":78},[40,173469,173470],{"class":50},"    出错后的处理代码\n",[19,173472,18457],{},[31,173474,173476],{"className":33679,"code":173475,"language":2323,"meta":36,"style":36},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[26,173477,173478,173484,173502,173508,173514],{"__ignoreMap":36},[40,173479,173480,173482],{"class":42,"line":43},[40,173481,173451],{"class":1283},[40,173483,332],{"class":50},[40,173485,173486,173488,173490,173492,173494,173496,173498,173500],{"class":42,"line":54},[40,173487,154955],{"class":50},[40,173489,1284],{"class":1283},[40,173491,5708],{"class":63},[40,173493,3488],{"class":50},[40,173495,57119],{"class":63},[40,173497,3488],{"class":50},[40,173499,154963],{"class":94},[40,173501,33797],{"class":50},[40,173503,173504,173506],{"class":42,"line":70},[40,173505,34599],{"class":63},[40,173507,158330],{"class":50},[40,173509,173510,173512],{"class":42,"line":78},[40,173511,173463],{"class":1283},[40,173513,332],{"class":50},[40,173515,173516,173518,173520,173523],{"class":42,"line":86},[40,173517,34599],{"class":63},[40,173519,3488],{"class":50},[40,173521,173522],{"class":94},"\"年龄必须是数字\"",[40,173524,1811],{"class":50},[19,173526,173527,173528,173530],{},"不建议裸写 ",[26,173529,173463],{},"，最好指定异常类型。",[31,173532,173534],{"className":33679,"code":173533,"language":2323,"meta":36,"style":36},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[26,173535,173536,173542,173560,173566,173574],{"__ignoreMap":36},[40,173537,173538,173540],{"class":42,"line":43},[40,173539,173451],{"class":1283},[40,173541,332],{"class":50},[40,173543,173544,173546,173548,173550,173552,173554,173556,173558],{"class":42,"line":54},[40,173545,154955],{"class":50},[40,173547,1284],{"class":1283},[40,173549,5708],{"class":63},[40,173551,3488],{"class":50},[40,173553,57119],{"class":63},[40,173555,3488],{"class":50},[40,173557,154963],{"class":94},[40,173559,33797],{"class":50},[40,173561,173562,173564],{"class":42,"line":70},[40,173563,34599],{"class":63},[40,173565,158330],{"class":50},[40,173567,173568,173570,173572],{"class":42,"line":78},[40,173569,173463],{"class":1283},[40,173571,154795],{"class":63},[40,173573,332],{"class":50},[40,173575,173576,173578,173580,173582],{"class":42,"line":86},[40,173577,34599],{"class":63},[40,173579,3488],{"class":50},[40,173581,173522],{"class":94},[40,173583,1811],{"class":50},[14,173585,173587],{"id":173586},"_94-捕获多个异常","9.4 捕获多个异常",[31,173589,173591],{"className":33679,"code":173590,"language":2323,"meta":36,"style":36},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[26,173592,173593,173599,173620,173640,173647,173655,173666,173675],{"__ignoreMap":36},[40,173594,173595,173597],{"class":42,"line":43},[40,173596,173451],{"class":1283},[40,173598,332],{"class":50},[40,173600,173601,173604,173606,173608,173610,173612,173614,173616,173618],{"class":42,"line":54},[40,173602,173603],{"class":50},"    nums ",[40,173605,1284],{"class":1283},[40,173607,55524],{"class":50},[40,173609,3698],{"class":63},[40,173611,15757],{"class":50},[40,173613,64],{"class":63},[40,173615,15757],{"class":50},[40,173617,3555],{"class":63},[40,173619,36546],{"class":50},[40,173621,173622,173625,173627,173629,173631,173633,173635,173638],{"class":42,"line":70},[40,173623,173624],{"class":50},"    index ",[40,173626,1284],{"class":1283},[40,173628,5708],{"class":63},[40,173630,3488],{"class":50},[40,173632,57119],{"class":63},[40,173634,3488],{"class":50},[40,173636,173637],{"class":94},"\"请输入索引:\"",[40,173639,33797],{"class":50},[40,173641,173642,173644],{"class":42,"line":78},[40,173643,34599],{"class":63},[40,173645,173646],{"class":50},"(nums[index])\n",[40,173648,173649,173651,173653],{"class":42,"line":86},[40,173650,173463],{"class":1283},[40,173652,154795],{"class":63},[40,173654,332],{"class":50},[40,173656,173657,173659,173661,173664],{"class":42,"line":100},[40,173658,34599],{"class":63},[40,173660,3488],{"class":50},[40,173662,173663],{"class":94},"\"索引必须是整数\"",[40,173665,1811],{"class":50},[40,173667,173668,173670,173673],{"class":42,"line":108},[40,173669,173463],{"class":1283},[40,173671,173672],{"class":63}," IndexError",[40,173674,332],{"class":50},[40,173676,173677,173679,173681,173684],{"class":42,"line":121},[40,173678,34599],{"class":63},[40,173680,3488],{"class":50},[40,173682,173683],{"class":94},"\"索引越界\"",[40,173685,1811],{"class":50},[19,173687,173688],{},"多个异常使用相同处理逻辑：",[31,173690,173692],{"className":33679,"code":173691,"language":2323,"meta":36,"style":36},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[26,173693,173694,173700,173718,173731,173745],{"__ignoreMap":36},[40,173695,173696,173698],{"class":42,"line":43},[40,173697,173451],{"class":1283},[40,173699,332],{"class":50},[40,173701,173702,173704,173706,173708,173710,173712,173714,173716],{"class":42,"line":54},[40,173703,48893],{"class":50},[40,173705,1284],{"class":1283},[40,173707,5708],{"class":63},[40,173709,3488],{"class":50},[40,173711,57119],{"class":63},[40,173713,3488],{"class":50},[40,173715,158365],{"class":94},[40,173717,33797],{"class":50},[40,173719,173720,173722,173724,173726,173728],{"class":42,"line":70},[40,173721,34599],{"class":63},[40,173723,3488],{"class":50},[40,173725,3925],{"class":63},[40,173727,158615],{"class":1283},[40,173729,173730],{"class":50}," num)\n",[40,173732,173733,173735,173737,173739,173741,173743],{"class":42,"line":78},[40,173734,173463],{"class":1283},[40,173736,4993],{"class":50},[40,173738,157403],{"class":63},[40,173740,15757],{"class":50},[40,173742,173346],{"class":63},[40,173744,34086],{"class":50},[40,173746,173747,173749,173751,173754],{"class":42,"line":86},[40,173748,34599],{"class":63},[40,173750,3488],{"class":50},[40,173752,173753],{"class":94},"\"输入不合法\"",[40,173755,1811],{"class":50},[14,173757,173759],{"id":173758},"_95-获取异常信息","9.5 获取异常信息",[31,173761,173763],{"className":33679,"code":173762,"language":2323,"meta":36,"style":36},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[26,173764,173765,173771,173785,173796],{"__ignoreMap":36},[40,173766,173767,173769],{"class":42,"line":43},[40,173768,173451],{"class":1283},[40,173770,332],{"class":50},[40,173772,173773,173775,173777,173779,173781,173783],{"class":42,"line":54},[40,173774,48893],{"class":50},[40,173776,1284],{"class":1283},[40,173778,5708],{"class":63},[40,173780,3488],{"class":50},[40,173782,158449],{"class":94},[40,173784,1811],{"class":50},[40,173786,173787,173789,173791,173793],{"class":42,"line":70},[40,173788,173463],{"class":1283},[40,173790,154795],{"class":63},[40,173792,67902],{"class":1283},[40,173794,173795],{"class":50}," e:\n",[40,173797,173798,173800,173802,173804,173807,173809,173811,173813,173815],{"class":42,"line":78},[40,173799,34599],{"class":63},[40,173801,3488],{"class":50},[40,173803,3537],{"class":1283},[40,173805,173806],{"class":94},"\"出错了:",[40,173808,4373],{"class":63},[40,173810,3558],{"class":50},[40,173812,4423],{"class":63},[40,173814,3731],{"class":94},[40,173816,1811],{"class":50},[19,173818,149026],{},[31,173820,173823],{"className":173821,"code":173822,"language":8510,"meta":36},[8508],"出错了:invalid literal for int() with base 10: 'abc'\n",[26,173824,173822],{"__ignoreMap":36},[14,173826,173828],{"id":173827},"_96-else和finally","9.6 else和finally",[19,173830,173831,173833],{},[26,173832,5032],{},"：没有异常时执行。",[19,173835,173836,173839],{},[26,173837,173838],{},"finally","：无论是否异常都会执行。",[31,173841,173843],{"className":33679,"code":173842,"language":2323,"meta":36,"style":36},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[26,173844,173845,173851,173869,173877,173887,173893,173914,173920],{"__ignoreMap":36},[40,173846,173847,173849],{"class":42,"line":43},[40,173848,173451],{"class":1283},[40,173850,332],{"class":50},[40,173852,173853,173855,173857,173859,173861,173863,173865,173867],{"class":42,"line":54},[40,173854,48893],{"class":50},[40,173856,1284],{"class":1283},[40,173858,5708],{"class":63},[40,173860,3488],{"class":50},[40,173862,57119],{"class":63},[40,173864,3488],{"class":50},[40,173866,158365],{"class":94},[40,173868,33797],{"class":50},[40,173870,173871,173873,173875],{"class":42,"line":70},[40,173872,173463],{"class":1283},[40,173874,154795],{"class":63},[40,173876,332],{"class":50},[40,173878,173879,173881,173883,173885],{"class":42,"line":78},[40,173880,34599],{"class":63},[40,173882,3488],{"class":50},[40,173884,155783],{"class":94},[40,173886,1811],{"class":50},[40,173888,173889,173891],{"class":42,"line":86},[40,173890,5032],{"class":1283},[40,173892,332],{"class":50},[40,173894,173895,173897,173899,173901,173904,173906,173908,173910,173912],{"class":42,"line":100},[40,173896,34599],{"class":63},[40,173898,3488],{"class":50},[40,173900,3537],{"class":1283},[40,173902,173903],{"class":94},"\"输入正确:",[40,173905,4373],{"class":63},[40,173907,5000],{"class":50},[40,173909,4423],{"class":63},[40,173911,3731],{"class":94},[40,173913,1811],{"class":50},[40,173915,173916,173918],{"class":42,"line":108},[40,173917,173838],{"class":1283},[40,173919,332],{"class":50},[40,173921,173922,173924,173926,173929],{"class":42,"line":121},[40,173923,34599],{"class":63},[40,173925,3488],{"class":50},[40,173927,173928],{"class":94},"\"程序结束\"",[40,173930,1811],{"class":50},[19,173932,173933,173935],{},[26,173934,173838],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,173937,173939],{"id":173938},"_97-抛出异常","9.7 抛出异常",[19,173941,173942],{},"程序可以主动抛出异常。",[31,173944,173946],{"className":33679,"code":173945,"language":2323,"meta":36,"style":36},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[26,173947,173948,173957,173969,173982,174002,174006,174010],{"__ignoreMap":36},[40,173949,173950,173952,173955],{"class":42,"line":43},[40,173951,35247],{"class":1283},[40,173953,173954],{"class":596}," set_age",[40,173956,163984],{"class":50},[40,173958,173959,173961,173963,173965,173967],{"class":42,"line":54},[40,173960,6425],{"class":1283},[40,173962,19029],{"class":50},[40,173964,4387],{"class":1283},[40,173966,7416],{"class":63},[40,173968,332],{"class":50},[40,173970,173971,173973,173975,173977,173980],{"class":42,"line":70},[40,173972,106723],{"class":1283},[40,173974,154795],{"class":63},[40,173976,3488],{"class":50},[40,173978,173979],{"class":94},"\"年龄不能为负数\"",[40,173981,1811],{"class":50},[40,173983,173984,173986,173988,173990,173992,173994,173996,173998,174000],{"class":42,"line":78},[40,173985,34599],{"class":63},[40,173987,3488],{"class":50},[40,173989,3537],{"class":1283},[40,173991,164552],{"class":94},[40,173993,4373],{"class":63},[40,173995,73517],{"class":50},[40,173997,4423],{"class":63},[40,173999,3731],{"class":94},[40,174001,1811],{"class":50},[40,174003,174004],{"class":42,"line":86},[40,174005,1413],{"emptyLinePlaceholder":1412},[40,174007,174008],{"class":42,"line":100},[40,174009,1413],{"emptyLinePlaceholder":1412},[40,174011,174012,174015,174017,174019],{"class":42,"line":108},[40,174013,174014],{"class":50},"set_age(",[40,174016,4011],{"class":1283},[40,174018,3698],{"class":63},[40,174020,1811],{"class":50},[19,174022,174023],{},"调用者可以捕获：",[31,174025,174027],{"className":33679,"code":174026,"language":2323,"meta":36,"style":36},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[26,174028,174029,174035,174046,174056],{"__ignoreMap":36},[40,174030,174031,174033],{"class":42,"line":43},[40,174032,173451],{"class":1283},[40,174034,332],{"class":50},[40,174036,174037,174040,174042,174044],{"class":42,"line":54},[40,174038,174039],{"class":50},"    set_age(",[40,174041,4011],{"class":1283},[40,174043,3698],{"class":63},[40,174045,1811],{"class":50},[40,174047,174048,174050,174052,174054],{"class":42,"line":70},[40,174049,173463],{"class":1283},[40,174051,154795],{"class":63},[40,174053,67902],{"class":1283},[40,174055,173795],{"class":50},[40,174057,174058,174060],{"class":42,"line":78},[40,174059,34599],{"class":63},[40,174061,70297],{"class":50},[14,174063,174065],{"id":174064},"_98-自定义异常","9.8 自定义异常",[31,174067,174069],{"className":33679,"code":174068,"language":2323,"meta":36,"style":36},"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",[26,174070,174071,174085,174089,174093,174097,174105,174115,174126,174136,174140,174144,174150,174167,174178],{"__ignoreMap":36},[40,174072,174073,174075,174078,174080,174083],{"class":42,"line":43},[40,174074,18016],{"class":1283},[40,174076,174077],{"class":596}," BalanceNotEnoughError",[40,174079,3488],{"class":50},[40,174081,174082],{"class":63},"Exception",[40,174084,34086],{"class":50},[40,174086,174087],{"class":42,"line":54},[40,174088,152106],{"class":1283},[40,174090,174091],{"class":42,"line":70},[40,174092,1413],{"emptyLinePlaceholder":1412},[40,174094,174095],{"class":42,"line":78},[40,174096,1413],{"emptyLinePlaceholder":1412},[40,174098,174099,174101,174103],{"class":42,"line":86},[40,174100,35247],{"class":1283},[40,174102,152755],{"class":596},[40,174104,165381],{"class":50},[40,174106,174107,174109,174111,174113],{"class":42,"line":100},[40,174108,6425],{"class":1283},[40,174110,152711],{"class":50},[40,174112,4437],{"class":1283},[40,174114,165158],{"class":50},[40,174116,174117,174119,174122,174124],{"class":42,"line":108},[40,174118,106723],{"class":1283},[40,174120,174121],{"class":50}," BalanceNotEnoughError(",[40,174123,152806],{"class":94},[40,174125,1811],{"class":50},[40,174127,174128,174130,174132,174134],{"class":42,"line":121},[40,174129,7413],{"class":1283},[40,174131,165388],{"class":50},[40,174133,4011],{"class":1283},[40,174135,152744],{"class":50},[40,174137,174138],{"class":42,"line":134},[40,174139,1413],{"emptyLinePlaceholder":1412},[40,174141,174142],{"class":42,"line":146},[40,174143,1413],{"emptyLinePlaceholder":1412},[40,174145,174146,174148],{"class":42,"line":154},[40,174147,173451],{"class":1283},[40,174149,332],{"class":50},[40,174151,174152,174154,174156,174159,174161,174163,174165],{"class":42,"line":162},[40,174153,165059],{"class":50},[40,174155,1284],{"class":1283},[40,174157,174158],{"class":50}," withdraw(",[40,174160,3791],{"class":63},[40,174162,15757],{"class":50},[40,174164,5053],{"class":63},[40,174166,1811],{"class":50},[40,174168,174169,174171,174174,174176],{"class":42,"line":170},[40,174170,173463],{"class":1283},[40,174172,174173],{"class":50}," BalanceNotEnoughError ",[40,174175,34683],{"class":1283},[40,174177,173795],{"class":50},[40,174179,174180,174182],{"class":42,"line":183},[40,174181,34599],{"class":63},[40,174183,70297],{"class":50},[19,174185,174186],{},"入门阶段大多数情况使用内置异常即可。",[14,174188,174190],{"id":174189},"_99-traceback","9.9 traceback",[19,174192,174193],{},"调试时可以输出完整异常堆栈。",[31,174195,174197],{"className":33679,"code":174196,"language":2323,"meta":36,"style":36},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[26,174198,174199,174206,174210,174216,174226,174234],{"__ignoreMap":36},[40,174200,174201,174203],{"class":42,"line":43},[40,174202,33692],{"class":1283},[40,174204,174205],{"class":50}," traceback\n",[40,174207,174208],{"class":42,"line":54},[40,174209,1413],{"emptyLinePlaceholder":1412},[40,174211,174212,174214],{"class":42,"line":70},[40,174213,173451],{"class":1283},[40,174215,332],{"class":50},[40,174217,174218,174220,174222,174224],{"class":42,"line":78},[40,174219,5311],{"class":63},[40,174221,3488],{"class":50},[40,174223,158449],{"class":94},[40,174225,1811],{"class":50},[40,174227,174228,174230,174232],{"class":42,"line":86},[40,174229,173463],{"class":1283},[40,174231,154795],{"class":63},[40,174233,332],{"class":50},[40,174235,174236],{"class":42,"line":100},[40,174237,174238],{"class":50},"    traceback.print_exc()\n",[19,174240,174241],{},"日志系统中常把异常堆栈记录到文件。",[14,174243,174245],{"id":174244},"_910-什么是模块","9.10 什么是模块",[19,174247,174248,174249,128552],{},"模块就是一个 ",[26,174250,148921],{},[19,174252,174253,174254,27933],{},"例如创建 ",[26,174255,174256],{},"my_math.py",[31,174258,174260],{"className":33679,"code":174259,"language":2323,"meta":36,"style":36},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[26,174261,174262,174270,174280,174284,174288,174297],{"__ignoreMap":36},[40,174263,174264,174266,174268],{"class":42,"line":43},[40,174265,35247],{"class":1283},[40,174267,8532],{"class":596},[40,174269,153662],{"class":50},[40,174271,174272,174274,174276,174278],{"class":42,"line":54},[40,174273,7413],{"class":1283},[40,174275,14191],{"class":50},[40,174277,3960],{"class":1283},[40,174279,153673],{"class":50},[40,174281,174282],{"class":42,"line":70},[40,174283,1413],{"emptyLinePlaceholder":1412},[40,174285,174286],{"class":42,"line":78},[40,174287,1413],{"emptyLinePlaceholder":1412},[40,174289,174290,174292,174295],{"class":42,"line":86},[40,174291,35247],{"class":1283},[40,174293,174294],{"class":596}," sub",[40,174296,153662],{"class":50},[40,174298,174299,174301,174303,174305],{"class":42,"line":100},[40,174300,7413],{"class":1283},[40,174302,14191],{"class":50},[40,174304,4011],{"class":1283},[40,174306,153673],{"class":50},[19,174308,174309],{},"在另一个文件中导入：",[31,174311,174313],{"className":33679,"code":174312,"language":2323,"meta":36,"style":36},"import my_math\n\nprint(my_math.add(1, 2))\n",[26,174314,174315,174322,174326],{"__ignoreMap":36},[40,174316,174317,174319],{"class":42,"line":43},[40,174318,33692],{"class":1283},[40,174320,174321],{"class":50}," my_math\n",[40,174323,174324],{"class":42,"line":54},[40,174325,1413],{"emptyLinePlaceholder":1412},[40,174327,174328,174330,174333,174335,174337,174339],{"class":42,"line":70},[40,174329,33715],{"class":63},[40,174331,174332],{"class":50},"(my_math.add(",[40,174334,3698],{"class":63},[40,174336,15757],{"class":50},[40,174338,64],{"class":63},[40,174340,33797],{"class":50},[14,174342,174344],{"id":174343},"_911-import导入","9.11 import导入",[402,174346,174348],{"id":174347},"_9111-导入模块","9.11.1 导入模块",[31,174350,174352],{"className":33679,"code":174351,"language":2323,"meta":36,"style":36},"import random\n\nprint(random.randint(1, 10))\n",[26,174353,174354,174360,174364],{"__ignoreMap":36},[40,174355,174356,174358],{"class":42,"line":43},[40,174357,33692],{"class":1283},[40,174359,48628],{"class":50},[40,174361,174362],{"class":42,"line":54},[40,174363,1413],{"emptyLinePlaceholder":1412},[40,174365,174366,174368,174371,174373,174375,174377],{"class":42,"line":70},[40,174367,33715],{"class":63},[40,174369,174370],{"class":50},"(random.randint(",[40,174372,3698],{"class":63},[40,174374,15757],{"class":50},[40,174376,3925],{"class":63},[40,174378,33797],{"class":50},[402,174380,174382],{"id":174381},"_9112-导入指定内容","9.11.2 导入指定内容",[31,174384,174386],{"className":33679,"code":174385,"language":2323,"meta":36,"style":36},"from random import randint\n\nprint(randint(1, 10))\n",[26,174387,174388,174399,174403],{"__ignoreMap":36},[40,174389,174390,174392,174394,174396],{"class":42,"line":43},[40,174391,34037],{"class":1283},[40,174393,61094],{"class":50},[40,174395,33692],{"class":1283},[40,174397,174398],{"class":50}," randint\n",[40,174400,174401],{"class":42,"line":54},[40,174402,1413],{"emptyLinePlaceholder":1412},[40,174404,174405,174407,174410,174412,174414,174416],{"class":42,"line":70},[40,174406,33715],{"class":63},[40,174408,174409],{"class":50},"(randint(",[40,174411,3698],{"class":63},[40,174413,15757],{"class":50},[40,174415,3925],{"class":63},[40,174417,33797],{"class":50},[402,174419,174421],{"id":174420},"_9113-起别名","9.11.3 起别名",[31,174423,174425],{"className":33679,"code":174424,"language":2323,"meta":36,"style":36},"import random as rd\n\nprint(rd.randint(1, 10))\n",[26,174426,174427,174438,174442],{"__ignoreMap":36},[40,174428,174429,174431,174433,174435],{"class":42,"line":43},[40,174430,33692],{"class":1283},[40,174432,61094],{"class":50},[40,174434,34683],{"class":1283},[40,174436,174437],{"class":50}," rd\n",[40,174439,174440],{"class":42,"line":54},[40,174441,1413],{"emptyLinePlaceholder":1412},[40,174443,174444,174446,174449,174451,174453,174455],{"class":42,"line":70},[40,174445,33715],{"class":63},[40,174447,174448],{"class":50},"(rd.randint(",[40,174450,3698],{"class":63},[40,174452,15757],{"class":50},[40,174454,3925],{"class":63},[40,174456,33797],{"class":50},[31,174458,174460],{"className":33679,"code":174459,"language":2323,"meta":36,"style":36},"from random import randint as rint\n\nprint(rint(1, 10))\n",[26,174461,174462,174478,174482],{"__ignoreMap":36},[40,174463,174464,174466,174468,174470,174473,174475],{"class":42,"line":43},[40,174465,34037],{"class":1283},[40,174467,61094],{"class":50},[40,174469,33692],{"class":1283},[40,174471,174472],{"class":50}," randint ",[40,174474,34683],{"class":1283},[40,174476,174477],{"class":50}," rint\n",[40,174479,174480],{"class":42,"line":54},[40,174481,1413],{"emptyLinePlaceholder":1412},[40,174483,174484,174486,174489,174491,174493,174495],{"class":42,"line":70},[40,174485,33715],{"class":63},[40,174487,174488],{"class":50},"(rint(",[40,174490,3698],{"class":63},[40,174492,15757],{"class":50},[40,174494,3925],{"class":63},[40,174496,33797],{"class":50},[402,174498,174500],{"id":174499},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[31,174502,174504],{"className":33679,"code":174503,"language":2323,"meta":36,"style":36},"from random import *\n",[26,174505,174506],{"__ignoreMap":36},[40,174507,174508,174510,174512,174514],{"class":42,"line":43},[40,174509,34037],{"class":1283},[40,174511,61094],{"class":50},[40,174513,33692],{"class":1283},[40,174515,174516],{"class":1283}," *\n",[19,174518,174519],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,174521,174523],{"id":174522},"_912-常用内置模块","9.12 常用内置模块",[402,174525,174527],{"id":174526},"_9121-random","9.12.1 random",[31,174529,174531],{"className":33679,"code":174530,"language":2323,"meta":36,"style":36},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[26,174532,174533,174539,174543,174557,174576],{"__ignoreMap":36},[40,174534,174535,174537],{"class":42,"line":43},[40,174536,33692],{"class":1283},[40,174538,48628],{"class":50},[40,174540,174541],{"class":42,"line":54},[40,174542,1413],{"emptyLinePlaceholder":1412},[40,174544,174545,174547,174549,174551,174553,174555],{"class":42,"line":70},[40,174546,33715],{"class":63},[40,174548,174370],{"class":50},[40,174550,3698],{"class":63},[40,174552,15757],{"class":50},[40,174554,3925],{"class":63},[40,174556,33797],{"class":50},[40,174558,174559,174561,174564,174566,174568,174570,174572,174574],{"class":42,"line":78},[40,174560,33715],{"class":63},[40,174562,174563],{"class":50},"(random.choice([",[40,174565,152457],{"class":94},[40,174567,15757],{"class":50},[40,174569,153505],{"class":94},[40,174571,15757],{"class":50},[40,174573,162300],{"class":94},[40,174575,36443],{"class":50},[40,174577,174578,174580,174583,174585,174587,174589,174591,174593,174595,174597,174599,174601,174603,174605],{"class":42,"line":86},[40,174579,33715],{"class":63},[40,174581,174582],{"class":50},"(random.sample([",[40,174584,3698],{"class":63},[40,174586,15757],{"class":50},[40,174588,64],{"class":63},[40,174590,15757],{"class":50},[40,174592,3555],{"class":63},[40,174594,15757],{"class":50},[40,174596,3773],{"class":63},[40,174598,15757],{"class":50},[40,174600,3799],{"class":63},[40,174602,115493],{"class":50},[40,174604,64],{"class":63},[40,174606,33797],{"class":50},[402,174608,174610],{"id":174609},"_9122-time","9.12.2 time",[31,174612,174614],{"className":33679,"code":174613,"language":2323,"meta":36,"style":36},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[26,174615,174616,174622,174626,174633,174641],{"__ignoreMap":36},[40,174617,174618,174620],{"class":42,"line":43},[40,174619,33692],{"class":1283},[40,174621,35129],{"class":50},[40,174623,174624],{"class":42,"line":54},[40,174625,1413],{"emptyLinePlaceholder":1412},[40,174627,174628,174630],{"class":42,"line":70},[40,174629,33715],{"class":63},[40,174631,174632],{"class":50},"(time.time())\n",[40,174634,174635,174637,174639],{"class":42,"line":78},[40,174636,98366],{"class":50},[40,174638,3698],{"class":63},[40,174640,1811],{"class":50},[40,174642,174643,174645,174647,174650],{"class":42,"line":86},[40,174644,33715],{"class":63},[40,174646,3488],{"class":50},[40,174648,174649],{"class":94},"\"1秒后执行\"",[40,174651,1811],{"class":50},[402,174653,174655],{"id":174654},"_9123-datetime","9.12.3 datetime",[31,174657,174659],{"className":33679,"code":174658,"language":2323,"meta":36,"style":36},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[26,174660,174661,174673,174677,174687,174694],{"__ignoreMap":36},[40,174662,174663,174665,174668,174670],{"class":42,"line":43},[40,174664,34037],{"class":1283},[40,174666,174667],{"class":50}," datetime ",[40,174669,33692],{"class":1283},[40,174671,174672],{"class":50}," datetime\n",[40,174674,174675],{"class":42,"line":54},[40,174676,1413],{"emptyLinePlaceholder":1412},[40,174678,174679,174682,174684],{"class":42,"line":70},[40,174680,174681],{"class":50},"now ",[40,174683,1284],{"class":1283},[40,174685,174686],{"class":50}," datetime.now()\n",[40,174688,174689,174691],{"class":42,"line":78},[40,174690,33715],{"class":63},[40,174692,174693],{"class":50},"(now)\n",[40,174695,174696,174698,174701,174704,174706,174709],{"class":42,"line":86},[40,174697,33715],{"class":63},[40,174699,174700],{"class":50},"(now.strftime(",[40,174702,174703],{"class":94},"\"%Y-%m-",[40,174705,159260],{"class":63},[40,174707,174708],{"class":94}," %H:%M:%S\"",[40,174710,33797],{"class":50},[402,174712,174714],{"id":174713},"_9124-os","9.12.4 os",[31,174716,174718],{"className":33679,"code":174717,"language":2323,"meta":36,"style":36},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[26,174719,174720,174726,174730,174737],{"__ignoreMap":36},[40,174721,174722,174724],{"class":42,"line":43},[40,174723,33692],{"class":1283},[40,174725,48605],{"class":50},[40,174727,174728],{"class":42,"line":54},[40,174729,1413],{"emptyLinePlaceholder":1412},[40,174731,174732,174734],{"class":42,"line":70},[40,174733,33715],{"class":63},[40,174735,174736],{"class":50},"(os.getcwd())\n",[40,174738,174739,174741,174744,174747],{"class":42,"line":78},[40,174740,33715],{"class":63},[40,174742,174743],{"class":50},"(os.listdir(",[40,174745,174746],{"class":94},"\".\"",[40,174748,33797],{"class":50},[402,174750,174752],{"id":174751},"_9125-sys","9.12.5 sys",[31,174754,174756],{"className":33679,"code":174755,"language":2323,"meta":36,"style":36},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[26,174757,174758,174765,174769,174776],{"__ignoreMap":36},[40,174759,174760,174762],{"class":42,"line":43},[40,174761,33692],{"class":1283},[40,174763,174764],{"class":50}," sys\n",[40,174766,174767],{"class":42,"line":54},[40,174768,1413],{"emptyLinePlaceholder":1412},[40,174770,174771,174773],{"class":42,"line":70},[40,174772,33715],{"class":63},[40,174774,174775],{"class":50},"(sys.version)\n",[40,174777,174778,174780],{"class":42,"line":78},[40,174779,33715],{"class":63},[40,174781,174782],{"class":50},"(sys.path)\n",[14,174784,174786,174787,174789,174790,3731],{"id":174785},"_913-if-name-main","9.13 if ",[409,174788,83105],{}," == \"",[409,174791,105349],{},[19,174793,174794,174795,174798],{},"模块被直接运行和被导入时，",[26,174796,174797],{},"__name__"," 的值不同。",[19,174800,174801,174802,27933],{},"创建 ",[26,174803,174804],{},"my_module.py",[31,174806,174808],{"className":33679,"code":174807,"language":2323,"meta":36,"style":36},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[26,174809,174810,174818,174828,174832,174836,174848],{"__ignoreMap":36},[40,174811,174812,174814,174816],{"class":42,"line":43},[40,174813,35247],{"class":1283},[40,174815,8532],{"class":596},[40,174817,153662],{"class":50},[40,174819,174820,174822,174824,174826],{"class":42,"line":54},[40,174821,7413],{"class":1283},[40,174823,14191],{"class":50},[40,174825,3960],{"class":1283},[40,174827,153673],{"class":50},[40,174829,174830],{"class":42,"line":70},[40,174831,1413],{"emptyLinePlaceholder":1412},[40,174833,174834],{"class":42,"line":78},[40,174835,1413],{"emptyLinePlaceholder":1412},[40,174837,174838,174840,174842,174844,174846],{"class":42,"line":86},[40,174839,4873],{"class":1283},[40,174841,34520],{"class":63},[40,174843,104850],{"class":1283},[40,174845,104853],{"class":94},[40,174847,332],{"class":50},[40,174849,174850,174852,174854,174856,174858,174860],{"class":42,"line":100},[40,174851,34599],{"class":63},[40,174853,169169],{"class":50},[40,174855,3698],{"class":63},[40,174857,15757],{"class":50},[40,174859,64],{"class":63},[40,174861,33797],{"class":50},[19,174863,174864],{},"作用：",[492,174866,174867,174870],{},[495,174868,174869],{},"直接运行该文件时，执行测试代码。",[495,174871,174872],{},"被其他文件导入时，不执行测试代码。",[19,174874,174875],{},"这是写模块时很常用的习惯。",[14,174877,174879],{"id":174878},"_914-包","9.14 包",[19,174881,174882,174883,174886],{},"包是包含 ",[26,174884,174885],{},"__init__.py"," 的目录，用于组织多个模块。",[19,174888,174889],{},"目录结构：",[31,174891,174894],{"className":174892,"code":174893,"language":8510,"meta":36},[8508],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[26,174895,174893],{"__ignoreMap":36},[19,174897,174898],{},"导入：",[31,174900,174902],{"className":33679,"code":174901,"language":2323,"meta":36,"style":36},"from utils.file_utils import read_file\n",[26,174903,174904],{"__ignoreMap":36},[40,174905,174906,174908,174911,174913],{"class":42,"line":43},[40,174907,34037],{"class":1283},[40,174909,174910],{"class":50}," utils.file_utils ",[40,174912,33692],{"class":1283},[40,174914,174915],{"class":50}," read_file\n",[19,174917,174918,174920],{},[26,174919,174885],{}," 可以为空，也可以写包初始化逻辑。",[14,174922,174924],{"id":174923},"_915-第三方包","9.15 第三方包",[19,174926,174927,174928,174930],{},"第三方包通过 ",[26,174929,27150],{}," 安装。",[31,174932,174934],{"className":27141,"code":174933,"language":27143,"meta":36,"style":36},"pip install requests\n",[26,174935,174936],{"__ignoreMap":36},[40,174937,174938,174940,174942],{"class":42,"line":43},[40,174939,27150],{"class":596},[40,174941,929],{"class":94},[40,174943,148667],{"class":94},[19,174945,174946],{},"使用：",[31,174948,174950],{"className":33679,"code":174949,"language":2323,"meta":36,"style":36},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[26,174951,174952,174958,174962,174977],{"__ignoreMap":36},[40,174953,174954,174956],{"class":42,"line":43},[40,174955,33692],{"class":1283},[40,174957,148667],{"class":50},[40,174959,174960],{"class":42,"line":54},[40,174961,1413],{"emptyLinePlaceholder":1412},[40,174963,174964,174967,174969,174972,174975],{"class":42,"line":70},[40,174965,174966],{"class":50},"response ",[40,174968,1284],{"class":1283},[40,174970,174971],{"class":50}," requests.get(",[40,174973,174974],{"class":94},"\"https:\u002F\u002Fwww.example.com\"",[40,174976,1811],{"class":50},[40,174978,174979,174981],{"class":42,"line":78},[40,174980,33715],{"class":63},[40,174982,174983],{"class":50},"(response.status_code)\n",[19,174985,174986],{},"查看已安装包：",[31,174988,174990],{"className":27141,"code":174989,"language":27143,"meta":36,"style":36},"pip list\n",[26,174991,174992],{"__ignoreMap":36},[40,174993,174994,174996],{"class":42,"line":43},[40,174995,27150],{"class":596},[40,174997,122239],{"class":94},[19,174999,175000],{},"导出项目依赖：",[31,175002,175003],{"className":27141,"code":148862,"language":27143,"meta":36,"style":36},[26,175004,175005],{"__ignoreMap":36},[40,175006,175007,175009,175011,175013],{"class":42,"line":43},[40,175008,27150],{"class":596},[40,175010,148871],{"class":94},[40,175012,29533],{"class":1283},[40,175014,148876],{"class":94},[19,175016,175017],{},"安装项目依赖：",[31,175019,175020],{"className":27141,"code":148882,"language":27143,"meta":36,"style":36},[26,175021,175022],{"__ignoreMap":36},[40,175023,175024,175026,175028,175030],{"class":42,"line":43},[40,175025,27150],{"class":596},[40,175027,929],{"class":94},[40,175029,122922],{"class":63},[40,175031,148876],{"class":94},[14,175033,175035],{"id":175034},"_916-模块搜索路径","9.16 模块搜索路径",[19,175037,175038,175039,175042],{},"Python 导入模块时会在 ",[26,175040,175041],{},"sys.path"," 中查找。",[31,175044,175046],{"className":33679,"code":175045,"language":2323,"meta":36,"style":36},"import sys\n\nfor path in sys.path:\n    print(path)\n",[26,175047,175048,175054,175058,175070],{"__ignoreMap":36},[40,175049,175050,175052],{"class":42,"line":43},[40,175051,33692],{"class":1283},[40,175053,174764],{"class":50},[40,175055,175056],{"class":42,"line":54},[40,175057,1413],{"emptyLinePlaceholder":1412},[40,175059,175060,175062,175065,175067],{"class":42,"line":70},[40,175061,6349],{"class":1283},[40,175063,175064],{"class":50}," path ",[40,175066,29355],{"class":1283},[40,175068,175069],{"class":50}," sys.path:\n",[40,175071,175072,175074],{"class":42,"line":78},[40,175073,34599],{"class":63},[40,175075,171798],{"class":50},[19,175077,175078],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,175080,160192],{},[31,175082,175085],{"className":175083,"code":175084,"language":8510,"meta":36},[8508],"random.py\njson.py\ntime.py\n",[26,175086,175084],{"__ignoreMap":36},[19,175088,175089],{},"这些文件名可能导致导入异常。",[14,175091,175093],{"id":175092},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,175095,174889],{},[31,175097,175100],{"className":175098,"code":175099,"language":8510,"meta":36},[8508],"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",[26,175101,175099],{"__ignoreMap":36},[19,175103,175104,27933],{},[26,175105,175106],{},"utils\u002Ffile_utils.py",[31,175108,175110],{"className":33679,"code":175109,"language":2323,"meta":36,"style":36},"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",[26,175111,175112,175118,175128,175132,175136,175146,175156,175164,175170,175174,175201,175211,175215,175219,175229,175255],{"__ignoreMap":36},[40,175113,175114,175116],{"class":42,"line":43},[40,175115,33692],{"class":1283},[40,175117,149660],{"class":50},[40,175119,175120,175122,175124,175126],{"class":42,"line":54},[40,175121,34037],{"class":1283},[40,175123,111602],{"class":50},[40,175125,33692],{"class":1283},[40,175127,111607],{"class":50},[40,175129,175130],{"class":42,"line":70},[40,175131,1413],{"emptyLinePlaceholder":1412},[40,175133,175134],{"class":42,"line":78},[40,175135,1413],{"emptyLinePlaceholder":1412},[40,175137,175138,175140,175143],{"class":42,"line":86},[40,175139,35247],{"class":1283},[40,175141,175142],{"class":596}," read_json",[40,175144,175145],{"class":50},"(path):\n",[40,175147,175148,175151,175153],{"class":42,"line":100},[40,175149,175150],{"class":50},"    path ",[40,175152,1284],{"class":1283},[40,175154,175155],{"class":50}," Path(path)\n",[40,175157,175158,175160,175162],{"class":42,"line":108},[40,175159,6425],{"class":1283},[40,175161,42230],{"class":1283},[40,175163,171879],{"class":50},[40,175165,175166,175168],{"class":42,"line":121},[40,175167,18074],{"class":1283},[40,175169,55136],{"class":50},[40,175171,175172],{"class":42,"line":134},[40,175173,1413],{"emptyLinePlaceholder":1412},[40,175175,175176,175178,175180,175183,175185,175187,175189,175191,175193,175195,175197,175199],{"class":42,"line":146},[40,175177,37478],{"class":1283},[40,175179,149360],{"class":63},[40,175181,175182],{"class":50},"(path, ",[40,175184,149370],{"class":94},[40,175186,15757],{"class":50},[40,175188,149375],{"class":8539},[40,175190,1284],{"class":1283},[40,175192,149380],{"class":94},[40,175194,17036],{"class":50},[40,175196,34683],{"class":1283},[40,175198,150722],{"class":8539},[40,175200,332],{"class":50},[40,175202,175203,175205,175207,175209],{"class":42,"line":154},[40,175204,18074],{"class":1283},[40,175206,150733],{"class":50},[40,175208,48654],{"class":8539},[40,175210,1811],{"class":50},[40,175212,175213],{"class":42,"line":162},[40,175214,1413],{"emptyLinePlaceholder":1412},[40,175216,175217],{"class":42,"line":170},[40,175218,1413],{"emptyLinePlaceholder":1412},[40,175220,175221,175223,175226],{"class":42,"line":183},[40,175222,35247],{"class":1283},[40,175224,175225],{"class":596}," write_json",[40,175227,175228],{"class":50},"(path, data):\n",[40,175230,175231,175233,175235,175237,175239,175241,175243,175245,175247,175249,175251,175253],{"class":42,"line":196},[40,175232,37478],{"class":1283},[40,175234,149360],{"class":63},[40,175236,175182],{"class":50},[40,175238,154545],{"class":94},[40,175240,15757],{"class":50},[40,175242,149375],{"class":8539},[40,175244,1284],{"class":1283},[40,175246,149380],{"class":94},[40,175248,17036],{"class":50},[40,175250,34683],{"class":1283},[40,175252,150722],{"class":8539},[40,175254,332],{"class":50},[40,175256,175257,175260,175262,175264,175266,175268,175270,175272,175274,175276,175278],{"class":42,"line":204},[40,175258,175259],{"class":50},"        json.dump(data, ",[40,175261,48654],{"class":8539},[40,175263,15757],{"class":50},[40,175265,149706],{"class":8539},[40,175267,1284],{"class":1283},[40,175269,37287],{"class":63},[40,175271,15757],{"class":50},[40,175273,154581],{"class":8539},[40,175275,1284],{"class":1283},[40,175277,64],{"class":63},[40,175279,1811],{"class":50},[19,175281,175282,27933],{},[26,175283,157176],{},[31,175285,175287],{"className":33679,"code":175286,"language":2323,"meta":36,"style":36},"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",[26,175288,175289,175300,175304,175317,175337],{"__ignoreMap":36},[40,175290,175291,175293,175295,175297],{"class":42,"line":43},[40,175292,34037],{"class":1283},[40,175294,174910],{"class":50},[40,175296,33692],{"class":1283},[40,175298,175299],{"class":50}," read_json, write_json\n",[40,175301,175302],{"class":42,"line":54},[40,175303,1413],{"emptyLinePlaceholder":1412},[40,175305,175306,175308,175310,175313,175315],{"class":42,"line":70},[40,175307,162285],{"class":50},[40,175309,1284],{"class":1283},[40,175311,175312],{"class":50}," read_json(",[40,175314,154400],{"class":94},[40,175316,1811],{"class":50},[40,175318,175319,175321,175323,175325,175327,175329,175331,175333,175335],{"class":42,"line":78},[40,175320,173103],{"class":50},[40,175322,65977],{"class":94},[40,175324,60],{"class":50},[40,175326,152457],{"class":94},[40,175328,15757],{"class":50},[40,175330,154041],{"class":94},[40,175332,60],{"class":50},[40,175334,4466],{"class":63},[40,175336,167721],{"class":50},[40,175338,175339,175342,175344],{"class":42,"line":86},[40,175340,175341],{"class":50},"write_json(",[40,175343,154400],{"class":94},[40,175345,175346],{"class":50},", students)\n",[14,175348,175350],{"id":175349},"_918-易错点","9.18 易错点",[492,175352,175353,175356,175361,175366,175369,175372],{},[495,175354,175355],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[495,175357,175358,175359,776],{},"能指定异常类型就不要裸写 ",[26,175360,173463],{},[495,175362,175363,175365],{},[26,175364,173838],{}," 无论是否出错都会执行。",[495,175367,175368],{},"模块文件名不要和标准库重名。",[495,175370,175371],{},"导入自己写的模块时，要注意运行目录。",[495,175373,175374],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,175376,175378],{"id":175377},"_919-本章练习","9.19 本章练习",[492,175380,175381,175384,175387,175393,175400],{},[495,175382,175383],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[495,175385,175386],{},"写函数读取文件，如果文件不存在则返回空字符串。",[495,175388,174801,175389,175392],{},[26,175390,175391],{},"math_utils.py","，实现加减乘除函数并导入使用。",[495,175394,175395,175396,175399],{},"创建一个 ",[26,175397,175398],{},"utils"," 包，把 JSON 读写函数放进去。",[495,175401,175402],{},"写一个程序，捕获除零异常和输入格式异常。",[3384,175404,175405],{},"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":36,"searchDepth":54,"depth":54,"links":175407},[175408,175409,175410,175411,175412,175413,175414,175415,175416,175417,175418,175424,175431,175433,175434,175435,175436,175437,175438],{"id":173260,"depth":54,"text":173261},{"id":173388,"depth":54,"text":173389},{"id":173437,"depth":54,"text":173438},{"id":173586,"depth":54,"text":173587},{"id":173758,"depth":54,"text":173759},{"id":173827,"depth":54,"text":173828},{"id":173938,"depth":54,"text":173939},{"id":174064,"depth":54,"text":174065},{"id":174189,"depth":54,"text":174190},{"id":174244,"depth":54,"text":174245},{"id":174343,"depth":54,"text":174344,"children":175419},[175420,175421,175422,175423],{"id":174347,"depth":70,"text":174348},{"id":174381,"depth":70,"text":174382},{"id":174420,"depth":70,"text":174421},{"id":174499,"depth":70,"text":174500},{"id":174522,"depth":54,"text":174523,"children":175425},[175426,175427,175428,175429,175430],{"id":174526,"depth":70,"text":174527},{"id":174609,"depth":70,"text":174610},{"id":174654,"depth":70,"text":174655},{"id":174713,"depth":70,"text":174714},{"id":174751,"depth":70,"text":174752},{"id":174785,"depth":54,"text":175432},"9.13 if name == \"main\"",{"id":174878,"depth":54,"text":174879},{"id":174923,"depth":54,"text":174924},{"id":175034,"depth":54,"text":175035},{"id":175092,"depth":54,"text":175093},{"id":175349,"depth":54,"text":175350},{"id":175377,"depth":54,"text":175378},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":173252,"description":3413},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":175445,"title":175446,"body":175447,"description":175610,"extension":3414,"meta":175611,"navigation":1412,"path":175612,"seo":175613,"stem":175614,"__hash__":175615},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":175448,"toc":175605},[175449,175452,175455,175458,175469,175471,175545,175548,175551,175554,175557,175560,175563,175566,175569,175572,175575],[10,175450,175446],{"id":175451},"python教程",[19,175453,175454],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,175456,175457],{},"建议学习环境：",[492,175459,175460,175463,175466],{},[495,175461,175462],{},"Python 版本：Python 3.10 及以上。",[495,175464,175465],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[495,175467,175468],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,175470,120369],{"id":120369},[492,175472,175473,175479,175485,175491,175497,175503,175509,175515,175521,175527,175533,175539],{},[495,175474,175475],{},[2106,175476,175478],{"href":175477},".\u002Fch1-Python","Python环境与第一个程序",[495,175480,175481],{},[2106,175482,175484],{"href":175483},".\u002Fch2","基础语法、变量与字符串",[495,175486,175487],{},[2106,175488,175490],{"href":175489},".\u002Fch3","判断语句",[495,175492,175493],{},[2106,175494,175496],{"href":175495},".\u002Fch4","循环语句",[495,175498,175499],{},[2106,175500,175502],{"href":175501},".\u002Fch5","函数基础",[495,175504,175505],{},[2106,175506,175508],{"href":175507},".\u002Fch6","数据容器",[495,175510,175511],{},[2106,175512,175514],{"href":175513},".\u002Fch7","函数进阶",[495,175516,175517],{},[2106,175518,175520],{"href":175519},".\u002Fch8","文件操作",[495,175522,175523],{},[2106,175524,175526],{"href":175525},".\u002Fch9","异常、模块与包",[495,175528,175529],{},[2106,175530,175532],{"href":175531},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[495,175534,175535],{},[2106,175536,175538],{"href":175537},".\u002Fch11","面向对象基础",[495,175540,175541],{},[2106,175542,175544],{"href":175543},".\u002Fch12","综合案例与复习路线",[14,175546,175547],{"id":175547},"学习路线",[19,175549,175550],{},"第一阶段：能运行程序。",[19,175552,175553],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,175555,175556],{},"第二阶段：能组织数据。",[19,175558,175559],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,175561,175562],{},"第三阶段：能封装逻辑。",[19,175564,175565],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,175567,175568],{},"第四阶段：能做小项目。",[19,175570,175571],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,175573,175574],{"id":175574},"参考资料",[492,175576,175577,175584,175591,175598],{},[495,175578,175579,175580],{},"黑马程序员 Python 入门教程推荐：",[2106,175581,175582],{"href":175582,"rel":175583},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[2110],[495,175585,175586,175587],{},"Python 官方中文教程：",[2106,175588,175589],{"href":175589,"rel":175590},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[2110],[495,175592,175593,175594],{},"Python 标准库文档：",[2106,175595,175596],{"href":175596,"rel":175597},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[2110],[495,175599,175600,175601],{},"pyecharts 文档：",[2106,175602,175603],{"href":175603,"rel":175604},"https:\u002F\u002Fpyecharts.org\u002F",[2110],{"title":36,"searchDepth":54,"depth":54,"links":175606},[175607,175608,175609],{"id":120369,"depth":54,"text":120369},{"id":175547,"depth":54,"text":175547},{"id":175574,"depth":54,"text":175574},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":26698},"\u002Fwiki\u002F2024-10-10-python",{"title":175446,"description":175610},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331466031]